前回のNyagosでLuaを使ってcmd.exeのF1〜F9機能を再現するでは、F9ファンクションキーを改造し、現在のフォルダー内で最新のファイル名を返すようにしました。この機能は、ブラウザでファイルをダウンロードした後、コマンドラインからすぐにダウンロードしたファイル名を取得する際によく使われます。これにより、dir /odを実行してファイル名を選んでコピーする手間を省けます。
nyagos.key.F9 = function(this)
_iNewFilenameCounter = 1
local _sFilename = nyagos.eval("ls -t *.* | head -n 1")
if string.sub(_sFilename, -1) == "*" then
_sFilename = _sFilename:sub(1, -2)
end
if (string.find(_sFilename, " ")) then
_sFilename = '"' .. _sFilename .. '"'
end
nyagos.exec("echo " .. _sFilename .. " | clip") -- 便利なコピー
this:call("KILL_LINE")
this:replacefrom(1,_sFilename)
this:call("BEGINNING_OF_LINE")
end
さらにF10またはCtrl+Zで、fzfメニューを使って現在のフォルダー内のファイル名を選択し、Enterでファイル名を返し、カーソルを行頭に移動する機能を追加します。
-- 現在のフォルダー内でファイル選択
-- | grep -v "^d" はフォルダーを除外
function list_files(this)
local _sQuery = this:lastword()
local _sCmd = 'll | grep -v "^d"| fzf --cycle --tac --layout=reverse '
if (string.len(_sQuery) > 0) then
_sCmd = _sCmd .. "--query=" .. _sQuery
end
-- -rw-a-- 114K Dec 3 12:08:15 未確認 8091.crdownload
-- tr -s " " で複数スペースを1つに圧縮し、空白区切りの列を正しく取得
_sCmd = _sCmd .. ' | tr -s " " | cut -d" " -f6-'
--print("cmd=" .. _sCmd)
local _sFilename = nyagos.eval(_sCmd)
if _sFilename:match("%s") then -- 空白を含む場合
_sFilename = '"' .. _sFilename .. '"'
end
nyagos.exec("echo " .. _sFilename .. " | clip") -- 便利なコピー
this:replacefrom(1,_sFilename)
this:call("BEGINNING_OF_LINE")
end
nyagos.key.F10 = list_files
nyagos.key.C_Z = list_files
1. 💡 関連リンク
✅ 解説記事(繁体字中国語): https://jdev.tw/blog/9169/
✅ Explanation article (English)
✅ 解説記事(日本語)