Skip to content

Instantly share code, notes, and snippets.

@ideabucket
Created May 3, 2022 22:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ideabucket/7e9939b2e12b31d68fcd8e777b61aa29 to your computer and use it in GitHub Desktop.
Save ideabucket/7e9939b2e12b31d68fcd8e777b61aa29 to your computer and use it in GitHub Desktop.
A BBEdit codeless language module for the fish shell
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Identification -->
<key>BBEditDocumentType</key> <string>CodelessLanguageModule</string>
<key>BBLMLanguageDisplayName</key> <string>Fish Script</string>
<key>BBLMLanguageCode</key> <string>fish</string>
<!-- File Mapping -->
<key>BBLMSuffixMap</key>
<array>
<dict>
<key>BBLMLanguageSuffix</key> <string>.fish</string>
</dict>
</array>
<key>BBLMFileNamesToMatch</key>
<array>
<string></string>
</array>
<key>BBLMPreferredFilenameExtension</key> <string>fish</string>
<!-- Services -->
<key>BBLMSupportsTextCompletion</key> <true/>
<key>BBLMCanSpellCheckCodeRuns</key> <false/>
<key>BBLMReferenceSearchURLTemplate</key>
<string>https://fishshell.com/docs/current/cmds/__SYMBOLNAME__.html#cmd-__SYMBOLNAME__</string>
<key>BBLMIsCaseSensitive</key> <true/>
<key>BBLMScansFunctions</key> <true/>
<!-- Controlling Syntax Coloring -->
<key>BBLMColorsSyntax</key> <true/>
<key>BBLMKeywordList</key>
<array>
<string>_</string>
<string>abbr</string>
<string>alias</string>
<string>and</string>
<string>argparse</string>
<string>begin</string>
<string>bg</string>
<string>bind</string>
<string>block</string>
<string>break</string>
<string>breakpoint</string>
<string>builtin</string>
<string>case</string>
<string>cd</string>
<string>cdh</string>
<string>command</string>
<string>commandline</string>
<string>complete</string>
<string>contains</string>
<string>continue</string>
<string>count</string>
<string>dirh</string>
<string>dirs</string>
<string>disown</string>
<string>echo</string>
<string>else</string>
<string>emit</string>
<string>end</string>
<string>eval</string>
<string>exec</string>
<string>exit</string>
<string>false</string>
<string>fg</string>
<string>fish</string>
<string>fish_add_path</string>
<string>fish_breakpoint_prompt</string>
<string>fish_command_not_found</string>
<string>fish_config</string>
<string>fish_git_prompt</string>
<string>fish_greeting</string>
<string>fish_hg_prompt</string>
<string>fish_indent</string>
<string>fish_is_root_user</string>
<string>fish_key_reader</string>
<string>fish_mode_prompt</string>
<string>fish_opt</string>
<string>fish_prompt</string>
<string>fish_right_prompt</string>
<string>fish_status_to_signal</string>
<string>fish_svn_prompt</string>
<string>fish_title</string>
<string>fish_update_completions</string>
<string>fish_vcs_prompt</string>
<string>for</string>
<string>funced</string>
<string>funcsave</string>
<string>function</string>
<string>functions</string>
<string>help</string>
<string>history</string>
<string>if</string>
<string>isatty</string>
<string>jobs</string>
<string>math</string>
<string>nextd</string>
<string>not</string>
<string>open</string>
<string>or</string>
<string>popd</string>
<string>prevd</string>
<string>printf</string>
<string>prompt_hostname</string>
<string>prompt_login</string>
<string>prompt_pwd</string>
<string>psub</string>
<string>pushd</string>
<string>pwd</string>
<string>random</string>
<string>read</string>
<string>realpath</string>
<string>return</string>
<string>set</string>
<string>set_color</string>
<string>source</string>
<string>status</string>
<string>string</string>
<string>string-collect</string>
<string>string-escape</string>
<string>string-join</string>
<string>string-join0</string>
<string>string-length</string>
<string>string-lower</string>
<string>string-match</string>
<string>string-pad</string>
<string>string-repeat</string>
<string>string-replace</string>
<string>string-split</string>
<string>string-split0</string>
<string>string-sub</string>
<string>string-trim</string>
<string>string-unescape</string>
<string>string-upper</string>
<string>suspend</string>
<string>switch</string>
<string>test</string>
<string>time</string>
<string>trap</string>
<string>true</string>
<string>type</string>
<string>ulimit</string>
<string>umask</string>
<string>vared</string>
<string>wait</string>
<string>while</string>
</array>
<!-- Un/Comment Tokens -->
<key>BBLMCommentLineDefault</key> <string>#</string>
<!-- Language Features -->
<key>Language Features</key>
<dict>
<key>Identifier and Keyword Character Class</key>
<string>A-Za-z0-9_</string>
<key>Open Strings 1</key> <string>"</string>
<key>Close Strings 1</key> <string>"</string>
<key>Open Strings 2</key> <string>'</string>
<key>Close Strings 2</key> <string>'</string>
<key>Escape Char in Strings 1</key> <string>\</string>
<key>Open Line Comments</key> <string>#</string>
<key>Function Pattern</key>
<string><![CDATA[
(?msx:
(?P<indent_level>
(?P<whitespace>\h*)
)
function
(?P>whitespace)
(?P<function_name>
(?:[a-zA-Z_][a-zA-Z0-9_]*)
)
(?P>whitespace)
(?P<function_opts>
(?:
--?
[A-Za-z]+
(?P>whitespace)
[\S\h]* (?# any non-whitespace character, or a space,
but not a newline)
)*
)
(?P<linebreak>(?:\v|;))
(?P<function_body>
.+?
)
(?# Horrible hack alert: this looks for an "end" token on the same indent as
the "function" token -- because functions can contain other things that
are also terminated with "end", e.g. if…end blocks, which BBEdit would
otherwise detect as the end of the function.)
(?P<function_terminator>
(?:
(?P>linebreak)(?P=indent_level)end
)
)
)
]]></string>
</dict>
</dict>
</plist>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment