commit 5a7010740b8ec1742b708881a45875e6407a8927
parent ab81a81589c7015445e182833d8d935c19561b12
Author: citbl <citbl@citbl.org>
Date: Wed, 5 Nov 2025 23:30:56 +1000
basic vim motions added
Diffstat:
3 files changed, 63 insertions(+), 21 deletions(-)
diff --git a/docs/readr.scd b/docs/readr.scd
@@ -36,7 +36,8 @@ https://example2.com/rss
https://example3.com/rss
```
-Note that currently we load feeds before the UI, so loading readr will take O(n x loadtime)
+Note that we load feeds before the UI, so loading readr will take a couple of
+seconds as load feeds multi-threaded (shown with dots, 1 dot per feed).
# KEY BINDINGS
diff --git a/src/config.h b/src/config.h
@@ -1,6 +1,6 @@
#pragma once
-#define VERSION "v1.7"
+#define VERSION "v1.8"
// recommended, pass as chrome for reddit feeds
#define USER_AGENT \
diff --git a/src/keys.c b/src/keys.c
@@ -7,35 +7,26 @@
#define MAX_PANEL 1
+static void left(app_t*);
+static void right(app_t*);
+static void up(app_t*);
+static void down(app_t*);
+
void
handle_key(app_t* app, struct tb_event ev)
{
switch (ev.key) {
case TB_KEY_ARROW_UP:
- if (app->selected_panel == 0) { // change feed
- app->selected_feed = MAX(app->selected_feed - 1, 0);
- app->selected_post = 0;
- } else if (app->selected_panel == 1) { // change post
- app->selected_post = MAX(app->selected_post - 1, 0);
- }
+ up(app);
break;
-
case TB_KEY_ARROW_DOWN:
- if (app->selected_panel == 0) { // change feed
- app->selected_feed = MIN(app->selected_feed + 1, app->feeds_len - 1);
- app->selected_post = 0;
- } else if (app->selected_panel == 1) { // change post
- app->selected_post
- = MIN(app->selected_post + 1, app->feeds[app->selected_feed]->posts_len - 1);
- }
+ down(app);
break;
-
case TB_KEY_ARROW_LEFT: // change panel
- app->selected_panel = MAX(app->selected_panel - 1, 0);
+ left(app);
break;
-
case TB_KEY_ARROW_RIGHT: // change panel
- app->selected_panel = MIN(app->selected_panel + 1, MAX_PANEL);
+ right(app);
break;
case TB_KEY_ENTER: {
if (app->selected_panel == 0) {
@@ -59,7 +50,20 @@ handle_key(app_t* app, struct tb_event ev)
break;
}
- if (ev.ch == ' ') { // TB_KEY_SPACE for some reason doesn't work /shrug
+ switch (ev.ch) {
+ case 'j':
+ down(app);
+ break;
+ case 'k':
+ up(app);
+ break;
+ case 'l':
+ right(app);
+ break;
+ case 'h':
+ left(app);
+ break;
+ case ' ':
if (app->selected_panel == 1) {
char url[URL_CAP] = { 0 };
db_post_t* post = app->feeds[app->selected_feed]->posts[app->selected_post];
@@ -73,5 +77,42 @@ handle_key(app_t* app, struct tb_event ev)
post->seen = 1;
open_url(url);
}
+ default:
+ break;
+ }
+}
+
+static void
+left(app_t* app)
+{
+ app->selected_panel = MAX(app->selected_panel - 1, 0);
+}
+
+static void
+right(app_t* app)
+{
+ app->selected_panel = MIN(app->selected_panel + 1, MAX_PANEL);
+}
+
+static void
+up(app_t* app)
+{
+ if (app->selected_panel == 0) { // change feed
+ app->selected_feed = MAX(app->selected_feed - 1, 0);
+ app->selected_post = 0;
+ } else if (app->selected_panel == 1) { // change post
+ app->selected_post = MAX(app->selected_post - 1, 0);
+ }
+}
+
+static void
+down(app_t* app)
+{
+ if (app->selected_panel == 0) { // change feed
+ app->selected_feed = MIN(app->selected_feed + 1, app->feeds_len - 1);
+ app->selected_post = 0;
+ } else if (app->selected_panel == 1) { // change post
+ app->selected_post
+ = MIN(app->selected_post + 1, app->feeds[app->selected_feed]->posts_len - 1);
}
}