Closed vi closed 1 year ago
Thank you for reporting this. This should be easy to fix, yes.
Reproducible in multiple terminal emulators. Consistenly nice only in linux text terminal.
This is what ctrl-c looks like on Mac OS X
If somebody has an idea how to fix this, let me know.
Well, part of the problem is synchronous handling of ctrl+c. If you move process exit into the handler, the situation improves. I'm not sure what's actually safe to be called from a signal handler in Rust though (normally described in: man 7 signal-safety).
It's still a bit of a problem, I assume because of stdout buffering. May need some uglier tricks to work around (setbuf?).
A possibly related issue is that on MacOS, when running hexyl without any input the application can't be terminated. Like this:
This is with hexyl 0.6.0 on MacOS 10.14.6
@secworks That looks like a different bug to me (much less esoteric than this one; thank you for reporting it). It would be great if you could create a new ticket.
With the changes in #84, this is now open again. In my terminal and on zsh
, this is not an issue. But apparently it causes problems in some terminal/shell combinations.
@sharkdp Have you tried using alternative buffer when opening the application ?
The smcup
/ rmcup
capability of the terminal ?
Using an alternative buffer would mean that you have to handle scrolling yourself and you can't see the output anymore after you exit hexyl
.
I guess the only other thing i can think of is disabling echo and reenabling it after quitting, but you probably already did that right?
I'm not sure what that means?
echo is when you press a key it displays on the terminal, but i think it is already disabled otherwise any key would be visible on a press
Echo is enabled. I can still type stuff while I run cat /dev/zero | pv -q -L 16 | hexyl
(read zeros at a rate of 16 bytes per second)
@bjorn3 You are right
I've been able to test it with little bash (does not work on zsh)
orig=$(stty -g)
stty -echo
hexyl /dev/urandom
stty $orig
And it doesnt show the ^C
anymore
I'm closing this due to inactivity. And because I can not reproduce this on my machine. Please feel free to comment in case it should be re-opened.
It should probably handle SIGINT and terminate the output as if it was EOF (but maybe with some mark):