summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2013-02-08 17:11:13 +0100
committerBastien Guerry <bzg@altern.org>2013-02-08 17:11:13 +0100
commiteac6af707c6f81643da2c37fe52929fcb5b1110f (patch)
tree91dae18f7568667b126485527c4355fc2af1b17f
parent6bcd7c44ec12ea0f6d0da0f54f9ded46bd310637 (diff)
downloadorg-mode-eac6af707c6f81643da2c37fe52929fcb5b1110f.tar.gz
New commands `org-next-block' and `org-previous-block'
* ob-core.el (org-babel-next-src-block) (org-babel-previous-src-block): Rewrite using `org-next-block'. * org.el (org-next-block, org-previous-block): New navigation commands. (org-mode-map): Bind the new commands to C-c C-F and C-c C-B respectively. Thanks to Bill White for suggesting this.
-rw-r--r--lisp/ob-core.el15
-rw-r--r--lisp/org.el24
2 files changed, 28 insertions, 11 deletions
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index bdf8c54..1c523ea 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -1639,22 +1639,15 @@ buffer or nil if no such result exists."
(defun org-babel-next-src-block (&optional arg)
"Jump to the next source block.
With optional prefix argument ARG, jump forward ARG many source blocks."
- (interactive "P")
- (when (looking-at org-babel-src-block-regexp) (forward-char 1))
- (condition-case nil
- (re-search-forward org-babel-src-block-regexp nil nil (or arg 1))
- (error (error "No further code blocks")))
- (goto-char (match-beginning 0)) (org-show-context))
+ (interactive "p")
+ (org-next-block arg nil org-babel-src-block-regexp))
;;;###autoload
(defun org-babel-previous-src-block (&optional arg)
"Jump to the previous source block.
With optional prefix argument ARG, jump backward ARG many source blocks."
- (interactive "P")
- (condition-case nil
- (re-search-backward org-babel-src-block-regexp nil nil (or arg 1))
- (error (error "No previous code blocks")))
- (goto-char (match-beginning 0)) (org-show-context))
+ (interactive "p")
+ (org-previous-block arg org-babel-src-block-regexp))
(defvar org-babel-load-languages)
diff --git a/lisp/org.el b/lisp/org.el
index 4b649a0..001e139 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -18463,6 +18463,8 @@ BEG and END default to the buffer boundaries."
(org-defkey org-mode-map "\C-c\C-_" 'org-down-element)
(org-defkey org-mode-map "\C-c\C-f" 'org-forward-heading-same-level)
(org-defkey org-mode-map "\C-c\C-b" 'org-backward-heading-same-level)
+(org-defkey org-mode-map "\C-c\C-F" 'org-next-block)
+(org-defkey org-mode-map "\C-c\C-B" 'org-previous-block)
(org-defkey org-mode-map "\C-c$" 'org-archive-subtree)
(org-defkey org-mode-map "\C-c\C-x\C-s" 'org-advertized-archive-subtree)
(org-defkey org-mode-map "\C-c\C-x\C-a" 'org-archive-subtree-default)
@@ -22659,6 +22661,28 @@ Stop at the first and last subheadings of a superior heading."
(if (< l level) (setq arg 1)))
(setq arg (1- arg))))))
+(defun org-next-block (arg &optional backward block-regexp)
+ "Jump to the next block.
+With a prefix argument ARG, jump forward ARG many source blocks.
+When BACKWARD is non-nil, jump to the previous block.
+When BLOCK-REGEXP is non-nil, use this regexp to find blocks."
+ (interactive "p")
+ (let ((re (or block-regexp org-babel-src-block-regexp))
+ (re-search-fn (or (and backward 're-search-backward)
+ 're-search-forward)))
+ (if (looking-at re) (forward-char 1))
+ (condition-case nil
+ (funcall re-search-fn re nil nil arg)
+ (error (error "No %s code blocks" (if backward "previous" "further" ))))
+ (goto-char (match-beginning 0)) (org-show-context)))
+
+(defun org-previous-block (arg &optional block-regexp)
+ "Jump to the previous block.
+With a prefix argument ARG, jump backward ARG many source blocks.
+When BLOCK-REGEXP is non-nil, use this regexp to find blocks."
+ (interactive "p")
+ (org-next-block arg t block-regexp))
+
(defun org-forward-element ()
"Move forward by one element.
Move to the next element at the same level, when possible."