上一篇在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後傳回檔名,並將游標移到最開頭:
-- 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)
##