[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master f4c45d3 044/110: avy.el: Add org-mode commands for jumping
From: |
Oleh Krehel |
Subject: |
[elpa] master f4c45d3 044/110: avy.el: Add org-mode commands for jumping to and refiling headings |
Date: |
Sat, 11 May 2019 10:15:40 -0400 (EDT) |
branch: master
commit f4c45d329a31870fb3c927e50dd2561c33ac78a6
Author: Adam Porter <address@hidden>
Commit: Adam Porter <address@hidden>
avy.el: Add org-mode commands for jumping to and refiling headings
* (avy-org-refile-as-child): Refile current heading to a heading
selected with Avy.
* (avy-org-goto-heading-timer): Jump to a heading selected with Avy.
Like avy-goto-char-timer, but for Org headings.
* (avy--read-string-with-timeout): Read a string from the minibuffer
with a timeout. Basically factored out of avy-goto-char-timer.
---
README.md | 4 ++++
avy.el | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/README.md b/README.md
index 5a4542b..8961ff0 100644
--- a/README.md
+++ b/README.md
@@ -80,6 +80,10 @@ After <kbd>M-g e</kbd>:
![avy-goto-word-0](http://oremacs.com/download/avi-goto-word-0.png)
+### Org-mode commands
+
+ * `avy-org-goto-heading-timer`: Type part of an Org heading. When you stop
typing, if only one heading on the screen matches, it will be jumped to; if
more than one matches, you can jump to a heading with Avy. This is like
`avy-goto-char-timer` but for Org headings.
+ * `avy-org-refile-as-child`: With point in an entry you want to refile, run
this command, select a heading with Avy, and the entry will be refiled as its
first child heading. This makes it quick and easy to refile to headings that
are visible on-screen, even to other windows or buffers.
### Other commands
diff --git a/avy.el b/avy.el
index 84d23dc..0eabc4c 100644
--- a/avy.el
+++ b/avy.el
@@ -538,6 +538,56 @@ multiple DISPLAY-FN invokations."
(funcall avy-handler-function char))))
(cdar alist))))
+;; ** Org-mode
+
+(defun avy-org-refile-as-child ()
+ "Refile current heading as first child of heading selected with `avy.'"
+ ;; Inspired by `org-teleport':
http://kitchingroup.cheme.cmu.edu/blog/2016/03/18/Org-teleport-headlines/
+ (interactive)
+ (let ((rfloc (save-excursion
+ (let* ((org-reverse-note-order t)
+ (pos (avy-with avy-goto-line
+ (avy--generic-jump (rx bol (1+ "*") (1+ space))
+ nil avy-style)
+ (point)))
+ (filename (buffer-file-name (or (buffer-base-buffer
(current-buffer))
+ (current-buffer)))))
+ (list nil filename nil pos)))))
+ ;; org-refile must be called outside of the excursion
+ (org-refile nil nil rfloc)))
+
+(defun avy-org-goto-heading-timer (&optional arg)
+ "Read one or many characters and jump to matching Org headings.
+The window scope is determined by `avy-all-windows' (ARG negates it)."
+ (interactive "P")
+ (let* ((avy-all-windows (if arg
+ (not avy-all-windows)
+ avy-all-windows))
+ (input (avy--read-string-with-timeout))
+ (regexp (rx-to-string `(seq bol (1+ "*") (1+ space) (0+ not-newline)
+ ,input (0+ not-newline) eol))))
+ (avy-with avy-goto-char-timer
+ (avy--process (avy--regex-candidates regexp)
+ (avy--style-fn avy-style)))))
+
+(defun avy--read-string-with-timeout ()
+ "Read string from minibuffer with a timeout."
+ ;; It's a shame that only `read-char' has the timeout option, so we
+ ;; have to do this funky loop ourselves, instead of
+ ;; e.g. `read-string' with a timeout.
+ (cl-loop with charnum
+ with string = ""
+ while (not (equal 13 charnum))
+ for charnum = (read-char (format "Prompt: %s" string )
+ t
+ (unless (string-empty-p string)
+ avy-timeout-seconds))
+ if (and charnum
+ (not (equal 13 charnum)))
+ concat (make-string 1 charnum) into string
+ else do (setq charnum 13)
+ finally return string))
+
;;** Rest
(defun avy-window-list ()
"Return a list of windows depending on `avy-all-windows'."
- [elpa] master a0ce6a7 050/110: Add avy-mouse-event-window and fix typo, (continued)
- [elpa] master a0ce6a7 050/110: Add avy-mouse-event-window and fix typo, Oleh Krehel, 2019/05/11
- [elpa] master 9489ca9 062/110: Add window selection via mouse button press and fix typo, Oleh Krehel, 2019/05/11
- [elpa] master 1b9f061 055/110: avy.el (avy-action-kill-stay): Adjust for avy-goto-line, Oleh Krehel, 2019/05/11
- [elpa] master dee0284 056/110: avy.el (avy-action-kill-move): Adjust for avy-goto-line, Oleh Krehel, 2019/05/11
- [elpa] master 56f6590 054/110: avy.el (avy-action-copy): Adjust for avy-goto-line, Oleh Krehel, 2019/05/11
- [elpa] master c08fc7c 049/110: Add option to match newline in avy-goto-char-timer, Oleh Krehel, 2019/05/11
- [elpa] master 245b5d6 046/110: avy.el: Fix compile warnings, Oleh Krehel, 2019/05/11
- [elpa] master 0ed6408 043/110: avy.el: Fix checkdoc warnings, Oleh Krehel, 2019/05/11
- [elpa] master 36f768d 047/110: avy.el (avy-words): Specify custom type, Oleh Krehel, 2019/05/11
- [elpa] master 9103291 048/110: Update description to be easier to understand., Oleh Krehel, 2019/05/11
- [elpa] master f4c45d3 044/110: avy.el: Add org-mode commands for jumping to and refiling headings,
Oleh Krehel <=
- [elpa] master 4af1993 053/110: avy.el (avy-read): Update avy-current-path before returning, Oleh Krehel, 2019/05/11
- [elpa] master 176f34f 051/110: avy.el (avy-handler-default): Error msg on mouse clicks, Oleh Krehel, 2019/05/11
- [elpa] master 8556274 045/110: avy.el (avy-org-goto-heading-timer): Simplify, Oleh Krehel, 2019/05/11
- [elpa] master 83859c3 040/110: avy.el: Add new avy-style to use words as sequences, Oleh Krehel, 2019/05/11
- [elpa] master 240d717 041/110: Makefile: Add target checkdoc to check documentation guidelines of lisp files, Oleh Krehel, 2019/05/11
- [elpa] master 3980c03 035/110: avy.el (avy-move-region): Insert in original window, Oleh Krehel, 2019/05/11
- [elpa] master 54bce2c 036/110: avy.el (avy-move-region): Update, Oleh Krehel, 2019/05/11
- [elpa] master 49b070d 042/110: avy-test.el: Fix checkdoc warnings, Oleh Krehel, 2019/05/11
- [elpa] master 228ed97 039/110: avy.el (avy-action-teleport): Add and bind to "t", Oleh Krehel, 2019/05/11
- [elpa] master f2bedee 038/110: Allow "C-h" to delete for avy-goto-char-timer, Oleh Krehel, 2019/05/11