Return to Floodgap Software
Texapp for Perl (Somewhat Early Alpha)
Texapp is a port of the highly arcane and inexplicably beloved
TTYtter text mode client for Twitter
If you knew/loved/hated/wanted to smash
in the face because of/felt strange rumblings of passion towards/used
now you can use the same interface, most of the same commands, and pretty
much all of the same awesome power for ADN.
During the Super Early Alpha-Alpha,
As of 0.5.0, Texapp has progressed from Super Early Alpha-Alpha to Somewhat
Early Alpha. During this time,
Texapp will be offered mostly for those
already familiar with TTYtter along with the freaks of nature and
the typically incautious and those who love them. This document will not be
a lot of help to you if you find the command line totally alien. Get used to
TTYtter on that "other service" and then come back here. Most of
the same stuff applies; these docs are just for the differences right now.
If you are an existing Texapp user, go
to the changelog and download for What's New.
If you're interested in writing Texapp extensions and ADN bots,
go to our Texapp API documentation.
- If you already have TTYtter, then you already have these
prerequisites. If not, look at the following:
At least Perl 5.8.6 or higher. Perl 5.6 or 5.005 might work, but
have not been tested. Mac OS X 10.4+ comes with this version of Perl. Most
Linux distros also include it; if not, install it with your package
- Required At least cURL 7.16 or higher, configured for SSL,
with up to date root certificates. Mac OS X 10.4+ comes with
cURL, but the certs might be old. Use
this script to download new
certificates, and copy the resulting ca-bundle.crt to
/usr/share/curl/curl-ca-bundle.crt (be sure to save your old one
just in case). If you use Linux or a *BSD, use your distro's package
system, and you can use the same script to update your certificate bundle
if you need to.
- Optional but Strongly Recommended
or higher for readline support, or a compatible readline driver such as
Term::ReadLine::Gnu or Term::ReadLine::Perl. Then pass
-readline on the command line, or readline=1 in your
~/.texapprc (see below). Term::ReadKey may be required
as a prerequisite. Both are available from CPAN.
- Optional Growl 1.1.6 or higher is supported on OS X 10.4+, using
growlnotify, which is an optional install
new in 0.6.8
OS X Notification Center (10.8+) is supported using
(-notifytype=osxnc); put it in /Applications and
make sure it is executable.
- Optional notifysend on supported systems using
but you need to recompile it with
this standard input patch,
or you can build a whole new notifys specially for Texapp with
this source file (compile instructions inside;
full libnotify source not needed -- then point Texapp to it
- Download Texapp (see below), and chmod +x texapp; ./texapp
- Texapp will start the OAuth wizard and give you a URL. Cut and paste it,
log in (if needed) and authorize the app, and then cut and paste the resulting
bearer token back into Texapp.
- Restart Texapp and the awesome will start.
- When Texapp is running, there are at least two processes at any time:
the foreground, where you enter commands, and the asynchronous background,
which automatically fetches posts and talks to the API in the background.
If you install Term::ReadLine::TTYtter, this is much more
What works in Texapp
Texapp was originally descended from TTYtter
and using many of the
same TTYtter commands you
used before, you can (see /help also):
In general, TTYtter commands still work as synonyms
(so /faves is a synonym for /stars; /block is
a synonym for /mute; etc.).
- read timelines and post:
- to post, just type and press RETURN/ENTER (anything that doesn't start
with / is a post)
- to emote, type /me followed by your emote (e.g.,
/me smacks @jnm, which appears to Texapp users as
[<doctorlinguist> smacks @jnm]
- defaults to global timeline. /personal and /global
switch back and forth
- to redisplay your timeline, /again (/a for short)
display more or fewer posts with +xx (e.g., /again +40
shows up to 40 posts from your timeline and anything mixed into it)
- to see posts before a certain point, use <menucode
(see below for what a menu code is)
(e.g., /a <a0 shows posts prior to post a0)
- you can use them together (e.g., /a <a0 +40)
- to force an update of your timeline (which occurs asynchronously
every 20 seconds or so anyway), /refresh (/r for short)
- to see mentions and replies to you, /replies (/re
display more or fewer posts with +xx (e.g., /re +40
shows up to 40 of your mentions);
display posts prior to a particular point with <menucode
(see below for what a menu code is)
(e.g., /re <za0 +40 shows up to forty posts prior to post
- all posts have a "menu code"
- posts in the background (generated automatically on refreshes or
request from your timeline) just have two character menu codes,
a simple letter and number (e.g., a5)
- posts in the foreground (generated in response to your commands)
have three character menu codes that
always start with z (e.g., za5)
- (this keeps the "namespaces" separate, i.e., no crossing the streams!)
- menu codes wrap automatically
- if you have a post ID, you can also use that instead of the menu code
(you can get this from /dump)
- manipulate threads:
- posts with reply-to information have @ next to the screen name
- display the thread with /thread [menu code] (e.g.,
/th a5); display more or fewer posts from it with +xx (e.g.,
/th +40 a5 shows up to 40 posts from the thread);
display posts prior to a particular point with <menucode
(e.g., /th <a5 +40 shows up to forty posts prior to post
new in 0.6.0 >>
display posts from muted users with /thm (muted posters that are
thread "roots" are always shown)
- this shows all connected posts; to simply follow reply-to chains (simpler),
use /replythread [menu code] (/reth for short) (muted
users are always shown in this mode)
- reply to a thread:
- /reply [menu code] [reply]: replies to the poster of that menu
code and adds it to the thread (/re for short) (e.g.,
/re a5 dalton is so hottt)
- /replyall [menu code] [reply]: replies to all people mentioned in
that menu code and adds it to the thread (/ra for short)
- /replyg [menu code] [reply]: adds a post to a thread with
"global context" (no @'s) (/rg for short)
- to emote a reply, use /rg
and make /me the first portion
of the reply, e.g., /rg a5 /me smacks @jnm)
- /replyh [menu code] [reply]: replies to all people mentioned
in that menu code, but puts the person you are responding to directly in
first position "highlighted" (/rh for short)
- subscribe/follow a thread (even people you don't follow):
- posts from threads you subscribe to have ~ next to the screen
- /threadfollow [menu code]: follows the thread a post belongs
to and mixes it with your timeline (/thf)
- /threadafollow [menu code]: displays the thread and
follows it (/thaf)
<< new in 0.6.0
- /threadunfollow [menu code]: stops following a thread
(/thunf); /thunf all clears all threads
- /ref /raf /rgf
/rhf reply to and follow a post
- new in 0.6.1
/threadblock [menu code]: filters that thread from appearing in
your timeline, replies or search results (/thb)
- new in 0.6.1
/threadunblock [menu code]: stops blocking it (/thunb);
/thunb all clears all blocked threads
- display interactions with other users:
- display replies, stars, reposts and follow events you've received from
other users with /events; display more or fewer events with
+xx (e.g., /events +40 shows up to 40 of the most recent
interactions with users)
- multiple users may appear as a "single interaction"
- interactions referencing one of your posts have a menu code corresponding
to the post you made; you can then use any command on it like usual
(e.g., use /thread to see their reply (and other posts) made to
- (follows don't have a menu code, since they don't have a referring post)
- work with users:
- show a user's posts with /again [username];
display more or fewer posts with +xx (e.g., /again +40
dalton shows up to 40 of @dalton's most recent posts)
(/a for short);
display posts prior to a particular point with <menucode
(e.g., /a <a5 +40 dalton shows up to forty posts made
by @dalton prior to post a5)
- show information about a user with /whois [username]
(/w for short)
- /wa [username] shows a user's posts and information
- follow and unfollow a user with /follow [username] and
- mute and unmute a user with /mute [username] and
- display whom you've muted with /muted;
display more or fewer users with +xx (e.g.,
/muted +40 shows up to 40 of the people you are currently
muting, and if you actually do have at least that
many, you're a real meaniepants)
- block and unblock a user with /block [username] and
- display whom you've muted with /blocked;
display more or fewer users with +xx (e.g.,
/blocked +40 shows up to 40 of the people you are currently
blocking, and if you actually do have at least that
many, maybe it's not them, it's you)
- see if a user follows you with /doesfollow [username]
(/df for short)
- see if that user follows another user with
/df [who] [whom]
<< new in 0.6.0
- list who follows you or whom you follow with /followers
and /friends respectively (/fos and /frs
for short); display more or fewer users with +xx (e.g.,
/fos +40 shows up to 40 of your most recent followers)
- these work on users too: /fos dalton
- search for keywords and hashtags:
<< new in 0.6.0
- to manually search for keywords or hashtags, use /search;
display more or fewer posts with +xx (e.g., /search +40
texapp shows up to 40 of the most recent posts containing
display posts prior to a particular point with <menucode
(e.g., /search <a5 +40 gopher shows up to forty posts containing
gopher prior to post a5)
- the search is of all users, even ones you don't follow,
except ones you've muted or blocked; filters still apply (users you
don't follow may appear in a different colour depending on your ANSI
- you can search for phrases with quotes (e.g.,
/search "commodore 64")
- hashtags are fine too (e.g., /search #cookieclub)
- if you specify multiple keywords, the result is a logical AND
(e.g., /search ios android fetches only posts from users who
play for both teams. did you hear me? I said THEY PLAY FOR BOTH TEAMS)
- to automatically mix searches into your timeline, use the
/tron and /troff commands to add and remove them,
respectively (e.g., /tron texapp)
- both commands emit to a global variable track, so you can
also set a whole bunch at once (e.g., /set track gopher texapp).
in this mode, multiple keywords are logical OR
- hashtags are fine too (e.g., /tron #cookieclub;
/#cookieclub is a shortcut for /tron #cookieclub)
- quoted strings are fine too
- again, the searches are all users, except muted or blocked, and filters
- erase posts:
- deleted posts appear with a status message saying they were deleted
- /delete [menu code]: deletes your own post with that
- /deletelast deletes the last post you made
- repost and star posts:
- starred posts have a (*x) prepended to them, where x
is the number of people who have starred that post
- star and unstar a post with /star [menu code] and /unstar
- list who starred a post with /starred [menu code]; display more
or fewer users with +xx (e.g., /starred +40 a5 shows up
to 40 of the users who starred that post)
- list posts you starred with /stars; display more or fewer posts
with +xx (e.g., /stars +40 shows up to 40 of the posts
you most recently starred)
- this works on users too: /stars +30 dalton
- reposted posts have % next to the screen name
- they also have an (xX) prepended to them, where X
is the number of times it was reposted
- repost a post with /repost [menu code] (/rp for short)
- /erp loads it into your history; then post with %RP%
at the beginning or end of your next post to substitute it
- /frp reposts and stars (favourites) the post
- list who reposted a post with /rpsof [menu code]; display more
or fewer users with +xx (e.g., /rpsof +40 a5 shows up
to 40 of the users who reposted that post)
- un-repost a post by simply /deleteing your repost (you may
need to pull up your own timeline to do this)
- manipulate links and entities:
- posts with attached URL links have & next to the screen name
- display all the links, even hidden ones, with /entities
[menu code] (/ent for short)
- open all the URLs in a post, even hidden ones, with /url
- you need to set urlopen (see below) to something meaningful,
like lynx -dump %U
- /url by itself opens whatever is in %URL%, which
is set by /entities, /dump and /whois
- control settings:
- /print: list all runtime-changeable variables (/p
for short); /p [variable] to show a specific setting
- NB: not all variables work or "do things" in this version of Texapp
- /set [variable] [value]: set a runtime-changeable variable
(e.g., /set ansi 1 to turn on ANSI colour)
- /unset [variable]: clears a runtime-changeable variable
- booleans don't need a value: /set ansi and /unset ansi
- /add [variable] [value]: appends to a variable, adding a
delimiter if necessary
- /del [variable] [value]: removes value from a variable, removing
delimiters if necessary
- to make settings stick, put them in ~/.texapprc (see
Configuration notes for an example), or whatever the current setting
of -rc is
- to save the current settings to ~/.texapprc (or whatever
the current rc file is) automatically,
use the /save command
- (the current contents of ~/.texapprc
are backed up to ~/.texapprc~)
- do other neat tricks, or give up:
- display post metadata (/dump [menu code]), such as ID,
geolocation information, stars, etc.
- /dumpf also shows verbose fetch and processing information
- flush your readline TAB completion with /flushtab back to
- /flushtab blank resets it to absolutely blank
- check if you're up to date: /vcheck
- destroy the world: /eval and /evalf
- stop and start the world: /hold
- quit: /quit
Channels and private messages
Texapp also supports channels with private messages, including multi-way
channels. These are mixed into
your timeline as if they were part of your stream. Texapp will monitor up
to 200 subscribed channels. (Technical note: the only supported channel
type is net.app.core.pm -- other kinds of channels are not supported
by Texapp.) When you start Texapp, the last two messages received in any
channel are displayed automatically. PMs appear in green with the sender
and all recipients.
PMs have their own menu codes starting with p which are either
pxx for the background or pzxx for the foreground. You
reference a channel simply by referring to any post in it; Texapp will
figure out "what you mean." The following commands accept PM menu codes too,
and work analogously to how they work for posts:
- display all open channels: /pmscan (no +count needed)
- pass a number (e.g. /pmscan 2) to see that number of most
recently updated channels
- ask for any new PMs: /pm
- ask for any new PMs since the last /pmscan or
- this keeps an internal bookmark of when you asked last, in case
you missed PMs on your screen on a long lived session
- create a channel to a single user: /pm [who] [what]
- create a channel to multiple users: /pmm [who] [who] [who...] --
- (the -- is the delimiter between the list of usernames and the PM)
- /pm and /pmm are smart -- if the channel already exists,
they simply reuse it; if it does not, they create a new one
- channels are immutable: you can't add more users to a channel,
you must create a new one
The count (+xx) argument and before (<menucode) argument
both work for most PM commands (e.g., /th <pa0 +40 displays
up to 40 posts in the PM thread specified by pa0 prior to
When done with a channel, /pmclose will "put it away" -- it will
not appear in /pmscan, but it will immediately be reactivated if
there is any activity on it or you create a "new" channel to the same
- /thread (synonym for /pmagain, showing all posts in the
- /reply (replies to all parties in the channel)
- /url (and like posts, PMs with entity links are marked with
new in 0.6.2 PMs may be up to 2048
characters in length, unlike posts, which are limited to 256 for the ADN
Full screen editing with your editor
new in 0.6.0
If you end
a PM or post with the magic substitution variable %ED% (or the
post only consists of %ED%), Texapp
pauses the background and opens the post in your editor (as specified by the
$EDITOR environment variable). This lets you make and edit multi-line
posts, though you are still limited to 256 characters
for posts and 2048 characters for PMs<< new in 0.6.2.
For best results, you should enable newline parsing with /set newline
(or -newline on the command line or newline=1 in your
.texapprc, see below).
In this mode Texapp does not do any further parsing of your post, such as
collapsing spaces and filtering characters. UTF-8 support is entirely a
function of your editor. Be advised that a long editing session may unleash
a pent-up flood of posts when you finish.
%ED% by itself allows you to compose a new post in the editor, but
you can also /re a5 %ED% or /ra a5 %ED%, etc., and the
person(s) indicated will appear in the editor and be editable as text. You
can use %ED% anywhere you would put a message to be posted and
with any such command, including /pm and /me.
If you used /erp to load a repost for editing, you can edit that
by using %EDRP% instead of just %RP% where you normally
Texapp can detect geolocation annotations and posts with geolocation
information have a + prepended to them. You can display the
actual coordinates of that post with the /dump command.
new in 0.6.0
You can set a location to be appended to your posts using the
lat and long variables (e.g., /set lat
38.8977 followed by /set long -77.0366 sets your coordinates
to the White House in Washington DC). However, your posts are not actually
encoded until you also /set location to enable doing so, so that
you can set a default location but not transmit it until you want to
(and /unset location when you want to turn it off).
From the command line, specify -lat -long -location, or place
them in your .texapprc (see below).
Running commands from your shell (using Texapp as a command
Texapp can also be used as a CLI tool. The -runcommand option lets
you pass a command to it, which is dumped to standard output. Almost any
command is supported. Examples:
To make a post, you can either pass it as an argument, or pipe a line of
- read your replies: texapp -runcommand="/re"
- list up to 40 of your followers: texapp -runcommand="/fos +40"
- list your timeline: texapp -runcommand="/a"
If you use -status="%ED%" from the command line, then your default
editor opens; the post is sent when you write the file. A blank file cancels.
(See notes above on full screen editing for more information.)
<< new in 0.6.0
- texapp -status="Stalking Dalton mercilessly."
- echo "Stalking Dalton mercilessly." | texapp -status=- (don't
forget that dash)
For commands that would ordinarily need a menu code, you can just use an
ID (you need to know what it is, of course):
You can refer to PMs by ID if you have permission to the channel they existed
in; simply use P plus the PMID. (This is supported by all PM
capable commands except /pmclose for technical reasons.)
- texapp -runcommand="/re 819562 berg is so hotttt"
Texapp-specific command line options
Here is (finally) a complete list of all
command-line options supported by Texapp. The vast majority of
TTYtter command line options still apply, though the
semantics may slightly vary.
Texapp supports ANSI colour, readline, notification, and integrated
URL and avatar viewing in the same way TTYtter did, as well as
Here are some common and useful options; see the
full list of command-line options for more:
Texapp also changes behaviour a bit from TTYtter:
- -ansi enables ANSI colour if your terminal supports it.
- -personal sets your default timeline to personal instead of
global. (You can still switch back and forth.)
- -readline enables a compatible readline driver (see the
full documentation for more information). Term::ReadLine::TTYtter
is strongly recommended, though others are compatible.
- -vcheck checks for a new version when you start up.
- -verify makes Texapp ask you each time to confirm your post.
(If this bugs you, you can set a delay instead with -slowpost;
see the full documentation for more about this first.)
- There are lots of filtering options.
You can also use
-notco, a delightful option to remove pointless posts with
t.co URLs in them from that "other service," or
-noifttt to filter IFTTT posts specifically (since many users
just don't know how to use this otherwise innocent tool responsibly).
new in 0.6.10 >>For those
that do, you can whitelist them (and they will never be filtered by any
of your filter settings, including those ones) by
adding them to -neverfilter.
- -allats allows posts in your timeline from people you follow
mentioning people you don't (i.e., directed posts).
Meaningless in /global, of course.
- -alsopost lets you set a command to pipe the post to after
it is posted to ADN, so you can, say, post to that other bird service with
TTYtter at the same time.
Only posts without reply-to or thread information are sent to
-alsopost, so you don't accidentally crosspost things that are
irrelevant on other services. (See also -manualalsopost.)
- -savequit makes Texapp automatically save your settings
to ~/.texapprc (or the currently specified rc file) when you
quit, just like you had typed /save. This includes the state of
extensions that support saving state and the state of your TAB completer.
- ANSI colour uses (by default) default terminal colour for people you
follow, cyan for people you don't, red for mentions, purple for server
errors and yellow for your own posts.
- Settings are in ~/.texapprc and your key is in
~/.texappkey, unless you use the -rc option to change it
(e.g., -rc=1 uses ~/.texapprc1; specify a full path to
not use the prefix). Here's more information on
managing your .texapprc files.
- Here is an example RC file that turns on automatic
version checking, turns on ANSI
colour, turns on readline mode (by default using
Term::ReadLine::TTYtter), removes t.co posts from your
timeline, uses Growl to display replies, PMs, search results
and threads you subscribe to, sets an automatic search for posts containing
either texapp or floodgap,
and uses the OS X internal URL command to open URLs with /url:
- The /save command saves the state of Texapp's settings and
extensions that support it to ~/.texapprc, backing up the old
version to ~/.texapprc~ (or the current RC file). If you specify
-savequit (or /set savequit), this is automatically
done when you quit.
Remember to read the command line options page
for more complete information on what you can do with settings and
What's under construction in Texapp
The following features are still in Texapp (as code holdovers), but
do not work yet and you should not use these commands or command line
options related to them until they are rewritten for ADN:
timestamps now supported in 0.4.2
direct messaging now supported in 0.4.0
native reposts now supported in 0.2.0
geolocation read-only support in 0.3.1, full support in 0.6.0
tracking and search now supported in 0.6.0
- streaming support
- automatic rate limit control (right now, Texapp uses a fixed 20
Writing your own bots and extensions in Texapp
See our amazing Texapp API documentation!
<< updated for 0.6.0
What's coming to Texapp
- Complete documentation, eventually
Hash tag searching, scheduled for 0.6. Search API implemented
- Expose user annotations to /whois, like blog URLs, etc., possibly
some of the Appnetizen fields
- Let users update their personal data
- Whatever other cool stuff Dalton & co. come up with
- If search does not work, please delete any lines starting with
queryurl= in your ~/.texapprc. This should be
automatically fixed for you in 0.6.1+ and if -savequit is on.
- If cURL says it can't connect to ADN, or Texapp is unable
to start up because of network issues, this is not a bug: your root
certificates are old! Fix them! (See above)
Two-argument /doesfollow doesn't work yet. fixed in 0.6.0!
Changelog and download
Download 0.6.10 here.
Comments to @doctorlinguist on ADN.
and terms of service.
Old versions here.
What's new in 0.6.10:
What's new in 0.6.9:
- You can whitelist people you never want subject to your filters with
- If you're already /holding, then entering the editor doesn't
suddenly unpause it, and vice versa (thanks @0xmf).
- You can now have arguments in your $EDITOR variable without
Texapp complaining ... much (thanks @0xmf).
- Potential bug with /hold and -hold clashing on startup
- -filterflags=count actually works how it's documented now
(see also -filtercountmin).
- Better detection for when @berg is ripping sh*t up in the
server room, er, when ADN has a maintenance window in progress.
- Cleanup in the startup banner.
What's new in 0.6.8:
- \t now gets turned into a tab (thanks @jnm).
- When in editor mode, only the most recent 500 messages are stored in the
buffer to avoid an overflow (thanks @jnm).
- A crash bug while checking PMs is repaired (thanks @jnm, and
now please go break @pilgrim's software instead).
- -vcheckinterval allows periodic checking for new versions, and
can ping mirror servers to distribute load (thanks @brycec).
What's new in 0.6.7:
- Support for OS X Notification Center in 10.8+ (use
notifytype=osxnc) with alloy/terminal-notifier
(put it in /Applications and make sure OS X will run it).
- New base URLs (the old ones should still work, though), which will
automatically rollover if you use -savequit.
- Fixes various backslashed entities in -newline mode
- The informational prompt about whether you are using the personal stream
should be based on the URL (thanks @mandyd).
- /save now properly marks the file format version.
- -dontreplyto names are no longer added to the TAB-completer
in readline mode.
What's new in 0.6.6:
- Tweak for filter count "stuttering."
- -manualalsopost enables, with -alsopost, only sending
selected posts to -alsopost: if you post with the
/alsopost command in this mode, then and only then does the post
go to both ADN and the specified utility, otherwise only to ADN. If
-manualalsopost is not specified, then alsoposting is automatic,
and the command /alsopost is meaningless. (Thanks
@jmergy for the suggestion.)
What's new in 0.6.5:
- Fix for quote marks in private messages (thanks @jnm).
- -dontautoreply is a comma-separated list of names you don't
want to auto-reply to. Useful for users you don't want to interact with
What's new in 0.6.4:
- Fix for UTF-8 characters in private messages (thanks @jnm).
- Fix for backslashed entities in private messages (thanks
- -status can be commanded to keep newlines with
-multiline (thanks @jnm for the use case).
- -status correctly ignores -verify and
-slowpost (thanks @jnm; now stop breaking my software).
What's new in 0.6.3:
- Fix for systems that may deliver the larger 8K IPC messages in smaller
chunks, depending on the kernel (Mac OS X 10.4, for example).
- Give the background a chance to catch up when synchronously setting
What's new in 0.6.2:
- Internal IPC transactions are now 8K, fixing an issue where oversized
private messages could get truncated by IPC.
- The user is now reminded what stream Texapp is defaulting to, to help new
users. Wait, we don't want to help newbies. Newbies have to sink or swim
like we did. Maybe this makes it too easy for them. Maybe this is part of
why our society is falling apart. I feel so conflicted now.
- A "more" indicator is now shown for incomplete userlists, including
followers, following, muted and blocked listings.
- The count of filtered posts properly turns over even when the user
doesn't ask for it to be displayed, and is tuned to be less spammy about
repeatedly filtered groups back to back.
- Thread filtering also now looks at reposted ID information.
- /following is now a synonym for /friends.
What's new in 0.6.1:
- You can now transmit private messages up to 2048 characters in
length (older versions can receive these messages, but will not transmit
them), controlled by the -pmlength option.
- Private messages with embedded newlines now properly work for PMs to
What's new in 0.6.0:
- You can now block threads that cheese you off with
/threadblock (and /threadunblock), which manipulate
the new setting -filterthreads.
- You can filter posts against the client that posted them with a
regex in -filterclients.
- OEmbed-based entities are now automatically scanned for by
/entities and /url, even if the link isn't actually
in the text (thanks @jnm for the test case).
Texapp will also attempt to deduplicate the URLs.
- Configuration files written by /save now have a tagged
version. If you start Texapp with -savequit, Texapp will
automatically check for expired or incorrect information and update
your .texapprc to the proper version. (Thanks @ranti
@akulbe @jnm and lots of others for discovering the problem that
led to this solution.)
- Security Notice: Texapp 0.5.0 through 0.6.0 inclusive could
leak your OAuth token into your .texapprc if you use the
/save command or -savequit is enabled. 0.6.1 removes
this leak and automatically removes the token from your .texapprc
if -savequit is enabled; you should delete the
bearertoken= entry manually if -savequit is not.
While the security risk of this information leak is very low on
a single-user system, on a multi-user system, your .texapprc
may have been created with a more permissive umask that another user
(As a side effect of the above security update, -bearertoken is
no longer supported in .texapprc files.)
- ASCII art with lots of backslash characters is now more properly
de-escaped (thanks @jnm for the test case).
- A username right after a newline sequence when
-newline is disabled is now properly underlined in ANSI mode.
- /ra /rh use the same algorithm for finding usernames as
the above, so that E-mail addresses don't get seen as spurious reply
- The before parameter can now be used alone with /thm like with
/th to page back through threads.
- -status properly fails in situations where there is a
client-side error (can't fork, etc.).
- /dump now emits to the result stream instead of the UX stream
so it can be used properly with -runcommand.
What's new in 0.5.4:
- Search API integration, allowing you to manually search for keywords
with the /search command
or create a list of keywords or hash tags to mix into your timeline (/set
track, /tron, /troff), including searching in posts
from users you don't follow.
- Full-screen multiline editing with your editor of choice, preferably
vi, or even lesser editors like emacs, grudgingly.
- You can now geolocate your posts and PMs
with -lat and -long,
controlled by the master switch -location.
- Two-argument /doesfollow is now supported.
- You can now display threads with muted users in them (/thm),
as well as display the context thread and immediately follow it
(/thaf) or both (/thmaf) (thanks @jnm for the
- Texapp API update: posts can now belong to multiple
classes, and $posttype can now emit a slash-separated list of
classes as well.
- Post classes are now precomputed and cached at instantiation instead of
upon display, improving performance.
- If you query a user and all of their posts are filtered, a message
appears to warn you (thanks @jnm for the report). A different
message appears if the user actually hasn't posted yet.
- -newline is smarter about, well, newlines.
- Non-human accounts marked as bots, feeds, etc., are marked in
/whois (and other places where a user summary is shown).
- Posts with more than two newlines get automatically left justified to
favour the display of ASCII art and similar serious business.
- An issue with crosslinked hashrefs causing memory corruption
has been guarded against.
What's new in 0.5.3:
- PM fetches are now significantly faster in the no-new-messages state,
which is most of the time.
- Menu code cache temporarily retracted (could get stale if the menu code
rolled over and the background was unable to communicate this) (thanks
What's new in 0.5.2:
- /pmcheck, keeping an internal bookmark of the last time you
asked for PMs, for long lived sessions where the PM might have long since
scrolled off your screen.
- /pmscan can now take an argument n to show the
n most recently active channels only.
- /save now works even if there is no
.texapprc already. (thanks @ranti)
- /ra /rh /rg should not attempt to process <x as a
before parameter. (thanks @akulbe)
- The libnotify notifier now properly handles strings with
ampersands in it instead of displaying "nothing" in the notification box.
(thanks @wildbill for the original report)
- No one ever noticed that /deletelast never actually worked.
Now no one ever will.
- Multiple operations on a menu code are now cached instead of having to
hit the background repeatedly.
- /dumpf /evalf for hot hot hot superverbose debugging action.
What's new in 0.5.1:
- Readline completion is now properly saved with -savequit in
unusual preloading circumstances too. (thanks @jnm)
- Texapp no longer crashes on startup when a notifier is specified after
-savequit has run once.
- Automatically opening links to app.net triggered by mere
mentions is now suppressed, except if you pass -openappnettoo,
and if you do, I don't know why.
- /pmscan now sorts by time in all circumstances (most recent
channel activity at the bottom).
- The /re command now correctly replies to PM IDs.
- /vreply and /vra now return an error when passed a PM.
(It never worked in the first place, but now it properly complains about it.)
- /ra and /rh are turned into /re (with a
warning) for PMs.
- Additional commands added to the TAB completer.
What's new in 0.5.0:
- /pmagain and /thread on a PM channel no longer give
illogical errors. (thanks @jnm)
What's new in 0.4.4:
- The Texapp internal API is now open for business!
Write your own bots and extensions, just like for TTYtter! There
are some internal differences for TTYtter
extension authors to consider.
- You can save options and internal extension state (for extensions that
support it) to .texapprc using /save, or use
-savequit to automatically save when the client shuts down cleanly.
- For commands that support it or it's logical, you can pass a
<menucode argument to get posts or DMs before a particular point:
/a <ze0 dalton
- Threads you are subscribed to now have a special notify class
subthread which you can pass to the notification driver. As a
side effect, they all appear to be part of your timeline, even users that
you don't follow.
- /block /unblock /blocked now split from
/mute /unmute /muted.
- /flushtab allows you to reset your TAB user name completion.
- /print tabcomp shows the current TAB completion entries.
/print otabcomp displays the optimized listening (front-weighted);
/print ntabcomp displays newly added ones.
- Posting during background refresh no longer generates a spurious
-- sorry, nothing to display message.
- -alsopost filters posts that are part of a thread to avoid
exporting posts to that other service without context. (thanks
@oj for the suggestion)
- Notifications using notify-send have a tweaked, better-scaling
What's new in 0.4.3:
- Stability improvements for certain Perl versions with readline support.
- Setting and changing variables sent to the background is more
What's new in 0.4.2:
- Repairs random quits experienced on certain Perl versions (may manifest
as spurious Not a HASH reference complaints).
- Compatibility fixes for Perl 5.16.
What's new in 0.4.1:
- -timestamp option now supported again.
- Makes PM scanning sort order a bit more logical.
- Fixes an issue with channels containing usernames with underscores in them.
What's new in 0.4.0:
- Fixes prompt race condition with the refresh after a PM is posted.
- If Texapp cannot connect to ADN to get channel metadata, it simply
throws away the PM since the PM can't be meaningfully interacted with anyway
(instead of various unpredictable failure states depending on how complete
the channel data is).
What's new in 0.3.2:
- Finally, private message and channel support!
- Internal refactoring of private fields added to ADN schemas.
What's new in 0.3.1:
- New /reth command for directly connecting posts by reply to
information instead of the entire /thread
- Belt-and-suspenders approach to JSON parser based on testing with
- Bug fixed in /leave
What's new in 0.3.0:
- New /events command displays information from the Interactions
- New /muted command lists your muted users.
- The /entities command is now enabled to display entity links
in posts, and /url will access them also.
- Initial support for retrieving geolocation information. (Setting
geolocation information is coming.) Just /dump a post for the
- The background no longer thrashes and now simply self-terminates
if the controlling console process gets killed off (thanks
- Deleted posts are now again correctly marked as such.
What's new in 0.2.4:
- Higher-performance I/O for faster updates and to cut down on collisions
from the foreground and the asynchronous background. This changes the
internal API; some old TTYtter extensions may not work quite right.
- New documentation! Read this page! The internal API will be
documented as soon as I think it is stable for development (next major
change will be to allow saving of state).
- Thread following and unfollowing, mixed into your timeline.
- -allats allows you to see posts from people you follow to
people you don't.
- /thread now can take a +count.
What's new in 0.2.3:
- /rg ("reply global") lets you reply to a post "context-free" --
it is simply threaded to that post to link them together, but includes no
@ of any user, so that it appears to everyone but is still linked
into the thread.
- Posting is now more responsive and you see your post come through
- You can now reply, star, repost, etc., reposts; the reply and star and
so forth will apply to the original post.
- Repost and star counts now apply to the original post, so these stats
"shine through" reposts.
- If you /replyall to a repost, you reply to the original post,
but the reposter is included.
- personal=1 no longer causes an error in .texapprc
- Cancelling a post in -slowpost mode no longer generates a
spurious -- sorry, nothing to display message.
What's new in 0.2.2:
- The -personal option sets the default timeline to the
personal stream instead of the global stream (or personal=1
in .texapprc). You can still switch to global with
/global (and back with /personal).
- If you set -alsopost to a command, the posts you make will
be echoed to it. For example, crosspost to Twitter with
-alsopost="ttytter -status=- -keyf=your_key_file" (or
alsopost=... in .texapprc).
- The -mentions option now works properly instead of
generating error messages (thanks @wildbill).
What's new in 0.2.1:
- /rpsof, allowing you to get the reposts of a post that has been
What's new in 0.2.0:
- Suppress "200" errors, which occur randomly and aren't actually errors
- New post classes. Users you don't follow appear in $colouralien
(class alien) which defaults to cyan; users you do follow appear
in $colourfollow, which defaults to "terminal default." If you don't
like this, you can change it (example: -colouralien=OFF). This
allows you to pick out your "peeps" from global, for example. Replies still
appear in red regardless.
- Native reposts are implemented. /rp now sends a native repost,
and /thread will follow a repost back to its original thread. If
you want to use the old style, use /orp (or /erp if you
want to load it in to history for editing). Btw, /orp now threads
the repost, too.
- -noifttt implemented (or noifttt=1 in .texapprc)
which does exactly what it says: anything with a source of IFTTT is
filtered, even if you follow that user.
- -notco is even smarter about obvious Twitter repostings,
regardless of the source.
- Two-argument /doesfollow (does user X follow you?) is implemented,
but three-argument will need API support.
- Deletes appear tagged in the stream. You can't do anything with them,
though, because they're deleted!
- /ruler works properly.