Mercurial > vim
annotate runtime/indent/rhelp.vim @ 34329:a059fc613d55 v9.1.0098
patch 9.1.0098: CompletionChanged not triggered when new leader added without matches
Commit: https://github.com/vim/vim/commit/0d3c0a66a39570cbc52b9536604c39e324b989b3
Author: glepnir <glephunter@gmail.com>
Date: Sun Feb 11 17:52:40 2024 +0100
patch 9.1.0098: CompletionChanged not triggered when new leader added without matches
Problem: CompletionChanged not triggered when new leader added causing
no matching item in the completion menu
Solution: When completion is active but no items matched still trigger
CompletChanged event
(glepnir)
closes: #13982
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 11 Feb 2024 18:00:03 +0100 |
parents | b2e8663e6dcc |
children | 02bd0fe77c68 |
rev | line source |
---|---|
6051 | 1 " Vim indent file |
2 " Language: R Documentation (Help), *.Rd | |
3 " Author: Jakson Alves de Aquino <jalvesaq@gmail.com> | |
8497
da01d5da2cfa
commit https://github.com/vim/vim/commit/77cdfd10382e01cc51f4ba1a9177032351843151
Christian Brabandt <cb@256bit.org>
parents:
6840
diff
changeset
|
4 " Homepage: https://github.com/jalvesaq/R-Vim-runtime |
32294 | 5 " Last Change: Mon Feb 27, 2023 07:01PM |
6051 | 6 |
7 | |
8 " Only load this indent file when no other was loaded. | |
9 if exists("b:did_indent") | |
10 finish | |
11 endif | |
12 runtime indent/r.vim | |
13 let s:RIndent = function(substitute(&indentexpr, "()", "", "")) | |
14 let b:did_indent = 1 | |
15 | |
16 setlocal noautoindent | |
17 setlocal nocindent | |
18 setlocal nosmartindent | |
19 setlocal nolisp | |
20 setlocal indentkeys=0{,0},:,!^F,o,O,e | |
21 setlocal indentexpr=GetCorrectRHelpIndent() | |
22 | |
32294 | 23 let b:undo_indent = "setl ai< cin< inde< indk< lisp< si<" |
32061 | 24 |
6840 | 25 " Only define the functions once. |
26 if exists("*GetRHelpIndent") | |
27 finish | |
28 endif | |
29 | |
6051 | 30 function s:SanitizeRHelpLine(line) |
31 let newline = substitute(a:line, '\\\\', "x", "g") | |
32 let newline = substitute(newline, '\\{', "x", "g") | |
33 let newline = substitute(newline, '\\}', "x", "g") | |
34 let newline = substitute(newline, '\\%', "x", "g") | |
35 let newline = substitute(newline, '%.*', "", "") | |
36 let newline = substitute(newline, '\s*$', "", "") | |
37 return newline | |
38 endfunction | |
39 | |
40 function GetRHelpIndent() | |
41 | |
42 let clnum = line(".") " current line | |
43 if clnum == 1 | |
44 return 0 | |
45 endif | |
46 let cline = getline(clnum) | |
47 | |
48 if cline =~ '^\s*}\s*$' | |
49 let i = clnum | |
50 let bb = -1 | |
51 while bb != 0 && i > 1 | |
52 let i -= 1 | |
53 let line = s:SanitizeRHelpLine(getline(i)) | |
54 let line2 = substitute(line, "{", "", "g") | |
55 let openb = strlen(line) - strlen(line2) | |
56 let line3 = substitute(line2, "}", "", "g") | |
57 let closeb = strlen(line2) - strlen(line3) | |
58 let bb += openb - closeb | |
59 endwhile | |
60 return indent(i) | |
61 endif | |
62 | |
63 if cline =~ '^\s*#ifdef\>' || cline =~ '^\s*#endif\>' | |
64 return 0 | |
65 endif | |
66 | |
67 let lnum = clnum - 1 | |
68 let line = getline(lnum) | |
69 if line =~ '^\s*#ifdef\>' || line =~ '^\s*#endif\>' | |
70 let lnum -= 1 | |
71 let line = getline(lnum) | |
72 endif | |
73 while lnum > 1 && (line =~ '^\s*$' || line =~ '^#ifdef' || line =~ '^#endif') | |
74 let lnum -= 1 | |
75 let line = getline(lnum) | |
76 endwhile | |
77 if lnum == 1 | |
78 return 0 | |
79 endif | |
80 let line = s:SanitizeRHelpLine(line) | |
81 let line2 = substitute(line, "{", "", "g") | |
82 let openb = strlen(line) - strlen(line2) | |
83 let line3 = substitute(line2, "}", "", "g") | |
84 let closeb = strlen(line2) - strlen(line3) | |
85 let bb = openb - closeb | |
86 | |
11347 | 87 let ind = indent(lnum) + (bb * shiftwidth()) |
6051 | 88 |
89 if line =~ '^\s*}\s*$' | |
90 let ind = indent(lnum) | |
91 endif | |
92 | |
93 if ind < 0 | |
94 return 0 | |
95 endif | |
96 | |
97 return ind | |
98 endfunction | |
99 | |
100 function GetCorrectRHelpIndent() | |
101 let lastsection = search('^\\[a-z]*{', "bncW") | |
102 let secname = getline(lastsection) | |
103 if secname =~ '^\\usage{' || secname =~ '^\\examples{' || secname =~ '^\\dontshow{' || secname =~ '^\\dontrun{' || secname =~ '^\\donttest{' || secname =~ '^\\testonly{' || secname =~ '^\\method{.*}{.*}(' | |
104 return s:RIndent() | |
105 else | |
106 return GetRHelpIndent() | |
107 endif | |
108 endfunction | |
109 | |
110 " vim: sw=2 |