annotate miscellany/mhe/mh-mode.ml @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 ; This file implements a "mail draft mode" for composition of messages in
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 ; the MH mail handler (q.v.). When MH calls Emacs, its customary call
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 ; is
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 ; emacs ./reply ./message -lmh-mode -email-draft-mode
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5 ; for the case of a reply, and
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 ; emacs ./draft -lmh-mode -email-draft-mode
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 ; for a newly originated message.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 ; For use from mhe, in which Emacs calls MH instead of vice versa, it will
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 ; work fine as long as the function mail-draft-mode is not called.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 ; Brian Reid, December 1981
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 (defun
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 (dot-in-header wasdot ; return True iff cursor in message hdr
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 (save-excursion
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 (setq wasdot (dot))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 (beginning-of-file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 (re-search-forward "^-*$")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 (beginning-of-line) (backward-character)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 (>= (dot) wasdot)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 (header-line-position ; position cursor w.r.t. header line
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 (if (dot-in-header)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 (if (save-excursion
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 (beginning-of-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 (& (!= (following-char) ' ')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 (!= (following-char) '\t'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 (progn (beginning-of-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 (error-occured (search-forward ":"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 (if (eolp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 (insert-character ' ')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 (forward-character)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 (if (! (eolp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 (forward-word)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 (backward-word))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 ))))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 )))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 (header-next ; modified ^N command.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 (next-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 (header-line-position)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 (header-previous ; modified ^P command
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 (previous-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 (header-line-position)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 (find-starting-line ; back cursor up to first line of this para.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 (beginning-of-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 (while (& (! (bobp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 (! (eolp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 (!= (following-char) ' ')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 (! (looking-at "^-*$"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 (previous-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 (next-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 (justify-mail-paragraph ; like ordinary justify-para, but
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 (error-occured ; avoids trashing mail header.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 (if (! (dot-in-header))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 (save-excursion
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 (find-starting-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 (if (& (! (eolp)) (! (eobp)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 (set-mark)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 (forward-paragraph)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 (backward-word) (forward-word)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 (forward-character)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 (narrow-region)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 (error-occured (justify-mail-region))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 (widen-region))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 (message "Done!")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 (novalue)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 )))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 (justify-mail-region ; justify the entire buffer
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 (beginning-of-file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 (delete-white-space)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 (to-col left-margin)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 (while (progn ; Turn it all into 1 long line....
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 (end-of-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95 (if (! (eobp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 (forward-character))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 (! (eobp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 (delete-previous-character)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 (delete-white-space)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 (insert-string " ")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 (beginning-of-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 (while (save-excursion
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 (end-of-line)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 (> (current-column) right-margin)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 (goto-character (+ (dot) right-margin))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 (forward-character) (backward-word)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 (while (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 (backward-character)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 (& (!= (following-char) ' ')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 (!= (following-char) '\t')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 (!= (following-char) '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 (! (bobp)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 (novalue)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 (delete-next-character) (newline)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 (defun
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 (mail-mode
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 (set "right-margin" 72)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 (local-bind-to-key "header-next" '')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 (local-bind-to-key "header-previous" '')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129 (local-bind-to-key "justify-mail-paragraph" "\ej")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 (use-syntax-table "text-mode")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 (setq mode-string "mh-mail")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 (novalue)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 (mail-draft-mode
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 (if (> (argc) 4)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 (visit-file (argv 1))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 (mail-mode)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 (visit-file (argv 2))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 (mail-mode)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 (visit-file (argv 1))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 (end-of-file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 (progn
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 (visit-file (argv 1))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 (mail-mode)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 (beginning-of-file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 (header-line-position)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 )