jim (03/08/83)
The man.ml in the Gosling emacs distribution puts a manual page into a
window by running the "man" command and piping the output into the
window. This can be very slow. On some systems, pre-formatted man
pages are kept in /usr/man/cat?, and man.ml can be made much faster by
visiting the cat files directly instead of running man, which involves
forking shells, etc.
Here is a modified man.ml to visit the cat files. It is just something
I hacked up one day, and should probably be tested and spruced up a bit
before actually being installed by anyone. If any of you mlisp hackers
want to fix it up, or have a better one already, I'd like to hear from
you.
- James Rees
...!decvax!microsoft!uw-beaver!jim
Jim@uw-vlsi
(defun
(manual-entry subj subjfile errmsg
(setq subj (arg 1 "Subject: "))
(setq errmsg "")
(temp-use-buffer "Manual entry")
(erase-buffer)
(temp-use-buffer "Scratch")
(setq needs-checkpointing 0)
(erase-buffer)
(set-mark)
(filter-region
(concat "/usr/ucb/whereis -m -M /usr/man/cat? -f " subj))
(previous-line)
(if (error-occured (search-forward " "))
(save-excursion
(message "No formatted entry, trying unformatted ...")
(sit-for 0)
(temp-use-buffer "Manual entry")
(set-mark)
(filter-region (concat "/usr/ucb/man " subj))
(if (< (buffer-size) 80)
(progn
(beginning-of-file)
(set-mark)
(end-of-line)
(setq errmsg (region-to-string))
)
)
)
(progn
(while (! (eolp))
(set-mark)
(if (error-occured (search-forward " "))
(end-of-line)
(delete-previous-character)
)
(setq subjfile (region-to-string))
(save-excursion
(temp-use-buffer "Manual entry")
(end-of-file)
(insert-file subjfile)
)
)
)
)
(if (!= (length errmsg) 0)
(message errmsg)
(progn
(pop-to-buffer "Manual entry")
(beginning-of-file)
(message "Still working, be patient ...")
(sit-for 0)
(error-occured (re-replace-string "_\b" ""))
(error-occured (re-replace-string
"^[A-Z][A-Z]*([0-9]*).*)$"
""))
(error-occured (re-replace-string "^Printed [0-9].*[0-9]$" ""))
(error-occured (re-replace-string "\n\n\n\n*" "\n\n"))
(if (looking-at "\n\n*")
(progn
(region-around-match 0)
(erase-region)))
(setq buffer-is-modified 0)
)
)
(novalue)
)
)