Pencereyi çerçeveye “pop”


13

Genellikle, mevcut karenin hepsi için yeterli gayrimenkul olmadığına karar verene kadar pencerelerim otomatik olarak bölünür. Bu durumda, bir pencereyi el ile silerim, bir çerçeve oluşturur ve silinmiş pencereye geçerim. Bunu yapan bir elisp fonksiyonunu nasıl yazabilirim?

Denedim:

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

Ama nedense bu düşündüğüm şeyi yapmıyor.

Yanıtlar:


15

Bunun yerine şunu deneyin:

(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
Başka biri yazana kadar istediğimi bilmediğim başka bir şey. Güzel.
glucas

Güzel! Kısa ve öz olmak için +1.
PythonNut

(Minimum) performans etkisi açısından - izin verilen formlar değiştirilip değiştirilmediği takdirde fark yaratır mı?
Matthias

@Matthias Evirmenin bu noktada anlamlı olup olmayacağından emin değilim, geçerli arabelleği bağlamamın nedeni, pencereyi silmenin mevcut arabelleğin kavramını değiştirebilmesidir. Etrafında sadece tek bir pencere olup olmadığını kontrol ederek kodu daha karmaşık hale getirecek olursak, evet mevcut arabellek bağlayıcı izin, silme ve haşhaş, hayır sadece mevcut tampon yeni bir çerçeve içinde görüntüleniyor. Netlik kaybı, küçük performans değişikliği IMHO için buna değmez.
wasamasa

@wasamasa hassas olmadığım için üzgünüm. Aklımdaydı (tek pencere-p) (izin ver ...
Matthias

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

Bu komutun yanı sıra, seçilen pencere çerçevesinde yalnız ise hiçbir şey yapmaz, kitaplıkta kullanılabilir 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)))

Buradaki yeni çerçeveye odaklanmadı (gnome3.28). (select-frame-set-input-focus fr)Sonunda ekleme çalıştı.
olejorgenb

@olejorgenb: Evet, yeni oluşturulan bir çerçevenin giriş odağını alıp almadığı pencere yöneticinize bağlı olabilir. Yani evet, eklemeniz gerekebilir select-frame-set-input-focus. Örneğin, MS Windows'da, odağı alır, bu yüzden buna gerek yoktur. Ayrıca, komut açıklaması çerçevenin odaklandığını söylemez. İstenirse, bunu çağıran ve daha sonra çerçeveyi odaklayan farklı bir komut oluşturulabilir.
Drew
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.