Bagaimana saya harus mendapatkan nama file buffer asli dalam buffer kloning tidak langsung?

8

Saya ingin melihat bagian buffer yang berbeda dalam dua frame yang berbeda, karena saya memiliki dua monitor dengan bentuk yang berbeda sehingga saya tidak dapat dengan mudah menjangkau satu frame. Beberapa googling membuat saya menggunakan clone-indirect-buffer, yang berfungsi dengan baik.

Namun, buffer-file-nameuntuk buffer baru tersebut nil. Bagaimana saya bisa dengan andal menentukan nama file buffer asli (yang ini adalah tiruan dari)?

jalur jalan
sumber
2
Apa perbedaan / keuntungan dari kloning buffer dan hanya mengunjungi buffer di kedua frame secara bersamaan?
Nathanael Farley
5
Klon merespons peristiwa seperti penyempitan / pelebaran, pelipatan kode, dan pelipatan garis secara terpisah satu sama lain. Jika itu adalah buffer yang sama di dua jendela, peristiwa semacam ini akan dicerminkan di setiap jendela. Klon berguna untuk, misalnya, memiliki pandangan berbeda dari berbagai bagian buffer pada saat yang bersamaan.
Dan
Saya sebenarnya tidak yakin apakah Anda dapat membuka buffer dalam dua frame secara bersamaan. Tentu saja Anda bisa di dua jendela dalam bingkai yang sama, tetapi jika saya mencoba untuk mengubah ke buffer di bingkai lain dengan C-x bfokus kemudian beralih ke bingkai sudah menunjukkan buffer.
rneatherway
1
@NathanaelFarley Saya menggunakan buffer tidak langsung ketika saya terminal sharing dengan perguruan tinggi vim saya yang cenderung dapat menggunakan buffer tidak langsung dengan sesuatu seperti mode-jahat.
stsquad

Jawaban:

12

Saya menyimpan manual Emacs dan manual Elisp pada panggilan cepat untuk pertanyaan seperti ini.

Dari manual Elisp tentang buffer tidak langsung :

Fungsi: buffer-base-buffer & buffer opsional

Fungsi ini mengembalikan buffer dasar buffer, yang secara default ke buffer saat ini. Jika buffer tidak langsung, nilainya nol. Jika tidak, nilainya adalah buffer lain, yang tidak pernah merupakan buffer tidak langsung.

Anda mungkin ingin (buffer-file-name (buffer-base-buffer))atau sesuatu seperti itu.

purple_arrows
sumber
Yup, itu dia. Saya masih suka defadviceopsi saya . ;)
Dan
3

Ini adalah jawaban tidak langsung untuk pertanyaan Anda - Saya tidak yakin bagaimana mencari tahu apa nama buffer asli tanpa melakukan hal berikut. (EDIT: Jawaban @ purple_arrows mengisi rincian: Anda dapat menggunakan buffer-base-buffer. Terima jawaban itu sebagai yang paling benar.)

Saran berikut akan mengaitkan nama file buffer asli dengan masing-masing klon tidak langsungnya:

(defadvice clone-indirect-buffer (around associate-filename activate)
  "Associate the original filename with the cloned buffer."
  (let ((filename buffer-file-name))
    ad-do-it
    (setq buffer-file-name filename)))

Sekarang, masing-masing klon memiliki nama file yang sama dengan buffer asli.

Saya sering menggunakan buffer yang dikloning secara tidak langsung, dan ingin dapat, misalnya, menyimpan file yang terkait ketika saya bekerja dengan salah satu buffer, daripada yang asli. Saran ini adalah solusi saya untuk alur kerja yang diinginkan.

Dan
sumber