unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
@ 2017-04-25 12:02 Tino Calancha
  2017-04-25 12:13 ` npostavs
  0 siblings, 1 reply; 13+ messages in thread
From: Tino Calancha @ 2017-04-25 12:02 UTC (permalink / raw)
  To: 26650


I often kills the *Backtrace* buffer; then, errors won't show
*Backtrace* again in this session.
Could *Backtrace* be guarded with something like `edebug-kill-buffer'
in kill-buffer-hook?

emacs -Q
;; eval following form:
(error "hi") ; This jump to *Backtrace*
q ; Back to top level

;; Eval it again:
(error "hi") ; This time kill *Backtrace*
C-x k RET

;; Eval it once more:
(error "hi")
;; 'hi' is printed in echo area, but *Backtrace* is not shown.

In GNU Emacs 26.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.11)
 of 2017-04-25 built
Repository revision: 5b0fdefb4ca54b0d3dac3047ac1e4b380beb6ba7





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-25 12:02 bug#26650: 26.0.50; Protect *Backtrace* from accidental killing Tino Calancha
@ 2017-04-25 12:13 ` npostavs
  2017-04-25 12:18   ` Tino Calancha
  0 siblings, 1 reply; 13+ messages in thread
From: npostavs @ 2017-04-25 12:13 UTC (permalink / raw)
  To: Tino Calancha; +Cc: 26650

severity 26650 minor
quit

Tino Calancha <tino.calancha@gmail.com> writes:

> (error "hi") ; This time kill *Backtrace*
> C-x k RET
>
> ;; Eval it once more:
> (error "hi")
> ;; 'hi' is printed in echo area, but *Backtrace* is not shown.

That's because you're still in the recursive edit, it's like evaluating
'(error "hi")' before hitting 'q' in the *Backtrace* buffer.  You can
use C-M-c (exit-recursive-edit) to get back to normal.  I think it would
make sense to do that automatically if you kill the *Backtrace* buffer.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-25 12:13 ` npostavs
@ 2017-04-25 12:18   ` Tino Calancha
  2017-04-25 12:50     ` npostavs
  0 siblings, 1 reply; 13+ messages in thread
From: Tino Calancha @ 2017-04-25 12:18 UTC (permalink / raw)
  To: npostavs; +Cc: 26650, Tino Calancha



On Tue, 25 Apr 2017, npostavs@users.sourceforge.net wrote:

> severity 26650 minor
> quit
>
> Tino Calancha <tino.calancha@gmail.com> writes:
>
>> (error "hi") ; This time kill *Backtrace*
>> C-x k RET
>>
>> ;; Eval it once more:
>> (error "hi")
>> ;; 'hi' is printed in echo area, but *Backtrace* is not shown.
>
> That's because you're still in the recursive edit, it's like evaluating
> '(error "hi")' before hitting 'q' in the *Backtrace* buffer.  You can
> use C-M-c (exit-recursive-edit) to get back to normal.  I think it would
> make sense to do that automatically if you kill the *Backtrace* buffer.
Yes, it would be useful.  I don't know how, though.
Sometimes i kill *Bactrace* from *Ibuffer*/*Buffer List* with the 
recursive edit still ongoing.  It's a classical mistake.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-25 12:18   ` Tino Calancha
@ 2017-04-25 12:50     ` npostavs
  2017-04-25 13:02       ` Tino Calancha
  2017-04-26 10:07       ` Eli Zaretskii
  0 siblings, 2 replies; 13+ messages in thread
From: npostavs @ 2017-04-25 12:50 UTC (permalink / raw)
  To: Tino Calancha; +Cc: 26650

[-- Attachment #1: Type: text/plain, Size: 689 bytes --]

tags 26650 patch
quit

Tino Calancha <tino.calancha@gmail.com> writes:

>>
>> That's because you're still in the recursive edit, it's like evaluating
>> '(error "hi")' before hitting 'q' in the *Backtrace* buffer.  You can
>> use C-M-c (exit-recursive-edit) to get back to normal.  I think it would
>> make sense to do that automatically if you kill the *Backtrace* buffer.
> Yes, it would be useful.  I don't know how, though.
> Sometimes i kill *Bactrace* from *Ibuffer*/*Buffer List* with the
> recursive edit still ongoing.  It's a classical mistake.

Actually, the obvious way of adding `top-level' (that's what 'q' does)
to `kill-buffer-hook' does protect *Backtrace* from killing.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 888 bytes --]

From 9e2f66a300cc0c94fb1369cbf3721d41d98c2d94 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Tue, 25 Apr 2017 08:39:17 -0400
Subject: [PATCH v1] Protect *Backtrace* from being killed (Bug#26650)

* lisp/emacs-lisp/debug.el (debugger-mode): Call `top-level' in
`kill-buffer-hook'.
---
 lisp/emacs-lisp/debug.el | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index 94b683dcb9..0aef94f1d2 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -753,6 +753,8 @@ debugger-mode
 \\{debugger-mode-map}"
   (setq truncate-lines t)
   (set-syntax-table emacs-lisp-mode-syntax-table)
+  (add-hook 'kill-buffer-hook
+            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
   (use-local-map debugger-mode-map))
 \f
 (defcustom debugger-record-buffer "*Debugger-record*"
-- 
2.11.1


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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-25 12:50     ` npostavs
@ 2017-04-25 13:02       ` Tino Calancha
  2017-04-26 10:07       ` Eli Zaretskii
  1 sibling, 0 replies; 13+ messages in thread
From: Tino Calancha @ 2017-04-25 13:02 UTC (permalink / raw)
  To: npostavs; +Cc: 26650, Tino Calancha



On Tue, 25 Apr 2017, npostavs@users.sourceforge.net wrote:

> tags 26650 patch
> quit
>
> Tino Calancha <tino.calancha@gmail.com> writes:
>
>>>
>>> That's because you're still in the recursive edit, it's like evaluating
>>> '(error "hi")' before hitting 'q' in the *Backtrace* buffer.  You can
>>> use C-M-c (exit-recursive-edit) to get back to normal.  I think it would
>>> make sense to do that automatically if you kill the *Backtrace* buffer.
>> Yes, it would be useful.  I don't know how, though.
>> Sometimes i kill *Bactrace* from *Ibuffer*/*Buffer List* with the
>> recursive edit still ongoing.  It's a classical mistake.
>
> Actually, the obvious way of adding `top-level' (that's what 'q' does)
> to `kill-buffer-hook' does protect *Backtrace* from killing.
Good!  It solves the issue.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-25 12:50     ` npostavs
  2017-04-25 13:02       ` Tino Calancha
@ 2017-04-26 10:07       ` Eli Zaretskii
  2017-04-26 10:36         ` Tino Calancha
  2017-04-26 10:49         ` Michael Heerdegen
  1 sibling, 2 replies; 13+ messages in thread
From: Eli Zaretskii @ 2017-04-26 10:07 UTC (permalink / raw)
  To: npostavs; +Cc: 26650, tino.calancha

> From: npostavs@users.sourceforge.net
> Date: Tue, 25 Apr 2017 08:50:00 -0400
> Cc: 26650@debbugs.gnu.org
> 
> diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
> index 94b683dcb9..0aef94f1d2 100644
> --- a/lisp/emacs-lisp/debug.el
> +++ b/lisp/emacs-lisp/debug.el
> @@ -753,6 +753,8 @@ debugger-mode
>  \\{debugger-mode-map}"
>    (setq truncate-lines t)
>    (set-syntax-table emacs-lisp-mode-syntax-table)
> +  (add-hook 'kill-buffer-hook
> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)

This will throw to top-level when _any_ buffer is killed, as long as
we are in recursive-edit, no?  Is that a good idea?  Shouldn't this
hook do that only for *Backtrace*?





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 10:07       ` Eli Zaretskii
@ 2017-04-26 10:36         ` Tino Calancha
  2017-04-26 11:03           ` Eli Zaretskii
  2017-04-26 10:49         ` Michael Heerdegen
  1 sibling, 1 reply; 13+ messages in thread
From: Tino Calancha @ 2017-04-26 10:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 26650, npostavs, Tino Calancha



On Wed, 26 Apr 2017, Eli Zaretskii wrote:

>> From: npostavs@users.sourceforge.net
>> Date: Tue, 25 Apr 2017 08:50:00 -0400
>> Cc: 26650@debbugs.gnu.org
>>
>> diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
>> index 94b683dcb9..0aef94f1d2 100644
>> --- a/lisp/emacs-lisp/debug.el
>> +++ b/lisp/emacs-lisp/debug.el
>> @@ -753,6 +753,8 @@ debugger-mode
>>  \\{debugger-mode-map}"
>>    (setq truncate-lines t)
>>    (set-syntax-table emacs-lisp-mode-syntax-table)
>> +  (add-hook 'kill-buffer-hook
>> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
>
> This will throw to top-level when _any_ buffer is killed, as long as
> we are in recursive-edit, no?
No, because `add-hook' is called with non-nil LOCAL arg.
> Shouldn't this hook do that only for *Backtrace*?
We can sandwich add-hook inside:
(when (eq (current-buffer) (get-buffer "*Backtrace*"))
   (add-hook ...
)

Then would be less general: just protect *Backtrace* for accidental 
killing.  So far that was my request so i'm fine with that.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 10:07       ` Eli Zaretskii
  2017-04-26 10:36         ` Tino Calancha
@ 2017-04-26 10:49         ` Michael Heerdegen
  1 sibling, 0 replies; 13+ messages in thread
From: Michael Heerdegen @ 2017-04-26 10:49 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 26650, npostavs, tino.calancha

Eli Zaretskii <eliz@gnu.org> writes:

> > From: npostavs@users.sourceforge.net
> > Date: Tue, 25 Apr 2017 08:50:00 -0400
> > Cc: 26650@debbugs.gnu.org
> > 
> > diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
> > index 94b683dcb9..0aef94f1d2 100644
> > --- a/lisp/emacs-lisp/debug.el
> > +++ b/lisp/emacs-lisp/debug.el
> > @@ -753,6 +753,8 @@ debugger-mode
> >  \\{debugger-mode-map}"
> >    (setq truncate-lines t)
> >    (set-syntax-table emacs-lisp-mode-syntax-table)
> > +  (add-hook 'kill-buffer-hook
> > +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
>
> This will throw to top-level when _any_ buffer is killed, as long as
> we are in recursive-edit, no?  Is that a good idea?  Shouldn't this
> hook do that only for *Backtrace*?

Did you notice that the lambda is added to the buffer-local binding of
the hook?  If you did, I don't understand why this would happen.  If you
didn't, maybe a line break should be added after the lambda expression?

Michael.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 10:36         ` Tino Calancha
@ 2017-04-26 11:03           ` Eli Zaretskii
  2017-04-26 12:52             ` npostavs
  0 siblings, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2017-04-26 11:03 UTC (permalink / raw)
  To: Tino Calancha; +Cc: 26650, npostavs

> From: Tino Calancha <tino.calancha@gmail.com>
> Date: Wed, 26 Apr 2017 19:36:54 +0900 (JST)
> cc: npostavs@users.sourceforge.net, Tino Calancha <tino.calancha@gmail.com>, 
>     26650@debbugs.gnu.org
> 
> >> +  (add-hook 'kill-buffer-hook
> >> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
> >
> > This will throw to top-level when _any_ buffer is killed, as long as
> > we are in recursive-edit, no?
> No, because `add-hook' is called with non-nil LOCAL arg.

Right, sorry for not paying attention.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 11:03           ` Eli Zaretskii
@ 2017-04-26 12:52             ` npostavs
  2017-04-26 13:57               ` Tino Calancha
  2017-04-26 15:33               ` Eli Zaretskii
  0 siblings, 2 replies; 13+ messages in thread
From: npostavs @ 2017-04-26 12:52 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 26650, Tino Calancha

Eli Zaretskii <eliz@gnu.org> writes:

>> >> +  (add-hook 'kill-buffer-hook
>> >> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
>> >
>> > This will throw to top-level when _any_ buffer is killed, as long as
>> > we are in recursive-edit, no?
>> No, because `add-hook' is called with non-nil LOCAL arg.
>
> Right, sorry for not paying attention.

Maybe I should have written

    (add-hook 'kill-buffer-hook (lambda ...) nil 'local)

to emphasize this?  I'm still undecided on the general style question of
whether to use t or '<symbol> in these cases.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 12:52             ` npostavs
@ 2017-04-26 13:57               ` Tino Calancha
  2017-04-26 15:33               ` Eli Zaretskii
  1 sibling, 0 replies; 13+ messages in thread
From: Tino Calancha @ 2017-04-26 13:57 UTC (permalink / raw)
  To: npostavs; +Cc: 26650, Tino Calancha



On Wed, 26 Apr 2017, npostavs@users.sourceforge.net wrote:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>>>>> +  (add-hook 'kill-buffer-hook
>>>>> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
>>>>
>>>> This will throw to top-level when _any_ buffer is killed, as long as
>>>> we are in recursive-edit, no?
>>> No, because `add-hook' is called with non-nil LOCAL arg.
>>
>> Right, sorry for not paying attention.
>
> Maybe I should have written
>
>    (add-hook 'kill-buffer-hook (lambda ...) nil 'local)
>
> to emphasize this?  I'm still undecided on the general style question of
> whether to use t or '<symbol> in these cases.
This reminds me the discussion here:
https://github.com/bbatsov/emacs-lisp-style-guide/issues/30





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 12:52             ` npostavs
  2017-04-26 13:57               ` Tino Calancha
@ 2017-04-26 15:33               ` Eli Zaretskii
  2017-05-24  0:18                 ` npostavs
  1 sibling, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2017-04-26 15:33 UTC (permalink / raw)
  To: npostavs; +Cc: 26650, tino.calancha

> From: npostavs@users.sourceforge.net
> Cc: Tino Calancha <tino.calancha@gmail.com>,  26650@debbugs.gnu.org
> Date: Wed, 26 Apr 2017 08:52:26 -0400
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> >> +  (add-hook 'kill-buffer-hook
> >> >> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
> >> >
> >> > This will throw to top-level when _any_ buffer is killed, as long as
> >> > we are in recursive-edit, no?
> >> No, because `add-hook' is called with non-nil LOCAL arg.
> >
> > Right, sorry for not paying attention.
> 
> Maybe I should have written
> 
>     (add-hook 'kill-buffer-hook (lambda ...) nil 'local)
> 
> to emphasize this?

It's up to you, but the fact that I didn't see it is not a reason good
enough to change anything, IMO.





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

* bug#26650: 26.0.50; Protect *Backtrace* from accidental killing
  2017-04-26 15:33               ` Eli Zaretskii
@ 2017-05-24  0:18                 ` npostavs
  0 siblings, 0 replies; 13+ messages in thread
From: npostavs @ 2017-05-24  0:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 26650, tino.calancha

tags 26650 fixed
close 26650 26.1
quit

Eli Zaretskii <eliz@gnu.org> writes:

>> >> >> +  (add-hook 'kill-buffer-hook
>> >> >> +            (lambda () (if (> (recursion-depth) 0) (top-level))) nil t)
>> >> >
>> >> > This will throw to top-level when _any_ buffer is killed, as long as
>> >> > we are in recursive-edit, no?
>> >> No, because `add-hook' is called with non-nil LOCAL arg.
>> >
>> > Right, sorry for not paying attention.
>> 
>> Maybe I should have written
>> 
>>     (add-hook 'kill-buffer-hook (lambda ...) nil 'local)
>> 
>> to emphasize this?
>
> It's up to you, but the fact that I didn't see it is not a reason good
> enough to change anything, IMO.

Coming back to this, I found having the "... nil t)" on the same line as
the lambda confusing to read.  So I moved them to the next line; I
didn't change the "t" to "local" [1: ef9f5c672a].

[1: ef9f5c672a]: 2017-05-23 20:11:23 -0400
  Protect *Backtrace* from being killed (Bug#26650)
  http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=ef9f5c672a8e248dd7bd682101c03feb2e527340





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

end of thread, other threads:[~2017-05-24  0:18 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-25 12:02 bug#26650: 26.0.50; Protect *Backtrace* from accidental killing Tino Calancha
2017-04-25 12:13 ` npostavs
2017-04-25 12:18   ` Tino Calancha
2017-04-25 12:50     ` npostavs
2017-04-25 13:02       ` Tino Calancha
2017-04-26 10:07       ` Eli Zaretskii
2017-04-26 10:36         ` Tino Calancha
2017-04-26 11:03           ` Eli Zaretskii
2017-04-26 12:52             ` npostavs
2017-04-26 13:57               ` Tino Calancha
2017-04-26 15:33               ` Eli Zaretskii
2017-05-24  0:18                 ` npostavs
2017-04-26 10:49         ` Michael Heerdegen

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).