Mercurial > vim
annotate runtime/autoload/context.vim @ 34548:db67c09ccd53 v9.1.0175
patch 9.1.0175: wrong window positions with 'winfix{width,height}'
Commit: https://github.com/vim/vim/commit/5866bc3a0f54115d5982fdc09bdbe4c45069265a
Author: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Date: Wed Mar 13 20:17:24 2024 +0100
patch 9.1.0175: wrong window positions with 'winfix{width,height}'
Problem: winframe functions incorrectly recompute window positions if
the altframe wasn't adjacent to the closed frame, which is
possible if adjacent windows had 'winfix{width,height}' set.
Solution: recompute for windows within the parent of the altframe and
closed frame. Skip this (as before) if the altframe was
top/left, but only if adjacent to the closed frame, as
positions won't change in that case. Also correct the return
value documentation for win_screenpos. (Sean Dewar)
The issue revealed itself after removing the win_comp_pos call below
winframe_restore in win_splitmove. Similarly, wrong positions could result from
windows closed in other tabpages, as win_free_mem uses winframe_remove (at least
until it is entered later, where enter_tabpage calls win_comp_pos).
NOTE: As win_comp_pos handles only curtab, it's possible via other means for
positions in non-current tabpages to be wrong (e.g: after changing 'laststatus',
'showtabline', etc.). Given enter_tabpage recomputes it, maybe it's intentional
as an optimization? Should probably be documented in win_screenpos then, but I
won't address that here.
closes: #14191
Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 13 Mar 2024 20:30:03 +0100 |
parents | d81556766132 |
children |
rev | line source |
---|---|
29756 | 1 vim9script |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2 |
29756 | 3 # Language: ConTeXt typesetting engine |
4 # Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> | |
5 # Former Maintainers: Nikolai Weibull <now@bitwi.se> | |
34018
d81556766132
runtime(context): update ConTeXt keywords and other minor fixes (#13778)
Christian Brabandt <cb@256bit.org>
parents:
30547
diff
changeset
|
6 # Latest Revision: 2023 Dec 26 |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
7 |
29756 | 8 # Typesetting {{{ |
9 import autoload './typeset.vim' | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
10 |
29756 | 11 export def ConTeXtCmd(path: string): list<string> |
30547 | 12 var cmd = ['mtxrun', '--script', 'context', '--nonstopmode', '--autogenerate'] |
13 if !empty(get(g:, 'context_extra_options', '')) | |
14 cmd += g:context_extra_options | |
15 endif | |
16 cmd->add(path) | |
17 return cmd | |
29756 | 18 enddef |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
19 |
29756 | 20 export def Typeset(bufname: string, env = {}, Cmd = ConTeXtCmd): bool |
21 return typeset.TypesetBuffer(bufname, Cmd, env, 'ConTeXt') | |
22 enddef | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
23 |
29756 | 24 export def JobStatus() |
25 typeset.JobStatus('ConTeXt') | |
26 enddef | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
27 |
29756 | 28 export def StopJobs() |
29 typeset.StopJobs('ConTeXt') | |
30 enddef | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
31 |
29756 | 32 export def Log(bufname: string) |
33 execute 'edit' typeset.LogPath(bufname) | |
34 enddef | |
35 # }}} | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
36 |
29756 | 37 # Completion {{{ |
38 def BinarySearch(base: string, keywords: list<string>): list<string> | |
39 const pat = '^' .. base | |
40 const len = len(keywords) | |
41 var res = [] | |
42 var lft = 0 | |
43 var rgt = len | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
44 |
29756 | 45 # Find the leftmost index matching base |
46 while lft < rgt | |
47 var i = (lft + rgt) / 2 | |
48 if keywords[i] < base | |
49 lft = i + 1 | |
50 else | |
51 rgt = i | |
52 endif | |
53 endwhile | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
54 |
29756 | 55 while lft < len && keywords[lft] =~ pat |
56 add(res, keywords[lft]) | |
57 lft += 1 | |
58 endwhile | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
59 |
29756 | 60 return res |
61 enddef | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
62 |
29756 | 63 var isMetaPostBlock = false |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
64 |
29756 | 65 var MP_KEYWORDS: list<string> = [] |
66 var CTX_KEYWORDS: list<string> = [] | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
67 |
29756 | 68 # Complete only MetaPost keywords in MetaPost blocks, and complete only |
69 # ConTeXt keywords otherwise. | |
70 export def Complete(findstart: number, base: string): any | |
71 if findstart == 1 | |
72 if len(synstack(line("."), 1)) > 0 && synIDattr(synstack(line("."), 1)[0], "name") ==# 'contextMPGraphic' | |
73 isMetaPostBlock = true | |
74 return match(getline('.'), '\S\+\%' .. col('.') .. 'c') | |
75 endif | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
76 |
29756 | 77 # Complete only \commands starting with a backslash |
78 isMetaPostBlock = false | |
79 var pos = match(getline('.'), '\\\zs\S\+\%' .. col('.') .. 'c') | |
80 return (pos == -1) ? -3 : pos | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
81 endif |
29756 | 82 |
83 if isMetaPostBlock | |
84 if empty(MP_KEYWORDS) | |
85 MP_KEYWORDS = sort(syntaxcomplete#OmniSyntaxList(['mf\w\+', 'mp\w\+'])) | |
86 endif | |
87 return BinarySearch(base, MP_KEYWORDS) | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
88 endif |
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
89 |
29756 | 90 if empty(CTX_KEYWORDS) |
91 CTX_KEYWORDS = sort(syntaxcomplete#OmniSyntaxList([ | |
92 'context\w\+', 'texAleph', 'texEtex', 'texLuatex', 'texOmega', | |
93 'texPdftex', 'texTex', 'texXeTeX' | |
94 ])) | |
95 endif | |
96 return BinarySearch(base, CTX_KEYWORDS) | |
97 enddef | |
98 # }}} | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
99 |
29756 | 100 # vim: sw=2 fdm=marker |