mirror of
https://github.com/DefectingCat/dotfiles
synced 2025-07-16 01:01:36 +00:00
add new backup for tmux
This commit is contained in:
@ -17,6 +17,9 @@ backup_folder ~/.config/rua-scripts ./ ./rua-scripts
|
|||||||
backup_folder ~/.config/lazygit ./ ./lazygit/
|
backup_folder ~/.config/lazygit ./ ./lazygit/
|
||||||
# tmux
|
# tmux
|
||||||
backup_folder ~/.tmux/tmux.conf ./tmux/tmux.conf ./tmux/tmux.conf
|
backup_folder ~/.tmux/tmux.conf ./tmux/tmux.conf ./tmux/tmux.conf
|
||||||
|
backup_folder ~/.tmux/renew_env.sh ./tmux/renew_env.sh ./tmux/renew_env.sh
|
||||||
|
backup_folder ~/.tmux/tmux.remote.conf ./tmux/tmux.remote.conf ./tmux/tmux.remote.conf
|
||||||
|
backup_folder ~/.tmux/yank.sh ./tmux/yank.sh ./tmux/yank.sh
|
||||||
|
|
||||||
if [[ $OSTYPE == "linux"* ]]; then
|
if [[ $OSTYPE == "linux"* ]]; then
|
||||||
# hyprland
|
# hyprland
|
||||||
|
12
tmux/renew_env.sh
Executable file
12
tmux/renew_env.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
pane_fmt="#{pane_id} #{pane_in_mode} #{pane_input_off} #{pane_dead} #{pane_current_command}"
|
||||||
|
tmux list-panes -s -F "$pane_fmt" | awk '
|
||||||
|
$2 == 0 && $3 == 0 && $4 == 0 && $5 ~ /(bash|zsh|ksh|fish)/ { print $1 }
|
||||||
|
' | while read -r pane_id; do
|
||||||
|
# renew environment variables according to update-environment tmux option
|
||||||
|
# also clear screen
|
||||||
|
tmux send-keys -t "$pane_id" 'Enter' 'eval "$(tmux show-env -s)"' 'Enter' 'C-l'
|
||||||
|
done;
|
10
tmux/tmux.remote.conf
Normal file
10
tmux/tmux.remote.conf
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# show status bar at bottom for remote session,
|
||||||
|
# so it do not stack together with local session's one
|
||||||
|
set -g status-position bottom
|
||||||
|
|
||||||
|
# Set port of SSH remote tunnel, where tmux will pipe buffers to transfer on local machine for copy
|
||||||
|
set -g @copy_backend_remote_tunnel_port 11988
|
||||||
|
|
||||||
|
# In remote mode we don't show "clock" and "battery status" widgets
|
||||||
|
set -g status-left "$wg_session"
|
||||||
|
set -g status-right "#{prefix_highlight} $wg_is_keys_off $wg_is_zoomed #{sysstat_cpu} | #{sysstat_mem} | #{sysstat_loadavg} | $wg_user_host | #{online_status}"
|
68
tmux/yank.sh
Executable file
68
tmux/yank.sh
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
is_app_installed() {
|
||||||
|
type "$1" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# get data either form stdin or from file
|
||||||
|
buf=$(cat "$@")
|
||||||
|
|
||||||
|
copy_backend_remote_tunnel_port=$(tmux show-option -gvq "@copy_backend_remote_tunnel_port")
|
||||||
|
copy_use_osc52_fallback=$(tmux show-option -gvq "@copy_use_osc52_fallback")
|
||||||
|
|
||||||
|
# Resolve copy backend: pbcopy (OSX), reattach-to-user-namespace (OSX), xclip/xsel (Linux)
|
||||||
|
copy_backend=""
|
||||||
|
if is_app_installed pbcopy; then
|
||||||
|
copy_backend="pbcopy"
|
||||||
|
elif is_app_installed reattach-to-user-namespace; then
|
||||||
|
copy_backend="reattach-to-user-namespace pbcopy"
|
||||||
|
elif [ -n "${DISPLAY-}" ] && is_app_installed xsel; then
|
||||||
|
copy_backend="xsel -i --clipboard"
|
||||||
|
elif [ -n "${DISPLAY-}" ] && is_app_installed xclip; then
|
||||||
|
copy_backend="xclip -i -f -selection primary | xclip -i -selection clipboard"
|
||||||
|
elif [ -n "${copy_backend_remote_tunnel_port-}" ] \
|
||||||
|
&& (netstat -f inet -nl 2>/dev/null || netstat -4 -nl 2>/dev/null) \
|
||||||
|
| grep -q "[.:]$copy_backend_remote_tunnel_port"; then
|
||||||
|
copy_backend="nc localhost $copy_backend_remote_tunnel_port"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if copy backend is resolved, copy and exit
|
||||||
|
if [ -n "$copy_backend" ]; then
|
||||||
|
printf "%s" "$buf" | eval "$copy_backend"
|
||||||
|
exit;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# If no copy backends were eligible, decide to fallback to OSC 52 escape sequences
|
||||||
|
# Note, most terminals do not handle OSC
|
||||||
|
if [ "$copy_use_osc52_fallback" == "off" ]; then
|
||||||
|
exit;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy via OSC 52 ANSI escape sequence to controlling terminal
|
||||||
|
buflen=$( printf %s "$buf" | wc -c )
|
||||||
|
|
||||||
|
# https://sunaku.github.io/tmux-yank-osc52.html
|
||||||
|
# The maximum length of an OSC 52 escape sequence is 100_000 bytes, of which
|
||||||
|
# 7 bytes are occupied by a "\033]52;c;" header, 1 byte by a "\a" footer, and
|
||||||
|
# 99_992 bytes by the base64-encoded result of 74_994 bytes of copyable text
|
||||||
|
maxlen=74994
|
||||||
|
|
||||||
|
# warn if exceeds maxlen
|
||||||
|
if [ "$buflen" -gt "$maxlen" ]; then
|
||||||
|
printf "input is %d bytes too long" "$(( buflen - maxlen ))" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build up OSC 52 ANSI escape sequence
|
||||||
|
esc="\033]52;c;$( printf %s "$buf" | head -c $maxlen | base64 | tr -d '\r\n' )\a"
|
||||||
|
esc="\033Ptmux;\033$esc\033\\"
|
||||||
|
|
||||||
|
# resolve target terminal to send escape sequence
|
||||||
|
# if we are on remote machine, send directly to SSH_TTY to transport escape sequence
|
||||||
|
# to terminal on local machine, so data lands in clipboard on our local machine
|
||||||
|
pane_active_tty=$(tmux list-panes -F "#{pane_active} #{pane_tty}" | awk '$1=="1" { print $2 }')
|
||||||
|
target_tty="${SSH_TTY:-$pane_active_tty}"
|
||||||
|
|
||||||
|
printf "$esc" > "$target_tty"
|
@ -7,6 +7,7 @@ alias icat="kitty +kitten icat"
|
|||||||
alias kssh="kitty +kitten ssh"
|
alias kssh="kitty +kitten ssh"
|
||||||
alias ll="ls -lhtr"
|
alias ll="ls -lhtr"
|
||||||
# Environmental variables
|
# Environmental variables
|
||||||
|
export EDITOR="nvim"
|
||||||
# node
|
# node
|
||||||
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
|
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
|
||||||
export NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
|
export NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
|
||||||
|
Reference in New Issue
Block a user