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
aa8a705c
Commit
aa8a705c
authored
Jul 06, 2011
by
Richard M. Stallman
Browse files
rmailmm.el: record truncated mime entities.
parent
596a0958
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
11 deletions
+38
-11
lisp/ChangeLog
lisp/ChangeLog
+10
-0
lisp/mail/rmailmm.el
lisp/mail/rmailmm.el
+28
-11
No files found.
lisp/ChangeLog
View file @
aa8a705c
2011-07-06 Richard Stallman <rms@gnu.org>
* mail/rmailmm.el: Give entity a new slot, TRUNCATED.
(rmail-mime-entity): New arg TRUNCATED.
(rmail-mime-entity-truncated, rmail-mime-entity-set-truncated):
New functions.
(rmail-mime-save): Warn if entity is truncated.
(rmail-mime-toggle-hidden): Likewise, for showing.
(rmail-mime-process-multipart): Record when an entity is truncated.
2011-07-06 Lars Magne Ingebrigtsen <larsi@gnus.org>
* progmodes/grep.el (rgrep): Don't bind `process-connection-type',
...
...
lisp/mail/rmailmm.el
View file @
aa8a705c
...
...
@@ -153,20 +153,21 @@ MIME entities.")
;;; MIME-entity object
(
defun
rmail-mime-entity
(
type
disposition
transfer-encoding
display
header
tagline
body
children
handler
)
display
header
tagline
body
children
handler
&optional
truncated
)
"Retrun a newly created MIME-entity object from arguments.
A MIME-entity is a vector of
9
elements:
A MIME-entity is a vector of
10
elements:
[TYPE DISPOSITION TRANSFER-ENCODING DISPLAY HEADER TAGLINE BODY
CHILDREN HANDLER]
CHILDREN HANDLER
TRUNCATED
]
TYPE and DISPOSITION correspond to MIME headers Content-Type and
Cotent-Disposition respectively, and ha
s
this format:
Co
n
tent-Disposition respectively, and ha
ve
this format:
\(VALUE (ATTRIBUTE . VALUE) (ATTRIBUTE . VALUE) ...)
VALUE is a string and ATTRIBUTE is a s
ymbol
.
Each
VALUE is a string and
each
ATTRIBUTE is a s
tring
.
Consider the following header, for example:
...
...
@@ -208,9 +209,12 @@ entity have one or more children. A \"message/rfc822\" entity
has just one child. Any other entity has no child.
HANDLER is a function to insert the entity according to DISPLAY.
It is called with one argument ENTITY."
It is called with one argument ENTITY.
TRUNCATED is non-nil if the text of this entity was truncated."
(
vector
type
disposition
transfer-encoding
display
header
tagline
body
children
handler
))
display
header
tagline
body
children
handler
truncated
))
;; Accessors for a MIME-entity object.
(
defsubst
rmail-mime-entity-type
(
entity
)
(
aref
entity
0
))
...
...
@@ -222,6 +226,9 @@ It is called with one argument ENTITY."
(
defsubst
rmail-mime-entity-body
(
entity
)
(
aref
entity
6
))
(
defsubst
rmail-mime-entity-children
(
entity
)
(
aref
entity
7
))
(
defsubst
rmail-mime-entity-handler
(
entity
)
(
aref
entity
8
))
(
defsubst
rmail-mime-entity-truncated
(
entity
)
(
aref
entity
9
))
(
defsubst
rmail-mime-entity-set-truncated
(
entity
truncated
)
(
aset
entity
9
truncated
))
(
defsubst
rmail-mime-message-p
()
"Non-nil if and only if the current message is a MIME."
...
...
@@ -237,6 +244,10 @@ It is called with one argument ENTITY."
(
directory
(
button-get
button
'directory
))
(
data
(
button-get
button
'data
))
(
ofilename
filename
))
(
if
(
and
(
not
(
stringp
data
))
(
rmail-mime-entity-truncated
data
))
(
unless
(
y-or-n-p
"This entity is truncated; save anyway? "
)
(
error
"Aborted"
)))
(
setq
filename
(
expand-file-name
(
read-file-name
(
format
"Save as (default: %s): "
filename
)
directory
...
...
@@ -387,6 +398,11 @@ The value is a vector [ INDEX HEADER TAGLINE BODY END], where
(
if
(
and
rmail-mime-mbox-buffer
(
=
(
aref
segment
1
)
(
point-min
)))
(
let
((
new
(
aref
(
rmail-mime-entity-display
entity
)
1
)))
(
aset
new
0
t
))))
;; Query as a warning before showing if truncated.
(
if
(
and
(
not
(
stringp
entity
))
(
rmail-mime-entity-truncated
entity
))
(
unless
(
y-or-n-p
"This entity is truncated; show anyway? "
)
(
error
"Aborted"
)))
;; Enter the shown mode.
(
rmail-mime-shown-mode
entity
)
;; Force this body shown.
...
...
@@ -816,7 +832,7 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
(
let
((
boundary
(
cdr
(
assq
'boundary
content-type
)))
(
subtype
(
cadr
(
split-string
(
car
content-type
)
"/"
)))
(
index
0
)
beg
end
next
entities
)
beg
end
next
entities
truncated
)
(
unless
boundary
(
rmail-mm-get-boundary-error-message
"No boundary defined"
content-type
content-disposition
...
...
@@ -845,7 +861,7 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
(
setq
beg
(
point-min
))
(
while
(
or
(
and
(
search-forward
boundary
nil
t
)
(
setq
end
(
match-beginning
0
)))
(
setq
truncated
nil
end
(
match-beginning
0
)))
;; If the boundary does not appear at all,
;; the message was truncated.
;; Handle the rest of the truncated message
...
...
@@ -854,7 +870,7 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
(
and
(
save-excursion
(
skip-chars-forward
"\n"
)
(
>
(
point-max
)
(
point
)))
(
setq
end
(
point-max
))))
(
setq
truncated
t
end
(
point-max
))))
;; If this is the last boundary according to RFC 2046, hide the
;; epilogue, else hide the boundary only. Use a marker for
;; `next' because `rmail-mime-show' may change the buffer.
...
...
@@ -862,7 +878,7 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
(
setq
next
(
point-max-marker
)))
((
looking-at
"[ \t]*\n"
)
(
setq
next
(
copy-marker
(
match-end
0
)
t
)))
(
(
=
end
(
point-max
))
(
truncated
;; We're handling what's left of a truncated message.
(
setq
next
(
point-max-marker
)))
(
t
...
...
@@ -886,6 +902,7 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
;; Display a tagline.
(
aset
(
aref
(
rmail-mime-entity-display
child
)
1
)
1
(
aset
(
rmail-mime-entity-tagline
child
)
2
t
))
(
rmail-mime-entity-set-truncated
child
truncated
)
(
push
child
entities
)))
(
delete-region
end
next
)
...
...
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