<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tim's blog (Posts about accessibility)</title><link>https://blog.thechases.com</link><description></description><atom:link href="https://blog.thechases.com/categories/accessibility.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2025 &lt;a href="mailto:blog@tim.thechases.com"&gt;Tim Chase&lt;/a&gt; </copyright><lastBuildDate>Thu, 02 Oct 2025 19:32:44 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Setting up a terminal screen-reader on OpenBSD</title><link>https://blog.thechases.com/posts/bsd/setting-up-a-terminal-screen-reader-on-openbsd/</link><dc:creator>Tim Chase</dc:creator><description>&lt;p&gt;
 This post walks through installing the screen-reader
 &lt;code&gt;yasr&lt;/code&gt;
 and configuring it to use
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 with a
 &lt;abbr title="text to speech"&gt;TTS&lt;/abbr&gt;
 engine.
&lt;/p&gt;

&lt;!-- TEASER_END --&gt;

&lt;p&gt;
 This assumes you have successfully installed a stock OpenBSD system
 and that your user has
 &lt;kbd&gt;doas&lt;/kbd&gt;
 access to install software.
&lt;/p&gt;

&lt;h2&gt;Install required packages&lt;/h2&gt;
&lt;p&gt;
 First, install the requisite packages from the repos:
&lt;figure&gt;
&lt;pre&gt;
$ doas pkg_add speech-dispatcher espeak flite
&lt;/pre&gt;
&lt;/figure&gt;
 The
 &lt;code&gt;flite&lt;/code&gt;
 package is optional,
 but can provide you with an alternate set of voices.
&lt;/p&gt;

&lt;p&gt;
 Currently
 &lt;code&gt;yasr&lt;/code&gt;
 isn't available as an OpenBSD package,
 but it's fairly easy to install.
 You should be able to obtain
 the source code from the
 &lt;a href="https://github.com/mgorse/yasr"&gt;
 &lt;code&gt;yasr&lt;/code&gt;
 source repository&lt;/a&gt;.
&lt;/p&gt;&lt;pre&gt;
&lt;label class="user"&gt;$ &lt;/label&gt; git clone https://github.com/mgorse/yasr
&lt;/pre&gt;
 and to build it
&lt;figure&gt;
&lt;pre&gt;
$ cd yasr/yasr
$ make
&lt;/pre&gt;
&lt;/figure&gt;
 At some point, hopefully
 &lt;code&gt;yasr&lt;/code&gt;
 will be in the package repositories,
 making it as easy as
 &lt;kbd&gt;pkg_add yasr&lt;/kbd&gt;.


&lt;h2&gt;Ensure that sound works&lt;/h2&gt;
&lt;p&gt;
 If you haven't already,
 make sure that your OpenBSD box can play audio.
 You can check this by using 
&lt;figure&gt;
&lt;pre&gt;
$ aucat -i &lt;var&gt;somefile.wav&lt;/var&gt;
&lt;/pre&gt;
&lt;/figure&gt;
 If you don't have any
 &lt;code&gt;.wav&lt;/code&gt;
 files on your machine,
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 provides
 &lt;code&gt;/usr/local/share/sounds/speech-dispatcher/test.wav&lt;/code&gt;
 so
&lt;figure&gt;
&lt;pre&gt;
aucat -i /usr/local/share/sounds/speech-dispatcher/test.wav
&lt;/pre&gt;
&lt;/figure&gt;
 should play a short flourish.
 If it is too quiet,
 use
 &lt;a href="https://man.openbsd.org/mixerctl.1"&gt;
 &lt;code&gt;mixerctl&lt;/code&gt;
 &lt;/a&gt;
 to set the volume
 or try
 &lt;a href="https://www.openbsd.org/faq/faq13.html"&gt;
 additional OpenBSD audio troubleshooting
 &lt;/a&gt;
 techniques.
&lt;/p&gt;

&lt;h2&gt;Set up &lt;code&gt;speech-dispatcher&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;
 To create a user configuration file in
 &lt;code&gt;~/.config/speech-dispatcher/&lt;/code&gt;
 use
&lt;figure&gt;
&lt;pre&gt;
$ spd-conf
&lt;/pre&gt;
&lt;/figure&gt;
 with the default output of "espeak"
 (you can later try changing this to "flite"
 but I leave that as an exercise for the reader)
 and output via
 &lt;code&gt;libao&lt;/code&gt;.
 You can also set the default output speed.
 I prefer it a little faster than the default
 but it might be good to start with the default
 and then tune it later.
 As you configure,
 it should offer you the option to run some tests.
 If you choose "yes" for the first test,
 you should hear
 "Speech dispatcher works."
 I recommend skipping the other tests.
 With this in place, you should now have a
 &lt;code&gt;~/.config/speech-dispatcher/&lt;/code&gt;
 directory with various configuration settings within.
&lt;/p&gt;

&lt;p&gt;
 The
 &lt;code&gt;yasr&lt;/code&gt;
 screen-reader requires 
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 to listen on an inet socket
 rather than a
 Unix socket,
 so edit the config file with your favorite text editor
 and uncomment/change the CommunicationMethod from
 "unix_socket"
 to
 "inet_socket"
&lt;figure&gt;
&lt;pre&gt;
$ ed ~/.config/speech-dispatcher/speechd.conf
&lt;kbd&gt;/CommunicationMethod.*unix_socket&lt;/kbd&gt;
&lt;kbd&gt;a
CommunicationMethod "inet_socket"
.
&lt;/kbd&gt;
wq
&lt;/pre&gt;
&lt;/figure&gt;
 This does open a local port (6560)
 allowing other processes on the same machine
 to connect to
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 just so you're aware.
 If you choose to change the port,
 just make sure to also change it in the
 &lt;code&gt;yasr&lt;/code&gt;
 configuration later.
&lt;/p&gt;

&lt;h2&gt;Configure &lt;code&gt;yasr&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;
 Copy the default
 &lt;code&gt;yasr&lt;/code&gt;
 configuration file for modification:
&lt;figure&gt;
&lt;pre&gt;
$ cp ~/tmp/yasr-0.6.9/yasr.conf ~/.yasr.conf
&lt;/pre&gt;
&lt;/figure&gt;
 Make the following changes:
 &lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;
   Comment out all the
   &lt;code&gt;synthesizer=…&lt;/code&gt;
   lines except the
   &lt;code&gt;synthesizer=speech dispatcher&lt;/code&gt;
   line, uncommenting that one
  &lt;/li&gt;
  &lt;li&gt;
   Uncomment the
   &lt;code&gt;synthesizer port=127.0.0.1:6560&lt;/code&gt;
   line
  &lt;/li&gt;
  &lt;li&gt;
   Set the
   &lt;code&gt;shell=…&lt;/code&gt;
   to your preferred shell.
   OpenBSD doesn't install
   &lt;code&gt;bash&lt;/code&gt;
   at
   &lt;code&gt;/bin/bash&lt;/code&gt;
   so you'll either want to use
   &lt;code&gt;/bin/ksh&lt;/code&gt;
   or,
   (if you have
   &lt;code&gt;bash&lt;/code&gt;
   installed)
   &lt;code&gt;/usr/local/bin/bash&lt;/code&gt;,
   or your preferred default shell.
  &lt;/li&gt;
 &lt;/ul&gt;
 You can change other aspects of
 &lt;code&gt;yasr&lt;/code&gt;
 in here,
 but for now,
 leave the defaults.


&lt;h2&gt;Testing&lt;/h2&gt;
&lt;p&gt;
 It took me a bit to figure out that
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 listens for a connection but times-out
 (by default, 5 seconds)
 and then quits.
 So you need to invoke it and then immediately launch
 &lt;code&gt;yasr&lt;/code&gt;
&lt;figure&gt;
&lt;pre&gt;
$ speech-dispatcher &amp;amp;&amp;amp; ~/tmp/yasr-0.6.9/yasr/yasr
&lt;/pre&gt;
&lt;/figure&gt;
 If all is working successfully
 it should start
 &lt;code&gt;yasr&lt;/code&gt;
 and you should hear it read your prompt.
&lt;/p&gt;

&lt;h2&gt;Getting started with &lt;code&gt;yasr&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;
 The
 &lt;code&gt;~/.yasr.conf&lt;/code&gt;
 file lists all of the keyboard commands
 for both normal/interactive mode
 (the default)
 and for review mode.
 Keys are given by ASCII value written in hex.
&lt;/p&gt;
&lt;table&gt;
 &lt;caption&gt;Normal/interactive mode commands&lt;/caption&gt;
 &lt;thead&gt;
  &lt;tr&gt;
   &lt;th&gt;Hex value(s)&lt;/th&gt;
   &lt;th&gt;Keyboard command&lt;/th&gt;
   &lt;th&gt;Action&lt;/th&gt;
  &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
  &lt;tr&gt;&lt;td&gt;0x01&lt;/td&gt;&lt;td&gt;Ctrl+A&lt;/td&gt;&lt;td&gt;say cursor&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x0c&lt;/td&gt;&lt;td&gt;Ctrl+L&lt;/td&gt;&lt;td&gt;say line&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x0e&lt;/td&gt;&lt;td&gt;Ctrl+N&lt;/td&gt;&lt;td&gt;bypass&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x18&lt;/td&gt;&lt;td&gt;Ctrl+X&lt;/td&gt;&lt;td&gt;flush&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b0b&lt;/td&gt;&lt;td&gt;Ctrl+Alt+K&lt;/td&gt;&lt;td&gt;keyboard wizard&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b0f&lt;/td&gt;&lt;td&gt;Ctrl+Alt+O&lt;/td&gt;&lt;td&gt;options menu&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b13&lt;/td&gt;&lt;td&gt;Ctrl+Alt+S&lt;/td&gt;&lt;td&gt;write configuration&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b30&lt;/td&gt;&lt;td&gt;Alt+0&lt;/td&gt;&lt;td&gt;say line:256&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b62&lt;/td&gt;&lt;td&gt;Alt+b&lt;/td&gt;&lt;td&gt;say character:-1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b63&lt;/td&gt;&lt;td&gt;Alt+c&lt;/td&gt;&lt;td&gt;say character&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b64&lt;/td&gt;&lt;td&gt;Alt+d&lt;/td&gt;&lt;td&gt;say word&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b65&lt;/td&gt;&lt;td&gt;Alt+e&lt;/td&gt;&lt;td&gt;read cursor to bottom&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b69&lt;/td&gt;&lt;td&gt;Alt+i&lt;/td&gt;&lt;td&gt;reinitialize&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b6b&lt;/td&gt;&lt;td&gt;Alt+k&lt;/td&gt;&lt;td&gt;say line:-1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b6c&lt;/td&gt;&lt;td&gt;Alt+l&lt;/td&gt;&lt;td&gt;say line&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b6d&lt;/td&gt;&lt;td&gt;Alt+m&lt;/td&gt;&lt;td&gt;say line:1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b72&lt;/td&gt;&lt;td&gt;Alt+r&lt;/td&gt;&lt;td&gt;toggle review mode&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b74&lt;/td&gt;&lt;td&gt;Alt+t&lt;/td&gt;&lt;td&gt;read top to cursor&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b77&lt;/td&gt;&lt;td&gt;Alt+w&lt;/td&gt;&lt;td&gt;read screen&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b78&lt;/td&gt;&lt;td&gt;Alt+x&lt;/td&gt;&lt;td&gt;flush:1&lt;/td&gt;&lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
 When you enter review-mode,
 commands go to
 &lt;code&gt;yasr&lt;/code&gt;
 directly instead of being passed to the application.
&lt;/p&gt;&lt;p&gt;

&lt;/p&gt;&lt;table&gt;
 &lt;caption&gt;Review-mode commands&lt;/caption&gt;
 &lt;thead&gt;
  &lt;tr&gt;
   &lt;th&gt;Hex value(s)&lt;/th&gt;
   &lt;th&gt;Keyboard command&lt;/th&gt;
   &lt;th&gt;Action&lt;/th&gt;
  &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
  &lt;tr&gt;&lt;td&gt;0x20&lt;/td&gt;&lt;td&gt;space&lt;/td&gt;&lt;td&gt;say review cursor&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x24&lt;/td&gt;&lt;td&gt;$&lt;/td&gt;&lt;td&gt;end of line&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x28&lt;/td&gt;&lt;td&gt;(&lt;/td&gt;&lt;td&gt;previous paragraph&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x29&lt;/td&gt;&lt;td&gt;)&lt;/td&gt;&lt;td&gt;next paragraph&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x3c&lt;/td&gt;&lt;td&gt;&amp;lt;&lt;/td&gt;&lt;td&gt;search back&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x3e&lt;/td&gt;&lt;td&gt;&amp;gt;&lt;/td&gt;&lt;td&gt;search forward&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x5e&lt;/td&gt;&lt;td&gt;^&lt;/td&gt;&lt;td&gt;beginning of line&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x60&lt;/td&gt;&lt;td&gt;`&lt;/td&gt;&lt;td&gt;ascii&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x62&lt;/td&gt;&lt;td&gt;b&lt;/td&gt;&lt;td&gt;say character:-1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x63&lt;/td&gt;&lt;td&gt;c&lt;/td&gt;&lt;td&gt;say character&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x65&lt;/td&gt;&lt;td&gt;e&lt;/td&gt;&lt;td&gt;read cursor to bottom&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x66&lt;/td&gt;&lt;td&gt;f&lt;/td&gt;&lt;td&gt;find&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x6a&lt;/td&gt;&lt;td&gt;j&lt;/td&gt;&lt;td&gt;say line:1:0&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x6b&lt;/td&gt;&lt;td&gt;k&lt;/td&gt;&lt;td&gt;say line:-1:0&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x6c&lt;/td&gt;&lt;td&gt;l&lt;/td&gt;&lt;td&gt;say line&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x6d&lt;/td&gt;&lt;td&gt;m&lt;/td&gt;&lt;td&gt;say line:1:0&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x6e&lt;/td&gt;&lt;td&gt;n&lt;/td&gt;&lt;td&gt;bypass&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x74&lt;/td&gt;&lt;td&gt;t&lt;/td&gt;&lt;td&gt;read top to cursor&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x76&lt;/td&gt;&lt;td&gt;v&lt;/td&gt;&lt;td&gt;set option:6&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x77&lt;/td&gt;&lt;td&gt;w&lt;/td&gt;&lt;td&gt;read screen&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x78&lt;/td&gt;&lt;td&gt;x&lt;/td&gt;&lt;td&gt;say word:1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x7a&lt;/td&gt;&lt;td&gt;z&lt;/td&gt;&lt;td&gt;say word:-1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b73&lt;/td&gt;&lt;td&gt;Alt+s&lt;/td&gt;&lt;td&gt;set option:5&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b5b41&lt;/td&gt;&lt;td&gt;Up arrow&lt;/td&gt;&lt;td&gt;say line:-1:1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b5b42&lt;/td&gt;&lt;td&gt;Down arrow&lt;/td&gt;&lt;td&gt;say line:1:1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b5b44&lt;/td&gt;&lt;td&gt;Left arrow&lt;/td&gt;&lt;td&gt;say character:-1&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0x1b5b43&lt;/td&gt;&lt;td&gt;Right arrow&lt;/td&gt;&lt;td&gt;say character:1&lt;/td&gt;&lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
 I'm not quite sure what several of those do,
 but feel free to experiment with them.
&lt;/p&gt;

&lt;h2&gt;Next steps&lt;/h2&gt;
&lt;p&gt;
 From here, you can tweak your
 &lt;code&gt;yasr&lt;/code&gt;
 keyboard commands in your
 &lt;code&gt;~/.yasr.conf&lt;/code&gt;
 or change your
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 settings in your
 &lt;code&gt;~/.config/speech-dispatcher/speechd.conf&lt;/code&gt;
 and
 &lt;code&gt;~/.config/speech-dispatcher/modules/espeak.conf&lt;/code&gt;
 files.
&lt;/p&gt;

&lt;p&gt;
 You might copy/link the
 &lt;code&gt;yasr&lt;/code&gt;
 binary into some place on your
 &lt;code&gt;$PATH&lt;/code&gt;
 such as
&lt;figure&gt;
&lt;pre&gt;
$ mkdir ~/bin
$ ln -s ~/tmp/yasr-0.6.9/yasr/yasr ~/bin
&lt;/pre&gt;
&lt;/figure&gt;
&lt;/p&gt;

&lt;p&gt;
 If you're feeling adventuous and prefer
 &lt;code&gt;flite&lt;/code&gt;
 you might try configuring
 &lt;code&gt;speech-dispatcher&lt;/code&gt;
 to use that instead.
&lt;/p&gt;

&lt;p&gt;
 Finally, it helps to have a suite of applications
 that play nicely with text-to-speech output.
 A few you might want to try:
 &lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Local mail:
   &lt;a href="https://man.openbsd.org/mail.1"&gt;
   &lt;code&gt;mail&lt;/code&gt;/&lt;code&gt;mailx&lt;/code&gt;
   &lt;/a&gt;
   &lt;/li&gt;
  &lt;li&gt;Remote mail:
   &lt;code&gt;s-nail&lt;/code&gt;
   (available as a package)
   &lt;/li&gt;
  &lt;li&gt;Calendar:
   &lt;code&gt;remind&lt;/code&gt;
   (available as a package)
   &lt;/li&gt;
  &lt;li&gt;Web-browsing:
   &lt;code&gt;lynx&lt;/code&gt;
   or
   &lt;code&gt;edbrowse&lt;/code&gt;
   &lt;/li&gt;
  &lt;li&gt;RSS:
   &lt;code&gt;rss2email&lt;/code&gt;
   or 
   &lt;code&gt;newsboat&lt;/code&gt;
   (both available as as packages)
   &lt;/li&gt;
  &lt;li&gt;IRC:
   &lt;code&gt;ii&lt;/code&gt;
   (available as a package)
   or
   &lt;code&gt;tinyirc&lt;/code&gt;
   (not currently available as a package)
   &lt;/li&gt;
  &lt;li&gt;Task management:
   &lt;code&gt;taskwarrior&lt;/code&gt;
   or
   &lt;code&gt;devtodo&lt;/code&gt;
   (both available as as packages)
   &lt;/li&gt;
  &lt;li&gt;Music:
   &lt;code&gt;cmus&lt;/code&gt;
   or
   &lt;code&gt;mpd/mpc&lt;/code&gt;
   (both available as as packages)
   &lt;/li&gt;
  &lt;li&gt;Terminal multiplexing:
   &lt;a href="https://man.openbsd.org/tmux.1"&gt;
   &lt;code&gt;tmux&lt;/code&gt;
   &lt;/a&gt;
   or
   GNU &lt;code&gt;screen&lt;/code&gt;
   (available as packages)
   It helps to either hide the status-bar
   or remove the clock
   so that it doesn't constantly spam you with time updates
   &lt;/li&gt;
  &lt;li&gt;Games:
   &lt;ul&gt;
    &lt;li&gt;&lt;a href="https://man.openbsd.org/intro.6"&gt;bsdgames&lt;/a&gt; collection&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;frotz&lt;/code&gt; interpreter for Infocom-style text adventures&lt;/li&gt;
   &lt;/ul&gt;&lt;/li&gt;
 &lt;/ul&gt;</description><category>a11y</category><category>accessibility</category><category>BSD</category><category>ed</category><category>screen-reader</category><guid>https://blog.thechases.com/posts/bsd/setting-up-a-terminal-screen-reader-on-openbsd/</guid><pubDate>Sun, 19 May 2019 23:52:20 GMT</pubDate></item><item><title>Software for a command-line world</title><link>https://blog.thechases.com/posts/cli/software-for-a-command-line-world/</link><dc:creator>Tim Chase</dc:creator><description>&lt;p&gt;
Below are a list of programs that can all be used over an
SSH connection with no need for an X connection.
&lt;/p&gt;

&lt;!-- TEASER_END --&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Email"&gt;Email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#RSS"&gt;RSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Web"&gt;Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#TextEditing"&gt;Text Editing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Spreadsheet"&gt;Spreadsheet/math/calculator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Calendar"&gt;Calendar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Todo"&gt;To-do management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Music"&gt;Music/audio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Chat"&gt;Chat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Database"&gt;Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Filesystem"&gt;Filesystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#VCS"&gt;Version control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Addressbook"&gt;Addressbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Games"&gt;Games&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Torrents"&gt;Torrents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Admin"&gt;Admin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/#Misc"&gt;Miscellaneous&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;hr&gt;
&lt;dl&gt;

&lt;dt&gt;&lt;a id="Email"&gt;Email&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Mailx"&gt;&lt;code&gt;mail&lt;/code&gt;&lt;/a&gt; (command-line; uses local mailboxes)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.mutt.org"&gt;&lt;code&gt;mutt&lt;/code&gt;&lt;/a&gt; (full-screen; uses local mailboxes, POP3, or IMAP)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://instinct.org/elm/"&gt;&lt;code&gt;elm&lt;/code&gt;&lt;/a&gt; (full-screen; uses local mailboxes, may support POP3/IMAP)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://savannah.nongnu.org/projects/nmh/"&gt;&lt;code&gt;mh&lt;/code&gt;/&lt;code&gt;nmh&lt;/code&gt;&lt;/a&gt;
		(mail-handler/new-mail-handler; command-line; uses "MH" format, supports POP3 via fetchmail)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.washington.edu/pine/"&gt;pine&lt;/a&gt;/&lt;a href="http://www.washington.edu/alpine/"&gt;&lt;code&gt;alpine&lt;/code&gt;&lt;/a&gt; (full-screen; uses local mailboxes, POP3, or IMAP)&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://docs.offlineimap.org/en/latest/MANUAL.html"&gt;&lt;code&gt;offlineimap&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;and many others&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="RSS"&gt;RSS&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://raggle.org"&gt;Raggle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://synflood.at/newsbeuter.html"&gt;&lt;code&gt;newsbeuter&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kiza.kcore.de/software/snownews/"&gt;&lt;code&gt;snownews&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codezen.org/nrss/"&gt;&lt;code&gt;NRSS&lt;/code&gt;&lt;/a&gt;/&lt;a href="http://www.codezen.org/canto/"&gt;&lt;code&gt;Canto&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.allthingsrss.com/rss2email"&gt;&lt;code&gt;rss2email&lt;/code&gt;&lt;/a&gt;/&lt;a href="https://github.com/rcarmo/rss2imap"&gt;&lt;code&gt;rss2imap&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strike&gt;Google Reader&lt;/strike&gt; supports an on-line reader (the Mobile version should be usable in any console browser)&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Web"&gt;Web&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://lynx.browser.org/"&gt;&lt;code&gt;lynx&lt;/code&gt;&lt;/a&gt; (the classic full-screen text-browser)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://links.sourceforge.net/"&gt;&lt;code&gt;links&lt;/code&gt;/&lt;code&gt;links2&lt;/code&gt;&lt;/a&gt; (a full-screen text-browser with more visual layout engine)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://elinks.or.cz/"&gt;&lt;code&gt;elinks&lt;/code&gt;&lt;/a&gt; (a full-screen text-browser with more visual layout engine)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://w3m.sourceforge.net/"&gt;&lt;code&gt;w3m&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.eklhad.net/linux/app/"&gt;&lt;code&gt;edbrowse&lt;/code&gt;&lt;/a&gt; (it's an editor, it's a browser, it's command-line)&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="TextEditing"&gt;Text Editing&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://vim.org"&gt;&lt;code&gt;vi&lt;/code&gt;/&lt;code&gt;vim&lt;/code&gt;&lt;/a&gt; (the classic full-screen text-editor)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/emacs/"&gt;&lt;code&gt;emacs&lt;/code&gt;&lt;/a&gt; (another popular and extensible choice in full-screen text-editors)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/ed/"&gt;&lt;code&gt;ed&lt;/code&gt;&lt;/a&gt; (the classic command-line text editor)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.nano-editor.org/"&gt;&lt;code&gt;nano&lt;/code&gt;&lt;/a&gt; (a simple full-screen editor)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pico_(text_editor)"&gt;&lt;code&gt;pico&lt;/code&gt;&lt;/a&gt; (a simple full-screen editor)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.eklhad.net/linux/app/"&gt;&lt;code&gt;edbrowse&lt;/code&gt;&lt;/a&gt; (it's like &lt;code&gt;ed&lt;/code&gt; on steroids)&lt;/li&gt;
	&lt;li&gt;and countless others&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
these can be used in concert with various
markup syntax such as
&lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;,
&lt;a href="http://w3c.org"&gt;HTML&lt;/a&gt;,
&lt;a href="http://www.docbook.org"&gt;DocBook&lt;/a&gt;,
&lt;a href="http://en.wikipedia.org/wiki/LaTeX"&gt;LaTeX&lt;/a&gt;, etc to
produce publishable documents; you can use packages like
&lt;a href="http://www.winfield.demon.nl/"&gt;&lt;code&gt;antiword&lt;/code&gt;&lt;/a&gt;
or wordview ("&lt;a href="http://wvware.sourceforge.net/"&gt;&lt;code&gt;wv&lt;/code&gt;&lt;/a&gt;")
to convert .DOC files to a usable format.
&lt;/p&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Spreadsheet"&gt;Spreadsheet/math/calculator&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
 &lt;li&gt;Spreadsheet:
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://www.ibiblio.org/pub/Linux/apps/financial/spreadsheet/"&gt;&lt;code&gt;sc&lt;/code&gt;&lt;/a&gt; (a simple full-screen spreadsheet with vi-like keybindings)&lt;/li&gt;
   &lt;li&gt;&lt;a href="https://github.com/andmarti1424/sc-im"&gt;&lt;code&gt;sc-im&lt;/code&gt;&lt;/a&gt; &lt;span title="Thanks to Charlie Kester for finding this one for me"&gt;(like &lt;code&gt;sc&lt;/code&gt; above but with the ability to import/export xls/xlsx files)&lt;/span&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://linux.maruhn.com/sec/slsc.html"&gt;&lt;code&gt;slsc&lt;/code&gt;&lt;/a&gt; (based on &lt;code&gt;sc&lt;/code&gt;)&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.gnu.org/software/oleo/"&gt;&lt;code&gt;oleo&lt;/code&gt;&lt;/a&gt; (a simple full-screen spreadsheet with a more Emacs-like feel)&lt;/li&gt;
   &lt;li&gt;&lt;a href="https://github.com/zaphar/sheetsui"&gt;SheetsUI&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;Math:
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://www.gnu.org/software/octave/"&gt;&lt;code&gt;Octave&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.r-project.org/"&gt;&lt;code&gt;R&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.scilab.org/"&gt;&lt;code&gt;scilab&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;Graphing:
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://www.gnuplot.info/"&gt;&lt;code&gt;gnuplot&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.graphviz.org/"&gt;&lt;code&gt;graphviz&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;Calculator
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://www.gnu.org/software/bc/"&gt;&lt;code&gt;bc&lt;/code&gt;&lt;/a&gt; (a simple command-line calculator)&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://python.org"&gt;&lt;code&gt;python&lt;/code&gt;&lt;/a&gt; (the full power of Python, at a command-line)&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Calendar"&gt;Calendar&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href="https://www.freebsd.org/cgi/man.cgi?query=calendar&amp;amp;sektion=1"&gt;&lt;code&gt;calendar&lt;/code&gt;&lt;/a&gt; (show events on given days)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.roaringpenguin.com/products/remind"&gt;remind&lt;/a&gt; (like the previous &lt;code&gt;calendar&lt;/code&gt; program on steroids)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?cal"&gt;&lt;code&gt;cal&lt;/code&gt;&lt;/a&gt; (display a calendar)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://pcal.sourceforge.net/"&gt;&lt;code&gt;pcal&lt;/code&gt;&lt;/a&gt; (good for printing)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?cron"&gt;&lt;code&gt;cron&lt;/code&gt;&lt;/a&gt; (for scheduling repeated tasks)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?at"&gt;&lt;code&gt;at&lt;/code&gt;&lt;/a&gt; (for scheduling a single job sometime in the future)&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://github.com/insanum/gcalcli"&gt;&lt;code&gt;gcalcli&lt;/code&gt;&lt;/a&gt; (interact with Google Calendar from the command-line)&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://github.com/pimutils/khal"&gt;&lt;code&gt;khal&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://mencal.kyberdigi.cz/english.html"&gt;&lt;code&gt;mencal&lt;/code&gt;&lt;/a&gt; and
	&lt;a href="https://blog.thechases.com/posts/cli/software-for-a-command-line-world/mencal2.html"&gt;&lt;code&gt;mencal2&lt;/code&gt;&lt;/a&gt; (menstruation calendars)&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Todo"&gt;To-do/time management&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://swapoff.org/DevTodo"&gt;&lt;code&gt;devtodo&lt;/code&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://taskwarrior.org"&gt;TaskWarrior&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://tim.thechases.com/bvi/tt.py"&gt;TimeTracker&lt;/a&gt;
 (a simple command-line time-tracker in the spirit of many VCS tools, written by yours-truely in response to
 &lt;a href="http://www.spinics.net/lists/blinux/msg12722.html"&gt;this&lt;/a&gt;
 post, and somewhat documented
 &lt;a href="http://www.spinics.net/lists/blinux/msg12730.html"&gt;here&lt;/a&gt;)&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Music"&gt;Music/audio&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;Playback
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="https://cmus.github.io/"&gt;&lt;code&gt;cmus&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://mpg321.sourceforge.net/"&gt;&lt;code&gt;mpg321&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://musicpd.org" title="Music Player Daemon"&gt;&lt;code&gt;mpd&lt;/code&gt;/&lt;code&gt;mpc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mpg123.de/"&gt;&lt;code&gt;mpg123&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://linuxcommand.gds.tuwien.ac.at/man_pages/ogg1231.html"&gt;&lt;code&gt;ogg123&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://6xq.net/pianobar/"&gt;&lt;code&gt;pianobar&lt;/code&gt;&lt;/a&gt; (command-line Pandora client)&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://freeshell.de/~bolangi/cgi1/nama.cgi/00home.html"&gt;&lt;code&gt;nama&lt;/code&gt;&lt;/a&gt; (music recording and editing)&lt;/li&gt;
  &lt;li&gt;and many others&lt;/li&gt;
 &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Editing/recording
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://sox.sourceforge.net/"&gt;&lt;code&gt;sox&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.eca.cx/ecasound/"&gt;&lt;code&gt;ecasound&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Volume control
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.jpj.net/~trevor/aumix.html"&gt;&lt;code&gt;aumix&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Podcatchers
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://wiki.github.com/jgoerzen/hpodder/"&gt;&lt;code&gt;hpodder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Chat"&gt;Chat&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.pidgin.im"&gt;&lt;code&gt;finch&lt;/code&gt;&lt;/a&gt; (a console version of Gaim/Pidgin)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://thekonst.net/centericq/"&gt;&lt;code&gt;centericq&lt;/code&gt;&lt;/a&gt; (support for ICQ, Yahoo!, AIM, IRC, MSN, Gadu-Gadu and Jabber protocols)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://site.n.ml.org/info/naim/"&gt;&lt;code&gt;naim&lt;/code&gt;&lt;/a&gt; (support for AIM, ICQ, IRC, and the lily CMC protocols)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://irssi.org/"&gt;&lt;code&gt;irssi&lt;/code&gt;&lt;/a&gt; (popular IRC client)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://weechat.org/"&gt;&lt;code&gt;weechat&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://gtmess.sourceforge.net/"&gt;&lt;code&gt;gtmess&lt;/code&gt;&lt;/a&gt; (MSN client)&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Database"&gt;Database&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://postgresql.org"&gt;&lt;code&gt;psql&lt;/code&gt;&lt;/a&gt; interface to PostgreSQL&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://mysql.com"&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/a&gt; interface to MySQL&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.sqlite.org/"&gt;&lt;code&gt;sqlite&lt;/code&gt;&lt;/a&gt; interface to the sqlite database&lt;/li&gt;
	&lt;li&gt;all the major databases have command-line clients&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Filesystem"&gt;Filesystem&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ibiblio.org/mc/"&gt;Midnight Commander&lt;/a&gt; (&lt;code&gt;mc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ranger.nongnu.org/"&gt;&lt;code&gt;ranger&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a id="VCS"&gt;Version control&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;I currently use git, Mercurial, Bazaar, Subversion and RCS depending on the project context&lt;ul&gt;
 &lt;li&gt;Distributed VCS
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://git-scm.org"&gt;&lt;code&gt;git&lt;/code&gt; (a fast, powerful patchwork of scripts and commands)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.selenic.com/mercurial/"&gt;mercurial (&lt;code&gt;hg&lt;/code&gt;)&lt;/a&gt; (fast, powerful, predictable, and mostly written in Python)&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://bazaar-vcs.org/"&gt;&lt;code&gt;bazaar&lt;/code&gt;&lt;/a&gt; (fast, powerful, predictable, and purely written in Python)&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://darcs.net/"&gt;&lt;code&gt;darcs&lt;/code&gt;&lt;/a&gt; (slower, and less popular)&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;&lt;li&gt;Centralized VCS
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://subversion.tigris.org/"&gt;subversion (&lt;code&gt;svn&lt;/code&gt;)&lt;/a&gt; (removes some of the annoyances of CVS and more extensible)&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.nongnu.org/cvs/"&gt;&lt;code&gt;cvs&lt;/code&gt;&lt;/a&gt;/&lt;a href="http://www.openbsd.org/opencvs/"&gt;OpenCVS&lt;/a&gt; (the classic, rapidly being replaced by Subversion)&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.gnu.org/software/rcs/"&gt;&lt;code&gt;rcs&lt;/code&gt;&lt;/a&gt; (not bad for one developer and one text file, but doesn't scale nicely)&lt;/li&gt;
 &lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Addressbook"&gt;Addressbook&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://abook.sourceforge.net/"&gt;&lt;code&gt;abook&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rolo.sourceforge.net/"&gt;&lt;code&gt;rolo&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/scheibler/khard"&gt;&lt;code&gt;khard&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Games"&gt;Games&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;the
 &lt;a href="http://wiki.linuxquestions.org/wiki/BSD_games"&gt;bsdgames&lt;/a&gt;
 package in Debian provides several (I'm a
sucker for &lt;a href="http://www.lava.net/cgi-bin/bsdi-man?proto=1.1&amp;amp;query=cribbage"&gt;&lt;code&gt;cribbage&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;a href="http://frotz.homeunix.org/frotz/"&gt;&lt;code&gt;frotz&lt;/code&gt;&lt;/a&gt;
package gives access to most
&lt;a href="http://mirror.ifarchive.org/indexes/if-archive.html"&gt;text-adventures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nethack.org"&gt;&lt;code&gt;nethack&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;and oodles of other games&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Torrents"&gt;Torrents&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://libtorrent.rakshasa.no/"&gt;&lt;code&gt;rtorrent&lt;/code&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="https://wiki.archlinux.org/index.php/Aria2"&gt;&lt;code&gt;aria2c&lt;/code&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;dt&gt;&lt;a id="Admin"&gt;Admin&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;top&lt;/code&gt;, &lt;code&gt;ps&lt;/code&gt;, &lt;code&gt;kill&lt;/code&gt;, &lt;code&gt;who&lt;/code&gt;, &lt;code&gt;last&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ping&lt;/code&gt;, &lt;code&gt;traceroute&lt;/code&gt;, &lt;code&gt;dig&lt;/code&gt;, &lt;code&gt;ifconfig&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;netstat&lt;/code&gt;, &lt;code&gt;nslookup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openssl&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt;, &lt;code&gt;sftp&lt;/code&gt;, &lt;code&gt;scp&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://guichaz.free.fr/iotop/"&gt;&lt;code&gt;iotop&lt;/code&gt;&lt;/a&gt; an I/O monitor like "top"&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a id="Misc"&gt;Miscellaneous&lt;/a&gt;:&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;weather&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;


&lt;p&gt;
I also find that using
"&lt;a href="http://tmux.sourceforge.net/"&gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/a&gt;" or GNU
"&lt;a href="http://www.gnu.org/software/screen/"&gt;&lt;code&gt;screen&lt;/code&gt;&lt;/a&gt;"
vital to being productive, as I can do many, many things all
at the same time, each in their own window.  It also allows
me to disconnect and then reconnect from another machine
later, resuming where I left off.
&lt;/p&gt;</description><category>accessibility</category><category>command line</category><category>console</category><category>ed</category><guid>https://blog.thechases.com/posts/cli/software-for-a-command-line-world/</guid><pubDate>Tue, 26 May 2015 21:04:51 GMT</pubDate></item></channel></rss>