mylisp/mypasshide.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Tue, 01 Feb 2022 00:35:07 +0200
changeset 1752 c3345b0bcad0
parent 1666 06937ff1ec5f
permissions -rw-r--r--
so-long mode makes buffer read only. To erase the content we need to make buffer editable.


(defvar mypasshide-prefix-re "^pass: *")

(defun mypasshide--toggle-display (overlay hide)
  "Hide or reveal region. Signature follows convention for
`reveal-toggle-invisible' from `reveal' mode."
  (if hide
      (overlay-put overlay 'display (propertize "****" 'face 'warning))
    (overlay-put overlay 'display nil)))

(defun mypasshide--hide ()
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward mypasshide-prefix-re nil t)
      (let* ((beg (match-end 0))
             (end (line-end-position))
             (overlay (make-overlay beg end)))
        (mypasshide--toggle-display overlay t)
        (overlay-put overlay 'reveal-toggle-invisible #'mypasshide--toggle-display)
        ))))

;;;###autoload
(define-minor-mode mypasshide-mode
  "Hide passwords after `mypasshide-prefix-re' and activate
`reveal-mode'. Disabling is not implemented."
  :group 'reveal
  (if mypasshide-mode
      (progn
        (mypasshide--hide)
        (reveal-mode))))

(provide 'mypasshide)