Pertanyaan Bagaimana cara mengakses konten dari wilayah saat ini di Emacs Lisp?


Saya ingin mengakses isi dari wilayah saat ini sebagai string dalam suatu fungsi. Sebagai contoh:

(concat "stringa" (get-region-as-string) "stringb")

Terima kasih

Ed


39
2018-03-03 10:13


asal


Jawaban:


buffer-substring bersama dengan region-beginning dan region-end bisa melakukan itu.


52
2018-03-03 10:23



Seperti kata Starblue, (buffer-substring (mark) (point)) mengembalikan isi wilayah, jika tanda sudah diatur. Jika Anda tidak menginginkan properti string, Anda dapat menggunakan 'buffer-substring-no-properties varian.

Namun, jika Anda menulis interaktif komando, ada cara yang lebih baik untuk mendapatkan titik akhir dari wilayah tersebut, menggunakan formulir (interactive "r"). Ini contoh dari simple.el:

(Defun count-lines-region (awal akhir)
  "Cetak jumlah baris dan karakter di wilayah ini."
  (interaktif "r")
  (pesan "Wilayah memiliki% d baris,% d karakter"
       (count-lines start end) (- mulai akhir)))

Ketika dipanggil dari kode Lisp, (interactive ...) formulir diabaikan, sehingga Anda dapat menggunakan fungsi ini untuk menghitung garis masuk apa saja bagian dari buffer, bukan hanya wilayah, dengan meneruskan argumen yang tepat: misalnya, (count-lines-region (point-min) (point-max)) untuk menghitung garis di bagian penyangga yang menyempit. Tetapi ketika dipanggil secara interaktif, (interactive ...) formulir dievaluasi, dan "r" kode memasok titik dan tanda, sebagai dua argumen numerik, terkecil pertama.

Lihat Manual Emacs Lisp, bagian 21.2.1 Menggunakan Interaktif dan 21.2.2 Karakter Kode untuk interaktif.


64
2018-03-03 10:51



Jika Anda ingin menyalin konten wilayah dalam kode Lisp ke struktur data yang dapat diakses pengguna seperti kill-ring, X clipboard atau daftar, Emacs Lisp manual merekomendasikan untuk menggunakan filter-buffer-substring bukan hanya buffer-substring. Sebelum menyalin, fungsi ini berlaku fungsi filter dari variabel daftar yang disebut filter-buffer-substring-functions. Fungsi itu ditambahkan dalam versi 22.3.


4
2018-03-03 05:39