동적 버퍼 목차로 두 번째 버퍼에서 조직 모드 개요를 얻으려면 어떻게해야합니까?


25

큰 문서를 편집 할 때 별도의 버퍼에서 개요 (내용 없음)를보고 현재 위치를 확인하고 싶습니다. PDF 파일을 읽을 때와 마찬가지로 왼쪽에 TOC가 있습니다. (아래 참조)

조직 모드에서는 개요를 확장 / 축소 할 수 있습니다. 그러나 제목을 클릭하면 다른 버퍼가 해당 위치로 이동하도록 별도의 버퍼에서 왼쪽 또는 오른쪽에 정적 외곽선을 가질 수 있습니까?

이런 식이지만 org-mode를 좋아합니까? 여기에 이미지 설명을 입력하십시오

[편집]
clone-indirect-buffer매우 가까운 내가 원하는 것입니다. 퍼즐의 누락 부분은 제목 / (또는 실제 지점)을 클릭 할 때 동일한 위치로 점프하는 것입니다.

이를 위해 몇 가지 코드를 작성하려고했습니다. 다른 복제 된 버퍼로 이동하십시오. (간접 버퍼의 동기 위치) (org-mode)

그러나 내용이 축소되면 작동하지 않습니다. 이것이 가능하다면 clone-inderect-buffer는 이것에 대한 완벽한 해결책입니다.

[Edit2 Solution]
위의 링크와 아래 답변의 코드는 niceley를 결합하여 앞뒤로 점프를 해결합니다.

;first call 'clone-indirect-buffer'. Then...

;This function works between buffer and it's clone.
(defun my/goto-same-spot-in-other-buffer () 
  "Go to the same location in the other buffer. Useful for when you have cloned indirect buffers"
  (interactive)
  (let ((my/goto-current-point (point)))
       (other-window 1)
       (goto-char my/goto-current-point)
       (when (invisible-p (point))
        (org-reveal)))
)

;This function is a clone-to-buffer jump only:
; It does find the other buffer first thou instead of just jumping to the other 
; window as does the function above.
(defun my/jump-to-point-and-show ()
  "Switch to a cloned buffer's base buffer and move point to the
cursor position in the clone."
  (interactive)
  (let ((buf (buffer-base-buffer)))
    (unless buf
      (error "You need to be in a cloned buffer!"))
    (let ((pos (point))
          (win (car (get-buffer-window-list buf))))
      (if win
          (select-window win)
        (other-window 1)
        (switch-to-buffer buf))
      (goto-char pos)
      (when (invisible-p (point))
        (show-branches)))))


(global-set-key (kbd "<s-mouse-1>") 'my/goto-same-spot-in-other-buffer)
(global-set-key (kbd "s-m") 'my/goto-same-spot-in-other-buffer)
(global-set-key (kbd "<C-s-mouse-1>") 'my/jump-to-point-and-show)
(global-set-key (kbd "C-s-m") 'my/jump-to-point-and-show)

2
C-c C-x b또는을 시도하십시오 org-tree-to-indirect-buffer.
사무엘 플린트

@SWFlint 짧은 테스트 후 OP가 원하는 것과 다른 것으로 보입니다. 현재 하위 트리를 간접 버퍼에 복사합니다. org-sparse-tree-to-indirect-buffer예를 들어 우리에게 필요한 것은 기능 일 것이지만 존재하지 않는 것 같습니다.
T. Verron 8:24에

조금 더 살펴본 후 조직 창을
Samuel Flint

imenu-list를 언급 할 가치가 있다고 생각 합니다 . 요구 사항 중 일부는 없지만 다른 요구 사항을 해결합니다.
incandescentman 10

org-tree-to-indirect-buffer는 훌륭합니다.
ninrod

답변:


9

몇 가지 옵션이 떠 오릅니다. 처음 두 개 speedbar는와 잘 어울리는 것으로 알려져 있으며 org-mode, minimap사용하지는 않았지만 개인적으로 보증 할 수는 없습니다.

가장 간단한 옵션이자 가장 유연한 옵션은 간접 버퍼 를 사용하는 것 입니다.

실제로 org개요를 원하는 버퍼 로 이동하여 M-x clone-indirect-buffer( C-u M-x clone-indirect-buffer클론이 호출되는 것을 제어하려는 경우 사용 ) 누른 다음 붐을 사용하면 사용할 수있는 버퍼 사본이 하나 더 있습니다. 원본 버퍼와 나란히 창이나 프레임에 클론을 넣고 클론에서 취향에 맞게 윤곽선을 조정하십시오.

언급 한 "개요에서 제목을 클릭하십시오"기능을 제공하지는 않지만 사이드 바의 정신을 얻습니다.

편집 : 귀하의 의견에 따라 버퍼 클론 에서 호출 할 때 기본 버퍼로 전환 하고 커서가 버퍼 클론의 어느 위치로든 이동 하는 간단한 명령이 있습니다 .

(defun jump-to-point-and-show ()
  "Switch to a cloned buffer's base buffer and move point to the
cursor position in the clone."
  (interactive)
  (let ((buf (buffer-base-buffer)))
    (unless buf
      (error "You need to be in a cloned buffer!"))
    (let ((pos (point))
          (win (car (get-buffer-window-list buf))))
      (if win
          (select-window win)
        (other-window 1)
        (switch-to-buffer buf))
      (goto-char pos)
      (when (invisible-p (point))
        (show-branches)))))

스피드 바 / Sr- 스피드 바를 사용해 보았습니다. 매우 좋지만 처음 2 개의 레벨 만 표시합니다. 여기에 더 많은 레벨을 가질 수 있는지 물었습니다. emacs.stackexchange.com/questions/9533/… 간접 버퍼는 좋은 옵션입니다. 어떻게 든 다른 버퍼의 커서를 복제 된 버퍼와 동일한 위치로 이동할 수 있는지 궁금합니다.
Leo Ufimtsev

다른 버퍼의 동일한 위치로 이동하는 코드를 작성하려고했지만 모든 것이 확장 된 경우에만 작동합니다. 그것이 자동 확장되도록 작동하도록 만들 수 있다면, 복제 버퍼는 완벽한 솔루션입니다. 게시물 : emacs.stackexchange.com/questions/9536/…
Leo Ufimtsev

위의 코드 스 니펫에 감사드립니다. ^ _ ^ 감사합니다.
레오 Ufimtsev

16

어떻습니까 : M-x occur RET ^*+ RET(정규 표현식 끝에 공백이 있음에 유의하십시오).


나는 왜 누군가 가이 답변을 다운 투표했는지 모른다. 실제로 이것이 깔끔하고 깔끔한 내장 솔루션이라고 생각합니다. 유일한 단점은 그것이 당신을 따라 가지 않는다는 것입니다. 즉, 현재 버퍼가있는 곳에서 (예를 들어 현재 제목을 강조 표시) 명확하지 않으며 긴 문서를 스크롤하지 않습니다. 그러나 작은 문서의 경우 작동합니다.
레오 Ufimtsev

이 간단한 내장 솔루션이 마음에 듭니다. 강조 표시가 필요한 경우 발생하는 대신 키를 사용하십시오. 또한 다중 발생을 사용하여 여러 조직 파일 버퍼에 단일 탐색을 사용할 수 있다는 이점도 있습니다. 마지막으로 발생 편집을 사용하면 개요보기와 확장 된보기를 모두 편집 할 수 있습니다. 어쨌든, 나는 이것을 찬성 투표하고 있습니다.
이맥스 사용자

놀랍고 간단하며 효율적이기 때문에이를 높이려고합니다.
Gambo

너무 간단합니다. 매우 영리한. 그래서 hackish. 대단해
dangom

7

Dan의 답변과 그에 대한 솔루션을 읽은 후에 이것을 정리했습니다. 그것은 새로운 좁혀 읽기 전용 클론을 현재 버퍼의 좌측에, 그리고 결합 열리고 <mouse-1>RET베이스 버퍼에 해당 위치로 이동 클론에 국부적.

(defun my/open-tree-view ()
  "Open a clone of the current buffer to the left, resize it to 30 columns, and bind <mouse-1> to jump to the same position in the base buffer."
  (interactive)
  (let ((new-buffer-name (concat "<tree>" (buffer-name))))
    ;; Create tree buffer
    (split-window-right 30)
    (if (get-buffer new-buffer-name)
        (switch-to-buffer new-buffer-name)  ; Use existing tree buffer
      ;; Make new tree buffer
      (progn  (clone-indirect-buffer new-buffer-name nil t)
              (switch-to-buffer new-buffer-name)
              (read-only-mode)
              (hide-body)
              (toggle-truncate-lines)

              ;; Do this twice in case the point is in a hidden line
              (dotimes (_ 2 (forward-line 0)))

              ;; Map keys
              (use-local-map (copy-keymap outline-mode-map))
              (local-set-key (kbd "q") 'delete-window)
              (mapc (lambda (key) (local-set-key (kbd key) 'my/jump-to-point-and-show))
                    '("<mouse-1>" "RET"))))))

(defun my/jump-to-point-and-show ()
  "Switch to a cloned buffer's base buffer and move point to the cursor position in the clone."
  (interactive)
  (let ((buf (buffer-base-buffer)))
    (unless buf
      (error "You need to be in a cloned buffer!"))
    (let ((pos (point))
          (win (car (get-buffer-window-list buf))))
      (if win
          (select-window win)
        (other-window 1)
        (switch-to-buffer buf))
      (goto-char pos)
      (when (invisible-p (point))
        (show-branches)))))

이와 함께 작동 outline-mode하고 outline-minor-mode,뿐만 아니라 같은 그들에 모드 그 빌드를, org-mode. 로컬 키 맵을 얻는 방법에 대한 정보 를 찾았 지만 복사 할 키를 선택하는 방법을 모르겠습니다. 이 또한의 이 페이지를 자동으로 버퍼 특정 버퍼 로컬 키를 설정하기위한 작은 모드를 만들 수있는 기능을 가지고 있지만, 그 범위 밖 보인다이 문제에 대한.


1
이것을 공유해 주셔서 감사합니다. outline-mode-map대신에 를 사용하여 와 함께 org-mode-map작동하게 만들었습니다 . AUCTeXoutline-minor-mode
Oleg Domanov

그런데 outline-mode의 함수 hide-body는 헤드 라인을 제외한 모든 것을 숨 깁니다.
Oleg Domanov

@OlegDomanov 그 정보에 감사드립니다! 나는를 사용하는 코드를 개선 outline-mode-map하고 hide-body, 그리고 몇 가지 다른 사소한 개선.
blujay

2

마지막으로 이것은 패키지에서 구현되었습니다 org-sidebar.

조직 사이드 트리 데모


1
호우 레이! 때로는 작동이 멈추는 흔들리는 설정이 있습니다. 지금 패키지라면 절대적으로 BRILLIANT입니다!
Thriveth

0

텍스트 편집기에 aquamacs를 사용하는 비 프로그래머가 제공하는 두 가지 임대료 제안 (내가하는 일) :

  1. 버퍼 내 명령으로 앞뒤로 전환 :

시작 : 들여 쓰기 (폭포 유형 개요를 전체적으로보기 쉽게 표시)

이것은 버퍼를 탭으로 볼 때 사용합니다.

+ OPTIONS : H : N, 여기서 N = = html 내보내기에서 보려는 레벨 수 (제안 # 2)

참조 : https://emacsclub.github.io/html/org_tutorial.html

  1. TOC를 보려면 html (CC CE hh)로 내보내십시오. 들여 쓰기 할 HTML 또는 텍스트 (CC CE ta)의 텍스트 출력을 쉽게 얻을 수있는 사람을 찾을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.