org.el: New command ̀org-toggle-custom-properties-visibility'

* org.el (org-custom-properties): New option.
(org-custom-properties-overlays): New variable.
(org-toggle-custom-properties-visibility): New command to
toggle the visibility of custom properties.
(org-check-before-invisible-edit): Also prevent errors when
trying to edit invisible properties.

Thanks to Torsten Wagner for triggering this discussion.
This commit is contained in:
Bastien Guerry 2012-08-14 11:51:09 +02:00
parent fdcf9dceb7
commit a4f5e94dc8
1 changed files with 56 additions and 21 deletions

View File

@ -3605,6 +3605,15 @@ appear in the buffer without the initial #+TITLE: keyword."
(const :tag "#+EMAIL" email)
(const :tag "#+TITLE" title)))
(defcustom org-custom-properties nil
"List of properties (as strings) with a special meaning.
The default use of these custom properties is to let the user
hide them with `org-toggle-custom-properties-visibility'."
:group 'org-properties
:group 'org-appearance
:version "24.2"
:type '(repeat (string :tag "Property Name")))
(defcustom org-fontify-done-headline nil
"Non-nil means change the face of a headline if it is marked DONE.
Normally, only the TODO/DONE keyword indicates the state of a headline.
@ -6007,6 +6016,30 @@ needs to be inserted at a specific position in the font-lock sequence.")
(org-decompose-region (point-min) (point-max))
(message "Entities are displayed plain"))))
(defvar org-custom-properties-overlays nil
"List of overlays used for custom properties.")
(make-variable-buffer-local 'org-custom-properties-overlays)
(defun org-toggle-custom-properties-visibility ()
"Display or hide properties in `org-custom-properties'."
(interactive)
(if org-custom-properties-overlays
(progn (mapc 'delete-overlay org-custom-properties-overlays)
(setq org-custom-properties-overlays nil))
(unless (not org-custom-properties)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward org-property-re nil t)
(mapc (lambda(p)
(when (equal p (substring (match-string 1) 1 -1))
(let ((o (make-overlay (match-beginning 0) (1+ (match-end 0)))))
(overlay-put o 'invisible t)
(overlay-put o 'org-custom-property t)
(push o org-custom-properties-overlays))))
org-custom-properties)))))))
(defun org-fontify-entities (limit)
"Find an entity to fontify."
(let (ee)
@ -18270,11 +18303,13 @@ The detailed reaction depends on the user option `org-catch-invisible-edits'."
;; (and (not invisible-at-point) invisible-before-point
;; (memq kind '(insert delete)))
)))
(when (or (memq invisible-at-point '(outline org-hide-block))
(memq invisible-before-point '(outline org-hide-block)))
(when (or (memq invisible-at-point '(outline org-hide-block t))
(memq invisible-before-point '(outline org-hide-block t)))
(if (eq org-catch-invisible-edits 'error)
(error "Editing in invisible areas is prohibited - make visible first"))
(if (and org-custom-properties-overlays
(y-or-n-p "Display invisible properties in this buffer? "))
(org-toggle-custom-properties-visibility)
;; Make the area visible
(save-excursion
(if invisible-before-point
@ -18292,7 +18327,7 @@ The detailed reaction depends on the user option `org-catch-invisible-edits'."
(message "Unfolding invisible region around point before editing"))
(t
;; Don't do the edit, make the user repeat it in full visibility
(error "Edit in invisible region aborted, repeat to confirm with text visible")))))))
(error "Edit in invisible region aborted, repeat to confirm with text visible"))))))))
(defun org-fix-tags-on-the-fly ()
(when (and (equal (char-after (point-at-bol)) ?*)