Subject: 24.3.50; `next-frame' should not choose a frame (e.g. *Backtrace*) that did not exist when it was invoked

From: "Drew Adams" <[email-masked]>
Date: Wed, 2 Jan 2013 10:13:01 -0800

Set `special-display-regexps' or other so that `*Backtrace*' gets
displayed in its own (special-display) frame.
 
Evaluate the source code for `next-frame', then
M-x debug-on-entry next-frame, then C-x o.
 
When stepping through the debugger, the next frame should never be
*Backtrace* (unless a *Backtrace* frame existed before invoking `next
frame'), but it can be.  This is a bug IMO.

Debugger entered--returning value: #<frame *Backtrace* 04B01700>
  next-frame(#<frame drews-lisp-20 03F49668>)
* (setq frame (next-frame frame))
* (while (> arg 0) (setq frame (next-frame frame)) (while (not (eq
(frame-visible-p frame) t)) (setq frame (next-frame frame))) (setq arg (1-
arg)))
* (let ((frame (selected-frame))) (while (> arg 0) (setq frame (next-frame
frame)) (while (not (eq (frame-visible-p frame) t)) (setq frame (next-frame
frame))) (setq arg (1- arg))) (while (< arg 0) (setq frame (previous-frame
frame)) (while (not (eq (frame-visible-p frame) t)) (setq frame (previous-frame
frame))) (setq arg (1+ arg))) (select-frame-set-input-focus frame))
* (lambda (arg) "Select the ARGth different visible frame on current display,
and raise it.\nAll frames are arranged in a cyclic order.\nThis command selects
the frame ARG steps away in that order.\nA negative ARG moves in the opposite
order.\n\nTo make this command work properly, you must tell Emacs\nhow the
system (or the window manager) generally handles\nfocus-switching between
windows.  If moving the mouse onto a window\nselects it (gives it focus), set
`focus-follows-mouse' to t.\nOtherwise, that variable should be nil."
(interactive "p") (let ((frame (selected-frame))) (while (> arg 0) (setq frame
(next-frame frame)) (while (not (eq (frame-visible-p frame) t)) (setq frame
(next-frame frame))) (setq arg (1- arg))) (while (< arg 0) (setq frame
(previous-frame frame)) (while (not (eq (frame-visible-p frame) t)) (setq frame
(previous-frame frame))) (setq arg (1+ arg))) (select-frame-set-input-focus
frame)))(1)
* apply((lambda (arg) "Select the ARGth different visible frame on current
display, and raise it.\nAll frames are arranged in a cyclic order.\nThis command
selects the frame ARG steps away in that order.\nA negative ARG moves in the
opposite order.\n\nTo make this command work properly, you must tell Emacs\nhow
the system (or the window manager) generally handles\nfocus-switching between
windows.  If moving the mouse onto a window\nselects it (gives it focus), set
`focus-follows-mouse' to t.\nOtherwise, that variable should be nil."
(interactive "p") (let ((frame (selected-frame))) (while (> arg 0) (setq frame
(next-frame frame)) (while (not (eq (frame-visible-p frame) t)) (setq frame
(next-frame frame))) (setq arg (1- arg))) (while (< arg 0) (setq frame
(previous-frame frame)) (while (not (eq (frame-visible-p frame) t)) (setq frame
(previous-frame frame))) (setq arg (1+ arg))) (select-frame-set-input-focus
frame))) 1)
* other-frame(1)

In GNU Emacs 24.3.50.1 (i386-mingw-nt5.1.2600)
 of 2012-12-31 on ODIEONE
Bzr revision: 111388 [email-masked]
Windowing system distributor `Microsoft Corp.', version 5.1.2600
Configured using:
 `configure --with-gcc (4.7) --no-opt --enable-checking --cflags
 -IC:/Devel/emacs/build/include --ldflags -LC:/Devel/emacs/build/lib'