cadence’s website.

Some changes will be applied after reloading.
Some changes will be applied after reloading.

Command line computing part 2: Difficulties

About this page

This page was originally published via the Gemini protocol. However, I've also made the contents available on this blog if you don't have a Gemini client. The translation you are reading is not perfect but it should be good enough.

Challenges with command line computing

It turns out that I took a lot of things for granted in a graphical environment that I lost when moving to a console environment. (You might have seen this coming.)

I immediately felt the limitations, not only from the things that I had expected to be inaccessible such as viewing images and videos, but things as basic and everyday as _clicking links in a chat client_ and having them open in a web browser. Often times I would be totally unable to do a task and end up switching to the graphical environment.

Highlighting, copying, and pasting text

This is an incredibly natural task to do in graphical windowed environments - moving the windows around the screen and plopping things between them - and I had not even considered that it was something that I would lose.

If you find a link to a git repository and you wish to clone it, you have to get that URL into the shell somehow in order to use the clone command. If it's pretty short, the easiest approach may be to remember it and then type it out by hand. If you find an interesting quote on a web page, and want to share it on IRC, same deal. The most straightforward approach may be to tile the buffers and type out the quote again by hand.

Some individual applications do support an internal clipboard (like Emacs and its "kill ring"), but these don't allow pasting into other applications such as a regular terminal, so you still can't git clone or share to IRC. (For the Emacs fans yelling at me that Emacs *can* do these, the Emacs log post is coming up soon, okay?!)

You can get increased functionality and cross-application pasting by using a terminal multiplexers, allowing you to grab text from the screen and insert it elsewhere, but this is still an incredibly challenging process. You absolutely have to be a power user to even bother trying this. Moving around a full-screen interface is really tedious, and you have to be careful not to copy any data that rests in columns. tmux does the best it can be adding shortcuts to help you quickly get to the space you want to copy, and it's still challenging. Grabbing a quote to share on IRC or a link to git clone in the terminal *are* possible like this, but only if you're brave enough.

Note that if you're using a terminal emulator instead of the console, you do get the mouse and you can use it to highlight text. The terminal emulator can copy and paste.

Clicking links

This is very similar to the last paragraph. As you might expect, a command line web browser allows you to "click" links which will be opened *in the browser*, but URLs that you find anywhere else simply won't be clickable. You once again have to highlight the URL with tmux and put it into the browser's address bar, or remember the link and retype it.

If you're using a terminal emulator, you can ctrl-click links with the mouse to open them.

Keyboard shortcuts

For historical reasons many shortcuts are not available in the console because they are merged with other keys. For example, Ctrl-Backspace does not delete a word because it actually is interpreted as Ctrl-H. Regular backspace is interpreted as Ctrl-/. Depending on the application, Alt-Backspace might be able to delete a word, but Ctrl-Alt-? is also mapped to this combination. As far as I am aware, shortcuts that use Ctrl cannot know whether Shift is pressed or not, so the entire layer of Ctrl-Shift-... is not available. Thankfully, the function keys are all available and distinct, so if your application allows you to make your own keybinds, definitely take advantage of that freedom.

If you're using a terminal emulator, *some* additional shortcuts are available, but still not the full range of keystrokes supported in a graphical application. Shift-arrows are newly available, but Ctrl-Backspace is still Ctrl-H and Ctrl-Shift-O is still Ctrl-O.

Applications are less intuitive

Applications generally present very few or no menu options and require the user to first learn, then memorise, and finally blindly use all of the shortcuts that they will commonly need.

Here are some examples of this:

tmux

There are no key prompts visible. You can see them if you press `PREFIX ?` but you still have to remember them, exit the help screen, and then blindly enter them and hope it works. If you didn't understand the instructions correctly, you have to go right back to the help screen and find your place again in order to learn more.

Once you have the shortcuts committed to memory, they are fairly quick to activate, all relying on a prefix bind first.

weechat

Again, there are no key prompts visible. You can experiment with slash commands to activate things, and read the commands help text, but in order to do even that you still need to read the new user introduction guide to pick up the critical shortcuts, like for buffer switching.

Let's say you start weechat - which is primarily designed to be an IRC client - and want to connect to a popular IRC server. Here are the *minimum* steps to connect:

  • /server add libera irc.libera.chat/6697 -ssl
  • /set irc.server.libera.nicks "cadence"
  • /set irc.server.libera.username "cadence"

Normally you'd /set the SASL data too in secure storage, but I'm skipping that rat's nest. Onwards to connecting...

  • /connect libera
  • /join #transchat

And now you can use the Alt-[number keys] or Alt-J to change to the right buffer, and start typing.

Reading the user guide is mandatory in order to do this. You are not going to be able to guess these steps or pick them up from the interface.

Experienced users might feel comfortable with weechat after some practice, but I still feel incredibly scared.

links2

Links2 is much more intuitive than the ones I mentioned. There is a menu bar with several critical navigation commands and settings available there. You'll still have to press ? to see the keyboard shortcuts for scrolling, following links, and going back pages, but they are fairly intuitive and you only need to know a small number of them. Accessing the menu bar takes a little time, and shortcuts are available for people who want to activate frequent functions more quickly.

Emacs

It's Emacs. You have a menu bar at the top, but good luck figuring out anything else. Nano beats it in usability but not in features. The menu bar contains thrilling items such as:

  • File > Save As
  • Edit > Replace > Replace String
  • Options > Show/Hide > Battery Status
  • Buffers
  • Tools > Read Net News
  • Help > Emacs Psychotherapist

vim

It's FUCKING VIM.

Midnight Commander

I have barely touched Midnight Commander so far, but it actually looks fantastic. The interface is laid out well and the bottom of the screen has several options which are labeled with the keys that you press to activate them. Pressing the appropriate key either activates the action directly or it opens a new menu containing more clearly labelled options, most of which look pretty helpful.

Great job, Midnight Commander! Hopefully I'll get to write a whole post just about you. :)

Colours

Your terminal emulator might support 256 or even millions of colours, though as far as I can tell, console mode supports just the basic 16. And they aren't very good shades. But it still may be enough for you to get by.

Unicode

Console mode just supports the ASCII base set, as far as I can tell? I haven't investigated this in detail but I do know that esoteric characters and emojis just show up as little blocks. Your terminal emulator should support Unicode, and probably renders it as the correct widths!

Conclusion

Well, that's all for this post. In the next post I'll likely be talking about a specific application that I've been using and provide a cheatsheet of hotkeys you should know. See ya!

— Cadence

A seal on a cushion spinning a globe on its nose.
Another seal. They are friends!