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