hackernews-TUI
hackernews_tui
is a Terminal UI to browse Hacker News with fully customizable and vim-like key bindings.
hackernews_tui
is written in Rust with the help of Cursive TUI library. It uses HN Algolia search APIs to get Hacker News data.
The application mainly consists of the following views:
Story View
displaying a list of HN stories. There are different kinds ofStory View
depending on thetag
used to filter stories:Front Page
: stories on the front-pageAll Stories
: all storiesAsk HN
: ask HN stories onlyShow HN
: show HN stories onlyJobs
: jobs stories only
Article View
displaying the content of a web article in reader mode.Comment View
displaying a list of comments in a story.Search View
displaying a search bar and a list of stories matching the search query.
Why hackernews-TUI?
If you are either
- a Hacker News reader
- a computer nerd who likes doing things on terminal
- a vim key-bindings fanboy
- a person who prefers navigating using the keyboard over a mouse
This application is the right tool for you :muscle:
Table of Contents
Install
Dependencies
Mercury Parser
To enable viewing a web page in reader mode with Article View
, install mercury-parser
globally by running
# using yarn
yarn global add @postlight/mercury-parser
# or using npm
npm install -g @postlight/mercury-parser
Using cargo
Install the latest version from crates.io
Run cargo install hackernews_tui
to install the application as a binary.
Build from the master
branch
Run
# git clone https://github.com/aome510/hackernews-TUI.git
# cd hackernews-TUI
# cargo build --release
to build the application, then run
# ./target/release/hackernews_tui
to run the application
Arch Linux
Run yay -S hackernews_tui
to install the application as an AUR package.
NetBSD
Using the package manager
# pkgin install hackernews-tui
Building from source
$ cd /usr/pkgsrc/www/hackernews-tui
# make install
Examples
Demo
List of demo videos:
hackernews_tui v0.5.0
: demo general usage ofStory View
,Search View
andComment View
can be found herehackernews_tui v0.6.0-beta
: demo the usage ofArticle View
to read a web page in reader mode can be found here
Story View
Article View
Search View
Comment View
Default Shortcuts
In each View
, press ?
to see a list of supported keyboard shortcuts and their functionalities:
Global key shortcuts
?
: Open the help dialogesc
: Close a dialogC-q
: Quit the applicationC-p
: Go to the previous viewC-f
: Go to front page viewC-s
: Go to search viewC-z
: Go to all stories viewC-x
: Go to ask HN viewC-c
: Go to show HN viewC-v
: Go to jobs view
Key shortcuts for each View
Story View shortcuts
j
: Focus the next storyk
: Focus the previous story{story_id} g
: Focus the {story_id}-th storyenter
: Go the comment view associated with the focused storyo
: Open in browser the article associated with the focused storyO
: Open in article view the article associated with the focused storys
: Open in browser the focused storyn
: Go to the next pagep
: Go the previous paged
: Toggle sort by date/popularityq
: Filter stories past 24 hoursw
: Filter stories past weeke
: Filter stories past monthr
: Filter stories past year
Article View shortcuts
k
: Scroll upj
: Scroll downu
: Scroll up half a paged
: Scroll down half a paget
: Scroll to topb
: Scroll to bottomo
: Open article in browser{link_id} f
: Open in browser {link_id}-th link{link_id} F
: Open in article view {link_id}-th link
Link dialog shortcuts
l
: Open link dialogj
: Focus next linkk
: Focus previous linkf
: Open in browser the focused linkF
: Open in article view the focused link
Comment View shortcuts
j
: Focus the next commentk
: Focus the previous commentn
: Focus the next top level commentp
: Focus the previous top level commentl
: Focus the next comment with smaller or equal levelh
: Focus the previous comment with smaller or equal levelr
: Reload the comment view.up
: Scroll updown
: Scroll downpage_up
: Scroll up half a pagepage_down
: Scroll down half a pageo
: Open in browser the article associated with the discussed storyO
: Open in article view the article associated with the discussed storys
: Open in browser the discussed storyc
: Open in browser the focused comment{link_id} f
: Open in browser the {link_id}-th link in the focused comment{link_id} F
: Open in article view the {link_id}-th link in the focused comment
Search View shortcuts
In SearchView
, there are two modes: Navigation
and Search
. The default mode is Search
.
Search
mode is similar to Vim's Insert mode, in which users can input the query string.
Navigation
mode allows the SearchView
to behave like a StoryView
with all StoryView
shortcuts enabled.
Key shortcuts:
i
: EnterSearch
mode fromNavigation
mode<esc>
: EnterNavigation
mode fromSearch
mode
Navigation
mode also supports a subset of StoryView
's key shortcuts.
Configuration
By default, the application will look for ~/.config/hn-tui.toml
as its configuration file.
You can specify the path by specifying the -c
or --config
argument when running the application:
hackernews_tui -c ~/.config/hn-tui.toml
For further information about the config options, please refer to the example config file by running hackernews_tui --example-config
.
Note: all config options (as included in the example config file) are required. You can run
hackernews_tui --example-config > ~/.config/hn-tui.toml
then modify the config options in ~/.config/hn-tui.toml
based on your preferences.
User-defined shortcuts
Shortcuts in each View
are full customizable, for futher information about the supported keys and the corresponding functionalities, please refer to the user-defined key bindings sections in the example config file by running hackernews_tui --example-config
.
Debug
Run
RUST_LOG=debug hackernews_tui 2> log.txt
to view the application's log in log.txt
file.
Roadmap
- make all commands customizable
- add a
View
to read the linked story in reader mode on the terminal. A list of possible suggestion can be found here - add commands to navigate parent comments and collapse a comment
- integrate HackerNews Official APIs for real-time updating, lazy-loading comments, and sorting stories
- snipe-like navigation, inspired by vim-snipe
- support more themes
- add some extra transition effects