特定のアプリケーションのウィンドウを開くためのショートカットをバインドする

特定のアプリケーションのウィンドウを開くためのショートカットをバインドする

私は通常、ワークステーション上で複数のアプリケーションを実行しています。通常、私は必要 VIMGoogle 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 ( xdotoolDebian のパッケージ:) を使用して、タイトルが「irssi」のウィンドウを検索し、そのウィンドウをアクティブにします。ウィンドウ名以外のプロパティも検索できます。それらのプロパティの方がニーズに合う場合は、それらを使用します。

私は、端末を最初に起動するときに「irssi」という名前を付けるために、ちょっとした「トリック」を使用しています (printfのステートメントを参照attach_irssi())。

最後の行は

  1. 既存のターミナルセッションを起動し、見つからない場合は
  2. 既存のtmuxセッションを添付し、見つからない場合は
  3. セッションを開始tmuxし、
  4. 添付してください。

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 のスクリプトを参照)。

関連情報