Secara otomatis memasukkan spasi ketika memasukkan karakter tergantung pada karakter sebelumnya


8

Biasanya setelah memasukkan tanda baca seperti . , :saya membuat spasi sebelum memasukkan karakter berikutnya. Apakah mungkin Emacs secara otomatis melakukan perilaku ini? Misalnya memasukkan sesuatu seperti .xhasil dalam mengetik di . xmana xkarakter sewenang-wenang (kecuali untuk beberapa kasus tertentu dikecualikan oleh pengguna misalnya kasus di mana xitu spacesendiri).

Terkadang ini bisa membantu mempercepat pengetikan.


2
Mungkin lihat ini: smart-operator
pengasuh

Jawaban:


8

Operator pintar terlihat menjanjikan, tetapi saya belum mencobanya sehingga saya tidak dapat berbicara untuk itu. Solusi prebuilt akan ideal, tetapi jika tidak ada yang memadai, akan sangat mudah untuk membungkus tulis fungsi ini dan bungkus dalam mode minor sekalipun.

Ini dia:

(defvar auto-punc-punctuation-members
  (string-to-list ".,:;?!")
  "List of charactesr to insert spaces after")

(defvar auto-punc-ignore-members
  (string-to-list " \t")
  "List of characters to not auto insert spaces before")

(defun auto-punc-maybe-do ()
  "If the last entered character is not in `auto-punc-punctuation-members' or `auto-punc-ignore-members',
and the prior character is in `auto-punc-punctuation-members',
insert a space between the two characters. "
  (when (and auto-space-punctuation-mode
             (not (member (char-before) (append auto-punc-punctuation-members auto-punc-ignore-members)))
             (member (char-before (1- (point))) auto-punc-punctuation-members))
    (backward-char 1)
    (insert " ")
    (forward-char 1)))

(define-minor-mode auto-space-punctuation-mode
  "Automatically inserts spaces between some punctuation and other characters."
  :init-value nil
  :lighter "._a"
  :keymap nil
  (make-variable-buffer-local 'post-self-insert-hook)
  (if auto-space-punctuation-mode
      (add-hook 'post-self-insert-hook 'auto-punc-maybe-do)
    (remove-hook 'post-self-insert-hook 'auto-punc-maybe-do)))

Anda bisa menambahkannya ke init Anda dan mengaktifkannya secara otomatis jika Anda mau

(add-hook 'text-mode-hook 'auto-space-punctuation-mode)

Setiap kali Anda memasukkan karakter fungsi auto-punc-maybe-doberjalan, baca docstring untuk memastikan ini adalah perilaku yang Anda inginkan. Pada dasarnya jika Anda mengetik tanda baca, maka apa pun yang bukan tanda baca atau spasi, spasi akan dimasukkan secara otomatis.


2
Saya mengkonfirmasi bahwa solusi Anda berfungsi dengan baik dalam mode teks.
Nama

1
Bagus, senang mendengarnya. Saya baru saja memperbarui kode untuk menjadikan `post-self-insert-hook buffer lokal, jika Anda mengambil kode lebih awal, Anda mungkin menemukan mode yang berfungsi dalam buffer yang tidak Anda harapkan karena mungkin telah ditambahkan secara global, memeriksa yang baru kode harus memperbaikinya.
Jordon Biondo

2

Anda mungkin tertarik pada operator listrik , ini adalah mode minor yang cukup umum untuk menambahkan spasi di sekitar operator (sebagian besar untuk mode pemrograman, tetapi juga berfungsi dalam mode teks).

Itu tidak melihat apa yang Anda ketikkan setelah operator, jadi saat ini tidak dapat menangani bagian "tambahkan spasi hanya jika saya belum mengetik satu" dari pertanyaan Anda.

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.