From c3362aefa2e762211409923cfff065541bebf9e7 Mon Sep 17 00:00:00 2001 From: Saumit Dinesan Date: Sun, 22 May 2022 00:37:40 +0530 Subject: ble.sh & z4h addition --- .local/src/blesh/lib/vim-airline.sh | 306 ++++++++++++++++++++++++++++++++++++ 1 file changed, 306 insertions(+) create mode 100644 .local/src/blesh/lib/vim-airline.sh (limited to '.local/src/blesh/lib/vim-airline.sh') diff --git a/.local/src/blesh/lib/vim-airline.sh b/.local/src/blesh/lib/vim-airline.sh new file mode 100644 index 0000000..b4d8b6e --- /dev/null +++ b/.local/src/blesh/lib/vim-airline.sh @@ -0,0 +1,306 @@ +# this script is a part of blesh (https://github.com/akinomyoga/ble.sh) under BSD-3-Clause license +ble-import keymap/vi +ble-import prompt-git +bleopt/declare -n vim_airline_theme dark +function bleopt/check:vim_airline_theme { + local init=ble/lib/vim-airline/theme:"$value"/initialize + if ! ble/is-function "$init"; then + local ret + if ! ble/util/import/search "airline/$value"; then + ble/util/print "ble/lib/vim-airline: theme '$value' not found." >&2 + return 1 + fi + ble/util/import "$ret" + ble/is-function "$init" || return 1 + fi + "$init" + return 0 +} +bleopt/declare -v vim_airline_section_a '\e[1m\q{lib/vim-airline/mode}' +bleopt/declare -v vim_airline_section_b '\q{lib/vim-airline/gitstatus}' +bleopt/declare -v vim_airline_section_c '\w' +bleopt/declare -v vim_airline_section_x 'bash' +bleopt/declare -v vim_airline_section_y '$_ble_util_locale_encoding[unix]' +bleopt/declare -v vim_airline_section_z ' \q{history-percentile} \e[1m!\q{history-index}/\!\e[22m \q{position}' +bleopt/declare -v vim_airline_left_sep $'\uE0B0' +bleopt/declare -v vim_airline_left_alt_sep $'\uE0B1' +bleopt/declare -v vim_airline_right_sep $'\uE0B2' +bleopt/declare -v vim_airline_right_alt_sep $'\uE0B3' +bleopt/declare -v vim_airline_symbol_branch $'\uE0A0' +bleopt/declare -v vim_airline_symbol_dirty $'\u26A1' +function bleopt/check:vim_airline_left_sep { ble/prompt/unit#clear _ble_prompt_status; } +function bleopt/check:vim_airline_left_alt_sep { ble/prompt/unit#clear _ble_prompt_status; } +function bleopt/check:vim_airline_right_sep { ble/prompt/unit#clear _ble_prompt_status; } +function bleopt/check:vim_airline_right_alt_sep { ble/prompt/unit#clear _ble_prompt_status; } +builtin eval -- "${_ble_util_gdict_declare//NAME/_ble_lib_vim_airline_mode_map_default}" +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'i' 'INSERT' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'n' 'NORMAL' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'in' '(INSERT)' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'o' 'OP PENDING' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'R' 'REPLACE' +ble/gdict#set _ble_lib_vim_airline_mode_map_default '' 'V REPLACE' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'v' 'VISUAL' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'V' 'V-LINE' +ble/gdict#set _ble_lib_vim_airline_mode_map_default '' 'V-BLOCK' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 's' 'SELECT' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'S' 'S-LINE' +ble/gdict#set _ble_lib_vim_airline_mode_map_default '' 'S-BLOCK' +ble/gdict#set _ble_lib_vim_airline_mode_map_default '?' '------' +ble/gdict#set _ble_lib_vim_airline_mode_map_default 'c' 'COMMAND' +builtin eval -- "${_ble_util_gdict_declare//NAME/_ble_lib_vim_airline_mode_map_atomic}" +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'i' 'I' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'n' 'N' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'R' 'R' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'v' 'V' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'V' 'V-L' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic '' 'V-B' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 's' 'S' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'S' 'S-L' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic '' 'S-B' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic '?' '--' +ble/gdict#set _ble_lib_vim_airline_mode_map_atomic 'c' 'C' +builtin eval -- "${_ble_util_gdict_declare//NAME/_ble_lib_vim_airline_mode_map}" +ble/gdict#cp _ble_lib_vim_airline_mode_map_default _ble_lib_vim_airline_mode_map +function ble/lib/vim-airline/initialize-faces { + ble/color/defface vim_airline_a fg=17,bg=45 + ble/color/defface vim_airline_b fg=231,bg=27 + ble/color/defface vim_airline_c fg=231,bg=18 + ble/color/defface vim_airline_error fg=16,bg=88 # fg=#000000,bg=#990000 + ble/color/defface vim_airline_term fg=158,bg=234 # fg=#9cffd3,bg=#202020 + ble/color/defface vim_airline_warning fg=16,bg=166 # fg=#000000,bg=#df5f00 + local section map + for section in a b c error term warning; do + for map in _normal _insert _visual _commandline _inactive; do + ble/color/defface "vim_airline_$section$map" ref:"vim_airline_$section" + done + ble/color/defface "vim_airline_${section}_replace" ref:"vim_airline_${section}_insert" + done + local map + for map in '' _normal _insert _replace _visual _commandline _inactive; do + ble/color/defface "vim_airline_x$map" ref:"vim_airline_c$map" + ble/color/defface "vim_airline_y$map" ref:"vim_airline_b$map" + ble/color/defface "vim_airline_z$map" ref:"vim_airline_a$map" + done + local name + for name in {a,b,c,x,y,z,error,term,warning}{,_normal,_insert,_replace,_visual,_commandline,_inactive}; do + ble/color/defface "vim_airline_${name}_modified" ref:"vim_airline_$name" + done +} +ble/lib/vim-airline/initialize-faces +function ble/lib/vim-airline/convert-theme/.to-color256 { + local R=$((16#${1:1:2})) + local G=$((16#${1:3:2})) + local B=$((16#${1:5:2})) + ble/color/convert-rgb24-to-color256 "$R" "$G" "$B" +} +function ble/lib/vim-airline/convert-theme/.setface { + local gspec= + local ret + ble/lib/vim-airline/convert-theme/.to-color256 "$2"; local fg=$ret + ble/lib/vim-airline/convert-theme/.to-color256 "$3"; local bg=$ret + printf 'ble/color/setface vim_airline_%-13s %-13s # %s\n' "$1" "fg=$fg,bg=$bg" "fg=$2,bg=$3" +} +function ble/lib/vim-airline/convert-theme { + local file=$1 + sed -n 's/let s:airline_\([a-zA-Z_0-9]\{1,\}\)[^[:alnum:]]\{1,\}\(\#[0-9a-fA-F]\{6\}\)[^[:alnum:]]\{1,\}\(\#[0-9a-fA-F]\{6\}\).*/\1 \2 \3/p' "$file" | + while builtin read -r face fg bg; do + ble/lib/vim-airline/convert-theme/.setface "$face" "$fg" "$bg" + done +} +ble/color/setface vim_airline_a_normal fg=17,bg=190 # fg=#00005f,bg=#dfff00 +ble/color/setface vim_airline_b_normal fg=231,bg=238 # fg=#ffffff,bg=#444444 +ble/color/setface vim_airline_c_normal fg=158,bg=234 # fg=#9cffd3,bg=#202020 +ble/color/setface vim_airline_a_insert fg=17,bg=45 # fg=#00005f,bg=#00dfff +ble/color/setface vim_airline_b_insert fg=231,bg=27 # fg=#ffffff,bg=#005fff +ble/color/setface vim_airline_c_insert fg=231,bg=18 # fg=#ffffff,bg=#000080 +ble/color/setface vim_airline_a_visual fg=16,bg=214 # fg=#000000,bg=#ffaf00 +ble/color/setface vim_airline_b_visual fg=16,bg=202 # fg=#000000,bg=#ff5f00 +ble/color/setface vim_airline_c_visual fg=231,bg=52 # fg=#ffffff,bg=#5f0000 +ble/color/setface vim_airline_a_inactive fg=239,bg=234 # fg=#4e4e4e,bg=#1c1c1c +ble/color/setface vim_airline_b_inactive fg=239,bg=235 # fg=#4e4e4e,bg=#262626 +ble/color/setface vim_airline_c_inactive fg=239,bg=236 # fg=#4e4e4e,bg=#303030 +ble/color/setface vim_airline_a_commandline fg=17,bg=40 # fg=#00005f,bg=#00d700 +ble/color/setface vim_airline_b_commandline fg=231,bg=238 # fg=#ffffff,bg=#444444 +ble/color/setface vim_airline_c_commandline fg=158,bg=234 # fg=#9cffd3,bg=#202020 +_ble_lib_vim_airline_mode_data=() +_ble_lib_vim_airline_keymap= +_ble_lib_vim_airline_mode= +_ble_lib_vim_airline_rawmode= +function ble/prompt/unit:_ble_lib_vim_airline_mode/update { + local keymap mode m + ble/keymap:vi/script/get-vi-keymap + ble/keymap:vi/script/get-mode + case $mode in + (i*) m='insert' ;; + ([R]*) m='replace' ;; + (*[vVsS]) m='visual' ;; + (*c) m='commandline' ;; + (*n) m='normal' ;; + (*) m='inactive' ;; + esac + ble/prompt/unit/add-hash '$_ble_edit_str' + ble/prompt/unit/add-hash '$_ble_history_INDEX' + local entry + ble/history/get-entry "$_ble_history_INDEX" + [[ $_ble_edit_str != "$entry" ]] && m=${m}_modified + ble/prompt/unit/assign _ble_lib_vim_airline_keymap "$keymap" + ble/prompt/unit/assign _ble_lib_vim_airline_mode "$m" + ble/prompt/unit/assign _ble_lib_vim_airline_rawmode "$mode" + [[ $prompt_unit_changed ]] +} +function ble/prompt/backslash:lib/vim-airline/mode/.resolve { + local raw=$1 + if ble/gdict#has _ble_lib_vim_airline_mode_map "$raw"; then + ble/gdict#get _ble_lib_vim_airline_mode_map "$raw" + else + case $raw in + (o) ble/prompt/backslash:lib/vim-airline/mode/.resolve "$_ble_lib_vim_airline_rawmode" ;; + ([iR]?*) ble/prompt/backslash:lib/vim-airline/mode/.resolve "${raw::1}" ;; + (*?[ncvVsS]) ble/prompt/backslash:lib/vim-airline/mode/.resolve "${raw:${#raw}-1}" ;; + () ble/prompt/backslash:lib/vim-airline/mode/.resolve R ;; + (R) ble/prompt/backslash:lib/vim-airline/mode/.resolve i ;; + ([S]) ble/prompt/backslash:lib/vim-airline/mode/.resolve s ;; + ([Vs]) ble/prompt/backslash:lib/vim-airline/mode/.resolve v ;; + ([ivnc]) + ret= + case $_ble_lib_vim_airline_rawmode in + (i*) ret=$bleopt_keymap_vi_mode_name_insert ;; + (R*) ret=$bleopt_keymap_vi_mode_name_replace ;; + (*) ret=$bleopt_keymap_vi_mode_name_vreplace ;; + esac + [[ $_ble_lib_vim_airline_rawmode == [iR]?* ]] && + ble/string#tolower "($insert) " + case $_ble_lib_vim_airline_rawmode in + (*n) + if [[ ! $ret ]]; then + local rex='[[:alnum:]](.*[[:alnum:]])?' + [[ $bleopt_keymap_vi_mode_string_nmap =~ $rex ]] + ret=${BASH_REMATCH[0]:-NORMAL} + fi ;; + (*v) ret="${ret}${ret:+ }$bleopt_keymap_vi_mode_name_visual" ;; + (*V) ret="${ret}${ret:+ }$bleopt_keymap_vi_mode_name_visual $bleopt_keymap_vi_mode_name_line" ;; + (*) ret="${ret}${ret:+ }$bleopt_keymap_vi_mode_name_visual $bleopt_keymap_vi_mode_name_block" ;; + (*s) ret="${ret}${ret:+ }$bleopt_keymap_vi_mode_name_select" ;; + (*S) ret="${ret}${ret:+ }$bleopt_keymap_vi_mode_name_select $bleopt_keymap_vi_mode_name_line" ;; + (*) ret="${ret}${ret:+ }$bleopt_keymap_vi_mode_name_select $bleopt_keymap_vi_mode_name_block" ;; + (*c) ret="${ret}${ret:+ }COMMAND" ;; + esac + [[ $ret ]] || + ble/prompt/backslash:lib/vim-airline/mode/.resolve '?' ;; + (*) ret='?__' ;; + esac + fi +} +function ble/prompt/backslash:lib/vim-airline/mode { + local ret + if [[ $_ble_lib_vim_airline_keymap == vi_omap ]]; then + ble/prompt/backslash:lib/vim-airline/mode/.resolve o + else + ble/prompt/backslash:lib/vim-airline/mode/.resolve "$_ble_lib_vim_airline_rawmode" + fi + [[ $ret ]] && ble/prompt/print "$ret" +} +function ble/prompt/backslash:lib/vim-airline/gitstatus { + local "${_ble_contrib_prompt_git_vars[@]/%/=}" # WA #D1570 checked + if ble/contrib/prompt-git/initialize; then + local hash branch + ble/contrib/prompt-git/get-head-information + if [[ $branch ]]; then + ble/prompt/print "$bleopt_vim_airline_symbol_branch$branch" + elif [[ $hash ]]; then + ble/prompt/print "$bleopt_vim_airline_symbol_branch${hash::7}" + else + ble/prompt/print '$bleopt_vim_airline_symbol_branch???????' + fi + ble/contrib/prompt-git/is-dirty && + ble/prompt/print "$bleopt_vim_airline_symbol_dirty" + fi +} +function ble/prompt/unit:{vim-airline-section}/update { + local section=$1 + local ref_ps=bleopt_vim_airline_section_$section + local face=vim_airline_${section}_$_ble_lib_vim_airline_mode + local prefix=_ble_lib_vim_airline_section_$section + ble/prompt/unit/add-hash '$_ble_lib_vim_airline_mode_data' + ble/prompt/unit/add-hash "\$$ref_ps" + local trace_opts=confine:relative:noscrc:face0="$face":ansi:measure-bbox:measure-gbox + local prompt_rows=1 prompt_cols=$cols # Note: cols は \q{lib/vim-airline} で設定される + ble/prompt/unit:{section}/update "$prefix" "${!ref_ps}" "$trace_opts" +} +function ble/prompt/unit:_ble_lib_vim_airline_section_a/update { ble/prompt/unit:{vim-airline-section}/update a; } +function ble/prompt/unit:_ble_lib_vim_airline_section_b/update { ble/prompt/unit:{vim-airline-section}/update b; } +function ble/prompt/unit:_ble_lib_vim_airline_section_c/update { ble/prompt/unit:{vim-airline-section}/update c; } +function ble/prompt/unit:_ble_lib_vim_airline_section_x/update { ble/prompt/unit:{vim-airline-section}/update x; } +function ble/prompt/unit:_ble_lib_vim_airline_section_y/update { ble/prompt/unit:{vim-airline-section}/update y; } +function ble/prompt/unit:_ble_lib_vim_airline_section_z/update { ble/prompt/unit:{vim-airline-section}/update z; } +function ble/lib/vim-airline/.print-section { + local section=$1 + local ret g0 bg + ble/color/face2g "vim_airline_${section}_$_ble_lib_vim_airline_mode"; g0=$ret + ble/color/g#compute-bg "$g0"; bg=$ret + if [[ $prev_g0 ]]; then + local sep=bleopt_vim_airline gsep + if [[ $prev_section == [ab] ]]; then + sep=${sep}_left + else + sep=${sep}_right + fi + if [[ $prev_bg == $bg ]]; then + sep=${sep}_alt_sep + if [[ $prev_section == [ab] ]]; then + gsep=$prev_g0 + else + gsep=$g0 + fi + ((gsep&=~_ble_color_gflags_DecorationMask|_ble_color_gflags_Revert|_ble_color_gflags_Invisible)) + else + sep=${sep}_sep gsep=0 + if [[ $sep == *_right_sep ]]; then + ble/color/g#setfg gsep "$bg" + ble/color/g#setbg gsep "$prev_bg" + else + ble/color/g#setfg gsep "$prev_bg" + ble/color/g#setbg gsep "$bg" + fi + fi + ble/color/g2sgr-ansi "$gsep" + ble/prompt/print "$ret${!sep}" + fi + local ref_show=_ble_lib_vim_airline_section_${section}_show + if [[ ${!ref_show} ]]; then + ble/prompt/unit:{section}/get "_ble_lib_vim_airline_section_$section"; local esc=$ret + ble/color/g2sgr-ansi "$g0" + ble/prompt/print "$ret $esc$ret " + fi + [[ $section == c ]] && ble/prompt/print $'\r' + prev_g0=$g0 + prev_bg=$bg + prev_section=$section +} +function ble/prompt/backslash:lib/vim-airline { + local "${_ble_contrib_prompt_git_vars[@]/%/=}" # WA #D1570 checked + ble/prompt/unit#update _ble_lib_vim_airline_mode + local ret bg=0 + ble/color/face2g "vim_airline_c_$_ble_lib_vim_airline_mode" + ble/color/g#getbg "$ret" + ble/color/g#setbg bg "$ret" + ble/color/setface prompt_status_line "g:$bg" + local cols=$COLUMNS; ((_ble_term_xenl||cols--)) + local unit rest_cols=$((cols-4)) + for unit in _ble_lib_vim_airline_section_{a,c,z,b,y,x}; do + ble/prompt/unit#update "$unit" + local gx1=${unit}_gbox[0]; gx1=${!gx1} + local x2=${unit}_bbox[2]; x2=${!x2} + local show= + [[ $gx1 ]] && ((x2+2<=rest_cols)) && ((show=1,rest_cols-=x2+2)) + builtin eval -- "${unit}_show=\$show" + done + local section prev_section= prev_g0= prev_bg= + for section in a b c x y z; do + ble/lib/vim-airline/.print-section "$section" + done +} +bleopt -I vim_airline_@ +bleopt keymap_vi_mode_show= +bleopt prompt_status_line='\q{lib/vim-airline}' +bleopt prompt_status_align=$'justify=\r' -- cgit v1.2.3