sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

delay-mc-STOP.patch (2240B)


      1 diff --git a/lib/keymap.vi.sh b/lib/keymap.vi.sh
      2 index 73ff1e51..692bc637 100644
      3 --- a/lib/keymap.vi.sh
      4 +++ b/lib/keymap.vi.sh
      5 @@ -506,6 +506,11 @@ function ble/keymap:vi/update-mode-indicator {
      6      str=$str${str:+' '}$'\e[1;31mREC\e[m'
      7    fi
      8  
      9 +  if [[ $_ble_edit_integration_mc_precmd_hook && $keymap == vi_imap ]]; then
     10 +    ble/edit/info/clear
     11 +    return
     12 +  fi
     13 +
     14    ble/edit/info/default ansi "$str" # 6ms
     15  }
     16  blehook internal_PRECMD!=ble/keymap:vi/update-mode-indicator
     17 diff --git a/src/edit.sh b/src/edit.sh
     18 index b9d53219..f6e780b6 100644
     19 --- a/src/edit.sh
     20 +++ b/src/edit.sh
     21 @@ -3477,6 +3477,16 @@ function ble/textarea#render {
     22        "${_ble_textarea_cur[@]}"
     23        "$_ble_textarea_gendx" "$_ble_textarea_gendy")
     24    fi
     25 +
     26 +  # Note: mc-4.8.29 以降は PROMPT_COMMAND で kill -STOP を呼び出して、その後
     27 +  # bash がプロンプトを表示してから停止する瞬間を見てプロンプトを抽出している。
     28 +  # 一方で、ble.sh は PROMPT_COMMAND で kill -STOP を実行された瞬間に停止してし
     29 +  # まう。なので、PROMPT_COMMAND に仕掛けられた kill -STOP を削除して代わりに描
     30 +  # 画した後で自前で kill -STOP $$ を実行する。
     31 +  if [[ $_ble_edit_integration_mc_precmd_event ]]; then
     32 +    _ble_edit_integration_mc_precmd_event=
     33 +    builtin eval -- "$_ble_edit_integration_mc_precmd_hook"
     34 +  fi
     35  }
     36  function ble/textarea#redraw {
     37    ble/textarea#invalidate
     38 @@ -7089,6 +7099,8 @@ function ble-edit/hist_expanded.update {
     39    fi
     40  }
     41  
     42 +_ble_edit_integration_mc_precmd_hook=
     43 +_ble_edit_integration_mc_precmd_event=
     44  function ble/widget/accept-line/.is-mc-init {
     45    [[ $MC_SID == $$ ]] || return 1
     46  
     47 @@ -7106,6 +7118,11 @@ function ble/widget/accept-line/.is-mc-init {
     48    # PS1='\u@\h:\w\$ '
     49    # -------------------------------------
     50    if ((_ble_edit_LINENO<=5)) && [[ $_ble_edit_str == *'PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND'* ]]; then
     51 +    if ble/string#match "$_ble_edit_str" 'pwd>&[0-9]+;kill -STOP \$\$'; then
     52 +      _ble_edit_integration_mc_precmd_hook=$BASH_REMATCH
     53 +      local str=${_ble_edit_str//"$BASH_REMATCH"/'_ble_edit_integration_mc_precmd_event=1'}
     54 +      ble-edit/content/reset-and-check-dirty "$str"
     55 +    fi
     56      return 0
     57    fi
     58