Apa manfaat menggunakan buffer tidak langsung ? Dalam keadaan apa mereka berguna?
Apa manfaat menggunakan buffer tidak langsung ? Dalam keadaan apa mereka berguna?
Jawaban:
Untuk melihat dan mengedit beberapa lokasi buffer yang sama. Jadi, Anda tidak harus menggulir buffer panjang tetapi cukup beralih jendela ke wilayah yang terlihat. Setiap buffer kloning juga memiliki ring mark yang berbeda, penyempitan dan properti buffer lainnya. Jika Anda tidak menggunakan buffer tidak langsung tetapi membuat jendela lain dari buffer yang sama, maka semuanya dibagikan dan Anda tidak dapat melakukan fitur lanjutan lainnya selain melihat dan mengedit lokasi yang berbeda. Misalnya, dengan buffer tidak langsung, Anda dapat melipat semua blok kode, secara efektif membuat "tag tree" tanpa memengaruhi buffer asli. Menggunakan jendela, kedua buffer di kedua jendela dilipat karena kedua buffer itu sama.
Singkatnya, buffer tidak langsung adalah buffer yang sama sekali berbeda yang terjadi untuk berbagi teks dan file yang sama di buffer asli Anda, jadi ketika Anda menyimpan buffer yang dikloning, itu juga menyimpan file asli Anda.
Satu use case menggunakan mode utama yang berbeda pada satu bagian file.
Misalnya saya pernah bekerja dengan dokumen xml dengan kode di dalam elemen-elemen tertentu. Saya ingin dapat mengedit seluruh dokumen seolah-olah itu xml, tetapi masih memiliki semua fitur mode utama untuk bahasa pemrograman yang tertanam dalam elemen-elemen tertentu, jadi saya mempersempit ke tubuh elemen-elemen itu dalam buffer tidak langsung yang menjalankan mode utama yang sesuai.
Ini adalah fungsi dari konfigurasi saya yang saya gunakan untuk melakukan ini:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Catatan: ini tidak sempurna, hal-hal seperti font-lock membutuhkan pekerjaan tambahan khusus untuk digunakan dalam skenario ini.
Buffer tidak langsung memberi Anda banyak tampilan buffer yang sama, khususnya, beberapa penyempitan, yang masing-masing bertindak, dalam banyak hal, seperti buffer terpisah.
Seperti yang dikatakan oleh Commentary for library narrow-indirect.el
:
Anda dapat menggunakan buffer tidak langsung lebih dari yang Anda kira. Anda dapat menggunakan klon yang diambil dari bagian buffer Dired, misalnya, untuk memberi Anda pandangan (aktif) yang berguna ke dalam daftar direktori. Hanya ada beberapa tombol / perintah (seperti
g
memperbarui daftar) yang tidak berfungsi, karena mereka bergantung pada tampilan seluruh buffer Dired. Lakukan percobaan, dan Anda pasti akan menemukan kegunaan baru yang menarik untuk buffer tidak langsung.