Terminal

辨識終端是否在guake中打開

  • September 20, 2020

我需要檢查.vimrc打開 vim 的終端是否在 Guake 中執行。我怎麼能看到這個?$TERM變數似乎不太對…

沒有萬無一失的方法。TERM對大多數兼容的模擬器使用相同的值;除了 screen 和 tmux 報告之外,大多數現代終端仿真器xterm

您可以瀏覽程序列表以找到 Vim 的父級的父級。這將告訴你 Vim 在哪個終端仿真器(如果有)中執行,這是從直接在終端仿真器中啟動的 shell 啟動 Vim 的常見情況。你甚至可以更聰明一點,遍歷程序列表,從 Vim 到它的父程序,然後是它的父程序的父程序,依此類推,當你發現一個程序與其子程序不在同一個終端上執行時停止:程序可能是一個終端仿真器。

這種啟發式方法可以通過多種方式被愚弄——特別是因為可以(儘管不常見)從任何地方啟動程序並通過重定向其輸入和輸出使其在另一個終端中互動。

這是一個經過輕微測試的腳本,它顯示了目前程序正在執行的終端模擬器的命令行,假設該程序作為該終端模擬器的後代啟動,沒有重定向惡作劇。

#! /bin/sh
set -f
pid=$PPID
my_tty=$(ps -p $$ -o tty=)
while
 [ "$pid" -ne 1 ] &&
 set -- $(ps -p "$pid" -o ppid= -o tty= -o args=) &&
 [ "$2" = "$my_tty" ]
do
 pid=$1
done
shift; shift
printf '%s\n' "$*"

呼叫這個腳本which-terminal-emulator。在您的.vimrc中,您可以添加

let terminal_emulator=system('which-terminal-emulator')
if terminal_emulator =~ '.*guake.*$'
 …
endif

引用自:https://unix.stackexchange.com/questions/170428