@@ -12,6 +12,112 @@ local cache = {
1212 qlpacks = nil ,
1313}
1414
15+ --- Apply mappings to a buffer
16+ function M .apply_mappings ()
17+ local mappings = require " codeql.mappings"
18+ local conf = config .get_config ()
19+ for action , value in pairs (conf .mappings ) do
20+ if
21+ not M .is_blank (value )
22+ and not M .is_blank (action )
23+ and not M .is_blank (value .lhs )
24+ and not M .is_blank (mappings [action ])
25+ then
26+ if M .is_blank (value .desc ) then
27+ value .desc = " "
28+ end
29+ local mapping_opts = { silent = true , noremap = true , desc = value .desc }
30+ for _ , mode in ipairs (value .modes ) do
31+ vim .api .nvim_buf_set_keymap (0 , mode , value .lhs , mappings [action ], mapping_opts )
32+ end
33+ end
34+ end
35+ end
36+
37+ function M .get_current_position ()
38+ local modeInfo = vim .api .nvim_get_mode ()
39+ local mode = modeInfo .mode
40+
41+ local cursor = vim .api .nvim_win_get_cursor (0 )
42+ local cline , ccol = cursor [1 ], cursor [2 ]
43+ local vline , vcol = vim .fn .line " v" , vim .fn .col " v"
44+
45+ local sline , scol
46+ local eline , ecol
47+ if cline == vline then
48+ if ccol <= vcol then
49+ sline , scol = cline , ccol
50+ eline , ecol = vline , vcol
51+ scol = scol + 1
52+ else
53+ sline , scol = vline , vcol
54+ eline , ecol = cline , ccol
55+ ecol = ecol + 1
56+ end
57+ elseif cline < vline then
58+ sline , scol = cline , ccol
59+ eline , ecol = vline , vcol
60+ scol = scol + 1
61+ else
62+ sline , scol = vline , vcol
63+ eline , ecol = cline , ccol
64+ ecol = ecol + 1
65+ end
66+
67+ if mode == " V" or mode == " CTRL-V" or mode == " \22 " then
68+ scol = 1
69+ ecol = nil
70+ end
71+
72+ local pos = { sline , scol , eline , ecol }
73+ return pos
74+ end
75+
76+ function M .get_current_selection ()
77+ local pos = M .get_current_position ()
78+ local sline , scol , eline , ecol = pos [1 ], pos [2 ], pos [3 ], pos [4 ]
79+ local lines = vim .api .nvim_buf_get_lines (0 , sline - 1 , eline , 0 )
80+ if # lines == 0 then
81+ return
82+ end
83+
84+ local startText , endText
85+ if # lines == 1 then
86+ startText = string.sub (lines [1 ], scol , ecol )
87+ else
88+ startText = string.sub (lines [1 ], scol )
89+ endText = string.sub (lines [# lines ], 1 , ecol )
90+ end
91+ local selection = { startText }
92+ if # lines > 2 then
93+ vim .list_extend (selection , vim .list_slice (lines , 2 , # lines - 1 ))
94+ end
95+ table.insert (selection , endText )
96+
97+ return selection
98+ end
99+
100+ function M .get_current_position_orig ()
101+ local srow , scol , erow , ecol
102+
103+ if vim .fn .getpos (" '<" )[2 ] == vim .fn .getcurpos ()[2 ] and vim .fn .getpos (" '<" )[3 ] == vim .fn .getcurpos ()[3 ] then
104+ srow = vim .fn .getpos (" '<" )[2 ]
105+ scol = vim .fn .getpos (" '<" )[3 ]
106+ erow = vim .fn .getpos (" '>" )[2 ]
107+ ecol = vim .fn .getpos (" '>" )[3 ]
108+
109+ ecol = ecol == 2147483647 and 1 + vim .fn .len (vim .fn .getline (erow )) or 1 + ecol
110+ else
111+ srow = vim .fn .getcurpos ()[2 ]
112+ scol = vim .fn .getcurpos ()[3 ]
113+ erow = vim .fn .getcurpos ()[2 ]
114+ ecol = vim .fn .getcurpos ()[3 ]
115+ end
116+
117+ local pos = { srow , scol , erow , ecol }
118+ return pos
119+ end
120+
15121function M .list_from_archive (zipfile )
16122 local job = Job :new {
17123 enable_recording = true ,
0 commit comments