unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
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


  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).