mirror of
https://github.com/Hilbis/Hilbish
synced 2025-07-02 01:02:03 +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.
36 lines
792 B
Lua
36 lines
792 B
Lua
local bait = require 'bait'
|
|
local commander = require 'commander'
|
|
local fs = require 'fs'
|
|
local dirs = require 'nature.dirs'
|
|
|
|
dirs.old = hilbish.cwd()
|
|
commander.register('cd', function (args)
|
|
if #args > 1 then
|
|
print("cd: too many arguments")
|
|
return 1
|
|
elseif #args > 0 then
|
|
local path = args[1]:gsub('$%$','\0'):gsub('${([%w_]+)}', os.getenv)
|
|
:gsub('$([%w_]+)', os.getenv):gsub('%z','$'):gsub('^%s*(.-)%s*$', '%1')
|
|
|
|
if path == '-' then
|
|
path = dirs.old
|
|
print(path)
|
|
end
|
|
dirs.setOld(hilbish.cwd())
|
|
dirs.push(path)
|
|
|
|
local ok, err = pcall(function() fs.cd(path) end)
|
|
if not ok then
|
|
print(err)
|
|
return 1
|
|
end
|
|
bait.throw('cd', path)
|
|
|
|
return
|
|
end
|
|
fs.cd(hilbish.home)
|
|
bait.throw('cd', hilbish.home)
|
|
|
|
dirs.addRecent(hilbish.home)
|
|
end)
|