mirror of
https://github.com/Hilbis/Hilbish
synced 2025-03-13 01:40:41 +00:00
prelude is no longer. it is now nature. organized the single file prelude into multiple source files and renamed it to nature. this is coming after thought that it can turn into a general hilbish lua core, with user facing modules as well. this introduces the `nature.dirs` module, to interact and get recently changed to directories and last/old cwd.
76 lines
1.7 KiB
Lua
76 lines
1.7 KiB
Lua
local fs = require 'fs'
|
|
|
|
local dirs = {}
|
|
|
|
--- Last (current working) directory. Separate from recentDirs mainly for
|
|
--- easier use.
|
|
dirs.old = ''
|
|
--- Table of recent directories. For use, look at public functions.
|
|
dirs.recentDirs = {}
|
|
--- Size of the recentDirs table.
|
|
dirs.recentSize = 10
|
|
|
|
--- Get (and remove) a `num` of entries from recent directories.
|
|
--- @param num number
|
|
--- @param remove boolean Whether to remove items
|
|
function dirRecents(num, remove)
|
|
num = num or 1
|
|
local entries = {}
|
|
|
|
if #dirs.recentDirs ~= 0 then
|
|
for i = 1, num do
|
|
local idx = remove and 1 or i
|
|
if not dirs.recentDirs[idx] then break end
|
|
table.insert(entries, dirs.recentDirs[idx])
|
|
if remove then table.remove(dirs.recentDirs, 1) end
|
|
end
|
|
end
|
|
|
|
if #entries == 1 then
|
|
return entries[1]
|
|
end
|
|
|
|
return entries
|
|
end
|
|
|
|
--- Look at `num` amount of recent directories, starting from the latest.
|
|
--- @param num? number
|
|
function dirs.peak(num)
|
|
return dirRecents(num)
|
|
end
|
|
|
|
--- Add `d` to the recent directories.
|
|
function dirs.push(d)
|
|
dirs.recentDirs[dirs.recentSize + 1] = nil
|
|
if dirs.recentDirs[#dirs.recentDirs - 1] ~= d then
|
|
ok, d = pcall(fs.abs, d)
|
|
assert(ok, 'could not turn "' .. d .. '"into an absolute path')
|
|
|
|
table.insert(dirs.recentDirs, 1, d)
|
|
end
|
|
end
|
|
|
|
--- Remove `num` amount of dirs from the recent directories.
|
|
--- @param num number
|
|
function dirs.pop(num)
|
|
return dirRecents(num, true)
|
|
end
|
|
|
|
--- Get entry from recent directories.
|
|
--- @param idx number
|
|
function dirs.recent(idx)
|
|
return dirs.recentDirs[idx]
|
|
end
|
|
|
|
--- Sets the old directory.
|
|
--- @param d string
|
|
function dirs.setOld(d)
|
|
ok, d = pcall(fs.abs, d)
|
|
assert(ok, 'could not turn "' .. d .. '"into an absolute path')
|
|
|
|
os.setenv('OLDPWD', d)
|
|
dirs.old = d
|
|
end
|
|
|
|
return dirs
|