What is Charm?
Version History
Project Page
LJcharm Community

[SourceForge.net Logo]

[ text-only mode ]

Why should you use Charm?

  • Charm is an entirely text-based client. Consequently, its system and hardware requirements are negligible; you just need something that supports the Python interpreter.

  • Charm has equal facility across a broad spectrum of blogging platforms. It has full-fledged support for LiveJournal-based sites, but it also supports the Atom API (for Blogger) and the MetaWeb API (for Wordpress, Movable Type, and so on). Atom support requires that you have the Feedparse module from http://feedparser.org/ installed.

  • Charm contains four major utilities in a single client: menu-driven posting/editing, "quick" command-line posting, archival, and friends-checking.

  • Normal, menu-driven mode. Charm uses menus of single-letter commands, and is thus easy to use. There's a full array of post and edit options.

  • "Quick" mode. Command-line-only, reading the body of the post from stdin. This allows very fast posting for casual use. But it also allows input to be piped to a post or taken from an arbitrary file, for filter-like uses. Thus, you could take some text, pipe it to the Enchefferizer (the "Swedish chef" text converter), or to a text-to-HTML converter like Markdown or Textile, and that pipe that to Charm for posting to your journal.

  • Friends-checking tool. Background polling mode for friend updates, displayed like the Unix 'newmail' utility. It can check all friends, or just specific friend groups. Even if you don't use Charm for anything else, you might find this useful.

  • Mass archiving. This is part of Charm's menu-driven mode. You can download and save part or all of your journal or a community. This is another useful standalone feature, particularly since you can set up your computer to automatically synchronize your offline archive with your online journal on a nightly basis.

  • Charm handles multiple usernames and shared journal access, including handling profiles for non-LiveJournal accounts (like DeadJournal). Passwords can optionally be stored/sent as a MD5 hash. It also has the ability to quickly cross-post between multiple journals/blogs.

  • Charm has a full set of features for editing and posting. Anything you can do from the LiveJournal posting and editing Web pages, you can do from Charm. Charm can also use an external spellchecker, and it can invoke external filters to modify the message body.

  • You can select moods, journals, picture keywords, friend groups, tags, etc. from menus. Unlike other console-based clients, you don't have to type these in; you just pick an option number from a menu.

  • Charm supports XMMS-based music detection, if you have the PyXMMS module from http://www.via.ecp.fr/~flo/ installed.

  • You can save, and later resume working on, an entry-in-progress. You can also save an entry while your computer is offline, and then quickly post it when you get back online.

  • You can set up templates, with default data in each of the fields, along with a default message body.

  • You can select online entries to edit in a flexible manner: most recent, last N entries, and by date. Choosing entries by date brings up a calendar of the chosen month, showing the number of posts each day.

  • When you post something, there's an option to archive it; you can also optionally archive edits made to posts already online. The archive organization is configurable; you can put all posts in one directory, use subdirectories for each year, and use subdirectories for each month (under subdirectories for each year).

  • Charm fully supports listing, adding, removing, and editing friends and friends groups.

  • Charm supports the LiveJournal administrative console commands, so you can use it to manage community membership, manage posting access to shared journals, and manage user bans.

  • Charm respects Unix environment variables for default programs.

  • Charm has proxy support. Python supports proxies transparently; just set your HTTP_PROXY environment variable to proxyhost:portnumber.