The compulsory Frequently Asked Questions page.

[TOC]

## Why Canto?

<div class="section">

**The interface.**

I'm not sure how people can stand three-pane readers. Graphical or console, I don't want to tab around multiple windows to read my news. The way I read, I want all of the headlines out where I can see them with minimal cruft. It should be one key stroke to do most common actions.

**Extensibility**

Everything used to configure Canto is actually part of the Python interpreter. It has all of the power of Python anywhere. Hooks are provided to allow you to perform actions on particular events (start,stop,update,resize,select,unselect), filters allow you to filter items out on arbitrary terms (globally or on a feed basis), and intelligent keybinds allow you to script your way to pretty much anything you want. 

Examples:

- Use a keybind to write the item to a file, or mail it to a friend.
- Use a filter to only browse through items you haven't read yet.
- Use a custom renderer for a feed to display extra information on its items.
- Sort feeds by date, alphabetically, by length, or by number of comments in article
- Keybind your favorite search terms to cycle through them.
- Detect that your terminal is xterm or a tty and set the browser appropriately
- Arbitrary things, like change the theme based on the time of day

The point being that, with all of Python behind it, you can manipulate Canto in new and inventive ways without any help from me. My limited vision doesn't encumber how you use the software.

**Theming**

All of the drawing code is done by a simple class full of literate Python. If you want to modify how anything is drawn to the screen, subclass the renderer, change anything you want and voila... Canto now draws differently. Sounds a lot harder than it is.

This allows you a lot of flexibility to do things like highlight particular keywords, or change the way a particular feed is drawn, or even what stories are drawn at all. Again, just because I didn't think to add support to the reader for what you want to do, doesn't mean you can't do it.

</div>

## Does Canto support Atom feeds?

<div class="section">

Yes. Canto uses [feedparser](http://feedparser.org) which is capable of parsing virtually any syndicated news format on the planet and aside from that, Canto doesn't care.

</div>

## Does Canto support OPML?

<div class="section">

Yes, as of 0.5.2, Canto support importing from/export to OPML, as well as adding feeds from an OPML file via config using ([source_opml](../config/#source_opml)).

</div>

## Does Canto support Unicode/UTF-8?

<div class="section">

Yes. As long as your terminal and its font can support it, then Canto can output it. If you can't see certain characters try using a pan-Unicode font (like unifont) with your terminal. Then you can read all of your Unicode Klingon characters.

</div>

## What does Canto require?

<div class="section">

Canto >=0.5.0 requires Python 2.5 or better, ncurses 5.5 or better, [feedparser](http://feedparser.org), and [chardet](http://chardet.feedparser.org). There are packages for all four of these dependencies in all major distributions. I actively test with Debian's sid (unstable) packages, which can cause trouble because feedparser doesn't make releases very often so a lot of distros have heavily patched versions (as of this writing, Debian has 12 patches against the vanilla feedparser 4.1 source).

To **build** Canto: GCC or another standards compliant C compiler, ncurses header files, and python header files (for compiling the core code).

</div>

## Why ncurses?

<div class="section">

I am one of those internet nutjobs that believe that the mouse shouldn't have made it as far as it has in the world. I like to be able to do everything from the keyboard, and a lot of times that means using console apps because they seem to be the only ones not following the click-button paradigm.

There's also the fact that virtually every Unix-like distro has ncurses installed by default, so that the user doesn't have to choose apps based on what will best integrate into their desktop. How many times have you found a piece of software and are disappointed because it doesn't really fit with everything else? People in Gnome running Amarok know exactly what I'm talking about.

Then there's the fact that I like to read news from in SSH sessions (very nice when you're on campus, or at work).

And finally, I just really dig text-interfaces. [XMonad](http://xmonad.org) and have six million xterms running with [vim](http://www.vim.org),[mutt](http://mutt.org), and [moc](http://moc.daper.net) at all times.

</div>

## Why Python?

<div class="section">

The previous iteration of this project was in C (NRSS, which is deprecated in favor of Canto now). Now C is great. I love C. I do my daily work in C and I enjoy it.

But when it comes to *having fun* while coding, Python is the way to go. I know you take a speed hit, but that's why the core drawing logic is in C (surprise!). And there's one thing that I've learned while bugfixing NRSS, and that's that it's no fun.

In addition, Mark Pilgrim's excellent [feedparser](http://feedparser.org) and [chardet](http://chardet.feedparser.org) libraries are native to Python, and they make life a lot easier.

Lastly, Python is also second only to Perl in system adoption and... God knows I wouldn't want to write this in Perl =).

</div>

## What license is Canto under?

<div class="section">

Canto is [GPLv2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html) software. Just like all the other software **real** men write.

</div>

## What platform does Canto run on?

<div class="section">

*Theoretically*, Canto should run under any Unix-like OS with Python and a compatible ncurses library. Everything is in Python, and the core drawing code is known to have compiled on Linux and at some point in time, on the three major BSD operating systems. There have been problems with BSD support, however, particularly with OpenBSD.

Testing of Canto, however, hasn't been done extensively on any system other than Linux x86/amd64, because that's what I (and 99% of the desktop users) have at home. 

Since 0.5.7 there's been an official Debian package which is built on every architecture Debian supports, this includes alpha, amd64, armel, hppa, i386, ia64, m68k, mips, mipsel, powerpc, s390, and sparc. This doesn't necessarily mean that Canto *runs* on all of these, but it at least builds which is a good sign.

</div>

## Where should I request features /  report bugs?

<div class="section">

Read the [contact](../contact) page. In short you should either get into the IRC channel, write a message on the Mailing List or submit a bug report to the [bug tracker](http://code.google.com/p/canto-reader/issues/list).

</div>
