ターミナルで動くちょっとリッチなTwitterクライアント作ったよ

# 作ったよ！！！

リポジトリはここだよ！！！

https://github.com/gretchi/twim

iTerm2で完全動作するように開発してるけどいくつかの端末エミュレータでも動作するよ
まだまだ問題も多いけどギリギリ実用化にこぎつけたよ！！！(本人談)


めんどくさ…
書きたいこと全部 README に書いちゃったからREADMEそのまま載せるね！！！

# twim

ターミナルで動くTwitterクライアントだよ
Windows の Twitter クライアントである Tween と vim にインスパイアされて作ったよ


![twim_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/5ad690e2-c3e6-522e-12b4-e9d23269f0a8.png)

![ss_000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/c120e537-6400-8084-cefd-80d109f4d5b1.png)

## usage

setup.py は機能してないので､ pyenv で環境作るかシステムの Python3 で直に `pip install -r requirements.txt` すれば動かせる状態になるよ

```
# 起動コマンド
./twim.py
```

### 初回起動時

![ss_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/b30bc1de-2c67-a289-9443-5905b1d17e49.png)


初回起動時にクライアントトークンを取得するために勝手にブラウザが開くよ｡

SSH経由とか､未対応OSでブラウザを開けない場合､ターミナルにURLが表示されてそれを手でブラウザに貼っつけて､取得したトークンをターミナルに貼っつけるとクライアントトークンが取得出来るって機能を実装したような気がするけど､引数渡す必要があったかも｡

アクセストークンとかは `${HOME}/.twim` に保存されるよ
## 画面

![ss_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/1dc73712-428a-0c62-7df3-6aa5cb5ac73f.png)


上から順に濃いグレーの仕切りで以下の3つのペインに分かれてるよ

- タイムライン
- ツイート詳細
- フッター


### タイムライン

ツイートの一覧を表示してる画面だよ｡後述の操作はこのペインに対して行われるよ
本文の色でそのツイートのステータスがわかるよ
色別の意味と表示の優先順位は以下の通り

1. 黄色背景: カーソル位置
1. グレー背景: カーソル位置のツイート主のツイート
1. 赤文字: ファボした
1. 緑文字: リツイート
1. 青文字: フォロワー外のツイート
1. 白文字: フォロワーのツイート

### ツイート詳細

カーソルのツイートの詳細が見れるよ
名前の部分はタイムラインでの色分けに準ずるよ
サイズ変更はできないので､文字数が多い時とか画像リンクが見たいときは `o` でブラウザが開くよ(後述)

### フッター

緑背景の `TIMELINE` はタイムラインモードを指してるよ｡今のところタイムラインモードしか無いよ
右はタイムラインの更新日時と次のTL取得までの秒数､ API の残弾が表示されてるよ
一番下はクライアントからのメッセージだよ｡API の制限引っかかってたりすると赤文字が表示されるよ

## 操作

基本的には Tween に準じた操作体系になってるよ
ちょっぴり vim テイストも入ってるよ

### カーソル移動

カーソル移動は `j` で一件古いツイート, `k` で一件新しいツイート, スペースで最新の未読ツイートにジャンプできるよ

### つぶやく

`t` でツイート `r` でカーソルのツイートに対してリプライ

`@` でリプライ先の候補がサジェストされるよ｡ `up arrow` キー, `down arrow` キーで選択できるよ


![ss_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/233c2e3b-9a4d-1e5b-bb8f-8c7fe3655381.png)


### ふぁぼ & RT

`Ctrl + s` or `Alt + s` ふぁぼ
`Ctrl + r` リツイート

### 検索

`/` で検索(正規表現)
`n` で次の検索結果(より古い), `N` で前の検索結果(より新しい)


![ss_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/826a3bbe-e63b-da2a-b4ab-76fca06e4357.png)


### その他

`p` でカーソルのツイートのツイート主のプロフィールをブラウザで開く (環境依存)
`o` でカーソルのツイートをブラウザで開く (画像付きツイートとかこれで見て) (環境依存)

`Ctrl + S` 表示がおかしいときに強制的に再描画する

### ヘルプ

`s` キーを押すとヘルプが出るからわからなくなったら確認してみてね


![ss_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/4bf106e0-46ea-8dd7-4af8-93f7e90013c7.png)


## 動作環境

iTerm2 をターゲットに開発してるけどいくつか環境ごとの個別最適を施してるから他のOS､端末エミュレータでもある程度は動作すると思うよ

- Windows
    - Cygwin(Mintty) たぶん動いたはず
        - 初回の認証でブラウザ開かなかったかも
    - WSL2
        - 動作確認したことないけど標準だと初回のブラウザが開かないと思う
        - 表示とかキー操作とかは端末エミュレータに依存するよ
    - RLogin
        - SSH 経由で結構ちゃんと動いた気がする
- macOS
    - iTerm2 完全に動作
    - Terminal.app 一部修飾キーが動作しなかったような気がする
        - ESC キーが動作しなかったかも｡ Ctrl + x で代用できるようにしてあるよ
- Linux
    - GNOME-terminal だいたい動作した気がする
        - 初回の認証でブラウザ開けないディストリビューションがあるかも(Ubuntuは動いた)
        - ESC キーが動作しなかったかも｡ Ctrl + x で代用できるようにしてあるよ
        - 日本語入力が怪しい
- iOS
    - iSH あんまちゃんと動かなかったような気がする
- Android
    - Termux まあまあちゃんと動いた

## 既知の不具合とか直したいところとか

- ウィンドウサイズを変更すると curses がおかしくなる
- ツイートウィンドウを開いてる間ツイートの更新がされない
- ESC キーを認識しない端末エミュレータが多々ある (Ctrl + xで代用可)
- 文字入力バックスペース押すと消した文字が残ったりすることがある
- 文字入力で途中挿入ができないから出来るようにしたい


## API Key について

転用はしないでね｡