Skip to content

Commit

Permalink
decode: support "ble-bind -m KEYMAP --cursor DECSCUSR"
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Apr 26, 2021
1 parent 0506df2 commit 79d671d
Show file tree
Hide file tree
Showing 13 changed files with 475 additions and 125 deletions.
2 changes: 1 addition & 1 deletion ble.pp
Expand Up @@ -873,7 +873,7 @@ function ble/base/unload {
ble/util/buffer.flush >&2
ble/fd#finalize
ble/util/import/finalize
ble-decode/keymap/unload
ble/decode/keymap#unload
ble-edit/bind/clear-keymap-definition-loader
ble/bin/rm -rf "$_ble_base_run/$$".* 2>/dev/null
blehook/invoke unload
Expand Down
10 changes: 5 additions & 5 deletions blerc
Expand Up @@ -650,11 +650,11 @@ function blerc/vim-load-hook {

## Cursor settings

# bleopt keymap_vi_nmap_cursor=2
# bleopt keymap_vi_imap_cursor=5
# bleopt keymap_vi_omap_cursor=4
# bleopt keymap_vi_xmap_cursor=2
# bleopt keymap_vi_cmap_cursor=0
# ble-bind -m vi_nmap --cursor 2
# ble-bind -m vi_imap --cursor 5
# ble-bind -m vi_omap --cursor 4
# ble-bind -m vi_xmap --cursor 2
# ble-bind -m vi_cmap --cursor 0

## DECSCUSR setting
##
Expand Down
2 changes: 1 addition & 1 deletion contrib
Submodule contrib updated 2 files
+1 −1 README-ja.md
+1 −1 README.md
7 changes: 4 additions & 3 deletions keymap/emacs.sh
Expand Up @@ -9,6 +9,7 @@ function ble-edit/bind/load-editing-mode:emacs { :; }
# 2019-03-21 keymap cache should be updated for recent changes
# 2020-04-29 force update (rename ble-decode/keymap/.register)
# 2021-01-25 force update (change mapping of C-w and M-w)
# 2021-04-26 force update (rename ble/decode/keymap#.register)

#------------------------------------------------------------------------------

Expand Down Expand Up @@ -213,9 +214,9 @@ function ble-decode/keymap:emacs/initialize {
ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.emacs..."

{
ble-decode/keymap/load isearch dump
ble-decode/keymap/load nsearch dump
ble-decode/keymap/load emacs dump
ble/decode/keymap#load isearch dump
ble/decode/keymap#load nsearch dump
ble/decode/keymap#load emacs dump
} 3>| "$fname_keymap_cache"

ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.emacs... done"
Expand Down
81 changes: 48 additions & 33 deletions keymap/vi.sh
Expand Up @@ -7,6 +7,7 @@ function ble-edit/bind/load-editing-mode:vi { :; }

# 2020-04-29 force update (rename ble-decode/keymap/.register)
# 2021-01-25 force update (change mapping of C-w and M-w)
# 2021-04-26 force update (rename ble/decode/keymap#.register)

source "$_ble_base/keymap/vi_digraph.sh"

Expand Down Expand Up @@ -333,6 +334,26 @@ bleopt/declare -v keymap_vi_omap_cursor ''
bleopt/declare -v keymap_vi_xmap_cursor ''
bleopt/declare -v keymap_vi_smap_cursor ''
bleopt/declare -v keymap_vi_cmap_cursor ''
function ble/keymap:vi/.process-cursor-options {
local keymap=${FUNCNAME[1]#bleopt/check:keymap_}; keymap=${keymap%_cursor}
ble-bind -m "$keymap" --cursor "$value"
local locate=$'\e[32m'$bleopt_source:$bleopt_lineno$'\e[m'
ble/util/print-lines \
"bleopt ($locate): The option 'keymap_${keymap}_cursor' has been removed." \
" Please use 'ble-bind -m $keymap --cursor $value' instead." >&2
}
function bleopt/check:keymap_vi_imap_cursor { ble/keymap:vi/.process-cursor-options; }
function bleopt/check:keymap_vi_nmap_cursor { ble/keymap:vi/.process-cursor-options; }
function bleopt/check:keymap_vi_omap_cursor { ble/keymap:vi/.process-cursor-options; }
function bleopt/check:keymap_vi_xmap_cursor { ble/keymap:vi/.process-cursor-options; }
function bleopt/check:keymap_vi_smap_cursor { ble/keymap:vi/.process-cursor-options; }
function bleopt/check:keymap_vi_cmap_cursor { ble/keymap:vi/.process-cursor-options; }
function bleopt/obsolete:keymap_vi_imap_cursor { :; }
function bleopt/obsolete:keymap_vi_nmap_cursor { :; }
function bleopt/obsolete:keymap_vi_omap_cursor { :; }
function bleopt/obsolete:keymap_vi_xmap_cursor { :; }
function bleopt/obsolete:keymap_vi_smap_cursor { :; }
function bleopt/obsolete:keymap_vi_cmap_cursor { :; }

bleopt/declare -v keymap_vi_mode_show 1
function bleopt/check:keymap_vi_mode_show {
Expand Down Expand Up @@ -393,23 +414,17 @@ function ble/keymap:vi/update-mode-name {
local kmap=$_ble_decode_keymap cursor=
if [[ $kmap == vi_imap ]]; then
ble/util/buffer "$bleopt_term_vi_imap"
ble/term/cursor-state/set-internal "$bleopt_keymap_vi_imap_cursor"
elif [[ $kmap == vi_nmap ]]; then
ble/util/buffer "$bleopt_term_vi_nmap"
ble/term/cursor-state/set-internal "$bleopt_keymap_vi_nmap_cursor"
elif [[ $kmap == vi_xmap ]]; then
ble/util/buffer "$bleopt_term_vi_xmap"
ble/term/cursor-state/set-internal "$bleopt_keymap_vi_xmap_cursor"
elif [[ $kmap == vi_smap ]]; then
ble/util/buffer "$bleopt_term_vi_smap"
ble/term/cursor-state/set-internal "$bleopt_keymap_vi_smap_cursor"
elif [[ $kmap == vi_omap ]]; then
ble/util/buffer "$bleopt_term_vi_omap"
ble/term/cursor-state/set-internal "$bleopt_keymap_vi_omap_cursor"
elif [[ $kmap == vi_cmap ]]; then
ble/edit/info/default text ''
ble/util/buffer "$bleopt_term_vi_cmap"
ble/term/cursor-state/set-internal "$bleopt_keymap_vi_cmap_cursor"
return 0
fi

Expand Down Expand Up @@ -487,7 +502,7 @@ function ble/widget/vi_imap/normal-mode.impl {
_ble_keymap_vi_single_command=
_ble_keymap_vi_single_command_overwrite=
ble-edit/content/bolp || ((_ble_edit_ind--))
ble-decode/keymap/push vi_nmap
ble/decode/keymap/push vi_nmap
}
function ble/widget/vi_imap/normal-mode {
ble-edit/content/clear-arg
Expand Down Expand Up @@ -540,7 +555,7 @@ function ble/keymap:vi/adjust-command-mode {

local kmap_popped=
if [[ $_ble_decode_keymap == vi_omap ]]; then
ble-decode/keymap/pop
ble/decode/keymap/pop
kmap_popped=1
fi

Expand Down Expand Up @@ -580,8 +595,8 @@ function ble/widget/vi-command/bell {
## @param[in] overwrite
## @param[in] opts
function ble/widget/vi_nmap/.insert-mode {
[[ $_ble_decode_keymap == vi_[xs]map ]] && ble-decode/keymap/pop
[[ $_ble_decode_keymap == vi_omap ]] && ble-decode/keymap/pop
[[ $_ble_decode_keymap == vi_[xs]map ]] && ble/decode/keymap/pop
[[ $_ble_decode_keymap == vi_omap ]] && ble/decode/keymap/pop
local arg=$1 overwrite=$2
ble/keymap:vi/imap-repeat/reset "$arg"
_ble_edit_mark_active=
Expand All @@ -591,7 +606,7 @@ function ble/widget/vi_nmap/.insert-mode {
_ble_keymap_vi_single_command=
_ble_keymap_vi_single_command_overwrite=
_ble_keymap_vi_search_matched=
ble-decode/keymap/pop
ble/decode/keymap/pop
ble/keymap:vi/update-mode-name

ble/keymap:vi/mark/start-edit-area
Expand Down Expand Up @@ -1132,7 +1147,7 @@ function ble/widget/vi-command/operator {
ble/keymap:vi/adjust-command-mode
return "$ext"
elif [[ $_ble_decode_keymap == vi_nmap ]]; then
ble-decode/keymap/push vi_omap
ble/decode/keymap/push vi_omap
_ble_keymap_vi_oparg=$_ble_edit_arg
_ble_keymap_vi_opfunc=$opname
_ble_edit_arg=
Expand Down Expand Up @@ -2270,7 +2285,7 @@ function ble/keymap:vi/async-read-char.hook {
local IFS=$_ble_term_IFS
local command="${*:1:$#-1}" key="${*:$#}"
if ((key==(_ble_decode_Ctrl|0x6B))); then # C-k
ble-decode/keymap/push vi_digraph
ble/decode/keymap/push vi_digraph
_ble_keymap_vi_digraph__hook="$command"
else
builtin eval -- "$command $key"
Expand Down Expand Up @@ -2724,11 +2739,11 @@ function ble/keymap:vi/repeat/invoke {
ble/widget/vi-command/bell
return 1
elif [[ $KEYMAP == vi_omap ]]; then
ble-decode/keymap/push vi_omap
ble/decode/keymap/push vi_omap
elif [[ $KEYMAP == vi_[xs]map ]]; then
local _ble_keymap_vi_xmap_prev_edit=${_ble_keymap_vi_repeat[6]}
ble/widget/vi_xmap/.restore-visual-state
ble-decode/keymap/push "$KEYMAP"
ble/decode/keymap/push "$KEYMAP"
# Note: vim では . によって領域の大きさは更新されない。
# 従ってここでは敢えて _ble_keymap_vi_xmap_prev_edit を unset しない
fi
Expand Down Expand Up @@ -6682,7 +6697,7 @@ function ble/widget/vi-command/visual-mode.impl {

((ARG)) && ble/widget/vi_xmap/.restore-visual-state "$ARG"

ble-decode/keymap/push "$keymap"
ble/decode/keymap/push "$keymap"
ble/keymap:vi/update-mode-name
return 0
}
Expand Down Expand Up @@ -6713,7 +6728,7 @@ function ble/widget/vi_xmap/exit {
if [[ $_ble_decode_keymap == vi_[xs]map ]]; then
ble/keymap:vi/xmap/set-previous-visual-area
_ble_edit_mark_active=
ble-decode/keymap/pop
ble/decode/keymap/pop
ble/keymap:vi/update-mode-name
ble/keymap:vi/adjust-command-mode
fi
Expand Down Expand Up @@ -6759,24 +6774,24 @@ function ble/widget/vi_xmap/switch-to-blockwise {
# xmap <C-g>
function ble/widget/vi_xmap/switch-to-select {
if [[ $_ble_decode_keymap == vi_xmap ]]; then
ble-decode/keymap/pop
ble-decode/keymap/push vi_smap
ble/decode/keymap/pop
ble/decode/keymap/push vi_smap
ble/keymap:vi/update-mode-name
fi
}
# smap <C-g>
function ble/widget/vi_xmap/switch-to-visual {
if [[ $_ble_decode_keymap == vi_smap ]]; then
ble-decode/keymap/pop
ble-decode/keymap/push vi_xmap
ble/decode/keymap/pop
ble/decode/keymap/push vi_xmap
ble/keymap:vi/update-mode-name
fi
}
# smap <C-v>
function ble/widget/vi_xmap/switch-to-visual-blockwise {
if [[ $_ble_decode_keymap == vi_smap ]]; then
ble-decode/keymap/pop
ble-decode/keymap/push vi_xmap
ble/decode/keymap/pop
ble/decode/keymap/push vi_xmap
fi
if [[ ${_ble_edit_mark_active%+} != vi_block ]]; then
ble/widget/vi_xmap/switch-to-blockwise
Expand Down Expand Up @@ -7727,7 +7742,7 @@ function ble/widget/vi_imap/insert-digraph.hook {
}

function ble/widget/vi_imap/insert-digraph {
ble-decode/keymap/push vi_digraph
ble/decode/keymap/push vi_digraph
_ble_keymap_vi_digraph__hook=ble/widget/vi_imap/insert-digraph.hook
return 0
}
Expand Down Expand Up @@ -7953,7 +7968,7 @@ function ble/keymap:vi/async-commandline-mode {
_ble_keymap_vi_cmap_history_prefix=$_ble_history_prefix

# 初期化
ble-decode/keymap/push vi_cmap
ble/decode/keymap/push vi_cmap
ble/keymap:vi/update-mode-name

# textarea
Expand Down Expand Up @@ -8004,7 +8019,7 @@ function ble/widget/vi_cmap/accept {
[[ $_ble_edit_overwrite_mode ]] && ble/util/buffer "$_ble_term_civis"
_ble_history_prefix=$_ble_keymap_vi_cmap_history_prefix

ble-decode/keymap/pop
ble/decode/keymap/pop
ble/keymap:vi/update-mode-name
if [[ $hook ]]; then
builtin eval -- "$hook \"\$result\""
Expand Down Expand Up @@ -8087,13 +8102,13 @@ function ble-decode/keymap:vi/initialize {
ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.vi..."

{
ble-decode/keymap/load isearch dump
ble-decode/keymap/load nsearch dump
ble-decode/keymap/load vi_imap dump
ble-decode/keymap/load vi_nmap dump
ble-decode/keymap/load vi_omap dump
ble-decode/keymap/load vi_xmap dump
ble-decode/keymap/load vi_cmap dump
ble/decode/keymap#load isearch dump
ble/decode/keymap#load nsearch dump
ble/decode/keymap#load vi_imap dump
ble/decode/keymap#load vi_nmap dump
ble/decode/keymap#load vi_omap dump
ble/decode/keymap#load vi_xmap dump
ble/decode/keymap#load vi_cmap dump
} 3>| "$fname_keymap_cache"

ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.vi... done"
Expand Down
5 changes: 3 additions & 2 deletions keymap/vi_digraph.sh
@@ -1,14 +1,15 @@
#!/bin/bash

# 2020-04-29 force update (rename ble-decode/keymap/.register)
# 2021-04-26 force update (rename ble/decode/keymap#.register)

_ble_keymap_vi_digraph__hook=

function ble/widget/vi_digraph/.proc {
local code=$1
local hook=${_ble_keymap_vi_digraph__hook:-ble-decode-key}
_ble_keymap_vi_digraph__hook=
ble-decode/keymap/pop
ble/decode/keymap/pop
builtin eval -- "$hook $code"
}

Expand Down Expand Up @@ -57,7 +58,7 @@ function ble-decode/keymap:vi_digraph/initialize {
ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.vi_digraph..."

: >| "$fname_keymap_cache"
ble-decode/keymap/load vi_digraph dump 3>> "$fname_keymap_cache"
ble/decode/keymap#load vi_digraph dump 3>> "$fname_keymap_cache"

ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.vi_digraph... done"
}
Expand Down
22 changes: 11 additions & 11 deletions lib/core-complete.sh
Expand Up @@ -794,12 +794,12 @@ function ble/widget/menu/end-of-page {
}

function ble/widget/menu/cancel {
ble-decode/keymap/pop
ble/decode/keymap/pop
ble/complete/menu#clear
"$_ble_complete_menu_class"/oncancel
}
function ble/widget/menu/accept {
ble-decode/keymap/pop
ble/decode/keymap/pop
ble/complete/menu#clear
local nsel=$_ble_complete_menu_selected
local hook=$_ble_complete_menu_accept_hook
Expand Down Expand Up @@ -860,7 +860,7 @@ function ble/complete/menu#start {
ble/complete/menu#construct sync || return "$?"
ble/complete/menu#show
ble/complete/menu#select 0
ble-decode/keymap/push menu
ble/decode/keymap/push menu
return 147
}

Expand Down Expand Up @@ -5200,13 +5200,13 @@ function ble/complete/menu-complete/enter {
fi

_ble_edit_mark_active=insert
ble-decode/keymap/push menu_complete
ble/decode/keymap/push menu_complete
return 0
}

function ble/widget/menu_complete/exit {
local opts=$1
ble-decode/keymap/pop
ble/decode/keymap/pop

if ((_ble_complete_menu_selected>=0)); then
# 置換情報を再構成
Expand Down Expand Up @@ -5255,7 +5255,7 @@ function ble/widget/menu_complete/exit {
_ble_complete_menu_original=
}
function ble/widget/menu_complete/cancel {
ble-decode/keymap/pop
ble/decode/keymap/pop
ble/complete/menu#select -1
_ble_edit_mark_active=
_ble_complete_menu_original=
Expand Down Expand Up @@ -5408,7 +5408,7 @@ function ble/complete/auto-complete/.enter-auto-complete-mode {
_ble_complete_ac_suffix=$suffix

_ble_edit_mark_active=auto_complete
ble-decode/keymap/push auto_complete
ble/decode/keymap/push auto_complete
ble-decode-key "$_ble_complete_KCODE_ENTER" # dummy key input to record keyboard macros
}
## @fn ble/complete/auto-complete/.insert ins
Expand Down Expand Up @@ -5597,15 +5597,15 @@ function ble/widget/auto-complete-enter {
ble/complete/auto-complete.impl sync
}
function ble/widget/auto_complete/cancel {
ble-decode/keymap/pop
ble/decode/keymap/pop
ble-edit/content/replace "$_ble_edit_ind" "$_ble_edit_mark" ''
_ble_edit_mark=$_ble_edit_ind
_ble_edit_mark_active=
_ble_complete_ac_insert=
_ble_complete_ac_suffix=
}
function ble/widget/auto_complete/insert {
ble-decode/keymap/pop
ble/decode/keymap/pop
ble-edit/content/replace "$_ble_edit_ind" "$_ble_edit_mark" ''
_ble_edit_mark=$_ble_edit_ind

Expand Down Expand Up @@ -6244,7 +6244,7 @@ function ble/complete/dabbrev/next.fib {
}
function ble/widget/dabbrev-expand {
ble/complete/dabbrev/initialize-variables
ble-decode/keymap/push dabbrev
ble/decode/keymap/push dabbrev
ble/util/fiberchain#initialize ble/complete/dabbrev
ble/util/fiberchain#push next
ble/util/fiberchain#resume
Expand Down Expand Up @@ -6288,7 +6288,7 @@ function ble/widget/dabbrev/cancel {
fi
}
function ble/widget/dabbrev/exit {
ble-decode/keymap/pop
ble/decode/keymap/pop
_ble_edit_mark_active=
ble/complete/dabbrev/erase-status
}
Expand Down

0 comments on commit 79d671d

Please sign in to comment.