Merge pull request #893 from j-hao/master

mu4e: Allow header fields with more than one lines to fold to one
This commit is contained in:
Dirk-Jan C. Binnema 2016-08-13 23:01:50 +03:00 committed by GitHub
commit 2507933176
1 changed files with 34 additions and 0 deletions

View File

@ -128,6 +128,13 @@ The first letter of NAME is used as a shortcut character.")
(defvar mu4e-view-fill-headers t
"If non-nil, automatically fill the headers when viewing them.")
(defvar mu4e-view-header-field-keymap
(let ((map (make-sparse-keymap)))
(define-key map [mouse-1] 'mu4e~view-header-field-fold)
(define-key map (kbd "TAB") 'mu4e~view-header-field-fold)
map)
"Keymap used for header fields.")
(defvar mu4e-view-contacts-header-keymap
(let ((map (make-sparse-keymap)))
(define-key map [mouse-2] 'mu4e~view-compose-contact)
@ -323,10 +330,15 @@ add text-properties to VAL."
(let* ((info (cdr (assoc field
(append mu4e-header-info mu4e-header-info-custom))))
(key (plist-get info :name))
(val (if val (propertize val 'field 'mu4e-header-field-value
'front-sticky '(field))))
(help (plist-get info :help)))
(if (and val (> (length val) 0))
(with-temp-buffer
(insert (propertize (concat key ":")
'field 'mu4e-header-field-key
'front-sticky '(field)
'keymap mu4e-view-header-field-keymap
'face 'mu4e-header-key-face
'help-echo help) " "
(if dont-propertize-val
@ -344,6 +356,28 @@ add text-properties to VAL."
(buffer-string))
"")))
(defun mu4e~view-header-field-fold ()
"Fold/unfold headers' value if there are more than one line."
(interactive)
(let ((name-pos (field-beginning))
(value-pos (1+ (field-end))))
(if (and name-pos value-pos
(eq (get-text-property name-pos 'field) 'mu4e-header-field-key))
(save-excursion
(let* ((folded))
(mapc (lambda (o)
(when (overlay-get o 'mu4e~view-header-field-folded)
(delete-overlay o)
(setq folded t)))
(overlays-at value-pos))
(unless folded
(let ((o (make-overlay value-pos (field-end value-pos))))
(overlay-put o 'mu4e~view-header-field-folded t)
(overlay-put o 'display (car
(split-string
(field-string-no-properties value-pos)
"\n" t))))))))))
(defun mu4e~view-compose-contact (&optional point)
"Compose a message for the address at point."
(interactive)