Added all of the MH sources, including RCS files, in
[mmh] / docs / historical / mh-6.8.5 / miscellany / mhe / mh-extras.ml
1 ;  This autoloaded file implements the "x" key of mhe: extended commands.
2 (defun
3     (&mh-extras
4         (save-excursion 
5             (pop-to-buffer "mh-xcommands")
6             (use-local-map "&mh-x-keymap")
7             (if (= 0 (buffer-size))
8                 (insert-string
9                     "Key        Meaning         (Type extended command character:  )\n"
10                     " q Quit: get out of this extended command mode\n"
11                     " p Pack the current folder (renumber messages to be 1-N)\n"
12                     " c Close the current folder (process deletes and moves).\n"
13                     " s Scavenge the current folder (regenerate header buffer)\n"
14                     " f Show a list of the existing folders\n"
15                     " l Print the current message on the line printer.\n"
16                     " m Make a new folder.\n"
17                     " k Kill a folder (erase it and all of its contents)\n"
18                 )
19             )
20             (setq mode-line-format
21                   "mhe extended command mode. Type 'q' to quit this mode   %M")
22             (setq buffer-is-modified 0)
23             (beginning-of-file) (end-of-line) (backward-character)
24             (backward-character)
25             (local-bind-to-key "&mh-xpack" "p")
26             (local-bind-to-key "&mh-xclose" "c")
27             (local-bind-to-key "&mh-xscavenge" "s")
28             (local-bind-to-key "&mh-xfolders" "f")
29             (local-bind-to-key "&mh-xlprint" "l")
30             (local-bind-to-key "&mh-xmake" "m")
31             (local-bind-to-key "&mh-xkill" "k")
32             (recursive-edit)
33             (pop-to-buffer "mh-xcommands")
34             (delete-window)
35         )
36     )
37     (&mh-beep (error-message "Use 'q' to quit this extended command mode."))
38     
39     (&mh-xpack
40         (pop-to-buffer (concat "+" mh-folder))
41         (&mh-pack-folder)
42         (&mh-adjust-window)
43         (exit-emacs)
44     )
45     
46     (&mh-xclose
47         (message "C: close folder...") (sit-for 0)
48         (pop-to-buffer (concat "+" mh-folder))
49         (message "C: close folder...") (sit-for 1)
50         (&mh-close-folder)
51         (exit-emacs)
52     )
53     
54     (&mh-xscavenge sm
55         (pop-to-buffer (concat "+" mh-folder))
56         (setq sm mode-line-format)
57         (&mh-regenerate-headers)
58         (setq mode-line-format sm)
59         (exit-emacs)
60     )
61     
62     (&mh-xfolders
63         (message "F: list folders...")
64         (pop-to-buffer "mh-temp")
65         (use-local-map "&mh-keymap")
66         (erase-buffer) (sit-for 0)
67         (send-to-shell (concat mh-progs "/folders"))
68         (exit-emacs)
69     )
70     
71     (&mh-xlprint
72         (error-message "L: command not implemented.")
73     )
74     
75     (&mh-xmake exists msgg name
76         (message "M: make a new folder...")
77         (setq exists 1)
78         (setq msgg "M: make a new folder...name for it? ")
79         (while exists
80                (setq name (get-tty-string msgg))
81                (if (= 0 (length name))
82                    (progn 
83                           (message "Aborted.") (sit-for 5)
84                           (exit-emacs)))
85                (if (!= (string-to-char (substr name 1 1)) '/')
86                    (setq t-buffer-filename (concat mh-path "/" name))
87                    (setq t-buffer-filename name)
88                )
89                (setq exists (file-exists t-buffer-filename))
90                (if (= exists 1)
91                           (setq msgg (concat "Folder +" name " already exists. Try another name? "))
92                )
93         )
94         (send-to-shell 
95             (concat "mkdir " t-buffer-filename))
96         (exit-emacs)
97     )
98     
99     (&mh-xkill exists action name msgg
100         (message "K: kill a folder, erasing all of its contents...")
101         (setq exists 0)
102         (setq msgg "K: kill a folder, erasing all of its contents...which folder? ")
103         (while (! exists)
104                (setq name (get-tty-string msgg))
105                (if (= 0 (length name))
106                    (progn 
107                           (message "Aborted.") (sit-for 5)
108                           (exit-emacs)))
109                (if (!= (string-to-char (substr name 1 1)) '/')
110                    (setq t-buffer-filename (concat mh-path "/" name))
111                    (setq t-buffer-filename name)
112                )
113                (setq exists (file-exists t-buffer-filename))
114                (if (= exists 0)
115                           (setq msgg (concat "Folder +" name " does not exist. Try another name? "))
116                )
117         )
118         (setq action
119               (get-response (concat "Do you really want to destroy folder +"
120                                     name " and all its contents? ")
121                   "yYnN\3" "Please answer y or n"))
122         (if (= name "inbox")
123             (setq action
124                   (get-response "That's your one and only inbox you are asking me to destroy. Still sure? "
125                       "yYnN\3" "Please answer y or n: destroy inbox??? ")))
126         (if (= action 'y')
127             (progn 
128                    (send-to-shell (concat "rmf +" name))
129                    (message "OK, the deed is done... +" name " destroyed.")
130             )
131             (message "Nothing has been destroyed.")
132         )
133         (sit-for 10)
134         (exit-emacs)
135     )
136 )