Bagaimana cara memasukkan teks setelah titik?


7

Saya ingin memasukkan (secara terprogram) beberapa teks tepat setelah titik (tanpa memindahkannya). Saya datang dengan ini:

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

Sepertinya berhasil. Apakah ini cara yang baik untuk melakukan apa yang saya inginkan? Misalnya, apakah ada situasi di mana ini bisa pecah? (Selain yang insertakan pecah, seperti buffer baca-saja.) Apakah berbeda dari yang akan dilakukan oleh peretas Elisp yang lebih berpengalaman?


5
Iya. Tidak banyak lagi yang bisa dikatakan.
shosti

Terima kasih; Saya agak khawatir tentang misalnya beberapa situasi (aneh?) Ketika itu tidak akan berhasil dll
mbork

3
Anda dapat menguraikan kembali pertanyaan dalam kasus itu. Tapi 99% dari waktu, save-excursion+ insertadalah cara untuk pergi.
shosti

Baiklah, saya akan melakukannya. BTW: berapa 1%?
mbork

1
Mode aneh dengan hamparan baca-saja dan hal semacam itu. Tidak ada yang perlu dikhawatirkan.
shosti

Jawaban:


6

Contoh yang sangat umum dari perilaku ini adalah electric-pair-modedi perpustakaan standar Emacs. Jika Anda belum pernah menggunakan mode ini sebelumnya, maka (mengutip dari manual ):

Setiap kali Anda memasukkan pembatas pembuka, pembatas penutup yang cocok juga secara otomatis dimasukkan, meninggalkan titik di antara keduanya.

Anda dapat memeriksa kode untuk electric-pair-post-self-insert-functionmelihat bagaimana menyelesaikan penyisipan. Spoiler:

(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

Ya, itu adalah cara paling idiomatis untuk memasukkan teks setelah poin yang saya tahu. save-excursionsangat tangguh terhadap perubahan dalam buffer, jadi itu adalah cara yang disukai untuk melakukan pengeditan yang merusak. Satu-satunya tempat Anda mungkin mengalami masalah adalah di mana Anda akan memiliki masalah dengan insertdirinya sendiri, seperti buffer di mana beberapa teks hanya-baca.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.