unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [rfc] improved wrapping of long lines
@ 2010-02-16  9:10 David Edmondson
  2010-02-16 13:36 ` David Edmondson
  0 siblings, 1 reply; 2+ messages in thread
From: David Edmondson @ 2010-02-16  9:10 UTC (permalink / raw)
  To: notmuch

[-- Attachment #1: Type: text/plain, Size: 451 bytes --]

It's annoying that the wrapping of long lines doesn't respect the
indentation of the message. Here's an attempt to improve that.

The wrapping code is in a separate file and has a silly name[1], but all
of that is subject to change at the whim of Carl or his minions.

If anyone tries this then I'd be interested in your feedback,
particularly if it doesn't work or doesn't look the way that you expect.

Footnotes: 
[1]  It's a long-line wrapper...


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-notmuch.el-Improved-wrapping-of-long-lines-respect-t.patch --]
[-- Type: text/x-diff, Size: 3412 bytes --]

From d49ff05ef86b652ec4883d7075df4fb65c846342 Mon Sep 17 00:00:00 2001
From: David Edmondson <dme@dme.org>
Date: Tue, 16 Feb 2010 09:03:18 +0000
Subject: [PATCH] notmuch.el: Improved wrapping of long lines - respect the indentation
 level.

---
 Makefile.local   |    2 +-
 notmuch-coolj.el |   40 ++++++++++++++++++++++++++++++++++++++++
 notmuch.el       |    9 ++++++---
 3 files changed, 47 insertions(+), 4 deletions(-)
 create mode 100644 notmuch-coolj.el

diff --git a/Makefile.local b/Makefile.local
index 04bac83..44a786a 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -1,4 +1,4 @@
-emacs: notmuch.elc
+emacs: notmuch.elc notmuch-coolj.el
 
 notmuch_client_srcs =		\
 	$(notmuch_compat_srcs)	\
diff --git a/notmuch-coolj.el b/notmuch-coolj.el
new file mode 100644
index 0000000..6b4da6d
--- /dev/null
+++ b/notmuch-coolj.el
@@ -0,0 +1,40 @@
+(defgroup notmuch-coolj nil
+  "Automatic wrapping of long lines when displaying notmuch articles."
+  :group 'notmuch)
+
+(defcustom notmuch-coolj-prefix-regexp " *\\(>+ +\\)?"
+  "A regexp matching potential line prefixes.")
+
+(defun notmuch-coolj-wrap-region (beg end)
+  "Wrap lines in the region."
+  (goto-char beg)
+  (forward-line -1)
+  (while (not (>= (point) end))
+    (notmuch-coolj-wrap-line)
+    (forward-line)))
+
+(defun notmuch-coolj-wrap-line ()
+  "Wrap the current line, if necessary."
+  (let ((prefix (notmuch-coolj-determine-prefix))
+	(start (point))
+	(end (make-marker))
+	(width (window-width)))
+    (set-marker end (save-excursion (end-of-line) (point)))
+    (while (> end (+ (point) width))
+      (forward-char (window-width))
+      (if (re-search-backward "[^ ]\\( \\)" start t)
+	  (progn
+	    (goto-char (match-beginning 1))
+	    (insert-before-markers ?\n)
+	    (re-search-forward "\\( +\\)[^ ]" nil t)
+	    (delete-region (match-beginning 1) (match-end 1))
+	    (backward-char 1)
+	    (insert-before-markers prefix)))
+      (beginning-of-line))))
+
+(defun notmuch-coolj-determine-prefix ()
+  "Determine the prefix for the current line."
+  (if (looking-at notmuch-coolj-prefix-regexp)
+      (buffer-substring-no-properties (match-beginning 0) (match-end 0))))
+
+(provide 'notmuch-coolj)
diff --git a/notmuch.el b/notmuch.el
index ea74a72..d67b066 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -51,6 +51,8 @@
 (require 'mm-view)
 (require 'message)
 
+(require 'notmuch-coolj)
+
 (defvar notmuch-show-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "?" 'notmuch-help)
@@ -777,7 +779,9 @@ is what to put on the button."
                           (mm-display-part mime-message))))
                 )
 	      (if (equal mime-type "text/plain")
-		  (notmuch-show-markup-citations-region beg end depth))
+		  (progn
+		    (notmuch-show-markup-citations-region beg end depth)
+		    (notmuch-coolj-wrap-region beg end)))
               ; Advance to the next part (if any) (so the outer loop can
               ; determine whether we've left the current message.
               (if (re-search-forward notmuch-show-buttonize-begin-regexp nil t)
@@ -1053,8 +1057,7 @@ All currently available key bindings:
 ; Make show mode a bit prettier, highlighting URLs and using word wrap
 
 (defun notmuch-show-pretty-hook ()
-  (goto-address-mode 1)
-  (visual-line-mode))
+  (goto-address-mode 1))
 
 (add-hook 'notmuch-show-hook 'notmuch-show-pretty-hook)
 (add-hook 'notmuch-search-hook
-- 
1.6.6.1


[-- Attachment #3: Type: text/plain, Size: 42 bytes --]


dme.
-- 
David Edmondson, http://dme.org

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-02-16 13:36 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-16  9:10 [rfc] improved wrapping of long lines David Edmondson
2010-02-16 13:36 ` David Edmondson

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).