annotate runtime/indent/context.vim @ 32876:522f16e3e058 v9.0.1747

patch 9.0.1747: screenpos() may cause unnecessary redraw Commit: https://github.com/vim/vim/commit/6235a109c48ff2559eca3b16578c429ffb61eadc Author: zeertzjq <zeertzjq@outlook.com> Date: Sat Aug 19 14:12:42 2023 +0200 patch 9.0.1747: screenpos() may cause unnecessary redraw Problem: screenpos() may cause unnecessary redraw. Solution: Don't unnecessarily reset VALID_WROW flag. VALID_WROW flag is only used by two functions: validate_cursor() and cursor_valid(), and cursor_valid() is only used once in ex_sleep(). When adjust_plines_for_skipcol() was first added in patch 9.0.0640, it was called in two functions: comp_botline() and curs_rows(). - comp_botline() is called in two places: - onepage(), which resets VALID_WROW flag immediately afterwards. - validate_botline_win(), where resetting a VALID_ flag is strange. - curs_rows() is called in two places: - curs_columns(), which sets VALID_WROW flag afterwards. - validate_cline_row(), which is only used by GUI mouse focus. Therefore resetting VALID_WROW there doesn't seem to do anything useful. Also, a w_skipcol check (which resets VALID_WROW flag) was added to check_cursor_moved() in patch 9.0.0734, which seems to make more sense than resetting that flag in the middle of a computation. While at it make adjust_plines_for_skipcol() and textpos2screenpos() a bit less confusing: - Make adjust_plines_for_skipcol() return "off" instead of "n - off". - Use 0-based "row" in textpos2screenpos() until W_WINROW is added. closes: #12832 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author Christian Brabandt <cb@256bit.org>
date Sat, 19 Aug 2023 14:30:02 +0200
parents f00c56ee8118
children d81556766132
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
1 vim9script
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
2
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
3 # Language: ConTeXt typesetting engine
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
4 # Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
5 # Former Maintainers: Nikolai Weibull <now@bitwi.se>
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
6 # Latest Revision: 2022 Aug 12
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 if exists("b:did_indent")
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9 finish
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 endif
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
12 # Load MetaPost indentation script (this will also set b:did_indent)
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13 runtime! indent/mp.vim
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
15 setlocal indentexpr=ConTeXtIndent()
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
16
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
17 b:undo_indent = "setl indentexpr<"
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
19 def PrevNotComment(l: number): number
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
20 var prevlnum = prevnonblank(l)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
21
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
22 while prevlnum > 0 && getline(prevlnum) =~# '^\s*%'
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
23 prevlnum = prevnonblank(prevlnum - 1)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
24 endwhile
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
26 return prevlnum
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
27 enddef
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
28
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
29 def FindPair(pstart: string, pmid: string, pend: string): number
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
30 cursor(v:lnum, 1)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
31 return indent(searchpair(pstart, pmid, pend, 'bWn',
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
32 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
33 enddef
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
34
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
35 def ConTeXtIndent(): number
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
36 # Use MetaPost rules inside MetaPost graphic environments
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37 if len(synstack(v:lnum, 1)) > 0 &&
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
38 synIDattr(synstack(v:lnum, 1)[0], "name") ==# 'contextMPGraphic'
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
39 return g:MetaPostIndent()
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 endif
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
41
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
42 const prevlnum = PrevNotComment(v:lnum - 1)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
43 const prevind = indent(prevlnum)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
44 const prevline = getline(prevlnum)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
45 const currline = getline(v:lnum)
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
46
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
47 # If the current line starts with ], match indentation.
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
48 if currline =~# '^\s*\]'
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
49 return FindPair('\[', '', '\]')
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
50 endif
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
51
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
52 # If the current line starts with }, match indentation.
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
53 if currline =~# '^\s*}'
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
54 return FindPair('{', '', '}')
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
55 endif
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
56
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
57 # If the previous line ends with [ or { (possibly followed by a comment) then indent.
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
58 if prevline =~# '[{[]\s*\%(%.*\)\=$'
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
59 return prevind + shiftwidth()
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
60 endif
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
61
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
62 return -1
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
63 enddef
10301
07d2b5a3b7cc commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
64
29885
f00c56ee8118 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10301
diff changeset
65 # vim: sw=2 fdm=marker