From 395a169104446a5ca240329530de91695dbdc72e Mon Sep 17 00:00:00 2001 From: Mohamed Abdelnour Date: Fri, 14 May 2021 18:16:38 +0200 Subject: Add support for dash shebang --- assets/patches/ShellScript.sublime-syntax.patch | 9 +++++++-- assets/syntaxes.bin | Bin 701786 -> 701827 bytes 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/assets/patches/ShellScript.sublime-syntax.patch b/assets/patches/ShellScript.sublime-syntax.patch index 4afcdb00..5aa7fba1 100644 --- a/assets/patches/ShellScript.sublime-syntax.patch +++ b/assets/patches/ShellScript.sublime-syntax.patch @@ -1,8 +1,8 @@ diff --git syntaxes/01_Packages/ShellScript/Bash.sublime-syntax syntaxes/01_Packages/ShellScript/Bash.sublime-syntax -index e973e319..a703cef8 100644 +index e973e319..07c170a7 100644 --- syntaxes/01_Packages/ShellScript/Bash.sublime-syntax +++ syntaxes/01_Packages/ShellScript/Bash.sublime-syntax -@@ -30,8 +30,8 @@ file_extensions: +@@ -30,12 +30,12 @@ file_extensions: - .zshenv - .zshrc - PKGBUILD # https://jlk.fjfi.cvut.cz/arch/manpages/man/PKGBUILD.5 @@ -13,3 +13,8 @@ index e973e319..a703cef8 100644 first_line_match: | (?x) +- ^\#! .* \b(bash|zsh|sh|tcsh|ash)\b ++ ^\#! .* \b(bash|zsh|sh|tcsh|ash|dash)\b + | ^\# \s* -\*- [^*]* mode: \s* shell-script [^*]* -\*- + + #------------------------------------------------------------------------------- diff --git a/assets/syntaxes.bin b/assets/syntaxes.bin index cd87edd8..2fdd79a2 100644 Binary files a/assets/syntaxes.bin and b/assets/syntaxes.bin differ -- cgit v1.2.3 From ef5154d5b34d3f2853e03da2ee55d90af35b4b65 Mon Sep 17 00:00:00 2001 From: Mohamed Abdelnour Date: Fri, 14 May 2021 22:12:58 +0200 Subject: Update CHANGELOG for #1654 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14397645..734ed35e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ ## Syntaxes +- Added support for `dash` syntax, see #1654 (@mohamed-abdelnour) + ## New themes -- cgit v1.2.3 From 8b787b4f704a2f9862958a1b02695d980a1a9e66 Mon Sep 17 00:00:00 2001 From: Mohamed Abdelnour Date: Fri, 14 May 2021 23:02:23 +0200 Subject: Add dash test file --- tests/syntax-tests/highlighted/dash/shfm | 425 ++++++++++++++++++++++++++++++ tests/syntax-tests/source/dash/LICENSE.md | 23 ++ tests/syntax-tests/source/dash/shfm | 425 ++++++++++++++++++++++++++++++ 3 files changed, 873 insertions(+) create mode 100644 tests/syntax-tests/highlighted/dash/shfm create mode 100644 tests/syntax-tests/source/dash/LICENSE.md create mode 100644 tests/syntax-tests/source/dash/shfm diff --git a/tests/syntax-tests/highlighted/dash/shfm b/tests/syntax-tests/highlighted/dash/shfm new file mode 100644 index 00000000..3d382fbb --- /dev/null +++ b/tests/syntax-tests/highlighted/dash/shfm @@ -0,0 +1,425 @@ +#!/usr/bin/env dash + +esc() { + case $1 in + # vt100 (IL is vt102) (DECTCEM is vt520) + CUD) printf '%s[%sB' "$esc_c" "$2" ;; # cursor down + CUP) printf '%s[%s;%sH' "$esc_c" "$2" "$3" ;; # cursor home + CUU) printf '%s[%sA' "$esc_c" "$2" ;; # cursor up + DECAWM) printf '%s[?7%s' "$esc_c" "$2" ;; # line wrap + DECRC) printf '%s8' "$esc_c" ;; # cursor restore + DECSC) printf '%s7' "$esc_c" ;; # cursor save + DECSTBM) printf '%s[%s;%sr' "$esc_c" "$2" "$3" ;; # scroll region + DECTCEM) printf '%s[?25%s' "$esc_c" "$2" ;; # cursor visible + ED[0-2]) printf '%s[%sJ' "$esc_c" "${1#ED}" ;; # clear screen + EL[0-2]) printf '%s[%sK' "$esc_c" "${1#EL}" ;; # clear line + IL) printf '%s[%sL' "$esc_c" "$2" ;; # insert line + SGR) printf '%s[%s;%sm' "$esc_c" "$2" "$3" ;; # colors + + # xterm (since 1988, supported widely) + screen_alt) printf '%s[?1049%s' "$esc_c" "$2" ;; # alternate buffer + esac +} + +term_setup() { + stty=$(stty -g) + stty -icanon -echo + esc screen_alt h + esc DECAWM l + esc DECTCEM l + esc ED2 + esc DECSTBM 1 "$((LINES - 2))" +} + +term_reset() { + esc DECAWM h >&2 + esc DECTCEM h >&2 + esc ED2 >&2 + esc DECSTBM >&2 + esc screen_alt l >&2 + stty "$stty" + + # needed for cd-on-exit + printf '%s\n' "$PWD" >&1 +} + +term_resize() { + # false-positive, behavior intentional, globbing is disabled. + # shellcheck disable=2046 + { + set -f + set +f -- $(stty size) + } + + LINES=$1 COLUMNS=$2 + + # space for status_line + bottom=$((LINES - 2)) +} + +term_scroll_down() { + case $((y - $#)) in + [0-9]*) return + esac + + y=$((y + 1)) + y2=$((y2 + 1 < bottom ? y2 + 1 : bottom)) + + line_print "$((y - 1))" "$@" + printf '\n' + line_print "$y" "$@" + status_line "$#" +} + +term_scroll_up() { + case $y in + -*|0|1) return + esac + + y=$((y - 1)) + + line_print "$((y + 1))" "$@" + + case $y2 in + 1) esc IL ;; + *) esc CUU; y2=$((y2 > 1 ? y2 - 1 : 1)) + esac + + line_print "$y" "$@" + status_line "$#" +} + +cmd_run() { + stty "$stty" + esc DECTCEM h + esc DECSTBM + esc ED2 + "$@" ||: + esc DECSTBM 1 "$((LINES - 2))" + esc DECTCEM l + stty -icanon -echo + hist=2 +} + +file_escape() { + tmp=$1 safe= + + # loop over string char by char + while c=${tmp%"${tmp#?}"}; do + case $c in + '') return ;; + [[:cntrl:]]) safe=$safe\? ;; + *) safe=$safe$c ;; + esac + + tmp=${tmp#?} + done +} + +hist_search() { + hist=0 j=1 + + for file do + case ${PWD%%/}/$file in + "$old_pwd") y=$j y2=$((j > bottom ? mid : j)) cur=$file + esac + + j=$((j + 1)) + done +} + +list_print() { + esc ED2 + esc CUP + + i=1 + end=$((bottom + 1)) + mid=$((bottom / 4 < 5 ? 1 : bottom / 4)) + + case $# in + 1) [ -e "$1" ] || set -- empty + esac + + case $hist in + 2) # redraw after cmd run + shift "$((y > y2 ? y - y2 : 0))" + ;; + + 1) # redraw after go-to-parent + hist_search "$@" + shift "$((y >= bottom ? y - mid : 0))" + ;; + + *) # everything else + shift "$((y >= bottom ? y - bottom : 0))" + ;; + esac + + for file do + case $i in + "$y2") esc SGR 0 7 + esac + + case $((i - end)) in + -*) + line_format "$file" + esc CUD + ;; + esac + + i=$((i + 1)) + done + + esc CUP "$((y > y2 ? y2 : y))" +} + +redraw() { + list_print "$@" + status_line "$#" +} + +status_line() { + esc DECSC + esc CUP "$LINES" + + case $USER in + root) esc SGR 31 7 ;; + *) esc SGR 34 7 ;; + esac + + printf '%*s\r%s ' "$COLUMNS" "" "($y/$1)" + + case $ltype in + '') printf %s "$PWD" ;; + *) printf %s "$ltype" + esac + + esc SGR 0 0 + esc DECRC +} + +prompt() { + esc DECSC + esc CUP "$LINES" + printf %s "$1" + esc DECTCEM h + esc EL0 + + case $2 in + r) + stty icanon echo + read -r ans ||: + stty -icanon -echo + ;; + esac + + esc DECRC + esc DECTCEM l + status_line "($y/$#) $PWD" +} + +line_print() { + offset=$1 + + case $offset in + "$y") esc SGR 0 7 + esac + + shift "$offset" + + case $offset in + "$y") cur=$1 + esac + + line_format "$1" +} + +line_format() { + file_escape "$1" + [ -d "$1" ] && esc SGR 1 31 + printf %s "$safe" + [ -d "$1" ] && printf / + esc SGR 0 0 + esc EL0 + printf '\r' +} + +main() { + set -e + + case $1 in + -h|--help) + printf 'shfm -[hv] \n' + exit 0 + ;; + + -v|--version) + printf 'shfm 0.4.2\n' + exit 0 + ;; + + *) + cd -- "${1:-"$PWD"}" + ;; + esac + + esc_c=$(printf '\033') + bs_char=$(printf '\177') + + set -- * + cur=$1 + + term_resize + term_setup + + trap 'term_reset' EXIT INT + trap 'term_resize; term_setup; y=1 y2=1; redraw "$@"' WINCH + + y=1 y2=1 + redraw "$@" + + while key=$(dd ibs=1 count=1 2>/dev/null); do + case $key${esc:=0} in + k?|A2) + term_scroll_up "$@" + ;; + + j?|B2) + term_scroll_down "$@" + ;; + + l?|C2|"$esc") # ARROW RIGHT + if [ -d "$cur" ] && cd -- "$cur" >/dev/null 2>&1; then + set -- * + y=1 y2=1 cur=$1 ltype= + redraw "$@" + + elif [ -e "$cur" ]; then + cmd_run "${SHFM_OPENER:="${EDITOR:=vi}"}" "$cur" + redraw "$@" + fi + ;; + + h?|D2|"$bs_char"?) # ARROW LEFT + old_pwd=$PWD + + case $ltype in + '') cd .. || continue ;; + *) ltype= ;; + esac + + set -- * + y=1 y2=1 cur=$1 hist=1 + redraw "$@" + ;; + + g?) + case $y in + 1) continue + esac + + y=1 y2=1 cur=$1 + redraw "$@" + ;; + + G?) + y=$# + y2=$(($# < bottom ? $# : bottom)) + redraw "$@" + ;; + + .?) + case ${hidden:=1} in + 1) hidden=0; set -- .* ;; + 0) hidden=1; set -- * + esac + + y=1 y2=1 cur=$1 + redraw "$@" + ;; + + :?) + prompt "cd: " r + + # false positive, behavior intentional + # shellcheck disable=2088 + case $ans in + '~') ans=$HOME ;; + '~/'*) ans=$HOME/${ans#"~/"} + esac + + cd -- "${ans:="$0"}" >/dev/null 2>&1|| continue + set -- * + y=1 y2=1 cur=$1 + redraw "$@" + ;; + + /?) + prompt / r + + # word splitting and globbing intentional + # shellcheck disable=2086 + set -- $ans* + + case $1$# in + "$ans*1") set -- 'no results' + esac + + y=1 y2=1 cur=$1 ltype="search $PWD/$ans*" + redraw "$@" + status_line "$#" + ;; + + -?) + cd -- "$OLDPWD" >/dev/null 2>&1|| continue + set -- * + y=1 y2=1 cur=$1 + redraw "$@" + ;; + + \~?) + cd || continue + set -- * + y[38;2;249;