Moogle - A curses based google reader client

Moogle is a curses client for google reader, influenced by the best MUA ever, Mutt. Like mutt moogle has keybindings for everything, and supports limit expressions to restrict what you're shown.

Moogle was written to scratch an itch - there were console rss readers[1, 2] and GUI rss readers which can sync to google reader[3] and Google Reader proper but no console reader which could sync to google reader: enter moogle.

Moogle's not for everyone, as Zed said (though he was talking about newsbeuter):

Now, I’m sure tons of people will scoff at the idea of not having graphics in their feed. They’ve gotta have that curvy candy coated interface with the flash video about Steampunk Buttplugs posted by BoingBoing blaring right in their fucking face or else they don’t feel alive. They don’t feel young. Dammit, they want to augment that Nerd ADD with a feed reader that goes to eleven!

If that sounds like you, maybe you won't like moogle.


Moogle Screenshot


Why should you use moogle?

Getting Started

Using setting up moogle is simple: there are no configuration options, and only one required configuration file, ~/.moogle/cred which should contain your google reader credentials in the form:,password

Moogle is a work in progress - to get going try python in the moogle directory, simple help is available by pressing "?".


The default set of commands is:

<space>:  Select the next unread item.
*:  Toggle 'star' state of the selected item.
::  Execute python command in the context of this program.  DANGEROUS
?:  Show help.
J:  Scroll the current item down.
K:  Scroll the current item up.
N:  Select the next message.
O:  Toggle the online state.
P:  Select the previous message.
R:  Mark all tagged items as read.
T:  Toggle the 'tagged' state for all items matching expr.
d:  Print a debug summary of the selected item.
j:  Scroll the current item down.
k:  Scroll the current item up.
l:  Limit the display of items according to an expression.
n:  Select the next message.
o:  Open the currently selected item
p:  Select the previous message.
q:  Quit.
s:  Save the current items for offline reading.
t:  Toggle 'tagged' state of an item.
x:  Force an update.

Most commands are simple, and do exactly what you'd expect. Keybindings can be created and modified at run time by using Config.bind(key, function).

The Limit Command

Limit accepts a python expression and uses it to filter the feed items shown. To only show items from the BBC try Limit: "BBC" in item.feed or to show only items labelled "comics" Limit: "comics" in item.labels. A full list of item attributes can be seen in the source, or in the debug output (bound to "d" by default).

Any python expression returning a boolean can be used as a limit expression, but probably you'll want to limit based on some property of the each item. Common attributes for an item are:

Config Save/Restore

Moogle now supports the saving and restoring of configuration to and from the file ~/.moogle/config in YaML. Moogle will load an existing config file during initialisation, to create a config file run"~/.moogle/config"), and to run a new config run Config.restore(filename="~/.moogle/config"). The default configuration looks like:

browser: x-www-browser
- labels
- author
- date
- feed
- title
history_file: /home/joe/.moogle/history
index_length: 5
  '*': star
  ':': command
  <down>: scroll_down
  <space>: next_unread_message
  <up>: scroll_up
  '?': help
  J: scroll_down
  K: scroll_up
  N: next_message
  O: online
  P: previous_message
  R: read_tagged
  T: tag_set
  d: debug_dump_item
  j: scroll_down
  k: scroll_up
  l: limit
  n: next_message
  o: open_item
  p: previous_message
  q: quit
  s: save
  t: tag
  x: update

The keys <up>, <down>, and <space> are mapped to curses.KEY_UP, curses.KEY_DOWN, and curses.KEY_SPACE respectively.


No packages yet - grab a tarball or clone your own from git.