Repository: alecthomas/chroma
Pull request #503 (2021-05-11 11:25:13)

Improve `fish` lexer. Add syntax highlighting for commands
- Commands are syntax highlighted as functions
- Command options are highlighted as attributes
- Added more built-ins and operators
- Added Hashbang
- Added and improved syntax highlighting for function, variable and keywords
- Added test files


Patch:
diff --git a/lexers/f/fish.go b/lexers/f/fish.go
index 3678cfa..c350900 100644
--- a/lexers/f/fish.go
+++ b/lexers/f/fish.go
@@ -17,11 +17,32 @@ var Fish = internal.Register(MustNewLazyLexer(
 ))
 
 func fishRules() Rules {
+	keywords := []string{
+		`begin`, `end`, `if`, `else`, `while`, `break`, `for`, `return`, `function`, `block`,
+		`case`, `continue`, `switch`, `not`, `and`, `or`, `set`, `echo`, `exit`, `pwd`, `true`,
+		`false`, `cd`, `cdh`, `count`, `test`,
+	}
+	keywordsPattern := Words(`\b`, `\b`, keywords...)
+
+	builtins := []string{
+		`alias`, `bg`, `bind`, `breakpoint`, `builtin`, `argparse`, `abbr`, `string`, `command`,
+		`commandline`, `complete`, `contains`, `dirh`, `dirs`, `disown`, `emit`, `eval`, `exec`,
+		`fg`, `fish`, `fish_add_path`, `fish_breakpoint_prompt`, `fish_command_not_found`,
+		`fish_config`, `fish_git_prompt`, `fish_greeting`, `fish_hg_prompt`, `fish_indent`,
+		`fish_is_root_user`, `fish_key_reader`, `fish_mode_prompt`, `fish_opt`, `fish_pager`,
+		`fish_prompt`, `fish_right_prompt`, `fish_status_to_signal`, `fish_svn_prompt`,
+		`fish_title`, `fish_update_completions`, `fish_vcs_prompt`, `fishd`, `funced`,
+		`funcsave`, `functions`, `help`, `history`, `isatty`, `jobs`, `math`, `mimedb`, `nextd`,
+		`open`, `prompt_pwd`, `realpath`, `popd`, `prevd`, `psub`, `pushd`, `random`, `read`,
+		`set_color`, `source`, `status`, `suspend`, `trap`, `type`, `ulimit`, `umask`, `vared`,
+		`fc`, `getopts`, `hash`, `kill`, `printf`, `time`, `wait`,
+	}
+
 	return Rules{
 		"root": {
 			Include("basic"),
-			Include("data"),
 			Include("interp"),
+			Include("data"),
 		},
 		"interp": {
 			{`\$\(\(`, Keyword, Push("math")},
@@ -29,13 +50,20 @@ func fishRules() Rules {
 			{`\$#?(\w+|.)`, NameVariable, nil},
 		},
 		"basic": {
-			{`\b(begin|end|if|else|while|break|for|in|return|function|block|case|continue|switch|not|and|or|set|echo|exit|pwd|true|false|cd|count|test)(\s*)\b`, ByGroups(Keyword, Text), nil},
-			{`\b(alias|bg|bind|breakpoint|builtin|command|commandline|complete|contains|dirh|dirs|emit|eval|exec|fg|fish|fish_config|fish_indent|fish_pager|fish_prompt|fish_right_prompt|fish_update_completions|fishd|funced|funcsave|functions|help|history|isatty|jobs|math|mimedb|nextd|open|popd|prevd|psub|pushd|random|read|set_color|source|status|trap|type|ulimit|umask|vared|fc|getopts|hash|kill|printf|time|wait)\s*\b(?!\.)`, NameBuiltin, nil},
+			{Words(`(?<=(?:^|\A|;|&&|\|\||\||`+keywordsPattern+`)\s*)`, `(?=;?\b)`, keywords...), Keyword, nil},
+			{`(?<=for\s+\S+\s+)in\b`, Keyword, nil},
+			{Words(`\b`, `\s*\b(?!\.)`, builtins...), NameBuiltin, nil},
+			{`#!.*\n`, CommentHashbang, nil},
 			{`#.*\n`, Comment, nil},
 			{`\\[\w\W]`, LiteralStringEscape, nil},
 			{`(\b\w+)(\s*)(=)`, ByGroups(NameVariable, Text, Operator), nil},
-			{`[\[\]()=]`, Operator, nil},
+			{`[\[\]()={}]`, Operator, nil},
+			{`(?<=\[[^\]]+)\.\.|-(?=[^\[]+\])`, Operator, nil},
 			{`<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2`, LiteralString, nil},
+			{`(?<=set\s+(?:--?[^\d\W][\w-]*\s+)?)\w+`, NameVariable, nil},
+			{`(?<=for\s+)\w[\w-]*(?=\s+in)`, NameVariable, nil},
+			{`(?<=function\s+)\w(?:[^\n])*?(?= *[-\n])`, NameFunction, nil},
+			{`(?<=(?:^|\b(?:and|or|sudo)\b|;|\|\||&&|\||\(|(?:\b\w+\s*=\S+\s)) *)\w[\w-]*`, NameFunction, nil},
 		},
 		"data": {
 			{`(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\$])*"`, LiteralStringDouble, nil},
@@ -43,10 +71,11 @@ func fishRules() Rules {
 			{`(?s)\$'(\\\\|\\[0-7]+|\\.|[^'\\])*'`, LiteralStringSingle, nil},
 			{`(?s)'.*?'`, LiteralStringSingle, nil},
 			{`;`, Punctuation, nil},
-			{`&|\||\^|<|>`, Operator, nil},
+			{`&&|\|\||&|\||\^|<|>`, Operator, nil},
 			{`\s+`, Text, nil},
-			{`\d+(?= |\Z)`, LiteralNumber, nil},
-			{"[^=\\s\\[\\]{}()$\"\\'`\\\\<&|;]+", Text, nil},
+			{`\b\d+\b`, LiteralNumber, nil},
+			{`--?[^\d][\w-]*`, NameAttribute, nil},
+			{".+?", Text, nil},
 		},
 		"string": {
 			{`"`, LiteralStringDouble, Pop(1)},


Test patch:
diff --git a/lexers/testdata/fish.actual b/lexers/testdata/fish.actual
new file mode 100644
index 0000000..7da42b4
--- /dev/null
+++ b/lexers/testdata/fish.actual
@@ -0,0 +1,244 @@
+#!/usr/bin/env fish
+
+echo hello > output.txt
+
+alias something=echo
+
+sudo systemctl start postgresql
+
+# Outputs 'image.png'.
+echo (basename image.jpg .jpg).png
+
+echo some text for testing
+
+# Convert all JPEG files in the current directory to the
+# PNG format using the 'convert' program.
+for i in *.jpg; convert $i (basename $i .jpg).png; end
+
+# Set the ``data`` variable to the contents of 'data.txt'
+# without splitting it into a list.
+begin; set -l IFS; set data (cat data.txt); end
+
+# Set ``$data`` to the contents of data, splitting on NUL-bytes.
+set data (cat data | string split0)
+
+grep fish myanimallist1 | wc -l
+
+echo input.{c,h,txt}
+
+echo {$dogs}dog
+
+echo (seq 10)[1 2 3]
+echo (seq 10)[2..5 1..3]
+echo (seq 10)[-1..1]
+set PATH $PATH[-1..1]
+
+set foo banana
+foo=gagaga echo $foo # prints gagaga, while in other shells it might print "banana"
+foo=gagaga somecommand $foo # prints gagaga, while in other shells it might print "banana"
+
+function some func
+    echo 'function' with space
+end
+
+function dirs --description 'Print directory stack'
+    set -l options h/help c
+    argparse -n dirs --max-args=0 $options -- $argv
+    or return
+
+    if set -q _flag_help
+        __fish_print_help dirs
+        return 0
+    end
+
+    if set -q _flag_c
+        # Clear directory stack.
+        set -e -g dirstack
+        return 0
+    end
+
+    # Replace $HOME with ~.
+    string replace -r '^'"$HOME"'($|/)' '~$1' -- $PWD $dirstack | string join " "
+end
+
+function ytdl_files -d "Download videos from text files with youtube-dl and put them into folders"
+    argparse --name=ytdl_files 's/shutdown' -- $argv
+
+    for file in $argv
+        echo "Operating on $file"
+        youtube-dl -a $file -i -o (dirname $file)"/"(basename $file .txt)"/%(autonumber)s-%(title)s.%(ext)s"
+    end
+
+    if test -n "$_flag_shutdown"
+        echo "poweroff"
+    end
+end
+
+function cheat -d 'Get programming language cheat sheets from cheat.sh'
+    if test $argv[1]
+        curl https://cheat.sh/$argv[1]
+    else
+        curl https://cheat.sh
+    end
+end
+
+function dut -d 'Get top paths with most disk usage'
+    du -hs $argv[2]/* | sort -rh | head -$argv[1]
+end
+
+function m2d --description 'Move to desktop -- m2d program_name desktop_num'
+    bspc node (xdo id -N $argv[1]) -d $argv[2]
+end
+
+set -x no_proxy 'localhost,127.0.0.1'
+
+function toggle_proxy
+    if not set -q HTTP_PROXY
+        for proxy in HTTP_PROXY HTTPS_PROXY http_proxy https_proxy
+            set -gx $proxy 'http://127.0.0.1:8118'
+        end
+        echo 'Proxy On'
+    else
+        set -e {HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy}
+        echo 'proxy Off'
+    end
+end
+
+function wttr -d 'Get weather info from wttr.in'
+    if test $argv[1]
+        curl https://wttr.in/$argv[1]
+    else
+        curl https://wttr.in/
+    end
+end
+
+function fish_config --description "Launch fish's web based configuration"
+    argparse h/help -- $argv
+    or return
+
+    if set -q _flag_help
+        __fish_print_help fish_config
+        return 0
+    end
+
+    set -l cmd $argv[1]
+    set -e argv[1]
+
+    set -q cmd[1]
+    or set cmd browse
+
+    # The web-based configuration UI
+    # Also opened with just `fish_config` or `fish_config browse`.
+    if contains -- $cmd browse
+        set -lx __fish_bin_dir $__fish_bin_dir
+        if set -l python (__fish_anypython)
+            $python "$__fish_data_dir/tools/web_config/webconfig.py" $argv
+        else
+            echo (set_color $fish_color_error)Cannot launch the web configuration tool:(set_color normal)
+            echo (set_color -o)"fish_config browse"(set_color normal) requires Python.
+            echo Installing python will fix this, and also enable completions to be
+            echo automatically generated from man pages.\n
+            echo To change your prompt, use (set_color -o)"fish_config prompt"(set_color normal) or create a (set_color -o)"fish_prompt"(set_color normal) function.
+                echo To list the samples use (set_color -o)"fish_config prompt show"(set_color normal).\n
+
+                echo You can tweak your colors by setting the (set_color $fish_color_search_match)\$fish_color_\*(set_color normal) variables.
+            end
+            return 0
+        end
+
+        if not contains -- $cmd prompt
+            echo No such subcommand: $cmd >&2
+            return 1
+        end
+        
+        # prompt - for prompt switching
+        set -l cmd $argv[1]
+        set -e argv[1]
+
+        if contains -- $cmd list; and set -q argv[1]
+            echo "Too many arguments" >&2
+            return 1
+        end
+
+        set -l prompt_dir $__fish_data_dir/sample_prompts $__fish_data_dir/tools/web_config/sample_prompts
+        switch $cmd
+            case show
+                set -l fish (status fish-path)
+                set -l prompts $prompt_dir/$argv.fish
+                set -q prompts[1]; or set prompts $prompt_dir/*.fish
+                for p in $prompts
+                    if not test -e "$p"
+                        continue
+                    end
+                    set -l promptname (string replace -r '.*/([^/]*).fish$' '$1' $p)
+                    echo -s (set_color --underline) $promptname (set_color normal)
+                    $fish -c "functions -e fish_right_prompt; source $p;
+                    false
+                    fish_prompt
+                    echo (set_color normal)
+                    if functions -q fish_right_prompt;
+                    echo right prompt: (false; fish_right_prompt)
+                end"
+                echo
+                end
+            case list ''
+                string replace -r '.*/([^/]*).fish$' '$1' $prompt_dir/*.fish
+                return
+            case choose
+                if set -q argv[2]
+                    echo "Too many arguments" >&2
+                    return 1
+                end
+                if not set -q argv[1]
+                    echo "Too few arguments" >&2
+                    return 1
+                end
+
+                set -l have 0
+                for f in $prompt_dir/$argv[1].fish
+                    if test -f $f
+                        source $f
+                        set have 1
+                        break
+                    end
+                end
+                if test $have -eq 0
+                    echo "No such prompt: '$argv[1]'" >&2
+                    return 1
+                end
+            case save
+                read -P"Overwrite prompt? [y/N]" -l yesno
+                if string match -riq 'y(es)?' -- $yesno
+                    echo Overwriting
+                    cp $__fish_config_dir/functions/fish_prompt.fish{,.bak}
+
+                    if set -q argv[1]
+                        set -l have 0
+                        for f in $prompt_dir/$argv[1].fish
+                            if test -f $f
+                                set have 1
+                                source $f
+                                or return 2
+                            end
+                        end
+                        if test $have -eq 0
+                            echo "No such prompt: '$argv[1]'" >&2
+                            return 1
+                        end
+                    end
+
+                    funcsave fish_prompt
+                    or return
+
+                    functions -q fish_right_prompt
+                    and funcsave fish_right_prompt
+
+                    return
+                else
+                    echo Not overwriting
+                    return 1
+                end
+        end
+
+        return 0
+    end
\ No newline at end of file
diff --git a/lexers/testdata/fish.expected b/lexers/testdata/fish.expected
new file mode 100644
index 0000000..1583669
--- /dev/null
+++ b/lexers/testdata/fish.expected
@@ -0,0 +1,1265 @@
+[
+  {"type":"CommentHashbang","value":"#!/usr/bin/env fish\n"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" hello "},
+  {"type":"Operator","value":"\u003e"},
+  {"type":"Text","value":" output.txt\n\n"},
+  {"type":"NameBuiltin","value":"alias "},
+  {"type":"NameVariable","value":"something"},
+  {"type":"Operator","value":"="},
+  {"type":"Text","value":"echo\n\n"},
+  {"type":"NameFunction","value":"sudo"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"systemctl"},
+  {"type":"Text","value":" start postgresql\n\n"},
+  {"type":"Comment","value":"# Outputs 'image.png'.\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"basename"},
+  {"type":"Text","value":" image.jpg .jpg"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":".png\n\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" some text for testing\n\n"},
+  {"type":"Comment","value":"# Convert all JPEG files in the current directory to the\n# PNG format using the 'convert' program.\n"},
+  {"type":"Keyword","value":"for"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"i"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"Text","value":" *.jpg"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"convert"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$i"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"basename"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$i"},
+  {"type":"Text","value":" .jpg"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":".png"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Comment","value":"# Set the ``data`` variable to the contents of 'data.txt'\n# without splitting it into a list.\n"},
+  {"type":"Keyword","value":"begin"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"IFS"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"data"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"cat"},
+  {"type":"Text","value":" data.txt"},
+  {"type":"Operator","value":")"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Comment","value":"# Set ``$data`` to the contents of data, splitting on NUL-bytes.\n"},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"data"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"cat"},
+  {"type":"Text","value":" data "},
+  {"type":"Operator","value":"|"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"string "},
+  {"type":"Text","value":"split0"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"NameFunction","value":"grep"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"fish "},
+  {"type":"Text","value":"myanimallist1 "},
+  {"type":"Operator","value":"|"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"wc"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" input."},
+  {"type":"Operator","value":"{"},
+  {"type":"Text","value":"c,h,txt"},
+  {"type":"Operator","value":"}"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"{"},
+  {"type":"NameVariable","value":"$dogs"},
+  {"type":"Operator","value":"}"},
+  {"type":"Text","value":"dog\n\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"seq"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"10"},
+  {"type":"Operator","value":")["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"3"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"seq"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"10"},
+  {"type":"Operator","value":")["},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Operator","value":".."},
+  {"type":"LiteralNumber","value":"5"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":".."},
+  {"type":"LiteralNumber","value":"3"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"seq"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"10"},
+  {"type":"Operator","value":")[-"},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":".."},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"PATH"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$PATH"},
+  {"type":"Operator","value":"[-"},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":".."},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"foo"},
+  {"type":"Text","value":" banana\n"},
+  {"type":"NameVariable","value":"foo"},
+  {"type":"Operator","value":"="},
+  {"type":"Text","value":"gagaga "},
+  {"type":"NameFunction","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$foo"},
+  {"type":"Text","value":" "},
+  {"type":"Comment","value":"# prints gagaga, while in other shells it might print \"banana\"\n"},
+  {"type":"NameVariable","value":"foo"},
+  {"type":"Operator","value":"="},
+  {"type":"Text","value":"gagaga "},
+  {"type":"NameFunction","value":"somecommand"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$foo"},
+  {"type":"Text","value":" "},
+  {"type":"Comment","value":"# prints gagaga, while in other shells it might print \"banana\"\n"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"some func"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'function'"},
+  {"type":"Text","value":" with space\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"dirs"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"--description"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'Print directory stack'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"options"},
+  {"type":"Text","value":" h/"},
+  {"type":"NameBuiltin","value":"help "},
+  {"type":"Text","value":"c\n    "},
+  {"type":"NameBuiltin","value":"argparse"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-n"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"dirs"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"--max-args"},
+  {"type":"Operator","value":"="},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$options"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"or"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"_flag_help"},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"__fish_print_help"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"dirs\n        "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"_flag_c"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Comment","value":"# Clear directory stack.\n"},
+  {"type":"Text","value":"        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-e"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-g"},
+  {"type":"Text","value":" dirstack\n        "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Comment","value":"# Replace $HOME with ~.\n"},
+  {"type":"Text","value":"    "},
+  {"type":"NameBuiltin","value":"string "},
+  {"type":"Text","value":"replace "},
+  {"type":"NameAttribute","value":"-r"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'^'"},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"NameVariable","value":"$HOME"},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"LiteralStringSingle","value":"'($|/)'"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'~$1'"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$PWD"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$dirstack"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"|"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"string "},
+  {"type":"Text","value":"join "},
+  {"type":"LiteralStringDouble","value":"\" \""},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"ytdl_files"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-d"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"Download videos from text files with youtube-dl and put them into folders\""},
+  {"type":"Text","value":"\n    "},
+  {"type":"NameBuiltin","value":"argparse"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"--name"},
+  {"type":"Operator","value":"="},
+  {"type":"Text","value":"ytdl_files "},
+  {"type":"LiteralStringSingle","value":"'s/shutdown'"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"for"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"file"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"Operating on "},
+  {"type":"NameVariable","value":"$file"},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"youtube-dl"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-a"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$file"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-i"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-o"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"dirname"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$file"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringDouble","value":"\"/\""},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"basename"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$file"},
+  {"type":"Text","value":" .txt"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringDouble","value":"\"/%(autonumber)s-%(title)s.%(ext)s\""},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-n"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"NameVariable","value":"$_flag_shutdown"},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"poweroff\""},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"cheat"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-d"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'Get programming language cheat sheets from cheat.sh'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"curl"},
+  {"type":"Text","value":" https://cheat.sh/"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"else"},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"curl"},
+  {"type":"Text","value":" https://cheat.sh\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"dut"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-d"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'Get top paths with most disk usage'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"NameFunction","value":"du"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-hs"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"/* "},
+  {"type":"Operator","value":"|"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"sort"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-rh"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"|"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"head"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"m2d"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"--description"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'Move to desktop -- m2d program_name desktop_num'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"NameFunction","value":"bspc"},
+  {"type":"Text","value":" node "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"xdo"},
+  {"type":"Text","value":" id "},
+  {"type":"NameAttribute","value":"-N"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"])"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-d"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-x"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"no_proxy"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'localhost,127.0.0.1'"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"toggle_proxy"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"not"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"HTTP_PROXY"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"for"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"proxy"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"Text","value":" HTTP_PROXY HTTPS_PROXY http_proxy https_proxy\n            "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-gx"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$proxy"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'http://127.0.0.1:8118'"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'Proxy On'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"else"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-e"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"{"},
+  {"type":"Text","value":"HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy"},
+  {"type":"Operator","value":"}"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'proxy Off'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"wttr"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-d"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'Get weather info from wttr.in'"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"curl"},
+  {"type":"Text","value":" https://wttr.in/"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"else"},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"curl"},
+  {"type":"Text","value":" https://wttr.in/\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n"},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"function"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"fish_config"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"--description"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"Launch fish's web based configuration\""},
+  {"type":"Text","value":"\n    "},
+  {"type":"NameBuiltin","value":"argparse "},
+  {"type":"Text","value":"h/"},
+  {"type":"NameBuiltin","value":"help"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"or"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"_flag_help"},
+  {"type":"Text","value":"\n        "},
+  {"type":"NameFunction","value":"__fish_print_help"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"fish_config\n        "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"cmd"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-e"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n\n    "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"cmd"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"or"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"cmd"},
+  {"type":"Text","value":" browse\n\n    "},
+  {"type":"Comment","value":"# The web-based configuration UI\n"},
+  {"type":"Text","value":"    "},
+  {"type":"Comment","value":"# Also opened with just `fish_config` or `fish_config browse`.\n"},
+  {"type":"Text","value":"    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"contains"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$cmd"},
+  {"type":"Text","value":" browse\n        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-lx"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"__fish_bin_dir"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$__fish_bin_dir"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"python"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameFunction","value":"__fish_anypython"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"\n            "},
+  {"type":"NameVariable","value":"$python"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"NameVariable","value":"$__fish_data_dir"},
+  {"type":"LiteralStringDouble","value":"/tools/web_config/webconfig.py\""},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"else"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$fish_color_error"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"Cannot launch the web configuration tool:"},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-o"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringDouble","value":"\"fish_config browse\""},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":" requires Python.\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" Installing python will fix this, and "},
+  {"type":"NameFunction","value":"also"},
+  {"type":"Text","value":" enable completions to be\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" automatically generated from man pages."},
+  {"type":"LiteralStringEscape","value":"\\n"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" To change your prompt, use "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-o"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringDouble","value":"\"fish_config prompt\""},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":" or "},
+  {"type":"NameFunction","value":"create"},
+  {"type":"Text","value":" a "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-o"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringDouble","value":"\"fish_prompt\""},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":" function.\n                "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" To list the samples use "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-o"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringDouble","value":"\"fish_config prompt show\""},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"."},
+  {"type":"LiteralStringEscape","value":"\\n"},
+  {"type":"Text","value":"\n\n                "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" You can tweak your colors by setting the "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$fish_color_search_match"},
+  {"type":"Operator","value":")"},
+  {"type":"LiteralStringEscape","value":"\\$"},
+  {"type":"Text","value":"fish_color_"},
+  {"type":"LiteralStringEscape","value":"\\*"},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":" variables.\n            "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n        "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"not"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"contains"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$cmd"},
+  {"type":"Text","value":" prompt\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" No such subcommand: "},
+  {"type":"NameVariable","value":"$cmd"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"\u003e\u0026"},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n        \n        "},
+  {"type":"Comment","value":"# prompt - for prompt switching\n"},
+  {"type":"Text","value":"        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"cmd"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-e"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n\n        "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"contains"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$cmd"},
+  {"type":"Text","value":" list"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"and"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"Too many arguments\""},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"\u003e\u0026"},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"prompt_dir"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$__fish_data_dir"},
+  {"type":"Text","value":"/sample_prompts "},
+  {"type":"NameVariable","value":"$__fish_data_dir"},
+  {"type":"Text","value":"/tools/web_config/sample_prompts\n        "},
+  {"type":"Keyword","value":"switch"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$cmd"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"case"},
+  {"type":"Text","value":" show\n                "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"fish"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"status fish"},
+  {"type":"NameAttribute","value":"-path"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"prompts"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$prompt_dir"},
+  {"type":"Text","value":"/"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Text","value":"."},
+  {"type":"NameBuiltin","value":"fish\n                "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"prompts"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"or"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"prompts"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$prompt_dir"},
+  {"type":"Text","value":"/*."},
+  {"type":"NameBuiltin","value":"fish\n                "},
+  {"type":"Keyword","value":"for"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"p"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$prompts"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"not"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-e"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"NameVariable","value":"$p"},
+  {"type":"LiteralStringDouble","value":"\""},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"continue"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"promptname"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"string "},
+  {"type":"Text","value":"replace "},
+  {"type":"NameAttribute","value":"-r"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'.*/([^/]*).fish$'"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'$1'"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$p"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-s"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"--underline"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$promptname"},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"("},
+  {"type":"NameBuiltin","value":"set_color "},
+  {"type":"Text","value":"normal"},
+  {"type":"Operator","value":")"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"NameVariable","value":"$fish"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-c"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"functions -e fish_right_prompt; source "},
+  {"type":"NameVariable","value":"$p"},
+  {"type":"LiteralStringDouble","value":";\n                    false\n                    fish_prompt\n                    echo (set_color normal)\n                    if functions -q fish_right_prompt;\n                    echo right prompt: (false; fish_right_prompt)\n                end\""},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"case"},
+  {"type":"Text","value":" list "},
+  {"type":"LiteralStringSingle","value":"''"},
+  {"type":"Text","value":"\n                "},
+  {"type":"NameBuiltin","value":"string "},
+  {"type":"Text","value":"replace "},
+  {"type":"NameAttribute","value":"-r"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'.*/([^/]*).fish$'"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'$1'"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$prompt_dir"},
+  {"type":"Text","value":"/*."},
+  {"type":"NameBuiltin","value":"fish\n                "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"case"},
+  {"type":"Text","value":" choose\n                "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"Too many arguments\""},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"\u003e\u0026"},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"not"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"Too few arguments\""},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"\u003e\u0026"},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n                "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"have"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"for"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"f"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$prompt_dir"},
+  {"type":"Text","value":"/"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"."},
+  {"type":"NameBuiltin","value":"fish\n                    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-f"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$f"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"NameBuiltin","value":"source"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$f"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"have"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"break"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$have"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-eq"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"No such prompt: '"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"LiteralStringDouble","value":"[1]'\""},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"\u003e\u0026"},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n            "},
+  {"type":"Keyword","value":"case"},
+  {"type":"Text","value":" save\n                "},
+  {"type":"NameBuiltin","value":"read"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-P"},
+  {"type":"LiteralStringDouble","value":"\"Overwrite prompt? [y/N]\""},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" yesno\n                "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"string "},
+  {"type":"Text","value":"match "},
+  {"type":"NameAttribute","value":"-riq"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringSingle","value":"'y(es)?'"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-- "},
+  {"type":"NameVariable","value":"$yesno"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" Overwriting\n                    "},
+  {"type":"NameFunction","value":"cp"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$__fish_config_dir"},
+  {"type":"Text","value":"/"},
+  {"type":"NameBuiltin","value":"functions"},
+  {"type":"Text","value":"/fish_prompt."},
+  {"type":"NameBuiltin","value":"fish"},
+  {"type":"Operator","value":"{"},
+  {"type":"Text","value":",.bak"},
+  {"type":"Operator","value":"}"},
+  {"type":"Text","value":"\n\n                    "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-l"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"have"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"for"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"f"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$prompt_dir"},
+  {"type":"Text","value":"/"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Operator","value":"]"},
+  {"type":"Text","value":"."},
+  {"type":"NameBuiltin","value":"fish\n                            "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-f"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$f"},
+  {"type":"Text","value":"\n                                "},
+  {"type":"Keyword","value":"set"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"have"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                                "},
+  {"type":"NameBuiltin","value":"source"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$f"},
+  {"type":"Text","value":"\n                                "},
+  {"type":"Keyword","value":"or"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n                            "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"if"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"test"},
+  {"type":"Text","value":" "},
+  {"type":"NameVariable","value":"$have"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-eq"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n                            "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralStringDouble","value":"\"No such prompt: '"},
+  {"type":"NameVariable","value":"$argv"},
+  {"type":"LiteralStringDouble","value":"[1]'\""},
+  {"type":"Text","value":" "},
+  {"type":"Operator","value":"\u003e\u0026"},
+  {"type":"LiteralNumber","value":"2"},
+  {"type":"Text","value":"\n                            "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n                    "},
+  {"type":"NameBuiltin","value":"funcsave fish_prompt\n                    "},
+  {"type":"Keyword","value":"or"},
+  {"type":"Text","value":" "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":"\n\n                    "},
+  {"type":"NameBuiltin","value":"functions"},
+  {"type":"Text","value":" "},
+  {"type":"NameAttribute","value":"-q"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"fish_right_prompt\n                    "},
+  {"type":"Keyword","value":"and"},
+  {"type":"Text","value":" "},
+  {"type":"NameBuiltin","value":"funcsave fish_right_prompt\n\n                    "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"else"},
+  {"type":"Text","value":"\n                    "},
+  {"type":"Keyword","value":"echo"},
+  {"type":"Text","value":" Not overwriting\n                    "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"1"},
+  {"type":"Text","value":"\n                "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n        "},
+  {"type":"Keyword","value":"end"},
+  {"type":"Text","value":"\n\n        "},
+  {"type":"Keyword","value":"return"},
+  {"type":"Text","value":" "},
+  {"type":"LiteralNumber","value":"0"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Keyword","value":"end"}
+]