Turn 'remember-mode' into a minor mode

* lisp/textmodes/remember.el (remember-initial-major-mode):
Major mode for remember buffer.
(remember-data-files-regex): Regular expression to filter files.
(remember-append-in-data-directory): Handler to append data to
files.
(remember-mode): Change to a minor mode.
(remember-prefix-map): New.  (Bug#75543)
This commit is contained in:
Matthias Meulien 2025-01-13 23:04:54 +01:00 committed by Eli Zaretskii
parent 32ff6c9db1
commit e937167253
2 changed files with 75 additions and 8 deletions

View file

@ -1449,6 +1449,26 @@ Major-mode authors can customize the variables
'yank-media-autoselect-function' and/or 'yank-media-preferred-types' to
change the selection rules.
** Remember
---
*** `remember-mode' is now a minor mode.
The `remember' command enables the major mode set in
`remember-initial-major-mode' and then the `remember-mode' minor mode in
the `remember-buffer'. This allows users to customize the major mode
used to write notes.
---
*** New handler that append remember data in directory.
The `remember-append-in-data-directory' handler appends remember data in
a file, that file being choosen by the user through the minibuffer.
---
*** New prefix map for remember commands.
Meant to be given a global binding convenient to the user. Example:
(keymap-global-set "C-c M-r" 'remember-prefix-map)
** Miscellaneous
---

View file

@ -182,6 +182,12 @@
;;; User Variables:
(defcustom remember-initial-major-mode 'text-mode
"Major mode to use in the `remember-buffer'."
:type '(choice (const :tag "Use `initial-major-mode'" nil)
(function :tag "Major mode" text-mode))
:version "31.0")
(defcustom remember-mode-hook nil
"Functions run upon entering `remember-mode'."
:type 'hook
@ -210,7 +216,8 @@ recorded somewhere by that function."
:options '(remember-store-in-mailbox
remember-append-to-file
remember-store-in-files
remember-diary-extract-entries))
remember-diary-extract-entries
remember-append-in-data-directory))
(defcustom remember-all-handler-functions nil
"If non-nil every function in `remember-handler-functions' is called."
@ -283,6 +290,8 @@ With a prefix or a visible region, use the region as INITIAL."
(set-window-dedicated-p
(get-buffer-window (current-buffer) (selected-frame)) t))
(setq buffer-offer-save t)
(funcall (or remember-initial-major-mode
initial-major-mode))
(remember-mode)
(when (= (point-max) (point-min))
(when initial (insert initial))
@ -450,7 +459,8 @@ If you want to remember a region, supply a universal prefix to
(defcustom remember-data-directory "~/remember"
"The directory in which to store remember data as files.
Used by `remember-store-in-files'."
Used by `remember-store-in-files' and
`remember-append-in-data-directory'."
:type 'directory
:version "24.4")
@ -472,6 +482,28 @@ The file is named by calling `format-time-string' using
(write-file (convert-standard-filename
(format "%s/%s" remember-data-directory name))))))
(defcustom remember-data-files-regex nil
"Regular expression for specifying which files to append data.
If non-nil, keep only files whose non-directory part match the regexp.
Used by `remember-append-in-data-directory'."
:type '(choice (const :tag "Any file" nil) regexp)
:version "31.0")
(defun remember-append-in-data-directory ()
"Append remember data to a file in `remember-data-directory'.
The file name is read from minibuffer.
If you want to filter proposed files, configure
`remember-data-files-regex'."
(let* ((name
(completing-read "Remember in file: "
(directory-files
(expand-file-name remember-data-directory)
nil
remember-data-files-regex)))
(remember-data-file (expand-file-name name remember-data-directory)))
(remember-append-to-file)))
;;;###autoload
(defun remember-clipboard ()
"Remember the contents of the current clipboard.
@ -560,15 +592,20 @@ If this is nil, then `diary-file' will be used instead."
"C-c C-c" #'remember-finalize
"C-c C-k" #'remember-destroy)
(define-derived-mode remember-mode text-mode "Remember"
"Major mode for output from \\[remember].
(define-minor-mode remember-mode
"Minor mode for output from \\[remember].
This buffer is used to collect data that you want to remember.
\\<remember-mode-map>
Just hit \\[remember-finalize] when you're done entering, and it will file
the data away for latter retrieval, and possible indexing.
\\{remember-mode-map}"
(set-keymap-parent remember-mode-map nil))
:lighter " Remember"
:keymap remember-mode-map
(setq header-line-format
(substitute-command-keys
"Edit, then exit with `\\[remember-finalize]' or abort with \
`\\[remember-destroy]'")))
;; Notes buffer showing the notes:
@ -583,7 +620,9 @@ purpose of storing notes."
"Major mode to use in the notes buffer when it's created.
If this is nil, use `initial-major-mode'."
:type '(choice (const :tag "Use `initial-major-mode'" nil)
(function :tag "Major mode" text-mode))
(const :tag "Use `remember-initial-major-mode'"
remember-initial-major-mode)
(function :tag "Major mode" text-mode))
:version "24.4")
(defcustom remember-notes-bury-on-kill t
@ -598,8 +637,6 @@ If this is nil, use `initial-major-mode'."
(save-buffer))
(bury-buffer))
(defvar-keymap remember-notes-mode-map
:doc "Keymap used in `remember-notes-mode'."
"C-c C-c" #'remember-notes-save-and-bury-buffer)
@ -670,6 +707,16 @@ is non-nil, bury it and return nil; otherwise return t."
nil)
t))
;; Prefix map
(define-prefix-command 'remember-prefix-map)
;; Use with for example:
;; (keymap-global-set "C-c r" 'remember-prefix-map)
(keymap-set remember-prefix-map "r" 'remember)
(keymap-set remember-prefix-map "c" 'remember-clipboard)
(keymap-set remember-prefix-map "n" 'remember-notes)
;; Obsolete
(defconst remember-version "2.0" "This version of remember.")