summaryrefslogtreecommitdiff
path: root/lua/telescope
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2021-02-24 02:41:00 +0100
committerGitHub <noreply@github.com>2021-02-24 02:41:00 +0100
commit10627e889e82a82560b6fc48ea0ca20e1963d07f (patch)
treeb6c6a782184f3c60ce5ad7e4636cba93c005fae2 /lua/telescope
parent4dd35ef0e154ab1836fc923a33196a4101a97a9c (diff)
feat: advanced normal mode (#463)
Add <count>j and k to normal mode and H and L to jump at top and bottom of displayed results
Diffstat (limited to 'lua/telescope')
-rw-r--r--lua/telescope/actions/init.lua17
-rw-r--r--lua/telescope/actions/set.lua4
-rw-r--r--lua/telescope/mappings.lua10
-rw-r--r--lua/telescope/pickers/scroller.lua14
4 files changed, 42 insertions, 3 deletions
diff --git a/lua/telescope/actions/init.lua b/lua/telescope/actions/init.lua
index 9286833..5ae284b 100644
--- a/lua/telescope/actions/init.lua
+++ b/lua/telescope/actions/init.lua
@@ -5,6 +5,7 @@ local a = vim.api
local log = require('telescope.log')
local state = require('telescope.state')
local utils = require('telescope.utils')
+local p_scroller = require('telescope.pickers.scroller')
local action_state = require('telescope.actions.state')
local action_set = require('telescope.actions.set')
@@ -69,6 +70,22 @@ function actions.move_selection_previous(prompt_bufnr)
action_set.shift_selection(prompt_bufnr, -1)
end
+function actions.move_to_top(prompt_bufnr)
+ local current_picker = actions.get_current_picker(prompt_bufnr)
+ current_picker:set_selection(p_scroller.top(current_picker.sorting_strategy,
+ current_picker.max_results,
+ current_picker.manager:num_results()
+ ))
+end
+
+function actions.move_to_bottom(prompt_bufnr)
+ local current_picker = actions.get_current_picker(prompt_bufnr)
+ current_picker:set_selection(p_scroller.bottom(current_picker.sorting_strategy,
+ current_picker.max_results,
+ current_picker.manager:num_results()
+ ))
+end
+
function actions.add_selection(prompt_bufnr)
local current_picker = action_state.get_current_picker(prompt_bufnr)
current_picker:add_selection(current_picker:get_selection_row())
diff --git a/lua/telescope/actions/set.lua b/lua/telescope/actions/set.lua
index 13cc75f..4e92848 100644
--- a/lua/telescope/actions/set.lua
+++ b/lua/telescope/actions/set.lua
@@ -26,7 +26,9 @@ local set = setmetatable({}, {
---@param prompt_bufnr number: The prompt bufnr
---@param change number: The amount to shift the selection by
set.shift_selection = function(prompt_bufnr, change)
- action_state.get_current_picker(prompt_bufnr):move_selection(change)
+ local count = vim.v.count
+ count = count == 0 and 1 or count
+ action_state.get_current_picker(prompt_bufnr):move_selection(change * count)
end
--- Select the current entry. This is the action set to overwrite common
diff --git a/lua/telescope/mappings.lua b/lua/telescope/mappings.lua
index efc833e..95ce279 100644
--- a/lua/telescope/mappings.lua
+++ b/lua/telescope/mappings.lua
@@ -38,6 +38,8 @@ mappings.default_mappings = config.values.default_mappings or {
-- TODO: This would be weird if we switch the ordering.
["j"] = actions.move_selection_next,
["k"] = actions.move_selection_previous,
+ ["H"] = actions.move_to_top,
+ ["L"] = actions.move_to_bottom,
["<Down>"] = actions.move_selection_next,
["<Up>"] = actions.move_selection_previous,
@@ -110,7 +112,7 @@ local telescope_map = function(prompt_bufnr, mode, key_bind, key_func, opts)
)
else
local key_id = assign_function(prompt_bufnr, key_func)
- local prefix = ""
+ local prefix
local map_string
if opts.expr then
@@ -122,10 +124,14 @@ local telescope_map = function(prompt_bufnr, mode, key_bind, key_func, opts)
else
if mode == "i" and not opts.expr then
prefix = "<cmd>"
+ elseif mode == "n" then
+ prefix = ":<C-U>"
+ else
+ prefix = ":"
end
map_string = string.format(
- "%s:lua require('telescope.mappings').execute_keymap(%s, %s)<CR>",
+ "%slua require('telescope.mappings').execute_keymap(%s, %s)<CR>",
prefix,
prompt_bufnr,
key_id
diff --git a/lua/telescope/pickers/scroller.lua b/lua/telescope/pickers/scroller.lua
index 3169c4b..8b84e7c 100644
--- a/lua/telescope/pickers/scroller.lua
+++ b/lua/telescope/pickers/scroller.lua
@@ -73,4 +73,18 @@ scroller.create = function(scroll_strategy, sorting_strategy)
end
end
+scroller.top = function(sorting_strategy, max_results, num_results)
+ if sorting_strategy == 'ascending' then
+ return 0
+ end
+ return (num_results > max_results) and 0 or (max_results - num_results)
+end
+
+scroller.bottom = function(sorting_strategy, max_results, num_results)
+ if sorting_strategy == 'ascending' then
+ return math.min(max_results, num_results) - 1
+ end
+ return max_results - 1
+end
+
return scroller