Created
October 8, 2022 09:50
-
-
Save LintaoAmons/22f6184b26bd5b93d8fe9f9276f50f75 to your computer and use it in GitHub Desktop.
Popup terminal with tmux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ... your other config | |
| bind-key -n M-3 run-shell 'toggle-tmux-popup' | |
| # you can switch `M-3` to any keybindings you like. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # 👻 put this file into your $PATH, normally `~/.local/bin/toggle-tmux-popup` | |
| # 👻 this script should have runable permission. | |
| if [ "$(tmux display-message -p -F "#{session_name}")" = "popup" ];then | |
| tmux detach-client | |
| else | |
| tmux popup -d '#{pane_current_path}' -xC -yC -w80% -h75% -E "tmux attach -t popup || tmux new -s popup" | |
| fi |
I found that popup tmux session cannot share clipboard in copy-mode-vi.
Does someone know what the problem and how to solve it?
bind-key -T copy-mode-vi y send-keys -X copy-pipe 'tmux save-buffer - | wl-copy'
@gogongxt It works fine on my machine. I have the following in my .tmux.conf:
# Be more like Vim in copy-mode-vi
bind-key -T copy-mode-vi y send-keys -X copy-pipe 'xclip -i -selection clipboard'
bind-key -T copy-mode-vi Y send-keys -X copy-pipe-end-of-line 'xclip -i -selection clipboard'
bind-key -T copy-mode-vi v if-shell -F '#{selection_active}' { send-keys -X clear-selection } { send-keys -X begin-selection }Just want to share my config, this will open and cd to the current directory of the active pane, silently:
# popuptmux
#!/bin/sh
set -e
width=${1:-63%}
height=${2:-75%}
SESSION_NAME="popup"
CURRENT_PANE="$(tmux display-message -p -F "#{session_name}")"
if echo "$CURRENT_PANE" | grep -q '^popup.*'; then
tmux detach-client
else
current_path=$(tmux display-message -p -F "#{pane_current_path}")
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
tmux setenv -t "$SESSION_NAME" POPUP_PATH "$current_path"
PANE_CMD=$(tmux display-message -t "$SESSION_NAME" -p -F "#{pane_current_command}")
case "$PANE_CMD" in
*sh)
PANE_PID=$(tmux display-message -t "$SESSION_NAME" -p -F "#{pane_pid}")
kill -USR1 "$PANE_PID" 2>/dev/null || true
;;
*)
# If running something else (vim), do nothing
;;
esac
tmux popup -d "$current_path" -xC -yC -w$width -h$height -E "tmux attach -t $SESSION_NAME"
else
tmux popup -d "$current_path" -xC -yC -w$width -h$height -E "tmux new -s $SESSION_NAME -c \"$current_path\""
fi
fi
# .zshrc
_popup_auto_cd() {
[[ -n "$TMUX" ]] || return
local cmd_out
cmd_out=$(tmux show-environment POPUP_PATH 2>/dev/null)
[[ -n "$cmd_out" ]] || return
local target_path="${cmd_out#POPUP_PATH=}"
if [[ -d "$target_path" && "$target_path" != "$PWD" ]]; then
builtin cd "$target_path"
if [[ -o zle ]]; then
zle reset-prompt
fi
fi
tmux set-environment -u POPUP_PATH
}
TRAPUSR1() {
_popup_auto_cd
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Pop-up windows based on the current directory name.