2017-05-24 1 views
0

多くの人がEmacsクライアントを使用してスピードを上げると聞いていましたが、試してみるといくつか問題がありました。Emacsサーバを有効にしてemacsコンフィギュレーションバッファまたはモードローカルに参加するには?

ここで説明する例を示します。 私はセマンティックモードをC++モードにフックしています。つまり、C++ファイルを開くとセマンティックモードが起動します。しかし、セマンティックモードはサーバーで開かれているので、クライアントと一緒に消えることはありません。私がPythonスクリプトを開いた場合、セマンティックモードもそこにありますが、これは望ましくありません。

より一般的には、評価されたlisp関数の1つのバッファ内のほとんどが他のバッファに影響し、ほとんどの場合、これらの効果は歓迎されません。

私はローカルにバッファリングする設定の一部を抑制することができる方法はありますか?だから、私はすべてのバッファの設定の一部を持つことができますが、他のバッファは特定のバッファや特定のモードの中にしか存在しません。言い換えれば、私はそのバッファから出るときに評価された関数の効果が消えたり復元されたりするようにしたい。 Googleを検索しても、関連する回答は得られませんでした。

答えて

0

クライアントは、Emacsインスタンスにアクセスするための単純にインターフェイスです。あなたが好きなら、サーバーのウィンドウ。彼らは独自のelisp環境を持っていません。必要な場合は、Emacsの複数のインスタンスを実行する必要があります。

+0

変数をbuffer-localとして制限するなど、特定のバッファでの効果を制限することは可能ですか? – fis

+0

任意の変数はバッファローカル値を持つことができますが、1つのバッファ(またはフレーム/端末/クライアント)で有効な* elisp環境に*任意の*変更を加えることはできません。あなたが問題を抱えていることを説明する新しい質問を投稿することをお勧めします。そして人々は個々の問題を手助けすることができます。 – phils

0

emacsの観点からは、emacsclientを使って何かを行うことと通常のemacsで行うことの間に違いはありません。だから、あなたが見ている問題は、通常のemacsを実行しているときにも問題になるはずです。

あなたの関心事を正確に理解するためには、さらに詳しい情報が必要です。セマンティックモードが動作している問題は何ですか?それがPythonコーディングに問題を引き起こしていますか?

セマンティックモードをM-x sematnic-modeで切り替えることはできません。

問題は冷たく、セマンティックモードをどのように開始していますか。例えば、フード内で使用するのが一般的ですが、C++ - mode-hookではなくprog-mode-hookのようなものを使用した場合、プログラミングモードを実行するたびに起動されますprog-modeから派生したもの)。

セマンティックモードの開始方法と、Pythonのプログラミングに切り替えようとしたときに実際にどのような問題が発生しているかについて詳しく説明した場合は、より具体的な支援を行うことができます。

+0

セマンティックモードはここでの例のとおりです。私はさまざまなメジャーモードにいくつかの特定の設定機能を持っています。セマンティックはC++モード設定の一部です。これらの設定のいくつかは、私が別のメジャーモードに変更してもいくつかのメジャーモードが消えても残ります。だから私が望むのは、すべての設定をローカル変数のように動作させることです。特定のメジャーモードやバッファを入力すると評価されます。メジャーモードやバッファを残した後、コンフィギュレーション関数が評価される前の状態に戻ります。または、2つのバッファを2つの異なるプロセスのように動作させるだけです。 – fis

+0

具体例を提示する必要があります。特に、あるモードでの設定が別のモードにどのように影響しているかを示します。たとえば、C++、modeではキーバインディングがありますが、Pythonモードではそのキーバインディングは必要ありません。一般的に、無関係なモードに影響するモードの設定がある場合、設定は間違ったレベルで間違ったフックや間違ったキーマップなどで定義/ロードされます。時には、適切なフックがありますが、具体的な例がなければ、私はさらに提供することはできません –

+0

私はelpyをPythonモードに設定しました。セマンティックモードがPythonモードで有効になっていると、インポートモジュールが見つかりません。しかし、実際に私はすでにelpyを持っているので、Pythonをコーディングするときにセマンティックモードは必要ありません。また、pythonファイルを開いた後にcファイルを開くと、仮想envがそこにあり、cでコーディングするときには必要ありません。私はそれらを孤立させたい。 – fis

0

semantic-modeはグローバルマイナーモードです。つまり、個々のバッファやメジャーモードでは無効にできません。ただし、使用できるフックsemantic-inhibit-functionsがあります。

(defun jpk/semantic-inhibit-function() 
    (eq major-mode 'python-mode)) 
(add-hook 'semantic-inhibit-functions #'jpk/semantic-inhibit-function) 

これは基本的にこの回答の逆です:https://emacs.stackexchange.com/a/15143/651です。本当にこの質問には適用されません


一般的な答えは、:ごとの主要なモード物事を行うには

通常の方法はフックです。すべてのメジャーモードにはフックがあり、通常はfoo-mode-hookと呼ばれます。 foo-mode。これは、メジャーモードがアクティブになったときに呼び出される関数のリストです。 prog-mode-hookのような他のフックがあります。これはプログラミングの主要なモードごとに呼び出されます。 Cのような言語にもc-common-mode-hookがあります。

(defun jpk/python-mode-hook() 
    (semantic-mode -1)) 
(add-hook 'python-mode-hook #'jpk/python-mode-hook) 

それはremove-hookを使用するのは簡単ですので、私は、フックの代わりlambda秒間defun秒を使用することをお勧めします。

バッファごとの処理を行う場合は、ファイルローカル変数を使用するか、メジャーモードフックの(buffer-name)を参照してください。

+0

私はフックを理解しています。質問で私はセマンティックがC++モードにフックされていると言った。しかし、C++モードを離れると、セマンティックモードはまだ有効です。 – fis

+0

申し訳ありませんが、私は 'セマンティックモード'に精通していませんでした。これはグローバルマイナーモードなので、シングルバッファではオフにできません。しかし、 'semantic-inhibit-functions'と呼ばれるフックがあります。 – jpkotta

関連する問題