"Right Click > Open In Terminal" 如果我在每次启动新 shell 会话时激活 tmux,则不起作用
"Right Click > Open In Terminal" Does not work if I activate tmux whenever I start a new shell session
我正在使用 Linux Mint 20 Ulyana, Cinnamon 4.6.6
每当我开始新的 shell 会话时,我都使用以下代码激活 tmux。
function tmux-as-default-terminal () {
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
tmux attach -t default || tmux new -s default
fi
}
tmux-as-default-terminal
但是,它有一个小问题。当我右键单击一个目录并单击“在终端中打开”时,它不会打开该路径。相反,它只是打开之前的 tmux 会话。
这里可以做什么?
更新 1
我发现 tmux new-session -c $PWD
在当前目录中打开一个新的 tmux 会话。
tmux attach -t 0 -c $PWD \; new-window \;
附加到现有会话并使用当前目录打开一个新的 window。
这些信息对于解决这个难题可能很重要。
更新 2
从Is it possible to send input to a tmux session without connecting to it?我发现我可以使用
$ tmux new -d -s mySession
$ tmux send-keys -t mySession.0 "^U"
$ tmux send-keys -t mySession.0 "cd /tmp" ENTER
$ tmux a -t mySession
cd 到当前会话中的目录。
更新 3
附加一些条件的解决方案
function tmux-as-default-terminal () {
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]
then
if tmux has-session -t default
then
tmux send-keys -t default.0 "^U"
tmux send-keys -t default.0 "cd $PWD &> /dev/null" ENTER
tmux send-keys -t default.0 "^L"
tmux attach-session -t default.0
else
tmux new-session -s default -c $PWD
fi
fi
}
tmux-as-default-terminal
可以,只要我不同时打开多个终端。
OP在这里。对于每个 tmux 客户端,它将创建一个新会话。
function tmux-as-default-terminal () {
if command -v tmux &> /dev/null && [[ ! "$TERM" =~ screen ]]
then
notmuxsession=$(tmux list-clients | wc -l)
# notmuxsession=$(ps -e | grep "tmux: client" | wc -l)
# notmuxsession=$(tmux ls | cut -d: -f1 | grep "default.*" | wc -l)
if tmux has-session -t default${notmuxsession}
then
# tmux send-keys -t default${notmuxsession}:!.! "^U"
tmux send-keys -t default${notmuxsession}:1.1 "^U"
tmux send-keys -t default${notmuxsession}:1.1 "cd $PWD &> /dev/null" ENTER
tmux send-keys -t default${notmuxsession}:1.1 "^L"
tmux attach-session -t default${notmuxsession}:1.1
else
tmux new-session -s default${notmuxsession} -c $PWD
fi
fi
}
tmux-as-default-terminal
默认情况下您将附加到哪个 tmux 会话,取决于打开的客户端数量。
我正在使用 Linux Mint 20 Ulyana, Cinnamon 4.6.6
每当我开始新的 shell 会话时,我都使用以下代码激活 tmux。
function tmux-as-default-terminal () {
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
tmux attach -t default || tmux new -s default
fi
}
tmux-as-default-terminal
但是,它有一个小问题。当我右键单击一个目录并单击“在终端中打开”时,它不会打开该路径。相反,它只是打开之前的 tmux 会话。
这里可以做什么?
更新 1
我发现 tmux new-session -c $PWD
在当前目录中打开一个新的 tmux 会话。
tmux attach -t 0 -c $PWD \; new-window \;
附加到现有会话并使用当前目录打开一个新的 window。
这些信息对于解决这个难题可能很重要。
更新 2
从Is it possible to send input to a tmux session without connecting to it?我发现我可以使用
$ tmux new -d -s mySession
$ tmux send-keys -t mySession.0 "^U"
$ tmux send-keys -t mySession.0 "cd /tmp" ENTER
$ tmux a -t mySession
cd 到当前会话中的目录。
更新 3
附加一些条件的解决方案
function tmux-as-default-terminal () {
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]
then
if tmux has-session -t default
then
tmux send-keys -t default.0 "^U"
tmux send-keys -t default.0 "cd $PWD &> /dev/null" ENTER
tmux send-keys -t default.0 "^L"
tmux attach-session -t default.0
else
tmux new-session -s default -c $PWD
fi
fi
}
tmux-as-default-terminal
可以,只要我不同时打开多个终端。
OP在这里。对于每个 tmux 客户端,它将创建一个新会话。
function tmux-as-default-terminal () {
if command -v tmux &> /dev/null && [[ ! "$TERM" =~ screen ]]
then
notmuxsession=$(tmux list-clients | wc -l)
# notmuxsession=$(ps -e | grep "tmux: client" | wc -l)
# notmuxsession=$(tmux ls | cut -d: -f1 | grep "default.*" | wc -l)
if tmux has-session -t default${notmuxsession}
then
# tmux send-keys -t default${notmuxsession}:!.! "^U"
tmux send-keys -t default${notmuxsession}:1.1 "^U"
tmux send-keys -t default${notmuxsession}:1.1 "cd $PWD &> /dev/null" ENTER
tmux send-keys -t default${notmuxsession}:1.1 "^L"
tmux attach-session -t default${notmuxsession}:1.1
else
tmux new-session -s default${notmuxsession} -c $PWD
fi
fi
}
tmux-as-default-terminal
默认情况下您将附加到哪个 tmux 会话,取决于打开的客户端数量。