From 69af7b05d1465c2778c9ac66f78a9ff9f1de7021 Mon Sep 17 00:00:00 2001 From: TheOnePath Date: Mon, 23 Jan 2023 18:21:44 +0000 Subject: [PATCH] Updated utils.lua M@clean_buffer no longer escapes sequences (caused undesirable behaviour). Added M@get_selection which will return four values indicating the starting row/column and ending row/column of a visual-mode selection. If no selection has been performed in buffer instance, values may be -1. Value is "cached" as defined Vim behaviour of '< and '> positions. Added M@subslice is used to get a substring of a word between two whitespace characters (i.e., spaces). The `line` is the string to check, and `col` is a position (e.g., from the cursor) within the word which will be extracted. Return value is a table of starting and ending indices of the original string. --- lua/presser/utils.lua | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lua/presser/utils.lua b/lua/presser/utils.lua index 13583c6..4a5bb93 100644 --- a/lua/presser/utils.lua +++ b/lua/presser/utils.lua @@ -31,8 +31,32 @@ M.clean_buf = function ( text ) return "" end - return escape_chars( text ) - :match( "^%s*(.-)%s*$" ) + return text:match( "^%s*(.-)%s*$" ) +end + + +M.get_selection = function() + local _, csrow, cscol, _ = unpack(vim.fn.getpos("'<")) + local _, cerow, cecol, _ = unpack(vim.fn.getpos("'>")) + if csrow < cerow or (csrow == cerow and cscol <= cecol) then + return csrow - 1, cscol - 1, cerow - 1, cecol + else + return cerow - 1, cecol - 1, csrow - 1, cscol + end +end + + +M.subslice = function(line, col) + local i = 0 + local j = 0 + while true do + j = string.find(line, " ", j+1) -- find 'next' newline + if j == nil then break end + if j > col then break end + i = j + end + + return { i, j } end