ポイントの後にテキストを挿入する方法は?


7

(プログラムで)ポイントの直後に(移動せずに)テキストを挿入します。私はこれを思いつきました:

(save-excursion (insert "my text"))

動作するようです。私がやりたいことをする良い方法ですか?たとえば、これが壊れる可能性がある状況はありますか?(insert読み取り専用バッファーのようにとにかく壊れる場所を除いて。)より経験豊富なElispハッカーが行うこととは異なりますか?


5
はい。これ以上言うことはありません。
shosti 2014年

ありがとう。私はそれがうまくいかないなどのいくつかの(奇妙な?)状況などについて少し心配しました
mbork

3
その場合、質問を言い換えることができます。しかし、99%の確率で、save-excursion+ insertが最適です。
shosti 2014年

はい、やります。ところで:1%は何ですか?
mbork 2014年

1
読み取り専用のオーバーレイを使用した奇妙なモードなど。本当に心配することは何もありません。
shosti 2014年

回答:


6

この動作の非常に一般的な例はelectric-pair-mode、Emacs標準ライブラリにあります。これまでにこのモードを使用したことがない場合は、(マニュアルから引用):

開始デリミタを挿入すると、対応する終了デリミタも自動的に挿入され、2つの間のデリミタが残ります。

コードをチェックしてelectric-pair-post-self-insert-function、挿入がどのように実行されるかを確認できます。ネタバレ:

(defun electric-pair-post-self-insert-function ()
  [lots of cond logic to decide if it's time to insert a matching closer]
      (save-excursion (insert closer)))))))

6

はい、それは私が知っているポイントの後にテキストを挿入する最も慣用的な方法です。save-excursionバッファの変更に対して非常に弾力性があるため、破壊的な編集を行うための推奨される方法です。問題が発生する可能性が高い唯一の場所はinsert、一部のテキストが読み取り専用であるバッファーなど、それ自体で問題が発生する場所です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.