Persempit dengan batasan sebelumnya

8

Apakah ada cara mudah untuk mengembalikan batasan sebelumnya? Jadi setelah urutan kejadian berikut:

  • Tandai suatu wilayah
  • Panggil narrow-to-regiondan lakukan beberapa pekerjaan.
  • Panggilan widenuntuk melompat-lompat dan mencari sesuatu

Saya ingin mempersempit ke wilayah asli lagi tanpa harus menandai lagi.

glukas
sumber
Ini rumit karena tentu saja isi buffer dapat berubah antara panggilan ke widendan panggilan ke renarrowperintah hipotetis . Mungkin pendekatan terbaik adalah menyimpan batas-batas wilayah di suatu tempat dan memiliki perintah untuk menandai wilayah yang terakhir disimpan.
glucas

Jawaban:

2

Alih-alih mempersempit buffer utama, Anda bisa membuka Buffer Indirect baru dan mempersempitnya:

(defun indirect-region (beg end name)
  "Open a new named indirect buffer of the current buffer,
narrowed to region [BEG, END]."
  (interactive "r\nsname of narrowed buffer: ")
  (let ((new-buff
         (make-indirect-buffer (current-buffer)
                               (generate-new-buffer-name name)
                               t)))
    (switch-to-buffer new-buff nil t)
    (narrow-to-region beg end)))

Ini akan membuka buffer tidak langsung baru dari buffer Anda saat ini yang menyempit ke wilayah Anda saat ini, mengedit buffer ini sama seperti mengedit buffer utama, dan Anda akan dapat bolak-balik di antara mereka.

Seperti itu:

masukkan deskripsi gambar di sini

Anda dapat memperluas ini dengan fitur-fitur bagus seperti

  • secara otomatis menyempit ke fungsi saat ini
  • menamai buffer baru setelah fungsi saat ini
  • pengikat kunci untuk melompat antara buffer tidak langsung fungsi dan buffer utama
  • tidak membuat buffer tidak langsung baru untuk fungsi yang sudah memiliki satu terbuka

Tapi itu semua terserah Anda.

Jordon Biondo
sumber
Terima kasih, ini mungkin jalan yang harus ditempuh. Saya juga bisa melihat kebalikannya: dari buffer yang menyempit, buat buffer tidak langsung melebar untuk mencari sesuatu.
glucas
7

Maaf saya tidak melihat pertanyaan Anda lebih cepat.

Inilah salah satu alasan untuk zona perpustakaan ( zones.el).

Saat Anda mempersempit penyangga, setiap penyempitan ditambahkan ke lingkaran penyempitan , yang mencakup penyangga penuh (tidak ditumpuk). Penyempitan dapat disarangkan, tetapi tidak harus demikian. Mereka bisa menjadi daerah mana saja.

Anda dapat berputar di antara penyempitan (menggunakan C-x n x x x...). Anda dapat langsung menuju penyempitan ke- N sebelumnya dengan menggunakan arg awalan numerik; misalnya C-3 C-x n x,. Polos C-ubenar-benar melebar (sama seperti C-x n watau bersepeda ke entri cincin yang tidak disangga). C-0mengosongkan cincin.

Baris mode memberi tahu Anda penyempitan mana (pembatasan buffer) saat ini.

Anda bahkan dapat menyimpan cincin pembatasan buffer saat ini secara terus-menerus dan mengembalikannya nanti. Jika Anda menggunakan pustaka Bookmark + maka Anda dapat membuat bookmark pembatasan dan kemudian mengembalikannya dengan melompat ke bookmark.

Untuk informasi lebih lanjut, lihat Multiple Narrowings .


Lihat juga Narrow Indirect (perpustakaan narrow-indirect.el). Ini memungkinkan Anda dengan mudah membuat sejumlah buffer tidak langsung yang merupakan klon dari buffer utama dan yang dipersempit ke bagian tertentu.

Drew
sumber
@phils: Thx; selesai Sebenarnya, itu disebutkan pada halaman Zona , tetapi saya telah menambahkannya ke halaman Multiple Narrowings juga.
Drew