view src/create_nvcmdidxs.vim @ 34850:a93a9b349a5e v9.1.0294

patch 9.1.0294: Text height function does not respect it's argument Commit: https://github.com/vim/vim/commit/08b0f632c125514fe0ea188c36ac048d7d7929d4 Author: Luuk van Baal <luukvbaal@gmail.com> Date: Tue Apr 9 22:43:49 2024 +0200 patch 9.1.0294: Text height function does not respect it's argument Problem: plines_m_win() does not take into account it's "limit_winheight" argument for filler lines below the last line of the buffer. (after v9.1.0280) Solution: Check window height when "limit_winheight" is TRUE. (Luuk van Baal) closes: #14449 Signed-off-by: Luuk van Baal <luukvbaal@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 09 Apr 2024 23:00:04 +0200
parents ee1019e59bef
children
line wrap: on
line source

" This script generates the table nv_cmd_idx[] which contains the index in
" nv_cmds[] table (normal.c) for each of the command character supported in
" normal/visual mode.
" This is used to speed up the command lookup in nv_cmds[].
"
" Script should be run using "make nvcmdidxs", every time the nv_cmds[] table
" in src/nv_cmds.h changes.
"
" This is written in legacy Vim script so that it can be run by a slightly
" older Vim version.

" Generate the table of normal/visual mode command characters and their
" corresponding index.
let cmd = 'create_nvcmdidxs'
if has('unix')
  let cmd = './' .. cmd
endif
let nv_cmdtbl = systemlist(cmd)->map({i, ch -> {'idx': i, 'cmdchar': ch}})

" sort the table by the command character
call sort(nv_cmdtbl, {a, b -> a.cmdchar - b.cmdchar})

" Compute the highest index upto which the command character can be directly
" used as an index.
let nv_max_linear = 0
for i in range(nv_cmdtbl->len())
  if i != nv_cmdtbl[i].cmdchar
    let nv_max_linear = i - 1
    break
  endif
endfor

" Generate a header file with the table
let output =<< trim END
  /*
   * Automatically generated code by the create_nvcmdidxs.vim script.
   *
   * Table giving the index in nv_cmds[] to lookup based on
   * the command character.
   */

  // nv_cmd_idx[<normal mode command character>] => nv_cmds[] index
  static const unsigned short nv_cmd_idx[] =
  {
END

" Add each command character in comment and the corresponding index
let output += nv_cmdtbl->map({_, v ->
      \ printf('  /* %5d */ %3d,', v.cmdchar, v.idx)})

let output += ['};', '',
      \ '// The highest index for which',
      \ '// nv_cmds[idx].cmd_char == nv_cmd_idx[nv_cmds[idx].cmd_char]']

let output += ['static const int nv_max_linear = ' .. nv_max_linear .. ';']

call writefile(output, "nv_cmdidxs.h")
quit

" vim: shiftwidth=2 sts=2 expandtab