diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2011-07-27 15:48:16 +0200 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2011-08-18 15:45:02 +0200 |
commit | b9962b78296c5160ba628661816ac2aebdd92f9f (patch) | |
tree | d657cc1acabc76a22bfeb41f0d41bcfd417404c6 | |
parent | d40643f9496ceb2724799af25e39239d65051287 (diff) | |
download | org-mode-b9962b78296c5160ba628661816ac2aebdd92f9f.tar.gz |
org-indent: externalize a function for better code readability
* lisp/org-indent.el (org-indent-set-line-properties): new function.
(org-indent-add-properties): externalize worker function.
-rw-r--r-- | lisp/org-indent.el | 65 |
1 files changed, 34 insertions, 31 deletions
diff --git a/lisp/org-indent.el b/lisp/org-indent.el index 48d2433..c12e483 100644 --- a/lisp/org-indent.el +++ b/lisp/org-indent.el @@ -239,6 +239,32 @@ useful to make it ever so slightly different." (unless interruptp (cancel-timer org-indent-initial-timer)))) (setq org-indent-initial-lock nil))) +(defsubst org-indent-set-line-properties (l w h) + "Set prefix properties on current line an move to next one. + +Prefix properties `line-prefix' and `wrap-prefix' in current line +are set to, respectively, length L and W. + +If H is non-nil, `line-prefix' will be starred. If H is +`inline', the first star will have `org-warning' face. + +Assume point is at bol." + (let ((line (cond + ((eq 'inline h) + (let ((stars (aref org-indent-stars + (min l org-indent-max-levels)))) + (and stars + (concat org-indent-inlinetask-first-star + (substring stars 1))))) + (h (aref org-indent-stars + (min l org-indent-max-levels))) + (t (aref org-indent-strings + (min l org-indent-max))))) + (wrap (aref org-indent-strings (min w org-indent-max)))) + (add-text-properties (point) (point-at-eol) + `(line-prefix ,line wrap-prefix ,wrap))) + (forward-line 1)) + (defun org-indent-add-properties (beg end &optional async) "Add indentation properties between BEG and END. @@ -265,33 +291,10 @@ you want to use this feature." (pf-inline (and (featurep 'org-inlinetask) (org-inlinetask-in-task-p) (+ (* org-indent-indentation-per-level - (1- (org-inlinetask-get-task-level))) 2))) - (set-prop-and-move - (function - ;; Set prefix properties `line-prefix' and `wrap-prefix' - ;; in current line to, respectively, length L and W and - ;; move forward. If H is non-nil, `line-prefix' will be - ;; starred. If H is `inline', the first star will have - ;; `org-warning' face. Assume point is at bol. - (lambda (l w h) - (let ((line (cond - ((eq 'inline h) - (let ((stars (aref org-indent-stars - (min l org-indent-max-levels)))) - (and stars - (concat org-indent-inlinetask-first-star - (substring stars 1))))) - (h (aref org-indent-stars - (min l org-indent-max-levels))) - (t (aref org-indent-strings - (min l org-indent-max))))) - (wrap (aref org-indent-strings (min w org-indent-max)))) - (add-text-properties (point) (point-at-eol) - `(line-prefix ,line wrap-prefix ,wrap))) - (forward-line 1))))) + (1- (org-inlinetask-get-task-level))) 2)))) ;; 2. For each line, set `line-prefix' and `wrap-prefix' - ;; properties depending on the type of line (headline, inline - ;; task, item or other). + ;; properties depending on the type of line (headline, + ;; inline task, item or other). (with-silent-modifications (while (< (point) end) (cond @@ -307,26 +310,26 @@ you want to use this feature." (cond ;; Headline: new value for PF. ((looking-at limited-re) - (funcall set-prop-and-move line wrap t) + (org-indent-set-line-properties line wrap t) (setq pf wrap)) ;; End of inline task: PF-INLINE is now nil. ((looking-at "\\*+ end[ \t]*$") - (funcall set-prop-and-move line wrap 'inline) + (org-indent-set-line-properties line wrap 'inline) (setq pf-inline nil)) ;; Start of inline task. Determine if it contains ;; text, or if it is only one line long. Set ;; PF-INLINE accordingly. - (t (funcall set-prop-and-move line wrap 'inline) + (t (org-indent-set-line-properties line wrap 'inline) (setq pf-inline (and (org-inlinetask-in-task-p) wrap)))))) ;; List item: `wrap-prefix' is set where body starts. ((org-at-item-p) (let* ((line (or pf-inline pf 0)) (wrap (+ (org-list-item-body-column (point)) line))) - (funcall set-prop-and-move line wrap nil))) + (org-indent-set-line-properties line wrap nil))) ;; Normal line: use PF-INLINE, PF or nil as prefixes. (t (let* ((line (or pf-inline pf 0)) (wrap (+ line (org-get-indentation)))) - (funcall set-prop-and-move line wrap nil)))))))))) + (org-indent-set-line-properties line wrap nil)))))))))) (defun org-indent-notify-modified-headline (beg end) "Set `org-indent-modified-headline-flag' depending on context. |