Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
14b4e83d
Commit
14b4e83d
authored
Jun 23, 2011
by
Richard M. Stallman
Browse files
Going to grep hit in Rmail buffer finds the message.
parent
8050daa1
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
73 additions
and
7 deletions
+73
-7
lisp/ChangeLog
lisp/ChangeLog
+7
-0
lisp/mail/rmail.el
lisp/mail/rmail.el
+66
-7
No files found.
lisp/ChangeLog
View file @
14b4e83d
2011-06-23 Richard Stallman <rms@gnu.org>
* mail/rmail.el: Going to grep hit in Rmail buffer finds the message.
(rmail-variables): Set next-error-move-function.
(rmail-what-message): Take argument POS.
(rmail-next-error-move): New function.
2011-06-23 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/smie.el (smie-bnf->prec2): Give more understandable error
...
...
lisp/mail/rmail.el
View file @
14b4e83d
...
...
@@ -1444,7 +1444,8 @@ If so restore the actual mbox message collection."
(make-local-variable 'file-precious-flag)
(setq file-precious-flag t)
(make-local-variable 'desktop-save-buffer)
(
setq
desktop-save-buffer
t
))
(setq desktop-save-buffer t)
(setq next-error-move-function 'rmail-next-error-move))
;; Handle M-x revert-buffer done in an rmail-mode buffer.
(defun rmail-revert (arg noconfirm)
...
...
@@ -3019,15 +3020,73 @@ or forward if N is negative."
(rmail-maybe-set-message-counters)
(rmail-show-message rmail-total-messages))
(
defun
rmail-what-message
()
"For debugging Rmail: find the message number that point is in."
(defun rmail-next-error-move (msg-pos bad-marker)
"Move to an error locus (probably grep hit) in an Rmail buffer.
MSG-POS is a marker pointing at the error message in the grep buffer.
BAD-MARKER is a marker that ought to point at where to move to,
but probably is garbage."
(let* ((message (car (get-text-property msg-pos 'message (marker-buffer msg-pos))))
(column (car message))
(linenum (cadr message))
pos
msgnum msgbeg msgend
header-field
line-number-within)
;; Look at the whole Rmail file.
(rmail-swap-buffers-maybe)
(save-restriction
(widen)
(save-excursion
;; Find the line that the error message points at.
(goto-char (point-min))
(forward-line linenum)
(setq pos (point))
;; Find which message that's in,
;; and the limits of that message.
(setq msgnum (rmail-what-message pos))
(setq msgbeg (rmail-msgbeg msgnum))
(setq msgend (rmail-msgend msgnum))
;; Find which header this locus is in,
;; or if it's in the message body,
;; and the line-based position within that.
(goto-char msgbeg)
(let ((header-end msgend))
(if (search-forward "\n\n" nil t)
(setq header-end (point)))
(if (>= pos header-end)
(setq line-number-within
(count-lines header-end pos))
(goto-char pos)
(unless (looking-at "^[^ \t]")
(re-search-backward "^[^ \t]"))
(looking-at "[^:\n]*[:\n]")
(setq header-field (match-string 0)
line-number-within (count-lines (point) pos))))))
;; Display the right message.
(rmail-show-message msgnum)
;; Move to the right position within the displayed message.
(if header-field
(re-search-forward (concat "^" (regexp-quote header-field)) nil t)
(search-forward "\n\n" nil t))
(forward-line line-number-within)
(forward-char column)))
(defun rmail-what-message (&optional pos)
"Return message number POS (or point) is in."
(let* ((high rmail-total-messages)
(mid (/ high 2))
(low 1)
(
where
(
with-current-buffer
(
if
(
rmail-buffers-swapped-p
)
rmail-view-buffer
(
current-buffer
))
(
point
))))
(where (or pos
(with-current-buffer (if (rmail-buffers-swapped-p)
rmail-view-buffer
(current-buffer))
(point)))))
(while (> (- high low) 1)
(if (>= where (rmail-msgbeg mid))
(setq low mid)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment