[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#17831: 24.4.50; bad default value for `Man-width'
From: |
Juri Linkov |
Subject: |
bug#17831: 24.4.50; bad default value for `Man-width' |
Date: |
Mon, 30 Jun 2014 02:42:28 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) |
>> But still the users need an indication that the formatting
>> is not finished. grep/compilation and vc display a string
>> like "waiting..." or "compiling..." in the mode-line, so
>> man.el could display in the mode-line "formatting..."
>
> Sound fine,
After testing I see no problems with this patch:
=== modified file 'lisp/man.el'
--- lisp/man.el 2014-05-09 07:02:00 +0000
+++ lisp/man.el 2014-06-29 23:37:38 +0000
@@ -1056,21 +1056,28 @@ (defun Man-getpage-in-background (topic)
(require 'env)
(message "Invoking %s %s in the background" manual-program man-args)
(setq buffer (generate-new-buffer bufname))
+ (Man-notify-when-ready buffer)
(with-current-buffer buffer
(setq buffer-undo-list t)
(setq Man-original-frame (selected-frame))
- (setq Man-arguments man-args))
+ (setq Man-arguments man-args)
+ (Man-mode)
+ (setq mode-line-process
+ (concat " " (propertize "[formatting...]"
+ 'face 'mode-line-emphasis))))
(Man-start-calling
(if (fboundp 'start-process)
- (set-process-sentinel
- (start-process manual-program buffer
+ (let ((proc (start-process
+ manual-program buffer
(if (memq system-type '(cygwin windows-nt))
shell-file-name
"sh")
shell-command-switch
- (format (Man-build-man-command) man-args))
- 'Man-bgproc-sentinel)
- (let ((exit-status
+ (format (Man-build-man-command) man-args))))
+ (set-process-sentinel proc 'Man-bgproc-sentinel)
+ (set-process-filter proc 'Man-bgproc-filter))
+ (let* ((inhibit-read-only t)
+ (exit-status
(call-process shell-file-name nil (list buffer nil) nil
shell-command-switch
(format (Man-build-man-command) man-args)))
@@ -1082,6 +1089,10 @@ (defun Man-getpage-in-background (topic)
(format "exited abnormally with code %d"
exit-status)))
(setq msg exit-status))
+ (with-current-buffer buffer
+ (if Man-fontify-manpage-flag
+ (Man-fontify-manpage)
+ (Man-cleanup-manpage)))
(Man-bgproc-sentinel bufname msg)))))
buffer))
@@ -1168,7 +1179,6 @@ (defun Man-fontify-manpage ()
"Convert overstriking and underlining to the correct fonts.
Same for the ANSI bold and normal escape sequences."
(interactive)
- (message "Please wait: formatting the %s man page..." Man-arguments)
(goto-char (point-min))
;; Fontify ANSI escapes.
(let ((ansi-color-apply-face-function
@@ -1183,7 +1193,7 @@ (defun Man-fontify-manpage ()
;; Multibyte characters exist.
(progn
(goto-char (point-min))
- (while (search-forward "__\b\b" nil t)
+ (while (and (search-forward "__\b\b" nil t) (not (eobp)))
(backward-delete-char 4)
(put-text-property (point) (1+ (point)) 'face 'Man-underline))
(goto-char (point-min))
@@ -1191,7 +1201,7 @@ (defun Man-fontify-manpage ()
(backward-delete-char 4)
(put-text-property (1- (point)) (point) 'face 'Man-underline))))
(goto-char (point-min))
- (while (search-forward "_\b" nil t)
+ (while (and (search-forward "_\b" nil t) (not (eobp)))
(backward-delete-char 2)
(put-text-property (point) (1+ (point)) 'face 'Man-underline))
(goto-char (point-min))
@@ -1223,8 +1233,7 @@ (defun Man-fontify-manpage ()
(while (re-search-forward Man-heading-regexp nil t)
(put-text-property (match-beginning 0)
(match-end 0)
- 'face 'Man-overstrike)))
- (message "%s man page formatted" (Man-page-from-arguments Man-arguments)))
+ 'face 'Man-overstrike))))
(defun Man-highlight-references (&optional xref-man-type)
"Highlight the references on mouse-over.
@@ -1286,8 +1295,6 @@ (defun Man-cleanup-manpage (&optional in
but when called interactively, do those jobs even if the sed
script would have done them."
(interactive "p")
- (message "Please wait: cleaning up the %s man page..."
- Man-arguments)
(if (or interactive (not Man-sed-script))
(progn
(goto-char (point-min))
@@ -1309,8 +1316,36 @@ (defun Man-cleanup-manpage (&optional in
;; their preceding chars (but don't put Man-overstrike). (Bug#5566)
(goto-char (point-min))
(while (re-search-forward ".\b" nil t) (backward-delete-char 2))
- (Man-softhyphen-to-minus)
- (message "%s man page cleaned up" Man-arguments))
+ (Man-softhyphen-to-minus))
+
+(defun Man-bgproc-filter (process string)
+ "Manpage background process filter.
+When manpage command is run asynchronously, PROCESS is the process
+object for the manpage command; when manpage command is run
+synchronously, PROCESS is the name of the buffer where the manpage
+command is run. Second argument STRING is the entire string of output."
+ (save-excursion
+ (let ((Man-buffer (process-buffer process)))
+ (if (null (buffer-name Man-buffer)) ;; deleted buffer
+ (set-process-buffer process nil)
+
+ (with-current-buffer Man-buffer
+ (let ((inhibit-read-only t)
+ (beg (marker-position (process-mark process))))
+ (save-excursion
+ (goto-char beg)
+ (insert string)
+ (save-restriction
+ (narrow-to-region
+ (save-excursion
+ (goto-char beg)
+ (line-beginning-position))
+ (point))
+ (if Man-fontify-manpage-flag
+ (Man-fontify-manpage)
+ (Man-cleanup-manpage)))
+ (set-marker (process-mark process) (point-max)))))))))
(defun Man-bgproc-sentinel (process msg)
"Manpage background process sentinel.
@@ -1329,6 +1364,7 @@ (defun Man-bgproc-sentinel (process msg)
(set-process-buffer process nil))
(with-current-buffer Man-buffer
+ (save-excursion
(let ((case-fold-search nil))
(goto-char (point-min))
(cond ((or (looking-at "No \\(manual \\)*entry for")
@@ -1364,28 +1400,34 @@ (defun Man-bgproc-sentinel (process msg)
(insert (format "\nprocess %s" msg))))
))
(if delete-buff
- (kill-buffer Man-buffer)
- (if Man-fontify-manpage-flag
- (Man-fontify-manpage)
- (Man-cleanup-manpage))
+ (if (get-buffer-window Man-buffer)
+ (quit-window t (get-buffer-window Man-buffer))
+ (kill-buffer Man-buffer))
(run-hooks 'Man-cooked-hook)
- (Man-mode)
+
+ (Man-build-page-list)
+ (Man-strip-page-headers)
+ (Man-unindent)
+ (Man-goto-page 1 t)
(if (not Man-page-list)
(let ((args Man-arguments))
- (kill-buffer (current-buffer))
- (user-error "Can't find the %s manpage"
+ (if (get-buffer-window (current-buffer))
+ (quit-window t (get-buffer-window (current-buffer)))
+ (kill-buffer (current-buffer)))
+ (message "Can't find the %s manpage"
(Man-page-from-arguments args)))
- (set-buffer-modified-p nil))))
- ;; Restore case-fold-search before calling
- ;; Man-notify-when-ready because it may switch buffers.
- (if (not delete-buff)
- (Man-notify-when-ready Man-buffer))
+ (if Man-fontify-manpage-flag
+ (message "%s man page formatted" (Man-page-from-arguments
Man-arguments))
+ (message "%s man page cleaned up" Man-arguments))
+ (unless (and (processp process) (not (eq (process-status
process) 'exit)))
+ (setq mode-line-process nil))
+ (set-buffer-modified-p nil)))))
(if err-mess
- (error "%s" err-mess))
+ (message "%s" err-mess))
))))
(defun Man-page-from-arguments (args)
@@ -1458,11 +1500,7 @@ (define-derived-mode Man-mode fundamenta
(set (make-local-variable 'outline-regexp) Man-heading-regexp)
(set (make-local-variable 'outline-level) (lambda () 1))
(set (make-local-variable 'bookmark-make-record-function)
- 'Man-bookmark-make-record)
- (Man-build-page-list)
- (Man-strip-page-headers)
- (Man-unindent)
- (Man-goto-page 1 t))
+ 'Man-bookmark-make-record))
(defsubst Man-build-section-alist ()
"Build the list of manpage sections."
- bug#17831: 24.4.50; bad default value for `Man-width', (continued)
- bug#17831: 24.4.50; bad default value for `Man-width', Eli Zaretskii, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', Stefan Monnier, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', Eli Zaretskii, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', Stefan Monnier, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', Juri Linkov, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', Stefan Monnier, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', Juri Linkov, 2014/06/26
- bug#17831: 24.4.50; bad default value for `Man-width', Stefan Monnier, 2014/06/26
- bug#17831: 24.4.50; bad default value for `Man-width', Juri Linkov, 2014/06/27
- bug#17831: 24.4.50; bad default value for `Man-width', Stefan Monnier, 2014/06/27
- bug#17831: 24.4.50; bad default value for `Man-width',
Juri Linkov <=
- bug#17831: 24.4.50; bad default value for `Man-width', Stefan Monnier, 2014/06/29
- bug#17831: 24.4.50; bad default value for `Man-width', Juri Linkov, 2014/06/24
- bug#17831: 24.4.50; bad default value for `Man-width', martin rudalics, 2014/06/25
- bug#17809: 24.4.50; Completions display, Juri Linkov, 2014/06/24
- bug#17809: 24.4.50; Completions display, martin rudalics, 2014/06/25
- bug#17809: 24.4.50; Completions display, Juri Linkov, 2014/06/26
- bug#17809: 24.4.50; Completions display, Stefan Monnier, 2014/06/26
- bug#17809: 24.4.50; Completions display, martin rudalics, 2014/06/27
- bug#17809: 24.4.50; Completions display, Juri Linkov, 2014/06/27
- bug#17809: 24.4.50; Completions display, martin rudalics, 2014/06/28