Jika Anda ingin menyalin beberapa informasi ke buffer lain, dan sejak saat itu biarkan buffer berkembang secara independen, Anda dapat melakukan hal itu .
Tetapi jika Anda ingin buffer lain untuk mencerminkan konten asli secara real time, maka Emacs menyediakan ini dengan buffer tidak langsung . Buffer tidak langsung adalah buffer lain yang memiliki konten yang sama seperti aslinya (modifikasi dalam satu buffer tercermin dalam buffer lain), tetapi pengaturan berbeda: mode utama berbeda, mode kecil berbeda, variabel lokal berbeda, titik berbeda, tanda berbeda , penyempitan yang berbeda, dll.
Jadi, Anda dapat melihat sebagian buffer dalam mode utama yang berbeda, sambil melacak modifikasi di buffer asli dan memantulkan modifikasi kembali ke buffer asli. Pertama buat buffer tidak langsung dengan M-x clone-indirect buffer
; ada juga clone-indirect-buffer-other-window
yang terikat C-x 4 c
( C-x 4
awalan jendela, dan c
untuk klon ). Di buffer kloning, persempit ke wilayah yang Anda inginkan: pilih bagian yang menarik dan jalankan C-x n n
( narrow-to-region
). Ubah mode utama seperti yang diinginkan.
Anda dapat mengotomatiskannya dengan perintah seperti ini untuk penggunaan interaktif:
(defun edit-region-in-foo-mode (beg end)
(interactive "@r")
(let ((new-buffer (clone-indirect-buffer nil t)))
(narrow-to-region beg end)
(foo-mode)))
Untuk penggunaan pemrograman:
(defmacro with-indirect-buffer-in-foo-mode (beg end &rest body)
`(with-current-buffer (clone-indirect-buffer nil nil)
(narrow-to-region beg end)
(foo-mode)
(unwind-protect
,body
(kill-buffer (current-buffer)))))