Упрощенная навигация по схемам в emacs

Я нашел эту изящную маленькую функцию для организационного режима:

;;; Move to next heading with dedicated buffer preview
(defun ded/org-show-next-heading-tidily ()
  "Show next entry, keeping other entries closed."
  (if (save-excursion (end-of-line) (outline-invisible-p))
      (progn (org-show-entry) (show-children))
    (outline-next-heading)
    (unless (and (bolp) (org-on-heading-p))
      (org-up-heading-safe)
      (hide-subtree)
      (error "Boundary reached"))
    (org-overview)
    (org-reveal t)
    (org-show-entry)
    (show-children)))

Он перемещается от заголовка к заголовку и показывает свое непосредственное содержание и дочерние элементы. Мне понравилась идея, но я бы предпочел, чтобы она отображалась в выделенном буфере с использованием (org-tree-to-indirect-buffer).

Я пытался сделать это так:

(defun ded/org-show-next-heading-test ()
  "Show next entry, keeping other entries closed."
  (if (save-excursion (end-of-line) (outline-invisible-p))
      (progn (org-show-entry) (org-tree-to-indirect-buffer))
    (outline-next-heading)
    (unless (and (bolp) (org-on-heading-p))
      (org-up-heading-safe)
      (hide-subtree)
      (error "Boundary reached"))
    (org-overview)
    (org-reveal t)
    (org-tree-to-indirect-buffer)
    (show-children)))

Но тогда мне приходится дважды нажимать клавишу — один раз показывает запись в выделенном буфере, а второй — все еще показывает запись. Я пытался удалить функцию progn, но тогда она не работала полностью.

Я не программист на Лиспе, и я пытался поиграть с ним около часа, но безрезультатно, поэтому я бы хотел, чтобы кто-нибудь с опытом помог мне разобраться с этим :)

Весьма признателен.


person Devon Ville    schedule 16.10.2012    source источник


Ответы (2)


Не совсем уверен, что вы хотите, но, насколько я понимаю, вы должны вызывать org-tree-to-indirect-buffer в конце:

;;; Move to next heading with dedicated buffer preview
(defun ded/org-show-next-heading-tidily ()
  "Show next entry, keeping other entries closed."
  (if (save-excursion (end-of-line) (outline-invisible-p))
      (progn (org-show-entry) (show-children))
    (outline-next-heading)
    (unless (and (bolp) (org-on-heading-p))
      (org-up-heading-safe)
      (hide-subtree)
      (error "Boundary reached"))
    (org-overview)
    (org-reveal t)
    (org-show-entry)
    (show-children)
    (org-tree-to-indirect-buffer)))

Если это не то, что вы хотите, не могли бы вы дать более подробную информацию.

person Oleg Pavliv    schedule 16.10.2012
comment
Это почти то, что я хочу. Теперь мне не нужно нажимать дважды, чтобы перейти к следующему заголовку. Единственное, чего мне не хватает, так это того, что содержимое записи не отображается в текущем буфере, а только в выделенном буфере... (показывать только заголовки и подзаголовки и обращать внимание на чистый контент). Надеюсь, я разъяснил. - person Devon Ville; 16.10.2012

В итоге я создал свои собственные простые функции для более удобной навигации:

(defun forward-and-preview ()
    "Go to same level next heading and show preview in dedicated buffer"
    (hide-subtree)
    (org-speed-move-safe (quote outline-next-visible-heading))
    (show-children)
    (org-tree-to-indirect-buffer)
    )
(defun back-and-preview ()
    "Go to same level previous heading and show preview in dedicated buffer"
    (hide-subtree)
    (org-speed-move-safe (quote outline-previous-visible-heading))
    (show-children)
    (org-tree-to-indirect-buffer)
    )
(defun up-back-and-preview ()
    "Go to previous level heading and show preview in dedicated buffer"
    (org-speed-move-safe (quote outline-up-heading))
    (org-tree-to-indirect-buffer)
    (hide-subtree)
    )
(defun up-forward-and-preview ()
    "Go to previous level next heading and show preview in dedicated buffer"
    (org-speed-move-safe (quote outline-up-heading))
    (hide-subtree)
    (org-speed-move-safe (quote outline-next-visible-heading))
    (org-tree-to-indirect-buffer)
    )
(defun inside-and-preview ()
    "Go to next level heading and show preview in dedicated buffer"
    (org-speed-move-safe (quote outline-next-visible-heading))
    (show-children)
    (org-tree-to-indirect-buffer)
    )
(add-to-list 'org-speed-commands-user '("l" inside-and-preview))
(add-to-list 'org-speed-commands-user '("j" forward-and-preview))
(add-to-list 'org-speed-commands-user '("k" back-and-preview))
(add-to-list 'org-speed-commands-user '("J" up-forward-and-preview))
(add-to-list 'org-speed-commands-user '("K" up-back-and-preview))
person Devon Ville    schedule 16.10.2012