@@ -3,62 +3,11 @@ vim9script
3
3
# Maintainer: Yee Cheng Chin (macvim- dev@m acvim.org)
4
4
# Last Change: 2023 - 03 - 15
5
5
6
- # Retrieves the text under the selection , without polluting the registers .
7
- # This is easier if we could yank , but we don't know what the user has been
8
- # doing. One way we could have accomplished this was to save the register info
9
- # and then restore it, but this runs into problems if the unnamed register was
10
- # pointing to the " * register as setting and restoring the system clipboard
11
- # could be iffy (if there are non- text items in the clipboard ). It's cleaner
12
- # to just use a pure Vimscript solution without having to rely on yank .
13
- def SelectedText (): string
14
- var [line_start, column_start] = getpos (" '<" )[1 : 2 ]
15
- var [line_end, column_end] = getpos (" '>" )[1 : 2 ]
16
- final lines = getline (line_start, line_end)
17
- if len (lines ) == 0
18
- return ' '
19
- endif
20
-
21
- const visualmode = visualmode ()
22
-
23
- if visualmode == # ' v'
24
- if line_start == line_end && column_start == column_end
25
- # Exclusive has a special case where you always select at least one
26
- # char, so just handle the case here.
27
- return lines [0 ][column_start - 1 ]
28
- endif
29
- if &selection == # " exclusive"
30
- column_end -= 1 # exclusive selection don't count the last column (usually)
31
- endif
32
- lines [-1 ] = lines [-1 ][ : column_end - 1 ]
33
- lines [0 ] = lines [0 ][column_start - 1 : ]
34
- elseif visualmode == # " \<C-V> "
35
- if column_end <= column_start
36
- # This can happen with v_O, need to swap start /end
37
- const temp = column_start
38
- column_start = column_end
39
- column_end = temp
40
- # Also, exclusive mode is weird in this state in that we don't need to
41
- # do column_end -= 1 , and it acts like inclusive instead.
42
- else
43
- if &selection == # " exclusive"
44
- column_end -= 1 # normal exclusive behavior, need to cull the last column.
45
- endif
46
- endif
47
- for idx in range (len (lines ))
48
- lines [idx] = lines [idx][column_start - 1 : column_end - 1 ]
49
- endfor
50
- else
51
- # Line mode doesn't have to do anything to trim the lines
52
- endif
53
- return join (lines , " \n " )
54
- enddef
55
-
56
-
57
6
# Ask macOS to show the definition of the last selected text. Note that this
58
7
# uses '<, and therefore has to be used in normal mode where the mark has
59
8
# already been updated.
60
9
export def ShowDefinitionSelected ()
61
- const sel_text = SelectedText ( )
10
+ const sel_text = join ( getregion ( getpos ( " '< " ), getpos ( " '> " ), { type : visualmode (), exclusive: (& selection == # " exclusive " ) }), " \n " )
62
11
if len (sel_text) > 0
63
12
const sel_start = getpos (" '<" )
64
13
const sel_screenpos = win_getid ()- >screenpos (sel_start[1 ], sel_start[2 ])
0 commit comments