Преглед на файлове

org-indent: handle more modifications of headlines

* lisp/org-indent.el (org-indent-modified-headline-flag): renamed from
  `org-indent-deleted-headline-flag'
(org-indent-notify-modified-headline): renamed from
`org-indent-notify-deleted-headline'. Handle situations when the stars
of an headline are modified.
(org-indent-refresh-maybe): remove case now handled by previous function.
(org-indent-mode): apply renames.
Nicolas Goaziou преди 14 години
родител
ревизия
4ef4bcd533
променени са 1 файла, в които са добавени 19 реда и са изтрити 30 реда
  1. 19 30
      lisp/org-indent.el

+ 19 - 30
lisp/org-indent.el

@@ -71,9 +71,9 @@ It will be set in `org-indent-initialize'.")
   "Lock used of initialization.")
   "Lock used of initialization.")
 (defvar org-hide-leading-stars-before-indent-mode nil
 (defvar org-hide-leading-stars-before-indent-mode nil
   "Used locally.")
   "Used locally.")
-(defvar org-indent-deleted-headline-flag nil
+(defvar org-indent-modified-headline-flag nil
   "Non nil if the last deletion acted on an headline.
   "Non nil if the last deletion acted on an headline.
-It is modified by `org-indent-notify-deleted-headline'.")
+It is modified by `org-indent-notify-modified-headline'.")
 
 
 
 
 (defcustom org-indent-boundary-char ?\   ; comment to protect space char
 (defcustom org-indent-boundary-char ?\   ; comment to protect space char
@@ -159,7 +159,7 @@ properties, after each buffer modifiation, on the modified zone."
 		 'org-indent-remove-properties-from-string)
 		 'org-indent-remove-properties-from-string)
     (org-add-hook 'after-change-functions 'org-indent-refresh-maybe nil 'local)
     (org-add-hook 'after-change-functions 'org-indent-refresh-maybe nil 'local)
     (org-add-hook 'before-change-functions
     (org-add-hook 'before-change-functions
-		  'org-indent-notify-deleted-headline nil 'local)
+		  'org-indent-notify-modified-headline nil 'local)
     (and font-lock-mode (org-restart-font-lock))
     (and font-lock-mode (org-restart-font-lock))
     (with-silent-modifications
     (with-silent-modifications
       (org-indent-remove-properties (point-min) (point-max)))
       (org-indent-remove-properties (point-min) (point-max)))
@@ -182,7 +182,7 @@ properties, after each buffer modifiation, on the modified zone."
 		    buffer-substring-filters))
 		    buffer-substring-filters))
 	(remove-hook 'after-change-functions 'org-indent-refresh-maybe 'local)
 	(remove-hook 'after-change-functions 'org-indent-refresh-maybe 'local)
 	(remove-hook 'before-change-functions
 	(remove-hook 'before-change-functions
-		     'org-indent-notify-deleted-headline 'local)
+		     'org-indent-notify-modified-headline 'local)
 	(and font-lock-mode (org-restart-font-lock))
 	(and font-lock-mode (org-restart-font-lock))
 	(redraw-display))))))
 	(redraw-display))))))
 
 
@@ -320,8 +320,8 @@ you want to use this feature."
 		    (wrap (+ line (org-get-indentation))))
 		    (wrap (+ line (org-get-indentation))))
 	       (funcall set-prop-and-move line wrap nil)))))))))
 	       (funcall set-prop-and-move line wrap nil)))))))))
 
 
-(defun org-indent-notify-deleted-headline (beg end)
-  "Set `org-indent-deleted-headline-flag' depending on the current command.
+(defun org-indent-notify-modified-headline (beg end)
+  "Set `org-indent-modified-headline-flag' depending on the current command.
 
 
 BEG and END are the positions of the beginning and end of the
 BEG and END are the positions of the beginning and end of the
 range of deleted text.
 range of deleted text.
@@ -345,31 +345,20 @@ range of inserted text.  DUMMY is an unused argument.
 This function is meant to be called by `after-change-functions'."
 This function is meant to be called by `after-change-functions'."
   (when org-indent-mode
   (when org-indent-mode
     (save-match-data
     (save-match-data
-      (cond
-       ;; An headline was deleted.
-       (org-indent-deleted-headline-flag
-	(setq org-indent-deleted-headline-flag nil)
-	(let ((end (save-excursion (outline-next-heading) (point))))
-	  (org-indent-remove-properties beg end)
-	  (org-indent-add-properties beg end)))
-       ;; An headline was inserted.
-       ((and (/= beg end)
-	     (save-excursion
-	       (goto-char beg)
-	       (re-search-forward org-outline-regexp-bol end t)))
+      ;; If an headline was modified or inserted, set properties until
+      ;; next headline.
+      (if (or org-indent-modified-headline-flag
+	      (save-excursion
+		(goto-char beg)
+		(re-search-forward org-outline-regexp-bol end t)))
 	(let ((end (save-excursion
 	(let ((end (save-excursion
-		     (goto-char end) (outline-next-heading) (point))))
-	  (org-indent-remove-properties beg end)
-	  (org-indent-add-properties beg end)))
-       ;; At an headline, modifying stars.
-       ((save-excursion (goto-char beg)
-			(and (org-at-heading-p) (< beg (match-end 0))))
-	(let ((beg (point-at-bol))
-	      (end (save-excursion (outline-next-heading) (point))))
-	  (org-indent-remove-properties beg end)
-	  (org-indent-add-properties beg end)))
-       ;; Else, refresh properties of modified area.
-       (t (org-indent-add-properties beg end))))))
+		     (goto-char end)
+		     (org-with-limited-levels (outline-next-heading))
+		     (point))))
+	  (setq org-indent-modified-headline-flag nil)
+	  (org-indent-add-properties beg end))
+	;; Otherwise, only set properties on modified area.
+	(org-indent-add-properties beg end)))))
 
 
 (provide 'org-indent)
 (provide 'org-indent)