Commit graph

176 commits

Author SHA1 Message Date
d13fa8685b
Merge pull request #101 from Skehmatics/fix-resize
Fix various resize issues
2019-04-25 14:58:08 +02:00
Derek Schmidt
cb3885b20b
Fix #100
Using self.panel.hide() without calling
curses.panel.update_panels() before next refresh can really mess
stuff up. As far as I can tell, this was the real cause of #100.

This changes that call to the Modal's hide method instead, which
will keep this sort of issue from coming up again (hopefully)
2019-04-25 14:46:01 +02:00
Derek Schmidt
5c8f3b5978
Fix crash on window open
Missed a call when changing refresh to refresh_text
2019-04-24 21:32:28 -07:00
Derek Schmidt
b9e9eea295
Redaw footer and header after panels
Fix left panel overlaping the footer on full_redraws
2019-04-24 16:57:55 -07:00
Derek Schmidt
24421fcb53
Fix resize when modals are visible
Use a callback function to allow items farther up in the stack
to have their own resize logic. This also requires a slight
change to the main TimelineApp to stay DRY
2019-04-24 16:57:52 -07:00
aff0c2281f
Improve keystroke handling 2019-04-24 14:05:28 +02:00
c862df8e40
Run curses with 20 statuses per page by default 2019-04-23 14:12:29 +02:00
912e7c8bc4
Nicer header for curses 2019-04-23 13:53:06 +02:00
b9743ba268
Simplify windows setup 2019-04-23 13:31:17 +02:00
92810459c7
Change content warning shortcut to ^W
^S will freeze most terminals
2019-04-16 14:37:34 +02:00
Derek Schmidt
747c5a611f
Add posted status / reply to the top of the timeline on submit 2019-04-16 14:21:08 +02:00
Derek Schmidt
2a6206903f
Mention EOT rather than RS
In my testing, not all terminal emulators have the same ctrl+enter
key accelerator for the ascii record seperator, so mention EOT
instead but still leave it in for those that might like it better.
2019-04-16 14:21:08 +02:00
Derek Schmidt
5d652754ec
Slightly redesign the modal to be more like a window
+ Only do a full draw on init, and just refresh on updates / show
+ Better differenciate "No content" vs "quit"
+ Reset the cursor position when content is cleared
2019-04-16 14:21:08 +02:00
Derek Schmidt
073d340908
Change control scheme to make more sense
Ctrl+Enter (or the standard ^D / EOT) to confirm, Escape to quit.

Since we're asking for a raw escape, we also need to tweak the
curses escape detection timeout a little, otherwise the user would
have to wait a whole second for the keystroke to register
2019-04-16 14:21:08 +02:00
Derek Schmidt
45bf2acba1
Default to CW of parent status when replying 2019-04-16 14:21:07 +02:00
Derek Schmidt
7f5c201925
Minor compose window cleanup / misc fixes
+ Remove excess padding on width
+ Rename TextModal to EntryModal
+ Remove duplicate delete key handler
+ Redraw when CW modal closes
+ Return empty string rather than None
2019-04-16 14:21:07 +02:00
Derek Schmidt
a367f78cbb
Handle screen position when newline only lines exist 2019-04-16 14:21:07 +02:00
Derek Schmidt
2b3b14c8b7
Impliment a custom textbox-like modal
The actual curses provided textbox has issuses with adding
newlines to the toot body when the text wraps to fit,
so I've implimented a basic textbox using draw_lines and an
internal text body (rather than relying on the curses window
contents.
2019-04-16 14:21:07 +02:00
Derek Schmidt
26f49e460e
Make help text less wordy 2019-04-16 14:21:07 +02:00
Derek Schmidt
a641543922
Add basic reply functionality 2019-04-16 14:21:07 +02:00
Derek Schmidt
c7526941d2
Add cw / spolier_text setting within compose window
And also make things probably more complicated than neccesary
oops
2019-04-16 14:21:07 +02:00
Derek Schmidt
6bb2f98ad2
Add basic text compose + posting 2019-04-16 14:21:06 +02:00
474d9c432f
Move notification printing to output module
Removed sorting, since notifications are already sorted.
2019-04-16 14:12:42 +02:00
Denis Laxalde
204d4d4138 Handle absence of notification in 'notifications' command 2019-02-17 15:02:05 +01:00
Denis Laxalde
6360e4d07d Add a --clear option to "notifications" command 2019-02-17 14:18:51 +01:00
Denis Laxalde
5174a751f2 Implement "notifications" command
The list of notifications is diplayed with each item enclosed within an
horizontal line as for timeline. When a status is involved (when
notification type is "reblog" or "favourite"), we also display the full
status.

Closes #81.
2019-02-17 14:09:56 +01:00
f7167e0880
Bump version 2019-02-15 14:14:22 +01:00
d224375da4
Consolidate timeline selection arguments
toot timeline and toot curses now use the same logic.
2019-02-15 14:13:12 +01:00
abb1b436ca
Fix typo 2019-02-15 14:13:11 +01:00
10595be865
Show full account name in timeline 2019-02-15 14:13:11 +01:00
Denis Laxalde
5a867f2380
Show number of replies/reblogs/favourites in status footer of curses ui
When parsing "replies_count" from status data, we allow the field to be
absent as it got added in version 2.5.0 (in constrast with other ones,
added in 0.1.0) as there might be servers with that version around.
2019-02-15 12:55:55 +01:00
Denis Laxalde
4bc963a236
Indicate if status is a reply in left pane of curses ui 2019-02-15 12:47:42 +01:00
Denis Laxalde
3d0c7be1e0 Indicate if status has been favorited in left pane of curses ui
Showing a yellow star in the right corner of second line.
2019-02-14 20:39:58 +01:00
Denis Laxalde
41d96249ba Add favourite/unfavourite actions to curses ui 2019-02-14 20:21:48 +01:00
d7cc97d2c7
Tweaks to status boosting in curses app 2019-02-14 18:04:05 +01:00
Denis Laxalde
c6bc4a695f
Add reblog/unreblog actions to curses ui
This is implemented using "b" key to toggle reblog/unreblog based on the
value of "reblogged" field in status data.
2019-02-14 17:58:55 +01:00
Denis Laxalde
066589bf53
Display a ↷ in status detail window if status got reblogged 2019-02-14 17:58:55 +01:00
Denis Laxalde
f1c8465e63
Add a "reblogged_by" command 2019-02-14 17:58:47 +01:00
Denis Laxalde
5514c47bca
Store status id in parse_status() 2019-02-14 17:58:22 +01:00
Denis Laxalde
834bdb67ac
Pass "app" and "user" to TimelineApp
We're going to need this context to issue API calls from the curses UI.
2019-02-14 17:58:22 +01:00
e6d585ae5d
Nicer timeline output 2019-02-14 17:31:48 +01:00
996228d224
Employ wcstring utils to improve rendering 2019-02-14 15:47:40 +01:00
8a3ff94e47
Consolidate wcwidth-related utils in one module 2019-02-14 15:45:27 +01:00
769ff9e406
Add wcstring utils 2019-02-14 15:23:46 +01:00
8805a50194
Cleanup utils dealing with wcwidth strings 2019-02-14 14:21:53 +01:00
Denis Laxalde
0bf4b2a21a
Fix left column padding in timeline with wide characters
When the left column contains wide characters (which occupy more than
one cell when printed to screen), padding to 30-characters with
"{:30}".format() does not work well. This happens for instance when the
display name contains unicode characters such as emojis.

We fix this by introducing a pad() function in utils module which uses
the wcwidth library (https://pypi.org/project/wcwidth/) to compute the
length of the text for the column. trunc() function is also adjusted to
optionally compute the length of the text to be truncated since, when
called from pad(), we now pre-compute this value.

We update test for timeline rendering so that the display name now
includes an emoji. (Without the fix, the test would not pass as left
column would be misaligned.)
2019-02-14 14:21:53 +01:00
a3ebd96e05
Mark function as private 2019-02-13 14:19:27 +01:00
19cbcd43b2
Make toot timeline continuable by pressing Enter 2019-02-13 14:19:00 +01:00
0dfb04e9e3
Ignore bs4 warnings
These are triggered by false positives and get printed to screen when
running `toot curses`.
2019-02-13 13:38:37 +01:00
32b1c67d49
Make boolen params a bit less verbose 2019-01-24 11:23:12 +01:00