RSSリーダー決定版 canto の紹介


##はじめに

`Feedly`が不安定で遅かったり､取得できなかったりすることがあるので、コマンドラインで使える[canto](http://codezen.org/canto/)を使ってみました｡なかなかいいかんじです｡

<img src="http://upload.wikimedia.org/wikipedia/commons/d/d0/Arch_linux-beryl-sshot.png" width="480" height="272">


今回は､`canto`の使い方を紹介していきます｡ついでにCLIを好むユーザーにオススメできるブラウザの使い方なども紹介します。

一応､Linuxで動作する手順を書きますが、Macでも動かせます｡ただし、`canto`は、バージョンによって仕様がだいぶ異なりますので注意が必要です｡

##canto

###cantoのインストール

```bash:Linux/Arch
$ sudo yaourt -S canto
 
$ canto
```

```bash:Mac
$ sudo port install canto

$ canto
```

###cantoの起動オプション

```bash:
# アップデート
$ canto -u 
 
# 未読数の確認
$ canto -a
```

###cantoの基本操作

基本的に､ノーマルモード(Normal Mode)とリードモード(Reader Mode)に分けられ､キーバインドも異なります｡

####Normal

|キー|内容|設定|
|---|---|---|
|h|ヘルプ	|help|
|j|	カーソル移動(下)	|next_item|
|k	|カーソル移動(上)	|prev_item|
|space|	読む(リードモードに移行)|	"reader"|
|q	|終了	|quit|
|R	|すべて既読	|all_read|

参考:
[http://codezen.org/canto/config/#main-view](http://codezen.org/canto/config/#main-view)


####Reader


`Space`を押すと､記事を読むことが出来ます｡その時有効なキーバインドは以下の通りです｡

|キー|内容|設定|
|---|---|---|
|l	|リンク番号を表示する|	toggle_show_links|
|g	|リンク番号をブラウザで開く|	goto|
|↓	|スクロール(下)|	page_down|
|↑	|スクロール(上)|	page_up|


参考:
[http://codezen.org/canto/config/#reader-view](http://codezen.org/canto/config/#reader-view)


####リンク先をブラウザで開く

リンク先をブラウザで開くには、まず、`Space`でリードモードに移行します。

これにより、上の方に記事の中身が表示されます｡ここで、`l`(L)を押すと､リンクに番号が割り振られます。

そこで`g`を押すと､番号を指定し、ブラウザで開くという処理を実行できます｡

なお、ブラウザの設定は以下のような感じになります｡ヘッダとイメージでブラウザ(ツール)を分けられます。

```python:~/.canto/conf.py
link_handler("w3m \"%u\"", text=True)
image_handler("dwb \"%u\"", fetch=True)
```

ただし、ここではまだ設定しないでください｡次に､`canto`の初期設定方法を紹介します。

###cantoの初期設定

MacとLinuxでは、よく使用されているパッケージマネージャーによりインストールされるバージョンが異なります｡したがって、設定も若干異なることになります｡注意が必要です｡


具体的には､Macの場合､設定ファルをダウンロード後に､`URL`のみの設定を`conf`に書かなければなりません。

では、以下は､Linuxで有効な設定方法を紹介します｡

まず、設定ファイルをダウンロードします｡

```bash:
$ cd ~/.canto
 
$ curl -O http://codezen.org/static/conf.py.example
 
$ chmod +x conf.py.example
 
$ cp conf.py.example conf.py
 
$ vim conf.py
```

次に､設定ファイルの設定を見直していきましょう｡

フィードを追加するには､以下のように書きます｡表示数の指定やタグ付け、フィルタなどが利用できます。


```python:~/.canto/conf.py
add("http://someurl", rate=30, keep=100)
 
add("http://some-blog", tags=[None, "blogs"])
add("http://some-other-blog", tags=[None, "blogs"])
filters = [ None, with_tag_in("blogs") ]
 
add("http://feeds.penny-arcade.com/pa-mainsite") # Implicitly creates "Penny Arcade" tag
add_tag("Penny Arcade", filters=[only_with("Comic:"), only_with("News:")])
```

次にキーバインドの設定です｡ノーマルモードとリードモードがあります。モードによりキーバインドが異なります｡

```python:~/.canto/conf.py
keys['/'] = search_filter
keys['y'] = yank
 
reader_key['n'] = ["destroy", "just_read", "next_item", "reader", "toggle_show_links"]
reader_key['p'] = ["destroy", "just_read", "prev_item", "reader", "toggle_show_links"]
```

最後の行だけ見ていきましょう｡

`reader_key['p'] = ["destroy", "just_read", "prev_item", "reader", "toggle_show_links"]`

この設定は､前の記事を開いた状態で移動するというものです。末尾に `toggle_show_links`を追加したので、リンク番号を表示するという処理になります｡

つまり、最後の行では､`p`を押すと､「前の記事を"リンク番号を表示したまま"開く」というキーの設定ということになります。


これにより`l`を押す手間が省けます。

ブラウザの設定は､以下の通りです｡

```python:~/.canto/conf.py
link_handler("w3m \"%u\"", text=True)
image_handler("dwb \"%u\"", fetch=True)
```

テキストブラウザかそうでないかで、記述が変わってきますので注意が必要です｡

ここで、`w3m`と`dwb`というブラウザを設定してみました｡

つまり、`g`(goto)でリンクを開くと､`w3m`が起動し､イメージを開くと､`dwb`が起動することになります｡

参考:
[http://codezen.org/canto/config/#example-config](http://codezen.org/canto/config/#example-config)

では、以下では､`w3m`と`dwb`の基本的な使い方を紹介していきたいと思います｡

といっても、`canto`との連携に役立つ限りで紹介していきます。

##w3m

###w3mのインストール

```bash:
$ sudo pacman -S w3m xclip
```

<img src="http://i.imgur.com/EbVqd.png" width="480" height="272">


###w3mの便利設定

`w3m`をブラウザに設定した場合は、以下の様なキーバインドを設定しておくと便利です｡


```bash:~/.w3m/keymap
keymap m EXTERN_LINK "echo %s | xclip -i -selection clipboard"
keymap M EXTERN "echo %s | xclip -i -selection clipboard"
```

参考:
[http://mba-hack.blogspot.jp/2012/10/w3m.html](http://mba-hack.blogspot.jp/2012/10/w3m.html)

###x11 Clipboard

Linuxの`x11`クリップボードは、以下の様な形態になっています。 `-selection`で指定します。

|-selection|内容|
|---|---|
|primary|	マウスでテキストを反転させてコピーした場合|
|clipboard	|マウスでテキストを反転させ、右クリックしてコピーを選択した場合|
|secondary|	-|

Linuxのx11クリップボードを使う場合は､必須の知識です。シェルや端末で独自に設定したい場合は､このようなコマンドになります。

####x11 クリップボードへ放り込む

`$ xclip -i -selection clipboard`

####x11 クリップボードから読み込む

`$ xclip -o -selection clipboard`


参考:
[http://l-w-i.net/t/x/clipboard_001.txt](http://l-w-i.net/t/x/clipboard_001.txt)

なお、Linuxのクリップボードには、`xsel`もよく使われます。`Arch Wiki`などでは、`xclip`が推されていますが…。

しかし、`Arch Wiki`の充実度は､素晴らしいですね｡私が､Archを使っているのは、この影響も大きいです。

話が逸れましたね。話を戻します。

w3mの話は､これで終わります。次は､`deb`というブラウザの使い方を紹介していきます｡


##dwb

###dwbとは

軽量のGUIブラウザです｡

私は､Linuxでは、普段使いとして`dwb`というブラウザを使用しています｡簡易なブラウジングには、オススメできます。

<img src="http://portix.bitbucket.org/dwb/resources/hints.jpg" width="480" height="272" >


また、デフォルトのキーバインドがとても優れています。dwbがデフォルトで持っている拡張は、不要ですし、容易です｡

不要というのは､基本機能とキーバインドがデフォルトで素晴らしいので、`dwb`は、あまり拡張する必要がないと個人的には考えています｡

###dwbのキーバインド

|キー	|内容|エイリアス,コマンド|
|---|---|---|
|i	|インサートモードに移行|i|
|:|コマンドモードに移行|-|
|Esc,C-n	|ノーマルモードに移行|-|
|/	|検索| ffind|
|f|	リンクを開く| hi|
|F|	リンクをタブで開く|thi|
|j, k, h, l|	スクロール、戻る、進む|down …etc|
|C+Tab|	タブ移動|ttab|
|d|	タブを閉じる|close_tab|
|;y|	リンクをクリップボードに保存します| chi|
|yy|	URLをクリップボードに保存します|yank|
|yt|	タイトルをクリップボードに保存します|tyank|
|Sk|	キーバインドの設定を開く|skeys|
|Ss|	設定を開く|ssettings|
|C-q|終了|q|

###dwbの設定

カスタムキーを設定するには､ `~/.config/dwb/default/custom_keys`に書きます｡


書き方は､以下の様な感じです。

```bash:~/.config/dwb/default/custom_keys
Control ;g :t http://google.com;; 150zoom
Control w :close_tab
```

例えば､上記は､`;g`を押すと､`Google`をタブで`ズーム+150`の状態で開くというものです。

その他の設定についても、同様のフォルダ内にあります。

参考:
[http://portix.bitbucket.org/dwb/resources/manpage.html](http://portix.bitbucket.org/dwb/resources/manpage.html)
[https://wiki.archlinux.org/index.php/Dwb](https://wiki.archlinux.org/index.php/Dwb)

###dwbでのテキストコピー

例えば､テキストの選択は以下のようにします｡

1. `/https + n`

2. `i + Shift + → + C+c`


簡単には､検索した後、インサートモードでテキストを選択､コピーします。

リンクをコピーしたければ､`;y`などのキーが便利です｡

##tmux

###tmuxとの連携

<img src="http://tmux.sourceforge.net/tmux5.png" width="480" height="272">
テキストブラウザを使用する場合は､tmuxを使って､画面をコピーできるようにしておくと便利です｡1キーでコピーできるように工夫しています。

```bash:~/.tmux.conf
# 設定リロード
bind r source-file ~/.tmux.conf \; display-message "Reload Config!!"
 
# "C-b, [" コピーモードの設定 vi
#set-window-option -g mode-keys vi
setw -g mode-keys vi
 
# [?]キーバインドの確認
 
# [p]貼り付け
bind p paste-buffer
 
# c[Enter]コピー
#bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
bind -t vi-copy Enter copy-pipe "xclip -i -selection clipboard"
 
# c[Space]選択
 
# [y]1行コピー(クリップボードとの連携がない場合)
bind -t vi-copy Enter copy-pipe "xclip -i -selection clipboard"
bind -t vi-copy Y select-line
bind y run 'tmux copy-mode\; send-keys Y Enter'
 
## [y]1行コピー(クリップボードとの連携がある場合)
#bind -t vi-copy Y select-line
#bind y run 'tmux copy-mode\; send-keys Y'
 
# [v]全行コピー
bind -t vi-copy V begin-selection
bind v run 'tmux copy-mode\; send-keys ggVG Enter'
```

参考:
[http://mba-hack.blogspot.jp/2013/05/tmux.html](http://mba-hack.blogspot.jp/2013/05/tmux.html)


##追記

だれか、`dwb`で連続`hints`を行うマクロかTipsがあれば教えて下さい｡