Clear Your Terminal in Style
> If you’re someone like me who habitually clears their terminal, sometimes you want a little excitement in your life. Here is a way to do just that.
Building interactive SSH applications
> Writing interactive SSH applications is actually pretty easy, but it does require some knowledge of the pieces involved and a little bit of general Unix literacy
everything you ever wanted to know about terminals
> the way terminal emulators handle fancy things like color and cursor shape aren’t some mysterious opaque black box you can only access through a library. accessing these capabilities is actually extremely simple; they can even be hardcoded into a text file and displayed by cat or less. or even curl! the way you do this is with something called ANSI escape sequences.
ASCII table and history
> To understand why Control+i inserts a Tab in your terminal you need to understand ASCII, and to understand ASCII you need know a bit about its history and the world it was developed in. Please bear with me (or just go the table).
> Most teleprinters communicated using the ITA2 protocol. For the most part this would just encode the alphabet, but there are a few control codes: WRU (“Who R U”) would cause the receiving teleprinter to send back its identification, BEL would ring a bell, and it had the familiar CR (Carriage Return) and LF (Line Feed).
OpenBSD ttyplot examples
> I said I will rewrite ttyplot examples to make them work on OpenBSD. Here they are, but a small notice before:
Couple caveats, mostly want current.
Interview with Bill Joy
> The following interview is taken from the August 1984 issue of Unix Review magazine.
A lot of text editor history here, featuring of course, vi.
> I think it killed the performance on a lot of the systems in the Labs for years because everyone had their own copy of it, but it wasn’t being shared, and so they wasted huge amounts of memory back when memory was expensive. With 92 people in the Labs maintaining vi independently, I think they ultimately wasted incredible amounts of money. I was surprised about vi going in, though, I didn’t know it was in System V. I learned about it being in System V quite a while after it had come out.
Plus some commentary on other topics.
> The point is that you want to have a system that is responsive. You don’t want a car that talks to you. I’ll never buy a car that says, “Good morning.” The neat thing about UNIX is that it is very responsive. You just say, “A pipe to B” - it doesn’t blather at you that “execution begins,” or “execution terminated, IEFBR14.”
> The trouble is that UNIX is not accessible, not transparent in the way that Interleaf is, where you sit down and start poking around in the menu and explore the whole system. Someone I know sat down with a Macintosh and a Lisa and was disappointed because, in a half hour, he explored the whole system and there wasn’t as much as he thought. That’s true, but the point is in half an hour, almost without a manual you can know which button to push and you can find nearly everything. Things don’t get lost. I think that’s the key.
fern: a curses-based mastodon client
> modeled off usenet news readers & pine, with an emphasis on getting to ‘timeline zero’
> Put this in your .tmux.conf on both the local and the remote machines. You will have to edit it a bit if you have your keys mapped differently. Operation goes like this: press Shift-Up and you will be controlling the inner (remote) tmux, press Shift-Down to control the outer one.
Cidco MailStation as a Z80 Development Platform
> The Cidco MailStation is a series of dedicated e-mail terminals sold in the 2000s as simple, standalone devices for people to use to send and receive e-mail over dialup modem. While their POP3 e-mail functionality is of little use today, the hardware is a neat Z80 development platform that integrates a 320x128 LCD, full QWERTY keyboard, and an internal modem.
> A quine that plays snake over its own source!
What I Learnt Building a Lobsters TUI in Rust
> As a learning and practice exercise I built a crate for interacting with the Lobsters programming community website. It’s built on the asynchronous Rust ecosystem. To demonstrate the crate I also built a terminal user interface (TUI).
The Squeal of Data
> My favorite sound in computing is one that I haven’t actually had to use on a computer in nearly 20 years. The modem was a connection to a world outside of my own, and to get that connection required hearing the sounds of a loud, abrasive handshake that could easily be mistaken for Lou Reed’s Metal Machine Music. I’d like to compare it to another kind of sound for a little bit—the noise of a “straight key” used for a telegraph. Both technologies, despite more than a century in age difference, seemingly turned data into sound, then into electrical pulses, and back into sound again. It’s no wonder, then, that you can actually trace the roots of the modem back to the telegraph, and later the teletype machine. Data and wires, simply put, go way back. And it’s not the only example of the telegraph’s quiet influence on modern computing. Today’s Tedium draws a line between the modern computer and the pulses that inspired it.
default to OXTABS off
> Almost all terminals now support hardware tabs so default to OXTABS off.
The future is here!
Richer command line interfaces
> This post is preceded by a description of two types of command line interfaces. The more command line-like of these two types integrates into a normal shell session (python, telnet, bash) instead of using the alternate screen to present a fullscreen text user interface (top, vim, emacs). Sometimes programs blur this boundary with fancy formatting in a line-oriented command line interface, carefully avoiding overwriting previous user inputs and command outputs. On-keystroke autocompletion, multiline editing, inline documentation and syntax highlighting can be implemented with these techniques, making command line interfaces more useful.
I think this is trending towards dangerously fragile, but it’s still good information.
Tig: text-mode interface for Git
> Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands.
kitty - the fast, featureful, GPU based terminal emulator
> kitty is designed for power keyboard users. To that end all its controls work with the keyboard (although it fully supports mouse interactions as well). Its configuration is a simple, human editable, single file for easy reproducibility (I like to store configuration in source control).
> The code in kitty is designed to be simple, modular and hackable. It is written in a mix of C (for performance sensitive parts) and Python (for easy hackability of the UI). It does not depend on any large and complex UI toolkit, using only OpenGL for rendering everything.
> Finally, kitty is designed from the ground up to support all modern terminal features, such as unicode, true color, bold/italic fonts, text formatting, etc. It even extends existing text formatting escape codes, to add support for features not available elsewhere, such as colored and styled (curly) underlines. One of the design goals of kitty is to be easily extensible so that new features can be added in the future with relatively less effort.
The other kind of "flash" that we used to worry about
> If you’re now thinking “hey, I bet I could use that to put random crap on the screen of the other person by crafting my own talk request packet”, you’re on the right track. Your chat request to the other person specified details of how they were to connect back to you. What if you supplied utter garbage?
> MinaOTP-Shell is a two-factor authentication tool that runs in a terminal as a command-line tool.
Windows Command-Line: Introducing the Windows Pseudo Console (ConPTY)
> In this, the fourth post in the Windows Command-Line series, we’ll discuss the new Windows Pseudo Console (ConPTY) infrastructure and API - why we built it, what it’s for, how it works, how to use it, and more.
Hidden gems of xterm
A setting for every config and a config for every setting.