Commit daddb3fd authored by Darren Hoo's avatar Darren Hoo Committed by Stefan Monnier
Browse files

* lisp/man.el (Man-start-calling): New macro, extracted from

Man-getpage-in-background.
(Man-getpage-in-background): Use it.
(Man-update-manpage): New command.
(Man-mode-map): Bind it.
parent d85783ca
2013-11-08 Darren Hoo <darren.hoo@gmail.com>
* man.el (Man-start-calling): New macro, extracted from
Man-getpage-in-background.
(Man-getpage-in-background): Use it.
(Man-update-manpage): New command.
(Man-mode-map): Bind it.
2013-11-08 Dmitry Gutov <dgutov@yandex.ru>
* progmodes/ruby-mode.el (ruby-smie-grammar): Improve precedences
......@@ -5,8 +13,8 @@
(ruby-smie--args-separator-p): Prohibit keyword "do" as the first
argument. Prohibit opening curly brace because it could only be a
block opener in that position.
(ruby-smie--forward-token, ruby-smie--backward-token): Separate
"|" from "&" or "*" going after it. That can happen in block
(ruby-smie--forward-token, ruby-smie--backward-token):
Separate "|" from "&" or "*" going after it. That can happen in block
arguments.
(ruby-smie--indent-to-stmt): New function, seeks the end of
previous statement or beginning of buffer.
......
......@@ -448,6 +448,7 @@ Otherwise, the value is whatever the function
(define-key map "s" 'Man-goto-see-also-section)
(define-key map "k" 'Man-kill)
(define-key map "q" 'Man-quit)
(define-key map "u" 'Man-update-manpage)
(define-key map "m" 'man)
;; Not all the man references get buttons currently. The text in the
;; manual page can contain references to other man pages
......@@ -1000,6 +1001,52 @@ names or descriptions. The pattern argument is usually an
(error "No item under point")
(man man-args)))
(defmacro Man-start-calling (&rest body)
"Start the man command in `body' after setting up the environment"
`(let ((process-environment (copy-sequence process-environment))
;; The following is so Awk script gets \n intact
;; But don't prevent decoding of the outside.
(coding-system-for-write 'raw-text-unix)
;; We must decode the output by a coding system that the
;; system's locale suggests in multibyte mode.
(coding-system-for-read locale-coding-system)
;; Avoid possible error by using a directory that always exists.
(default-directory
(if (and (file-directory-p default-directory)
(not (find-file-name-handler default-directory
'file-directory-p)))
default-directory
"/")))
;; Prevent any attempt to use display terminal fanciness.
(setenv "TERM" "dumb")
;; In Debian Woody, at least, we get overlong lines under X
;; unless COLUMNS or MANWIDTH is set. This isn't a problem on
;; a tty. man(1) says:
;; MANWIDTH
;; If $MANWIDTH is set, its value is used as the line
;; length for which manual pages should be formatted.
;; If it is not set, manual pages will be formatted
;; with a line length appropriate to the current ter-
;; minal (using an ioctl(2) if available, the value of
;; $COLUMNS, or falling back to 80 characters if nei-
;; ther is available).
(when (or window-system
(not (or (getenv "MANWIDTH") (getenv "COLUMNS"))))
;; This isn't strictly correct, since we don't know how
;; the page will actually be displayed, but it seems
;; reasonable.
(setenv "COLUMNS" (number-to-string
(cond
((and (integerp Man-width) (> Man-width 0))
Man-width)
(Man-width (frame-width))
((window-width))))))
;; Since man-db 2.4.3-1, man writes plain text with no escape
;; sequences when stdout is not a tty. In 2.5.0, the following
;; env-var was added to allow control of this (see Debian Bug#340673).
(setenv "MAN_KEEP_FORMATTING" "1")
,@body))
(defun Man-getpage-in-background (topic)
"Use TOPIC to build and fire off the manpage and cleaning command.
Return the buffer in which the manpage will appear."
......@@ -1015,51 +1062,8 @@ Return the buffer in which the manpage will appear."
(setq buffer-undo-list t)
(setq Man-original-frame (selected-frame))
(setq Man-arguments man-args))
(let ((process-environment (copy-sequence process-environment))
;; The following is so Awk script gets \n intact
;; But don't prevent decoding of the outside.
(coding-system-for-write 'raw-text-unix)
;; We must decode the output by a coding system that the
;; system's locale suggests in multibyte mode.
(coding-system-for-read
(if (default-value 'enable-multibyte-characters)
locale-coding-system 'raw-text-unix))
;; Avoid possible error by using a directory that always exists.
(default-directory
(if (and (file-directory-p default-directory)
(not (find-file-name-handler default-directory
'file-directory-p)))
default-directory
"/")))
;; Prevent any attempt to use display terminal fanciness.
(setenv "TERM" "dumb")
;; In Debian Woody, at least, we get overlong lines under X
;; unless COLUMNS or MANWIDTH is set. This isn't a problem on
;; a tty. man(1) says:
;; MANWIDTH
;; If $MANWIDTH is set, its value is used as the line
;; length for which manual pages should be formatted.
;; If it is not set, manual pages will be formatted
;; with a line length appropriate to the current ter-
;; minal (using an ioctl(2) if available, the value of
;; $COLUMNS, or falling back to 80 characters if nei-
;; ther is available).
(when (or window-system
(not (or (getenv "MANWIDTH") (getenv "COLUMNS"))))
;; This isn't strictly correct, since we don't know how
;; the page will actually be displayed, but it seems
;; reasonable.
(setenv "COLUMNS" (number-to-string
(cond
((and (integerp Man-width) (> Man-width 0))
Man-width)
(Man-width (frame-width))
((window-width))))))
;; Since man-db 2.4.3-1, man writes plain text with no escape
;; sequences when stdout is not a tty. In 2.5.0, the following
;; env-var was added to allow control of this (see Debian Bug#340673).
(setenv "MAN_KEEP_FORMATTING" "1")
(if (fboundp 'start-process)
(Man-start-calling
(if (fboundp 'start-process)
(set-process-sentinel
(start-process manual-program buffer
(if (memq system-type '(cygwin windows-nt))
......@@ -1081,7 +1085,34 @@ Return the buffer in which the manpage will appear."
exit-status)))
(setq msg exit-status))
(Man-bgproc-sentinel bufname msg)))))
buffer))
buffer))
(defun Man-update-manpage ()
"Reformat current manpage by calling the man command again synchronously."
(interactive)
(when (eq Man-arguments nil)
;;this shouldn't happen unless it is not in a Man buffer."
(error "Man-arguments not initialized"))
(let ((old-pos (point))
(text (current-word))
(old-size (buffer-size))
(inhibit-read-only t)
(buffer-read-only nil))
(erase-buffer)
(Man-start-calling
(call-process shell-file-name nil (list (current-buffer) nil) nil
shell-command-switch
(format (Man-build-man-command) Man-arguments)))
(if Man-fontify-manpage-flag
(Man-fontify-manpage)
(Man-cleanup-manpage))
(goto-char old-pos)
;;restore the point, not strictly right.
(unless (or (eq text nil) (= old-size (buffer-size)))
(let ((case-fold-search nil))
(if (> old-size (buffer-size))
(search-backward text nil t))
(search-forward text nil t)))))
(defun Man-notify-when-ready (man-buffer)
"Notify the user when MAN-BUFFER is ready.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment