* bug#5729: 23.1.94; WoMan regression: Invalid search bound (wrong side of point)
@ 2010-03-16 8:19 Sven Joachim
2010-03-16 9:30 ` Sven Joachim
0 siblings, 1 reply; 3+ messages in thread
From: Sven Joachim @ 2010-03-16 8:19 UTC (permalink / raw)
To: 5729; +Cc: Sven Joachim
[-- Attachment #1: Type: text/plain, Size: 13107 bytes --]
Running WoMan on the attached rsync manpage fails:
,----
| Debugger entered--Lisp error: (error "Invalid search bound (wrong side of point)")
| re-search-forward("\\(^\\s *$\\)\\|\\(^\\s +\\)" #<marker (moves after insertion) at 13657 in *WoMan 1 rsync*> 1)
| woman2-format-paragraphs(#<marker (moves after insertion) at 13657 in *WoMan 1 rsync*> 5)
| woman2-PP(#<marker (moves after insertion) at 13657 in *WoMan 1 rsync*>)
| woman2-roff-buffer()
| woman-decode-region(1 159742)
| woman-decode-buffer()
| woman-process-buffer()
| woman-really-find-file("/usr/share/man/man1/rsync.1.gz" t "*WoMan 1 rsync*")
| woman-find-file("/usr/share/man/man1/rsync.1.gz")
| woman(nil nil)
| call-interactively(woman nil nil)
`----
This is a regression from Emacs 23.1 which displays the manpage just
fine.
In GNU Emacs 23.1.94.1 (i486-pc-linux-gnu, GTK+ Version 2.18.7)
of 2010-03-12 on turtle, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.10705000
configured using `configure '--build' 'i486-linux-gnu' '--host' 'i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs-snapshot:/etc/emacs:/usr/local/share/emacs/23.1.94/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1.94/site-lisp:/usr/share/emacs/site-lisp' '--with-x=yes' '--with-x-toolkit=gtk' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -DSITELOAD_PURESIZE_EXTRA=5000 -g -O2' 'LDFLAGS=-g -Wl,--as-needed' 'CPPFLAGS=''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: C
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: de_DE.UTF-8
value of $XMODIFIERS: nil
locale-coding-system: utf-8-unix
default enable-multibyte-characters: t
Major mode: Debugger
Minor modes in effect:
shell-dirtrack-mode: t
diff-auto-refine-mode: t
display-time-mode: t
auto-image-file-mode: t
show-paren-mode: t
tooltip-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
auto-encryption-mode: t
auto-compression-mode: t
temp-buffer-resize-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <down> <down> <down>
<down> <down> <down> <down> <down> <down> v C-s d i
e C-l <C-f1> <return> q q <C-f1> r s y n <tab> <return>
C-x k <return> C-c l r s y n c . 1 <return> <return>
C-x C-j <C-f1> b z r <return> C-x 1 C-s b i s <return>
<next> <next> <next> <next> <next> <next> <next> <next>
<next> <next> <f7> <down> <down> <down> <down> <down>
<up> <return> g g C-x d <M-backspace> <M-backspace>
<M-backspace> <M-backspace> <M-backspace> <M-backspace>
<M-backspace> e m <tab> / e m <tab> <return> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <up> <up> <up> <down> <down>
<down> <down> <down> <down> <down> <up> <up> <up> <up>
<up> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <up> <return> <f5>
. / e m <tab> SPC & <return> <f7> <up> <up> <up> <return>
M-x g n u s <return> <f10> <menu-bar> <options> <debug-on-error>
M-x m a n <return> r <backspace> r s y n c <return>
<f10> <menu-bar> <options> <debug-on-error> C-x k <return>
M-x <up> <return> <up> <return> <next> <next> <next>
<next> <next> <next> <next> <next> <next> <next> <next>
<next> <next> <next> <next> <next> <next> <next> <next>
<next> <next> q C-c l <up> <return> W C-x k <return>
C-u <C-f1> <up> <return> C-x k <return> <f10> <help-echo>
<menu-bar> <options> <debug-on-error> <C-f1> <up> <return>
M-x r e p o r t - e m <tab> b u <tab> <return>
Recent messages:
Building completion list of all manual topics...
Saving file /home/sven/.emacs.d/.woman-cache.el...
Wrote /home/sven/.emacs.d/.woman-cache.el
uncompressing rsync.1.gz...done
WoMan formatting buffer...
woman2-format-paragraphs: Invalid search bound (wrong side of point)
Debug on Error enabled globally
uncompressing rsync.1.gz...done
WoMan formatting buffer...
Entering debugger...
Load-path shadows:
~/elisp/po-mode hides /usr/share/emacs-snapshot/site-lisp/gettext/po-mode
~/elisp/debian-bts-control hides /usr/share/emacs-snapshot/site-lisp/dpkg-dev-el/debian-bts-control
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-fptex hides /usr/share/emacs/site-lisp/auctex/tex-fptex
/usr/share/emacs/23.1.94/site-lisp/auctex/tex hides /usr/share/emacs/site-lisp/auctex/tex
/usr/share/emacs/23.1.94/site-lisp/auctex/latex hides /usr/share/emacs/site-lisp/auctex/latex
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-fold hides /usr/share/emacs/site-lisp/auctex/tex-fold
/usr/share/emacs/23.1.94/site-lisp/auctex/texmathp hides /usr/share/emacs/site-lisp/auctex/texmathp
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-bar hides /usr/share/emacs/site-lisp/auctex/tex-bar
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-mik hides /usr/share/emacs/site-lisp/auctex/tex-mik
/usr/share/emacs/23.1.94/site-lisp/auctex/context hides /usr/share/emacs/site-lisp/auctex/context
/usr/share/emacs/23.1.94/site-lisp/auctex/context-nl hides /usr/share/emacs/site-lisp/auctex/context-nl
/usr/share/emacs/23.1.94/site-lisp/auctex/bib-cite hides /usr/share/emacs/site-lisp/auctex/bib-cite
/usr/share/emacs/23.1.94/site-lisp/auctex/multi-prompt hides /usr/share/emacs/site-lisp/auctex/multi-prompt
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-buf hides /usr/share/emacs/site-lisp/auctex/tex-buf
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-jp hides /usr/share/emacs/site-lisp/auctex/tex-jp
/usr/share/emacs/23.1.94/site-lisp/auctex/context-en hides /usr/share/emacs/site-lisp/auctex/context-en
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-font hides /usr/share/emacs/site-lisp/auctex/tex-font
/usr/share/emacs/23.1.94/site-lisp/auctex/toolbar-x hides /usr/share/emacs/site-lisp/auctex/toolbar-x
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-style hides /usr/share/emacs/site-lisp/auctex/tex-style
/usr/share/emacs/23.1.94/site-lisp/auctex/font-latex hides /usr/share/emacs/site-lisp/auctex/font-latex
/usr/share/emacs/23.1.94/site-lisp/auctex/tex-info hides /usr/share/emacs/site-lisp/auctex/tex-info
/usr/share/emacs-snapshot/site-lisp/bbdb/bbdb-pilot-jwz hides /usr/share/emacs/site-lisp/bbdb/bbdb-pilot-jwz
~/elisp/po-mode hides /usr/share/emacs/site-lisp/gettext/po-mode
/usr/share/emacs-snapshot/site-lisp/gettext/po-compat hides /usr/share/emacs/site-lisp/gettext/po-compat
/usr/share/emacs-snapshot/site-lisp/gnuplot-mode/gnuplot hides /usr/share/emacs/site-lisp/gnuplot-mode/gnuplot
/usr/share/emacs-snapshot/site-lisp/gnuplot-mode/info-look.20.3 hides /usr/share/emacs/site-lisp/gnuplot-mode/info-look.20.3
/usr/share/emacs-snapshot/site-lisp/gnuplot-mode/gnuplot-gui hides /usr/share/emacs/site-lisp/gnuplot-mode/gnuplot-gui
/usr/share/emacs/23.1.94/site-lisp/cmake/cmake-mode hides /usr/share/emacs/23.1.94/site-lisp/cmake-data/cmake-mode
/usr/share/emacs/23.1.94/site-lisp/cmake/cmake-mode hides /usr/share/emacs/site-lisp/cmake-mode
/usr/share/emacs/23.1.94/site-lisp/debian-startup hides /usr/share/emacs/site-lisp/debian-startup
/usr/share/emacs/23.1.94/site-lisp/magit hides /usr/share/emacs/site-lisp/magit
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-util hides /usr/share/emacs/site-lisp/w3m/w3m-util
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-dtree hides /usr/share/emacs/site-lisp/w3m/w3m-dtree
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-hist hides /usr/share/emacs/site-lisp/w3m/w3m-hist
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-weather hides /usr/share/emacs/site-lisp/w3m/w3m-weather
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-rss hides /usr/share/emacs/site-lisp/w3m/w3m-rss
/usr/share/emacs-snapshot/site-lisp/w3m/mew-w3m hides /usr/share/emacs/site-lisp/w3m/mew-w3m
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-filter hides /usr/share/emacs/site-lisp/w3m/w3m-filter
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-session hides /usr/share/emacs/site-lisp/w3m/w3m-session
/usr/share/emacs-snapshot/site-lisp/w3m/w3mhack hides /usr/share/emacs/site-lisp/w3m/w3mhack
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-search hides /usr/share/emacs/site-lisp/w3m/w3m-search
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-lnum hides /usr/share/emacs/site-lisp/w3m/w3m-lnum
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-proc hides /usr/share/emacs/site-lisp/w3m/w3m-proc
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-fb hides /usr/share/emacs/site-lisp/w3m/w3m-fb
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-favicon hides /usr/share/emacs/site-lisp/w3m/w3m-favicon
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-bug hides /usr/share/emacs/site-lisp/w3m/w3m-bug
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-perldoc hides /usr/share/emacs/site-lisp/w3m/w3m-perldoc
/usr/share/emacs-snapshot/site-lisp/w3m/mime-w3m hides /usr/share/emacs/site-lisp/w3m/mime-w3m
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-bookmark hides /usr/share/emacs/site-lisp/w3m/w3m-bookmark
/usr/share/emacs-snapshot/site-lisp/w3m/octet hides /usr/share/emacs/site-lisp/w3m/octet
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-ems hides /usr/share/emacs/site-lisp/w3m/w3m-ems
/usr/share/emacs-snapshot/site-lisp/w3m/w3m hides /usr/share/emacs/site-lisp/w3m/w3m
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-ccl hides /usr/share/emacs/site-lisp/w3m/w3m-ccl
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-mail hides /usr/share/emacs/site-lisp/w3m/w3m-mail
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-cookie hides /usr/share/emacs/site-lisp/w3m/w3m-cookie
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-image hides /usr/share/emacs/site-lisp/w3m/w3m-image
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-form hides /usr/share/emacs/site-lisp/w3m/w3m-form
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-antenna hides /usr/share/emacs/site-lisp/w3m/w3m-antenna
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-symbol hides /usr/share/emacs/site-lisp/w3m/w3m-symbol
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-tabmenu hides /usr/share/emacs/site-lisp/w3m/w3m-tabmenu
/usr/share/emacs-snapshot/site-lisp/w3m/w3m-namazu hides /usr/share/emacs/site-lisp/w3m/w3m-namazu
Features:
(shadow ispell emacsbug debug tabify cus-start cus-load shell comint
ring nroff-mode locate woman man assoc autoconf autoconf-mode diff-mode
easy-mmode multi-isearch w3m-bookmark w3m-tabmenu w3m-session help-mode
view kmacro vc-git bookmark pp nndoc url-cache url-http tls url-gw
url-auth url url-proxy url-privacy url-expand url-methods url-history
url-cookie url-util url-handlers url-parse url-vars thingatpt thai-util
thai-word mule-util macros w3m-form w3m browse-url doc-view jka-compr
dired-x dired-aux dired image-mode w3m-hist w3m-fb w3m-ems w3m-ccl ccl
w3m-favicon w3m-image w3m-proc w3m-util compface gnus-fun sort flow-fill
gnus-cite smiley ansi-color mail-extr gnus-async gnus-bcklg gnus-ml
disp-table parse-time timezone byte-opt bytecomp byte-compile nnfolder
nndraft nnmh auth-source gnus-agent gnus-srvr gnus-score score-mode
nnvirtual gnus-msg gnus-art mm-uu mml2015 epg-config mm-view smime dig
nntp gnus-cache gnus-sum nnoo gnus-group gnus-undo nnmail mail-source
format-spec gnus-start gnus-spec gnus-int gnus-range message idna
sendmail ecomplete rfc822 mml easymenu mml-sec password-cache mm-decode
mm-bodies mm-encode mailcap mail-parse rfc2231 rfc2047 rfc2045 qp
ietf-drums mailabbrev gmm-utils mailheader canlock sha1 hex-util
hashcash gnus-win gnus gnus-ems nnheader gnus-util netrc time-date
mail-utils mm-util mail-prsvr wid-edit time server uniquify advice
help-fns advice-preload po generic-x regexp-opt image-file paren add-ons
bitmap bitmap-ci poem poem-e20 poem-e20_3 pces pces-e20 pces-20 broken
pcustom poe pym static apel-ver product debian-el debian-el-loaddefs
w3m-load emacs-goodies-el emacs-goodies-custom emacs-goodies-loaddefs
dpkg-dev-el dpkg-dev-el-loaddefs bbdb-autoloads preview-latex tex-site
auto-loads tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win
x-dnd font-setting tool-bar dnd fontset image fringe lisp-mode register
page menu-bar rfn-eshadow timer select scroll-bar mldrag mouse jit-lock
font-lock syntax facemenu font-core frame cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew
greek romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button
minibuffer faces cus-face files text-properties overlay md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process dbusbind font-render-setting gtk
x-toolkit x multi-tty emacs)
[-- Attachment #2: rsync manpage --]
[-- Type: application/octet-stream, Size: 49400 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#5729: 23.1.94; WoMan regression: Invalid search bound (wrong side of point)
2010-03-16 8:19 bug#5729: 23.1.94; WoMan regression: Invalid search bound (wrong side of point) Sven Joachim
@ 2010-03-16 9:30 ` Sven Joachim
2010-03-16 17:24 ` Chong Yidong
0 siblings, 1 reply; 3+ messages in thread
From: Sven Joachim @ 2010-03-16 9:30 UTC (permalink / raw)
To: 5729; +Cc: Chong Yidong
On 2010-03-16 09:19 +0100, Sven Joachim wrote:
> Running WoMan on the attached rsync manpage fails:
>
> ,----
> | Debugger entered--Lisp error: (error "Invalid search bound (wrong side of point)")
> | re-search-forward("\\(^\\s *$\\)\\|\\(^\\s +\\)" #<marker (moves after insertion) at 13657 in *WoMan 1 rsync*> 1)
> | woman2-format-paragraphs(#<marker (moves after insertion) at 13657 in *WoMan 1 rsync*> 5)
> | woman2-PP(#<marker (moves after insertion) at 13657 in *WoMan 1 rsync*>)
> | woman2-roff-buffer()
> | woman-decode-region(1 159742)
> | woman-decode-buffer()
> | woman-process-buffer()
> | woman-really-find-file("/usr/share/man/man1/rsync.1.gz" t "*WoMan 1 rsync*")
> | woman-find-file("/usr/share/man/man1/rsync.1.gz")
> | woman(nil nil)
> | call-interactively(woman nil nil)
> `----
>
> This is a regression from Emacs 23.1 which displays the manpage just
> fine.
I bisected the problem, and the first bad commit is revision 96401:
revno: 96401
committer: Chong Yidong <cyd@stupidchicken.com>
timestamp: Mon 2009-07-06 02:17:31 +0000
message:
* woman.el: Remove stand-alone closing parentheses.
(woman-file-name, woman2-format-paragraphs)
(woman-leave-blank-lines): Code cleanup.
(woman-use-own-frame): Change default to nil.
(woman-italic, woman-bold, woman-unknown, woman-addition): Change
defaults to inherit from default faces.
(woman2-process-escapes): Consume the newline after a stand-alone
filler character (Bug#3651).
=== modified file 'lisp/woman.el'
--- lisp/woman.el 2009-03-07 15:28:58 +0000
+++ lisp/woman.el 2009-07-06 02:17:31 +0000
@@ -860,9 +860,7 @@
:set 'set-woman-file-regexp
:group 'woman-interface)
-(defcustom woman-use-own-frame ; window-system
- (or (and (fboundp 'display-graphic-p) (display-graphic-p)) ; Emacs 21
- (memq window-system '(x w32 ns))) ; Emacs 20
+(defcustom woman-use-own-frame nil
"If non-nil then use a dedicated frame for displaying WoMan windows.
Only useful when run on a graphic display such as X or MS-Windows."
:type 'boolean
@@ -944,45 +942,28 @@
:type 'boolean
:group 'woman-faces)
-;; This is overkill! Troff uses just italic; Nroff uses just underline.
-;; You should probably select either italic or underline as you prefer, but
-;; not both, although italic and underline work together perfectly well!
(defface woman-italic
- `((((min-colors 88) (background light))
- (:slant italic :underline t :foreground "red1"))
- (((background light)) (:slant italic :underline t :foreground "red"))
- (((background dark)) (:slant italic :underline t)))
+ '((t :inherit italic))
"Face for italic font in man pages."
:group 'woman-faces)
-;; backward-compatibility alias
(put 'woman-italic-face 'face-alias 'woman-italic)
(defface woman-bold
- '((((min-colors 88) (background light)) (:weight bold :foreground "blue1"))
- (((background light)) (:weight bold :foreground "blue"))
- (((background dark)) (:weight bold :foreground "green2")))
+ '((t :inherit bold))
"Face for bold font in man pages."
:group 'woman-faces)
-;; backward-compatibility alias
(put 'woman-bold-face 'face-alias 'woman-bold)
-;; Brown is a good compromise: it is distinguishable from the default
-;; but not enough so to make font errors look terrible. (Files that use
-;; non-standard fonts seem to do so badly or in idiosyncratic ways!)
(defface woman-unknown
- '((((background light)) (:foreground "brown"))
- (((min-colors 88) (background dark)) (:foreground "cyan1"))
- (((background dark)) (:foreground "cyan")))
+ '((t :inherit font-lock-warning-face))
"Face for all unknown fonts in man pages."
:group 'woman-faces)
-;; backward-compatibility alias
(put 'woman-unknown-face 'face-alias 'woman-unknown)
(defface woman-addition
- '((t (:foreground "orange")))
+ '((t :inherit font-lock-builtin-face))
"Face for all WoMan additions to man pages."
:group 'woman-faces)
-;; backward-compatibility alias
(put 'woman-addition-face 'face-alias 'woman-addition)
(defun woman-default-faces ()
@@ -1212,11 +1193,9 @@
(woman-find-file file-name)
(message
"WoMan Error: No matching manual files found in search path")
- (ding))
- )
+ (ding)))
(message "WoMan Error: No topic specified in non-interactive call")
- (ding))
- )
+ (ding)))
;; Allow WoMan to be called via the standard Help menu:
(define-key-after menu-bar-manuals-menu [woman]
@@ -1287,11 +1266,10 @@
be found. Optional argument RE-CACHE, if non-nil, forces the
cache to be re-read."
;; Handle the caching of the directory and topic lists:
- (if (and (not re-cache)
- (or
- (and woman-expanded-directory-path woman-topic-all-completions)
- (woman-read-directory-cache)))
- ()
+ (unless (and (not re-cache)
+ (or
+ (and woman-expanded-directory-path woman-topic-all-completions)
+ (woman-read-directory-cache)))
(message "Building list of manual directory expansions...")
(setq woman-expanded-directory-path
(woman-expand-directory-path woman-manpath woman-path))
@@ -1328,8 +1306,7 @@
'woman-topic-history
default))))
;; Note that completing-read always returns a string.
- (if (= (length topic) 0)
- nil ; no topic, so no file!
+ (unless (= (length topic) 0)
(cond
((setq files (woman-file-name-all-completions topic)))
;; Complete topic more carefully, i.e. use the completion
@@ -1366,8 +1343,7 @@
(not (member (car cdr_list) (cdr cdr_list)))
(funcall predicate (car cdr_list)))
(setq list cdr_list)
- (setcdr list (cdr cdr_list)))
- )
+ (setcdr list (cdr cdr_list))))
newlist)))
(defun woman-file-readable-p (dir)
@@ -1560,10 +1536,8 @@
path (cdr path))
(if (woman-not-member dir path) ; use each directory only once!
(setq files (nconc files
- (directory-files dir t topic-regexp))))
- ))
- (mapcar 'list files)
- ))
+ (directory-files dir t topic-regexp))))))
+ (mapcar 'list files)))
\f
;;; dired support
@@ -1668,8 +1642,7 @@
(or exists
(setq woman-buffer-alist
(cons (cons file-name bufname) woman-buffer-alist)
- woman-buffer-number 0))
- )))
+ woman-buffer-number 0)))))
(Man-build-section-alist)
(Man-build-references-alist)
(goto-char (point-min)))
@@ -1785,8 +1758,7 @@
(goto-char (point-min))
(forward-line)
(while (re-search-forward "^\\( \\)?\\([A-Z].*\\)" nil t)
- (woman-set-face (match-beginning 2) (match-end 2) 'woman-bold))))
- )
+ (woman-set-face (match-beginning 2) (match-end 2) 'woman-bold)))))
(defun woman-insert-file-contents (filename compressed)
"Insert file FILENAME into the current buffer.
@@ -1811,9 +1783,7 @@
(file-error
;; Run find-file-not-found-hooks until one returns non-nil.
;; (run-hook-with-args-until-success 'find-file-not-found-hooks)
- (insert "\n***** File " filename " not found! *****\n\n")
- )))
- )))
+ (insert "\n***** File " filename " not found! *****\n\n")))))))
\f
;;; Major mode (Man) interface:
@@ -1991,8 +1961,7 @@
(interactive)
(setq woman-fill-frame (not woman-fill-frame))
(message "Woman fill column set to %s."
- (if woman-fill-frame "frame width" woman-fill-column)
- ))
+ (if woman-fill-frame "frame width" woman-fill-column)))
(defun woman-mini-help ()
"Display WoMan commands and user options in an `apropos' buffer."
@@ -2119,8 +2088,7 @@
(setcdr prev-ptr (cdr (cdr prev-ptr)))
(if (>= woman-buffer-number (length woman-buffer-alist))
(setq woman-buffer-number 0))
- nil)
- )))
+ nil))))
\f
;;; Syntax and display tables:
@@ -2406,52 +2374,7 @@
(woman-delete-match 0)
(WoMan-warn
"Terminal vertical motion escape \\%s ignored!" esc)))
- (setq first (not first))
- )))
-
-; ;; \h'+/-N' local horizontal motion.
-; ;; N may include width escape \w'...'
-; ;; Implement arbitrary forward motion and non-overlapping backward
-; ;; motion.
-; (goto-char from)
-; (while (re-search-forward
-; ;; Delimiter can be a special char escape sequence \(.. or
-; ;; a single normal char (usually '):
-; "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
-; nil t)
-; (let ((from (match-beginning 0))
-; (delim (regexp-quote (match-string 1)))
-; (absolute (match-string 2)) ; absolute position?
-; (N (woman-parse-numeric-arg)) ; distance
-; to
-; msg) ; for warning
-; (if (not (looking-at delim))
-; ;; Warn but leave escape in buffer unprocessed:
-; (WoMan-warn
-; "Local horizontal motion (%s) delimiter error!"
-; (buffer-substring from (1+ (point)))) ; point at end of arg
-; (setq to (match-end 0)
-; ;; For possible warning -- save before deleting:
-; msg (buffer-substring from to))
-; (delete-region from to)
-; (if absolute ; make relative
-; (setq N (- N (current-column))))
-; (if (>= N 0)
-; ;; Move forward by inserting hard spaces:
-; (insert-char woman-unpadded-space-char N)
-; ;; Move backwards by deleting space,
-; ;; first backwards then forwards:
-; (while (and
-; (<= (setq N (1+ N)) 0)
-; (cond ((memq (preceding-char) '(?\ ?\t))
-; (delete-backward-char 1) t)
-; ((memq (following-char) '(?\ ?\t))
-; (delete-char 1) t)
-; (t nil))))
-; (if (<= N 0)
-; (WoMan-warn
-; "Negative horizontal motion (%s) would overwrite!" msg))))
-; ))
+ (setq first (not first)))))
;; Process formatting macros
(goto-char from)
@@ -2472,8 +2395,7 @@
(delete-char -1) (insert ?\\))
(goto-char from)
(while (search-forward woman-unpadded-space-string nil t)
- (delete-char -1) (insert ?\ ))
- ))
+ (delete-char -1) (insert ?\ ))))
;; Must return the new end of file if used in format-alist.
(point-max)))
@@ -2521,8 +2443,7 @@
(t nil))))
(if (<= N 0)
(WoMan-warn
- "Negative horizontal motion (%s) would overwrite!" msg))))
- ))
+ "Negative horizontal motion (%s) would overwrite!" msg))))))
(goto-char from)))
@@ -2582,8 +2503,7 @@
(delete-region from (point))
(WoMan-warn
"ig request ignored -- terminator `.%s' not found!" yy)
- (woman-delete-line 1))
- ))
+ (woman-delete-line 1))))
(defsubst woman0-process-escapes (from to)
"Process escapes within an if/ie condition between FROM and TO."
@@ -2641,12 +2561,10 @@
(woman0-process-escapes from woman0-if-to)
(woman-parse-numeric-arg))))
(setq c (> n 0))
- (goto-char from))
- )
+ (goto-char from)))
(if (eq c 0)
(woman-if-ignore woman0-if-to request) ; ERROR!
- (woman-if-body request woman0-if-to (eq c negated)))
- ))
+ (woman-if-body request woman0-if-to (eq c negated)))))
(defun woman-if-body (request to delete) ; should be reversed as `accept'?
"Process if-body, including \\{ ... \\}.
@@ -2676,10 +2594,9 @@
(delete-region (if delete from (match-beginning 0)) (point))
(if (looking-at "^$") (delete-char 1))
))
- (delete (woman-delete-line 1)) ; single-line
- )
+ (delete (woman-delete-line 1))) ; single-line
;; Process matching .el anything:
- (cond ((string= request "ie")
+ (cond ((string= request "ie")
;; Discard unless previous .ie c `evaluated to false'.
(cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
(woman-delete-match 0)
@@ -2689,10 +2606,8 @@
((string= request "el")
(cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
(woman-delete-match 0)
- (woman-if-body "el" nil t))))
- )
- (goto-char from)
- ))
+ (woman-if-body "el" nil t)))))
+ (goto-char from)))
(defun woman0-el ()
"Isolated .el request -- should not happen!"
@@ -2746,8 +2661,7 @@
(to (copy-marker (+ from length) t)))
(woman-pre-process-region from to)
(set-marker to nil)
- (goto-char from)
- )))
+ (goto-char from))))
\f
;;; Process macro definitions:
@@ -2767,8 +2681,7 @@
(setq beg (point)
end (progn (woman-forward-arg 'unquote) (point))
new (buffer-substring beg end)
- woman0-rename-alist (cons (cons new old) woman0-rename-alist)))
- ))
+ woman0-rename-alist (cons (cons new old) woman0-rename-alist)))))
(woman-delete-whole-line))
(defun woman0-rename ()
@@ -2836,8 +2749,7 @@
(setq woman0-macro-alist (cons macro woman0-macro-alist))
(forward-line)
(delete-region from (point))
- (backward-char) ; return to end of .de/am line
- ))
+ (backward-char))) ; return to end of .de/am line
(beginning-of-line) ; delete .de/am line
(woman-delete-line 1))
@@ -2872,8 +2784,7 @@
;; Replace formal arg with actual arg:
(setq start nil)
(while (setq start (string-match formal-arg macro start))
- (setq macro (replace-match actual-arg t t macro)))
- )
+ (setq macro (replace-match actual-arg t t macro))))
;; Delete any remaining formal arguments:
(setq start nil)
(while
@@ -2957,11 +2868,7 @@
(delete-region beg (point))
(setq woman-string-alist
(cons (cons stringname "")
- woman-string-alist))))
- ))
- ))
- ))
- ))
+ woman-string-alist))))))))))))
\f
;;; Process special character escapes \(xx:
@@ -3047,8 +2954,7 @@
(WoMan-warn (concat "Special character "
(if (match-beginning 1) "\\(%s" "\\[%s]")
" not interpolated!") name)
- (if woman-ignore (woman-delete-match 0))))
- ))
+ (if woman-ignore (woman-delete-match 0))))))
(defun woman-display-extended-fonts ()
"Display table of glyphs of graphic characters and their octal codes.
@@ -3066,8 +2972,7 @@
(insert " ")
(setq i (1+ i))
(when (= i 128) (setq i 160) (insert "\n"))
- (if (zerop (% i 8)) (insert "\n")))
- ))
+ (if (zerop (% i 8)) (insert "\n")))))
(print-help-return-message)))
\f
@@ -3089,8 +2994,7 @@
(setq in-quote (not in-quote))
))
(if in-quote
- (WoMan-warn "Unpaired \" in .%s arguments." request))
- ))
+ (WoMan-warn "Unpaired \" in .%s arguments." request))))
(defsubst woman-unquote-args ()
"Delete any double-quote characters up to the end of the line."
@@ -3124,9 +3028,7 @@
(funcall fn)
;; Hide leading control character in quoted argument (only):
(if (and unquote (memq (following-char) '(?. ?')))
- (insert "\\&"))
- )
- )))))
+ (insert "\\&"))))))))
;;; Font-changing macros:
@@ -3198,8 +3100,7 @@
(insert (car fonts))
(setq fonts (cdr fonts))
(woman-forward-arg unquote 'concat)) ; unquote is bound above
- (insert "\\fR")
- ))
+ (insert "\\fR")))
(defun woman-forward-arg (&optional unquote concat)
"Move forward over one ?roff argument, optionally unquoting and/or joining.
@@ -3215,14 +3116,12 @@
(re-search-forward "\"\\|$"))
(if (eq (preceding-char) ?\")
(if unquote (delete-backward-char 1))
- (WoMan-warn "Unpaired \" in .%s arguments." request)
- ))
+ (WoMan-warn "Unpaired \" in .%s arguments." request)))
;; (re-search-forward "[^\\\n] \\|$") ; inconsistent
(skip-syntax-forward "^ "))
(cond ((null concat) (skip-chars-forward " \t")) ; don't skip eol!
((eq concat 'noskip)) ; do not skip following whitespace
- (t (woman-delete-following-space)))
- )
+ (t (woman-delete-following-space))))
;; The following requests are not explicit font-change requests and
@@ -3247,8 +3146,7 @@
(woman-delete-whole-line)
(insert ".ft I\n")
(forward-line N)
- (insert ".ft R\n")
- ))
+ (insert ".ft R\n")))
;;; Other non-breaking requests:
@@ -3279,8 +3177,7 @@
(save-excursion
(while (and (re-search-forward c nil t)
(match-beginning 1))
- (delete-char -1)))
- ))
+ (delete-char -1)))))
(put 'woman1-hw 'notfont t)
(defun woman1-hw ()
@@ -3372,8 +3269,7 @@
fescape t)
(woman-match-name))
(t (setq notfont t)))
- (if notfont
- ()
+ (unless notfont
;; Get font name:
(or font
(let ((fontstring (match-string 0)))
@@ -3411,8 +3307,7 @@
(setq current-font font)
)))
;; Set font after last request up to eob:
- (woman-set-face previous-pos (point) current-font)
- ))
+ (woman-set-face previous-pos (point) current-font)))
(defun woman-set-face (from to face)
"Set the face of the text from FROM to TO to face FACE.
@@ -3431,8 +3326,7 @@
(put-text-property from (point) 'face face-no-ul)
(setq from (point))
)))
- (put-text-property from to 'face face))
- ))
+ (put-text-property from to 'face face))))
\f
;;; Output translation:
@@ -3482,8 +3376,7 @@
(concat "[" matches))
translations (cons matches alist))
;; Format any following text:
- (woman2-format-paragraphs to)
- ))
+ (woman2-format-paragraphs to)))
(defsubst woman-translate (to)
"Translate up to marker TO. Do this last of all transformations."
@@ -3498,8 +3391,7 @@
(buffer-substring-no-properties
(match-beginning 0) (match-end 0))
alist)))
- (woman-delete-match 0))
- )))
+ (woman-delete-match 0)))))
\f
;;; Registers:
@@ -3689,8 +3581,7 @@
(if (re-search-forward delim nil t)
;; Return width of string:
(- (match-beginning 0) from)
- (WoMan-warn "Width escape delimiter error!"))))
- )))
+ (WoMan-warn "Width escape delimiter error!")))))))
(if (null n)
;; ERROR -- should handle this better!
(progn
@@ -3714,8 +3605,7 @@
;; in which case do nothing and return nil.
)
(goto-char (match-end 0)))
- (if (numberp n) (round n) n))
- )))
+ (if (numberp n) (round n) n)))))
\f
;;; VERTICAL FORMATTING -- Formatting macros that cause a break:
@@ -3824,11 +3714,7 @@
(defsubst woman-interparagraph-space ()
"Set variable `woman-leave-blank-lines' from `woman-interparagraph-distance'."
-; (if (> woman-interparagraph-distance 0)
-; (forward-line 1) ; leave 1 blank line
-; (woman-delete-line 1)) ; do not leave blank line
- (setq woman-leave-blank-lines woman-interparagraph-distance)
- )
+ (setq woman-leave-blank-lines woman-interparagraph-distance))
(defun woman2-TH (to)
".TH n c x v m -- Begin a man page. Format paragraphs upto TO.
@@ -3842,9 +3728,7 @@
(let ((start (point)) here)
(while (not (eolp))
(cond ((looking-at "\"\"[ \t]")
- (delete-char 2)
- ;; (delete-horizontal-space)
- ))
+ (delete-char 2)))
(delete-horizontal-space)
(setq here (point))
(insert " -- ")
@@ -3975,9 +3859,7 @@
"Character(s) overwritten by negative vertical spacing in line %d"
(count-lines 1 (point))))
(delete-char 1) (insert (substring overlap i (1+ i)))))
- (setq i (1+ i))
- ))
- )))
+ (setq i (1+ i)))))))
\f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -3992,8 +3874,9 @@
;; The first two cases below could be merged (maybe)!
(let ((from (point)))
;; Discard zero width filler character used to hide leading dots
- ;; and zero width characters \|, \^:
- (while (re-search-forward "\\\\[&|^]" to t)
+ ;; and zero width characters. If on a line by itself, consume the
+ ;; newline as well, as this may interfere with (Bug#3651).
+ (while (re-search-forward "\\\\[&|^]\n?" to t)
(woman-delete-match 0))
(goto-char from)
;; Interrupt text processing -- CONTINUE current text with the
@@ -4020,7 +3903,7 @@
(delete-char 1)
(insert ?`))))
((eq c ?\( )) ; uninterpreted special character
- ; \(.. -- do nothing
+ ; \(.. -- do nothing
((eq c ?t) ; non-interpreted tab \t
(delete-char 1)
(delete-char -1)
@@ -4065,8 +3948,7 @@
(c (if (< (point) to) (following-char) ?_)))
(delete-region from to)
(delete-char 1)
- (insert (make-string N c))
- ))
+ (insert (make-string N c))))
;;; 4. Text Filling, Adjusting, and Centering
@@ -4089,7 +3971,7 @@
(defun woman2-nf (to)
".nf -- Nofill. Subsequent lines are neither filled nor adjusted.
Input text lines are copied directly to output lines without regard
-for the current line length. Format paragraphs upto TO."
+for the current line length. Format paragraphs up to TO."
(setq woman-nofill t)
(woman-delete-line 1) ; ignore any arguments
(woman2-format-paragraphs to))
@@ -4140,15 +4022,12 @@
(progn (skip-syntax-forward " ")
(beginning-of-line)
(point)))
- (if woman-nospace
- ()
+ (unless woman-nospace
(if (or (null leave) (eq leave 0))
;; output any `pending' vertical space ...
(setq leave woman-leave-blank-lines))
- (if (and leave (> leave 0)) (insert-before-markers ?\n))
- )
- (setq woman-leave-blank-lines nil)
- )
+ (if (and leave (> leave 0)) (insert-before-markers ?\n)))
+ (setq woman-leave-blank-lines nil))
;; `fill-region-as-paragraph' in `fill.el' appears to be the principal
;; text filling function, so that is what I use here.
@@ -4167,28 +4046,20 @@
(skip-syntax-forward " ")
;; Successive control lines are sufficiently common to be worth a
;; special case (maybe):
- (if (>= (point) to) ; >= as a precaution!
- ()
- ;; (woman-leave-blank-lines)
+ (unless (>= (point) to)
(woman-reset-nospace)
- ;; (woman2-process-escapes to) ; 7 October 1999
(woman2-process-escapes to 'numeric)
(if woman-nofill
;; Indent without filling or adjusting ...
(progn
(woman-leave-blank-lines)
- (cond (woman-temp-indent
- (indent-to woman-temp-indent)
- (forward-line)))
+ (when woman-temp-indent
+ (indent-to woman-temp-indent)
+ (forward-line))
(indent-rigidly (point) to left-margin)
- (woman-horizontal-escapes to)) ; 7 October 1999
+ (woman-horizontal-escapes to))
;; Fill and justify ...
;; Blank lines and initial spaces cause a break.
-; (cond ((and (= (point) to) (not (looking-at ".nf"))) ; Yuk!!!
-; ;; No text after a request that caused a break, so delete
-; ;; any spurious blank line left:
-; (forward-line -1)
-; (if (looking-at "^\\s *$") (kill-line) (forward-line))))
(while (< (point) to)
(woman-leave-blank-lines)
(let ((from (point)))
@@ -4197,13 +4068,6 @@
(woman-horizontal-escapes to) ; 7 October 1999
;; Find the beginning of the next paragraph:
(forward-line)
-; (if (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
-; ;; A blank line should leave a space like .sp 1 (p. 14).
-; (if (eolp)
-; (progn
-; (skip-syntax-forward " ")
-; (setq woman-leave-blank-lines 1))
-; (setq woman-leave-blank-lines nil)))
(and (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
;; A blank line should leave a space like .sp 1 (p. 14).
(eolp)
@@ -4217,35 +4081,21 @@
;; If a single short line then just leave it.
;; This is necessary to preserve some table layouts.
;; PROBABLY NOT NECESSARY WITH SQUEEZE MODIFICATION !!!!!
- (if (or (> (count-lines from (point)) 1)
+ (when (or (> (count-lines from (point)) 1)
+ (save-excursion
+ (backward-char)
+ (> (current-column) fill-column)))
+ ;; NOSQUEEZE has no effect if JUSTIFY is full, so redefine
+ ;; canonically-space-region, see above.
+ (if (and woman-temp-indent (< woman-temp-indent left-margin))
+ (let ((left-margin woman-temp-indent))
+ (fill-region-as-paragraph from (point) woman-justify)
(save-excursion
- (backward-char)
- (> (current-column) fill-column)))
- ;; ?roff does not squeeze multiple spaces
- ;; (fill-region-as-paragraph from (point) woman-justify t)
- ;; NOSQUEEZE has no effect if JUSTIFY is full, so
- ;; redefine canonically-space-region, see above.
- (progn
- ;; Needs a re-write of the paragraph formatter to
- ;; avoid this nonsense to handle temporary indents!
- (if (and woman-temp-indent (< woman-temp-indent left-margin))
- (let ((left-margin woman-temp-indent))
- (fill-region-as-paragraph from (point) woman-justify)
- (save-excursion
- (goto-char from)
- (forward-line)
- (setq from (point)))))
- (fill-region-as-paragraph from (point) woman-justify))
- )
- ;; A blank line should leave a space like .sp 1 (p. 14).
- ;; Delete all but 1 trailing blank lines:
- ;;(woman-leave-blank-lines 1)
- ))
- )
- (setq woman-temp-indent nil)
- ;; Non-white-space text has been processed, so ...
- ;;(setq woman-leave-blank-lines nil)
- ))
+ (goto-char from)
+ (forward-line)
+ (setq from (point)))))
+ (fill-region-as-paragraph from (point) woman-justify)))))
+ (setq woman-temp-indent nil)))
\f
;;; Tagged, indented and hanging paragraphs:
@@ -4317,8 +4167,7 @@
(if (string= (match-string 1) "ta") ; for GetInt.3
(woman2-ta to)
(woman-set-interparagraph-distance)))
- (set-marker to (woman-find-next-control-line-carefully))
- ))
+ (set-marker to (woman-find-next-control-line-carefully))))
(let ((tag (point)))
(woman-reset-nospace)
@@ -4352,9 +4201,7 @@
;; Cannot simply delete (current-column) whitespace
;; characters because some may be tabs!
(insert-char ?\s i)))
- (goto-char to) ; necessary ???
- ))
- ))
+ (goto-char to)))))
(defun woman2-HP (to)
".HP i -- Set prevailing indent to i. Format paragraphs upto TO.
@@ -4362,8 +4209,7 @@
(let ((i (woman2-get-prevailing-indent)))
(woman-interparagraph-space)
(setq woman-temp-indent woman-left-margin)
- (woman2-format-paragraphs to (+ woman-left-margin i))
- ))
+ (woman2-format-paragraphs to (+ woman-left-margin i))))
(defun woman2-get-prevailing-indent (&optional leave-eol)
"Set prevailing indent to integer argument at point, and return it.
@@ -4548,9 +4394,7 @@
(insert-before-markers woman-unpadded-space-char)
(subst-char-in-region
(match-beginning 0) (match-end 0)
- pad woman-unpadded-space-char t)
- ))
- ))
+ pad woman-unpadded-space-char t)))))
(woman2-format-paragraphs to))
\f
@@ -4617,8 +4461,7 @@
(concat "file " WoMan-current-file)
(concat "buffer " WoMan-current-buffer))
" at " (current-time-string) "\n")
- (setq WoMan-Log-header-point-max (point-max))
- )))
+ (setq WoMan-Log-header-point-max (point-max)))))
(defun WoMan-log (format &rest args)
"Log a message out of FORMAT control string and optional ARGS."
@@ -4664,8 +4507,7 @@
(cond (WoMan-Log-header-point-max
(goto-char WoMan-Log-header-point-max)
(forward-line -1)
- (recenter 0)))
- )))))
+ (recenter 0))))))))
nil) ; for woman-file-readable-p etc.
(provide 'woman)
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#5729: 23.1.94; WoMan regression: Invalid search bound (wrong side of point)
2010-03-16 9:30 ` Sven Joachim
@ 2010-03-16 17:24 ` Chong Yidong
0 siblings, 0 replies; 3+ messages in thread
From: Chong Yidong @ 2010-03-16 17:24 UTC (permalink / raw)
To: Sven Joachim; +Cc: 5729
>> Running WoMan on the attached rsync manpage fails:
>>
>> ,----
>> | Debugger entered--Lisp error: (error "Invalid search bound (wrong side of point)")
>> | re-search-forward("\\(^\\s *$\\)\\|\\(^\\s +\\)" #<marker (moves after insertion) at 13657 in *WoMan 1 rsync*> 1)
>> | woman2-format-paragraphs(#<marker (moves after insertion) at 13657 in *WoMan 1 rsync*> 5)
>> | woman2-PP(#<marker (moves after insertion) at 13657 in *WoMan 1 rsync*>)
>> | woman2-roff-buffer()
>> | woman-decode-region(1 159742)
>> | woman-decode-buffer()
>> | woman-process-buffer()
>> | woman-really-find-file("/usr/share/man/man1/rsync.1.gz" t "*WoMan 1 rsync*")
>> | woman-find-file("/usr/share/man/man1/rsync.1.gz")
>> | woman(nil nil)
>> | call-interactively(woman nil nil)
>> `----
>>
>> This is a regression from Emacs 23.1 which displays the manpage just
>> fine.
>
> I bisected the problem, and the first bad commit is revision 96401:
I've checked in a fix. Thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-03-16 17:24 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-16 8:19 bug#5729: 23.1.94; WoMan regression: Invalid search bound (wrong side of point) Sven Joachim
2010-03-16 9:30 ` Sven Joachim
2010-03-16 17:24 ` Chong Yidong
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).