all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
@ 2012-07-20 16:13 Drew Adams
  2012-07-20 18:30 ` Andreas Schwab
  0 siblings, 1 reply; 33+ messages in thread
From: Drew Adams @ 2012-07-20 16:13 UTC (permalink / raw)
  To: 11999

I do not have a recipe from emacs -Q.  But here are two debug traces from
a build of 7/16, where there is a problem, and from Emacs 24.1, where
there is no problem.
 
The code does exactly the same thing, step by step.  But when
`info-insert-file-contents' is called in the 7/16 build it returns nil
instead of t, because it is looking for file
"c:/Emacs-24.1/info/emacs" and there is no such file.  There is now only
a file "c:/Emacs-24.1/info/emacs.info".
 
IOW, changing the info files to have suffix ".info" breaks (at least)
this code (i.e., at least `Info-find-node-2').
 
-----------------------------------------------------------------
Emacs 24 built on 7/16:
 
Debugger entered--returning value: nil
  info-file-exists-p("c:/Emacs-24-2012-07-16/info/emacs")
* info-insert-file-contents("c:/Emacs-24-2012-07-16/info/emacs" nil)
* (cond ((eq filename t) (Info-insert-dir nomsg)) ((eq filename (quote apro=
pos)) (insert-buffer-substring " *info-apropos*")) ((eq filename (quote his=
tory)) (insert-buffer-substring " *info-history*")) ((eq filename (quote to=
c)) (insert-buffer-substring " *info-toc*")) (t (info-insert-file-contents =
filename nil) (setq default-directory (file-name-directory filename))))
* (let ((inhibit-read-only t)) (when (and (boundp (quote Info-current-node-=
virtual)) Info-current-node-virtual) (set (make-local-variable (quote Info-=
current-node-virtual)) nil) (unless filename (setq filename Info-current-fi=
le))) (setq Info-current-file nil Info-current-subfile nil Info-current-fil=
e-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq filename =
t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert-buffer-s=
ubstring " *info-apropos*")) ((eq filename (quote history)) (insert-buffer-=
substring " *info-history*")) ((eq filename (quote toc)) (insert-buffer-sub=
string " *info-toc*")) (t (info-insert-file-contents filename nil) (setq de=
fault-directory (file-name-directory filename)))) (set-buffer-modified-p ni=
l) (set (make-local-variable (quote Info-file-supports-index-cookies)) (Inf=
o-file-supports-index-cookies filename)) (goto-char (point-max)) (forward-l=
ine -8) (if (not (or (string-equal nodename "*") (not (search-forward "=1F\=
nEnd tag table\n" nil t)))) (let (pos) (search-backward "\nTag table:\n") (=
setq pos (point)) (if (save-excursion (forward-line 2) (looking-at "(Indire=
ct)\n")) (let ((buf (current-buffer)) (tagbuf (or Info-tag-table-buffer ...=
))) (setq Info-tag-table-buffer tagbuf) (with-current-buffer tagbuf (buffer=
-disable-undo (current-buffer)) (setq case-fold-search t) (erase-buffer) (i=
nsert-buffer-substring buf)) (set-marker Info-tag-table-marker (match-end 0=
) tagbuf)) (set-marker Info-tag-table-marker pos))) (set-marker Info-tag-ta=
ble-marker nil)) (setq Info-current-file filename))
* (cond ((functionp virtual-fun) (let ((filename (or filename Info-current-=
file))) (setq buffer-read-only nil Info-current-file filename Info-current-=
subfile nil Info-current-file-completions nil buffer-file-name nil) (erase-=
buffer) (Info-virtual-call virtual-fun filename nodename no-going-back) (se=
t-marker Info-tag-table-marker nil) (setq buffer-read-only t) (set-buffer-m=
odified-p nil) (set (make-local-variable (quote Info-current-node-virtual))=
 t))) ((not (and (or (not (boundp (quote Info-current-node-virtual))) (not =
Info-current-node-virtual)) (or (null filename) (equal Info-current-file fi=
lename)))) (let ((inhibit-read-only t)) (when (and (boundp (quote Info-curr=
ent-node-virtual)) Info-current-node-virtual) (set (make-local-variable (qu=
ote Info-current-node-virtual)) nil) (unless filename (setq filename Info-c=
urrent-file))) (setq Info-current-file nil Info-current-subfile nil Info-cu=
rrent-file-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq =
filename t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert=
-buffer-substring " *info-apropos*")) ((eq filename (quote history)) (inser=
t-buffer-substring " *info-history*")) ((eq filename (quote toc)) (insert-b=
uffer-substring " *info-toc*")) (t (info-insert-file-contents filename nil)=
 (setq default-directory (file-name-directory filename)))) (set-buffer-modi=
fied-p nil) (set (make-local-variable (quote Info-file-supports-index-cooki=
es)) (Info-file-supports-index-cookies filename)) (goto-char (point-max)) (=
forward-line -8) (if (not (or (string-equal nodename "*") (not (search-forw=
ard "=1F\nEnd tag table\n" nil t)))) (let (pos) (search-backward "\nTag tab=
le:\n") (setq pos (point)) (if (save-excursion (forward-line 2) (looking-at=
 "(Indirect)\n")) (let (... ...) (setq Info-tag-table-buffer tagbuf) (with-=
current-buffer tagbuf ... ... ... ...) (set-marker Info-tag-table-marker ..=
. tagbuf)) (set-marker Info-tag-table-marker pos))) (set-marker Info-tag-ta=
ble-marker nil)) (setq Info-current-file filename))))
* (let ((case-fold-search t) (virtual-fun (and (fboundp (quote Info-virtual=
-fun)) (Info-virtual-fun (quote find-node) (or filename Info-current-file) =
nodename))) anchorpos) (cond ((functionp virtual-fun) (let ((filename (or f=
ilename Info-current-file))) (setq buffer-read-only nil Info-current-file f=
ilename Info-current-subfile nil Info-current-file-completions nil buffer-f=
ile-name nil) (erase-buffer) (Info-virtual-call virtual-fun filename nodena=
me no-going-back) (set-marker Info-tag-table-marker nil) (setq buffer-read-=
only t) (set-buffer-modified-p nil) (set (make-local-variable (quote Info-c=
urrent-node-virtual)) t))) ((not (and (or (not (boundp ...)) (not Info-curr=
ent-node-virtual)) (or (null filename) (equal Info-current-file filename)))=
) (let ((inhibit-read-only t)) (when (and (boundp (quote Info-current-node-=
virtual)) Info-current-node-virtual) (set (make-local-variable (quote Info-=
current-node-virtual)) nil) (unless filename (setq filename Info-current-fi=
le))) (setq Info-current-file nil Info-current-subfile nil Info-current-fil=
e-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq filename =
t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert-buffer-s=
ubstring " *info-apropos*")) ((eq filename (quote history)) (insert-buffer-=
substring " *info-history*")) ((eq filename (quote toc)) (insert-buffer-sub=
string " *info-toc*")) (t (info-insert-file-contents filename nil) (setq de=
fault-directory (file-name-directory filename)))) (set-buffer-modified-p ni=
l) (set (make-local-variable (quote Info-file-supports-index-cookies)) (Inf=
o-file-supports-index-cookies filename)) (goto-char (point-max)) (forward-l=
ine -8) (if (not (or (string-equal nodename "*") (not ...))) (let (pos) (se=
arch-backward "\nTag table:\n") (setq pos (point)) (if (save-excursion ... =
...) (let ... ... ... ...) (set-marker Info-tag-table-marker pos))) (set-ma=
rker Info-tag-table-marker nil)) (setq Info-current-file filename)))) (if (=
string-equal nodename "*") (progn (setq Info-current-node nodename) (Info-s=
et-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\\|Ref=
:\\) *\\(" (if (stringp nodename) (regexp-quote nodename) "") "\\) *[, \n\x7f]=
"))) (catch (quote foo) (when (marker-position Info-tag-table-marker) (let*=
 ((m Info-tag-table-marker) (found ...)) (when found (setq guesspos ...) (u=
nless ... ...) (when ... ... ...)))) (goto-char (max (point-min) (- (byte-t=
o-position guesspos) 1000))) (let ((pos (Info-find-node-in-buffer regexp)))=
 (when pos (goto-char pos) (throw (quote foo) t))) (when (string-match "\\(=
[^.]+\\)\\." nodename) (let (Info-point-loc) (Info-find-node-2 filename (ma=
tch-string 1 nodename) no-going-back nomsg)) (widen) (throw (quote foo) t))=
 (error "No such node or anchor: %s" nodename)) (Info-select-node) (goto-ch=
ar (point-min)) (forward-line 1) (when (and (not (fboundp (quote Info-bread=
crumbs))) Info-breadcrumbs-in-header-flag (> Info-breadcrumbs-depth 0)) (fo=
rward-line 1)) (cond (anchorpos (let ((new-history ...)) (setq Info-history=
-list (cons new-history ...))) (goto-char anchorpos)) ((numberp Info-point-=
loc) (forward-line (- Info-point-loc 2)) (setq Info-point-loc nil)) ((strin=
gp Info-point-loc) (Info-find-index-name Info-point-loc) (setq Info-point-l=
oc nil))))) (when (and (one-window-p t) (not (window-minibuffer-p)) (fbound=
p (quote fit-frame)) Info-fit-frame-flag) (fit-frame)))
* (unwind-protect (let ((case-fold-search t) (virtual-fun (and (fboundp (qu=
ote Info-virtual-fun)) (Info-virtual-fun (quote find-node) (or filename Inf=
o-current-file) nodename))) anchorpos) (cond ((functionp virtual-fun) (let =
((filename (or filename Info-current-file))) (setq buffer-read-only nil Inf=
o-current-file filename Info-current-subfile nil Info-current-file-completi=
ons nil buffer-file-name nil) (erase-buffer) (Info-virtual-call virtual-fun=
 filename nodename no-going-back) (set-marker Info-tag-table-marker nil) (s=
etq buffer-read-only t) (set-buffer-modified-p nil) (set (make-local-variab=
le (quote Info-current-node-virtual)) t))) ((not (and (or (not ...) (not In=
fo-current-node-virtual)) (or (null filename) (equal Info-current-file file=
name)))) (let ((inhibit-read-only t)) (when (and (boundp ...) Info-current-=
node-virtual) (set (make-local-variable ...) nil) (unless filename (setq fi=
lename Info-current-file))) (setq Info-current-file nil Info-current-subfil=
e nil Info-current-file-completions nil buffer-file-name nil) (erase-buffer=
) (cond ((eq filename t) (Info-insert-dir nomsg)) ((eq filename ...) (inser=
t-buffer-substring " *info-apropos*")) ((eq filename ...) (insert-buffer-su=
bstring " *info-history*")) ((eq filename ...) (insert-buffer-substring " *=
info-toc*")) (t (info-insert-file-contents filename nil) (setq default-dire=
ctory ...))) (set-buffer-modified-p nil) (set (make-local-variable (quote I=
nfo-file-supports-index-cookies)) (Info-file-supports-index-cookies filenam=
e)) (goto-char (point-max)) (forward-line -8) (if (not (or ... ...)) (let (=
pos) (search-backward "\nTag table:\n") (setq pos ...) (if ... ... ...)) (s=
et-marker Info-tag-table-marker nil)) (setq Info-current-file filename)))) =
(if (string-equal nodename "*") (progn (setq Info-current-node nodename) (I=
nfo-set-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\=
\|Ref:\\) *\\(" (if ... ... "") "\\) *[, \n\x7f]"))) (catch (quote foo) (when =
(marker-position Info-tag-table-marker) (let* (... ...) (when found ... ...=
 ...))) (goto-char (max (point-min) (- ... 1000))) (let ((pos ...)) (when p=
os (goto-char pos) (throw ... t))) (when (string-match "\\([^.]+\\)\\." nod=
ename) (let (Info-point-loc) (Info-find-node-2 filename ... no-going-back n=
omsg)) (widen) (throw (quote foo) t)) (error "No such node or anchor: %s" n=
odename)) (Info-select-node) (goto-char (point-min)) (forward-line 1) (when=
 (and (not (fboundp ...)) Info-breadcrumbs-in-header-flag (> Info-breadcrum=
bs-depth 0)) (forward-line 1)) (cond (anchorpos (let (...) (setq Info-histo=
ry-list ...)) (goto-char anchorpos)) ((numberp Info-point-loc) (forward-lin=
e (- Info-point-loc 2)) (setq Info-point-loc nil)) ((stringp Info-point-loc=
) (Info-find-index-name Info-point-loc) (setq Info-point-loc nil))))) (when=
 (and (one-window-p t) (not (window-minibuffer-p)) (fboundp (quote fit-fram=
e)) Info-fit-frame-flag) (fit-frame))) (or Info-current-node no-going-back =
(null Info-history) (let ((hist (car Info-history))) (setq Info-history (cd=
r Info-history)) (Info-find-node (nth 0 hist) (nth 1 hist) t nomsg) (goto-c=
har (nth 2 hist)))))
  Info-find-node-2("c:/Emacs-24-2012-07-16/info/emacs" "Top" t nil)
* Info-find-node("c:/Emacs-24-2012-07-16/info/emacs" "Top" t nil)
  (let ((hist (car Info-history))) (setq Info-history (cdr Info-history)) (=
Info-find-node (nth 0 hist) (nth 1 hist) t nomsg) (goto-char (nth 2 hist)))
* (or Info-current-node no-going-back (null Info-history) (let ((hist (car =
Info-history))) (setq Info-history (cdr Info-history)) (Info-find-node (nth=
 0 hist) (nth 1 hist) t nomsg) (goto-char (nth 2 hist))))
* signal(error ("No such node or anchor: Index for `ibuffer'"))
* error("No such node or anchor: %s" "Index for `ibuffer'")
* (catch (quote foo) (when (marker-position Info-tag-table-marker) (let* ((=
m Info-tag-table-marker) (found (Info-find-in-tag-table m regexp))) (when f=
ound (setq guesspos (nth 1 found)) (unless (eq (nth 2 found) (quote Info-mo=
de)) (setq guesspos (Info-read-subfile guesspos))) (when (nth 0 found) (got=
o-char (setq anchorpos guesspos)) (throw (quote foo) t))))) (goto-char (max=
 (point-min) (- (byte-to-position guesspos) 1000))) (let ((pos (Info-find-n=
ode-in-buffer regexp))) (when pos (goto-char pos) (throw (quote foo) t))) (=
when (string-match "\\([^.]+\\)\\." nodename) (let (Info-point-loc) (Info-f=
ind-node-2 filename (match-string 1 nodename) no-going-back nomsg)) (widen)=
 (throw (quote foo) t)) (error "No such node or anchor: %s" nodename))
* (let ((guesspos (point-min)) (regexp (concat "\\(Node:\\|Ref:\\) *\\(" (i=
f (stringp nodename) (regexp-quote nodename) "") "\\) *[, \n\x7f]"))) (catch (=
quote foo) (when (marker-position Info-tag-table-marker) (let* ((m Info-tag=
-table-marker) (found (Info-find-in-tag-table m regexp))) (when found (setq=
 guesspos (nth 1 found)) (unless (eq (nth 2 found) (quote Info-mode)) (setq=
 guesspos (Info-read-subfile guesspos))) (when (nth 0 found) (goto-char (se=
tq anchorpos guesspos)) (throw (quote foo) t))))) (goto-char (max (point-mi=
n) (- (byte-to-position guesspos) 1000))) (let ((pos (Info-find-node-in-buf=
fer regexp))) (when pos (goto-char pos) (throw (quote foo) t))) (when (stri=
ng-match "\\([^.]+\\)\\." nodename) (let (Info-point-loc) (Info-find-node-2=
 filename (match-string 1 nodename) no-going-back nomsg)) (widen) (throw (q=
uote foo) t)) (error "No such node or anchor: %s" nodename)) (Info-select-n=
ode) (goto-char (point-min)) (forward-line 1) (when (and (not (fboundp (quo=
te Info-breadcrumbs))) Info-breadcrumbs-in-header-flag (> Info-breadcrumbs-=
depth 0)) (forward-line 1)) (cond (anchorpos (let ((new-history (list Info-=
current-file (substring-no-properties nodename)))) (setq Info-history-list =
(cons new-history (delete new-history Info-history-list)))) (goto-char anch=
orpos)) ((numberp Info-point-loc) (forward-line (- Info-point-loc 2)) (setq=
 Info-point-loc nil)) ((stringp Info-point-loc) (Info-find-index-name Info-=
point-loc) (setq Info-point-loc nil))))
* (if (string-equal nodename "*") (progn (setq Info-current-node nodename) =
(Info-set-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node=
:\\|Ref:\\) *\\(" (if (stringp nodename) (regexp-quote nodename) "") "\\) *=
[, \n\x7f]"))) (catch (quote foo) (when (marker-position Info-tag-table-marker=
) (let* ((m Info-tag-table-marker) (found (Info-find-in-tag-table m regexp)=
)) (when found (setq guesspos (nth 1 found)) (unless (eq ... ...) (setq gue=
sspos ...)) (when (nth 0 found) (goto-char ...) (throw ... t))))) (goto-cha=
r (max (point-min) (- (byte-to-position guesspos) 1000))) (let ((pos (Info-=
find-node-in-buffer regexp))) (when pos (goto-char pos) (throw (quote foo) =
t))) (when (string-match "\\([^.]+\\)\\." nodename) (let (Info-point-loc) (=
Info-find-node-2 filename (match-string 1 nodename) no-going-back nomsg)) (=
widen) (throw (quote foo) t)) (error "No such node or anchor: %s" nodename)=
) (Info-select-node) (goto-char (point-min)) (forward-line 1) (when (and (n=
ot (fboundp (quote Info-breadcrumbs))) Info-breadcrumbs-in-header-flag (> I=
nfo-breadcrumbs-depth 0)) (forward-line 1)) (cond (anchorpos (let ((new-his=
tory (list Info-current-file ...))) (setq Info-history-list (cons new-histo=
ry (delete new-history Info-history-list)))) (goto-char anchorpos)) ((numbe=
rp Info-point-loc) (forward-line (- Info-point-loc 2)) (setq Info-point-loc=
 nil)) ((stringp Info-point-loc) (Info-find-index-name Info-point-loc) (set=
q Info-point-loc nil)))))
* (let ((case-fold-search t) (virtual-fun (and (fboundp (quote Info-virtual=
-fun)) (Info-virtual-fun (quote find-node) (or filename Info-current-file) =
nodename))) anchorpos) (cond ((functionp virtual-fun) (let ((filename (or f=
ilename Info-current-file))) (setq buffer-read-only nil Info-current-file f=
ilename Info-current-subfile nil Info-current-file-completions nil buffer-f=
ile-name nil) (erase-buffer) (Info-virtual-call virtual-fun filename nodena=
me no-going-back) (set-marker Info-tag-table-marker nil) (setq buffer-read-=
only t) (set-buffer-modified-p nil) (set (make-local-variable (quote Info-c=
urrent-node-virtual)) t))) ((not (and (or (not (boundp ...)) (not Info-curr=
ent-node-virtual)) (or (null filename) (equal Info-current-file filename)))=
) (let ((inhibit-read-only t)) (when (and (boundp (quote Info-current-node-=
virtual)) Info-current-node-virtual) (set (make-local-variable (quote Info-=
current-node-virtual)) nil) (unless filename (setq filename Info-current-fi=
le))) (setq Info-current-file nil Info-current-subfile nil Info-current-fil=
e-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq filename =
t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert-buffer-s=
ubstring " *info-apropos*")) ((eq filename (quote history)) (insert-buffer-=
substring " *info-history*")) ((eq filename (quote toc)) (insert-buffer-sub=
string " *info-toc*")) (t (info-insert-file-contents filename nil) (setq de=
fault-directory (file-name-directory filename)))) (set-buffer-modified-p ni=
l) (set (make-local-variable (quote Info-file-supports-index-cookies)) (Inf=
o-file-supports-index-cookies filename)) (goto-char (point-max)) (forward-l=
ine -8) (if (not (or (string-equal nodename "*") (not ...))) (let (pos) (se=
arch-backward "\nTag table:\n") (setq pos (point)) (if (save-excursion ... =
...) (let ... ... ... ...) (set-marker Info-tag-table-marker pos))) (set-ma=
rker Info-tag-table-marker nil)) (setq Info-current-file filename)))) (if (=
string-equal nodename "*") (progn (setq Info-current-node nodename) (Info-s=
et-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\\|Ref=
:\\) *\\(" (if (stringp nodename) (regexp-quote nodename) "") "\\) *[, \n\x7f]=
"))) (catch (quote foo) (when (marker-position Info-tag-table-marker) (let*=
 ((m Info-tag-table-marker) (found ...)) (when found (setq guesspos ...) (u=
nless ... ...) (when ... ... ...)))) (goto-char (max (point-min) (- (byte-t=
o-position guesspos) 1000))) (let ((pos (Info-find-node-in-buffer regexp)))=
 (when pos (goto-char pos) (throw (quote foo) t))) (when (string-match "\\(=
[^.]+\\)\\." nodename) (let (Info-point-loc) (Info-find-node-2 filename (ma=
tch-string 1 nodename) no-going-back nomsg)) (widen) (throw (quote foo) t))=
 (error "No such node or anchor: %s" nodename)) (Info-select-node) (goto-ch=
ar (point-min)) (forward-line 1) (when (and (not (fboundp (quote Info-bread=
crumbs))) Info-breadcrumbs-in-header-flag (> Info-breadcrumbs-depth 0)) (fo=
rward-line 1)) (cond (anchorpos (let ((new-history ...)) (setq Info-history=
-list (cons new-history ...))) (goto-char anchorpos)) ((numberp Info-point-=
loc) (forward-line (- Info-point-loc 2)) (setq Info-point-loc nil)) ((strin=
gp Info-point-loc) (Info-find-index-name Info-point-loc) (setq Info-point-l=
oc nil))))) (when (and (one-window-p t) (not (window-minibuffer-p)) (fbound=
p (quote fit-frame)) Info-fit-frame-flag) (fit-frame)))
* (unwind-protect (let ((case-fold-search t) (virtual-fun (and (fboundp (qu=
ote Info-virtual-fun)) (Info-virtual-fun (quote find-node) (or filename Inf=
o-current-file) nodename))) anchorpos) (cond ((functionp virtual-fun) (let =
((filename (or filename Info-current-file))) (setq buffer-read-only nil Inf=
o-current-file filename Info-current-subfile nil Info-current-file-completi=
ons nil buffer-file-name nil) (erase-buffer) (Info-virtual-call virtual-fun=
 filename nodename no-going-back) (set-marker Info-tag-table-marker nil) (s=
etq buffer-read-only t) (set-buffer-modified-p nil) (set (make-local-variab=
le (quote Info-current-node-virtual)) t))) ((not (and (or (not ...) (not In=
fo-current-node-virtual)) (or (null filename) (equal Info-current-file file=
name)))) (let ((inhibit-read-only t)) (when (and (boundp ...) Info-current-=
node-virtual) (set (make-local-variable ...) nil) (unless filename (setq fi=
lename Info-current-file))) (setq Info-current-file nil Info-current-subfil=
e nil Info-current-file-completions nil buffer-file-name nil) (erase-buffer=
) (cond ((eq filename t) (Info-insert-dir nomsg)) ((eq filename ...) (inser=
t-buffer-substring " *info-apropos*")) ((eq filename ...) (insert-buffer-su=
bstring " *info-history*")) ((eq filename ...) (insert-buffer-substring " *=
info-toc*")) (t (info-insert-file-contents filename nil) (setq default-dire=
ctory ...))) (set-buffer-modified-p nil) (set (make-local-variable (quote I=
nfo-file-supports-index-cookies)) (Info-file-supports-index-cookies filenam=
e)) (goto-char (point-max)) (forward-line -8) (if (not (or ... ...)) (let (=
pos) (search-backward "\nTag table:\n") (setq pos ...) (if ... ... ...)) (s=
et-marker Info-tag-table-marker nil)) (setq Info-current-file filename)))) =
(if (string-equal nodename "*") (progn (setq Info-current-node nodename) (I=
nfo-set-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\=
\|Ref:\\) *\\(" (if ... ... "") "\\) *[, \n\x7f]"))) (catch (quote foo) (when =
(marker-position Info-tag-table-marker) (let* (... ...) (when found ... ...=
 ...))) (goto-char (max (point-min) (- ... 1000))) (let ((pos ...)) (when p=
os (goto-char pos) (throw ... t))) (when (string-match "\\([^.]+\\)\\." nod=
ename) (let (Info-point-loc) (Info-find-node-2 filename ... no-going-back n=
omsg)) (widen) (throw (quote foo) t)) (error "No such node or anchor: %s" n=
odename)) (Info-select-node) (goto-char (point-min)) (forward-line 1) (when=
 (and (not (fboundp ...)) Info-breadcrumbs-in-header-flag (> Info-breadcrum=
bs-depth 0)) (forward-line 1)) (cond (anchorpos (let (...) (setq Info-histo=
ry-list ...)) (goto-char anchorpos)) ((numberp Info-point-loc) (forward-lin=
e (- Info-point-loc 2)) (setq Info-point-loc nil)) ((stringp Info-point-loc=
) (Info-find-index-name Info-point-loc) (setq Info-point-loc nil))))) (when=
 (and (one-window-p t) (not (window-minibuffer-p)) (fboundp (quote fit-fram=
e)) Info-fit-frame-flag) (fit-frame))) (or Info-current-node no-going-back =
(null Info-history) (let ((hist (car Info-history))) (setq Info-history (cd=
r Info-history)) (Info-find-node (nth 0 hist) (nth 1 hist) t nomsg) (goto-c=
har (nth 2 hist)))))
  Info-find-node-2("*Indexed*" "Index for `ibuffer'" nil nil)
* Info-find-node("*Indexed*" "Index for `ibuffer'")
  Info-index-entries-across-manuals("ibuffer" ("emacs" "elisp") nil)
 

-----------------------------------------------------------------
Emacs 24.1:
 
Debugger entered--returning value: t
  info-file-exists-p("c:/Emacs-24.1/info/emacs")
* info-insert-file-contents("c:/Emacs-24.1/info/emacs" nil)
* (cond ((eq filename t) (Info-insert-dir nomsg)) ((eq filename (quote apro=
pos)) (insert-buffer-substring " *info-apropos*")) ((eq filename (quote his=
tory)) (insert-buffer-substring " *info-history*")) ((eq filename (quote to=
c)) (insert-buffer-substring " *info-toc*")) (t (info-insert-file-contents =
filename nil) (setq default-directory (file-name-directory filename))))
* (let ((inhibit-read-only t)) (when (and (boundp (quote Info-current-node-=
virtual)) Info-current-node-virtual) (set (make-local-variable (quote Info-=
current-node-virtual)) nil) (unless filename (setq filename Info-current-fi=
le))) (setq Info-current-file nil Info-current-subfile nil Info-current-fil=
e-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq filename =
t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert-buffer-s=
ubstring " *info-apropos*")) ((eq filename (quote history)) (insert-buffer-=
substring " *info-history*")) ((eq filename (quote toc)) (insert-buffer-sub=
string " *info-toc*")) (t (info-insert-file-contents filename nil) (setq de=
fault-directory (file-name-directory filename)))) (set-buffer-modified-p ni=
l) (set (make-local-variable (quote Info-file-supports-index-cookies)) (Inf=
o-file-supports-index-cookies filename)) (goto-char (point-max)) (forward-l=
ine -8) (if (not (or (string-equal nodename "*") (not (search-forward "=1F\=
nEnd tag table\n" nil t)))) (let (pos) (search-backward "\nTag table:\n") (=
setq pos (point)) (if (save-excursion (forward-line 2) (looking-at "(Indire=
ct)\n")) (let ((buf (current-buffer)) (tagbuf (or Info-tag-table-buffer ...=
))) (setq Info-tag-table-buffer tagbuf) (with-current-buffer tagbuf (buffer=
-disable-undo (current-buffer)) (setq case-fold-search t) (erase-buffer) (i=
nsert-buffer-substring buf)) (set-marker Info-tag-table-marker (match-end 0=
) tagbuf)) (set-marker Info-tag-table-marker pos))) (set-marker Info-tag-ta=
ble-marker nil)) (setq Info-current-file filename))
* (cond ((functionp virtual-fun) (let ((filename (or filename Info-current-=
file))) (setq buffer-read-only nil Info-current-file filename Info-current-=
subfile nil Info-current-file-completions nil buffer-file-name nil) (erase-=
buffer) (Info-virtual-call virtual-fun filename nodename no-going-back) (se=
t-marker Info-tag-table-marker nil) (setq buffer-read-only t) (set-buffer-m=
odified-p nil) (set (make-local-variable (quote Info-current-node-virtual))=
 t))) ((not (and (or (not (boundp (quote Info-current-node-virtual))) (not =
Info-current-node-virtual)) (or (null filename) (equal Info-current-file fi=
lename)))) (let ((inhibit-read-only t)) (when (and (boundp (quote Info-curr=
ent-node-virtual)) Info-current-node-virtual) (set (make-local-variable (qu=
ote Info-current-node-virtual)) nil) (unless filename (setq filename Info-c=
urrent-file))) (setq Info-current-file nil Info-current-subfile nil Info-cu=
rrent-file-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq =
filename t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert=
-buffer-substring " *info-apropos*")) ((eq filename (quote history)) (inser=
t-buffer-substring " *info-history*")) ((eq filename (quote toc)) (insert-b=
uffer-substring " *info-toc*")) (t (info-insert-file-contents filename nil)=
 (setq default-directory (file-name-directory filename)))) (set-buffer-modi=
fied-p nil) (set (make-local-variable (quote Info-file-supports-index-cooki=
es)) (Info-file-supports-index-cookies filename)) (goto-char (point-max)) (=
forward-line -8) (if (not (or (string-equal nodename "*") (not (search-forw=
ard "=1F\nEnd tag table\n" nil t)))) (let (pos) (search-backward "\nTag tab=
le:\n") (setq pos (point)) (if (save-excursion (forward-line 2) (looking-at=
 "(Indirect)\n")) (let (... ...) (setq Info-tag-table-buffer tagbuf) (with-=
current-buffer tagbuf ... ... ... ...) (set-marker Info-tag-table-marker ..=
. tagbuf)) (set-marker Info-tag-table-marker pos))) (set-marker Info-tag-ta=
ble-marker nil)) (setq Info-current-file filename))))
* (let ((case-fold-search t) (virtual-fun (and (fboundp (quote Info-virtual=
-fun)) (Info-virtual-fun (quote find-node) (or filename Info-current-file) =
nodename))) anchorpos) (cond ((functionp virtual-fun) (let ((filename (or f=
ilename Info-current-file))) (setq buffer-read-only nil Info-current-file f=
ilename Info-current-subfile nil Info-current-file-completions nil buffer-f=
ile-name nil) (erase-buffer) (Info-virtual-call virtual-fun filename nodena=
me no-going-back) (set-marker Info-tag-table-marker nil) (setq buffer-read-=
only t) (set-buffer-modified-p nil) (set (make-local-variable (quote Info-c=
urrent-node-virtual)) t))) ((not (and (or (not (boundp ...)) (not Info-curr=
ent-node-virtual)) (or (null filename) (equal Info-current-file filename)))=
) (let ((inhibit-read-only t)) (when (and (boundp (quote Info-current-node-=
virtual)) Info-current-node-virtual) (set (make-local-variable (quote Info-=
current-node-virtual)) nil) (unless filename (setq filename Info-current-fi=
le))) (setq Info-current-file nil Info-current-subfile nil Info-current-fil=
e-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq filename =
t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert-buffer-s=
ubstring " *info-apropos*")) ((eq filename (quote history)) (insert-buffer-=
substring " *info-history*")) ((eq filename (quote toc)) (insert-buffer-sub=
string " *info-toc*")) (t (info-insert-file-contents filename nil) (setq de=
fault-directory (file-name-directory filename)))) (set-buffer-modified-p ni=
l) (set (make-local-variable (quote Info-file-supports-index-cookies)) (Inf=
o-file-supports-index-cookies filename)) (goto-char (point-max)) (forward-l=
ine -8) (if (not (or (string-equal nodename "*") (not ...))) (let (pos) (se=
arch-backward "\nTag table:\n") (setq pos (point)) (if (save-excursion ... =
...) (let ... ... ... ...) (set-marker Info-tag-table-marker pos))) (set-ma=
rker Info-tag-table-marker nil)) (setq Info-current-file filename)))) (if (=
string-equal nodename "*") (progn (setq Info-current-node nodename) (Info-s=
et-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\\|Ref=
:\\) *\\(" (if (stringp nodename) (regexp-quote nodename) "") "\\) *[, \n\x7f]=
"))) (catch (quote foo) (when (marker-position Info-tag-table-marker) (let*=
 ((m Info-tag-table-marker) (found ...)) (when found (setq guesspos ...) (u=
nless ... ...) (when ... ... ...)))) (goto-char (max (point-min) (- (byte-t=
o-position guesspos) 1000))) (let ((pos (Info-find-node-in-buffer regexp)))=
 (when pos (goto-char pos) (throw (quote foo) t))) (when (string-match "\\(=
[^.]+\\)\\." nodename) (let (Info-point-loc) (Info-find-node-2 filename (ma=
tch-string 1 nodename) no-going-back nomsg)) (widen) (throw (quote foo) t))=
 (error "No such node or anchor: %s" nodename)) (Info-select-node) (goto-ch=
ar (point-min)) (forward-line 1) (when (and (not (fboundp (quote Info-bread=
crumbs))) Info-breadcrumbs-in-header-flag (> Info-breadcrumbs-depth 0)) (fo=
rward-line 1)) (cond (anchorpos (let ((new-history ...)) (setq Info-history=
-list (cons new-history ...))) (goto-char anchorpos)) ((numberp Info-point-=
loc) (forward-line (- Info-point-loc 2)) (setq Info-point-loc nil)) ((strin=
gp Info-point-loc) (Info-find-index-name Info-point-loc) (setq Info-point-l=
oc nil))))) (when (and (one-window-p t) (not (window-minibuffer-p)) (fbound=
p (quote fit-frame)) Info-fit-frame-flag) (fit-frame)))
* (unwind-protect (let ((case-fold-search t) (virtual-fun (and (fboundp (qu=
ote Info-virtual-fun)) (Info-virtual-fun (quote find-node) (or filename Inf=
o-current-file) nodename))) anchorpos) (cond ((functionp virtual-fun) (let =
((filename (or filename Info-current-file))) (setq buffer-read-only nil Inf=
o-current-file filename Info-current-subfile nil Info-current-file-completi=
ons nil buffer-file-name nil) (erase-buffer) (Info-virtual-call virtual-fun=
 filename nodename no-going-back) (set-marker Info-tag-table-marker nil) (s=
etq buffer-read-only t) (set-buffer-modified-p nil) (set (make-local-variab=
le (quote Info-current-node-virtual)) t))) ((not (and (or (not ...) (not In=
fo-current-node-virtual)) (or (null filename) (equal Info-current-file file=
name)))) (let ((inhibit-read-only t)) (when (and (boundp ...) Info-current-=
node-virtual) (set (make-local-variable ...) nil) (unless filename (setq fi=
lename Info-current-file))) (setq Info-current-file nil Info-current-subfil=
e nil Info-current-file-completions nil buffer-file-name nil) (erase-buffer=
) (cond ((eq filename t) (Info-insert-dir nomsg)) ((eq filename ...) (inser=
t-buffer-substring " *info-apropos*")) ((eq filename ...) (insert-buffer-su=
bstring " *info-history*")) ((eq filename ...) (insert-buffer-substring " *=
info-toc*")) (t (info-insert-file-contents filename nil) (setq default-dire=
ctory ...))) (set-buffer-modified-p nil) (set (make-local-variable (quote I=
nfo-file-supports-index-cookies)) (Info-file-supports-index-cookies filenam=
e)) (goto-char (point-max)) (forward-line -8) (if (not (or ... ...)) (let (=
pos) (search-backward "\nTag table:\n") (setq pos ...) (if ... ... ...)) (s=
et-marker Info-tag-table-marker nil)) (setq Info-current-file filename)))) =
(if (string-equal nodename "*") (progn (setq Info-current-node nodename) (I=
nfo-set-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\=
\|Ref:\\) *\\(" (if ... ... "") "\\) *[, \n\x7f]"))) (catch (quote foo) (when =
(marker-position Info-tag-table-marker) (let* (... ...) (when found ... ...=
 ...))) (goto-char (max (point-min) (- ... 1000))) (let ((pos ...)) (when p=
os (goto-char pos) (throw ... t))) (when (string-match "\\([^.]+\\)\\." nod=
ename) (let (Info-point-loc) (Info-find-node-2 filename ... no-going-back n=
omsg)) (widen) (throw (quote foo) t)) (error "No such node or anchor: %s" n=
odename)) (Info-select-node) (goto-char (point-min)) (forward-line 1) (when=
 (and (not (fboundp ...)) Info-breadcrumbs-in-header-flag (> Info-breadcrum=
bs-depth 0)) (forward-line 1)) (cond (anchorpos (let (...) (setq Info-histo=
ry-list ...)) (goto-char anchorpos)) ((numberp Info-point-loc) (forward-lin=
e (- Info-point-loc 2)) (setq Info-point-loc nil)) ((stringp Info-point-loc=
) (Info-find-index-name Info-point-loc) (setq Info-point-loc nil))))) (when=
 (and (one-window-p t) (not (window-minibuffer-p)) (fboundp (quote fit-fram=
e)) Info-fit-frame-flag) (fit-frame))) (or Info-current-node no-going-back =
(null Info-history) (let ((hist (car Info-history))) (setq Info-history (cd=
r Info-history)) (Info-find-node (nth 0 hist) (nth 1 hist) t nomsg) (goto-c=
har (nth 2 hist)))))
  Info-find-node-2("c:/Emacs-24.1/info/emacs" "Top" t nil)
* Info-find-node("c:/Emacs-24.1/info/emacs" "Top" t nil)
  (let ((hist (car Info-history))) (setq Info-history (cdr Info-history)) (=
Info-find-node (nth 0 hist) (nth 1 hist) t nomsg) (goto-char (nth 2 hist)))
  (or Info-current-node no-going-back (null Info-history) (let ((hist (car =
Info-history))) (setq Info-history (cdr Info-history)) (Info-find-node (nth=
 0 hist) (nth 1 hist) t nomsg) (goto-char (nth 2 hist))))
* signal(error ("No such node or anchor: Index for `ibuffer'"))
* error("No such node or anchor: %s" "Index for `ibuffer'")
* (catch (quote foo) (when (marker-position Info-tag-table-marker) (let* ((=
m Info-tag-table-marker) (found (Info-find-in-tag-table m regexp))) (when f=
ound (setq guesspos (nth 1 found)) (unless (eq (nth 2 found) (quote Info-mo=
de)) (setq guesspos (Info-read-subfile guesspos))) (when (nth 0 found) (got=
o-char (setq anchorpos guesspos)) (throw (quote foo) t))))) (goto-char (max=
 (point-min) (- (byte-to-position guesspos) 1000))) (let ((pos (Info-find-n=
ode-in-buffer regexp))) (when pos (goto-char pos) (throw (quote foo) t))) (=
when (string-match "\\([^.]+\\)\\." nodename) (let (Info-point-loc) (Info-f=
ind-node-2 filename (match-string 1 nodename) no-going-back nomsg)) (widen)=
 (throw (quote foo) t)) (error "No such node or anchor: %s" nodename))
* (let ((guesspos (point-min)) (regexp (concat "\\(Node:\\|Ref:\\) *\\(" (i=
f (stringp nodename) (regexp-quote nodename) "") "\\) *[, \n\x7f]"))) (catch (=
quote foo) (when (marker-position Info-tag-table-marker) (let* ((m Info-tag=
-table-marker) (found (Info-find-in-tag-table m regexp))) (when found (setq=
 guesspos (nth 1 found)) (unless (eq (nth 2 found) (quote Info-mode)) (setq=
 guesspos (Info-read-subfile guesspos))) (when (nth 0 found) (goto-char (se=
tq anchorpos guesspos)) (throw (quote foo) t))))) (goto-char (max (point-mi=
n) (- (byte-to-position guesspos) 1000))) (let ((pos (Info-find-node-in-buf=
fer regexp))) (when pos (goto-char pos) (throw (quote foo) t))) (when (stri=
ng-match "\\([^.]+\\)\\." nodename) (let (Info-point-loc) (Info-find-node-2=
 filename (match-string 1 nodename) no-going-back nomsg)) (widen) (throw (q=
uote foo) t)) (error "No such node or anchor: %s" nodename)) (Info-select-n=
ode) (goto-char (point-min)) (forward-line 1) (when (and (not (fboundp (quo=
te Info-breadcrumbs))) Info-breadcrumbs-in-header-flag (> Info-breadcrumbs-=
depth 0)) (forward-line 1)) (cond (anchorpos (let ((new-history (list Info-=
current-file (substring-no-properties nodename)))) (setq Info-history-list =
(cons new-history (delete new-history Info-history-list)))) (goto-char anch=
orpos)) ((numberp Info-point-loc) (forward-line (- Info-point-loc 2)) (setq=
 Info-point-loc nil)) ((stringp Info-point-loc) (Info-find-index-name Info-=
point-loc) (setq Info-point-loc nil))))
* (if (string-equal nodename "*") (progn (setq Info-current-node nodename) =
(Info-set-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node=
:\\|Ref:\\) *\\(" (if (stringp nodename) (regexp-quote nodename) "") "\\) *=
[, \n\x7f]"))) (catch (quote foo) (when (marker-position Info-tag-table-marker=
) (let* ((m Info-tag-table-marker) (found (Info-find-in-tag-table m regexp)=
)) (when found (setq guesspos (nth 1 found)) (unless (eq ... ...) (setq gue=
sspos ...)) (when (nth 0 found) (goto-char ...) (throw ... t))))) (goto-cha=
r (max (point-min) (- (byte-to-position guesspos) 1000))) (let ((pos (Info-=
find-node-in-buffer regexp))) (when pos (goto-char pos) (throw (quote foo) =
t))) (when (string-match "\\([^.]+\\)\\." nodename) (let (Info-point-loc) (=
Info-find-node-2 filename (match-string 1 nodename) no-going-back nomsg)) (=
widen) (throw (quote foo) t)) (error "No such node or anchor: %s" nodename)=
) (Info-select-node) (goto-char (point-min)) (forward-line 1) (when (and (n=
ot (fboundp (quote Info-breadcrumbs))) Info-breadcrumbs-in-header-flag (> I=
nfo-breadcrumbs-depth 0)) (forward-line 1)) (cond (anchorpos (let ((new-his=
tory (list Info-current-file ...))) (setq Info-history-list (cons new-histo=
ry (delete new-history Info-history-list)))) (goto-char anchorpos)) ((numbe=
rp Info-point-loc) (forward-line (- Info-point-loc 2)) (setq Info-point-loc=
 nil)) ((stringp Info-point-loc) (Info-find-index-name Info-point-loc) (set=
q Info-point-loc nil)))))
* (let ((case-fold-search t) (virtual-fun (and (fboundp (quote Info-virtual=
-fun)) (Info-virtual-fun (quote find-node) (or filename Info-current-file) =
nodename))) anchorpos) (cond ((functionp virtual-fun) (let ((filename (or f=
ilename Info-current-file))) (setq buffer-read-only nil Info-current-file f=
ilename Info-current-subfile nil Info-current-file-completions nil buffer-f=
ile-name nil) (erase-buffer) (Info-virtual-call virtual-fun filename nodena=
me no-going-back) (set-marker Info-tag-table-marker nil) (setq buffer-read-=
only t) (set-buffer-modified-p nil) (set (make-local-variable (quote Info-c=
urrent-node-virtual)) t))) ((not (and (or (not (boundp ...)) (not Info-curr=
ent-node-virtual)) (or (null filename) (equal Info-current-file filename)))=
) (let ((inhibit-read-only t)) (when (and (boundp (quote Info-current-node-=
virtual)) Info-current-node-virtual) (set (make-local-variable (quote Info-=
current-node-virtual)) nil) (unless filename (setq filename Info-current-fi=
le))) (setq Info-current-file nil Info-current-subfile nil Info-current-fil=
e-completions nil buffer-file-name nil) (erase-buffer) (cond ((eq filename =
t) (Info-insert-dir nomsg)) ((eq filename (quote apropos)) (insert-buffer-s=
ubstring " *info-apropos*")) ((eq filename (quote history)) (insert-buffer-=
substring " *info-history*")) ((eq filename (quote toc)) (insert-buffer-sub=
string " *info-toc*")) (t (info-insert-file-contents filename nil) (setq de=
fault-directory (file-name-directory filename)))) (set-buffer-modified-p ni=
l) (set (make-local-variable (quote Info-file-supports-index-cookies)) (Inf=
o-file-supports-index-cookies filename)) (goto-char (point-max)) (forward-l=
ine -8) (if (not (or (string-equal nodename "*") (not ...))) (let (pos) (se=
arch-backward "\nTag table:\n") (setq pos (point)) (if (save-excursion ... =
...) (let ... ... ... ...) (set-marker Info-tag-table-marker pos))) (set-ma=
rker Info-tag-table-marker nil)) (setq Info-current-file filename)))) (if (=
string-equal nodename "*") (progn (setq Info-current-node nodename) (Info-s=
et-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\\|Ref=
:\\) *\\(" (if (stringp nodename) (regexp-quote nodename) "") "\\) *[, \n\x7f]=
"))) (catch (quote foo) (when (marker-position Info-tag-table-marker) (let*=
 ((m Info-tag-table-marker) (found ...)) (when found (setq guesspos ...) (u=
nless ... ...) (when ... ... ...)))) (goto-char (max (point-min) (- (byte-t=
o-position guesspos) 1000))) (let ((pos (Info-find-node-in-buffer regexp)))=
 (when pos (goto-char pos) (throw (quote foo) t))) (when (string-match "\\(=
[^.]+\\)\\." nodename) (let (Info-point-loc) (Info-find-node-2 filename (ma=
tch-string 1 nodename) no-going-back nomsg)) (widen) (throw (quote foo) t))=
 (error "No such node or anchor: %s" nodename)) (Info-select-node) (goto-ch=
ar (point-min)) (forward-line 1) (when (and (not (fboundp (quote Info-bread=
crumbs))) Info-breadcrumbs-in-header-flag (> Info-breadcrumbs-depth 0)) (fo=
rward-line 1)) (cond (anchorpos (let ((new-history ...)) (setq Info-history=
-list (cons new-history ...))) (goto-char anchorpos)) ((numberp Info-point-=
loc) (forward-line (- Info-point-loc 2)) (setq Info-point-loc nil)) ((strin=
gp Info-point-loc) (Info-find-index-name Info-point-loc) (setq Info-point-l=
oc nil))))) (when (and (one-window-p t) (not (window-minibuffer-p)) (fbound=
p (quote fit-frame)) Info-fit-frame-flag) (fit-frame)))
* (unwind-protect (let ((case-fold-search t) (virtual-fun (and (fboundp (qu=
ote Info-virtual-fun)) (Info-virtual-fun (quote find-node) (or filename Inf=
o-current-file) nodename))) anchorpos) (cond ((functionp virtual-fun) (let =
((filename (or filename Info-current-file))) (setq buffer-read-only nil Inf=
o-current-file filename Info-current-subfile nil Info-current-file-completi=
ons nil buffer-file-name nil) (erase-buffer) (Info-virtual-call virtual-fun=
 filename nodename no-going-back) (set-marker Info-tag-table-marker nil) (s=
etq buffer-read-only t) (set-buffer-modified-p nil) (set (make-local-variab=
le (quote Info-current-node-virtual)) t))) ((not (and (or (not ...) (not In=
fo-current-node-virtual)) (or (null filename) (equal Info-current-file file=
name)))) (let ((inhibit-read-only t)) (when (and (boundp ...) Info-current-=
node-virtual) (set (make-local-variable ...) nil) (unless filename (setq fi=
lename Info-current-file))) (setq Info-current-file nil Info-current-subfil=
e nil Info-current-file-completions nil buffer-file-name nil) (erase-buffer=
) (cond ((eq filename t) (Info-insert-dir nomsg)) ((eq filename ...) (inser=
t-buffer-substring " *info-apropos*")) ((eq filename ...) (insert-buffer-su=
bstring " *info-history*")) ((eq filename ...) (insert-buffer-substring " *=
info-toc*")) (t (info-insert-file-contents filename nil) (setq default-dire=
ctory ...))) (set-buffer-modified-p nil) (set (make-local-variable (quote I=
nfo-file-supports-index-cookies)) (Info-file-supports-index-cookies filenam=
e)) (goto-char (point-max)) (forward-line -8) (if (not (or ... ...)) (let (=
pos) (search-backward "\nTag table:\n") (setq pos ...) (if ... ... ...)) (s=
et-marker Info-tag-table-marker nil)) (setq Info-current-file filename)))) =
(if (string-equal nodename "*") (progn (setq Info-current-node nodename) (I=
nfo-set-mode-line)) (let ((guesspos (point-min)) (regexp (concat "\\(Node:\=
\|Ref:\\) *\\(" (if ... ... "") "\\) *[, \n\x7f]"))) (catch (quote foo) (when =
(marker-position Info-tag-table-marker) (let* (... ...) (when found ... ...=
 ...))) (goto-char (max (point-min) (- ... 1000))) (let ((pos ...)) (when p=
os (goto-char pos) (throw ... t))) (when (string-match "\\([^.]+\\)\\." nod=
ename) (let (Info-point-loc) (Info-find-node-2 filename ... no-going-back n=
omsg)) (widen) (throw (quote foo) t)) (error "No such node or anchor: %s" n=
odename)) (Info-select-node) (goto-char (point-min)) (forward-line 1) (when=
 (and (not (fboundp ...)) Info-breadcrumbs-in-header-flag (> Info-breadcrum=
bs-depth 0)) (forward-line 1)) (cond (anchorpos (let (...) (setq Info-histo=
ry-list ...)) (goto-char anchorpos)) ((numberp Info-point-loc) (forward-lin=
e (- Info-point-loc 2)) (setq Info-point-loc nil)) ((stringp Info-point-loc=
) (Info-find-index-name Info-point-loc) (setq Info-point-loc nil))))) (when=
 (and (one-window-p t) (not (window-minibuffer-p)) (fboundp (quote fit-fram=
e)) Info-fit-frame-flag) (fit-frame))) (or Info-current-node no-going-back =
(null Info-history) (let ((hist (car Info-history))) (setq Info-history (cd=
r Info-history)) (Info-find-node (nth 0 hist) (nth 1 hist) t nomsg) (goto-c=
har (nth 2 hist)))))
  Info-find-node-2("*Indexed*" "Index for `ibuffer'" nil nil)
* Info-find-node("*Indexed*" "Index for `ibuffer'")
  Info-index-entries-across-manuals("ibuffer" ("emacs" "elisp") nil)
 
-----------------------------------------------------------------
 
In GNU Emacs 24.1.50.1 (i386-mingw-nt5.1.2600)
 of 2012-07-16 on MARVIN
Bzr revision: 109106 fabian@anue.biz-20120716171839-0dv19ib9h6vfggfn
Windowing system distributor `Microsoft Corp.', version 5.1.2600
Configured using:
 `configure --with-gcc (4.6) --no-opt --enable-checking --cflags
 -ID:/devel/emacs/libs/libXpm-3.5.8/include
 -ID:/devel/emacs/libs/libXpm-3.5.8/src
 -ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include
 -ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include
 -ID:/devel/emacs/libs/giflib-4.1.4-1/include
 -ID:/devel/emacs/libs/jpeg-6b-4/include
 -ID:/devel/emacs/libs/tiff-3.8.2-1/include
 -ID:/devel/emacs/libs/gnutls-3.0.9/include
 -ID:/devel/emacs/libs/libiconv-1.13.1-1-dev/include
 -ID:/devel/emacs/libs/libxml2-2.7.8/include/libxml2'
 






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 16:13 bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2' Drew Adams
@ 2012-07-20 18:30 ` Andreas Schwab
  2012-07-20 18:45   ` Drew Adams
  0 siblings, 1 reply; 33+ messages in thread
From: Andreas Schwab @ 2012-07-20 18:30 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999

"Drew Adams" <drew.adams@oracle.com> writes:

> The code does exactly the same thing, step by step.  But when
> `info-insert-file-contents' is called in the 7/16 build it returns nil
> instead of t

info-insert-file-contents doesn't return a boolean (in fact it doesn't
return any useful value at all).

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 18:30 ` Andreas Schwab
@ 2012-07-20 18:45   ` Drew Adams
  2012-07-20 19:19     ` Andreas Schwab
  2012-07-20 20:43     ` Eli Zaretskii
  0 siblings, 2 replies; 33+ messages in thread
From: Drew Adams @ 2012-07-20 18:45 UTC (permalink / raw)
  To: 'Andreas Schwab'; +Cc: 11999

> > The code does exactly the same thing, step by step.  But when
> > `info-insert-file-contents' is called in the 7/16 build it 
> > returns nil instead of t
> 
> info-insert-file-contents doesn't return a boolean (in fact it doesn't
> return any useful value at all).

Look at the two backtraces.  Contrast their first lines.

It should be clear that I meant `info-file-exists-p', not
`info-insert-file-contents'.

This is the problem - there is no such file:

  info-file-exists-p("c:/Emacs-24-2012-07-16/info/emacs")






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 18:45   ` Drew Adams
@ 2012-07-20 19:19     ` Andreas Schwab
  2012-07-20 20:03       ` Drew Adams
  2012-07-20 20:43     ` Eli Zaretskii
  1 sibling, 1 reply; 33+ messages in thread
From: Andreas Schwab @ 2012-07-20 19:19 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999

"Drew Adams" <drew.adams@oracle.com> writes:

>> > The code does exactly the same thing, step by step.  But when
>> > `info-insert-file-contents' is called in the 7/16 build it 
>> > returns nil instead of t
>> 
>> info-insert-file-contents doesn't return a boolean (in fact it doesn't
>> return any useful value at all).
>
> Look at the two backtraces.  Contrast their first lines.
>
> It should be clear that I meant `info-file-exists-p', not
> `info-insert-file-contents'.

Neither of which makes sense in the context of the bug report, so I had
to take your description literally.

> This is the problem - there is no such file:
>
>   info-file-exists-p("c:/Emacs-24-2012-07-16/info/emacs")

Thus info-file-exists-p correctly returns nil.  What is the problem?

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 19:19     ` Andreas Schwab
@ 2012-07-20 20:03       ` Drew Adams
  2012-07-20 20:08         ` Andreas Schwab
  2012-07-20 20:47         ` Eli Zaretskii
  0 siblings, 2 replies; 33+ messages in thread
From: Drew Adams @ 2012-07-20 20:03 UTC (permalink / raw)
  To: 'Andreas Schwab'; +Cc: 11999

> > This is the problem - there is no such file:
> >   info-file-exists-p("c:/Emacs-24-2012-07-16/info/emacs")
> 
> Thus info-file-exists-p correctly returns nil.  What is the problem?

This Emacs code still expects the Emacs Info file to have no suffix - it does
not look for a file named with a suffix.

But Emacs Dev has changed the file names now so that they do have a suffix.
Emacs thus cannot find the Info files that Emacs Dev provides.






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 20:03       ` Drew Adams
@ 2012-07-20 20:08         ` Andreas Schwab
  2012-07-20 20:09           ` Drew Adams
  2012-07-20 20:47         ` Eli Zaretskii
  1 sibling, 1 reply; 33+ messages in thread
From: Andreas Schwab @ 2012-07-20 20:08 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999

"Drew Adams" <drew.adams@oracle.com> writes:

> This Emacs code still expects the Emacs Info file to have no suffix - it does
> not look for a file named with a suffix.

Why do you think so?

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 20:08         ` Andreas Schwab
@ 2012-07-20 20:09           ` Drew Adams
  2012-07-20 20:11             ` Andreas Schwab
  0 siblings, 1 reply; 33+ messages in thread
From: Drew Adams @ 2012-07-20 20:09 UTC (permalink / raw)
  To: 'Andreas Schwab'; +Cc: 11999

> > This Emacs code still expects the Emacs Info file to have 
> > no suffix - it does not look for a file named with a suffix.
> 
> Why do you think so?

Why do you ask?






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 20:09           ` Drew Adams
@ 2012-07-20 20:11             ` Andreas Schwab
  0 siblings, 0 replies; 33+ messages in thread
From: Andreas Schwab @ 2012-07-20 20:11 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999

"Drew Adams" <drew.adams@oracle.com> writes:

>> > This Emacs code still expects the Emacs Info file to have 
>> > no suffix - it does not look for a file named with a suffix.
>> 
>> Why do you think so?
>
> Why do you ask?

Because you failed to describe the problem.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 18:45   ` Drew Adams
  2012-07-20 19:19     ` Andreas Schwab
@ 2012-07-20 20:43     ` Eli Zaretskii
  2012-07-20 21:08       ` Drew Adams
  1 sibling, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-20 20:43 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999, schwab

> From: "Drew Adams" <drew.adams@oracle.com>
> Date: Fri, 20 Jul 2012 11:45:33 -0700
> Cc: 11999@debbugs.gnu.org
> 
> > > The code does exactly the same thing, step by step.  But when
> > > `info-insert-file-contents' is called in the 7/16 build it 
> > > returns nil instead of t
> > 
> > info-insert-file-contents doesn't return a boolean (in fact it doesn't
> > return any useful value at all).
> 
> Look at the two backtraces.  Contrast their first lines.
> 
> It should be clear that I meant `info-file-exists-p', not
> `info-insert-file-contents'.
> 
> This is the problem - there is no such file:
> 
>   info-file-exists-p("c:/Emacs-24-2012-07-16/info/emacs")

You will need to explain more, because info-insert-file-contents first
tests for the argument FILENAME, and if that does not exist, it tries
FILENAME with every extension in Info-suffix-list, which includes
".info".

In particular, this works for me on MS-Windows:

  M-: (info-insert-file-contents "d:/path/to/emacs/info/emacs") RET

and loads emacs.info.  Why doesn't it work for you?





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 20:03       ` Drew Adams
  2012-07-20 20:08         ` Andreas Schwab
@ 2012-07-20 20:47         ` Eli Zaretskii
  1 sibling, 0 replies; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-20 20:47 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999, schwab

> From: "Drew Adams" <drew.adams@oracle.com>
> Date: Fri, 20 Jul 2012 13:03:55 -0700
> Cc: 11999@debbugs.gnu.org
> 
> > > This is the problem - there is no such file:
> > >   info-file-exists-p("c:/Emacs-24-2012-07-16/info/emacs")
> > 
> > Thus info-file-exists-p correctly returns nil.  What is the problem?
> 
> This Emacs code still expects the Emacs Info file to have no suffix - it does
> not look for a file named with a suffix.

It does for me.  If it doesn't for you, perhaps you have a stale
info.el lurking on your load-path.  Or maybe some of your local
customizations prevent that suffix test from happening.  The code is
right there in info-insert-file-contents, just look at it.





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 20:43     ` Eli Zaretskii
@ 2012-07-20 21:08       ` Drew Adams
  2012-07-21  8:47         ` Eli Zaretskii
  0 siblings, 1 reply; 33+ messages in thread
From: Drew Adams @ 2012-07-20 21:08 UTC (permalink / raw)
  To: 'Eli Zaretskii'; +Cc: 11999, schwab

> You will need to explain more, because info-insert-file-contents first
> tests for the argument FILENAME, and if that does not exist, it tries
> FILENAME with every extension in Info-suffix-list, which includes
> ".info".
> 
> In particular, this works for me on MS-Windows:
>   M-: (info-insert-file-contents "d:/path/to/emacs/info/emacs") RET
> and loads emacs.info.  Why doesn't it work for you?

My bad.  The difference turned out to be the use now of `user-error' instead of
`error'.  Where I previously just saw a message saying there was no such node,
now Emacs puts me in the debugger, because I have non-nil `debug-on-error'.

This bug could be closed.  However, maybe it should not (you decide):

Going only by the doc string of `user-error', it seems that at least some of the
many changes from `error' to `user-error' in info.el (and beyond?) are
inappropriate.

An index lookup of a term that is not in the index is in general NOT a "pilot
error".  It is normal behavior on the part of users to look up terms in the
index, whether they happen to be there or not.

An index lookup that finds no hit is NOT "expected to be the result of an
incorrect manipulation on the part of the user, rather than the result of an
actual problem."  It is preposterous to have such an expectation or
interpretation of user interaction.

(Furthermore, even errors that are not user errors do not necessarily indicate
"an actual problem".)

There is no "incorrect manipulation" or misunderstanding of Emacs on the part of
a user who looks up `iterate' - or for that matter `user-error' (!) - in the
Elisp index.  These terms just happen not to be indexed.

Something seems misguided in the present classification/handling of errors in
info.el.  I will leave it to you to decide whether you want to (a) do nothing,
(b) use this bug to fix some of the inappropriately classified "user" errors, or
(c) open a new bug for such a fix.






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-20 21:08       ` Drew Adams
@ 2012-07-21  8:47         ` Eli Zaretskii
  2012-07-21 13:58           ` Drew Adams
  2012-07-22  9:50           ` Stefan Monnier
  0 siblings, 2 replies; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-21  8:47 UTC (permalink / raw)
  To: Drew Adams, Stefan Monnier; +Cc: 11999

> From: "Drew Adams" <drew.adams@oracle.com>
> Cc: <schwab@linux-m68k.org>, <11999@debbugs.gnu.org>
> Date: Fri, 20 Jul 2012 14:08:07 -0700
> 
> > You will need to explain more, because info-insert-file-contents first
> > tests for the argument FILENAME, and if that does not exist, it tries
> > FILENAME with every extension in Info-suffix-list, which includes
> > ".info".
> > 
> > In particular, this works for me on MS-Windows:
> >   M-: (info-insert-file-contents "d:/path/to/emacs/info/emacs") RET
> > and loads emacs.info.  Why doesn't it work for you?
> 
> My bad.  The difference turned out to be the use now of `user-error' instead of
> `error'.  Where I previously just saw a message saying there was no such node,
> now Emacs puts me in the debugger, because I have non-nil `debug-on-error'.

So how is one supposed to avoid entering the debugger on user-error,
when debug-on-error is non-nil?

> Going only by the doc string of `user-error', it seems that at least some of the
> many changes from `error' to `user-error' in info.el (and beyond?) are
> inappropriate.

The doc string IMO does not tell enough, and there's no other
documentation about user-error, neither in the ELisp manual nor in
NEWS (which only mentions its existence).

Stefan, could you perhaps provide some insight?  What is a "pilot
error" in this context, and how should Lisp programs use this new
facility to (supposedly) provide better diagnostics and/or better
error handling?

> An index lookup of a term that is not in the index is in general NOT a "pilot
> error".  It is normal behavior on the part of users to look up terms in the
> index, whether they happen to be there or not.

I agree.  But then it's unclear to me whether using 'error' in this
case would be better.  If you think it is, please tell why.

> An index lookup that finds no hit is NOT "expected to be the result of an
> incorrect manipulation on the part of the user, rather than the result of an
> actual problem." 

Agree again, but again unsure how 'error' would be better.  Maybe we
need yet a 3rd kind of errors?





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-21  8:47         ` Eli Zaretskii
@ 2012-07-21 13:58           ` Drew Adams
  2012-07-22  9:50           ` Stefan Monnier
  1 sibling, 0 replies; 33+ messages in thread
From: Drew Adams @ 2012-07-21 13:58 UTC (permalink / raw)
  To: 'Eli Zaretskii', 'Stefan Monnier'; +Cc: 11999

> > My bad.  The difference turned out to be the use now of 
> > `user-error' instead of `error'.  Where I previously just saw
> > a message saying there was no such node, now Emacs puts me in
> > the debugger, because I have non-nil `debug-on-error'.
> 
> So how is one supposed to avoid entering the debugger on user-error,
> when debug-on-error is non-nil?

No idea.

And I am not saying that the debugger should or should be entered here (dunno).
I am saying:

1. In Emacs 24.1, 23,..., the debugger is not entered in this case, even though
I have non-nil debug-on-error.  Perhaps there was an `ignore-errors' or
something. Dunno.

2. The point of the bug report (after realizing what is really happening -
apologies for the mistaken initial description, including Subject line) is that
this particular use case (and perhaps others? it seems that `error' was nearly
systematically replaced with `user-error' in info.el) is inappropriate.  At
least according to the stated purpose of `user-error' - this is not at all
"pilot error".

> > Going only by the doc string of `user-error', it seems that 
> > at least some of the many changes from `error' to `user-error' in
> > info.el (and beyond?) are inappropriate.
> 
> The doc string IMO does not tell enough, and there's no other
> documentation about user-error, neither in the ELisp manual nor in
> NEWS (which only mentions its existence).
> 
> Stefan, could you perhaps provide some insight?  What is a "pilot
> error" in this context, and how should Lisp programs use this new
> facility to (supposedly) provide better diagnostics and/or better
> error handling?

And specifically in the context of this bug report, what do you think is the
correct way to signal to a user that the term s?he tried to look up is not in
the index?  Is it `message'?  `message' + `ding'?  `error' (as always,
previously)?  `user-error'?  something else?

If it is `user-error' then I think the doc needs to be changed to correct the
stated aim of `user-error'.  If it is not `user-error' then maybe the code needs
to be checked generally for additional places where the purpose of `user-error'
might not have been respected.

> > An index lookup of a term that is not in the index is in general
> > NOT a "pilot error".  It is normal behavior on the part of users
> > to look up terms in the index, whether they happen to be there or not.
> 
> I agree.  But then it's unclear to me whether using 'error' in this
> case would be better.  If you think it is, please tell why.

See above.  What `error' or `user-error' does is not so much the problem.  Or
rather, the previous behavior here, where the debugger was not entered, was not
a problem (for me).  Whether that behavior actually corresponds to what `error'
or `user-error' is meant to be used for, I don't know.  In the past, `error' has
been used for many different purposes.

(Most (>99%) uses of `error' have had nothing to do with trying to signal a
problem of the code itself.  IOW, `error' is not used often just for
this-should-never-happen errors (debugging).  But that's the impression I get
from the `user-error' doc: that `user-error' is not intended to signal a
programming problem, which suggests that `error' might be intended for that.)

Two things matter: (1) what the actual behavior is in a given context, and
whether it is useful/appropriate, (2) what the stated use of `user-error' is,
and whether actual uses correspond to it.  To me, #1 is generally more
important.

In this particular case, and some others that I've noticed recently (but do not
remember), what is appropriate is some signal to the user, preferably a signal
that s?he will notice.

`message' messages sometimes get overlooked or lost.  And very often in such a
situation we do also want to return control to top level, i.e., stop the
execution.  So what `error' does is usually pretty much what we want.  But in
some cases we do not want to stop the dialog/execution and just want to point
something out to the user.  In that case, `message' + `ding', or perhaps a
message that requires confirmation (e.g. message box) could be in order.

Wrt this particular case again, I'd suggest mabye returning to the _behavior_
(or similar) of Emacs 24.1 and prior: `error' was used, I believe, but the
debugger was not entered, even with non-nil `debug-on-error'.  IOW, the
execution & user interaction was interrupted with a message stating that the
sought term is not in the index.

How we get that behavior again is less important (to me).  And I do not insist
that it was better to ignore `debug-on-error'.  To be clear, it's OK by me if
you end up keeping the behavior of entering the debugger.  Mostly I was
surprised (and clearly confused, as shown by my initial bug description).

> > An index lookup that finds no hit is NOT "expected to be 
> > the result of an incorrect manipulation on the part of the user,
> > rather than the result of an actual problem." 
> 
> Agree again, but again unsure how 'error' would be better.  Maybe we
> need yet a 3rd kind of errors?

There are two different things: (1) the behavior (what is best here) and (2)
whether such a use of `user-error' fits its description.

As for the behavior, IMO the previous behavior was OK.  But no doubt there
should also be some simple way for a programmer to enter the debugger here.  So
maybe the current behavior is better - dunno.

As for #2, let's please try to first characterize just what the purpose of
`user-error' is, and then let's try to be sure it is used that way.  Otherwise,
the purpose will end up being flouted generally, and it will have no distinct
meaning.

It _looks_ (with just a glance) like someone blanket-replaced `error' with
`user-error' in info.el (and elsewhere?).  That cannot be right, _if_ the stated
purpose of `user-error' is correct.






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-21  8:47         ` Eli Zaretskii
  2012-07-21 13:58           ` Drew Adams
@ 2012-07-22  9:50           ` Stefan Monnier
  2012-07-22 14:34             ` Drew Adams
  2012-07-22 15:16             ` Eli Zaretskii
  1 sibling, 2 replies; 33+ messages in thread
From: Stefan Monnier @ 2012-07-22  9:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

> The doc string IMO does not tell enough, and there's no other
> documentation about user-error, neither in the ELisp manual nor in
> NEWS (which only mentions its existence).

Can you be specific about what additional info you need?

> Stefan, could you perhaps provide some insight?  What is a "pilot
> error" in this context,

A error of the user rather than of the author of the code.

> and how should Lisp programs use this new facility to (supposedly)
> provide better diagnostics and/or better error handling?

user-error is just a standard "debug-ignored-error".  So instead of
using error plus adding the text of the error to debug-ignored-errors,
you can just user user-error.

If Drew gets a user-error that drops him in the debugger, it's because
he removed` user-error' from debug-ignored-errors.

>> An index lookup that finds no hit is NOT "expected to be the result of an
>> incorrect manipulation on the part of the user, rather than the result of an
>> actual problem." 

By "actual problem", I meant "a bug in the code", i.e. a problem that
can be fixed by correcting the code.


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-22  9:50           ` Stefan Monnier
@ 2012-07-22 14:34             ` Drew Adams
  2012-07-22 15:16             ` Eli Zaretskii
  1 sibling, 0 replies; 33+ messages in thread
From: Drew Adams @ 2012-07-22 14:34 UTC (permalink / raw)
  To: 'Stefan Monnier', 'Eli Zaretskii'; +Cc: 11999

> > Stefan, could you perhaps provide some insight?  What is a "pilot
> > error" in this context,
> 
> A error of the user rather than of the author of the code.

Yes, that's what I understood by "pilot error" (the former part: an error by the
user).

That is not what is going on when a user looks up a term that does not happen to
be in the index (which is what this bug report was about).  The user is doing
nothing wrong there.

And I'm guessing, without checking in detail and based only on the fact that so
many calls to `error' were changed to `user-error' in info.el, that there might
be additional inappropriate uses of `user-error' in info.el - perhaps many of
them.

And perhaps other files were also subjected to such a wholesale replacement.
This kind of change requires time, analysis, & judgment.  The person making the
change at any given occurrence needs to read, understand the code, and
(especially) think of the user.

> > and how should Lisp programs use this new facility to (supposedly)
> > provide better diagnostics and/or better error handling?
> 
> user-error is just a standard "debug-ignored-error".  So instead of
> using error plus adding the text of the error to debug-ignored-errors,
> you can just user user-error.
> 
> If Drew gets a user-error that drops him in the debugger, it's because
> he removed` user-error' from debug-ignored-errors.

Not really.  C-h v debug-ignored-errors:

,----
| debug-ignored-errors is a variable defined in `C source code'.
| Its value is
| (search-failed "^Invalid face:? " beginning-of-line beginning-of-buffer
end-of-line end-of-buffer end-of-file buffer-read-only file-supersession
user-error)
| 
| Original value was 
| (beginning-of-line beginning-of-buffer end-of-line end-of-buffer end-of-file
buffer-read-only file-supersession user-error)
|
...
`----

[BTW, as you can see, that value is printed too wide - 158 chars wide!.  It
should be limited (pretty-printed with filling to the usual max width), in line
with the rest of a *Help* buffer.]

And a quick test shows that use of `user-error' does not enter the debugger for
me, whereas use of `error' does.  So there must be something else going on here.

But I just tried the original recipe again, and now it does not enter the
debugger.  I've tried to see what I might have changed locally in the meantime,
but I haven't found anything yet.  I have not changed `debug-ignored-errors', of
that I am certain.

At any rate, let's not worry for this bug about whether the debugger is entered.
That can be discussed later if necessary, and I have already said that I do not
have an opinion about whether it should be entered for such an error (i.e., like
this one in Info).

The real questions for this bug are (1) whether all of the occurrences of
`user-error' in info.el are appropriate (in particular, the one for index
lookup) and (2) whether the doc about `user-error' is accurate and clear.

> >> An index lookup that finds no hit is NOT "expected to be 
> >> the result of an incorrect manipulation on the part of
> >> the user, rather than the result of an actual problem." 
> 
> By "actual problem", I meant "a bug in the code", i.e. a problem that
> can be fixed by correcting the code.

That too is what I guessed, at least the latter part: a coding mistake.

But that description is a false, binary choice.  The same false choice is
presented by "A error of the user rather than of the author of the code."  There
are uses of error signaling (and more generally, alerting the user and perhaps
returning to top level) that are neither.

IOW, there is a lot that is neither an error by the user nor a mistake in the
code.  Without clarifying the doc & design wrt this middle ground, we will
continue to (a) confuse users and (b) have inappropriate uses of either `error'
or `user-error'.






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-22  9:50           ` Stefan Monnier
  2012-07-22 14:34             ` Drew Adams
@ 2012-07-22 15:16             ` Eli Zaretskii
  2012-07-23  8:53               ` Stefan Monnier
  1 sibling, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-22 15:16 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: Drew Adams <drew.adams@oracle.com>, 11999@debbugs.gnu.org
> Date: Sun, 22 Jul 2012 05:50:29 -0400
> 
> > The doc string IMO does not tell enough, and there's no other
> > documentation about user-error, neither in the ELisp manual nor in
> > NEWS (which only mentions its existence).
> 
> Can you be specific about what additional info you need?

Just what you wrote below.  (Thanks.)

> > Stefan, could you perhaps provide some insight?  What is a "pilot
> > error" in this context,
> 
> A error of the user rather than of the author of the code.

What about an error condition that is neither of these two?  Or are
you saying that an error must be one of these two, and nothing else?

> >> An index lookup that finds no hit is NOT "expected to be the result of an
> >> incorrect manipulation on the part of the user, rather than the result of an
> >> actual problem." 
> 
> By "actual problem", I meant "a bug in the code", i.e. a problem that
> can be fixed by correcting the code.

But it isn't a user error, either.  Perhaps we should find a better
name for that, as long as it isn't too late.





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-22 15:16             ` Eli Zaretskii
@ 2012-07-23  8:53               ` Stefan Monnier
  2012-07-23 13:54                 ` Drew Adams
  2012-07-24 16:38                 ` Eli Zaretskii
  0 siblings, 2 replies; 33+ messages in thread
From: Stefan Monnier @ 2012-07-23  8:53 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

>> > Stefan, could you perhaps provide some insight?  What is a "pilot
>> > error" in this context,
>> A error of the user rather than of the author of the code.
> What about an error condition that is neither of these two?  Or are
> you saying that an error must be one of these two, and nothing else?

Either you get a backtrace, or you don't.  Currently, there's no
in-between choice, so there are only two possibilities.

> But it isn't a user error, either.  Perhaps we should find a better
> name for that, as long as it isn't too late.

Since it hasn't yet been released, it's not too late to change.
And since it's only visible to the Elisp programmer, its name does not
matter that much.

I.e. I'm open to suggestions, but I don't think it's worth spending too
much time on it.


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-23  8:53               ` Stefan Monnier
@ 2012-07-23 13:54                 ` Drew Adams
  2012-07-23 23:28                   ` Stefan Monnier
  2012-07-24 16:38                 ` Eli Zaretskii
  1 sibling, 1 reply; 33+ messages in thread
From: Drew Adams @ 2012-07-23 13:54 UTC (permalink / raw)
  To: 'Stefan Monnier', 'Eli Zaretskii'; +Cc: 11999

> > What about an error condition that is neither of these two?  Or are
> > you saying that an error must be one of these two, and nothing else?
> 
> Either you get a backtrace, or you don't.  Currently, there's no
> in-between choice, so there are only two possibilities.

For now then, one of the two should be defined clearly and operationally (i.e.,
easy to understand and distinguish).  And the other should be defined as the
complement.

If we add more cases in the future, we should continue to keep one case as
"otherwise".  Probably `error' should be that fallback (always).

> > But it isn't a user error, either.  Perhaps we should find a better
> > name for that, as long as it isn't too late.
> 
> Since it hasn't yet been released, it's not too late to change.
> And since it's only visible to the Elisp programmer, its name does not
> matter that much.

The name and the definition are important precisely because it is visible to
Elisp programmers.  It is they who create the effective meaning, by putting the
name and definition (= a spec) into practice, i.e., by defining real behavior.

And this bug report (including the part about an apparent wholesale replacement
of `error' in info.el) is a good example of the importance of getting the name &
definition right.

Whatever this new case is that we are carving out from the formerly single
catchall, `error', it should be defined clearly, so that it is used accordingly.

It should be made clear (via the doc) to Elisp programmers (starting with Emacs
Dev) that the new error function should be used only when its specific defining
characteristics hold, and that `error' should be used otherwise (always).

> I.e. I'm open to suggestions, but I don't think it's worth 
> spending too much time on it.

I will try to help with the name, once you make clear what the defining
characteristics are: in what cases should this be used?  Whatever is not
included in those characteristics should fall to plain `error'.

IOW, do not try to define both the new function and `error' explicitly (risk of
contradiction/overlap, gaps) - define the new one, and define `error' as the
complement: all other error cases.  No junk, no confusion.

What should not be done is what has been done so far: define two categories that
leave a gap between them or that overlap.  Try to make the definition of the new
function clear and simple, and state explicitly in the doc that if its
qualifying conditions do not apply then use `error'.

That will help ensure that programmers implement that spec correctly and so end
up realizing the intended behavior in practice.






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-23 13:54                 ` Drew Adams
@ 2012-07-23 23:28                   ` Stefan Monnier
  2012-07-24  1:30                     ` Drew Adams
  0 siblings, 1 reply; 33+ messages in thread
From: Stefan Monnier @ 2012-07-23 23:28 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999

> I will try to help with the name, once you make clear what the defining
> characteristics are: in what cases should this be used?  Whatever is not
> included in those characteristics should fall to plain `error'.

I already explained it: user-error is for errors which are not caused by
bugs in the code (i.e. they're caused by manipulation mistakes, or
problems in the environment such as missing files, ...).


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-23 23:28                   ` Stefan Monnier
@ 2012-07-24  1:30                     ` Drew Adams
  2012-07-24  9:02                       ` Stefan Monnier
  0 siblings, 1 reply; 33+ messages in thread
From: Drew Adams @ 2012-07-24  1:30 UTC (permalink / raw)
  To: 'Stefan Monnier'; +Cc: 11999

> > I will try to help with the name, once you make clear what 
> > the defining characteristics are: in what cases should this
> > be used?  Whatever is not included in those characteristics
> > should fall to plain `error'.
> 
> I already explained it: user-error is for errors which are 
> not caused by bugs in the code (i.e. they're caused by
> manipulation mistakes, or problems in the environment such
> as missing files, ...).

I see.  So it is instead the behavior of `error' that you are defining in a
clear way, and `user-error' that is the catchall: everything else.

I think that is a mistake, for the reason I gave earlier: If you need later to
carve out a new class, it logically would come from the catch-all, which
according to your classification is what you have called `user-error': anything
that is not a code error.  It makes much more sense, IMHO, for `error' to be the
catchall.

But you're the boss.  Given that approach, I would propose these names:

* `code-error': errors that indicate a bug in the code
* `other-error': any other error

`code-error' errors should presumably never happen.  That is, we normally try to
implement code that we do not _expect_ will ever throw a `code-error' error.

Given such a renaming, you need to decide how to handle the traditional `error'.
Would it be defaliased to `code-error', thus limiting the traditional scope
considerably, or defaliased to `other-error', which is more in line with what it
has been.

IOW, given your characterization, I do not think it is a narrow category of
"user" error that is new.  What is new, it seems to me, is the narrow category
of code errors.

HTH.






^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-24  1:30                     ` Drew Adams
@ 2012-07-24  9:02                       ` Stefan Monnier
  0 siblings, 0 replies; 33+ messages in thread
From: Stefan Monnier @ 2012-07-24  9:02 UTC (permalink / raw)
  To: Drew Adams; +Cc: 11999

> I think that is a mistake, for the reason I gave earlier:

You're over-thinking it.


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-23  8:53               ` Stefan Monnier
  2012-07-23 13:54                 ` Drew Adams
@ 2012-07-24 16:38                 ` Eli Zaretskii
  2012-07-24 21:53                   ` Stefan Monnier
  1 sibling, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-24 16:38 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: drew.adams@oracle.com, 11999@debbugs.gnu.org
> Date: Mon, 23 Jul 2012 04:53:05 -0400
> 
> >> > Stefan, could you perhaps provide some insight?  What is a "pilot
> >> > error" in this context,
> >> A error of the user rather than of the author of the code.
> > What about an error condition that is neither of these two?  Or are
> > you saying that an error must be one of these two, and nothing else?
> 
> Either you get a backtrace, or you don't.  Currently, there's no
> in-between choice, so there are only two possibilities.
> 
> > But it isn't a user error, either.  Perhaps we should find a better
> > name for that, as long as it isn't too late.
> 
> Since it hasn't yet been released, it's not too late to change.
> And since it's only visible to the Elisp programmer, its name does not
> matter that much.
> 
> I.e. I'm open to suggestions, but I don't think it's worth spending too
> much time on it.

How about renaming 'user-error' into 'error-no-backtrace'?





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-24 16:38                 ` Eli Zaretskii
@ 2012-07-24 21:53                   ` Stefan Monnier
  2012-07-25 16:06                     ` Eli Zaretskii
  0 siblings, 1 reply; 33+ messages in thread
From: Stefan Monnier @ 2012-07-24 21:53 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

>> I.e. I'm open to suggestions, but I don't think it's worth spending too
>> much time on it.
> How about renaming 'user-error' into 'error-no-backtrace'?

I'd rather have a name that reflects the intention (and also user-error
is significantly shorter).


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-24 21:53                   ` Stefan Monnier
@ 2012-07-25 16:06                     ` Eli Zaretskii
  2012-07-25 23:53                       ` Stefan Monnier
  0 siblings, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-25 16:06 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: drew.adams@oracle.com, 11999@debbugs.gnu.org
> Date: Tue, 24 Jul 2012 17:53:06 -0400
> 
> >> I.e. I'm open to suggestions, but I don't think it's worth spending too
> >> much time on it.
> > How about renaming 'user-error' into 'error-no-backtrace'?
> 
> I'd rather have a name that reflects the intention (and also user-error
> is significantly shorter).

There's nothing wrong with user-error, except that it is..., well,
wrong.  It is simply a convenience feature to signal an error that
will not (by default) enter the debugger.  I see nothing there that
would justify the current name.  My suggestion describes what it
really does.





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-25 16:06                     ` Eli Zaretskii
@ 2012-07-25 23:53                       ` Stefan Monnier
  2012-07-26  3:06                         ` Eli Zaretskii
  0 siblings, 1 reply; 33+ messages in thread
From: Stefan Monnier @ 2012-07-25 23:53 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

>> >> I.e. I'm open to suggestions, but I don't think it's worth spending too
>> >> much time on it.
>> > How about renaming 'user-error' into 'error-no-backtrace'?
>> I'd rather have a name that reflects the intention (and also user-error
>> is significantly shorter).
> There's nothing wrong with user-error, except that it is..., well,
> wrong.  It is simply a convenience feature to signal an error that
> will not (by default) enter the debugger.  I see nothing there that
> would justify the current name.  My suggestion describes what it
> really does.

I'd prefer something like error-dont-debug, because the issue is not
whether it should show a backtrace but whether it is worth trying to
debug the error.
Note that most uses of `user-error' are correct in that they signal
conditions which are usually simply due to a mistaken manipulation
(such as trying to move past the EOB), so I'm only willing to change the
name if it's really significantly better without too many drawbacks.
E.g. `error-dont-debug' is not really a serious candidate.


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-25 23:53                       ` Stefan Monnier
@ 2012-07-26  3:06                         ` Eli Zaretskii
  2012-07-26 23:18                           ` Stefan Monnier
  0 siblings, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-26  3:06 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: drew.adams@oracle.com, 11999@debbugs.gnu.org
> Date: Wed, 25 Jul 2012 19:53:37 -0400
> 
> I'd prefer something like error-dont-debug, because the issue is not
> whether it should show a backtrace but whether it is worth trying to
> debug the error.

OK.

> Note that most uses of `user-error' are correct in that they signal
> conditions which are usually simply due to a mistaken manipulation
> (such as trying to move past the EOB)

That's a coincidence: we tend to want the no-debug behavior for user
errors.  Bu the feature is not about user errors, it's about not
entering the debugger.

> so I'm only willing to change the name if it's really significantly
> better without too many drawbacks.  E.g. `error-dont-debug' is not
> really a serious candidate.

user-error is simply misleading, so it's unfortunate that you insist
on keeping it in preference to error-dont-debug.





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-26  3:06                         ` Eli Zaretskii
@ 2012-07-26 23:18                           ` Stefan Monnier
  2012-07-27  6:49                             ` Eli Zaretskii
  0 siblings, 1 reply; 33+ messages in thread
From: Stefan Monnier @ 2012-07-26 23:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

>> Note that most uses of `user-error' are correct in that they signal
>> conditions which are usually simply due to a mistaken manipulation
>> (such as trying to move past the EOB)
> That's a coincidence: we tend to want the no-debug behavior for user
> errors.  Bu the feature is not about user errors, it's about not
> entering the debugger.

No, it's not just a coincidence: if the problem is not due to the author
of the code having made a mistake, then it can basically only be due to
a mistake of the user in its larger sense (which includes the steps the
user or his sysadmin did to set up the system).


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-26 23:18                           ` Stefan Monnier
@ 2012-07-27  6:49                             ` Eli Zaretskii
  2012-07-28 21:36                               ` Stefan Monnier
  0 siblings, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-27  6:49 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: drew.adams@oracle.com, 11999@debbugs.gnu.org
> Date: Thu, 26 Jul 2012 19:18:43 -0400
> 
> >> Note that most uses of `user-error' are correct in that they signal
> >> conditions which are usually simply due to a mistaken manipulation
> >> (such as trying to move past the EOB)
> > That's a coincidence: we tend to want the no-debug behavior for user
> > errors.  Bu the feature is not about user errors, it's about not
> > entering the debugger.
> 
> No, it's not just a coincidence: if the problem is not due to the author
> of the code having made a mistake, then it can basically only be due to
> a mistake of the user in its larger sense (which includes the steps the
> user or his sysadmin did to set up the system).

Let's take the use case of typing "i foobar" and getting "No 'foobar'
in index." in response.  Whose fault/mistake is this?





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-27  6:49                             ` Eli Zaretskii
@ 2012-07-28 21:36                               ` Stefan Monnier
  2012-07-29  2:50                                 ` Eli Zaretskii
  2012-07-29  6:30                                 ` Juri Linkov
  0 siblings, 2 replies; 33+ messages in thread
From: Stefan Monnier @ 2012-07-28 21:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

>> >> Note that most uses of `user-error' are correct in that they signal
>> >> conditions which are usually simply due to a mistaken manipulation
>> >> (such as trying to move past the EOB)
>> > That's a coincidence: we tend to want the no-debug behavior for user
>> > errors.  Bu the feature is not about user errors, it's about not
>> > entering the debugger.
>> No, it's not just a coincidence: if the problem is not due to the author
>> of the code having made a mistake, then it can basically only be due to
>> a mistake of the user in its larger sense (which includes the steps the
>> user or his sysadmin did to set up the system).
> Let's take the use case of typing "i foobar" and getting "No 'foobar'
> in index." in response.  Whose fault/mistake is this?

I think it is clearly a "user error".


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-28 21:36                               ` Stefan Monnier
@ 2012-07-29  2:50                                 ` Eli Zaretskii
  2012-07-30  9:30                                   ` Stefan Monnier
  2012-07-29  6:30                                 ` Juri Linkov
  1 sibling, 1 reply; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-29  2:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: drew.adams@oracle.com, 11999@debbugs.gnu.org
> Date: Sat, 28 Jul 2012 17:36:07 -0400
> 
> > Let's take the use case of typing "i foobar" and getting "No 'foobar'
> > in index." in response.  Whose fault/mistake is this?
> 
> I think it is clearly a "user error".

What could have user done to avoid that "error"?





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-28 21:36                               ` Stefan Monnier
  2012-07-29  2:50                                 ` Eli Zaretskii
@ 2012-07-29  6:30                                 ` Juri Linkov
  1 sibling, 0 replies; 33+ messages in thread
From: Juri Linkov @ 2012-07-29  6:30 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

>> Let's take the use case of typing "i foobar" and getting "No 'foobar'
>> in index." in response.  Whose fault/mistake is this?

I tried to type "i foobar" in the "(dir) Top" node and it entered
the debugger with:

Debugger entered--Lisp error: (error "The Info directory node has no index; use m to select a manual")
  signal(error ("The Info directory node has no index; use m to select a manual"))
  error("The Info directory node has no index; use m to select a manual")
  (if (equal Info-current-file "dir") (error "The Info directory node has no index; use m to select a manual"))
  (let ((completion-ignore-case t) ...
  (list (let ((completion-ignore-case t) ...
  call-interactively(Info-index nil nil)

Then I tried to type "i foobar" in the "(emacs) Top" node and it displayed
the message "No `foobar' in index" in the echo area.

I wonder why is this difference?  I really have no idea
how this could be fixed in terms of "user error".

> I think it is clearly a "user error".

While I think that removing ugly regexps from `debug-ignored-errors'
was an improvement, a new function has an unfortunate name.

According to http://en.wikipedia.org/wiki/User_error
the term "user error" has offensive connotations
such as "PEBKAC" and "ID-10T error".

For a better name please consider e.g. `error-no-debug'.
Or maybe turn the table and use just `error-debug'
for errors that require debugging?  (I see no harm in having
both `error-no-debug' and `error-debug').





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-29  2:50                                 ` Eli Zaretskii
@ 2012-07-30  9:30                                   ` Stefan Monnier
  2012-07-30 13:35                                     ` Eli Zaretskii
  0 siblings, 1 reply; 33+ messages in thread
From: Stefan Monnier @ 2012-07-30  9:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 11999

>> > Let's take the use case of typing "i foobar" and getting "No 'foobar'
>> > in index." in response.  Whose fault/mistake is this?
>> I think it is clearly a "user error".
> What could have user done to avoid that "error"?

She could have typed something else than "foobar", or should could have
installed a different version of the doc which does include "foobar" in
the index.


        Stefan





^ permalink raw reply	[flat|nested] 33+ messages in thread

* bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2'
  2012-07-30  9:30                                   ` Stefan Monnier
@ 2012-07-30 13:35                                     ` Eli Zaretskii
  0 siblings, 0 replies; 33+ messages in thread
From: Eli Zaretskii @ 2012-07-30 13:35 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 11999

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: drew.adams@oracle.com, 11999@debbugs.gnu.org
> Date: Mon, 30 Jul 2012 05:30:58 -0400
> 
> >> > Let's take the use case of typing "i foobar" and getting "No 'foobar'
> >> > in index." in response.  Whose fault/mistake is this?
> >> I think it is clearly a "user error".
> > What could have user done to avoid that "error"?
> 
> She could have typed something else than "foobar", or should could have
> installed a different version of the doc which does include "foobar" in
> the index.

I give up.





^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2012-07-30 13:35 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-20 16:13 bug#11999: 24.1.50; New Info file suffix ".info" breaks `Info-find-node-2' Drew Adams
2012-07-20 18:30 ` Andreas Schwab
2012-07-20 18:45   ` Drew Adams
2012-07-20 19:19     ` Andreas Schwab
2012-07-20 20:03       ` Drew Adams
2012-07-20 20:08         ` Andreas Schwab
2012-07-20 20:09           ` Drew Adams
2012-07-20 20:11             ` Andreas Schwab
2012-07-20 20:47         ` Eli Zaretskii
2012-07-20 20:43     ` Eli Zaretskii
2012-07-20 21:08       ` Drew Adams
2012-07-21  8:47         ` Eli Zaretskii
2012-07-21 13:58           ` Drew Adams
2012-07-22  9:50           ` Stefan Monnier
2012-07-22 14:34             ` Drew Adams
2012-07-22 15:16             ` Eli Zaretskii
2012-07-23  8:53               ` Stefan Monnier
2012-07-23 13:54                 ` Drew Adams
2012-07-23 23:28                   ` Stefan Monnier
2012-07-24  1:30                     ` Drew Adams
2012-07-24  9:02                       ` Stefan Monnier
2012-07-24 16:38                 ` Eli Zaretskii
2012-07-24 21:53                   ` Stefan Monnier
2012-07-25 16:06                     ` Eli Zaretskii
2012-07-25 23:53                       ` Stefan Monnier
2012-07-26  3:06                         ` Eli Zaretskii
2012-07-26 23:18                           ` Stefan Monnier
2012-07-27  6:49                             ` Eli Zaretskii
2012-07-28 21:36                               ` Stefan Monnier
2012-07-29  2:50                                 ` Eli Zaretskii
2012-07-30  9:30                                   ` Stefan Monnier
2012-07-30 13:35                                     ` Eli Zaretskii
2012-07-29  6:30                                 ` Juri Linkov

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.