Emacs の eshell でバッファー末尾(EOB)から一文字戻る問題の対応
Emacs の 24.4 か 24.5 わかりませんが、
バッファーの末尾(EOB, End Of Buffer)で何かコマンドを実行するとカーソルが 1 文字戻る
という不具合が入りこんでいました。
ほとんどの場合は大した問題ではないのですが、 eshell
だとかなり不便です。
あまりちゃんとしたものではありませんが、対処方法を考えたので、
今回はそれを紹介します。
eshell ではバッファーの最後にカーソルがあるのが普通の状態です。 ここからバッファーの切り替え(switch-to-buffer)やウィンドウの移動(other-window) を行ってから戻ると、一文字移動し直さないと入力できないことになり、かなり面倒です。
この現象は多分バグなので、そのうち修正されるとは思いますが、ちょっと調べた感じだと特に解決方法は見つかりませんでした。 そのため場当たり的ではありますが、対処方法を考えてみました。
どうやるかというと advice という機能を利用します。
バッファーの切り替え等のコマンドを実行した後、 eshell モードで EOB の一文字後ろの場合には EOB に移動するようにします。
以下がそのためのコード なので、 ~/.emacs.d/init.el 等に書いてみてください。
(defun ex-move-to-eob-if-eshell (&rest args) (when (eq major-mode 'eshell-mode) (let ((pos (point))) (goto-char (+ pos 1)) (unless (eobp) (goto-char pos))))) (advice-add 'switch-to-buffer :after 'ex-move-to-eob-if-eshell) (advice-add 'other-window :after 'ex-move-to-eob-if-eshell) (advice-add 'eshell :after 'ex-move-to-eob-if-eshell)変更するコマンドは 3 つしか書いてませんが、 advice-add を追加すれば、他のコマンドでも移動するようになります。
- 関連記事
-
- Emacs のコマンド一覧
- Emacs (24.5 以上) の Windows へのインストール
- Emacs の eshell でバッファー末尾(EOB)から一文字戻る問題の対応
- Emacs で自動作成されるファイル(バックアップ、自動保存、ロック)の設定
- Emacs におけるスクロールの挙動とその設定
Facebook コメント
コメント
以下がそのためのコード なので、とかの
Re: 以下がそのためのコード なので、とかの
調べてみたところ、 SNS 共有ボタンで使っていた ShareThis にコピーをやりづらくするための機能があって、それがデフォルトで有効になっていました。
意図していたものではなかったので、機能を無効にしました。今は普通にコピーできるようになっていると思います。