上一篇在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

再增加F10Ctrl+Z以 fzf 選單來選取當前資料夾的檔名,按Enter後傳回檔名,並將游標移到最開頭:

-- file selection in current folder
-- | grep -v "^d" removes folder
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 " " 把字串中的多重空格壓縮成一個,則以空白分隔的欄位才會正確
  _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)

解説記事(日本語)

##