aboutsummaryrefslogtreecommitdiff
path: root/emacs/notmuch-lib.el
diff options
context:
space:
mode:
authorJonas Bernoulli <jonas@bernoul.li>2021-01-10 15:00:46 +0100
committerDavid Bremner <david@tethera.net>2021-01-13 07:10:27 -0400
commit2ca941163da06aed564dab1990fb333fd7457ec2 (patch)
tree00ed761cee896d322e9ba501f12582b34a007316 /emacs/notmuch-lib.el
parentadc123e4fd6384fba0165ebddc99d4323f6bee73 (diff)
emacs: make headings outline-minor-mode compatible
`outline-minor-mode' treats comments that begin with three or more semicolons as headings. That makes it very convenient to navigate code and to show/hide parts of a file. Elips libraries typically have four top-level sections, e.g.: ;;; notmuch.el --- run notmuch within emacs... ;;; Commentary:... ;;; Code:... ;;; notmuch.el ends here In this package many libraries lack a "Commentary:" section, which is not optimal but okay for most libraries, except major entry points. Depending on how one chooses to look at it, the "... ends here" line is not really a heading that begins a section, because it should never have a "section" body (after all it marks eof). If the file is rather short, then I left "Code:" as the only section that contains code. Otherwise I split the file into multiple sibling sections. The "Code:" section continues to contain `require' and `declare-function' forms and other such "front matter". If and only if I have split the code into multiple sections anyway, then I also added an additional section named just "_" before the `provide' form and shortly before the "...end here" line. This section could also be called "Back matter", but I feel it would be distracting to be that explicit about it. (The IMO unnecessary but unfortunately still obligatory "... ends here" line is already distracting enough as far as I am concerned.) Before this commit some libraries already uses section headings, some of them consistently. When a library already had some headings, then this commit often sticks to that style, even at the cost inconsistent styling across all libraries. A very limited number of variable and function definitions have to be moved around because they would otherwise end up in sections they do not belong into. Sections, including but not limited to their heading, can and should be further improved in the future.
Diffstat (limited to 'emacs/notmuch-lib.el')
-rw-r--r--emacs/notmuch-lib.el41
1 files changed, 32 insertions, 9 deletions
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index 0e235fa3..0b698d59 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -33,6 +33,8 @@
(defconst notmuch-emacs-version "unknown"
"Placeholder variable when notmuch-version.el[c] is not available."))
+;;; Groups
+
(defgroup notmuch nil
"Notmuch mail reader for Emacs."
:group 'mail)
@@ -78,6 +80,8 @@
"Graphical attributes for displaying text"
:group 'notmuch)
+;;; Options
+
(defcustom notmuch-command "notmuch"
"Name of the notmuch binary.
@@ -125,11 +129,6 @@ the user's needs:
(string :tag "Custom script"))
:group 'notmuch-external)
-;;
-
-(defvar notmuch-search-history nil
- "Variable to store notmuch searches history.")
-
(defcustom notmuch-archive-tags '("-inbox")
"List of tag changes to apply to a message or a thread when it is archived.
@@ -144,6 +143,11 @@ For example, if you wanted to remove an \"inbox\" tag and add an
:group 'notmuch-search
:group 'notmuch-show)
+;;; Variables
+
+(defvar notmuch-search-history nil
+ "Variable to store notmuch searches history.")
+
(defvar notmuch-common-keymap
(let ((map (make-sparse-keymap)))
(define-key map "?" 'notmuch-help)
@@ -177,6 +181,8 @@ For example, if you wanted to remove an \"inbox\" tag and add an
(select-window (posn-window (event-start last-input-event)))
(button-activate button)))
+;;; CLI Utilities
+
(defun notmuch-command-to-string (&rest args)
"Synchronously invoke \"notmuch\" with the given list of arguments.
@@ -234,6 +240,8 @@ displays both values separately."
(concat cli-version
" (emacs mua version " notmuch-emacs-version ")")))))
+;;; Notmuch Configuration
+
(defun notmuch-config-get (item)
"Return a value from the notmuch configuration."
(let* ((val (notmuch-command-to-string "config" "get" item))
@@ -263,6 +271,8 @@ displays both values separately."
(defun notmuch-user-emails ()
(cons (notmuch-user-primary-email) (notmuch-user-other-email)))
+;;; Commands
+
(defun notmuch-poll ()
"Run \"notmuch new\" or an external script to import mail.
@@ -287,6 +297,8 @@ it, in which case it is killed."
(bury-buffer)
(kill-buffer)))
+;;; Describe Key Bindings
+
(defun notmuch-prefix-key-description (key)
"Given a prefix key code, return a human-readable string representation.
@@ -297,7 +309,6 @@ This is basically just `format-kbd-macro' but we also convert ESC to M-."
"M-"
(concat desc " "))))
-
(defun notmuch-describe-key (actual-key binding prefix ua-keys tail)
"Prepend cons cells describing prefix-arg ACTUAL-KEY and ACTUAL-KEY to TAIL.
@@ -435,6 +446,8 @@ of its command symbol."
(insert desc)))
(pop-to-buffer (help-buffer)))))
+;;; Refreshing Buffers
+
(defvar-local notmuch-buffer-refresh-function nil
"Function to call to refresh the current buffer.")
@@ -466,6 +479,8 @@ be displayed."
(with-current-buffer buffer
(notmuch-refresh-this-buffer))))))
+;;; String Utilities
+
(defun notmuch-prettify-subject (subject)
;; This function is used by `notmuch-search-process-filter' which
;; requires that we not disrupt its' matching state.
@@ -509,8 +524,6 @@ This replaces spaces, percents, and double quotes in STR with
(replace-regexp-in-string
"[ %\"]" (lambda (match) (format "%%%02x" (aref match 0))) str))
-;;
-
(defun notmuch-common-do-stash (text)
"Common function to stash text in kill ring, and display in minibuffer."
(if text
@@ -522,7 +535,7 @@ This replaces spaces, percents, and double quotes in STR with
(kill-new "")
(message "Nothing to stash!")))
-;;
+;;; Generic Utilities
(defun notmuch-plist-delete (plist property)
(let* ((xplist (cons nil plist))
@@ -533,6 +546,8 @@ This replaces spaces, percents, and double quotes in STR with
(setq pred (cddr pred)))
(cdr xplist)))
+;;; MML Utilities
+
(defun notmuch-match-content-type (t1 t2)
"Return t if t1 and t2 are matching content types, taking wildcards into account."
(let ((st1 (split-string t1 "/"))
@@ -673,6 +688,8 @@ current buffer, if possible."
(mm-display-part handle)
t))))))
+;;; Generic Utilities
+
;; Converts a plist of headers to an alist of headers. The input plist should
;; have symbols of the form :Header as keys, and the resulting alist will have
;; symbols of the form 'Header as keys.
@@ -739,6 +756,8 @@ returned by FUNC."
(put-text-property start next prop (funcall func value) object)
(setq start next))))
+;;; Running Notmuch
+
(defun notmuch-logged-error (msg &optional extra)
"Log MSG and EXTRA to *Notmuch errors* and signal MSG.
@@ -967,6 +986,8 @@ status."
(defvar-local notmuch-show-process-crypto nil)
+;;; Generic Utilities
+
(defun notmuch-interactive-region ()
"Return the bounds of the current interactive region.
@@ -981,6 +1002,8 @@ region if the region is active, or both `point' otherwise."
'notmuch-interactive-region
"notmuch 0.29")
+;;; _
+
(provide 'notmuch-lib)
;;; notmuch-lib.el ends here