浏览代码

Avoid calling `goto-line' from lisp programs

Carsten Dominik 15 年之前
父节点
当前提交
350691164b
共有 10 个文件被更改,包括 89 次插入49 次删除
  1. 34 0
      lisp/ChangeLog
  2. 4 4
      lisp/org-agenda.el
  3. 2 2
      lisp/org-colview-xemacs.el
  4. 3 3
      lisp/org-colview.el
  5. 1 1
      lisp/org-exp.el
  6. 2 2
      lisp/org-list.el
  7. 7 1
      lisp/org-macs.el
  8. 5 5
      lisp/org-src.el
  9. 28 28
      lisp/org-table.el
  10. 3 3
      lisp/org.el

+ 34 - 0
lisp/ChangeLog

@@ -1,5 +1,36 @@
 2009-08-27  Carsten Dominik  <carsten.dominik@gmail.com>
 
+	* org-macs.el (org-goto-line): New defsubst.
+
+	* org.el (org-open-file, org-change-tag-in-region)
+	(org-fast-tag-show-exit): Don't use `goto-line'.
+
+	* org-table.el (org-table-align, org-table-insert-column)
+	(org-table-delete-column, org-table-move-column)
+	(org-table-sort-lines, org-table-copy-region)
+	(org-table-paste-rectangle, org-table-wrap-region)
+	(org-table-get-specials, org-table-rotate-recalc-marks)
+	(org-table-get-range, org-table-recalculate)
+	(org-table-edit-formulas, org-table-fedit-convert-buffer)
+	(org-table-show-reference, org-table-highlight-rectangle): Don't
+	use `goto-line'.
+
+	* org-src.el (org-edit-src-code, org-edit-fixed-width-region)
+	(org-edit-src-exit): Don't use `goto-line'.
+
+	* org-macs.el (org-preserve-lc): Don't use `goto-line'.
+
+	* org-list.el (org-renumber-ordered-list, org-fix-bullet-type):
+	Don't use `goto-line'.
+
+	* org-exp.el (org-export-number-lines): Don't use `goto-line'.
+
+	* org-colview.el (org-columns, org-columns-redo)
+	(org-agenda-columns): Don't use `goto-line'.
+
+	* org-colview-xemacs.el (org-columns, org-agenda-columns): Don't
+	use `goto-line'.
+
 	* org-agenda.el (org-agenda-mode): Force visual line motion off.
 	(org-agenda-add-entry-text-maxlines): Improve docstring.
 	(org-agenda-start-with-entry-text-mode): New option.
@@ -19,6 +50,9 @@
 	(org-agenda-entry-text-mode): New command.
 	(org-agenda-set-mode-name): Add entry text mode to the mode line
 	string.
+	(org-agenda-undo, org-agenda-get-restriction-and-command)
+	(org-agenda-get-some-entry-text, org-agenda-redo): Don't use
+	`goto-line'.
 
 2009-08-26  Bernt Hansen  <bernt@norang.ca>  (tiny change)
 

+ 4 - 4
lisp/org-agenda.el

@@ -1610,7 +1610,7 @@ that have been changed along."
 			    (not (car pending-undo-list)))
 		  (pop pending-undo-list))
 		(undo-more 1))))))
-    (goto-line line)
+    (org-goto-line line)
     (message "`%s' undone (buffer %s)" cmd (buffer-name rembuf))))
 
 (defun org-verify-change-for-undo (l1 l2)
@@ -1820,7 +1820,7 @@ s   Search for keywords                 C   Configure custom agenda commands
 	(while t
 	  (setq custom1 custom)
 	  (when (eq rmheader t)
-	    (goto-line 1)
+	    (org-goto-line 1)
 	    (re-search-forward ":" nil t)
 	    (delete-region (match-end 0) (point-at-eol))
 	    (forward-char 1)
@@ -2331,7 +2331,7 @@ This will ignore drawers etc, just get the text."
 		(goto-char (point-max))
 		(when (> (org-current-line)
 			 n-lines)
-		  (goto-line (1+ n-lines))
+		  (org-goto-line (1+ n-lines))
 		  (backward-char 1))
 		(setq txt (buffer-substring (point-min) (point)))))))))
     txt))
@@ -4839,7 +4839,7 @@ When this is the global TODO list, a prefix argument will be interpreted."
     (put 'org-agenda-filter :preset-filter preset)
     (and (or filter preset) (org-agenda-filter-apply filter))
     (and cols (interactive-p) (org-agenda-columns))
-    (goto-line line)
+    (org-goto-line line)
     (recenter window-line)))
 
 

+ 2 - 2
lisp/org-colview-xemacs.el

@@ -876,7 +876,7 @@ around it."
 			 truncate-lines))
 	(setq truncate-lines t)
 	(mapc (lambda (x)
-		(goto-line (car x))
+		(org-goto-line (car x))
 		(org-columns-display-here (cdr x)))
 	      cache)))))
 
@@ -1515,7 +1515,7 @@ and tailing newline characters."
 	(org-set-local 'org-columns-current-maxwidths maxwidths)
 	(org-columns-display-here-title)
 	(mapc (lambda (x)
-		(goto-line (car x))
+		(org-goto-line (car x))
 		(org-columns-display-here (cdr x)))
 	      cache)
 	(when org-agenda-columns-show-summaries

+ 3 - 3
lisp/org-colview.el

@@ -694,7 +694,7 @@ around it."
 			 truncate-lines))
 	(setq truncate-lines t)
 	(mapc (lambda (x)
-		(goto-line (car x))
+		(org-goto-line (car x))
 		(org-columns-display-here (cdr x)))
 	      cache)))))
 
@@ -959,7 +959,7 @@ Don't set this, this is meant for dynamic scoping.")
 	  (call-interactively 'org-columns)
 	(org-agenda-redo)
 	(call-interactively 'org-agenda-columns)))
-    (goto-line line)
+    (org-goto-line line)
     (move-to-column col))
   (message "Recomputing columns...done"))
 
@@ -1303,7 +1303,7 @@ and tailing newline characters."
 			     (org-bound-and-true-p flyspell-mode))
 	  (flyspell-mode 0))
 	(mapc (lambda (x)
-		(goto-line (car x))
+		(org-goto-line (car x))
 		(org-columns-display-here (cdr x)))
 	      cache)
 	(when org-agenda-columns-show-summaries

+ 1 - 1
lisp/org-exp.el

@@ -2413,7 +2413,7 @@ INDENT was the original indentation of the block."
 	     "\\)\\)"))
 	   ref)
 
-      (goto-line (1+ skip1))
+      (org-goto-line (1+ skip1))
       (while (and (re-search-forward "^" nil t) (not (eobp)) (< n nmax))
 	(if number
 	    (insert (format fm (incf n)))

+ 2 - 2
lisp/org-list.el

@@ -836,7 +836,7 @@ with something like \"1.\" or \"2)\"."
 	  (goto-char (match-beginning 2))
 	  (insert (setq new (format fmt (setq n (1+ n)))))
 	  (org-shift-item-indentation (- (length new) (length old))))))
-    (goto-line line)
+    (org-goto-line line)
     (org-move-to-column col)))
 
 (defun org-fix-bullet-type (&optional force-bullet)
@@ -874,7 +874,7 @@ Also, fix the indentation."
 	  (setq oldbullet (match-string 0))
 	  (unless (equal bullet oldbullet) (replace-match bullet))
 	  (org-shift-item-indentation (- (length bullet) (length oldbullet))))))
-    (goto-line line)
+    (org-goto-line line)
     (org-move-to-column col)
     (if (string-match "[0-9]" bullet)
 	(org-renumber-ordered-list 1))))

+ 7 - 1
lisp/org-macs.el

@@ -71,7 +71,7 @@ Also, do not record undo information."
 	 (_col (current-column)))
      (unwind-protect
 	 (progn ,@body)
-       (goto-line _line)
+       (org-goto-line _line)
        (org-move-to-column _col))))
 
 (defmacro org-without-partial-completion (&rest body)
@@ -219,6 +219,12 @@ we turn off invisibility temporarily.  Use this in a `let' form."
     ;; works also in narrowed buffer, because we start at 1, not point-min
     (+ (if (bolp) 1 0) (count-lines 1 (point)))))
 
+(defsubst org-goto-line (N)
+  (save-restriction
+    (widen)
+    (goto-char (point-min))
+    (forward-line (1- N))))
+
 (defsubst org-current-line-string (&optional to-here)
   (buffer-substring (point-at-bol) (if to-here (point) (point-at-eol))))
 

+ 5 - 5
lisp/org-src.el

@@ -176,7 +176,7 @@ the edited version."
 	    begline (save-excursion (goto-char beg) (org-current-line)))
       (unless (functionp lang-f)
 	(error "No such language mode: %s" lang-f))
-      (goto-line line)
+      (org-goto-line line)
       (if (and (setq buffer (org-edit-src-find-buffer beg end))
 	       (y-or-n-p "Return to existing edit buffer? [n] will revert changes: "))
 	  (switch-to-buffer buffer)
@@ -213,7 +213,7 @@ the edited version."
 	  (goto-char (point-min))
 	  (while (re-search-forward "^," nil t)
 	    (replace-match "")))
-	(goto-line (1+ (- line begline)))
+	(org-goto-line (1+ (- line begline)))
 	(org-set-local 'org-edit-src-beg-marker beg)
 	(org-set-local 'org-edit-src-end-marker end)
 	(org-set-local 'org-edit-src-overlay ovl)
@@ -275,7 +275,7 @@ the fragment in the Org-mode buffer."
 	  (if (re-search-forward "^[ \t]*[^: \t]" nil 'move)
 	      (setq end1 (1- (match-beginning 0)))
 	    (setq end1 (point))))
-	(goto-line line))
+	(org-goto-line line))
       (setq beg (move-marker beg beg1)
 	    end (move-marker end end1)
 	    code (buffer-substring-no-properties beg end)
@@ -316,7 +316,7 @@ the fragment in the Org-mode buffer."
 	(goto-char (point-min))
 	(while (re-search-forward "^[ \t]*: ?" nil t)
 	  (replace-match ""))
-	(goto-line (1+ (- line begline)))
+	(org-goto-line (1+ (- line begline)))
 	(org-src-mode)
 	(org-set-local 'org-edit-src-beg-marker beg)
 	(org-set-local 'org-edit-src-end-marker end)
@@ -465,7 +465,7 @@ the language, a switch telling of the content should be in a single line."
     (delete-region beg end)
     (insert code)
     (goto-char beg)
-    (goto-line (1- (+ (org-current-line) line)))
+    (org-goto-line (1- (+ (org-current-line) line)))
     (move-marker beg nil)
     (move-marker end nil)))
 

+ 28 - 28
lisp/org-table.el

@@ -739,9 +739,9 @@ When nil, simply write \"#ERROR\" in corrupted fields.")
       (goto-char org-table-aligned-begin-marker)
       (while (org-hide-wide-columns org-table-aligned-end-marker)))
     ;; Try to move to the old location
-    (goto-line winstartline)
+    (org-goto-line winstartline)
     (setq winstart (point-at-bol))
-    (goto-line linepos)
+    (org-goto-line linepos)
     (set-window-start (selected-window) winstart 'noforce)
     (org-table-goto-column colpos)
     (and org-table-overlay-coordinates (org-table-overlay-coordinates))
@@ -1127,7 +1127,7 @@ However, when FORCE is non-nil, create new columns if necessary."
 	(insert "|   "))
       (beginning-of-line 2))
     (move-marker end nil)
-    (goto-line linepos)
+    (org-goto-line linepos)
     (org-table-goto-column colpos)
     (org-table-align)
     (org-table-fix-formulas "$" nil (1- col) 1)
@@ -1174,7 +1174,7 @@ However, when FORCE is non-nil, create new columns if necessary."
 	     (replace-match "|")))
       (beginning-of-line 2))
     (move-marker end nil)
-    (goto-line linepos)
+    (org-goto-line linepos)
     (org-table-goto-column colpos)
     (org-table-align)
     (org-table-fix-formulas "$" (list (cons (number-to-string col) "INVALID"))
@@ -1218,7 +1218,7 @@ However, when FORCE is non-nil, create new columns if necessary."
 	     (replace-match "|\\2|\\1|")))
       (beginning-of-line 2))
     (move-marker end nil)
-    (goto-line linepos)
+    (org-goto-line linepos)
     (org-table-goto-column colpos)
     (org-table-align)
     (org-table-fix-formulas
@@ -1424,7 +1424,7 @@ should be done in reverse order."
     (move-marker beg nil)
     (move-marker end nil)
     (insert (mapconcat 'cdr lns "\n") "\n")
-    (goto-line thisline)
+    (org-goto-line thisline)
     (org-table-goto-column thiscol)
     (message "%d lines sorted, based on column %d" (length lns) column)))
 
@@ -1462,7 +1462,7 @@ with `org-table-paste-rectangle'."
       (while t
 	(catch 'nextline
 	  (if (> l1 l2) (throw 'exit t))
-	  (goto-line l1)
+	  (org-goto-line l1)
 	  (if (org-at-table-hline-p) (throw 'nextline (setq l1 (1+ l1))))
 	  (setq cols nil ic1 c1 ic2 c2)
 	  (while (< ic1 (1+ ic2))
@@ -1500,7 +1500,7 @@ lines."
 	(org-table-get-field nil field)
 	(setq c (1+ c)))
       (beginning-of-line 2))
-    (goto-line line)
+    (org-goto-line line)
     (org-table-goto-column col)
     (org-table-align)))
 
@@ -1590,7 +1590,7 @@ blank, and the content is appended to the field above."
 	(setq org-table-clip
 	      (mapcar 'list (org-wrap (mapconcat 'car org-table-clip " ")
 				      nil nlines)))
-	(goto-line cline)
+	(org-goto-line cline)
 	(org-table-goto-column ccol)
 	(org-table-paste-rectangle))
     ;; No region, split the current field at point
@@ -1994,7 +1994,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
 	    last-dline (car dlines)
 	    org-table-dlines (apply 'vector (cons nil (nreverse dlines)))
 	    org-table-hlines (apply 'vector (cons nil (nreverse hlines))))
-      (goto-line last-dline)
+      (org-goto-line last-dline)
       (let* ((l last-dline)
 	     (fields (org-split-string
 		      (buffer-substring (point-at-bol) (point-at-eol))
@@ -2070,7 +2070,7 @@ of the new mark."
     (if (and newchar (not forcenew))
 	(error "Invalid NEWCHAR `%s' in `org-table-rotate-recalc-marks'"
 	       newchar))
-    (if l1 (goto-line l1))
+    (if l1 (org-goto-line l1))
     (save-excursion
       (beginning-of-line 1)
       (unless (looking-at org-table-dataline-regexp)
@@ -2091,13 +2091,13 @@ of the new mark."
 	   " # ")))
     (if (and l1 l2)
 	(progn
-	  (goto-line l1)
+	  (org-goto-line l1)
 	  (while (progn (beginning-of-line 2) (not (= (org-current-line) l2)))
 	    (and (looking-at org-table-dataline-regexp)
 		 (org-table-get-field 1 (concat " " new " "))))
-	  (goto-line l1)))
+	  (org-goto-line l1)))
     (if (not (= epos (point-at-eol))) (org-table-align))
-    (goto-line l)
+    (org-goto-line l)
     (and (interactive-p) (message "%s" (cdr (assoc new org-recalc-marks))))))
 
 (defun org-table-maybe-recalculate-line ()
@@ -2360,7 +2360,7 @@ HIGHLIGHT means, just highlight the range."
       (if (or (not rangep) (and (= r1 r2) (= c1 c2)))
 	  ;; just one field
 	  (progn
-	    (goto-line r1)
+	    (org-goto-line r1)
 	    (while (not (looking-at org-table-dataline-regexp))
 	      (beginning-of-line 2))
 	    (prog1 (org-trim (org-table-get-field c1))
@@ -2369,12 +2369,12 @@ HIGHLIGHT means, just highlight the range."
 	;; First sort the numbers to get a regular ractangle
 	(if (< r2 r1) (setq tmp r1 r1 r2 r2 tmp))
 	(if (< c2 c1) (setq tmp c1 c1 c2 c2 tmp))
-	(goto-line r1)
+	(org-goto-line r1)
 	(while (not (looking-at org-table-dataline-regexp))
 	  (beginning-of-line 2))
 	(org-table-goto-column c1)
 	(setq beg (point))
-	(goto-line r2)
+	(org-goto-line r2)
 	(while (not (looking-at org-table-dataline-regexp))
 	  (beginning-of-line 0))
 	(org-table-goto-column c2)
@@ -2550,7 +2550,7 @@ known that the table will be realigned a little later anyway."
 			   (string-to-number (match-string 2 name)))))
 	(when (and a (or all (equal (nth 1 a) thisline)))
 	  (message "Re-applying formula to field: %s" name)
-	  (goto-line (nth 1 a))
+	  (org-goto-line (nth 1 a))
 	  (org-table-goto-column (nth 2 a))
 	  (push (append a (list (cdr eq))) eqlname1)
 	  (org-table-put-field-property :org-untouchable t)))
@@ -2566,7 +2566,7 @@ known that the table will be realigned a little later anyway."
 	  (setq org-last-recalc-line (org-current-line))
 	  (setq eql eqlnum)
 	  (while (setq entry (pop eql))
-	    (goto-line org-last-recalc-line)
+	    (org-goto-line org-last-recalc-line)
 	    (org-table-goto-column (string-to-number (car entry)) nil 'force)
 	    (unless (get-text-property (point) :org-untouchable)
 	      (org-table-eval-formula nil (cdr entry)
@@ -2575,12 +2575,12 @@ known that the table will be realigned a little later anyway."
       ;; Now evaluate the field formulas
       (while (setq eq (pop eqlname1))
 	(message "Re-applying formula to field: %s" (car eq))
-	(goto-line (nth 1 eq))
+	(org-goto-line (nth 1 eq))
 	(org-table-goto-column (nth 2 eq))
 	(org-table-eval-formula nil (nth 3 eq) 'noalign 'nocst
 				'nostore 'noanalysis))
 
-      (goto-line thisline)
+      (org-goto-line thisline)
       (org-table-goto-column thiscol)
       (remove-text-properties (point-min) (point-max) '(org-untouchable t))
       (or noalign (and org-table-may-need-update (org-table-align))
@@ -2588,7 +2588,7 @@ known that the table will be realigned a little later anyway."
 
       ;; back to initial position
       (message "Re-applying formulas...done")
-      (goto-line thisline)
+      (org-goto-line thisline)
       (org-table-goto-column thiscol)
       (or noalign (and org-table-may-need-update (org-table-align))
 	  (and all (message "Re-applying formulas...done"))))))
@@ -2744,7 +2744,7 @@ Parameters get priority."
       (insert s))
     (if (eq org-table-use-standard-references t)
 	(org-table-fedit-toggle-ref-type))
-    (goto-line startline)
+    (org-goto-line startline)
     (message "Edit formulas and finish with `C-c C-c'.  See menu for more commands.")))
 
 (defun org-table-fedit-post-command ()
@@ -2839,7 +2839,7 @@ For example:  28 -> AB."
       (insert (funcall function (buffer-substring (point) (point-at-eol))))
       (delete-region (point) (point-at-eol))
       (or (eobp) (forward-char 1)))
-    (goto-line line)))
+    (org-goto-line line)))
 
 (defun org-table-fedit-toggle-ref-type ()
   "Convert all references in the buffer from B3 to @3$2 and back."
@@ -3080,12 +3080,12 @@ With prefix ARG, apply the new formulas to the table."
 	(cond
 	 ((string-match "^\\$[a-zA-Z][a-zA-Z0-9]*" dest)
 	  (setq e (assoc name org-table-named-field-locations))
-	  (goto-line (nth 1 e))
+	  (org-goto-line (nth 1 e))
 	  (org-table-goto-column (nth 2 e)))
 	 ((string-match "^@\\([0-9]+\\)\\$\\([0-9]+\\)" dest)
 	  (let ((l (string-to-number (match-string 1 dest)))
 		(c (string-to-number (match-string 2 dest))))
-	    (goto-line (aref org-table-dlines l))
+	    (org-goto-line (aref org-table-dlines l))
 	    (org-table-goto-column c)))
 	 (t (org-table-goto-column (string-to-number name))))
 	(move-marker pos (point))
@@ -3099,7 +3099,7 @@ With prefix ARG, apply the new formulas to the table."
 	      (org-table-get-range match nil nil 'highlight))
 	  (error nil)))
        ((setq e (assoc var org-table-named-field-locations))
-	(goto-line (nth 1 e))
+	(org-goto-line (nth 1 e))
 	(org-table-goto-column (nth 2 e))
 	(org-table-highlight-rectangle (point) (point))
 	(message "Named field, column %d of line %d" (nth 2 e) (nth 1 e)))
@@ -3224,7 +3224,7 @@ Use COMMAND to do the motion, repeat if necessary to end up in a data line."
     (setq l2 (org-current-line)
 	  c2 (org-table-current-column))
     (if (> c1 c2) (setq tmp c1 c1 c2 c2 tmp))
-    (goto-line l1)
+    (org-goto-line l1)
     (beginning-of-line 1)
     (loop for line from l1 to l2 do
 	  (when (looking-at org-table-dataline-regexp)

+ 3 - 3
lisp/org.el

@@ -8429,7 +8429,7 @@ If the file does not exist, an error is thrown."
 	  (eq cmd 'emacs))
       (funcall (cdr (assq 'file org-link-frame-setup)) file)
       (widen)
-      (if line (goto-line line)
+      (if line (org-goto-line line)
 	(if search (org-link-search search))))
      ((consp cmd)
       (let ((file (convert-standard-filename file)))
@@ -11168,7 +11168,7 @@ This works in the agenda, and also in an org-mode buffer."
     (goto-char beg)
     (setq l1 (org-current-line))
     (loop for l from l1 to l2 do
-	  (goto-line l)
+	  (org-goto-line l)
 	  (setq m (get-text-property (point) 'org-hd-marker))
 	  (when (or (and (org-mode-p) (org-on-heading-p))
 		    (and agendap m))
@@ -11219,7 +11219,7 @@ This works in the agenda, and also in an org-mode buffer."
 
 (defun org-fast-tag-show-exit (flag)
   (save-excursion
-    (goto-line 3)
+    (org-goto-line 3)
     (if (re-search-forward "[ \t]+Next change exits" (point-at-eol) t)
 	(replace-match ""))
     (when flag