mirror of https://github.com/Hilbis/Hilbish
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)
|