Subject: bug#21652: bell chars

From: Tom Baker <[email-masked]>
Date: Sat, 15 Aug 2020 21:10:35 -0400

First the use case -- One has a number of things to do, in a limited
amount of time. Using the command shell in emacs, give the first in a
series of commands, one that will take a long time; after it finishes
successfully, another command should be given; if it fails, it should
be corrected and run again. And while it runs for a long time, one
wants to be doing something else.  So one arranges for an "echo
control-G" command to make the thing beep when it is done, so one
doesn't have to sit and watch the thing run through the command,
watching for the first command to finish.

I wrote this because I have a history of setting one command going,
then going off to do something else, and then remembering an hour
later "is that command done yet?" and looking to see that it finished
a half hour before.

Second -- I have little trouble withdrawing the suggestion, because
the "shelisp" package is a more suitable implementation of my use
case. The idea of an advice got to be a little sloppy of an
implementation because the sound would come put before the call, or
after the call, and not synchronized with the other characters.

Thanks for your volunteer work in maintaining the emacs software!

On 8/15/20, Stefan Kangas <[email-masked]> wrote:
> Tom Baker <[email-masked]> writes:
>
>> I have a real need to have my command shells beep at me when their work is
>> done, so I set it up so beeps are passed to the
>> host system.
>>
>> In the function comint-carriage-motion I alter
>>
>> (defun comint-carriage-motion (start end)
>>   "Interpret carriage control characters in the region from START to END.
>> Translate carriage return/linefeed sequences to linefeeds.
>> Make single carriage returns delete to the beginning of the line.
>> Make backspaces delete the previous character."
>>
>> to say
>>
>> (defun comint-carriage-motion (start end)
>>   "Interpret carriage control characters and bells in the region from
>> START to END.
>> Translate carriage return/linefeed sequences to linefeeds.
>> Make single carriage returns delete to the beginning of the line.
>> Make backspaces delete the previous character. Pass bells through."
>>
>> and the code chunk
>>
>>                 (cond ((= ch ?\b)                  ; CH = BS
>>                        (delete-char 1)
>>                        (if (> (point) lbeg)
>>                                    (delete-char -1)))
>>                       ((= ch ?\n)
>>                        (when delete-end            ; CH = LF
>>                                 (if (< delete-end (point))
>>                                      (delete-region lbeg delete-end))
>>                                 (set-marker delete-end nil)
>>                                 (setq delete-end nil))
>>                        (forward-char 1)
>>                        (setq lbeg (point)))
>>                       (t                            ; CH = CR
>>
>> changed to
>>
>>                 (cond ((= ch ?\b)            ; CH = BS
>>                        (delete-char 1)
>>                        (if (> (point) lbeg)
>>                                    (delete-char -1)))
>>                       ((= ch ?\n)
>>                        (when delete-end      ; CH = LF
>>                                 (if (< delete-end (point))
>>                                      (delete-region lbeg delete-end))
>>                                 (set-marker delete-end nil)
>>                                 (setq delete-end nil))
>>                        (forward-char 1)
>>                        (setq lbeg (point)))
>>                       ((= ch ?\a)
>>                        (forward-char 1)
>>                        (ding)
>>                        (sit-for 0.45 t))      ; CH = BL
>>                       (t                      ; CH = CR
>
> So the difference here is that you would like to add a call to (ding)?
> I'm not sure the addition you propose is suitable for general use.
>
> Perhaps you could explain the use-case here in a bit more detail?  For
> example, why can't you just add an advice to the function in question?
>
> Best regards,
> Stefan Kangas
>