chiark / gitweb /
Simon Tatham [Sat, 23 Dec 2023 14:16:22 +0000 (14:16 +0000)]
Set up ratatui and demonstrate event handling.
I've had to put the event-reading in another thread, because I
couldn't see any way to tie extra fds into ratatui's poll loop. So
instead I'm going to have to make subthreads communicate to the main
loop via an interthread channel.
Simon Tatham [Sat, 23 Dec 2023 12:56:07 +0000 (12:56 +0000)]
Update .gitignore.
Simon Tatham [Sat, 23 Dec 2023 12:51:03 +0000 (12:51 +0000)]
Process raw stream data into UTF-8 lines.
Simon Tatham [Sat, 23 Dec 2023 12:36:52 +0000 (12:36 +0000)]
Get rid of the rest of the unwraps.
Simon Tatham [Sat, 23 Dec 2023 12:29:03 +0000 (12:29 +0000)]
Made auth file handling fallible.
There are no doubt many ways to do it better, but this is a start -
now it will at least print what went wrong.
Simon Tatham [Sat, 23 Dec 2023 12:14:50 +0000 (12:14 +0000)]
Move auth file handling out into a module.
It ought to be fallible, though.
Simon Tatham [Sat, 23 Dec 2023 11:58:04 +0000 (11:58 +0000)]
Try using xdg to get the config directory location.
Simon Tatham [Sat, 23 Dec 2023 11:52:07 +0000 (11:52 +0000)]
Replace copy_to with direct use of the Read trait
Simon Tatham [Sat, 23 Dec 2023 11:37:08 +0000 (11:37 +0000)]
First demo of a streaming API working.
Had to bodgily pull in the Python version's auth data for this, but
it's a start. I can sort that part out properly later.
Simon Tatham [Sat, 23 Dec 2023 11:15:28 +0000 (11:15 +0000)]
Move the types out into a separate module.
Simon Tatham [Sat, 23 Dec 2023 11:15:12 +0000 (11:15 +0000)]
Experimented with a reqwest Client.
Simon Tatham [Sat, 23 Dec 2023 11:03:18 +0000 (11:03 +0000)]
OK, that's probably enough data modelling for now
Simon Tatham [Sat, 23 Dec 2023 10:53:58 +0000 (10:53 +0000)]
Deserialise visibility, with compiler warnings
Simon Tatham [Sat, 23 Dec 2023 10:23:57 +0000 (10:23 +0000)]
Got most of the dates, but what about last_status_at?
Simon Tatham [Sat, 23 Dec 2023 10:16:46 +0000 (10:16 +0000)]
Fill in some more parts of the main structures
Simon Tatham [Sat, 23 Dec 2023 10:16:33 +0000 (10:16 +0000)]
Self-reference to subthings via Box
Simon Tatham [Sat, 23 Dec 2023 10:11:50 +0000 (10:11 +0000)]
Cope with some optional fields
Simon Tatham [Sat, 23 Dec 2023 10:08:41 +0000 (10:08 +0000)]
Decode a sample Status as well as an Account
Simon Tatham [Sat, 23 Dec 2023 10:02:10 +0000 (10:02 +0000)]
PoC of retrieving and unpacking a struct.
Simon Tatham [Sat, 23 Dec 2023 09:45:09 +0000 (09:45 +0000)]
Begin setting up a Rust framework.
Simon Tatham [Fri, 22 Dec 2023 10:18:55 +0000 (10:18 +0000)]
Fix the various 'user's posts' variations.
By generalising the True/False -> true/false mapping across all
booleans submitted as request parameters.
Simon Tatham [Sun, 17 Dec 2023 11:49:58 +0000 (11:49 +0000)]
Support <pre> tag in post HTML.
Simon Tatham [Sun, 17 Dec 2023 11:39:12 +0000 (11:39 +0000)]
Option to view a post by its numeric id.
Simon Tatham [Sun, 17 Dec 2023 09:22:08 +0000 (09:22 +0000)]
More timelines.
These don't auto-update.
Simon Tatham [Sun, 17 Dec 2023 07:49:15 +0000 (07:49 +0000)]
Graduations of mode to view a user's posts.
Now we can exclude blogs, and also exclude replies to other threads.
(Interestingly, the 'exclude replies' flag in the API only excludes
replies to _other_ accounts. So it keeps replies to _yourself_. One
effect of this is that if you post a multitoot thread, it all shows up
in this list. Of course the client could filter it too...)
Simon Tatham [Fri, 15 Dec 2023 17:30:26 +0000 (17:30 +0000)]
Fix a few NoneType errors.
Simon Tatham [Fri, 15 Dec 2023 12:25:47 +0000 (12:25 +0000)]
Change my mind about how to extend backwards.
I think pressing [0] at the top of the file is better than double-[B].
Firstly, it's fewer keystrokes to do on purpose; secondly, it's not a
key you would have been repeating already. Now I can hold down [B]
safely to page up through the existing text, _and_ if I want to keep
extending backwards I can do it more easily than before.
Simon Tatham [Fri, 15 Dec 2023 08:11:38 +0000 (08:11 +0000)]
Fix out-of-bounds access in files shorter than the screen
Simon Tatham [Fri, 15 Dec 2023 07:56:14 +0000 (07:56 +0000)]
Lists of followers, folllowees, favers and boosters.
Simon Tatham [Thu, 14 Dec 2023 22:40:13 +0000 (22:40 +0000)]
Support <blockquote> in HTML.
Simon Tatham [Thu, 14 Dec 2023 20:23:25 +0000 (20:23 +0000)]
Ahem, fix last minute breakage.
Simon Tatham [Thu, 14 Dec 2023 19:05:58 +0000 (19:05 +0000)]
First cut at viewing a user's posts.
Simon Tatham [Thu, 14 Dec 2023 19:05:33 +0000 (19:05 +0000)]
Change wording from 'Reply' to 'Send' for non-statuses.
You might be sending a message to the named user, but you're not
_replying_ to anything of theirs.
Simon Tatham [Thu, 14 Dec 2023 18:20:24 +0000 (18:20 +0000)]
First cut at Examine User.
Currently you can only type in names to examine by hand.
Simon Tatham [Thu, 14 Dec 2023 18:20:24 +0000 (18:20 +0000)]
Experimental ^K change of behaviour.
If you press ^K to delete to end of line and you're in mid-paragraph,
I think not a bad answer is to _insert_ a paragraph break, so that the
text on the next line doesn't unexpectedly wrap.
This is intuitively as close as possible to the behaviour in the
non-auto-wrapping 'me'. The only thing I don't like about it is that
pasting the text back in again with ^Y doesn't delete the line break,
but I haven't thought of a less astonishing answer to that yet.
Simon Tatham [Thu, 14 Dec 2023 18:20:24 +0000 (18:20 +0000)]
Tests of Ctrl-K.
So I can refactor it.
Simon Tatham [Thu, 14 Dec 2023 18:20:24 +0000 (18:20 +0000)]
Fix goof in IndentedParagraph.
Simon Tatham [Thu, 14 Dec 2023 18:20:24 +0000 (18:20 +0000)]
HTML formatting: support <i>.
Same as <em>, of course.
Simon Tatham [Thu, 14 Dec 2023 18:20:24 +0000 (18:20 +0000)]
Some more TODO comments.
Simon Tatham [Thu, 14 Dec 2023 17:35:21 +0000 (17:35 +0000)]
Match reply visibility to the incoming message.
I had a conversation in 'unlisted' status with someone, and it was a
pain to keep setting this by hand.
Of course, it's only a default: you _can_ change the visibility in a
reply.
Simon Tatham [Mon, 11 Dec 2023 19:11:04 +0000 (19:11 +0000)]
Post info: add list of mentioned users.
Because the post itself doesn't show their fully qualified usernames.
Simon Tatham [Sun, 10 Dec 2023 22:46:02 +0000 (22:46 +0000)]
Second thoughts, remove that assertion again.
Turns out that Composer does want to keep the entire editor buffer in
a ColouredString so that it can colourise it as a whole. And that can
include \n. We do want to keep \n away from add_wch, but keeping it
out of ColouredString entirely isn't a workable approach.
Oh well. The immediate crash is fixed, at least.
Simon Tatham [Sun, 10 Dec 2023 22:15:16 +0000 (22:15 +0000)]
Squelch literal \n appearing in post HTML.
For some reason this doesn't happen very often, but I just saw it for
the first time, and it totally confused Paragraph and also
ColouredString.frags. Avoid getting into that sitation in the first
place.
Simon Tatham [Sun, 10 Dec 2023 15:32:16 +0000 (15:32 +0000)]
Fix missing screen refresh when new posts arrive.
The rework of resize handling had the accidental side effect that when
the self-pipe from the stream-watching thread signals us, we do call
extend_future() on our feeds, but we _don't_ loop back round to the
screen redraw, so that if the user is sitting in their home timeline,
the bottom line of the screen doesn't update to show that new stuff is
available.
Simon Tatham [Sat, 9 Dec 2023 18:44:21 +0000 (18:44 +0000)]
Fix file-position stability over backward extend.
That last-minute idea to bound pos_within_item within the actual size
of the item ... forgot that each logical item (e.g. a status) is made
up of multiple physical items (paragraphs, separator line, etc), so I
bounded it within _those_ and made a mess. Should be back to normal now.
Simon Tatham [Sat, 9 Dec 2023 18:31:26 +0000 (18:31 +0000)]
Implement searching in the file pager.
Simon Tatham [Sat, 9 Dec 2023 18:05:22 +0000 (18:05 +0000)]
Fix display of whether you've boosted something.
I had forgotten for a moment that it's called something else at the
protocol level.
Simon Tatham [Sat, 9 Dec 2023 17:57:32 +0000 (17:57 +0000)]
Allow changing the visibility of posts.
Simon Tatham [Sat, 9 Dec 2023 17:41:09 +0000 (17:41 +0000)]
Allow tagging posts with a content warning.
Simon Tatham [Sat, 9 Dec 2023 16:43:41 +0000 (16:43 +0000)]
Add 'change language' in the pre-posting menu.
Uses the new bottom-line editor to prompt for a replacement language
tag.
Simon Tatham [Sat, 9 Dec 2023 16:16:14 +0000 (16:16 +0000)]
Ability to prompt on the bottom screen line.
Simon Tatham [Sat, 9 Dec 2023 15:44:00 +0000 (15:44 +0000)]
Feature to print detailed info about a status.
Now I can retrieve its URL to send to people, and find out all the
fiddly internals too.
Simon Tatham [Sat, 9 Dec 2023 15:56:31 +0000 (15:56 +0000)]
Cope with a timeline not containing any posts!
Of course, that's the first thing that happens when you log in to a
fresh Mastodon test instance.
Simon Tatham [Sat, 9 Dec 2023 15:42:44 +0000 (15:42 +0000)]
Override for config directory.
This provides a crude means of managing multiple accounts. At the
moment my only use case for this is logging in to a test server so
that I can test the fine points of posting without making a fool of
myself on the live fediverse. So I don't need to run the accounts in
parallel in a user-friendly way, and I can easily just pass a weird
command-line option when I'm doing testing.
Simon Tatham [Sat, 9 Dec 2023 12:22:23 +0000 (12:22 +0000)]
Fix resizing the window smaller.
Some weird sequence of events was triggering an attempted redraw at
the old size, before properly noticing the change and redrawing at the
new size. When going from smaller to bigger this just caused a display
flicker (in fact not even a perceptible one), but bigger to smaller
caused an exception when we tried to draw a big screen in a small
window and curses caught us printing outside the screen area.
Now seems to work better.
Simon Tatham [Fri, 8 Dec 2023 17:56:45 +0000 (17:56 +0000)]
Bodgy fix for poor performance of wcwidth.
Mastodonochrome was running rather slowly, and when I profiled it, it
turned out the bottleneck was the 'wcwidth' Python module, which is
not a wrapper on the C function, but a reimplementation in pure Python
and therefore not very fast.
I've bodged it by just making one big cache of all the strings that
the program ever passes to wcwidth, since there were only two calls to
that function at all and they were both in text.py. I don't know if
that's the right fix in the long term, but it seems to have improved
things considerably for now.
(Also, while I'm at it, ColouredString now wcwidths its contents once
at construction time and doesn't redo it on every call, so it doesn't
even look up the same thing in the cache multiple times.)
Simon Tatham [Fri, 8 Dec 2023 12:59:59 +0000 (12:59 +0000)]
^K and ^Y for copy and paste to end of line.
Well, end of _paragraph_, for the moment. Perhaps end of line would be
better. But my immediate use cases won't care about the difference:
- ^W^K to delete the last word I typed at the end of a paragraph
- dealing with code snippets which don't wrap anyway
Simon Tatham [Fri, 8 Dec 2023 12:56:48 +0000 (12:56 +0000)]
Editor: ^W and ^T to go forward/back a word
Simon Tatham [Fri, 8 Dec 2023 12:50:31 +0000 (12:50 +0000)]
Properly indicate whether we can extend backwards.
Simon Tatham [Fri, 8 Dec 2023 12:48:49 +0000 (12:48 +0000)]
Ability to retrieve the thread of a post.
Simon Tatham [Fri, 8 Dec 2023 12:33:24 +0000 (12:33 +0000)]
Fix a wrapping glitch I spotted this morning.
Simon Tatham [Fri, 8 Dec 2023 12:33:11 +0000 (12:33 +0000)]
Fix API mismatch in composer tests.
Simon Tatham [Fri, 8 Dec 2023 09:01:11 +0000 (09:01 +0000)]
Add a final menu before posting a status.
So far it doesn't have anything useful in it, but the idea is that it
will be where you add all the other options in statuses, like media
attachments, content warnings, etc.
Simon Tatham [Fri, 8 Dec 2023 08:55:14 +0000 (08:55 +0000)]
Make the dry-run posting mode a standard option.
It's silly to keep hacking it out in the source code every time I want
to test something!
Simon Tatham [Fri, 8 Dec 2023 08:42:56 +0000 (08:42 +0000)]
Proper old-fashioned [RET][.][RET] to finish a post
Simon Tatham [Fri, 8 Dec 2023 08:26:03 +0000 (08:26 +0000)]
Implement extending feeds backwards.
Simon Tatham [Fri, 8 Dec 2023 07:43:55 +0000 (07:43 +0000)]
Get editor limits from the instance.
Simon Tatham [Fri, 8 Dec 2023 07:35:44 +0000 (07:35 +0000)]
Show which things are already faved/boosted.
Now we can only offer the right one of fave and unfave buttons, too.
Simon Tatham [Fri, 8 Dec 2023 07:25:18 +0000 (07:25 +0000)]
Add target highlights in the Ego Log.
Forgot!
Simon Tatham [Fri, 8 Dec 2023 07:07:29 +0000 (07:07 +0000)]
Ability to [un]favourite posts.
I had a conversation yesterday about how I should use that button
more, so I guess my personal client needs to have the functionality!
Simon Tatham [Fri, 8 Dec 2023 07:02:35 +0000 (07:02 +0000)]
Prepare to reuse post-selection UI for other things.
Simon Tatham [Thu, 7 Dec 2023 21:26:57 +0000 (21:26 +0000)]
Fix a crash when hitting Return in the editor.
Simon Tatham [Thu, 7 Dec 2023 21:22:35 +0000 (21:22 +0000)]
Left and Right should page up/down in files.
Didn't realise how much I'd internalised that keystroke pair until I
found it wasn't working.
Simon Tatham [Thu, 7 Dec 2023 18:52:56 +0000 (18:52 +0000)]
All the machinery is ready to try to post!
Simon Tatham [Thu, 7 Dec 2023 18:44:20 +0000 (18:44 +0000)]
Now we spawn an editor with the right set of recipients.
Still can't _do_ anything with it, though.
Simon Tatham [Thu, 7 Dec 2023 08:34:39 +0000 (08:34 +0000)]
First cut at an editor for composing posts.
Basic editing keys are supported; no refinements. Let's see how this
goes before I decide which editing functionality to add next.
Simon Tatham [Thu, 7 Dec 2023 17:56:23 +0000 (17:56 +0000)]
Switch to using Unicode input.
I failed to notice that getch() delivers you single bytes in trad
fashion. Switched to get_wch(), which returns either a Python char
(that is, a length-1 str) or an integer containing a curses key code.
Also it throws an exception instead of returning curses.ERR, which
I've dealt with by the simplest possible method of turning it back
into curses.ERR. (The exception in this case is almost always 'stdin
is nonblocking and there's nothing to see here yet'.)
Simon Tatham [Thu, 7 Dec 2023 17:55:03 +0000 (17:55 +0000)]
Scroll by a bit less than a full screen in files.
Real Mono does this asymmetrically, it turns out: [SPACE] scrolls down
in such a way that the new screenful has 2 lines in common with the
old one, whereas [-] scrolls up by a little less so that you have 4
lines in common.
I can't quite bring myself to replicate _that_ oddity, so I've
compromised on 3 in both directions.
Simon Tatham [Thu, 7 Dec 2023 07:45:30 +0000 (07:45 +0000)]
Prevent accidentally stacking multiple [ESC][R].
Now, if you [ESC] to get to where you already were, it will just go
back to the existing stack entry.
(But maybe this still isn't strong enough? Perhaps we need to search
for it all the way up?)
Simon Tatham [Thu, 7 Dec 2023 07:34:35 +0000 (07:34 +0000)]
Actually show keypresses in menus
Simon Tatham [Thu, 7 Dec 2023 07:25:15 +0000 (07:25 +0000)]
Try out the traditional ESC X X to exit.
Although I might go back to letting you [Q] out of the Main Menu; not
sure yet.
Simon Tatham [Thu, 7 Dec 2023 07:18:29 +0000 (07:18 +0000)]
Add a Main Menu, at last.
Now that you can [RET] out of the home timeline, it's handy!
Simon Tatham [Thu, 7 Dec 2023 07:14:08 +0000 (07:14 +0000)]
Fix getting stuck in the logs menus
Simon Tatham [Thu, 7 Dec 2023 07:12:48 +0000 (07:12 +0000)]
Correct handling of [RET] in files and menus.
(a) turned out curses was returning it as \n not \r
(b) also, in a file, it should go down a line _or exit_.
Simon Tatham [Thu, 7 Dec 2023 07:00:37 +0000 (07:00 +0000)]
Amazingly horrible regexes for scanning post content.
Simon Tatham [Thu, 7 Dec 2023 05:35:32 +0000 (05:35 +0000)]
Support <em> in post content.
I just received a reply containing one.
Simon Tatham [Thu, 7 Dec 2023 05:33:13 +0000 (05:33 +0000)]
Show a Re: header on reply posts.
Simon Tatham [Thu, 7 Dec 2023 05:22:03 +0000 (05:22 +0000)]
Space out the ... at the end of a boost/fave record.
Simon Tatham [Thu, 7 Dec 2023 05:18:52 +0000 (05:18 +0000)]
Don't show @mentions in Ego Log post summaries.
That way we get in as much as possible of the message _content_, which
should help disambiguate posts that are part of a long conversation
with the same user(s).
Simon Tatham [Wed, 6 Dec 2023 19:03:26 +0000 (19:03 +0000)]
Fix missing 'you' after 'followed'.
Simon Tatham [Wed, 6 Dec 2023 19:03:14 +0000 (19:03 +0000)]
Make the ego feed refresh.
Simon Tatham [Wed, 6 Dec 2023 19:02:19 +0000 (19:02 +0000)]
*Really* fix that crash on receiving a mention.
Commit
35ba8f325faf3e3 replaced the wrong thing with a different wrong
thing, ahem.
Simon Tatham [Wed, 6 Dec 2023 12:57:27 +0000 (12:57 +0000)]
First cut at an 'ego log'.
Shows all the indications that people like me. Lives at the same place
Mono's Edit Log lives.
Formatting wants some work:
- maybe trim out @mentions from the front, so we quote more actual text
- do something to make log entries more nicely separated
Simon Tatham [Wed, 6 Dec 2023 12:28:43 +0000 (12:28 +0000)]
Fix a crash on receiving a mention.
self.mentions_feed is a function; mentions_feed is the value it returned.
Simon Tatham [Wed, 6 Dec 2023 07:34:22 +0000 (07:34 +0000)]
Cope with lack of XDG config directories.
If the host system is a pure server which you log into via ssh, it may
not have these at all. Hard-code the default ~/.config as a fallback.
Simon Tatham [Wed, 6 Dec 2023 07:33:31 +0000 (07:33 +0000)]
UNTESTED: beep and go to [ESC][R] on a message.
Simon Tatham [Wed, 6 Dec 2023 07:30:03 +0000 (07:30 +0000)]
Now we can read 'messages'! (aka mentions)
Simon Tatham [Wed, 6 Dec 2023 06:52:06 +0000 (06:52 +0000)]
Do SIGWINCH handling ourselves.
It broke as a side effect of going into nodelay mode, I think because
our select loop didn't know to check curses's flag.
Simon Tatham [Wed, 6 Dec 2023 06:28:28 +0000 (06:28 +0000)]
Set curses nodelay mode.
Otherwise, pressing M-g (in pterm, which curses will interpret as ESC
g, just as I'd want it to) delivers the ESC, but leaves the g in
curses's internal buffer, which we don't empty before diving back into
the select loop.
Simon Tatham [Tue, 5 Dec 2023 13:05:36 +0000 (13:05 +0000)]
Detect updates and append them to the file.