[Geany-Devel] VTE resetting and handling of ^C and ^D

Lex Trotman elextr at gmail.com
Tue Dec 4 22:36:51 UTC 2012

On 5 December 2012 09:18, Colomban Wendling <lists.ban at herbesfolles.org> wrote:
> Hey,
> When looking to the VTE code to fix focusing upon middle click, I also
> dig into the long-running problems we have on dealing with ^C and ^D.
> First, we try to kill the child (the shell we launched) using SIGINT,
> but neither BASH nor DASH seem to honor them this way, so we actually
> only reset the view, thus leading to report like:
>  *
> https://sourceforge.net/tracker/index.php?func=detail&aid=2623225&group_id=153444&atid=787791
> (I think improperly marked as fixed)
>  *
> https://sourceforge.net/tracker/index.php?func=detail&aid=3518151&group_id=153444&atid=787791
> You can check it if you want, either by sending SIGINT to a
> manually-launched BASH or by checking whether the pid actually quit.
> Anyway, you'll see nothing gets killed.
> So, I propose to replace this by a SIGHUP.  I attached a patch that does
> it, and it works;  but I'm not 100% sure if it's OK to do so, although I
> don't see much problem with it.

Doesn't this screw up child processes that do something on sigint,
since they won't get it now?

> Patch is 0001-VTE-Fix-killing-the-child.patch.
> The other problem is that we reset the terminal upon ^C -- and worse,
> upon ^D.  OK, ^C is used to send SIGINT to the running child, which
> generally result in it exiting.  But first, one generally expect it to
> only kill the running child [1], and not the terminal itself; and this
> is important e.g. if the user still want to read the output (e.g. if a
> program went wild, it may still have output useful errors).  And then,
> legitimate programs handle SIGINT somewhat gracefully -- the excessive
> example being Nano which uses ^C as a shortcut.
> So, I don't think ^C should reset the terminal/kill the shell, but
> rather be handled by the shell.

agreed, what happens if we actually send it to the shell?

> Now ^D.  An user expects ^D to send EOF to the stdin of the running
> child, whatever this might mean to that child;  not to behave like ^C
> and certainly not to reset the terminal/kill the shell.

Agreed as well.

> So, to summarize, I think it's important that both ^C and ^D end up
> being handled by the shell we run in the VTE, and not by us vainly
> trying to do something that looks like almost not so bad.
> I search a bit how I could forward ^C and ^D to the VTE child, and
> didn't find much in the VTE docs;  but Wikipedia told me that ASCII ETX
> and EOT were commonly respectively used to mean ^C and ^D for UNIX
> terminals [2] [3].  And indeed, sending those using
> `vte_terminal_feed_child()` seems to work just fine.  I however don't
> know how portable/reliable this is, so I ask for your knowledge and
> opinion here.

This vaguely triggers a memory of a previous discussion on this topic,
but I don't have time just now to search for it.

> Attached patch is
> 0002-VTE-Really-send-C-and-D-to-the-terminal-rather-than-.patch.
> Ah, and note that one can still reset the terminal like before through
> the context menu.
> So, have you opinions, ideas, remarks, something to say?  Looking
> forward to read you on the subject :)

Can you get any ideas from what the various terminal emulators that
use VTE do with these keycodes etc?


> Regards,
> Colomban
> [1] and here we speak of the shell's child, not the VTE child which is
> the shell.
> [2] https://en.wikipedia.org/wiki/End-of-text_character
> [3] https://en.wikipedia.org/wiki/End-of-transmission_character
> _______________________________________________
> Devel mailing list
> Devel at lists.geany.org
> https://lists.geany.org/cgi-bin/mailman/listinfo/devel

More information about the Devel mailing list