From: Gregory Heytings <gregory@heytings.org>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: Alan Third <alan@idiocy.org>,
1305@debbugs.gnu.org, Michael Welsh Duggan <mwd@md5i.com>,
Stefan Kangas <stefan@marxist.se>,
jasonspiro4@gmail.com, monnier@iro.umontreal.ca,
Lars Ingebrigtsen <larsi@gnus.org>
Subject: bug#1305: All code that currently beeps should use visual bell instead
Date: Wed, 21 Apr 2021 06:47:27 +0000 [thread overview]
Message-ID: <192e82f20f5deb690394@heytings.org> (raw)
In-Reply-To: <0d7924a2-d09f-e2d0-f0e7-6b5ee3a7a7f2@yandex.ru>
[-- Attachment #1: Type: text/plain, Size: 2028 bytes --]
>>> And it turns the cursor red irreversibly in my config (but not in
>>> 'emacs -Q').
>>
>> That's rather strange, color-bell--cursor-background is saved only
>> once, when visual-bell is called for the first time. I'll try to
>> reproduce the issue, but some more detailed information (e.g. with
>> debug-on-variable-change) would be welcome.
>
> I'll try bisecting when I have the time. In any case, it's just an
> implementation bug, not a blocker.
>
Does the attached patch fix the problem in your config? It is probably
safer to check the cursor color each time color-bell is entered.
>>> Is nobody bothered by having this kind of visual indication while
>>> 'visible-bell' is nil, though?
>>
>> It's easy to turn off, as indicated in NEWS: (setq ring-bell-function
>> nil).
>
> I mean, like, semantically: this new proposal is also visual/visible.
>
> But 'visible-bell' is nil.
>
Yes, it's perhaps a bit unfortunate that "visible-bell" is nil in this
case, but note that with visible-bell t and ring-bell-function ignore you
also do not have what you could expect. The semantics of visible-bell and
ring-bell-function are a bit unclear, but they cannot be fixed anymore
without introducing backward incompatible changes.
>> And IMO this is way better than the current situation, in which the
>> default behavior depends on too many parameters that are outside the
>> control of Emacs, in which the available options are different
>> depending on the platform, and in which on certain platforms none of
>> the available options are good.
>
> My #1 preference would be to make it all behave like (setq visible-bell
> t) on GNU/Linux does. This way we both get a proven behavior with no
> significant complaints, as well as consistency across platforms.
>
I understand that you're accustomed to what visible-bell t does on
GNU/Linux, but frankly, its ugly. Ask their opinion to non-Emacs users
about that bell, I'd be surprised if they like it.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-diff; name=New-default-bell.patch, Size: 6776 bytes --]
From 21f2a9946c70d8973648fa3dfb30c82732ea682e Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Wed, 21 Apr 2021 06:36:06 +0000
Subject: [PATCH] New default bell.
* lisp/simple.el (color-bell): New default bell, which briefly flashes
the cursor and the echo area when an error occurs.
(color-bell-echo-area-face, color-bell-cursor-face): New faces.
(color-bell-ignored-errors, color-bell-duration): New user options.
* src/eval.c (last-error-symbol, last-error-data): New variables.
(signal_or_quit): Set the new variables.
* lisp/face-remap.el (face-remap-remove-relative, buffer-face-mode-face,
text-scale-mode-step): Autoload them.
* etc/NEWS: Document the change.
---
etc/NEWS | 10 ++++++++
lisp/face-remap.el | 3 +++
lisp/simple.el | 58 ++++++++++++++++++++++++++++++++++++++++++++++
src/eval.c | 11 +++++++++
4 files changed, 82 insertions(+)
diff --git a/etc/NEWS b/etc/NEWS
index e39aa7b437..4203e0b40d 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -272,6 +272,16 @@ commands. The new keystrokes are 'C-x x g' ('revert-buffer'),
** Commands 'set-frame-width' and 'set-frame-height' can now get their
input using the minibuffer.
++++
+** The default value of 'ring-bell-function' is now non-nil.
+When an error occurs, Emacs will by default briefly flash the cursor
+and the echo area. This effect can be customized with the user options
+color-bell-duration, color-bell-cursor-face, color-bell-echo-area-face
+and color-bell-ignored-errors. To restore the previous behavior,
+add the following to your init file:
+
+(setq ring-bell-function nil)
+
\f
* Editing Changes in Emacs 28.1
diff --git a/lisp/face-remap.el b/lisp/face-remap.el
index 5914ee4a20..df4c59913c 100644
--- a/lisp/face-remap.el
+++ b/lisp/face-remap.el
@@ -142,6 +142,7 @@ face-remap-add-relative
(force-mode-line-update))
(cons face specs)))
+;;;###autoload
(defun face-remap-remove-relative (cookie)
"Remove a face remapping previously added by `face-remap-add-relative'.
COOKIE should be the return value from that function."
@@ -210,6 +211,7 @@ face-remap-set-base
;; ----------------------------------------------------------------
;; text-scale-mode
+;;;###autoload
(defcustom text-scale-mode-step 1.2
"Scale factor used by `text-scale-mode'.
Each positive or negative step scales the default face height by this amount."
@@ -397,6 +399,7 @@ text-scale-adjust
;; ----------------------------------------------------------------
;; buffer-face-mode
+;;;###autoload
(defcustom buffer-face-mode-face 'variable-pitch
"The face specification used by `buffer-face-mode'.
It may contain any value suitable for a `face' text property,
diff --git a/lisp/simple.el b/lisp/simple.el
index 999755a642..c07296fef4 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -8511,7 +8511,65 @@ play-sound-file
(plist-put sound :device device))
(push 'sound sound)
(play-sound sound)))
+\f
+(defface color-bell-echo-area-face
+ `((((type tty)) (:inherit error :inverse-video t))
+ (t (:inherit match)))
+ "Face used by `color-bell' to flash the echo area when an error happened."
+ :version "28.1")
+
+(defface color-bell-cursor-face
+ `((t (:inherit error)))
+ "Face used by `color-bell' to flash the cursor when an error happened.
+The cursor is flashed with the foreground color of that face; it is not
+flashed in terminals."
+ :version "28.1")
+
+(defcustom color-bell-ignored-errors nil
+ "List of errors symbols ignored by `color-bell'.
+Error symbols that are present in this list are ignored by `color-bell', and
+are displayed without flashing the cursor and echo area.
+For example, the value '(quit beginning-of-buffer end-of-buffer) disables
+`color-bell' on \\[keyboard-quit], and for beginning and end of buffer errors.
+To find the symbol of an error, type \\[eval-expression] last-error-symbol \
+\\[newline] immediately
+after the error happened, without using \\[indent-for-tab-command] for \
+completion."
+ :type 'list
+ :version "28.1")
+
+(defcustom color-bell-duration 0.25
+ "Maximum duration of the `color-bell' flash.
+The flash stops when input is available."
+ :type 'float
+ :version "28.1")
+(defvar color-bell--cursor-background nil)
+(defvar color-bell--face-remapping nil)
+
+(defun color-bell ()
+ (unless (memq last-error-symbol color-bell-ignored-errors)
+ (if (not (eq (face-attribute 'cursor :background)
+ color-bell--cursor-background))
+ (setq color-bell--cursor-background
+ (face-attribute 'cursor :background)))
+ (set-face-attribute 'cursor nil :background
+ (face-attribute 'color-bell-cursor-face :foreground
+ nil t))
+ (with-current-buffer " *Echo Area 0*"
+ (when color-bell--face-remapping
+ (face-remap-remove-relative color-bell--face-remapping))
+ (setq-local color-bell--face-remapping
+ (face-remap-add-relative 'default
+ 'color-bell-echo-area-face)))
+ (message (error-message-string (cons last-error-symbol nil)))
+ (sit-for color-bell-duration)
+ (set-face-attribute 'cursor nil :background color-bell--cursor-background)
+ (with-current-buffer " *Echo Area 0*"
+ (face-remap-remove-relative color-bell--face-remapping)
+ (setq color-bell--face-remapping nil))))
+
+(setq ring-bell-function #'color-bell)
\f
(defcustom read-mail-command 'rmail
"Your preference for a mail reading package.
diff --git a/src/eval.c b/src/eval.c
index fd93f5b9e1..ea012eef77 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1716,6 +1716,9 @@ signal_or_quit (Lisp_Object error_symbol, Lisp_Object data, bool keyboard_quit)
#endif
#endif
+ Vlast_error_symbol = real_error_symbol;
+ Vlast_error_data = (NILP (error_symbol) ? Fcdr (data) : data);
+
/* This hook is used by edebug. */
if (! NILP (Vsignal_hook_function)
&& ! NILP (error_symbol)
@@ -4321,6 +4324,14 @@ syms_of_eval (void)
The Edebug package uses this to regain control. */);
Vsignal_hook_function = Qnil;
+ DEFVAR_LISP ("last-error-symbol", Vlast_error_symbol,
+ doc: /* Symbol of the last error. */);
+ Vlast_error_symbol = Qnil;
+
+ DEFVAR_LISP ("last-error-data", Vlast_error_data,
+ doc: /* Data of the last error. */);
+ Vlast_error_data = Qnil;
+
DEFVAR_LISP ("debug-on-signal", Vdebug_on_signal,
doc: /* Non-nil means call the debugger regardless of condition handlers.
Note that `debug-on-error', `debug-on-quit' and friends
--
2.30.2
next prev parent reply other threads:[~2021-04-21 6:47 UTC|newest]
Thread overview: 176+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-09 1:50 bug#1305: All code that currently beeps should use visual bell instead Jason Spiro
2008-11-09 2:00 ` Processed: " Emacs bug Tracking System
2008-11-09 3:57 ` bug#1305: All code that currently beeps should use visual bellinstead Drew Adams
2008-11-09 4:08 ` Jason Spiro
2008-11-09 19:17 ` Eli Zaretskii
2008-11-09 19:04 ` Eli Zaretskii
2008-11-09 19:19 ` Drew Adams
2008-11-09 20:00 ` Eli Zaretskii
2008-11-10 2:07 ` Stefan Monnier
2008-11-10 6:28 ` Drew Adams
2008-11-11 21:20 ` bug#1305: All code that currently beeps should usevisual bellinstead Drew Adams
2008-11-10 8:34 ` bug#1305: All code that currently beeps should use visual bellinstead Lennart Borgman
2008-11-10 15:22 ` Stefan Monnier
2008-11-10 16:58 ` Lennart Borgman
2008-11-11 18:38 ` Jason A. Spiro
2008-11-10 22:17 ` Richard M. Stallman
2008-11-11 18:50 ` Jason Spiro
2008-11-12 3:33 ` Richard M. Stallman
2008-11-13 7:41 ` Jason Spiro
2021-04-17 6:06 ` bug#1305: All code that currently beeps should use visual bell instead Stefan Kangas
2021-04-17 7:03 ` Eli Zaretskii
2021-04-17 11:54 ` Lars Ingebrigtsen
2021-04-17 12:31 ` Gregory Heytings
2021-04-17 12:39 ` Eli Zaretskii
2021-04-17 12:55 ` Lars Ingebrigtsen
2021-04-17 13:07 ` Stefan Kangas
2021-04-17 13:13 ` Lars Ingebrigtsen
2021-04-17 13:32 ` Stefan Kangas
2021-04-17 13:39 ` Lars Ingebrigtsen
2021-04-17 14:05 ` Eli Zaretskii
2021-04-17 14:08 ` Stefan Kangas
2021-04-18 10:41 ` Lars Ingebrigtsen
2021-04-18 12:22 ` Stefan Kangas
2021-04-18 13:32 ` Gregory Heytings
2021-04-18 15:23 ` Lars Ingebrigtsen
2021-04-18 15:42 ` Gregory Heytings
2021-04-17 19:17 ` Basil L. Contovounesios
2021-04-17 17:01 ` Dmitry Gutov
2021-04-17 20:59 ` Gregory Heytings
2021-04-17 21:09 ` Michael Welsh Duggan
2021-04-17 21:17 ` Gregory Heytings
2021-04-17 21:52 ` Michael Welsh Duggan
2021-04-17 22:04 ` Gregory Heytings
2021-04-17 23:30 ` bug#1305: [External] : " Drew Adams
2021-04-18 10:38 ` Lars Ingebrigtsen
2021-04-18 12:22 ` Stefan Kangas
2021-04-18 12:36 ` Lars Ingebrigtsen
2021-04-18 13:10 ` Stefan Kangas
2021-04-18 13:15 ` Stefan Kangas
2021-04-18 15:22 ` Lars Ingebrigtsen
2021-04-18 15:28 ` Stefan Monnier
2021-04-18 15:38 ` Lars Ingebrigtsen
2021-04-18 18:34 ` Stefan Monnier
2021-04-19 12:37 ` Lars Ingebrigtsen
2021-04-19 13:04 ` Dmitry Gutov
2021-04-19 13:26 ` Stefan Kangas
2021-04-25 18:06 ` Lars Ingebrigtsen
2021-04-25 20:06 ` Stefan Kangas
2021-04-19 13:30 ` Gregory Heytings
2021-04-18 17:02 ` Gregory Heytings
2021-04-18 17:13 ` Eli Zaretskii
2021-04-18 18:02 ` Gregory Heytings
2021-04-18 18:35 ` Stefan Kangas
2021-04-18 18:45 ` Gregory Heytings
2021-04-18 19:04 ` Stefan Kangas
2021-04-18 19:19 ` Gregory Heytings
2021-04-18 15:06 ` Eli Zaretskii
2021-04-18 15:11 ` Lars Ingebrigtsen
2021-04-18 15:23 ` Eli Zaretskii
2021-04-18 15:35 ` Eli Zaretskii
2021-04-19 12:56 ` Lars Ingebrigtsen
2021-04-19 13:12 ` Eli Zaretskii
2021-04-25 18:03 ` Lars Ingebrigtsen
2021-04-25 18:52 ` Andreas Schwab
2021-04-25 19:01 ` Lars Ingebrigtsen
2021-04-25 19:18 ` Andreas Schwab
2021-04-25 19:33 ` Lars Ingebrigtsen
2021-04-18 16:07 ` Andreas Schwab
2021-04-19 12:38 ` Lars Ingebrigtsen
2021-04-18 16:12 ` Stefan Kangas
2021-04-18 16:20 ` Andreas Schwab
2021-04-19 12:39 ` Lars Ingebrigtsen
2021-04-18 15:18 ` Dmitry Gutov
2021-04-18 15:26 ` Dmitry Gutov
2021-04-18 15:37 ` Gregory Heytings
2021-04-18 16:27 ` Stefan Kangas
2021-04-18 16:38 ` Gregory Heytings
2021-04-18 17:05 ` Dmitry Gutov
2021-04-18 17:14 ` Stefan Kangas
2021-04-19 12:33 ` Lars Ingebrigtsen
2021-04-19 12:40 ` Dmitry Gutov
2021-04-19 12:47 ` Gregory Heytings
2021-04-19 13:01 ` Dmitry Gutov
2021-04-19 13:16 ` Gregory Heytings
2021-04-19 13:26 ` Stefan Kangas
2021-04-19 13:37 ` Dmitry Gutov
2021-04-19 14:41 ` Alan Third
2021-04-20 14:21 ` Gregory Heytings
2021-04-20 18:27 ` Dmitry Gutov
2021-04-20 19:19 ` Gregory Heytings
2021-04-21 1:16 ` Dmitry Gutov
2021-04-21 6:47 ` Gregory Heytings [this message]
2021-04-21 13:11 ` Stefan Kangas
2021-04-21 14:05 ` Gregory Heytings
2021-04-21 14:12 ` Dmitry Gutov
2021-04-21 14:30 ` Stefan Kangas
2021-04-21 14:35 ` Gregory Heytings
2021-04-21 14:45 ` Stefan Kangas
2021-04-21 14:53 ` Gregory Heytings
2021-04-21 21:27 ` Stefan Kangas
2021-04-21 14:33 ` Stefan Monnier
2021-04-21 14:51 ` Dmitry Gutov
2021-04-21 15:14 ` Stefan Monnier
2021-04-25 18:12 ` Lars Ingebrigtsen
2021-04-25 21:03 ` Stefan Monnier
2021-04-27 1:07 ` Lars Ingebrigtsen
2021-04-27 9:54 ` Gregory Heytings
2021-04-27 15:15 ` bug#1305: [External] : " Drew Adams
2021-04-27 23:21 ` Lars Ingebrigtsen
2021-04-28 10:08 ` Stefan Kangas
2021-04-28 13:12 ` Gregory Heytings
2021-04-29 16:50 ` Dmitry Gutov
2021-04-29 19:48 ` Gregory Heytings
2021-04-29 20:17 ` Dmitry Gutov
2021-04-29 21:46 ` Gregory Heytings
2021-04-29 23:23 ` Dmitry Gutov
2021-04-29 23:35 ` bug#1305: [External] : " Drew Adams
2021-04-29 23:52 ` Dmitry Gutov
2021-05-01 7:50 ` Gregory Heytings
2021-05-01 14:13 ` Drew Adams
2021-05-01 16:55 ` Gregory Heytings
2021-05-01 14:28 ` Stefan Monnier
2021-05-01 16:48 ` Gregory Heytings
2021-05-02 10:44 ` Stefan Kangas
2021-04-30 7:09 ` Gregory Heytings
2021-04-30 22:22 ` Dmitry Gutov
2021-04-30 23:19 ` Gregory Heytings
2021-04-30 23:28 ` Dmitry Gutov
2021-05-01 0:00 ` Gregory Heytings
2021-05-01 0:57 ` Dmitry Gutov
2021-05-01 7:50 ` Gregory Heytings
2021-05-01 0:05 ` bug#1305: [External] : " Drew Adams
2021-05-01 1:08 ` Dmitry Gutov
2021-05-01 2:05 ` Drew Adams
2021-04-29 23:36 ` Stefan Monnier
2021-04-30 7:13 ` Gregory Heytings
2021-04-29 22:38 ` Stefan Kangas
2021-04-29 23:11 ` Dmitry Gutov
2021-04-30 6:58 ` Gregory Heytings
2021-04-30 13:08 ` Gregory Heytings
2021-04-30 5:05 ` Eli Zaretskii
2021-04-30 6:51 ` Gregory Heytings
2021-04-30 7:06 ` Eli Zaretskii
2021-04-30 7:27 ` Gregory Heytings
2021-04-30 8:03 ` Eli Zaretskii
2021-04-30 8:41 ` Gregory Heytings
2021-04-21 15:08 ` Dmitry Gutov
2021-04-21 15:18 ` Stefan Monnier
2021-04-21 16:14 ` Gregory Heytings
2021-04-21 17:27 ` Stefan Monnier
2021-04-21 20:26 ` Gregory Heytings
2021-04-21 22:03 ` bug#1305: [External] : " Drew Adams
2021-04-21 14:45 ` Dmitry Gutov
2021-04-21 16:01 ` Gregory Heytings
2021-04-21 17:34 ` Eli Zaretskii
2021-04-21 20:22 ` Gregory Heytings
2021-04-19 12:51 ` Lars Ingebrigtsen
2021-04-19 14:03 ` Stefan Monnier
2021-04-18 15:27 ` bug#1305: [External] : " Drew Adams
2021-04-18 6:30 ` Eli Zaretskii
2021-04-18 11:10 ` Gregory Heytings
2021-04-18 11:38 ` Eli Zaretskii
2021-04-18 15:14 ` bug#1305: [External] : " Drew Adams
2021-04-17 13:16 ` Drew Adams
2021-04-17 16:59 ` Dmitry Gutov
2008-11-10 21:25 ` Xavier Maillard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=192e82f20f5deb690394@heytings.org \
--to=gregory@heytings.org \
--cc=1305@debbugs.gnu.org \
--cc=alan@idiocy.org \
--cc=dgutov@yandex.ru \
--cc=jasonspiro4@gmail.com \
--cc=larsi@gnus.org \
--cc=monnier@iro.umontreal.ca \
--cc=mwd@md5i.com \
--cc=stefan@marxist.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).