一些程序,例如。firefox
,允许有多个实例。虽然,这在某些情况下很有用(例如新xterm
实例),但我通常最终会得到大量的数据。
是否可以配置哪些程序必须只有一个实例?
答案1
我主要使用键盘快捷键启动 GUI 应用程序,对于我只需要一个实例的应用程序,我将这些快捷键指向一个包装器,该包装器要么为我提供最后一个正在运行的实例(并将该窗口放在前面),要么创建一个新实例如果没有的话。
我有:
洛内夫:
#!/bin/sh -e
#lastof or new -- try lastof and give me a new instance if it failed
cmd=$1; shift
lastof "$cmd" || exec "$cmd" "$@"
拉斯托夫:
#!/bin/sh -e
#give me the last used instance of the GUI app matching $@
results=$(xdotool search "$@")
result=$(echo "$results" |
while read -r id; do echo "$(xprop -id $id '_NET_WM_USER_TIME')" "$id"; done |
sed -n 's/.*= //p' |sort -n |
tail -1| cut -d\ -f2
)
[ -n "$result" ] || result=$(echo "$results" | tail -1)
exec xdotool windowactivate "$result"
举个例子,我启动终端模拟器的快捷方式设置是:
Ctrl+Alt+K : lonew konsole
Ctrl+Shift+Alt+K : konsole #force a new instance
一些应用程序(例如 Banshee 或 Thunderbird)可以自行有效地管理这一单一实例,但我发现为其提供一个“做一件事并做好它”的独立解决方案很方便,我可以将其包装在我想要的任何应用程序中。想。
依赖项:xprop、xdotool