cd path arg can be a symbol (shell ease)

Signed-off-by: Ava Affine <ava@sunnypup.io>
This commit is contained in:
Ava Apples Affine 2024-02-20 14:32:06 -08:00
parent 50ebfd2e37
commit 108e25e336
3 changed files with 9 additions and 3 deletions

View file

@ -166,7 +166,6 @@ Note: this section only tracks the state of incomplete TODO items. Having everyt
- Can pass args to flesh scripts (via command line) - Can pass args to flesh scripts (via command line)
- Can pass args to flesh scripts (via interpreter) - Can pass args to flesh scripts (via interpreter)
- tab completion for symbols also attempts to complete binaries - tab completion for symbols also attempts to complete binaries
- cd accepts symbols as well as strings (emulate shell)
- declare macros - declare macros
- Release CI - Release CI
- Make an icon if you feel like it - Make an icon if you feel like it

View file

@ -146,6 +146,10 @@ Flesh also provides a ~cd~ utility to change current working directory:
This ~cd~ routine will keep the ~PWD~ variable up to date. This ~cd~ routine will keep the ~PWD~ variable up to date.
Every invokation of ~cd~ will call whatever lambda or function is stored in ~CFG_FLESH_CD_CB~ with no arguments. A function stored in this variable can then perform on the fly reconfiguration or set additional variables based on the directory that the user has entered. Every invokation of ~cd~ will call whatever lambda or function is stored in ~CFG_FLESH_CD_CB~ with no arguments. A function stored in this variable can then perform on the fly reconfiguration or set additional variables based on the directory that the user has entered.
WARNING: Symbols will be taken as strings unless wrapped in a form.
> Example: cd HOME => cd 'HOME'
> Example: cd (eval HOME) => cd /path/to/home/dir
** Creating bindings for shell commands ** Creating bindings for shell commands
Daily Flesh users will long for first class shell commands that are accounted for in autocomplete. Daily Flesh users will long for first class shell commands that are accounted for in autocomplete.

View file

@ -715,9 +715,12 @@ fn fg_callback(
} }
const CD_DOCSTRING: &str = const CD_DOCSTRING: &str =
"Expects 1 argument (a string). Changes to a new directory. "Expects 1 argument (a string, symbol, or form). Changes to a directory.
WARNING: Symbols will be taken as strings unless wrapped in a form.
> Example: cd HOME => cd 'HOME'
> Example: cd (eval HOME) => cd /path/to/home/dir
If CFG_RELISH_CD_CB is defined, cd will evaluate it. If CFG_RELISH_CD_CB is defined, cd will evaluate it.
cd returns the result that CFG_RELISH_CD_CB returns."; cd returns the result that CFG_RELISH_CD_CB returns, or None";
fn cd_callback(ast: &Seg, syms: &mut SymTable) -> Result<Ctr, Traceback> { fn cd_callback(ast: &Seg, syms: &mut SymTable) -> Result<Ctr, Traceback> {
let dir: &String; let dir: &String;
match *ast.car { match *ast.car {