소스 검색

new interactive function for removing code block results

* lisp/ob-keys.el (org-babel-key-bindings): Bound to C-c C-v k.

* lisp/ob.el (org-babel-map-regexp): New generic mapping macro.
  (org-babel-map-inline-src-blocks): Rewritten to use new macro.
  (org-babel-kill-results): Remove some or all results in the current
  file.

* lisp/ob-lob.el (org-babel-map-call-lines): Map over all lob call
  lines in the current file.

* doc/orgcard.tex: Document new keybinding.
Eric Schulte 13 년 전
부모
커밋
72817926d7
4개의 변경된 파일36개의 추가작업 그리고 6개의 파일을 삭제
  1. 1 0
      doc/orgcard.tex
  2. 2 0
      lisp/ob-keys.el
  3. 8 1
      lisp/ob-lob.el
  4. 25 5
      lisp/ob.el

+ 1 - 0
doc/orgcard.tex

@@ -447,6 +447,7 @@ formula, \kbd{:=} a field formula.
 \key{check code block at point for errors}{C-c C-v c}
 \key{check code block at point for errors}{C-c C-v c}
 \key{view expanded body of code block at point}{C-c C-v v}
 \key{view expanded body of code block at point}{C-c C-v v}
 \key{view information about code block at point}{C-c C-v I}
 \key{view information about code block at point}{C-c C-v I}
+\key{delete some or all results in current buffer}{C-c C-v k}
 \key{go to named code block}{C-c C-v g}
 \key{go to named code block}{C-c C-v g}
 \key{go to named result}{C-c C-v r}
 \key{go to named result}{C-c C-v r}
 \key{go to the head of the current code block}{C-c C-v u}
 \key{go to the head of the current code block}{C-c C-v u}

+ 2 - 0
lisp/ob-keys.el

@@ -63,6 +63,8 @@ functions which are assigned key bindings, and see
     ("g" . org-babel-goto-named-src-block)
     ("g" . org-babel-goto-named-src-block)
     ("r" . org-babel-goto-named-result)
     ("r" . org-babel-goto-named-result)
     ("\C-r" . org-babel-goto-named-result)
     ("\C-r" . org-babel-goto-named-result)
+    ("k" . org-babel-kill-results)
+    ("\C-k" . org-babel-kill-results)
     ("\C-b" . org-babel-execute-buffer)
     ("\C-b" . org-babel-execute-buffer)
     ("b" . org-babel-execute-buffer)
     ("b" . org-babel-execute-buffer)
     ("\C-s" . org-babel-execute-subtree)
     ("\C-s" . org-babel-execute-subtree)

+ 8 - 1
lisp/ob-lob.el

@@ -87,7 +87,14 @@ If you change the value of this variable then your files may
 	  "\\|" org-babel-inline-lob-one-liner-regexp "\\)")
 	  "\\|" org-babel-inline-lob-one-liner-regexp "\\)")
   "Regexp to match calls to predefined source block functions.")
   "Regexp to match calls to predefined source block functions.")
 
 
-;; functions for executing lob one-liners
+;;;###autoload
+(defmacro org-babel-map-call-lines (file &rest body)
+  "Evaluate BODY forms on each #+call line in FILE.
+If FILE is nil evaluate BODY forms on source blocks in current
+buffer."
+  (declare (indent 1))
+  `(org-babel-map-regexp ,org-babel-block-lob-one-liner-regexp ,file ,@body))
+
 ;;;###autoload
 ;;;###autoload
 (defun org-babel-lob-execute-maybe ()
 (defun org-babel-lob-execute-maybe ()
   "Execute a Library of Babel source block, if appropriate.
   "Execute a Library of Babel source block, if appropriate.

+ 25 - 5
lisp/ob.el

@@ -65,6 +65,7 @@
 (declare-function orgtbl-to-orgtbl "org-table" (table params))
 (declare-function orgtbl-to-orgtbl "org-table" (table params))
 (declare-function org-babel-tangle-comment-links "ob-tangle" (&optional info))
 (declare-function org-babel-tangle-comment-links "ob-tangle" (&optional info))
 (declare-function org-babel-lob-get-info "ob-lob" nil)
 (declare-function org-babel-lob-get-info "ob-lob" nil)
+(declare-function org-babel-map-call-lines "ob-lob" (file &rest body))
 (declare-function org-babel-ref-split-args "ob-ref" (arg-string))
 (declare-function org-babel-ref-split-args "ob-ref" (arg-string))
 (declare-function org-babel-ref-parse "ob-ref" (assignment))
 (declare-function org-babel-ref-parse "ob-ref" (assignment))
 (declare-function org-babel-ref-resolve "ob-ref" (ref))
 (declare-function org-babel-ref-resolve "ob-ref" (ref))
@@ -721,12 +722,11 @@ end-body --------- point at the end of the body"
        (unless visited-p (kill-buffer to-be-removed))
        (unless visited-p (kill-buffer to-be-removed))
        (goto-char point))))
        (goto-char point))))
 
 
-;;;###autoload
-(defmacro org-babel-map-inline-src-blocks (file &rest body)
-  "Evaluate BODY forms on each inline source-block in FILE.
+(defmacro org-babel-map-regexp (regexp file &rest body)
+  "Evaluate BODY forms on each match of REGEXP in FILE.
 If FILE is nil evaluate BODY forms on source blocks in current
 If FILE is nil evaluate BODY forms on source blocks in current
 buffer."
 buffer."
-  (declare (indent 1))
+  (declare (indent 2))
   (let ((tempvar (make-symbol "file")))
   (let ((tempvar (make-symbol "file")))
     `(let* ((,tempvar ,file)
     `(let* ((,tempvar ,file)
 	    (visited-p (or (null ,tempvar)
 	    (visited-p (or (null ,tempvar)
@@ -736,13 +736,21 @@ buffer."
 	 (when ,tempvar (find-file ,tempvar))
 	 (when ,tempvar (find-file ,tempvar))
 	 (setq to-be-removed (current-buffer))
 	 (setq to-be-removed (current-buffer))
 	 (goto-char (point-min))
 	 (goto-char (point-min))
-	 (while (re-search-forward org-babel-inline-src-block-regexp nil t)
+	 (while (re-search-forward ,regexp nil t)
 	   (goto-char (match-beginning 1))
 	   (goto-char (match-beginning 1))
 	   (save-match-data ,@body)
 	   (save-match-data ,@body)
 	   (goto-char (match-end 0))))
 	   (goto-char (match-end 0))))
        (unless visited-p (kill-buffer to-be-removed))
        (unless visited-p (kill-buffer to-be-removed))
        (goto-char point))))
        (goto-char point))))
 
 
+;;;###autoload
+(defmacro org-babel-map-inline-src-blocks (file &rest body)
+  "Evaluate BODY forms on each inline source-block in FILE.
+If FILE is nil evaluate BODY forms on source blocks in current
+buffer."
+  (declare (indent 1))
+  `(org-babel-map-regexp ,org-babel-inline-src-block-regexp ,file ,@body))
+
 ;;;###autoload
 ;;;###autoload
 (defun org-babel-execute-buffer (&optional arg)
 (defun org-babel-execute-buffer (&optional arg)
   "Execute source code blocks in a buffer.
   "Execute source code blocks in a buffer.
@@ -1325,6 +1333,7 @@ With optional prefix argument ARG, jump backward ARG many source blocks."
        (goto-char (match-beginning 5))))
        (goto-char (match-beginning 5))))
    (org-babel-where-is-src-block-head)))
    (org-babel-where-is-src-block-head)))
 
 
+;;;###autoload
 (defun org-babel-demarcate-block (&optional arg)
 (defun org-babel-demarcate-block (&optional arg)
   "Wrap or split the code in the region or on the point.
   "Wrap or split the code in the region or on the point.
 When called from inside of a code block the current block is
 When called from inside of a code block the current block is
@@ -1367,6 +1376,17 @@ region is not active then the point is demarcated."
 			"#+end_src\n"))
 			"#+end_src\n"))
 	(goto-char start) (move-end-of-line 1)))))
 	(goto-char start) (move-end-of-line 1)))))
 
 
+;;;###autoload
+(defun org-babel-kill-results (arg)
+  "Remove the results from the current code block or call line.
+When called with prefix argument remove all results in the current file."
+  (interactive "P")
+  (if (null arg)
+      (org-babel-remove-result)
+    (org-babel-map-call-lines nil (org-babel-remove-result))
+    (org-babel-map-src-blocks nil (org-babel-remove-result))
+    (org-babel-map-inline-src-blocks nil (org-babel-remove-result))))
+
 (defvar org-babel-lob-one-liner-regexp)
 (defvar org-babel-lob-one-liner-regexp)
 (defvar org-babel-inline-lob-one-liner-regexp)
 (defvar org-babel-inline-lob-one-liner-regexp)
 (defun org-babel-where-is-src-block-result (&optional insert info hash indent)
 (defun org-babel-where-is-src-block-result (&optional insert info hash indent)