]> git.eshelyaron.com Git - emacs.git/commit
(backtrace-on-redisplay-error): Use `handler-bind`
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 26 Dec 2023 02:41:08 +0000 (21:41 -0500)
committerEshel Yaron <me@eshelyaron.com>
Fri, 5 Jan 2024 08:20:56 +0000 (09:20 +0100)
commit9161a2e53d0a76397fd0aaa81ca7dc4bcdc0549e
tree64aa49a6cdb927e4eaa90ea96daea6977794a6f4
parent08d856cf107dba89f7f82e315e15930f110a1fe5
(backtrace-on-redisplay-error): Use `handler-bind`

Reimplement `backtrace-on-redisplay-error` using `push_handler_bind`.
This moves the code from `signal_or_quit` to `xdisp.c` and
`debug-early.el`.

* lisp/emacs-lisp/debug-early.el (debug-early-backtrace):
Add `base` arg to strip "internal" frames.
(debug--early): New function, extracted from `debug-early`.
(debug-early, debug-early--handler): Use it.
(debug-early--muted): New function, extracted (translated) from
`signal_or_quit`; trim the buffer to a max of 10 backtraces.

* src/xdisp.c (funcall_with_backtraces): New function.
(dsafe_calln): Use it.
(syms_of_xdisp): Defsym `Qdebug_early__muted`.

* src/eval.c (redisplay_deep_handler): Delete var.
(init_eval, internal_condition_case_n): Don't set it any more.
(backtrace_yet): Delete var.
(signal_or_quit): Remove special case for `backtrace_on_redisplay_error`.
* src/keyboard.c (command_loop_1): Don't set `backtrace_yet` any more.
* src/lisp.h (backtrace_yet): Don't declare.

(cherry picked from commit 391c208aecc44fd82c599696d47a18782f2f36da)
lisp/emacs-lisp/debug-early.el
src/eval.c
src/keyboard.c
src/lisp.h
src/xdisp.c