From c6f0142fc651dcbd2431630956d034c046293e7e Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Jul 2020 17:53:30 -0400 Subject: Get simple rg example to work --- lua/telescope/mappings.lua | 124 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 lua/telescope/mappings.lua (limited to 'lua/telescope/mappings.lua') diff --git a/lua/telescope/mappings.lua b/lua/telescope/mappings.lua new file mode 100644 index 0000000..b779b2f --- /dev/null +++ b/lua/telescope/mappings.lua @@ -0,0 +1,124 @@ +-- TODO: Customize keymap +local a = vim.api +local ns_telescope_selection = a.nvim_create_namespace('telescope_selection') + +local state = require('telescope.state') + +local mappings = {} +local keymap = {} +local telescope_selections = {} + +mappings.set_keymap = function(prompt_bufnr, results_bufnr) + local function default_mapper(map_key, table_key) + a.nvim_buf_set_keymap( + prompt_bufnr, + 'i', + map_key, + string.format( + [[:lua __TelescopeMapping(%s, %s, '%s')]], + prompt_bufnr, + results_bufnr, + table_key + ), + { + silent = true, + } + ) + end + + default_mapper('', 'control-n') + default_mapper('', 'control-p') + default_mapper('', 'enter') +end + +local function update_current_selection(prompt_bufnr, results_bufnr, row) + local status = state.get_status(prompt_bufnr) + + a.nvim_buf_clear_namespace(results_bufnr, ns_telescope_selection, 0, -1) + a.nvim_buf_add_highlight( + results_bufnr, + ns_telescope_selection, + 'Error', + row, + 0, + -1 + ) + + telescope_selections[prompt_bufnr] = row + + if status.previewer then + vim.g.got_here = true + + status.previewer.fn( + status.preview_win, + status.preview_bufnr, + status.results_bufnr, + row + ) + end +end + + +function __TelescopeMapping(prompt_bufnr, results_bufnr, characters) + if keymap[characters] then + keymap[characters](prompt_bufnr, results_bufnr) + end +end + +-- TODO: Refactor this to use shared code. +-- TODO: Move from top to bottom, etc. +-- TODO: It seems like doing this brings us back to the beginning of the prompt, which is not great. +keymap["control-n"] = function(prompt_bufnr, results_bufnr) + if telescope_selections[prompt_bufnr] == nil then + telescope_selections[prompt_bufnr] = 0 + end + + local row = telescope_selections[prompt_bufnr] + 1 + update_current_selection(prompt_bufnr, results_bufnr, row) +end + +keymap["control-p"] = function(prompt_bufnr, results_bufnr) + if telescope_selections[prompt_bufnr] == nil then + telescope_selections[prompt_bufnr] = 0 + end + + local row = telescope_selections[prompt_bufnr] - 1 + update_current_selection(prompt_bufnr, results_bufnr, row) +end + +keymap["enter"] = function(prompt_bufnr, results_bufnr) + local extmark = a.nvim_buf_get_extmarks( + results_bufnr, + ns_telescope_selection, + 0, + -1, + {} + ) + + local row = extmark[1][2] + if row == nil then + print("Could not do anything...") + return + else + local line = a.nvim_buf_get_lines(results_bufnr, row, row + 1, false)[1] + if line == nil then + print("Could not do anything with blank line...") + return + end + + local sections = vim.split(line, ":") + + local filename = sections[1] + local row = tonumber(sections[2]) + local col = tonumber(sections[3]) + + vim.cmd(string.format([[bdelete! %s]], prompt_bufnr)) + + local bufnr = vim.fn.bufnr(filename, true) + a.nvim_set_current_buf(bufnr) + a.nvim_buf_set_option(bufnr, 'buflisted', true) + a.nvim_win_set_cursor(0, {row, col}) + end +end + +return mappings -- cgit v1.2.3