commit - 915d416f97e8de5013529b6896c9e61b2000868b
commit + 9192f9e6bc31960f2056c2d174b5f447246617bf
blob - e52072a07fcbd56998341eb97613c9a8d621058c
blob + 3abcd44b25b07172e0d7dc5268fbf703f3e45a5f
--- bin/browsefiles.lua
+++ bin/browsefiles.lua
#!/usr/bin/env lua5.4
-- lua file browser script
--- Enforce Lua 5.4+
+-- Enforce Lua 5.4
if not _VERSION:match("5.4") then
io.stderr:write("Error: Lua 5.4 required (got " .. _VERSION .. ").\n")
os.exit(1)
error("LuaFileSystem not found.")
end
+local colors = require("aestel.colors")
+local display = require("aestel.display")
+local input = require("aestel.input")
local navigate = require("aestel.navigate")
local opener = require("aestel.opener")
-local input = require("aestel.input")
--- Utility: Normalize and validate start dir
+local TITLE = "File Browser"
+
+-- Normalize and validate start dir
local function get_valid_start_dir(raw_dir)
+
raw_dir = raw_dir or lfs.currentdir() or os.getenv("PWD") or os.getenv("HOME")
+
if not raw_dir then
return nil, "No valid start directory (HOME/PWD not set)."
end
local home_dir = os.getenv("HOME")
+
if not home_dir then
return nil, "HOME environment variable not set."
end
return normalized
end
--- Main implementation
local function browse_and_open()
local start_dir, err = get_valid_start_dir(arg[1])
if not start_dir then
end
local home_dir = os.getenv("HOME")
+ local current_dir = start_dir
- while true do -- LOOP: Repeat browse until quit
- local selected = navigate.browse(start_dir, home_dir, 4, "📂 File Browser")
+ while true do
+ local selected = navigate.browse(current_dir, home_dir, nil, TITLE)
if not selected then
- break -- Quit: User pressed q or Esc
+ display.status_line("... Exiting " .. TITLE, colors.REVERSE)
+ os.execute("sleep 2")
+ display.clear_screen()
+ return
end
- -- Try to open
- local opener_result = opener.open(selected)
- local open_ok, open_err = opener_result
-
+-- -- Try to open
+-- local opener_result = opener.open(selected)
+-- local open_ok, open_err = opener_result
+
+ local open_ok, open_err = opener.open(selected)
if open_ok then
- -- Success: No wait, loop back to browser
+ display.status_line("... Opening " .. selected, colors.REVERSE)
else
- -- Error: Clear for visibility + msg + wait, then loop back
- input.clear_and_position(1, 1)
- io.write("Failed to open '" .. selected .. "': " .. tostring(open_err or "Unknown error") .. "\n")
- io.write("Press Enter to return to browser...\n")
- io.flush()
- io.read() -- Wait for Enter
+ display.status_line("... Failed to open'" .. selected .. "': " .. tostring(open_err or "Unknown error"), colors.REVERSE)
end
-
- -- Next browse starts from current shell cwd (e.g., if cd in shell, respects it)
- start_dir = lfs.currentdir() or home_dir -- Fallback to home if nil
+ os.execute("sleep 2")
+ current_dir = lfs.currentdir() or home_dir
end
end
--- Run with error handling
local success, err = pcall(browse_and_open)
if not success then
- input.disable_raw() -- Ensure terminal restored if browse crashes early
+ input.disable_raw()
io.stderr:write("Error: " .. tostring(err) .. "\n")
os.exit(1)
end
-input.disable_raw()