|
|
1.1 root 1: ; This file holds functions that create and manipulate the cache of header
2: ; information for the various message files. It is explicitly loaded from
3: ; the root.
4: -------------------------------------------------------------------------
5:
6: ; This function creates the header buffer that represents a message or
7: ; bboard directory. It associates several buffer-specific variables
8: ; with it: mh-buffer-filename, which is the actual Unix file name of the
9: ; directory; mh-folder-title, which is either the tail of the directory
10: ; name or the whole thing depending on whether it is in your mail path.
11: ; call: (&mh-read-folder "folder" "range" "pathname" "title")
12: (defun
13: (&mh-read-folder name rnge title
14: (setq name (arg 1)) (setq rnge (arg 2))
15: (pop-to-buffer (concat "+" mh-folder))
16: (if buffer-is-modified
17: (write-current-file))
18: (setq mh-folder name)
19: (switch-to-buffer (concat "+" name))
20: (setq backup-before-writing 0)
21: (setq wrap-long-lines 0)
22: (use-local-map "&mh-keymap")
23: (setq mode-string "mh-folder")
24: (if (= (buffer-size) 0)
25: (progn
26: (if (!= 0 (length mh-flist))
27: (setq mh-flist (concat mh-flist ",")))
28: (setq mh-flist (concat mh-flist name))
29: (setq mh-buffer-filename (arg 3))
30: (setq mh-folder-title (arg 4))
31: (use-local-map "&mh-keymap")
32: (if (error-occured
33: (read-file (concat mh-buffer-filename "/"
34: (current-buffer-name))))
35: (progn
36: (message "Header file missing; regenerating it...")
37: (sit-for 0)
38: (&mh-regenerate-headers)
39: )
40: (progn
41: (&mh-update-headers)
42: )
43: )
44: (if (looking-at "scan: "); UCI
45: ;UCI (looking-at "No messages ")
46: (progn
47: (if (= rnge "")
48: (message "Folder +" name " is empty.")
49: (message "No messages in +" name " range " rnge)
50: ;UCI (erase-buffer)
51: )
52: (sit-for 15)
53: (erase-buffer); UCI
54: )
55: )
56: (setq mode-line-format
57: (concat "{%b} %[%] "
58: "Cmds: n p d ^ ! u t e m f i r g b x ? Exit:^X^C %M")
59: )
60: (&mh-check-folder-full)
61: )
62: )
63: (&mh-adjust-window)
64: (setq buffer-is-modified 0)
65: )
66: )
67:
68: (defun
69: (&mh-check-folder-full lastmsg
70: (save-excursion
71: (temp-use-buffer (concat "+" mh-folder))
72: (end-of-file)
73: (previous-line)
74: (beginning-of-line)
75: (while (= (following-char) ' ') (forward-character))
76: (set-mark)
77: (beginning-of-line)
78: (goto-character (+ (dot) 3))
79: (setq lastmsg (region-to-string))
80: (if (> lastmsg 900)
81: (progn ans
82: (setq ans
83: (get-response (concat "Folder +" mh-folder " is >90%% full. May I pack it for you? ")
84: "yYnN\"
85: "Please answer y or n"))
86: (if (= ans 'y')
87: (progn
88: (&mh-pack-folder)
89: )
90: (progn
91: (message "OK, but you should use the 'x-p' command to pack it soon.")
92: (sit-for 20)
93: )
94: )
95: )
96: )
97: )
98: )
99:
100: (&mh-adjust-window
101: (&mh-unmark-all-headers 0)
102: (&mh-position-to-current)
103: (save-excursion
104: (beginning-of-window)
105: (if (! (bobp))
106: (progn t
107: (end-of-file)
108: (setq t (dot))
109: (while (= t (dot))
110: (progn
111: (scroll-one-line-down)
112: (sit-for 0)
113: ))
114: (scroll-one-line-up)
115: )
116: )
117: )
118: )
119: )
120:
121: (defun
122: (&mh-regenerate-headers
123: (setq mode-line-format " please wait for header regeneration...")
124: (message "scan +" mh-folder-title)
125: (sit-for 0)
126: (erase-buffer) (set-mark)
127: (fast-filter-region (concat mh-progs "/scan +" mh-folder-title))
128: (write-named-file (concat mh-buffer-filename "/"
129: (&mh-header-file-name)))
130: (unlink-file (concat mh-buffer-filename "/++"))
131: )
132: (&mh-header-file-name
133: (if (!= (substr (current-buffer-name) 2 1) "/")
134: (current-buffer-name)
135: (save-excursion x
136: (setq x (current-buffer-name))
137: (temp-use-buffer "scratch")
138: (erase-buffer) (insert-string x)
139: (beginning-of-file) (set-mark)
140: (error-occured
141: (replace-string "/" ".")
142: )
143: (end-of-file)
144: (region-to-string)
145: )
146: )
147: )
148: )
149: ; Read in the ++ file that was generated by an external "inc", then erase.
150: (defun
151: (&mh-update-headers uhf
152: (setq uhf (concat mh-buffer-filename "/++"))
153: (if (file-exists uhf)
154: (progn
155: (save-excursion
156: (temp-use-buffer "++")
157: (read-file uhf)
158: (temp-use-buffer (concat "+" mh-folder))
159: (end-of-file)
160: (yank-buffer "++")
161: (write-current-file)
162: (temp-use-buffer "++")
163: (erase-buffer)
164: (unlink-file uhf)
165: )
166: )
167: )
168: )
169: )
170: ; This function removes all "+" flags from the headers, and if it is called
171: ; with an argument of 1, removes all "D" and "^" flags too.
172: (defun
173: (&mh-unmark-all-headers
174: (temp-use-buffer (concat "+" mh-folder))
175: (beginning-of-file)
176: (while (! (error-occured
177: (if (= 0 (arg 1))
178: (re-search-forward "^...\\+")
179: (re-search-forward "^...\\D\\|^...\\^\\|^...\\+")
180: )
181: )
182: )
183: (delete-previous-character)
184: (insert-character ' ')
185: )
186: )
187:
188: ; position the cursor to the current message.
189: (&mh-position-to-current curmsg curbuf curfil
190: (setq curbuf (current-buffer-name))
191: (setq curfil mh-buffer-filename)
192: (temp-use-buffer "mh-temp") (erase-buffer)
193: (if (error-occured
194: (insert-file (concat curfil "/cur")))
195: (setq curmsg 0)
196: (progn
197: (beginning-of-file)
198: (set-mark)
199: (end-of-line)
200: (setq curmsg (region-to-string))
201: )
202: )
203: (temp-use-buffer curbuf)
204: (end-of-file)
205: (if (= curmsg 0) (previous-line)
206: (progn
207: (while (< (length curmsg) 3)
208: (setq curmsg (concat " " curmsg)))
209: (if (error-occured
210: (re-search-reverse (concat "^" curmsg)))
211: (progn (end-of-file) (previous-line))
212: )
213: )
214: )
215: (if (! (eobp))
216: (progn
217: (beginning-of-line)
218: (goto-character (+ (dot) 3))
219: (delete-next-character)
220: (insert-character '+')
221: (beginning-of-line)
222: )
223: )
224: )
225: ; This function sets the "current message" (+ sign) to equal the number of
226: ; the message that the cursor is pointing to. I.e. it writes cur to stable
227: ; storage
228: (&mh-set-cur cm cf
229: (save-window-excursion
230: (temp-use-buffer (concat "+" mh-folder))
231: (setq cm (&mh-get-msgnum))
232: (setq cf (concat mh-buffer-filename "/cur"))
233: (temp-use-buffer "mh-temp")
234: (erase-buffer)
235: (insert-string cm)
236: (write-named-file cf)
237: (delete-buffer "mh-temp")
238: )
239: )
240:
241: ; write out the header buffer as a file in the current folder
242: (&mh-make-headers-current
243: (temp-use-buffer (concat "+" mh-folder))
244: (save-excursion
245: (beginning-of-file)
246: (while (! (error-occured
247: (re-search-forward "^...\\D\\|^...\\^")))
248: (beginning-of-line)
249: (kill-to-end-of-line) (delete-next-character)
250: )
251: (write-current-file)
252: )
253: (&mh-set-cur)
254: )
255:
256: ; This function closes a folder, i.e. processes all of the pending deletes and
257: ; moves for it and edits the header buffer accordingly.
258: (&mh-close-folder ts
259: (temp-use-buffer "cmd-buffer") (beginning-of-file)
260: (error-occured
261: (re-search-forward (concat "^rmm +" mh-folder))
262: (beginning-of-line) (insert-string mh-progs "/")
263: (beginning-of-line) (set-mark)
264: (end-of-line) (delete-next-character)
265: (setq ts (region-to-string)) (erase-region)
266: (send-to-shell ts)
267: )
268: (beginning-of-file)
269: (while (!
270: (error-occured
271: (re-search-forward (concat "^filem -src +" mh-folder))
272: ))
273: (beginning-of-line) (insert-string mh-progs "/")
274: (beginning-of-line) (set-mark)
275: (end-of-line) (delete-next-character)
276: (setq ts (region-to-string)) (erase-region)
277: (send-to-shell ts)
278: )
279: (pop-to-buffer (concat "+" mh-folder))
280: (&mh-make-headers-current)
281: (&mh-unmark-all-headers)
282: (&mh-position-to-current)
283: )
284: ; This function applies "folder -pack" to the current folder, after first
285: ; closing it (see above)
286: (&mh-pack-folder sm
287: (setq sm mode-line-format)
288: (setq mode-line-format " closing folder first...") (sit-for 0)
289: (&mh-close-folder)
290: (setq mode-line-format " please wait for pack...") (sit-for 0)
291: (send-to-shell (concat mh-progs "/folder +" mh-folder " -pack"))
292: (&mh-regenerate-headers)
293: (setq mode-line-format sm)
294: )
295: )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.