[notmuch] [PATCH] notmuch.el: Refactor citation markup. Variables for minimum size, button text.
Kan-Ru Chen
kanru at kanru.info
Thu Dec 24 17:47:02 PST 2009
On Thu, 24 Dec 2009 10:38:54 -0400, david at tethera.net wrote:
> From: David Bremner <bremner at unb.ca>
>
> This is a fairly intrusive rewrite.
>
> - I pulled the common code for the signature and citation case out
> into a separate function. This is not so much shorter, but I think it
> will be easier to maintain.
>
> - I replaced the sequence of (looking-at blah) (forward-line) with a single
> re-search-forward per citation.
>
> New variables
>
> - notmuch-show-signature-button-format, notmuch-show-citation-button-format
> Allow customization of button text.
>
> - notmuch-show-citation-lines-min
> Do not buttonize citations below the given threshold.
I like this idea, but this patch hides all citations larger than the
threshold. I'd like to see limited lines of citations been displayed.
For example:
> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
> eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enimad
> minim veniam, quis nostrud exercitation ullamco laboris nisi ut
> aliquip ex ea commodo consequat. Duis aute irure dolor in
[ 6-line hidden citation. Click/Enter to show ]
And click the button shows the rest.
> ---
>
> I decided to start with a simple threshold, and only convert
> sufficiently long citations to buttons. Once I started messing with
> that code, I decided to rework it to be more maintainable and
> hopefully faster.
>
> This patch also fixes the problem of merging cites separated by a
> single line of whitespace This is also fixed by the much simpler
> <1260769295-12924-3-git-send-email-kanru at kanru.info>, but unlike that
> patch there _shouldn't_ be a problem with eating the blank line after
> a citation. I'm not sure about the other bugs fixed by Kan-Ru's
> series; perhaps Kan-Ru can comment.
>
> notmuch.el | 130
> ++++++++++++++++++++++++++++++++++++++---------------------- 1 files
> changed, 83 insertions(+), 47 deletions(-)
>
> diff --git a/notmuch.el b/notmuch.el
> index 97914f2..6a5ceea 100644
> --- a/notmuch.el
> +++ b/notmuch.el
> @@ -92,9 +92,24 @@ for indentation at the beginning of the line. But notmuch will
> move past the indentation when testing this pattern, (so that the
> pattern can still test against the entire line).")
>
> +(defvar notmuch-show-signature-button-format
> + "[ %d-line hidden signature. Click/Enter to show ]"
> + "String used to construct button text for hidden signatures
> +
> +Can use up to one integer format parameter, i.e. %d")
> +
> +(defvar notmuch-show-citation-button-format
> + "[ %d-line hidden citation. Click/Enter to show ]"
> + "String used to construct button text for hidden citations.
> +
> +Can use up to one integer format parameter, i.e. %d")
> +
> (defvar notmuch-show-signature-lines-max 12
> "Maximum length of signature that will be hidden by default.")
>
> +(defvar notmuch-show-citation-lines-min 4
> + "Minimum length of citation that will be hidden.")
> +
> (defvar notmuch-command "notmuch"
> "Command to run the notmuch binary.")
>
> @@ -593,54 +608,75 @@ which this thread was originally shown."
> 'face 'notmuch-message-summary-face
> :supertype 'notmuch-button-invisibility-toggle-type)
>
> +(defun notmuch-show-citation-regexp (depth)
> + "Build a regexp for matching citations at a given DEPTH (indent)"
> + (let ((line-regexp (format "[[:space:]]\\{%d\\}*>.*\n" depth)))
> + (concat "\\(?:^" line-regexp
> + "\\(?:[[:space:]]*\n" line-regexp
> + "\\)?\\)+")))
> +
> +(defun notmuch-show-region-to-button (beg end type prefix button-text)
> + "Auxilary function to do the actual making of overlays and buttons
> +
> +BEG and END are buffer locations. TYPE should a string, either
> +\"citation\" or \"signature\". PREFIX is some arbitrary text to
> +insert before the button, probably for indentation. BUTTON-TEXT
> +is what to put on the button."
> +
> +;; This uses some slightly tricky conversions between strings and
> +;; symbols because of the way the button code works. Note that
> +;; replacing intern-soft with make-symbol will cause this to fail,
> +;; since the newly created symbol has no plist.
> +
> + (let ((overlay (make-overlay beg end))
> + (invis-spec (make-symbol (concat "notmuch-" type "-region")))
> + (button-type (intern-soft (concat "notmuch-button-"
> + type "-toggle-type"))))
> + (add-to-invisibility-spec invis-spec)
> + (overlay-put overlay 'invisible invis-spec)
> + (goto-char (1+ end))
> + (save-excursion
> + (goto-char (1- beg))
> + (insert prefix)
> + (insert-button button-text
> + 'invisibility-spec invis-spec
> + :type button-type)
> + )))
> +
> +
> (defun notmuch-show-markup-citations-region (beg end depth)
> - (goto-char beg)
> - (beginning-of-line)
> - (while (< (point) end)
> - (let ((beg-sub (point-marker))
> - (indent (make-string depth ? ))
> - (citation ">"))
> - (move-to-column depth)
> - (if (looking-at citation)
> - (progn
> - (while (looking-at citation)
> - (forward-line)
> - (move-to-column depth))
> - (let ((overlay (make-overlay beg-sub (point)))
> - (invis-spec (make-symbol "notmuch-citation-region")))
> - (add-to-invisibility-spec invis-spec)
> - (overlay-put overlay 'invisible invis-spec)
> - (let ((p (point-marker))
> - (cite-button-text
> - (concat "[" (number-to-string (count-lines beg-sub (point)))
> - "-line citation. Click/Enter to show.]")))
> - (goto-char (- beg-sub 1))
> - (insert (concat "\n" indent))
> - (insert-button cite-button-text
> - 'invisibility-spec invis-spec
> - :type 'notmuch-button-citation-toggle-type)
> - (forward-line)
> - ))))
> - (move-to-column depth)
> - (if (looking-at notmuch-show-signature-regexp)
> - (let ((sig-lines (- (count-lines beg-sub end) 1)))
> - (if (<= sig-lines notmuch-show-signature-lines-max)
> - (progn
> - (let ((invis-spec (make-symbol "notmuch-signature-region")))
> - (add-to-invisibility-spec invis-spec)
> - (overlay-put (make-overlay beg-sub end)
> - 'invisible invis-spec)
> -
> - (goto-char (- beg-sub 1))
> - (insert (concat "\n" indent))
> - (let ((sig-button-text (concat "[" (number-to-string sig-lines)
> - "-line signature. Click/Enter to show.]")))
> - (insert-button sig-button-text 'invisibility-spec invis-spec
> - :type 'notmuch-button-signature-toggle-type)
> - )
> - (insert "\n")
> - (goto-char end))))))
> - (forward-line))))
> + "Markup citations, and up to one signature in the given region"
> +
> + (let ((citation-regexp (notmuch-show-citation-regexp depth))
> + (signature-regexp (concat (format "^[[:space:]]\\{%d\\}" depth)
> + notmuch-show-signature-regexp))
> + (indent (make-string depth ? )))
> + (goto-char beg)
> + (beginning-of-line)
> + (while (and (< (point) end)
> + (re-search-forward citation-regexp end t))
> + (let* ((cite-start (match-beginning 0))
> + (cite-end (match-end 0))
> + (cite-lines (count-lines cite-start cite-end)))
> + (if (>= cite-lines notmuch-show-citation-lines-min)
> + (notmuch-show-region-to-button
> + cite-start cite-end
> + "citation"
> + indent
> + (format notmuch-show-citation-button-format cite-lines)
> + ))))
> + (if (re-search-forward signature-regexp end t)
> + (let* ((sig-start (match-beginning 0))
> + (sig-end (match-end 0))
> + (sig-lines (1- (count-lines sig-start end))))
> + (if (<= sig-lines notmuch-show-signature-lines-max)
> + (notmuch-show-region-to-button
> + sig-start
> + end
> + "signature"
> + indent
> + (format notmuch-show-signature-button-format sig-lines)
> + ))))))
>
> (defun notmuch-show-markup-part (beg end depth)
> (if (re-search-forward notmuch-show-part-begin-regexp nil t)
> --
> 1.6.5.7
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
--
Kan-Ru Chen | http://kanru.info
Q: Why are my replies five sentences or less?
A: http://five.sentenc.es/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20091225/0849e551/attachment.pgp>
More information about the notmuch
mailing list