CrowiのEmacsクライアント

<!---
CrowiのEmacsクライアント
--->


[Crowi](http://site.crowi.wiki/)いいですよね〜。愛用しております。
Webのエディタも使いやすいと思うのですが、がりがり長文かくときは、やっぱり普段使いのもので書きたいということで、Emacsクライアントを作ってみました。


# インストール

Github: https://github.com/hirocarma/emacs-crowi

``` console
$git clone https://github.com/hirocarma/emacs-crowi
```
* crowi.elをEmacsのロードパスの通ったところにおいて下さい。
* curlが必要。
* 以下の基本的な設定をinit.elに追加してください。

``` elisp
(require 'crowi)
(setq crowi-access-token "xxxxxxxxxxxxxxx") ; User setting -> API settings
(setq crowi-user "crowi username") ;default (getenv "USER")
(setq crowi-uri "http://hogehoge.com:3000") ;default http://localhost:3000
```

# サポートするAPI
* usres.list
* pages.list pages.get pages.update pages.create
* comments.get comments.add
* attachments.list attachments.add attachments.remove

# 使いかた

| コマンド                         | 説明                                                               |
|:---------------------------------|:-------------------------------------------------------------------|
| `crowi-users-list`               | 新しく作成したバッファにユーザリスト（ユーザ名、電子メール）を出力 |
| `crowi-pages-list`               | 新しく作成したバッファにCrowiのページのリストを出力                |
| `crowi-pages-get`                | 指定したページを新しく作成したバッファに出力                       |
| `crowi-pages-update-from-buffer` | バッファの内容でページを更新                                       |
| `crowi-pages-update-from-file`   | ファイルの内容でページを更新                                       |
| `crowi-pages-from-buffer`        | バッファの内容でページを作成                                       |
| `crowi-pages-from-file`          | ファイルからページを作成                                           |
| `crowi-comments-get`             | 新しく作成したバッファにコメント一覧を出力                         |
| `crowi-comments-add-from-buffer` | バッファの内容でコメントを追加                                     |
| `crowi-attachments-download`     | 指定したページの添付ファイルをダウンロード                         |
| `crowi-attachments-add`          | 指定したページに添付ファイルを追加                                 |

## 補完候補

* Crowiのパスやファイルを指定する場合は、補完候補を表示します。(completing-read)
必須ではありませんが、helmないしidoの利用をお勧めします。

* ページを更新したり、コメントを追加したりするときは、ページを指定する必要がありますが、
その場合、ページのリストをサーバーから取得して、補完候補として表示します。

* 新たにページを作成するときは、Crowiのパスを指定する必要があります。
それぞれ親パスとページ名をそれぞれ別に聞いてきます。
(少なくとも私の場合)既存のパスのどこかに新規に追加したいことが多いので。

* 作成先の候補を表示するときは、既存のパスを候補に表示するのに加えて、
"/user/username/memo/YY/MM/DD"も候補として表示します。  
これはCrowiの 'New'ボタンを押したときの挙動の真似です。

*ファイルからページを作成する場合は、ファイル名(basename)を候補として出します。

## 取得したページや添付ファイルの保存

* `crowi-markdown-save`変数をtに設定すると、
Markdownファイルを `crowi-markdown-save-path`に保存します。

* 保存する際には、Crowiのパス名を維持します。

```
例:
Crowi path: /user/taro/memo/hogehoge
crowi-markdown-save-path: ~/wiki

download path -> ~/wiki//user/taro/memo/hogehoge.md
```

* 添付ファイルはページ名を先頭につけて保存します。

```
例:
/user/taro/memo/hogehogeの添付ファイルimage.png
crowi-markdown-save-path: ~/wiki

download path -> ~/wiki//user/taro/memo/hogehoge_image.png
```
## カスタマイズ可能な変数

| 変数                         | type    | default               |                                              |
|:-----------------------------|:-------:|:----------------------|:---------------------------------------------|
| `crowi-uri`                  |         | http://localhost:3000 | crowiサーバーのuri|
| `crowi-access-token`         | string  | なし                  | crowiアクセストークン |
| `crowi-user`                 | string  | getenv "USER"         | crowiユーザー名|
| `crowi-curl`                 | string  | curl                  | curlコマンド|
| `crowi-curl-options`         | string  | なし                  | Curlコマンドの追加オプション。各オプションはスペース区切り |
| `crowi-markdown-save`        | boolean | nil                   | マークダウンをファイルに保存するかどうか|
| `crowi-markdown-save-path`   | string   | 〜/ wiki             | Markdownを保存するパス|
| `crowi-attachment-save-path` | string   | 〜/ wiki             | 添付ファイルを保存するパス|

## キー割り当て例

* Markdown modeでキーを割り当てる場合

``` elisp
(add-hook 'markdown-mode-hook
		  (lambda () (local-set-key "\C-cu" 'crowi-pages-update-from-file)))
```

## ライセンス
MIT