Hacker News new | past | comments | ask | show | jobs | submit login

> reset should be a last resort. If you need to use it then something else has gone wrong and thats what needs to be fixed.

Er, my comment was exaggerative? (edit: fixed typo)

I use reset all the time, it's not "last resort" by any means. It... clears the screen and scrollback buffer. If you're the kind of person who keeps 150 tabs open then I guess I can see why you wouldn't see the value in cleaning the screen up frequently, but clearing the terminal is a pretty frequent and useful operation for other folks.




Fwiw parent comment currently says exaggerative, not aggressive.

Why wouldn't you use "clear" for that, or Ctrl+L? "reset" does a lot more, you use it when you've accidentally written a binary to your terminal and triggered a bunch of terminal modes.

I guess clear wouldn't clear the scroll buffer, is that the main reason?


> I guess clear wouldn't clear the scroll buffer, is that the main reason?

Yes. See sibling replies.


I think that's a libvte pecularity (used among others by the Gnome and XFCE terminal emulators), which upon entering <clear> (or pressing CTRL+L) just scrolls up until the screen seems to be empty. Make sure you set terminfo correctly, ie. E3=ED3, so that it clears the text and scroll buffer.

On any non-libvte using terminal emulator, eg. xterm, you can use CTRL+L to clear the text area and ALT+CTRL+L to clear the text area and the scroll buffer.


My Gnome terminal only scrolls on CTRL+L or CTRL+ALT+L but it actually clears the buffer after the clear command.


Yay, another irregular behaviour! If you are interested in a history of weird behaviours, take a look at https://invisible-island.net/xterm/xterm.faq.html#bug_gnomet... ;)


If you need reset(1) to clear the screen and scrollback buffer all the time (it shouldn’t clear the buffer btw, don’t know why you think it does if you really do it all the time), consider using your terminal emulator’s native keyboard shortcut, it’s faster to type, faster to run, you can do it at any time without the shell yielding control back to you, and it doesn’t pollute the shell history.

If your terminal emulator doesn’t even have that, I suggest switching to a better one.

I hope you realize you’re doing something really suboptimal here.

Edit: Saw your other comment and apparently you don’t even use reset(1), just your own function (which is still suboptimal like I said). WTF is with all the arguing then.


> Er, my comment was aggressive?

No it wasn’t. But I also said exaggerative not aggressive.

> I use reset all the time, it's not "last resort" by any means. It clears the screen.

That’s what ‘clear’ is for.

Reset is intended to do more than just clear the screen. It’s intended to reset, as the name suggests, the entire terminal. The idea being it’s got itself into some kind of unknown state.

There are hot keys to clear your screen too, such as ctrl+L (works in most shells) plus your terminal emulator will likely have its own hot keys too. So fewer button presses and even quicker for you.


Clearing just the screen without the scrollback history is pretty damn useless and in fact outright frustrating. It boggles my mind people read "clear the screen" and think "oh, surely he doesn't want to clear the scrollback buffer". You have to realize, a command for that is so close to useless it doesn't even exist as a separate operation on Windows. Over there, cls ("CLear Screen") does both and is incredibly handy. And on the incredibly rare occasions when I actively want to keep the scrollback buffer (read: like once every 2 months, tops?), I can already do that much more intuitively by scrolling down or holding Enter for 3 seconds. I don't need a separate command for it any more than I need a separate command to scroll down.


`reset` doesn't even clear the scrollback buffer on all terminal emulators. In fact there's no formal specification for how scrollback buffers should behave because they're a modern incantation. Take iTerm2, this is what happens when I run `reset` and then scroll up:

    lmorg ~ % reset
    
    lmorg ~ % reset
    
    lmorg ~ % which reset
    /usr/bin/reset
    lmorg ~ %
You might find the ANSI escape code for reset, {ESC}c, does what you need:

    function reset {
        printf '\033c'
    }
The above code should work on sh, Bash, Zsh, Oil and Murex.


> You might find the ANSI escape code for reset, {ESC}c, does what you need:

See https://news.ycombinator.com/item?id=39638794


If you've already got a working solution then I don't see why this is problem. The way you've conversed in this thread sounds like it's a daily annoyance for you.


It was one for several years, until I solved it like this. It was such an unnecessary waste of my time. And it would not have taken nearly that long if everyone's response to "how to clear the terminal on Linux" on Google wasn't "clear" or "Ctrl+L".


Your idiosyncratic opinion what "clear" means doesn't make the answers wrong. "clear" clears the terminal. If you'd asked what you meant, ie. "how to clear the terminal screen and scroll buffer on Linux" you'd might have found ALT+CTRL+L which does what you want on most terminal emulators. Or you could have read the man page https://man7.org/linux/man-pages/man1/clear.1.html and found that the E3 property is what you want to know about.


> Your idiosyncratic opinion what "clear" means

What? This is not my idiosyncratic opinion. This is literally what cls ("CLear Screen") does on Windows.


I may be mistaken, but aren't you the one complaining that "clear" only clears the screen area and not the scroll buffer on libvte terminals? Or are you complaining that a different command on a different operating system does something different than a similar sounding command on another operating system with a command that sounds like it would only clear the screen but actually does clear the scroll buffer, too?

By the way, did you know that up to and including some versions of MS Windows 10 "clear" in Powershell only cleared the screen, as did "cls" in cmd.com. Considering the name, that would actually be what I expect "cls" to do, but I digress. Since some later MS Windows 10 versions or the very least, MS Windows 11, Powershell and cmd.com do clear the screen and the scroll buffer on "clear" or "cls". That's due to newer versions of ConPTY.

Anyway, it was fun digging out this old knowledge. Thank you.


Googles response is correct though. The scroll back is a “new” concept introduced by terminal emulators. It’s not something that ever existed in hardware terminals or even early pseudo-terminals (like the default console Linux drops you into if you don’t have a GUI installed). It’s just something that desktop software added.

Because of this, there isn’t really any standardisation for how scrollback should work. Every terminal could implement it differently (albeit in practice there isn’t a whole lot of variation one can do to such a simple concept). So support for how you clear your scrollback is going to vary from one terminal emulator to another. As I demonstrated in an earlier comment with ‘reset’ not clearing the scrollback on one terminal in macOS.

Really there should be a dedicated ANSI escape code for doing this. There’s a few different codes for clearing the terminal already, one extra wouldn’t do any harm there. Plus xterm has already introduced the concept of bespoke codes for application terms like window title (something other terms have expanded on with codes to move the terminal window).

In fact, I’m going to create a code for just this and implement it in my own terminal emulator and others are welcome to adopt this as a new de facto standard if they wish.

Anyway, that’s the history of why you had such a hard time. None of this is intended to justify the status quo, and I do accept that this is all a bit frustrating to newcomers. But as I said before, I don’t agree the solution is to change the purpose of ‘reset’. Instead terminal emulators should be supporting new functionality to manage something that they added to the paradigm — and to be fair, most terminal emulators already do.


> It’s not something that ever existed in hardware terminals or even early pseudo-terminals (like the default console Linux drops you into if you don’t have a GUI installed).

FWIW, the default Linux console had scrollback until a few years ago when it was removed in Linux 5.9.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...


I did not know that. Thanks for the share.

Linus' comments on that commit are interesting to note too. Because, in my opinion, they add weight to the comments made on here regarding the annoying non-standardised complexities to terminal scrollback.

I think that is the real problem here.


There is an escape code that does clear screen and scrollback invented by xterm \e3J. And kitty invented one that clears screen into scrollback \e22J. https://sw.kovidgoyal.net/kitty/conf/#shortcut-kitty.Reset-t...


Thanks for sharing. I’ll add that to my own $TERM


If you only need to clear the screen, you may want to check out clear(1).


I literally edited my comment just before you said this because I suddenly realized someone was going to say this. No, the point is never just the "screen". The point is the whole buffer including the screen. Clearing just the screen is pretty useless to me, I might as well just scroll down or hold Enter for 3 seconds.


My terminal emulator of choice, WezTerm, has this feature built in [1], so there's no need for using `reset`. Perhaps your terminal emulator has something like it, too?

[1] https://wezfurlong.org/wezterm/config/lua/keyassignment/Clea...


Why in the world would I do that when I can just redefine reset and have it work from every terminal?!


Hah :)

You could try echo -ne '\ec' or echo -ne '\033c'. Or this from bash/readline:

  clear-display (M-C-l)
          Clear  the  screen  and,  if possible, the terminal's scrollback buffer, then redraw the current line, leaving the current line at the top of the screen.
But yea, this might depend on terminal as well


I'm aware, I already have

  reset() { clear && printf '\33c'; }


> Clearing just the screen is pretty useless to me, I might as well just scroll down or hold Enter for 3 seconds.

I actually do that a lot, when I'm done with a terminal window for now but want the scrollback to stay there. ctrl-L to send a pagebreak is what I usually do, or typing something aliased to `clear`.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: