端末コマンドのキーボードショートカットを作成する方法


14

私は頻繁にgitを使用しており、コマンドのキーボードショートカットを設定できるiTerm2が大好きでした。たとえば、CTRL+ ENTERをに設定しgit statusます。

これはgnome-terminalで可能ですか、またはこれを達成するために別のオプションを推奨できますか?

回答:


16

bind -xBashのコマンドをショートカットにバインドするために使用できます。たとえば、git statusコマンドをCrtl+ pショートカットにバインドするには、次を使用できます。

 bind -x '"\C-p":git status'

それ~/.bashrcを覚えておくためにファイルに入れてください。manページから:

-x keyseq:shell-command

keyseqが入力されるたびにシェルコマンドが実行されるようにします。shell-commandが実行されると、シェルはREADLINE_LINE変数をReadline行バッファーの内容に設定し、READLINE_POINT変数を挿入ポイントの現在の位置に設定します。実行されたコマンドがREADLINE_LINEまたはREADLINE_POINTの値を変更すると、それらの新しい値が編集状態に反映されます。


驚くばかり。私はzshを使用していますが、それにはbindkeyと呼ばれる同等のものがあります。だから私がやりたいことを達成するために、私はこれをしました: bindkey -s '^[^M' 'git status\n'Alt + Enterにバインドします。
mniess

1
bind -x '"\C-k":firefox'私はこれを使用しますが機能しません
-alhelal

1
これはシェルで動作しますが、私はいつも時間が欲しいです。
-alhelal

~/.bashrcファイルの最後に配置します。それでも動作しない場合は、これを
-Nykakin

使用上の詳細情報はbindここで見つけることができます:stackoverflow.com/a/4201274/712334
ジョシュHabdas

2

1.新しいターミナルウィンドウを自動的に開き、コマンドの出力を表示します

コマンドの実行後、ターミナルを開いたままにする必要があるため、次のように入力します。

gnome-terminal -e 'bash -c "git status; read line"'

ショートカットキーの組み合わせの下で、仕事をします。新しい gnome-terminalウィンドウを開き、その中でコマンドを実行します。

ショートカットに追加します

[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。

gnome-terminal -e 'bash -c "git status; read line"'

Ctrl+Enter

注意

推奨されるショートカットは機能しますが、少なくとも新しいページにジャンプするためのショートカットと衝突するため、別のキーの組み合わせCtrl+を選択できます。EnterLibreOffice

説明

gnome-terminalコマンドラインから新しいウィンドウを開いて、そのウィンドウでコマンドを実行するには、次を使用できます。

gnome-terminal -e 'bash -c <command>'

ただし、コマンドは正常に実行されますが、出力を読み取る前にターミナルウィンドウがすぐに閉じます。

セクション:

read line

次にEnter、コマンドの実行後(ヒットするまで)ターミナルを開いたままにします。

その他のコマンド

これにより、ターミナルで(複雑な)コマンドをすぐに実行せずに実行できます。

$ gnome-terminal -e 'bash -c "wmctrl -d; read line"'

出力wmctrlされます(インストールされている場合):

ここに画像の説明を入力してください

Enter端末を押すと閉じます。

2.現在アクティブなgnome-terminalウィンドウでコマンドを実行する

もちろん、あなたは可能性が(あなたがしていると仮定すると、ショートカットキーの下に簡単なワンライナーを置くxdotoolインストール):

xdotool type "<command>"

ただし、これはどのアプリケーションでコマンドを盲目的入力し、コマンドを入力することは最もクリーンなオプションではありません。

したがって、以下の小さなスクリプト:

  • アクティブなウィンドウがウィンドウであるかどうかを調べgnome-terminalます(そのpidによる)
  • その場合、コマンドをアクティブウィンドウに貼り付けgnome-terminal、を押しReturnます。
    そうでない場合、スクリプトは何も実行しないため、他のアプリケーションに貼り付けられません。

スクリプトはターゲットのコマンドを引数として取るため、複数のショートカットの下に複数のコマンドを配置できます。

スクリプト

#!/usr/bin/env python3
import subprocess
import sys
import time

app = "gnome-terminal"
s = (" ").join(sys.argv[1:])

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def front(app):
    try:
        # see if gnome-terminal is running at all (raising error if not)
        app = get(["pgrep", app]) 
    except subprocess.CalledProcessError:
        app = False
    if app:
        # if so, see if the active window belongs to gnome-terminal comparing pids)
        active = get(["xdotool", "getwindowpid", get(["xdotool", "getactivewindow"])])
        return True if app == active else False

if front(app):
    # copy command to clipboard
    cm1 = ["/bin/bash", "-c", 'printf "'+s+'" | xclip -selection clipboard']
    # paste in terminal window
    cm2 = ["xdotool", "key", "Control_L+Shift_L+v"]
    # press return
    cm3 = ["xdotool", "key", "Return"]
    for cm in [cm1, cm2, cm3]:
        subprocess.call(cm)

使い方

  1. スクリプトが必要 xdotool

    sudo apt-get install xdotool

  2. ディレクトリ~/binがまだ存在しない場合は、ログアウト/ログインするか実行してください。source ~/.profile

  3. 上記のスクリプトを空のファイルにコピーし、gterm_keys(拡張子なし)として保存し~/bin実行可能にします

これで、コマンドを追加して、最前面のウィンドウでショートカットキーから任意のコマンドを実行できますgnome-terminal

gterm_keys <command>

ショートカットキーに [1]


こんにちは、ジェイコブ、答えてくれてありがとう。しかし、バインド(およびバインドキー)ソリューションはシェル組み込みであるため、より優れていると思います。そうすれば、Libreofficeで誤って「git status」を書くことはありません。;)
ニース

@mniess答えは良いものであることに同意しますが、記録のために、私の答えを注意深く読んで、LibreOfficeで印刷すると、それは起こりえません。しかし、あなたはただ投票したのですか?? それは陽気です。
ジェイコブVlijm

スクリプトは実行中のアプリをチェックします。私は投票しませんでした。コメントを書いて、このような詳細な回答を書いてくれてありがとうございます。
mniess

@mniessああ、結論に飛びついてすみません!2つは完全に同期して発生しました。あなたではなかったことがうれしいです。「ちょうど」私は気にしません。
ジェイコブVlijm

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.