창을 프레임에“팝업”


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
다른 사람이 쓸 때까지 내가 알지 못했던 또 다른 것. 멋있는.
glucas

좋은! 간결한 +1
PythonNut

(최소) 성능 영향 측면에서 let과 not 형식이 바뀌면 차이가 있습니까?
Matthias

@Matthias이 시점에서 반전이 의미가 있는지 확실하지 않습니다. 현재 버퍼를 바인딩하는 이유는 창을 삭제하면 현재 버퍼의 개념이 변경 될 수 있기 때문입니다. 내가 볼 수있는 유일한 방법은 하나의 창이 있는지 확인하여 코드를 더 복잡하게 만듭니다. 선명도의 손실은 작은 성능 변경 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)))))

선택한 윈도우가 프레임에 단독으로있는 경우 아무 것도 수행하지 않는이 명령과 다음 명령은 library에서 사용할 수 있습니다 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.