“ ป๊อป” หน้าต่างเข้าไปในกรอบ


13

บ่อยครั้งที่ฉันหน้าต่างของฉันถูกแบ่งโดยอัตโนมัติจนกว่าฉันจะตัดสินใจเองว่าเฟรมปัจจุบันไม่มีอสังหาริมทรัพย์เพียงพอสำหรับพวกเขาทั้งหมด เมื่อสิ่งนี้เกิดขึ้นฉันจะลบหน้าต่างด้วยตนเองสร้างเฟรมและสลับไปที่หน้าต่างที่ถูกลบนั้น ฉันจะเขียนฟังก์ชัน elisp ที่ทำสิ่งนี้ได้อย่างไร

ฉันเหนื่อย:

(defun pop-window-into-frame ()
  (interactive)
  (delete-window)
  (make-frame-command)
  (switch-to-prev-buffer))

แต่ด้วยเหตุผลบางอย่างนี้ไม่ได้ทำในสิ่งที่ฉันคิดว่ามันควร

คำตอบ:


15

ลองใช้สิ่งนี้แทน:

(defun my-turn-current-window-into-frame ()
  (interactive)
  (let ((buffer (current-buffer)))
    (unless (one-window-p)
      (delete-window))
    (display-buffer-pop-up-frame buffer nil)))

1
อีกอย่างที่ฉันไม่รู้ว่าฉันต้องการจนกระทั่งมีคนเขียน เย็น.
ลูกัส

ดี! +1 สำหรับการกระชับ
PythonNut

ในแง่ของผลกระทบต่อประสิทธิภาพ (ขั้นต่ำ) - มันจะสร้างความแตกต่างได้หรือไม่ถ้าการอนุญาตและยกเว้นว่ามีการสลับรูปแบบ?
Matthias

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

@wasamasa ขออภัยที่ไม่ได้แม่นยำ ฉันมีในใจ (เว้นแต่ (หนึ่งหน้าต่าง -P) (ให้ ...
แมทเธีย

4
;; Inspired from `mouse-tear-off-window'.
(defun tear-off-window ()
  "Create a new frame displaying buffer of selected window.
    If window is not the only one in frame, then delete it.
    Otherwise, this command effectively clones the frame and window."
  (interactive)
  (let ((owin  (selected-window))
        (buf   (window-buffer))
        (fr    (make-frame)))
    (select-frame fr)
    (switch-to-buffer buf)
    (save-window-excursion 
      (select-window owin)
      (unless (one-window-p) (delete-window owin)))))

frame-cmds.elคำสั่งนี้เช่นเดียวกับการต่อไปซึ่งไม่ทำอะไรเลยถ้าหน้าต่างที่เลือกเป็นคนเดียวในกรอบของตนที่มีอยู่ในห้องสมุด

(defun tear-off-window-if-not-alone ()
  "Move selected window to a new frame, unless it is alone in its frame.
If it is alone, do nothing.  Otherwise, delete it and create a new
frame showing the same buffer."
  (interactive)
  (if (one-window-p 'NOMINI)
      (message "Sole window in frame")
    (tear-off-window)))

นี่ไม่ได้ให้ความสำคัญกับเฟรมใหม่ที่นี่ (gnome3.28) การเพิ่ม(select-frame-set-input-focus fr)เมื่อสิ้นสุดการทำงาน
olejorgenb

@olejorgenb: ใช่ไม่ว่าจะเป็นเฟรมที่สร้างขึ้นใหม่ได้รับโฟกัสป้อนข้อมูลสามารถขึ้นอยู่กับการจัดการหน้าต่างของคุณ select-frame-set-input-focusดังนั้นใช่คุณอาจจำเป็นต้องเพิ่ม ตัวอย่างเช่นใน MS Windows จะได้รับการโฟกัสดังนั้นจึงไม่จำเป็น นอกจากนี้คำอธิบายคำสั่งไม่ได้บอกว่ากรอบโฟกัส หากต้องการก็สามารถสร้างคำสั่งอื่นที่เรียกสิ่งนี้แล้วโฟกัสเฟรม
Drew
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.