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?

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)

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))))

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.


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.