Cara kembali ke prompt minibuffer aktif di emacs tanpa mouse

36

Di emacs, kadang-kadang saya akan menemukan file atau mengganti buffer atau melakukan sesuatu di minibuffer, dan saya akan mengklik di tempat lain karena suatu alasan. Ketika saya kembali, satu-satunya cara untuk membuat prompt minibuffer aktif kembali adalah mengklik di dalam minibuffer, yang menjengkelkan karena ini adalah area yang tipis. Apakah ada cara untuk kembali ke prompt minibuffer aktif tanpa menggunakan mouse?

Ryan C. Thompson
sumber

Jawaban:

25

Ini akan melakukan apa yang Anda inginkan. Ikat kunci pilihan Anda:

(defun switch-to-minibuffer-window ()
  "switch to minibuffer window (if active)"
  (interactive)
  (when (active-minibuffer-window)
    (select-frame-set-input-focus (window-frame (active-minibuffer-window)))
    (select-window (active-minibuffer-window))))
(global-set-key (kbd "<f7>") 'switch-to-minibuffer-window)
Trey Jackson
sumber
2
Jika Anda memiliki beberapa bingkai maka Anda perlu menambahkan (select-frame-set-input-focus (window-frame (active-minibuffer-window)))sebelum select-window.
dshepherd
@dshepherd Saya dapat mengkonfirmasi bahwa setelah memasukkan garis Elisp Anda, fungsi yang diperkaya bekerja dengan baik dengan hanya satu bingkai juga. Terima kasih.
dimitarvp
@dshepherd Terima kasih, telah memperbarui kode dengan tepat.
Trey Jackson
23
C-x o 

Ulangi seperlunya.

Cx o menjalankan perintah other-window, yang merupakan fungsi built-in interaktif dalam `C source code '.

Jika Anda tidak ingin menelusuri windows, Anda dapat menambahkan fungsi di file init Anda dan mengikatnya ke sebuah kunci. Sesuatu seperti ini mungkin bekerja:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))
Richard Hoskins
sumber
1
Mengapa Anda ingin memasukkan RETseperti itu? Secara otomatis akan menerima apa pun yang ada di minibuffer (dengan asumsi satu C-x oberalih ke minibuffer). Secara umum, seseorang mungkin perlu menggunakan C-x obeberapa kali jika ada (dalam bahasa Emacs) beberapa jendela terbuka dalam bingkai (dalam istilah GUI normal: beberapa panel di jendela).
Chris Johnsen
Kamu benar. Salahku.
Richard Hoskins
Apakah ada cara untuk langsung ke minibuffer tanpa berpotensi bersepeda melalui semua jendela? Haruskah saya menulis loop yang tidak other-windowsampai jendela saat ini adalah minibuffer?
Ryan C. Thompson
6

Opsi lain menggunakan switch-window

Saya menganggapnya sebagai paket yang sangat berguna: memungkinkan Anda untuk dengan cepat pindah ke jendela Emacs, secara visual (dan saya menggunakan banyak jendela terbuka di Emacs).

Tapi saya baru mengetahuinya juga memungkinkan Anda untuk pindah ke minibuffer, jika aktif:

masukkan deskripsi gambar di sini

Semoga ini bisa membantu.

rsenna
sumber
1
Paket terkait adalah swap-buffersyang menggunakan metode yang sama untuk menukar buffer saat ini dengan yang ada di jendela lain.
pyrocrasty
0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

Menambahkan dua baris kode di atas ke .emacs.el akan memungkinkan pemindahan yang sederhana dan efisien, tidak hanya ke minibuffer, tetapi juga menavigasi semua jendela lain pada bingkai Emacs menggunakan Shift-Arrow .

Cảnh Toàn Nguyễn
sumber