Keymap

synd key bindings are grouped by keymap layer. A layer is an active UI context, such as entries, feeds, or filter.

Custom Key Bindings

Key bindings can be customized in the configuration file under [keys.<layer>].

[keys.entries]
keymap = [
  { on = "j", command = "entries.next", desc = "Next entry" },
  { on = ["g", "g"], command = "entries.first", desc = "Go to first entry" },
  { on = "up", command = "no_op" },
]

on is either a single key string or an array of key strings for multi-key sequences. The example above binds g followed by g.

User keymaps are merged onto the default keymaps:

  • a binding with the same on in the same layer replaces the default binding
  • a binding with a new on is added to that layer
  • command = "no_op" disables that key sequence in that layer

desc is optional description metadata for the binding.

Commands are validated against the layer. For example, entries.next is valid in the entries layer, but not in the feeds layer.

Key names use the same notation as the default keymap, including enter, space, tab, backtab, esc, arrow keys, C-c for Control-C, S-t for Shift-T, and A-enter for Alt-Enter.

Configurable layers:

LayerContext
appAlways active application keys
globalAlways active normal keys
loginAuthentication screen
tabsTab navigation
entriesEntries tab
feedsFeeds tab
filterEntry/feed filter controls
unsubscribe-popupFeed unsubscribe confirmation
github-notificationsGitHub notifications tab
github-notification-filter-popupGitHub notification filter popup

category-filter and search-prompt are runtime-generated layers. Their dynamic bindings are managed by the application for now.

Commands

CommandLayer
no_opany layer
app.quitapp, global
theme.rotateglobal
login.authenticatelogin
login.provider.prevlogin
login.provider.nextlogin
tabs.prevtabs
tabs.nexttabs
entries.preventries
entries.nextentries
entries.firstentries
entries.lastentries
entries.reloadentries
entries.openentries
entries.browseentries
feeds.prevfeeds
feeds.nextfeeds
feeds.firstfeeds
feeds.lastfeeds
feeds.subscribefeeds
feeds.editfeeds
feeds.unsubscribefeeds
feeds.refresh-selectedfeeds
feeds.reloadfeeds
feeds.openfeeds
feeds.unsubscribe-popup.prevunsubscribe-popup
feeds.unsubscribe-popup.nextunsubscribe-popup
feeds.unsubscribe-popup.selectunsubscribe-popup
feeds.unsubscribe-popup.cancelunsubscribe-popup
filter.requirement.prevfilter
filter.requirement.nextfilter
filter.categoryfilter
filter.searchfilter
filter.closefilter
github-notifications.prevgithub-notifications
github-notifications.nextgithub-notifications
github-notifications.firstgithub-notifications
github-notifications.lastgithub-notifications
github-notifications.opengithub-notifications
github-notifications.open-and-donegithub-notifications
github-notifications.reloadgithub-notifications
github-notifications.mark-donegithub-notifications
github-notifications.mark-all-donegithub-notifications
github-notifications.unsubscribe-threadgithub-notifications
github-notifications.filter.opengithub-notifications
github-notifications.filter.closegithub-notification-filter-popup
github-notifications.filter.include-unread.togglegithub-notification-filter-popup
github-notifications.filter.participating.togglegithub-notification-filter-popup
github-notifications.filter.visibility-public.togglegithub-notification-filter-popup
github-notifications.filter.visibility-private.togglegithub-notification-filter-popup
github-notifications.filter.pr-open.togglegithub-notification-filter-popup
github-notifications.filter.pr-closed.togglegithub-notification-filter-popup
github-notifications.filter.pr-merged.togglegithub-notification-filter-popup
github-notifications.filter.reason-mentioned.togglegithub-notification-filter-popup
github-notifications.filter.reason-review-requested.togglegithub-notification-filter-popup

Default Key Bindings

KeyDescription
k/jMove up/down
ggGo to first
geGo to end
TabSwitch tab
EnterOpen entry/feed with web browser
SpaceOpen entry with text browser ($SYND_BROWSER)
aAdd feed subscription on the Feeds tab
eEdit subscribed feed on the Feeds tab
dDelete subscribed feed on the Feeds tab
rReload entries/feeds
h/lChange requirement filter
cActivate category filter (Esc to deactivate)
+Activate all categories on category filter
-Deactivate all categories on category filter
/Activate keyword search (Esc to deactivate)
qQuit app