bash スクリプトへのカスタム キーボード ショートカットが機能しない

bash スクリプトへのカスタム キーボード ショートカットが機能しない

私は emacs ユーザーであり、いくつかの emacs 設定ファイルを作成しました。

私はクライアントサーバーemacsの機能を1つだけ使用bashスクリプトこれは、emacs サーバーとクライアントを処理します。スクリプトはサーバーを実行し (まだ実行されていない場合)、その後、目的のフレーム (ターミナルまたはグラフィック) でクライアントを実行します。

実行可能スクリプトを にソフトリンクして/usr/bin/emacs(デフォルトを上書きして)、emacsコマンドを実行すると自動的に実行されるようにしました。 コマンドはemacs、 だけでなくターミナルからもスクリプトを起動するようになりましたAlt+F2。 問題は、同じコマンド(またはスクリプト)にキーボード ショートカットをバインドしても機能しないことです。

ショートカットのスクリーンショットをここに添付します。 ここに画像の説明を入力してください

シェルスクリプトはここ

PS: キーボード ショートカットは、/usr/bin/emacsデフォルトの emacs 実行可能ファイル (/etc/alternatives/emacs私の場合は at) にリンクされている場合は正常に実行されます。

答え1

問題を再現してみましたが、ほぼ解決できたと思います。

あなたが直面している問題は、if [[ -t 1 ]]病状に関するものだと分かりました。

によるとTLDP

このテスト オプションは、指定されたスクリプト内の stdin [ -t 0 ] または stdout [ -t 1 ] が端末であるかどうかを確認するために使用できます。

したがって、スクリプトはこの条件を介してそれを呼び出したプログラムを検出できません。したがって、これは問題に対する正確な解決策ではありません。

さて、Ubuntuの内部では、キーバインディングは偽のターミナルを介して実行されます。実際、TERM変数は次のように設定されています。バカキーバインド経由のコマンドが実行されるとき。

したがって、問題を解決するには、次のコードを使用できます。

if [ $TERM == "dumb" ]
then
        TERMINAL=false
        CREATE="-c"
else
        TERMINAL=true
        CREATE="-nw"
fi

すべてのケースで機能するとは保証できませんが、説明した使用法では機能します。お
役に立てば幸いです。:)

関連情報