lang/org: add goto-visible & refile-to-visible commands

- Bind 'gsh' to goto-visible command in org-mode
- Bind '<localleader> g v' to goto-visible
- Bind '<localleader> r v' to refile-to-visible
- Add avy package to lang/org module

Powered by avy.
This commit is contained in:
Henrik Lissner 2019-12-06 17:00:01 -05:00
parent 77b0784075
commit c8cfa31a1e
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
5 changed files with 45 additions and 0 deletions

View file

@ -85,6 +85,10 @@
:n "q" #'kill-current-buffer)
:m "gs" #'+evil/easymotion ; lazy-load `evil-easymotion'
(:after org
:map org-mode-map
:m "gsh" #'+org/goto-visible)
(:when (featurep! :editor multiple-cursors)
:prefix "gz"
:nv "d" #'evil-mc-make-and-goto-next-match

View file

@ -0,0 +1,19 @@
;;; lang/org/autoload/org-avy.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +org-headline-avy ()
"TODO"
(save-excursion
(when-let* ((org-reverse-note-order t)
(pos (avy-with avy-goto-line (avy-jump (rx bol (1+ "*") (1+ blank))))))
(when (integerp (car pos))
;; If avy is aborted with "C-g", it returns `t', so we know it was NOT
;; aborted when it returns an int. If it doesn't return an int, we
;; return nil.
(copy-marker (car pos))))))
;;;###autoload
(defun +org/goto-visible ()
"TODO"
(interactive)
(goto-char (+org-headline-avy)))

View file

@ -62,3 +62,22 @@
(lambda (_p _coll _pred _rm _ii _h default &rest _)
default)))
(org-refile)))
(defvar org-after-refile-insert-hook)
;; Inspired by org-teleport and alphapapa/alpha-org
;;;###autoload
(defun +org/refile-to-visible ()
"Refile current heading as first child of visible heading selected with Avy."
(interactive)
(when-let (marker (+org-headline-avy))
(let* ((buffer (marker-buffer marker))
(filename
(buffer-file-name (or (buffer-base-buffer buffer)
buffer)))
(heading
(org-with-point-at marker
(org-get-heading 'no-tags 'no-todo)))
;; Won't work with target buffers whose filename is nil
(rfloc (list heading filename nil marker))
(org-after-refile-insert-hook (cons #'org-reveal org-after-refile-insert-hook)))
(org-refile nil nil rfloc))))

View file

@ -675,6 +675,7 @@ between the two."
"C" (λ! (org-clock-goto 'select))
"i" #'org-id-goto
"r" #'org-refile-goto-last-stored
"v" #'+org/goto-visible
"x" #'org-capture-goto-last-stored)
(:prefix ("l" . "links")
"c" 'org-cliplink
@ -690,6 +691,7 @@ between the two."
"l" #'+org/refile-to-last-location
"o" #'+org/refile-to-other-window
"O" #'+org/refile-to-other-buffers
"v" #'+org/refile-to-visible
"r" #'org-refile)) ; to all `org-refile-targets'
(map! :after org-agenda

View file

@ -24,6 +24,7 @@
(package! org-plus-contrib) ; install cutting-edge version of org-mode
(package! avy)
(package! htmlize)
(package! org-bullets :recipe (:host github :repo "Kaligule/org-bullets"))
(package! org-fancy-priorities)