mieki256's diary



2023/10/13(金) [n年前の日記]

#1 [prog][windows] CUIファイラー lf を試用

lf という、ターミナルで動作する(CUI/CLIで動く)ファイラーを、Windows10 x64 22H2 上で試用してみた。Windows上では、DOS窓(cmd.exe)、もしくは、Powershell上で動く。昔、NEC PC-9801を触っていた人であれば、FD や FILMTN みたいなソフトと伝えればジャンルが分かりそう。

_GitHub - gokcehan/lf: Terminal file manager

Go言語で書かれたファイラーらしい。Ranger という、Python で書かれたCUI(CLI)ファイラーから影響を受けている。

以前もインストールしてたっぽいのだけど、使い方どころかインストールしたことすら忘れてたので、今回メモしておくことにした。

インストール :

github から入手。

_Releases - gokcehan/lf - GitHub

リリース版の r31 を入手。Windowsの場合、lf-windows-386.zip と lf-windows-amd64.zip の2つがある。今回は32bit版(386版)を使ってみた。

解凍すると、中に lf.exe だけが入っている。パスが通っているどこかしらにコピーして、インストールは終了。

使い方 :

DOS窓(cmd.exe)を開いて lf と打ち込めば起動する。
  • カーソルキーの上下で、同階層の中で移動。
  • カーソルキーの右で、現在カーソルがあるフォルダ内に入る。
  • カーソルキーの左で、親フォルダに移動。
  • qキーで終了。
  • $キーで、一番下にシェル(Windowsの場合、cmd.exe)が開く。例えば $ を打った直後に ruby hoge.rb 等、DOS窓上でコマンドやプログラム名を打ち込むのと同様の入力をして実行したりできる。

lfcd.cmd を導入 :

qキーを押して終了すると、起動時に居たディレクトリ(フォルダ)に戻ってしまう。開いていたディレクトリをカレントディレクトリにしつつ終了するようにしたい。そんな時は lfcd.cmd を使える。

_lf/etc at master - gokcehan/lf - GitHub

lfcd.cmd を入手して、パスの通ってる場所に置いてから、lfcd と打って実行すると、lf の終了時に開いていたディレクトリをカレントディレクトリにしながら終了できる。

ちなみに、DOS窓(cmd.exe)ではなく Powershell上で使う場合、おそらく lfcd.ps1 が使えそうな気がする。

設定ファイルの在り処 :

設定ファイル lfrc を編集することで、キーに何を割り当てるかを変更できたりするらしい。

_lf command - github.com/gokcehan/lf - Go Packages

上記ページによると、設定ファイル lfrc は、Windows の場合、C:\Users\<user>\AppData\Local\lf\lfrc にあることになっているらしい。

例えば、デフォルトでは eキーを叩くとエディタ(vim)が開く設定になっているけれど、以下のように書き換えればメモ帳が起動するようになる。はず。
# map e $vim %f%
map e $notepad %f%

プロセスが残り続ける :

DOS窓(cmd.exe)上で lf を使っていると、時々何かの拍子にDOS窓自体が落ちてしまった。実際には cmd.exe の下にぶら下がった状態で lf.exe のプロセスが残り続けて、しかしデスクトップ上には出てこない状態になる。

例えば lf を実行中、任意のテキストファイルの上で e キーを押すと、本来ならエディタとして vim が開くはずだけど、出てこない。DOS窓が消えて、プロセスだけが残り続ける。ちなみに残り続けるプロセスには -server のオプションがつけられている状態。

Windwosターミナル上で lf を実行してみたところ、そちらなら eキーを押してもエディタが開くし、エディタを閉じてもWindowsターミナルに戻ってきた。また、PowerShell 7.3.8上で lf を実行してみたところ、そちらも同様に落ちなかった。

どうやら cmd.exe 上で動かすと正常動作してくれないようだなと…。いや、Windowsターミナルから cmd.exe を呼んで動かす分には正常動作するわけで…。よくわからん…。

その後も試用していたら、qキーを押して終了したつもりが、その後も lf.exe のプロセスが残り続けることに気づいた。これは、DOS窓でも、Windowsターミナルでも、PowerShellでも、どこで動かしても同じようにプロセスが残る。

謎のプロセスが残り続けるのは気味が悪い。そもそも、cmd.exe 上で使えることを期待して試用してみたのに、正常動作しないのでは…。

関連情報を探していたら、わざとサーバ的なプロセスを残しているらしいと分かってきた。何故にそんなことをするのか…。いやまあ、なんか理由があるっぽいけど。

_'q' quit backgrounds the process on windows, lf.exe remains running - Issue #106 - gokcehan/lf - GitHub
_lf -server doesn't quit automatically - Issue #177 - gokcehan/lf - GitHub
_lf command - github.com/gokcehan/lf - Go Packages

とりあえず、サーバを落としたかったら以下のどちらかを打て、とのこと。
lf -remote "quit"
lf -remote "quit!"

打ってみたら、たしかに残ってたプロセスが終了してくれた。"quit" では消えなかったプロセスも、"quit!" なら消えてくれた。"quit!" は、接続してるクライアントにも "quit" を送ってから、サーバも "quit" する模様。

#2 [prog][windows] CUIファイラー vifm を試用

vifm というCUI(CLI)ファイラーが気になったので、Windows10 x64 22H2上で試用してみた。DOS窓の中で動かすことができる。

インストール :

_Vifm
_Vifm - Downloads

vifm-w32-se-0.13-binary.zip を入手して解凍。

今回は D:\home\bin\vifm\ に入れておいた。D:\home\bin\vifm.bat で、PATH の先頭に件のディレクトリを追加して vifm.exe が起動するようにしておいた。

vifm.bat
@set VIFMDIR=D:\home\bin\vifm
@set PATH=%PATH%;%VIFMDIR%
@echo add path %VIFMDIR%
vifm.exe

使い方 :

以下を参考にして試用。

_ターミナルで動くviライクなファイルマネージャーvifmの便利な利用方法 [インフラエンジニアのPC環境]

基本的には vi(vim) と似たようなショートカットキーで使えるらしい。vim はコマンドを打つ時に「:」を打って、その直後にコマンド名を打ったりするけれど、vifm もそんな感じで、「:」を打ってからコマンド名を打つっぽい。ちなみに vi と言えばお馴染みの hjklキーによるカーソル移動も使える。

自分がよく使いそうなところだけ引用させてもらってメモしておこう…。
:q終了
ESC / C-c動作キャンセル
:sh現在開いているディレクトリをカレントディレクトリとしてシェルを開く
Up / Down / j / kカーソル上下移動
Left / h親ディレクトリへ移動
Right / l / Enterディレクトリに入る or ファイル実行
gg一番上へ移動
G / :$一番下へ移動
Space / TAB反対側のペインに移動
:cd入力したディレクトリに移動。パスの区切り文字は「\」ではなく「/」であること。
/検索
:marksブックマーク表示
mキー → 任意のキーブックマーク登録
「'」(Shift+7) → 登録されているキーブックマーク呼び出し

作業の流れとしては以下のような感じで使えそう。
  1. 目標のディレクトリまでカーソルキーを使って移動して、
  2. :sh を打って、そのディレクトリでシェル(cmd.exe)を開いて、
  3. いつもの調子で何か作業して、
  4. exit でシェル(cmd.exe)を抜けると vifm に戻ってくる。
  5. 作業が終わったら :q で終了。

設定ファイルの在り処 :

C:\Users\(USERNAME)\AppData\Roaming\Vifm\ の中にあった。以下がそれっぽい。
vifminfo.json
vifmrc

#3 [prog][windows] CUIファイラー jFD2 を試用

CUI(CLI)ファイラーを探していたら、jFD2 というファイラーの情報を見かけた。Java で書かれたFDクローンらしい。Windows10 x64 22H2上で試用してみた。

_jFD2 for Windowsの詳細情報 : Vector ソフトを探す!

jfd2_beta19.zip を入手して解凍。中に入っていた jfd2.exe を実行。

DOS窓(cmd.exe)とは異なるウインドウが新規に開かれて、その中に FD っぽい情報が表示された…。DOS窓の中で動くファイラーではなかったのだな…。

まあ、FDに慣れていて、FDから離れられない人には便利なのかもしれない。自分の場合はDOS窓の中で動くファイラーが欲しかったので、希望とはズレていた。アンインストールしておいた。

#4 [prog][windows] CUIファイラー goful を試用

CUI(CLI)ファイラー goful を Windows10 x64 22H2上でインストールしてみた。というか昔インストールしてたっぽいけど、インストールしていたことすら忘れてたのでこの際メモしておく。

インストール :

_GitHub - anmitsu/goful: Goful is a CUI file manager written in Go.
_Releases - anmitsu/goful - GitHub

リリースページから、以下のどちらかを入手。
goful_windows_i386.zip
goful_windows_x86_64.zip

今回は64bit版の、goful_windows_x86_64.zip を入手して解凍。中には以下の3つのファイルが入っていた。
 goful.exe
 LICENSE
 README.md

パスの通った任意の場所にコピー。DOS窓上で、goful と打てば起動する。

使い方 :

使い方と言うか、ショートカットキーは、README.md を眺めれば分かるかなと…。

_goful/README.md at master - anmitsu/goful - GitHub

他のCUIファイラーと違うのは、カーソルキーの左右で、左ペイン、右ペインにカーソルが移動すること。カーソルキーの左右で、親ディレクトリに移動したり、ディレクトリに入ったりするわけではない。
  • 親ディレクトリへの移動は Backspace か uキー
  • ディレクトリに入るのは Enterキー

他に使いそうなのは…。
~ホームディレクトリに移動
\ルートディレクトリに移動、のはずだけど日本語Windows環境では反応しなかった
d移動したいディレクトリパスを入力できる
;シェルを開ける
C-gキャンセル
q終了

; でシェルを開いた際は、TABキーでファイル名補完が使える。例えば、; でシェルを開いて、「ruby 」と打ってからTABキーを叩くと、今開いてるディレクトリ内の一覧が表示されるので、カーソルキーでファイル名を選んでEnterを叩けば、選んだファイル名が入力されて「ruby hoge.rb」になる。

カスタマイズができないっぽい :

「このファイラーは設定ファイルが存在しない」
「カスタマイズしたい時は main.go を書き換えろ」

と書いてあるように見えた。

豪快過ぎる…。ブックマークの登録すらできないのか…。いや、ソースファイルを書き換えてビルドしなおせということだろうけど。豪快だなあ…。

終了時に変なプロセスが残ったりしないあたりは良い感じだなと思ったけれど、よく使うディレクトリを気軽に登録できないのはさすがに厳しい気がする。いやまあ、「そんなのはビルドし直せ」と言われて終わるんだろうけど。豪快だ…。

#5 [prog][linux][windows] CUIファイラーについて少しまとめ

今回、Windows10 x64 22H2上で以下のCUI(CLI)ファイラーを試したけれど。
_GitHub - gokcehan/lf: Terminal file manager
_Vifm
_GitHub - anmitsu/goful: Goful is a CUI file manager written in Go.

普段、Linuxのターミナル上では、Ranger というPythonで実装されたファイラーを使ってたりする、とメモ。

_GitHub - ranger/ranger: A VIM-inspired filemanager for the console

この ranger が Windows上でも使えれば話は早いのだけど、使えないのだよな…。あくまで *NIX用のファイラーだそうで…。まあ、Windows上でも、WSL2 や MSYS2上なら使えるのかもしれんけど…。

さておき。lf は cmd.exe 上で動作が怪しいし、goful はカスタイマイズができないしで、今のところ vifm 一択かなという印象。

あふでもいいのかもしれない :

考えてみたら、自分のやりたかったことは…。
  1. pik か uru で Ruby のバージョンを変更して、
  2. 色んなフォルダに入ってる .rb を、ruby hoge.rb で実行して動作確認。

この程度の作業だったので、普段使ってるあふ(afxw.exe)でも済むのかもしれない。

  1. pik か uru で Ruby のバージョンを変更して、
  2. あふ(afxw.exe)の場所を PATH に追加して、
  3. DOS窓からあふ(afxw.exe)を実行して、
  4. あふで色んなフォルダを覗いて、
  5. .rb を ruby "$P\$F" で実行。
これでいいんじゃないかな…。

もっとも、DOS窓上で何か表示してすぐ終了するRubyスクリプトの場合、実行するとDOS窓が一瞬開いてすぐ閉じてしまうので、結果が見えないか…。また、エラーメッセージが出ていてもDOS窓が閉じてしまうからメッセージ内容が分からない問題もあるか…。でもまあ、確実に動作することが分かってるスクリプトであれば、これでも問題無いか…。

2023/10/14追記 :

Windows上で動作する、Far Manager というCUI(CLI)ファイラーも見かけた。後で試用してみるつもり。

_Far Manager Official Site : main

#6 [ruby][windwos] Windows10 + Ruby 3.2.2 x86上で Gosu をインストールした

Windows10 x64 22H2 + Ruby 3.2.2 x86 (RubyInstaller2 DevKit付き) 上で、2Dゲーム制作ライブラリ Gosu がインストールできるのか試してみた。

Ruby 3.2.2 をインストール :

Windows上での Rubyインストールには、RubyInstaller2 を使った。

_RubyInstaller for Windows
_Downloads

一般的には、64bit OS上なら 64bit版 Ruby をインストールするものだろうけど、ゲーム制作の場合、使用する DLL が32bitだったりすることもあるので、今回は32bit版(x86版)をインストールしておいた。

rubyinstaller-devkit-3.2.2-1-x86.exe を入手してインストール。最後に、DOS窓が開いて MSYS2 (DevKit) のインストールもされる。「数字を入力せよ」っぽい感じのメッセージが出てくるけれど、とりあえず Enter を叩いておけばいいらしい。

全部で1GB以上になるファイルがインストールされた。Ruby のバージョンを確認。
> ruby --version
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [i386-mingw32]

Gosuをインストール :

gem を使って、Gosu をインストール。
gem install gosu
> gem install gosu
Fetching gosu-1.4.6.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed gosu-1.4.6
Parsing documentation for gosu-1.4.6
Installing ri documentation for gosu-1.4.6
Done installing documentation for gosu after 0 seconds
1 gem installed

gosu 1.4.6 がインストールされた。

Gosu は、DevKit (MSYS2) を使って、バイナリをビルドする形でインストールされる。DXRuby と違って、どのバージョンの Ruby でも Gosu が動作するのは、インストール時に、その Ruby のバージョンに合わせたバイナリをわざわざビルドしているから、なのだろう…。

以前書いた Gosu用のサンプルがあるので、ソレを使って動作確認した。

_GitHub - mieki256/gosu_examples_mieki256: Ruby + Gosu examples by mieki256.

少なくとも表示関係のサンプルは動いてくれた。

OpneGL関係のパッケージもインストール :

以下は gosu + OpenGL を動かす場合に必要になるパッケージだけど、この3つを入れずに opengl-bindings をインストールしたほうが良い。が、一応メモしておく。
gem install opengl
gem install glu
gem install glut
> gem install opengl
Fetching opengl-0.10.0.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed opengl-0.10.0
Parsing documentation for opengl-0.10.0
Installing ri documentation for opengl-0.10.0
Done installing documentation for opengl after 0 seconds
1 gem installed
> gem install glu
Fetching glu-8.3.0.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed glu-8.3.0
Parsing documentation for glu-8.3.0
Installing ri documentation for glu-8.3.0
Done installing documentation for glu after 0 seconds
1 gem installed

opengl, glu まではインストールできた。しかし、glut はインストールに失敗した。エラーが出る。

> gem install glut
Fetching glut-8.3.0.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
ERROR:  Error installing glut:
        ERROR: Failed to build gem native extension.

    current directory: D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/glut-8.3.0/ext/glut
D:/Ruby/Ruby32-x86/bin/ruby.exe extconf.rb
checking for glVertex3d() in -lopengl32.lib... no
checking for -lopengl32... yes
checking for -lglut... yes
checking for GL/freeglut.h... no
checking for GL/glut.h... no
checking for GLUT/glut.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=D:/Ruby/Ruby32-x86/bin/$(RUBY_BASE_NAME)
        --enable-win32-cross
        --disable-win32-cross
        --with-opengl32.lib-dir
        --without-opengl32.lib-dir
        --with-opengl32.lib-include
        --without-opengl32.lib-include=${opengl32.lib-dir}/include
        --with-opengl32.lib-lib
        --without-opengl32.lib-lib=${opengl32.lib-dir}/lib
        --with-opengl32.liblib
        --without-opengl32.liblib
        --with-opengl32-dir
        --without-opengl32-dir
        --with-opengl32-include
        --without-opengl32-include=${opengl32-dir}/include
        --with-opengl32-lib
        --without-opengl32-lib=${opengl32-dir}/lib
        --with-opengl32lib
        --without-opengl32lib
        --with-glut-dir
        --without-glut-dir
        --with-glut-include
        --without-glut-include=${glut-dir}/include
        --with-glut-lib
        --without-glut-lib=${glut-dir}/lib
        --with-glutlib
        --without-glutlib
        --with-GL-dir
        --without-GL-dir
        --with-GL-include
        --without-GL-include=${GL-dir}/include
        --with-GL-lib
        --without-GL-lib=${GL-dir}/lib
        --with-GLUT-dir
        --without-GLUT-dir
        --with-GLUT-include
        --without-GLUT-include=${GLUT-dir}/include
        --with-GLUT-lib
        --without-GLUT-lib=${GLUT-dir}/lib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/extensions/x86-mingw32/3.2.0/glut-8.3.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/glut-8.3.0 for inspection.
Results logged to D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/extensions/x86-mingw32/3.2.0/glut-8.3.0/gem_make.out

mkmf.log に色々記載されてるらしいので眺めてみたけど何が何やら。

ここで、昔書いた手元のメモを眺めたら、opengl-bindings をインストールすれば opengl, glu, glut をインストールしなくてもよい、みたいなことが書いてあった。そちらを入れてみる。

> gem uninstall glu
> gem uninstall opengl
> gem install opengl-bindings
Fetching opengl-bindings-1.6.13.gem
Successfully installed opengl-bindings-1.6.13
Parsing documentation for opengl-bindings-1.6.13
Installing ri documentation for opengl-bindings-1.6.13
Done installing documentation for opengl-bindings after 7 seconds
1 gem installed

opengl-bindings 1.6.13 がインストールされた。

昔書いた、gosu + OpenGL関係のサンプルで動作確認。

_gosu_examples_mieki256/opengl at master - mieki256/gosu_examples_mieki256 - GitHub

opengl-bindings を使った場合は、01 - 18 まで動作してくれた。ちなみに、opengl, glu をインストールした場合は、01 - 15 までしか動作しなかったので、どうやら opengl-bindings を使ったほうが良さそうだなと…。

以上、1 日分です。

過去ログ表示

Prev - 2023/10 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project