aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/fish.md
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2024-05-01 14:47:26 +0200
committerJohannes Stoelp <johannes.stoelp@gmail.com>2024-05-01 14:49:10 +0200
commit50e07a8bca68d2f568df44166fa94383141c2696 (patch)
tree087c1a6dfce9745782cc62c021f2c0833077569b /src/tools/fish.md
parent1c20849c87f2d936ec599b56f965507dee97ade6 (diff)
downloadnotes-50e07a8bca68d2f568df44166fa94383141c2696.tar.gz
notes-50e07a8bca68d2f568df44166fa94383141c2696.zip
shells: move shells into own group
Diffstat (limited to 'src/tools/fish.md')
-rw-r--r--src/tools/fish.md280
1 files changed, 0 insertions, 280 deletions
diff --git a/src/tools/fish.md b/src/tools/fish.md
deleted file mode 100644
index a499e10..0000000
--- a/src/tools/fish.md
+++ /dev/null
@@ -1,280 +0,0 @@
-# fish(1)
-
-## Quick Info
-Fish initialization file `~/.config/fish/config.fish`
-
-Switch between different key bindings:
-- `fish_default_key_bindings` to use default key bindings
-- `fish_vi_key_bindings` to use vi key bindings
-
-## Variables
-Available scopes
-- `local` variable local to a block
-- `global` variable global to shell instance
-- `universal` variable universal to all shell instances + preserved across
- shell restart
-
-### Set/Unset Variables
-```text
-set <name> [<values>]
- -l local scope
- -g global scope
- -U universal scope
- -e erase variable
- -S show verbose info
- -x export to ENV
- -u unexport from ENV
-```
-
-### Special Variables [ref](https://fishshell.com/docs/current/language.html#special-variables)
-```sh
-$status # exit code of last command
-$pipestatus # list of exit codes of pipe chain
-
-$fish_pid # pid of parent fish shell ($$ in bash)
-$last_pid # pid of last started process ($! in bash)
-
-$CMD_DURATION # runtime of last command in ms
-```
-
-### Lists
-In `fish` all variables are lists (start with index `1`, but lists can't
-contain lists.
-```sh
-set foo a b c d
-
-echo $foo[1] # a
-echo $foo[-1] # d
-echo $foo[2..3] # b c
-echo $foo[1 3] # a c
-```
-
-`$` can be seen as dereference operator.
-```sh
-set foo a; set a 1337
-echo $$foo # outputs 1337
-```
-
-Cartesian product.
-```sh
-echo file.{h,cc}
-# file.h file.cc
-
-echo {a,b}{1,2}
-# a1 b1 a2 b2
-```
-
-#### `*PATH` [ref](https://fishshell.com/docs/current/language.html#path-variables)
-Lists ending with `PATH` are automatically split at `:` when used and joined
-with `:` when quoted or exported to the environment.
-```sh
-set -x BLA_PATH a:b:c:d
-echo $BLA_PATH # a b c d
-echo "$BLA_PATH" # a:b:c:d (quoted)
-env | grep BLA_PATH # BLA_PATH=a:b:c:d (env)
-
-set FOO_PATH x y z
-echo $FOO_PATH # x y z
-echo "$FOO_PATH" # x:y:z
-```
-
-## Command Handling
-```sh
-# sub-commands are not run in quotes
-echo "ls output: "(ls)
-```
-
-### I/O redirection
-```sh
-# 'noclobber', fail if 'log' already exists
-echo foo >? log
-```
-
-### Process substitution
-Redirect output of multiple processes. Same as `<(..)` in bash.
-```sh
-diff (sort a | psub) (sort b | psub)
-```
-
-## Control Flow
-### `if` / `else`
-```sh
-if grep foo bar
- # do sth
-else if grep foobar bar
- # do sth else
-else
- # do sth else
-end
-```
-
-### `switch`
-```sh
-switch (echo foo)
-case 'foo*'
- # do start with foo
-case bar dudel
- # do bar and dudel
-case '*'
- # do else
-end
-```
-
-### `while` Loop
-```sh
-while true
- echo foo
-end
-```
-
-### `for` Loop
-```sh
-for f in (ls)
- echo $f
-end
-```
-
-## Functions
-Function arguments are passed via `$argv` list.
-```sh
-function fn_foo
- echo $argv
-end
-```
-
-### Autoloading
-When running a command fish attempts to autoload a function. The shell looks
-for `<cmd>.fish` in the locations defined by `$fish_function_path` and loads
-the function lazily if found.
-
-This is the preferred way over monolithically defining all functions in a
-startup script.
-
-### Helper
-```sh
-functions # list al functions
-functions foo # describe function 'foo'
-functions -e foo # erase function 'foo'
-
-funced foo # edit function 'foo'
- # '-e vim' to edit in vim
-```
-
-### Argument parsing and completion
-`argparse` puts options into variables of name `_flag_NAME`.
-
-References:
-- [Argument Handling](https://fishshell.com/docs/current/language.html#argument-handling)
-- [`argparse`](https://fishshell.com/docs/current/cmds/argparse.html)
-- [Writing your own completions](https://fishshell.com/docs/current/completions.html)
-- [`complete`](https://fishshell.com/docs/current/cmds/complete.html)
-
-```sh
-function moose --d "my moose fn"
- # h/help : short / long option (boolean)
- # color : only long option (boolean)
- # u/user= : option with required argument, only last specified is taken
- # f/file+= : option with required argument, can be specified multiple times
- #
- argparse h/help color= u/user= f/file=+ -- $argv
- or return
-
- if set -ql _flag_help
- echo "usage ..."
- return 0
- end
-
- set -ql _flag_file
- and echo "file=$_flag_file | cnt:" (count $_flag_file)
-
- set -ql _flag_color
- and echo "color=$_flag_color"
-
- set -ql _flag_user
- and echo "user=$_flag_user"
-end
-
-# Delete all previous defined completions for 'moose'.
-complete -c moose -e
-
-# Don't complete files for command.
-complete -c moose --no-files
-
-# Help completion.
-# -n specifies a conditions. The completion is only active if the command
-# returns 0.
-complete -c moose -s h -l help -n "not __fish_contains_opt -s h help" \
- --description "Print usage help and exit"
-
-# File completion.
-# -F force complete files (overwrite --no-files).
-# -r requires argument.
-complete -c moose -s f -l file -F -r \
- --description "Specify file (can be passed multiple times)"
-
-# Color completion.
-# -a options for completion.
-# -x short for -r and --no-files (-f)
-complete -c moose -x -l color -a "red blue" \
- --description "Specify a color."
-
-# User completion.
-# -a options for completion. Call a function to generate arguments.
-complete -c moose -x -s u -l user -a "(__fish_complete_users)" \
- --description "Specify a user"
-```
-
-## Prompt
-The prompt is defined by the output of the `fish_prompt` function.
-```sh
-function fish_prompt
- set -l cmd_ret
- echo "> "(pwd) $cmd_ret" "
-end
-```
-> Use `set_color` to manipulate terminal colors and `set_color -c` to print the
-> current colors.
-
-
-## Useful Builtins
-List all builtins with `builtins -n`.
-
-```sh
-# history
-history search <str> # search history for <str>
-history merge # merge histories from fish sessions
-
-# list
-count $var # count elements in list
-
-contains /bin $PATH # return 0 (true) 1 (false)
-contains -i /bin $PATH # additionally print index on stdout
-
-# string
-string split SEP STRING
-
-# math
-math -b hex 4096 # output dec as hex
-math 0x1000 # output hex as dec
-math "log2(1024)" # call functions
-math -s0 7/3 # integer division (by default float)
-
-# status
-status -f # abs path of current file
-```
-
-## Keymaps
-```text
- Shift-Tab .............. tab-completion with search
- Alt-Up / Alt-Down ...... search history with token under the cursor
- Alt-l .................. list content of dir under cursor
- Alt-p .................. append '2>&1 | less;' to current cmdline
- Alt-Left / Alt - Right . prevd / nextd, walk dir history
-```
-
-## Debug
-```text
- status print-stack-trace .. prints function stacktrace (can be used in scripts)
- breakpoint ................ halt script execution and gives shell (C-d | exit
- to continue)
-```