私は通常、ワークステーション上で複数のアプリケーションを実行しています。通常、私は必要 VIM
、Google Chrome
そしてTerminal
メールクライアント、IM、VLC など、必ずしも必要ではないその他のアプリケーションもあります。
VIM
必要なアプリケーションに1 つのショートカット (たとえば、Ctrl+ Shift+ V)だけで切り替えることができれば非常に便利です。
どうすればそれを達成できるのでしょうか?
答え1
これは、irssi でこれを行うために使用するスクリプトです。tmux セッション内で使用するため、追加のロジックが含まれていますが、一部の部分は適用可能です。実際には、SSH 経由でリモートで動作させ、新しい irssi メッセージの GUI 通知を制御するコードも含まれていますが、わかりやすくするために、そのコード (使用方法の説明や引数の処理を含む) を削除しました。デバッグprintf
ステートメントをいくつか残しています。
#!/bin/sh
# Locally raise/attach/start irssi session.
#
# Designed for use with tmux and irssi.
TMUX="/usr/bin/tmux"
TERMINAL="/usr/bin/urxvtc"
IRSSI="/usr/bin/irssi"
WINDOWNAME="irssi"
SESSIONNAME=${WINDOWNAME}
tty -s && TTY=true || TTY=false
ttyprint()
{
${TTY} && printf -- '%s: %s\n' "${0##*/}" "${1}"
}
start_irssi()
{
ttyprint 'Starting irssi...'
if ( ${TMUX} new-session -d -s "${SESSIONNAME}" "${IRSSI}" && ${TMUX} rename-window -t "${SESSIONNAME}:0" "${SESSIONNAME}" ); then
ttyprint ' done.'
return 0
else
ttyprint ' failed.'
return 1
fi
}
attach_irssi()
{
if ${TTY}; then
ttyprint 'Attaching irssi...'
if printf -- '\033]0;%s\007' ${WINDOWNAME} && ${TMUX} attach-session -t "${SESSIONNAME}"; then
ttyprint ' done.'
return 0
else
ttyprint ' failed.'
return 1
fi
elif ${TERMINAL} -title "${WINDOWNAME}" -e ${TMUX} attach-session -t "${SESSIONNAME}"; then
return 0
else
return 1
fi
}
raise_irssi()
{
ttyprint 'Searching for available session...'
if WID=$(xdotool search --limit 1 --name "^${WINDOWNAME}$"); then
ttyprint ' found, activating.'
xdotool windowactivate "${WID}"
return 0
else
ttyprint ' not found.'
return 1
fi
}
! raise_irssi && ! attach_irssi && start_irssi && attach_irssi
簡単に言うと、xdotool ( xdotool
Debian のパッケージ:) を使用して、タイトルが「irssi」のウィンドウを検索し、そのウィンドウをアクティブにします。ウィンドウ名以外のプロパティも検索できます。それらのプロパティの方がニーズに合う場合は、それらを使用します。
私は、端末を最初に起動するときに「irssi」という名前を付けるために、ちょっとした「トリック」を使用しています (printf
のステートメントを参照attach_irssi()
)。
最後の行は
- 既存のターミナルセッションを起動し、見つからない場合は
- 既存の
tmux
セッションを添付し、見つからない場合は - セッションを開始
tmux
し、 - 添付してください。
Mod4このスクリプトを+にバインドしますI(これをどのように行うかはウィンドウ マネージャーによって異なります)。
少し努力すれば、これをあなたのケースに適用できるはずです。
編集:attach_irssi
具体的には、tmux または GNU Screen を使用しない場合は、関数全体を削除できます。SSH 経由で実行したり、irssi プラグインとして実行したりしない場合は、TTY
ロジックを簡単に破棄できます。非常に凝縮すると、これは tmux なしで irssi で動作します (ただし、テストされていません)。
#!/bin/sh
TERMINAL="/usr/bin/urxvtc"
IRSSI="/usr/bin/irssi"
WINDOWNAME="irssi"
SESSIONNAME=${WINDOWNAME}
start_irssi()
{
${TERMINAL} -title "${WINDOWNAME}" -e "${IRSSI}"
}
raise_irssi()
{
if WID=$(xdotool search --limit 1 --name "^${WINDOWNAME}$"); then
xdotool windowactivate "${WID}"
return 0
else
return 1
fi
}
! raise_irssi && start_irssi
答え2
gconf-editor がまだインストールされていない場合:
sudo apt-get install gconf-editor
次に、通常のユーザーとして起動します (ショートカットはユーザーごとの設定です)。
gconf-editor
プレースホルダー コマンドの 1 つを使用して必要な操作を実行するので、次の場所に移動します。
apps > metacity > keybinding_commands
選択しcommand_1
て編集し、選択したコマンドを起動します。
/usr/bin/vim
次に
apps > metacity > global_keybindings
command_1
使用したいキーの値を見つけて変更します。
<Control><Alt>v
(Control-Shift-V は貼り付けによく使用され、Control-V は他の用途に使用されるため、これを Control-Alt-V に変更しました)。
答え3
@Daniel_Andersson の回答に基づいて、これは Firefox ウィンドウを表示するためにキーボード ショートカットにバインドしたスクリプトです (切り替える前にどの画面にいたかを簡単に忘れてしまうため、マウスをその上に移動させます)。
#!/bin/bash
if WIDS=$(xdotool search --name 'Firefox$'); then
for WID in $WIDS
do
if $(xwininfo -id $WID | grep -q IsViewable)
then
xdotool windowactivate "${WID}" mousemove --window "${WID}" 50 50
break
fi
done
else
notify-send "Firefox not running"
fi
Firefox は常に で複数の結果を返すためxdotools
、実際のウィンドウである結果を見つける必要があります。私は、xwininfo
(パッケージx11-utils
) が便利なIsViewable
フラグを返すことを発見しました。このフラグを使用して、最初の表示可能なウィンドウを見つけます。notify-send
(パッケージlibnotify-bin
) は当然オプションであり、非アクティブな場合は Firefox セッションを開始することもできます (@Daniel_Andersson のスクリプトを参照)。