Saya memiliki dua jendela yang terbuka dan terbelah secara vertikal (satu frame):
A) berisi pekerjaan saya
B) berisi dired atau ibuffer.
Saya ingin dapat menavigasi ke file / buffer di panel B dan tekan "o" buka di panel A. Apakah ini mungkin? Sekarang emacs sedang membuat panel baru di bagian bawah panel A untuk membuka file.
sunting: sesuai dengan daftar hukum pengguna, perilaku yang dijelaskan di atas akan terjadi ketika bingkai besar. Ini tampaknya menjadi masalah bagi saya karena sekarang saya di rumah (bukan pada monitor eksternal, bingkai yang lebih kecil) berperilaku seperti yang saya inginkan. Pertanyaannya sekarang menjadi: bisakah saya mencegah emacs membuka jendela baru ketika bingkai saat ini besar?
window
untuk merujuk ke kuadran buffer di dalam yang samaframe
. Aframe
dianggap sebagai keseluruhan kucing-kaboodle, yang dapat memiliki banyak jendela di dalamnya. Emacs dapat menghasilkan banyak bingkai, dengan setiap bingkai berisi banyak jendela.Jawaban:
Berikut adalah empat (4) contoh
display-buffer
kelompok fungsi kustom yang dapat disesuaikan sesuai kebutuhan khusus pengguna - di atas ; di bawah ; kiri ; kanan - dan di sini ada empat (4)interactive
fungsi untuk menampilkan file atau direktori dari barisdired-mode
buffer saat ini. Hanya ada tiga kondisi: (a) jika sudah ada jendela yang menampilkan buffer target, lalu pilih; (B) jika ada jendela ke arah yang diinginkan yang tersedia, maka gunakan; (C) catch-all adalah untuk membuat jendela baru ke arah yang diinginkan jika kondisi lain tidak terpenuhi.Pemakaian:
M-x dired-display-above
M-x dired-display-below
M-x dired-display-left
M-x dired-display-right
Ada begitu banyak ikatan kunci yang sudah ada di dalamnya
dired-mode
dandired+
, sehingga saya tidak berani mencoba membuat milik saya sendiri. Pengguna bebas memilih pintasan keyboardnya sendiri, yang berada di luar cakupan contoh terbatas ini.Pengguna bebas untuk menambahkan kondisi tambahan ke
display-buffer
keluarga contoh fungsi untuk menangani lebih banyak situasi - misalnya, lebih banyak jendela daripada hanya beberapa.EDIT: Ini adalah implementasi yang sedikit lebih canggih / menyenangkan dari konsep di atas, yang memberi pengguna kemampuan untuk menggunakan ini secara non-interaktif atau interaktif ; misalnya,
M-x dired-display-buffer
- di mana pengguna akan diminta untuk memilih direktori jika tidak mengarahkan filedired-mode
, dan untuk memilih arah tampilan (kiri, kanan, atas, di bawah, di bawah).sumber
dired-mode-map
, terikat keo
dan kemudianhjkl
untuk tampilan-atas / bawah / kiri / kanan?(defhydra dired-open (dired-mode-map "O" :exit t) "dired-open" ("j" dired-display-below "below") ("k" dired-display-above "above") ("h" dired-display-left "left") ("l" dired-display-right "left"))
select-window
ini dapat digunakan di ujung setiapmy-display-buffer-...
fungsi. Seperti yang Anda lihat, hasil / nilai yang dilemparkan di akhir pada baris terakhir adalahwindow
. Jika Anda tidak perlu hasil / nilai untuk digunakan dalam hubungannya dengan fungsi lain, maka hanya membungkuswindow
pada baris yang terakhir dengan ini:(select-window window)
. Lakukan itu dengan keempat (4) fungsi - yaitumy-display-buffer-below
,;my-display-buffer-above
;my-display-buffer-left
; danmy-display-buffer-right
.Pertanyaan Anda tidak jelas, dan karenanya berisiko ditutup. Apakah Anda memiliki dua bingkai atau satu bingkai dengan dua jendela Emacs? Apa pun itu, jika ada dua, apakah masing - masing dibelah secara vertikal? Dan apa yang Anda maksud dengan "membagi secara vertikal"? Apa yang Anda maksud dengan "panel"? Apa yang Anda maksud dengan "itu", di "sudah terbuka di panel A"?
Tebakan liar adalah bahwa Anda memiliki satu bingkai Emacs yang terbagi menjadi dua jendela Emacs, A dan B, dengan jendela A di atas jendela B, jendela B dipilih, dan jendela B menunjukkan buffer Dired.
o
terikat secara default kedired-find-file-other-window
. Jika di atas menebak benar makao
pada nama file dalam B harus terbuka di A. Ini adalah apa yang saya lihat ketika memulai Emacs tanpa file init:emacs -Q
. Apakah kamu tidak melihat itu?Jika ini bukan skenarionya, jelaskan dengan jelas apa yang Anda lakukan, langkah demi langkah, dimulai dengan
emacs -Q
.sumber
display-buffer
keluarga variabel akan mempengaruhi situasi lain yang belum diramalkan. Anda dapat menyesuaikandisplay-buffer-alist
, yang agak membingungkan bahkan untuk pengguna Emacs yang berpengalaman. Ada variabel yang mengontrol kapan harus membagi windows dan ukuran minimum windows, dan daftar berjalan terus. Untuk mengatasi wabah, Anda dapat memberi sarandired-find-file-other-window
dengan versi let-bounddisplay-buffer-alist
, tetapi saya akan menyerahkan jawaban itu kepada peserta forum lain. Ada berbagai solusi. :)CATATAN : Variabel berikut bersifat global , yang berarti bahwa mereka akan memengaruhi fungsi lain di samping
dired-find-file-other-window
. Pengguna mungkin ingin menyarankan fungsi yang dipermasalahkan agar tidak memengaruhi fungsi lainnya secara global . [Namun, penulis ini akan menyerahkan opsi itu kepada peserta forum lain.] Atau, ada jawaban lain yang diposting penulis ini yang berisi fungsi khusus yang dapat digunakan agar tidak mempengaruhi hal lain.Variabel
split-width-threshold
memiliki doc-string yang menyatakan:Pengaturan berikut ini di
.emacs
file akan mencapai efek yang diinginkan. Pengguna juga dapat mengatur nilai ke angka yang lebih tinggi. Nilai standarnya adalah 160Berikut ini tautan ke bagian yang relevan di manual:
https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Choice.html
Lihat juga variabel terkait
split-height-threshold
, yang memiliki nilai default 80Doc-string menyatakan:
sumber