이맥스 창 관리


2

버퍼가 표시되면 다음을 달성하고 싶습니다 GNU Emacs.

  1. 내 창문을 쪼개서는 안됩니다.

  2. 버퍼가 이미 창에서 열려 있으면 다시 사용해야하고, 그렇지 않으면 현재 창을 사용해야합니다.


부분 솔루션

  • 설정 pop-up-windows하는 nil점을 해결할 것입니다 1;

  • 설정 same-window-regexps하기 '("^\*")지점의 두 번째 부분을 해결할 수 2있지만, 이전과는 대조적이다.

답변:


3

display-buffer변수를 설정하여 함수의 동작을 사용자 정의 할 수 있음을 발견했습니다 display-buffer-function.

이 기능은 내가 원하는 것을하는 것처럼 보입니다 (확실히 정리가 필요하지만 작동합니다).

(데 펀트 내 디스플레이 버퍼 (BUFFER-OR-NAME 및 선택 사항 NOT-THIS-WINDOW)
  (캐치 리턴
    ;; 기존 창에서 버퍼를 검색
    (((윈도우리스트)))
      ((첫번째 창)
        ;; 녹이다
        (if (eq (윈도우 버퍼 (첫 번째 창)) BUFFER-OR-NAME)
            (반품을 던져
                   ;; 미니 버퍼가 창을 선택하지 않으면
                   (if (eq (선택된 창) (미니 버퍼 창))
                       (첫번째 창)
                     (선택 창 (첫 번째 창)))))
        ;; 다음 창
        (setq 창 (휴식 창)))
    ;; 그렇지 않으면 전류를 사용하십시오
    (if (eq (선택된 창) (미니 버퍼 창))
        ;; 만약 minubuffer라면
        (프론
          (선택 창 (미니 버퍼 선택 창))
          (버퍼-버퍼 BUFFER-OR-NAME)
          (선택 창 (미니 버퍼 창)))
      ;; 일반 창이라면
      (프론
        (버퍼-버퍼 BUFFER-OR-NAME)
        (선택된 창)))))

1
  1. (setq pop-up-windows nil) 당신이 원하는 것을하는 것 같습니다.
  2. 나는 당신이 여기서 많이해야한다고 생각하지 않습니다. 최소한 help 명령은 이미이 동작을 나타냅니다.

당신 말이 맞아요, switch-to-buffer-other-window도움말 코드의 내부에서 꽤 깊이 사용 된 것 같습니다 . 특정 상황에서 스위치-버퍼를 사용하도록 스위치-버퍼-기타 창에 조언을 시도 할 수 있습니다. 그것은 당신에게 시작을 제공해야합니다.
Joseph Gay

팁 주셔서 감사합니다, 나는 그 방향을 살펴볼 것이지만 *Help*그것은 단지 예일뿐입니다.
cYrus

그것은 사실이지만 switch-to-buffer-other-window, 원하지 않는 행동을 보는 대부분의 경우에 사용 되기 때문에 원하는 경우 조건에 따라 모든 경우를 수정하도록 조언합니다.
Joseph Gay

변수를 사용자 정의하면 display-buffer-function트릭을 수행 할 것 같습니다 . 내 답변을 참조하십시오 .
cYrus

잘 찾으세요. 조언을 사용하는 것이 내 제안보다 확실히 바람직합니다.
Joseph Gay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.