Mendefinisikan jendela yang ditunjuk oleh “other-window”

10

Di emacs, lebih sering daripada yang saya suka, saya berakhir dengan 4 jendela atau lebih.

Saya akan menggunakan contoh itu:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Banyak fungsi yang dapat melakukan aksi other-window(biasanya jendela yang sama ditunjukkan oleh C-x o). Bermanfaat secara khusus scroll-other-window. Namun, ketika 4 atau lebih windows dibuka, other windowtidak mungkin menjadi yang saya inginkan.

Apakah ada cara mudah untuk mengatur agar tidak other-windowmengubah tata letak jendela / buffer? Tentu saja, itu bisa dilakukan menggunakan banyak C-x 4 bdan C-btetapi saya tidak ingin mengubah tata letak. Sebagai contoh:

  • jika mengedit di jendela 4 pada gambar di atas, apakah ada cara mudah untuk mengatur C-M-vuntuk menggulir jendela 1 ?
  • Atau sederhananya, misalkan fokus pada pada jendela 3 , bagaimana mengatur other-windowuntuk menunjuk ke jendela 2 ?
Lompik
sumber

Jawaban:

7

Jika saya membaca pertanyaan Anda dengan benar, Anda terutama tertarik untuk mengoperasikan buffer yang ditampilkan di jendela lain dengan cepat (sambil mempertahankan tata letak jendela saat ini).

Mengubah jendela yang other-windowmenunjuk adalah salah satu cara untuk mencapai itu, tetapi saya ingin menyarankan alur kerja alternatif:

Tidak seperti other-window, ace-windowmemungkinkan Anda untuk dengan cepat melompat ke jendela tertentu : Ketika Anda menelepon ace-window, itu menunjukkan nomor unik di setiap jendela. Untuk melompat ke jendela tertentu, Anda cukup mengetik nomor yang sesuai. Jika Anda hanya memiliki dua jendela, itu menunjuk titik di jendela lain tanpa meminta Anda mengetik nomor. Screencast ini menunjukkan beralih ke jendela lain, menggulirnya, dan beralih kembali ke jendela asli:

Demonstrasi jendela kartu as

Jika Anda mengikat ace-windowuntuk C-x o, Anda tidak perlu menghafal kunci tambahan yang mengikat, dan itu akan merasa seperti Anda menggunakan versi supercharged other-window.

Juga, jika Anda menyentuh jenis dan / atau memilih untuk tidak memindahkan jari Anda terlalu jauh dari baris rumah, Anda dapat menginstruksikan ace-windowuntuk "nomor" jendela menggunakan huruf, bukan angka (lihat di bawah).

ace-windowtersedia dalam MELPA . Setelah menginstalnya melalui M-x package-install RET ace-window RET, Anda dapat meletakkan yang berikut ini di file init Anda untuk mengaturnya seperti dijelaskan di atas:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))
itu hanya
sumber
Terima kasih untuk demo, saya telah melihat paket ini di situs lain dan bertanya-tanya bagaimana cara kerjanya. Saya benar-benar dapat beralih jendela dengan mudah karena saya harus M-1 M-2 ..memilih jendela nomor 1, 2 menggunakan window-numberpaket
Lompik
1

Dari ulasan singkat tentang sumbernya other-windowsepertinya itu tergantung pada jendela yang dikembalikan oleh next-window, yang didefinisikan dalam c. Sayangnya scroll-other-windowjuga didefinisikan dalam c, dan mungkin panggilan next-window dari sana. Saya pikir tidak mudah untuk menimpanya.

Namun, switch-to-buffer-other-windowtampaknya digunakan pop-to-buffer, sehingga Anda mungkin beruntung di sana.

dgtized
sumber
1

Tidak ada cara mudah untuk memanipulasi daftar jendela, sehingga hasilnya dikembalikan oleh other-windowlebih atau kurang diperbaiki. Ini bukan hal yang buruk, karena memungkinkan konsistensi ketika menavigasi windows. Mengenai dua skenario yang Anda gambarkan, dengan beberapa elisp atau makro Anda dapat menyesuaikan alur kerja Anda.

jika mengedit di jendela 4 pada gambar di atas, apakah ada cara mudah untuk mengatur CMv untuk menggulir jendela 1?

Anda dapat menggunakan potongan sederhana seperti di bawah ini untuk menggunakan other-windowjumlah waktu yang tepat, gulir ke bawah dan kembali ke jendela asli.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

Anda bisa memberikan argumen awalan untuk menentukan jendela mana yang akan digulir. Seperti yang dapat Anda simpulkan, ia menggunakan mekanisme inbuilt other-windowuntuk melompati argjumlah jendela sebelum menggulir. The save-selected-windowMemastikan fokus akan kembali ke jendela asli. Dokumentasi other-windowdapat memberikan informasi lebih lanjut tentang memodifikasi cuplikan ini agar sesuai dengan perilaku Anda.

Atau sederhananya, misalkan fokus pada pada jendela 3, bagaimana mengatur other-windowuntuk menunjuk ke jendela 2?

Sekali lagi gunakan prefix-argseperti pada C-3 C-x osaat memanggil other-window. Jumlah aktual untuk memberikan akan bervariasi tergantung pada urutan mana Anda membaginya, dan tidak akan berubah selama Anda tidak membuat jendela baru. Sebagai alternatif, Anda dapat menggunakan paket kenyamanan seperti window-numberatau ace-windowdari MELPA untuk beralih jendela yang dipilih dengan cepat.

Vamsi
sumber
benar, tidak ada cara mudah untuk memanipulasi daftar jendela. Saya kesulitan menggunakan awalan. Terasa seperti itu menambah kunci lain yang tidak terjangkau dan memperlambatnya
Lompik
Itulah gunanya macro keyboard / keybindings. Jika ini adalah bagian reguler dari alur kerja Anda, Anda dapat dengan mudah menentukan misalnya pengikat kunci berbasis peta awalan <f7> nuntuk menggulir jendela ke-n. Buat binding satu kunci sementara dengan makro keyboard.
Vamsi