20240320の日記、RR-automateの開発記録、WezTermの初期位置とサイズ設定、neovimあれこれ

### RR-automateの改良

#### Jake Paulの画像追加
DiscordにもJake Paulをなんとかしてくれ、というリクエストがあったけど、ほんとこれ欠片をゲットできないから強化できないし完全オワコンヒーローなんだよね
R.I.P.
![Jake Paul.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3740499/2a4cfdd6-2173-7b02-2ce1-f1e86fff5568.png)

#### こんな関数はどう作るといいの？
* エラーの数を返す
* さらに何らかのリストを作って返したい
* 呼び出し元がリストを渡して、関数の中で追加する、というのはやりたくない
* すると、`return (error_count, some_list)` ってやるの？

Result型というのが似てるけど、ちょっと違う
[PythonでのResult型、returnsでエラー処理してみる #Python - Qiita](https://qiita.com/sobacha/items/ed4f9b2a49badf129797)
そういう型をつくるのかな

もしかして根本的に考え方間違ってる？

#### クラスのメソッドが自分を返すとき

```
class Aaa:
    def method(self) -> Aaa:
        return self
```

は動かないので文字列にするか

```
class Aaa:
    def method(self) -> 'Aaa':
        return self
```

なんか長々しいのをimportするとよい

```
from __future__ import annotations

class Aaa:
    def method(self) -> Aaa:
        return self
```

#### オブジェクトを文字列にするのは__str__を定義するとよい
参考：[クラスの特殊メソッド 文字列型「str」に変換する __str__ - ALL Python(オールパイソン)](https://allmaintenance.jp/webdirection/programing/python/%e3%82%af%e3%83%a9%e3%82%b9%e3%81%ae%e7%89%b9%e6%ae%8a%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%80%80%e6%96%87%e5%ad%97%e5%88%97%e5%9e%8b%e3%80%8cstr%e3%80%8d%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99/)
Heroクラスがあって、nameにZeusとか入ってるんだけど普通にprintしたのと、`__str__(self): return self.name`を作っておいたのを比較
    ```python:普通
    (Pdb) print(_hero)
    <modules.rushroyale_stats.Hero object at 0x0000011F118D1610>
    ```
    ```python:__str__ 作っておいたほう
    (Pdb) print(_hero)
    Zeus
    ```
とやってくれる。けどカンストかどうかわからなくなってしまったのでそこなんとかしないと

#### 親クラスのメソッドを呼ぶ
super()を使うとよい
```
class Aaa:
    def method_name(self):
        なにかする
        
class Xxx(Aaa):
    def method_name(self):
        super().method_name()
```

### WezTermの起動時の場所とサイズ設定
これ意外と見つからなかった
起動時オプションもあるらしいけどそうじゃなくってwezterm.luaでやる方法

こんな風にしたらできた
```
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
local mux = wezterm.mux

-- position and size
wezterm.on('gui-startup', function(cmd)
  local tab, pane, window = mux.spawn_window(cmd or {width=158, height=56})
  window:gui_window():set_position(0,0)
  window:set_inner_size(800, 1020)
end)
```
mux_spawn_windowの引数にデフォルトの幅と高さを渡しているが、これは158文字、56行ということ、pixelとか%じゃないので注意（ほとんどのエディタがそうかもしれない）

参考：
[Add an option set the initial window position · Issue #1794 · wez/wezterm](https://github.com/wez/wezterm/issues/1794#issuecomment-1236343066)のやりとり
公式のリファレンスが役に立つ
* https://wezfurlong.org/wezterm/config/lua/gui-events/gui-startup.html
* https://wezfurlong.org/wezterm/config/lua/window/set_position.html
* https://wezfurlong.org/wezterm/config/lua/wezterm.mux/spawn_window.html

### neovim関連

#### pythonのコードを折りたたむ
vim.o.foldmethodあたりの2行追加
```lua:
    config = function()
      if vim.loop.os_uname().sysname == 'Linux' then
        local configs = require('nvim-treesitter.configs')
        configs.setup({
          ensure_installed = { 'lua', 'python', 'yaml', 'json', 'markdown' },
	      sync_install = false,
	      highlight = { enable = true },
	      indent = { enable = true },
        })
	  end
      -- fold
      vim.o.foldmethod = 'expr' -- ココ
      vim.o.foldexpr = 'nvim_treesitter#foldexpr()' -- ココ
	end
```

foldの使い方：
* zoで折りたたみを一段階開き、zOで折りたたみを全部開く
* zcで折りたたみを閉じ、zCで全部閉じる
* zRでファイル全体の折りたたみを開く

いずれもカーソル下、もしくは選択範囲に有効
ファイル全体対象のもあるはず

参考：
[Treesitter code folding : r/neovim]
これはリンクを張れなかった。内容がよろしくない的なのがでた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3740499/0752bf13-9a59-c0f1-2b29-720122d760d2.png)

リンクじゃなくして張り付ける
httpｓ://www.レディっと.com/r/neovim/comments/njew3z/treesitter_code_folding/

#### デバッグしたい、、
pdb.set_traceで止めてみるのいい加減いやになってきた
いずれこのあたり参考にしてよくしたい
* [nvim-dap で neovim でも Python コードをデバッグしたい](https://zenn.dev/kawat/articles/51f9cc1f0f0aa9)
* [inducer/pudb: Full-screen console debugger for Python](https://github.com/inducer/pudb)

#### 画像表示したい
* このあたりかなあ
[3rd/image.nvim: 🖼️ Bringing images to Neovim.](https://github.com/3rd/image.nvim)
WezTermだとueberzugppないと動かないかも
[jstkdng/ueberzugpp: Drop in replacement for ueberzug written in C++](https://github.com/jstkdng/ueberzugpp)
* あとはこれ
[edluffy/hologram.nvim: 👻 A cross platform terminal image viewer for Neovim. Extensible and fast, written in Lua and C. Works on macOS and Linux.](https://github.com/edluffy/hologram.nvim)
* WezTerm向きなのあった！
[adelarsq/image_preview.nvim: Image Preview for Neovim 🖼](https://github.com/adelarsq/image_preview.nvim)
-> けど動かない
* telescopeのもあった！けどだめ
[nvim-telescope/telescope-media-files.nvim: Telescope extension to preview media files using Ueberzug.](https://github.com/nvim-telescope/telescope-media-files.nvim)
    * ここと同じエラー、Winでは出てくるけどUbuntu on WSLでは何も出てこない
    [Telescope-media-files not works · Issue #11 · nvim-telescope/telescope-media-files.nvim](https://github.com/nvim-telescope/telescope-media-files.nvim/issues/11)

ちょっとよくわからないな、、、今はあきらめよう
[Neovim の Terminal で画像表示や動画再生 #Linux - Qiita](https://qiita.com/rattcv/items/8a82c7d25ddf617a976c)
sixel、libvtermあたりがキーワードっぽいけど


##### Wezterm用の何かがあった
* [willothy/wezterm.nvim: Utilities for interacting with Wezterm from within Neovim](https://github.com/willothy/wezterm.nvim/)

##### もうすこしだけ頑張ってみた 
###### WezTermでUbuntu on WSL2を起動、img2sixelを使ってみた
がやっぱだめ
apt install libsixel-dev libsixel-bin してimg2sixelしたけど表示されない
ターミナルはWezTermなのでsixelに対応していると思うんだけどな
参考？： [libsixel package : Ubuntu](https://launchpad.net/ubuntu/+source/libsixel)

なんかよくわからないけど画像をSIXELフォーマットという文字列に変換、ターミナルによってはその文字列を受け取ったときに文字ではなく画像として表示する、ということかと思いますが、門外漢すぎてわかりません、、

参考：
* [saitoha/libsixel: A SIXEL encoder/decoder implementation derived from kmiya's sixel (https://github.com/saitoha/sixel).](https://github.com/saitoha/libsixel)
* [WSLtty と Libsixel と PulseAudio でコンソールからマルチメディアを楽しむ / Cygwin で PulseAudio 13.0 をビルドする #WSL - Qiita](https://qiita.com/EarthSimilarityIndex/items/e674e1dd92544703b30f)
* [Sixel Graphicsを活用したアプリケーションの御紹介 #SIXEL - Qiita](https://qiita.com/arakiken/items/3e4bc9a6e43af0198e46)
* [Neovim 上で Sixel 画像を表示する - あめだまふぁくとりー](https://amedama1x1.hatenablog.com/entry/2024/03/16/194524)

もしかしたらimg2sixelがWindowsで動いてなくてUbuntuで動いているからダメとか？img2sixelはWinで動かさないといけないとか？

###### sixelのビルド関連
* [saitoha/libsixel: A SIXEL encoder/decoder implementation derived from kmiya's sixel (https://github.com/saitoha/sixel).](https://github.com/saitoha/libsixel?tab=readme-ov-file#cross-compiling-with-mingw)
* [WSL の MinGW-w64 で Windows 用の実行バイナリを作成する #C++ - Qiita](https://qiita.com/kerupani129/items/5d68a80f402cbc6a623f)
* https://www.mingw-w64.org/downloads/

###### 関連のnvimプラグイン
* [kawarimidoll/kawarimiline.vim: A fancy tiny scroll indicator in Vim 🌈](https://github.com/kawarimidoll/kawarimiline.vim)
めっちゃいい、こんなの作りたい、画像差し替えとか簡単にできないんだろうか
    * [俺自身がVimのstatuslineになることだ](https://zenn.dev/vim_jp/articles/358848a5144b63)
* [dharmx/telescope-media.nvim: Complete rewrite. Pure Lua.](https://github.com/dharmx/telescope-media.nvim)

#### neovim-remote
[mhinz/neovim-remote: :ok_hand: Support for --remote and friends.](https://github.com/mhinz/neovim-remote)
nvrでいい感じになるんだけど、右側のバッファに表示したいけど今のバッファに表示される
[Seamlessly editing remote files in (Neo)Vim with Netrw and scp](https://gist.github.com/RRethy/ad8a9a3b1112a48226ec3336fa981224)

#### コマンドラインカッコよく
普通は最下行がコマンドラインだけど、ポップアップするようになる
[VonHeikemen/fine-cmdline.nvim: Enter ex-commands in a nice floating input.](https://github.com/VonHeikemen/fine-cmdline.nvim)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3740499/019c5032-adf1-36ee-747d-375a97702eb0.png)
物珍しいのでちょっと使ってみる
たぶん飽きて削除しそう
下に「挿入」とモード表示されるのがうざい

しばらくつかって不安定なのでやめた
：とfine-cmdlineを間違えたとき、たまに固まる
いままでの「:」から完全に乗り換えるならありかも

#### その他
* [hrsh7th/nvim-cmp: A completion plugin for neovim coded in Lua.](https://github.com/hrsh7th/nvim-cmp) 自動補完
* [noice.nvim のfilterの設定難しすぎて死んだ #neovim - Qiita](https://qiita.com/nao-a/items/787d1c73575b778ee327)
* [【Neovim】memolist.vimを使ってメモをとり、telescope-memo.nvimで検索する](https://zenn.dev/koga1020/articles/009766e1bec42c)
* migemoでローマ字検索
    * [[Win 7] neovimからcmigemoを使う(Fri Oct 26, 2018): こぴーのーと](http://mrymy.cocolog-nifty.com/blog/2019/02/win-7-neovimcmi.html) migemoでローマ字検索
    * [Windows10 でmigemoを使う - スタジオHANABUSA](https://moyse.hatenablog.com/entry/2021/06/17/202639)
    * [haya14busa/vim-migemo: Vim Plugin for C/Migemo](https://github.com/haya14busa/vim-migemo)
* syougoさんのDark Poweredなプラグインはすごい感じがするが使いこなせない気がするので入れてない、けどdefxというカスタマイズ自由なファイラは気になっている
* バッファ系
    * [j-morano/buffer_manager.nvim: A simple plugin to easily manage Neovim buffers.](https://github.com/j-morano/buffer_manager.nvim)
    * [m-demare/attempt.nvim: Manage temporary buffers](https://github.com/m-demare/attempt.nvim) ちょっと違うかな

### git statusで日本語名が化ける
あちこちで書かれているのでやりかただけ
`git config --global core.quotepath false` でOK
また、git diffで日本語が化けるときは、
`git config --global core.pager "LESSCHARSET=utf-8 less"`とやるとよいそうだ、けど自分のところではしなくても平気だった