penguin/utils

my env utils

commit 31cb7831a556f7015c40e592e2444fdc37cd6ed2

author斟酌 鵬兄 <tgckpg@gmail.com>
date2026-09-06T12:14:57Z
subjectUse a separate instance for clipboard server
commit 31cb7831a556f7015c40e592e2444fdc37cd6ed2
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2026-09-06T12:14:57Z

    Use a separate instance for clipboard server
---
 bash/dist/rbashrc                |  2 +-
 bash/dist/rbashrc.asc            | 10 +++++-----
 bash/dist/sources.list           |  4 ++--
 bash/sources/12_shortcuts        | 36 ++++++++++++++++++++++++++++++++++++
 bash/sources/42_clipboard_server | 37 ++++++++++++++++++++++---------------
 5 files changed, 66 insertions(+), 23 deletions(-)

diff --git a/bash/dist/rbashrc b/bash/dist/rbashrc
index d5623ad..9b5ea98 100755
--- a/bash/dist/rbashrc
+++ b/bash/dist/rbashrc
@@ -18,7 +18,7 @@ RBASH_CONFIG="$RBASH_HOME/config"
 RBASH_ENV="$RBASH_HOME/env"
 RBASH_MERGED="$RBASH_CACHE_DIR/merged"
 RBASH_BIN="$RBASH_HOME/bin"
-RBASH_SOURCES_SUM="c7b59b606495091d7995fe38dd132890af9e9cefa342b3e35dc92f7ce4dae3ef"
+RBASH_SOURCES_SUM="9538ea4aca229a315a4620a01009a8c8df4c533b9be2e8f1f45d70fd39e317a1"
 
 
 # ---- rbash: bash/core/00_env.bash ----
diff --git a/bash/dist/rbashrc.asc b/bash/dist/rbashrc.asc
index 1fa7e4d..e362fad 100644
--- a/bash/dist/rbashrc.asc
+++ b/bash/dist/rbashrc.asc
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNATURE-----
 
-iJEEABYKADkWIQR8HpSNhBJUxWnt+97Vz1+xz60nwwUCan7FAhsUgAAAAAAEAA5t
-YW51MiwyLjUrMS4xMiwwLDMACgkQ1c9fsc+tJ8MRAAD8DSxV2gCyyhicV9pmhCnQ
-AHyPJ8wLyanxixxLGIduBM4BAIJq2iILLTdpNEx6zmasVusLr1N+Crq0KYoibbcX
-ZokH
-=zX0d
+iJEEABYKADkWIQR8HpSNhBJUxWnt+97Vz1+xz60nwwUCap1Y/xsUgAAAAAAEAA5t
+YW51MiwyLjUrMS4xMiwwLDMACgkQ1c9fsc+tJ8MQtwD/UwuflS0jQPfNw6BZ81MZ
+FVejgKSNmJXMYg8ilQbvM7sBAMzhIXBqZWIMHYXT2ZjXqWqbek/j+1YDqv7nBDnA
+EEMJ
+=EJpP
 -----END PGP SIGNATURE-----
diff --git a/bash/dist/sources.list b/bash/dist/sources.list
index 66b6af8..327c5ad 100644
--- a/bash/dist/sources.list
+++ b/bash/dist/sources.list
@@ -1,5 +1,5 @@
 c4b84e73ff9c54631cb24131082e0c15eb53b6fbff47429a0a24aea65c002c52  sources/10_aliases
-e50644286373408263ce5a6f455bf967585a767cce055e67423bd33fdafeab9f  sources/12_shortcuts
+2067876e42a47a6f864e9182fe91408fa213c5539fc3fba119a22ea6d2dc5fda  sources/12_shortcuts
 043a103f7602304732b37c8219ba4f74bc8af37278fc6d2f63d642ef9a29a6fe  sources/13_shortcuts_macos
 3340cf44a97771e6839e03443e8276c25804e0918c0415b1ffe0112d060cee2d  sources/14_shortcuts_greps
 a0d62f10f39fa988d8ff8ce13a1751488e6bad1662c3b97ab8ef3fa09c702666  sources/15_gpg-agent
@@ -13,5 +13,5 @@ b5a488efc0558e2b795a1558e2c91a8aeecc3fd441d437aff3a4749d5eb0bdfc  sources/23_win
 5dbc166ce1b051b54d244ef5dc6b52dfbff03965e9abb0ed891d441dffbf8a76  sources/31_git-utils
 c9c270376844e7c7e3c48b1e86c2ce3e7824dde64e8724c17c5fc95910abd11c  sources/40_go-command
 c0e8ef70466063907b5ed9e52c13532b0019b8cb5975d020899804549a76a37f  sources/41_pivot-command
-6815db1a12f540804a4ddb592905b43f53aca494d835e9e4afe3854db7f22416  sources/42_clipboard_server
+412a6bff08ccd2fdaf8a484cf67c5a0a8f56067388f3bbde9e3af742c167a0f9  sources/42_clipboard_server
 d02be2a68e8bd1f7e5adacbdd0bdc4f426aabfa1a57709270b673617db6c5352  sources/60_diagnostics
diff --git a/bash/sources/12_shortcuts b/bash/sources/12_shortcuts
index f081cc4..20afd0f 100755
--- a/bash/sources/12_shortcuts
+++ b/bash/sources/12_shortcuts
@@ -38,3 +38,39 @@ function pwgen {
 		echo
 	fi
 }
+
+# Markdown
+function mdtable {
+	awk '
+	BEGIN {
+		FS = "\\|"
+	}
+
+	/^\+-[-+]+\+$/ {
+		next
+	}
+
+	/^[[:space:]]*\([0-9]+ rows?\)[[:space:]]*$/ {
+		next
+	}
+
+	NF > 1 {
+		for (i = 1; i <= NF; i++) {
+			gsub(/^[[:space:]]+|[[:space:]]+$/, "", $i)
+			gsub(/\|/, "\\|", $i)
+		}
+
+		printf "|"
+		for (i = 1; i <= NF; i++)
+			printf " %s |", $i
+		printf "\n"
+
+		if (!header_done) {
+			printf "|"
+			for (i = 1; i <= NF; i++)
+				printf " --- |"
+			printf "\n"
+			header_done = 1
+		}
+	}'
+}
diff --git a/bash/sources/42_clipboard_server b/bash/sources/42_clipboard_server
index 2b64c6c..ca7683b 100644
--- a/bash/sources/42_clipboard_server
+++ b/bash/sources/42_clipboard_server
@@ -117,29 +117,36 @@ function stop_clipboard_server {
 		"$SSH_CLIPBOARD_PASTE_PIDFILE"
 }
 
-
-function clipboard_server_config {
-	cat <<EOF
-RemoteForward $SSH_CLIPBOARD_REMOTE_COPY_SOCKET $SSH_CLIPBOARD_COPY_SOCKET
-RemoteForward $SSH_CLIPBOARD_REMOTE_PASTE_SOCKET $SSH_CLIPBOARD_PASTE_SOCKET
-StreamLocalBindUnlink yes
-ExitOnForwardFailure yes
-EOF
-}
-
-
 function sshc {
 	init_clipboard_server || return
 
+	local control_socket="/tmp/sshc-%C.sock"
+
+	if ! command ssh \
+		-S "$control_socket" \
+		-O check \
+		"$@" \
+		>/dev/null 2>&1
+	then
+		echo "-- starting clipboard ssh tunnel"
+
+		command ssh \
+			-M \
+			-S "$control_socket" \
+			-o ControlPersist=10 \
+			-fN \
+			-R "$SSH_CLIPBOARD_REMOTE_COPY_SOCKET:$SSH_CLIPBOARD_COPY_SOCKET" \
+			-R "$SSH_CLIPBOARD_REMOTE_PASTE_SOCKET:$SSH_CLIPBOARD_PASTE_SOCKET" \
+			"$@" || return
+	fi
+
 	echo "-- ssh with clipboard server"
 
 	command ssh \
-		-R "$SSH_CLIPBOARD_REMOTE_COPY_SOCKET:$SSH_CLIPBOARD_COPY_SOCKET" \
-		-R "$SSH_CLIPBOARD_REMOTE_PASTE_SOCKET:$SSH_CLIPBOARD_PASTE_SOCKET" \
+		-S "$control_socket" \
 		"$@"
 }
 
-
 function pbcopy {
 	if [ -n "${SSH_CLIPBOARD_REMOTE_COPY_SOCKET:-}" ] &&
 		[ -S "$SSH_CLIPBOARD_REMOTE_COPY_SOCKET" ]; then
@@ -227,4 +234,4 @@ fi
 
 if [ -n "${SSH_CONNECTION:-}" ]; then
 	trap cleanup_ssh_clipboard EXIT HUP TERM
-fi
\ No newline at end of file
+fi