Skip to content

Instantly share code, notes, and snippets.

@LintaoAmons
Created October 8, 2022 09:50
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save LintaoAmons/22f6184b26bd5b93d8fe9f9276f50f75 to your computer and use it in GitHub Desktop.
Save LintaoAmons/22f6184b26bd5b93d8fe9f9276f50f75 to your computer and use it in GitHub Desktop.
Popup terminal with tmux
# ... your other config
bind-key -n M-3 run-shell 'toggle-tmux-popup'
# you can switch `M-3` to any keybindings you like.
#!/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
@q962
Copy link

q962 commented Oct 11, 2022

bind-key -n M-3 run-shell -b "\
    if test 1 -eq #{==:#{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\
"

@q962
Copy link

q962 commented Oct 12, 2022

session 独立 popup window

# alt-3 弹出 popup
bind-key -n M-3 run-shell -b '\
    popup_id="popup_$(tmux display-message -p "##{session_id}" | cut -d"\$" -f2)"; \
    if test "$(echo #{session_name} | cut -d"_" -f 1)" = "popup" ; then \
        tmux detach-client; \
    else \
        tmux popup -d "#{pane_current_path}" -xC -yC -w80% -h75% \
            -E "tmux attach -t \"${popup_id}\" || tmux new -s \"${popup_id}\" "; \
    fi; \
'

@bfrg
Copy link

bfrg commented Nov 6, 2022

There's no need to use run-shell, the if-check can be done using the if-shell command with the -F option. The above snippet simplified:

# Toggle popup window with Alt-3
bind-key -n -N 'Toggle popup window' M-3 if-shell -F '#{==:#{session_name},popup}' {
    detach-client
} {
    display-popup -d "#{pane_current_path}" -xC -yC -w 80% -h 75% -E 'tmux attach-session -t popup || tmux new-session -s popup'
}

This is also significantly more readable. Though, I think it requires a more recent tmux version.

@guanghechen
Copy link

@LintaoAmons the -A option can auto create new session if it's not exist.

#! /usr/bin/env bash

tmux_popup_session_name="_popup"

if [ "$(tmux display-message -p -F "#{session_name}")" = "${tmux_popup_session_name}" ];then
    tmux detach-client
else
    tmux popup -d '#{pane_current_path}' -xC -yC -w80% -h80% -E\
      "tmux new-session -A -s ${tmux_popup_session_name}"
fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment