@@ -214,21 +214,24 @@ end
214214--- @param range Range4
215215--- @param row integer
216216--- @param col integer
217+ --- @param end_col_offset integer ? nil (implies 0 ) or -1 - see tests /select /python /selection_mode.py
217218--- @return boolean
218- local function is_in_range (range , row , col )
219+ local function is_in_range (range , row , col , end_col_offset )
219220 local start_row , start_col , end_row , end_col = unpack (range ) --- @type integer , integer , integer , integer
220- end_col = end_col - 1
221221
222- local is_in_rows = start_row <= row and end_row >= row
223- local is_after_start_col_if_needed = true
224- if start_row == row then
225- is_after_start_col_if_needed = col >= start_col
222+ if start_row > row or end_row < row then
223+ return false
226224 end
227- local is_before_end_col_if_needed = true
228- if end_row == row then
229- is_before_end_col_if_needed = col <= end_col
225+
226+ if start_row == row and col < start_col then
227+ return false
230228 end
231- return is_in_rows and is_after_start_col_if_needed and is_before_end_col_if_needed
229+
230+ if end_row ~= row then
231+ return true
232+ end
233+
234+ return col <= end_col + (end_col_offset or 0 )
232235end
233236
234237--- @param range1 Range4
@@ -266,7 +269,7 @@ local function best_range_at_point(ranges, row, col, opts)
266269 local lookbehind_earliest_start --- @type integer
267270
268271 for _ , range in pairs (ranges ) do
269- if range and is_in_range (M .torange4 (range ), row , col ) then
272+ if range and is_in_range (M .torange4 (range ), row , col , - 1 ) then
270273 local length = range [6 ] - range [3 ]
271274 if not range_length or length < range_length then
272275 smallest_range = range
0 commit comments