そして、この動作をしたくありません。実際には、毎回フォーカスが切り替わるわけではありません。たとえば、*Help*
または*Message*
のようなバッファにはこの動作がありません。この不要な機能は、通常のファイルバッファを閉じるときにのみ有効です。kill-bufferスイッチはneotreeウィンドウにフォーカスすることがあります。
この機能を完全に無効にするにはどうすればよいですか?
そして、この動作をしたくありません。実際には、毎回フォーカスが切り替わるわけではありません。たとえば、*Help*
または*Message*
のようなバッファにはこの動作がありません。この不要な機能は、通常のファイルバッファを閉じるときにのみ有効です。kill-bufferスイッチはneotreeウィンドウにフォーカスすることがあります。
この機能を完全に無効にするにはどうすればよいですか?
この問題の解決方法は、バッファを強制終了するための自分のハンドラを作成することです。将来誰かを助けてくれることを願っています。あなたがwindmove-right
ためace-window
パッケージをインストールする必要があり
(global-set-key (kbd "C-w")
(lambda()
(interactive)
(if (string= (substring (buffer-name) 0 2) " *")
(progn
(message "You can not kill protected BUFFER"))
(progn
(if (string= (substring (buffer-name) 0 1) "*")
(progn
(call-interactively 'kill-buffer))
(progn
(call-interactively 'kill-buffer)
(run-at-time "0.5 sec" nil
(lambda()
(call-interactively 'windmove-right)))))))))
あなたは自由にそれを削除することができますので、保護されたバッファとその機能は、この答えには関係ありません。
このコードを改善するには、さまざまな方法があります:代わりに['string-prefix-p'](https://www.gnu.org/software/emacs/manual/html_node/elisp/Text-Comparison.html)を使用してください'string ='と 'substring'のうちのどれかです。単一の式をラップするときに 'progn'を削除します。例えば 'call-interactively'の代わりに直接関数を呼び出すことができます。 '(kill-buffer)'; 'kill'バッファの呼び出しを、' if'の両方の節で実行されているので、 'if'の第2の呼び出しから持ち上げます。ラムダにラップするのではなく、 'run-at-time'の第3引数として' 'windmove-right''を直接渡します。 –
私はまた 'run-at-time'遅延が本当に必要かどうか疑問です。また、これを 'C-w'に束縛することは疑いがあります。なぜなら、通常は' kill-region'にバインドされていて、emacsのユーザーによってかなり使われているからです。 –
ありがとうございました! ImはAtomからそれを使用していたので、C-wを使っています。そうでないと、何らかの理由でフォーカスが切り替わることがないため、実行時に必要となります。 – Seraph
'emacs -Q'(initファイルなし)、または少なくともより詳細な説明から始めて、問題を再現するためのレシピをもっと用意する必要があるでしょう。それ以外の場合は、あなたを助けるのが難しいでしょう。 – Drew
しかし、neotreeはinitファイルで初期化されています。この問題はneotreeに関連しているので、initスクリプトを使用する必要があります。 – Seraph
initスクリプトの最小限の部分を使って問題を再現します。そしてその部分を見せてください。 – Drew