/
huginn
/
termux-dotfiles
Обзор
Документация
Войти
/
huginn
/
termux-dotfiles
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
bash/bash_bind
112 строк
3 KB
huginn
Added bash config files.
30 июн 2026, 11:19
30 июн 2026, 11:19
e6d639e
Код
Авторство
О чём код?
# path: $XDG_CONFIG_HOME/bash/bash_bind # все функции должны начинаться с _bind # СЛУЖЕБНЫЕ ФУНКЦИИ {{{1 # _bindno_get_cur_seq_tpl {{{2 # _bindno_get_cur_seq_tpl assoc_varname 'template' # устанавливает ассоциативный массив, где ключ "string" — последовательность символов, "start" — индекс её начала, "end" — индекс её окончания, "head" — строка до последовательности, "tail" — строка после последовательности # 1-й аргумент: имя переменной ассоциативного массива # 2-й аргумент: последовательность символов, указанная как шаблон оболочки (набор) _bindno_get_cur_seq_tpl() { local -n _cur_seq="$1" local _template="$2" local _str _head _tail : "${READLINE_LINE::$READLINE_POINT}" _head="${_%%+($_template)}" _str="${READLINE_LINE#"$_head"}" _tail="${_str##+($_template)}" _cur_seq["string"]="${_str%%"$_tail"}" _cur_seq["end"]=$(( _cur_seq["start"] + ${#_cur_seq["string"]} )) _cur_seq["head"]="$_head" _cur_seq["start"]="${#_head}" _cur_seq["tail"]="$_tail" } # }}}2 # }}}1 # НОРМАЛЬНЫЙ РЕЖИМ {{{1 # _bind_vim_norm_K {{{2 # справка по команде под курсором # K, нормальный режим _bind_vim_norm_K() { local cmd cmd_type local -A cur_seq _bindno_get_cur_seq_tpl "cur_seq" '[-_.:[:alnum:]]' (( ${#cur_seq["string"]} )) || return cmd="${cur_seq["string"]}" cmd_type="$(type -t "$cmd")" if [[ $cmd_type == "alias" ]]; then cmd="${BASH_ALIASES["$cmd"]%% *}" cmd_type="$(type -t "$cmd")" fi case $cmd_type in "file"|"alias") man "$cmd" 2>/dev/null || "$cmd" --help 2>/dev/null || return ;; "builtin"|"keyword") help "$cmd" ;; "function") declare -pf "$cmd" ;; *) ;; esac } bind -m vi-command -x '"K": _bind_vim_norm_K' # _bind_copy_cmdline {{{2 # копирует всю текущую строку в системный буфер # <A-S-y>, нормальный режим _bind_copy_cmdline() { local str enc_str str="$READLINE_LINE" enc_str="$(printf '%s' "$1" | base64)" printf '\e]52;c;%s\a' "$enc_str" } bind -m vi-command -x '"\eY": _bind_copy_cmdline' # _bind_show_dirs {{{2 # показ стека каталогов # <F2>, оба режима _bind_show_dirs() { dirs -v } bind -x '"\eOQ": _bind_show_dirs' # }}}2 # }}}1 # РЕЖИМ ВСТАВКИ {{{1 # _bind_bashrc_reload {{{2 # перечитывание конфигурации bash # <S-F12>, режим вставки _bind_bashrc_reload() { source "$XDG_CONFIG_HOME/bash/bashrc" && printf 'config reloaded!\n' } bind -m vi-insert -x '"\e[24;2~": _bind_bashrc_reload' # _bind_cap_word {{{2 # от курсора до начала слова в верхний регистр # <C-l>, режим вставки _bind_cap_word() { local head_str change_str new_head_str head_str="${READLINE_LINE::$READLINE_POINT}" : "${head_str%%+([A-Za-z_])}" change_str="${head_str/#"$_"}" new_head_str="${head_str/%"$change_str"/"${change_str@U}"}" READLINE_LINE="${READLINE_LINE/#"$head_str"/"$new_head_str"}" } bind -m vi-insert -x '"\C-l": _bind_cap_word' # }}}2 # }}}1 # vim: ft=bash fdm=marker