diff options
| author | Stephan Seitz <stephan.seitz@fau.de> | 2020-08-16 14:50:54 +0200 |
|---|---|---|
| committer | Stephan Seitz <stephan.seitz@fau.de> | 2020-08-17 17:46:40 +0200 |
| commit | 52168114594d791a3ae6092ab2489758da7b3ae8 (patch) | |
| tree | 1a1a6a2415e6b4dee44dd322fb89655900f4ba3e /lua/nvim-treesitter/textobjects/select.lua | |
| parent | 32271b26ef64433b2d9cc41392594db614449a4c (diff) | |
chore(textobjects): split up into submodules
Diffstat (limited to 'lua/nvim-treesitter/textobjects/select.lua')
| -rw-r--r-- | lua/nvim-treesitter/textobjects/select.lua | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lua/nvim-treesitter/textobjects/select.lua b/lua/nvim-treesitter/textobjects/select.lua new file mode 100644 index 00000000..1f3698bc --- /dev/null +++ b/lua/nvim-treesitter/textobjects/select.lua @@ -0,0 +1,55 @@ +local api = vim.api +local configs = require'nvim-treesitter.configs' +local parsers = require'nvim-treesitter.parsers' +local queries = require'nvim-treesitter.query' + +local shared = require'nvim-treesitter.textobjects.shared' +local ts_utils = require'nvim-treesitter.ts_utils' + +local M = {} + +function M.select_textobject(query_string) + local bufnr, textobject = shared.textobject_at_point(query_string) + if textobject then + ts_utils.update_selection(bufnr, textobject) + end +end + +function M.attach(bufnr, lang) + local buf = bufnr or api.nvim_get_current_buf() + local config = configs.get_module("textobjects.select") + local lang = lang or parsers.get_buf_lang(buf) + + for mapping, query in pairs(config.keymaps) do + if type(query) == 'table' then + query = query[lang] + elseif not queries.get_query(lang, 'textobjects') then + query = nil + end + if query then + local cmd = ":lua require'nvim-treesitter.textobjects.select'.select_textobject('"..query.."')<CR>" + api.nvim_buf_set_keymap(buf, "o", mapping, cmd, {silent = true, noremap = true }) + api.nvim_buf_set_keymap(buf, "v", mapping, cmd, {silent = true, noremap = true }) + end + end +end + +function M.detach(bufnr) + local buf = bufnr or api.nvim_get_current_buf() + local config = configs.get_module("textobjects.select") + local lang = parsers.get_buf_lang(bufnr) + + for mapping, query in pairs(config.keymaps) do + if type(query) == 'table' then + query = query[lang] + elseif not queries.get_query(lang, 'textobjects') then + query = nil + end + if query then + api.nvim_buf_del_keymap(buf, "o", mapping) + api.nvim_buf_del_keymap(buf, "v", mapping) + end + end +end + +return M |
