前回の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)
解説記事(日本語)