如何设置仅在Yakuake、Konsole等终端启动时默认打开tmux,排除Dolphin文件管理器中的终端
如何设置仅在Yakuake、Konsole等终端启动时默认打开tmux,排除Dolphin文件管理器中的终端
我来帮你解决这个问题!之前你用xdotool判断窗口名称的思路遇到了时机问题——当终端刚启动时,窗口还没完全成为活动窗口,xdotool会拿到上一个激活的窗口,这就是你测试时看到Sublime Text名称的原因,这个思路本身就有局限性。
其实我们可以换个更可靠的方向:通过判断终端的父进程来区分是不是Dolphin内置的终端。Dolphin里的终端,它的父进程就是Dolphin本身;而Yakuake、Konsole这类独立启动的终端,父进程是它们自己或者KDE Plasma相关进程,完全和Dolphin不沾边,用这个逻辑判断会准确很多。
你只需要把这段代码放到你的~/.zshrc里,就能实现需求:
if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then if [[ ! "$(readlink -f /proc/${PPID}/exe)" =~ "dolphin" ]]; then exec tmux fi fi
简单解释下代码里的判断条件:
[[ -x "$(command -v tmux)" ]]:先确认系统里已经安装了可执行的tmux[[ -n "${DISPLAY}" ]]:确保是在图形界面环境下(避免在无GUI的远程会话或tty里误触发)[[ -z "${TMUX}" ]]:保证当前没有已经在tmux会话里(防止无限嵌套启动tmux)[[ ! "$(readlink -f /proc/${PPID}/exe)" =~ "dolphin" ]]:核心判断——读取当前shell父进程的可执行文件路径,如果不是Dolphin,就启动tmux
这个方法完全避开了窗口激活时机的坑,判断逻辑更稳定准确,完美实现你要的效果:独立启动的Yakuake、Konsole默认打开tmux,Dolphin内置的终端则跳过tmux启动。
备注:内容来源于stack exchange,提问作者Pelican Cyber
相关产品推荐
相关产品推荐

