LoginSignup
0
0

20240407 アプリのアイデア、Thinq V60を外部モニターにつなぐ、Neovimあれこれ

Posted at

アプリのアイデア

NeovimからRushRoyaleを操作できるアプリが欲しい

ボタンというか操作できる箇所が非常に多いので、それらをLuaからこつこつ操作するのは大変だと思う

まずその前にRRリモコンが欲しい

基本はviモードであれこれ、

  • h/lで画面をタブを左右に切り替える
  • j/kでスクロール
  • タッチできる(?)ところはハイライトする(これはVimiumCっぽい感じで)、そしてキーを割り振る
    ** HTMLと違ってどこに要素があるかわからない、動的に場所を見つけ出すのかなりムズイ、というか無理かも、なので最初に場所を決めておくしかないと思う
  • Escでキャンセル/戻る、これ今でもできるか
  • キーアサイン変えられる
  • 戦闘モードではなるべく打鍵数すくなくマージ、召喚、
  • 画面の大きさによって、ぽちる場所も変わってくるから計算が必要、適正サイズに無理やり画面サイズ変えてもいいけど
    image.png

このリモコンにAPIを持たせるか何かしてNeovimからそれらをコールする、といったアイデア
リモコンはPython+Pyautoguiで作る?
けど画面に枠線や文字を描画することなんてできるのかな

で、Neovimから操作するときはコマンドライン(だっけ)か、専用のRR操作モードバッファを作る、そこから操作

と、できるできないはともかくとりあえずアイデアだけ書き留めといた

Thnq V60を外部モニターにつなぐ

スマホのスペックはこれ
LG V60 ThinQ 5G スペック・仕様 - 価格.com
このスマホはUSB Type-CのAlternateモードには対応している
DisplayPort Alternate Modeに対応したAndroidスマホ一覧(USB Type-C to HDMI) | Wi-Fiの森
Thunderbolt3対応じゃないからつながらないと思うけどダメもとで

モニターはたぶんこれ
デスクトップ タッチ スクリーン マルチ コンピューター 1080P ディスプレイ FHD モニター – EVICIV モニター

HDMIを使えば接続できることはわかってるけど、USB Type-Cでつなぎたい、なぜなら持ってるモニターがマルチタッチ対応らしいので
まずなにも考えず普段充電やデータ通信に使ってるのでつないだ→全然だめ

スマホかケーブルがThunderbolt3.0に未対応だからだと思う

Alternate ModeはHDMIに変換しないとだめっぽい?
参考

Thunderbolt3対応ケーブルとHDMI変換アダプターと両方買って試してみよう、こんど

Neovimあれこれ

NeovimでZoxideしたい

今までNeovim内で訪れたことのあるフォルダに簡単に移動したい
telescope-zoxideというのがあるので導入
本当はこんな使い方しないんだろうけど、 telescope.nvimのdependenciesに'jvgrootveld/telescope-zoxide'を追加
けどなんかちょっと遅い?

過去に開いたファイルを開きたい

telescopeにそれがあった
:Telescope oldfilesというのを {'<Leader>to', plug.oldfiles},にマッピングして解決

Luaのファイルをtelescopeのプレビューで開くとエラー

エラーメッセージをコピーしてなかったけどtreesitter invalid structure at position language_luaといった感じ
たぶんここで報告されてるのと同じ

で、直し方も同じで:TSInstall! luaでOK

cder.nvimというもの

telescopeでcdできる?らしい
便利っぽいんだけど、なんかまったく動かない
Powershellではbat、fdはいってるし、実行コマンドをcmd.exeにしているけどだめ
wslのubuntuでは?とためしたらfd、batなど入ってないから試せない、いれればいいんだけどさ、、、

というわけでubuntu on wsl2にfd、batをいれる
$ sudo apt install fd-find
$ wget https://github.com/sharkdp/bat/releases/download/v0.24.0/bat_0.24.0_amd64.deb
$ dpkg -i bat_0.24.0_amd64.deb

fdfdfindという名前で入るのでaliasつけてもよい
参考: alt cliツール 紹介 【lsd】【difftastic】【bat】 #Rust - Qiita

これで:Telescope cderしたらちゃんと動いた。ということは、Windowsの問題かと思う

内部的な動作について

optで設定できるものがいくつかあるが大事なのはこんなところ

  dir_command = { 'fd', '--type=d', '.', os.getenv('HOME') },
  command_executer = { 'bash', '-c' },
  previewer_command = 'ls -a',
  pager_command = 'bat --plain --paging=always --pager="less -RS"',

内部的にはfinderがdir_commandを使っている
finderは選択できるのをずらずらするための処理
で選択したものを右側でプレビュー表示するのがpreviewerとなる
previewercommand_executer, previewer_command .. ' ' .. (finderで選択したディレクトリ) .. ' ' .. pager_commandとなっている
telescopeだかnvimは外部コマンドを呼び出すときにパイプをつけて呼び出すことができないのでcommand_executerに引数の形でコマンドを渡している、ということ

で、finderで選択したディレクトリは次の関数に渡して、ダブルクォートでくくっている

  entry_value_fn = function(entry_value)
    return '"' .. entry_value .. '"'
  end,
動くようになった!

唐突に解決したような書き方だが、ここに至るまで紆余曲折ありました
結局cder.nvim自体、2か所に「Windowsの場合は・・・する」というパッチが必要だった

cder.lua
  entry_maker = function(line)
    return {
      value = line,
      display = function(entry)
        if vim.loop.os_uname().sysname == 'Windows_NT' then
          return ' ' .. line:gsub(os.getenv('USERPROFILE') .. "\\", ''),
            { { { 1, 3 }, 'Directory' } }
        else
          return ' ' .. line:gsub(os.getenv('HOME') .. '/', ''),
            { { { 1, 3 }, 'Directory' } }
        end
      end,
      ordinal = line,
    }
  end,
  
  
  entry_value_fn = function(entry_value)
    if vim.loop.os_uname().sysname == 'Windows_NT' then
      return '"' .. entry_value:gsub("\\$", "") .. '"'
    else
      return '"' .. entry_value .. '"'
    end
  end,

で、init.luaにはこんな風な設定をいれた

init.lua
  {
    'zane-/cder.nvim',
    event = 'VeryLazy', -- lz
    config = function ()
      m = {
        {'<Leader>tc',  ':Telescope cder<CR>'}, -- km
      }
      map_keys(m, vim.keymap.set)
      local fd_param = '--type directory --type symlink --exclude .git'
      if vim.loop.os_uname().sysname == 'Windows_NT' then
        require('telescope').setup({
          extensions = {
            cder = {
              command_executer = { 'cmd.exe', '/c' },
              previewer_command = 'eza -a -F --icons --color -1', -- uutils ls -a',
              pager_commnd = 'bat --plain --paging=always --pager="less -RS"',
              dir_command = { 'fd.exe', '--type=d', '--type=l', '.', },
            }
          },
        })
      else
        require('telescope').setup({
          extensions = {
            cder = {
              dir_command = { 'fdfind', '--type=d', '--type=l', '--exclude=.git', '.', },
              previewer_command = 'exa -a --icons --color=auto -F -1',
            },
          },
        })
      end
      require('telescope').load_extension 'cder'
    end
  },

これで動いた
image.png

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0