วิธีกลับไปที่พร้อมท์ของ minibuffer ที่ใช้งานอยู่ใน emacs โดยไม่ต้องใช้เมาส์


36

ใน emacs บางครั้งฉันจะอยู่กลางการค้นหาไฟล์หรือการสลับบัฟเฟอร์หรือทำอะไรบางอย่างใน minibuffer และฉันจะคลิกที่อื่นด้วยเหตุผลบางอย่าง เมื่อฉันกลับไปวิธีเดียวที่จะทำให้การเปิดใช้งาน minibuffer ใช้งานได้อีกครั้งคือคลิกภายใน minibuffer ซึ่งน่ารำคาญเพราะเป็นพื้นที่ที่บาง มีวิธีใดบ้างที่จะเปลี่ยนกลับไปเป็นพรอมต์ minibuffer ที่ใช้งานโดยไม่ต้องใช้เมาส์?

คำตอบ:


25

สิ่งนี้จะทำในสิ่งที่คุณต้องการ ผูกกับกุญแจที่คุณเลือก:

(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
ถ้าคุณมีภาพหลายแล้วคุณจะต้องเพิ่มก่อน(select-frame-set-input-focus (window-frame (active-minibuffer-window))) select-window
dshepherd

@dshepherd ฉันสามารถยืนยันได้ว่าหลังจากใส่สาย Elisp ของคุณแล้วฟังก์ชันที่ได้รับการปรับปรุงจะทำงานได้ดีกับเฟรมเดียวเท่านั้นเช่นกัน ขอบคุณ
dimitarvp

@dshepherd ขอบคุณมีการปรับปรุงรหัสอย่างเหมาะสม
Trey Jackson

23
C-x o 

ทำซ้ำตามความจำเป็น

Cx o รันคำสั่งหน้าต่างอื่นซึ่งเป็นฟังก์ชั่นในตัวแบบโต้ตอบใน `ซอร์สโค้ด C '

หากคุณไม่ต้องการวนรอบหน้าต่างคุณสามารถเพิ่มฟังก์ชันในไฟล์ init ของคุณและผูกเข้ากับคีย์ บางสิ่งเช่นนี้อาจใช้งานได้:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))

1
ทำไมคุณต้องการรวมRETเช่นนั้น มันจะยอมรับสิ่งที่อยู่ใน minibuffer โดยอัตโนมัติ (สมมติว่าC-x oเปลี่ยนเป็น minibuffer เดียว) โดยทั่วไปแล้วหนึ่งอาจต้องใช้C-x oหลายครั้งหากมี (ใน Emacs parlance) หลายหน้าต่างเปิดในกรอบ (ในแง่ GUI ปกติ: บานหน้าต่างหลายบานในหน้าต่าง)
Chris Johnsen

คุณถูก. ความผิดฉันเอง.
Richard Hoskins

มีวิธีใดบ้างที่จะไปยัง minibuffer โดยตรงโดยไม่ต้องปั่นจักรยานผ่านหน้าต่างทั้งหมดหรือไม่? ฉันควรเขียนลูปที่ทำother-windowจนกว่าหน้าต่างปัจจุบันจะเป็น minibuffer หรือไม่
Ryan Thompson

6

ตัวเลือกอื่นกำลังใช้ switch-window

ฉันคิดว่ามันเป็นแพคเกจที่มีประโยชน์จริง ๆ : มันช่วยให้คุณย้ายไปยังหน้าต่าง Emacs ใด ๆ ได้อย่างรวดเร็ว, (และฉันใช้ windows ที่เปิดอยู่จำนวนมากใน Emacs)

แต่ฉันเพิ่งค้นพบมันยังช่วยให้คุณย้ายไปที่ minibuffer ถ้ามันใช้งานอยู่:

ป้อนคำอธิบายรูปภาพที่นี่

หวังว่ามันจะช่วย


1
แพคเกจที่เกี่ยวข้องswap-buffersซึ่งใช้วิธีการเดียวกันสำหรับการแลกเปลี่ยนบัฟเฟอร์ปัจจุบันกับที่ในหน้าต่างอื่น
pyrocrasty

0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

เพิ่มสองข้างต้นบรรทัดของรหัสที่จะ .emacs.el จะช่วยให้ง่ายและเคลื่อนย้ายที่มีประสิทธิภาพไม่เพียงเพื่อ minibuffer แต่ยังการนำหน้าต่างอื่น ๆ ทั้งหมดในกรอบ Emacs ใช้Shift-ลูกศร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.