summaryrefslogtreecommitdiff
path: root/lua/telescope/pickers
diff options
context:
space:
mode:
authorLuke Kershaw <35707277+l-kershaw@users.noreply.github.com>2021-12-10 19:08:24 +0000
committerGitHub <noreply@github.com>2021-12-10 19:08:24 +0000
commit5f37fbfa837dfee7ecd30f388b271f4a71c0a9e0 (patch)
treed7623b89980c808f33347cbfa396ef8d6315989c /lua/telescope/pickers
parent5e5351ef13dc1f225b3e51a66d54854bfe91d2cb (diff)
feat: layout `anchor` (#1582)
* feat: add `anchor` option to some `layout_strategies` * tests: improve tests for `resolve_height/width`
Diffstat (limited to 'lua/telescope/pickers')
-rw-r--r--lua/telescope/pickers/layout_strategies.lua32
1 files changed, 29 insertions, 3 deletions
diff --git a/lua/telescope/pickers/layout_strategies.lua b/lua/telescope/pickers/layout_strategies.lua
index 9b1b2cd..7159797 100644
--- a/lua/telescope/pickers/layout_strategies.lua
+++ b/lua/telescope/pickers/layout_strategies.lua
@@ -107,6 +107,13 @@ local get_valid_configuration_keys = function(strategy_config)
return valid_configuration_keys
end
+local adjust_pos = function(pos, ...)
+ for _, opts in ipairs { ... } do
+ opts.col = opts.col and opts.col + pos[1]
+ opts.line = opts.line and opts.line + pos[2]
+ end
+end
+
--@param strategy_name string: the name of the layout_strategy we are validating for
--@param configuration table: table with keys for each option available
--@param values table: table containing all of the non-default options we want to set
@@ -187,6 +194,7 @@ local shared_options = {
mirror = "Flip the location of the results/prompt and preview windows",
scroll_speed = "The number of lines to scroll through the previewer",
prompt_position = { "Where to place prompt window.", "Available Values: 'bottom', 'top'" },
+ anchor = { "Which edge/corner to pin the picker to", "See |resolver.resolve_anchor_pos()|" },
}
-- Used for generating vim help documentation.
@@ -368,6 +376,9 @@ layout_strategies.horizontal = make_documented_layout(
error(string.format("Unknown prompt_position: %s\n%s", self.window.prompt_position, vim.inspect(layout_config)))
end
+ local anchor_pos = resolve.resolve_anchor_pos(layout_config.anchor or "", width, height, max_columns, max_lines)
+ adjust_pos(anchor_pos, prompt, results, preview)
+
if tbln then
prompt.line = prompt.line + 1
results.line = results.line + 1
@@ -388,6 +399,8 @@ layout_strategies.horizontal = make_documented_layout(
--- Particularly useful for creating dropdown menus
--- (see |telescope.themes| and |themes.get_dropdown()|`).
---
+--- Note that the `anchor` option can only pin this layout to the left or right edges.
+---
--- <pre>
--- ┌──────────────────────────────────────────────────┐
--- │ ┌────────────────────────────────────────┐ │
@@ -475,7 +488,12 @@ layout_strategies.center = make_documented_layout(
preview.height = 0
end
- results.col, preview.col, prompt.col = 0, 0, 0 -- all centered
+ local width_padding = math.floor((max_columns - width) / 2) + bs + 1
+ results.col, preview.col, prompt.col = width_padding, width_padding, width_padding
+
+ local anchor_pos = resolve.resolve_anchor_pos(layout_config.anchor or "", width, height, max_columns, max_lines)
+ anchor_pos[2] = 0 -- only use horizontal anchoring
+ adjust_pos(anchor_pos, prompt, results, preview)
if tbln then
prompt.line = prompt.line + 1
@@ -514,7 +532,11 @@ layout_strategies.center = make_documented_layout(
--- </pre>
layout_strategies.cursor = make_documented_layout(
"cursor",
- vim.tbl_extend("error", shared_options, {
+ vim.tbl_extend("error", {
+ width = shared_options.width,
+ height = shared_options.height,
+ scroll_speed = shared_options.scroll_speed,
+ }, {
preview_width = { "Change the width of Telescope's preview window", "See |resolver.resolve_width()|" },
preview_cutoff = "When columns are less than this value, the preview will be disabled",
}),
@@ -661,7 +683,8 @@ layout_strategies.vertical = make_documented_layout(
prompt.height = 1
results.height = height - preview.height - prompt.height - h_space
- results.col, preview.col, prompt.col = 0, 0, 0 -- all centered
+ local width_padding = math.floor((max_columns - width) / 2) + bs + 1
+ results.col, preview.col, prompt.col = width_padding, width_padding, width_padding
local height_padding = math.floor((max_lines - height) / 2)
if not layout_config.mirror then
@@ -689,6 +712,9 @@ layout_strategies.vertical = make_documented_layout(
end
end
+ local anchor_pos = resolve.resolve_anchor_pos(layout_config.anchor or "", width, height, max_columns, max_lines)
+ adjust_pos(anchor_pos, prompt, results, preview)
+
if tbln then
prompt.line = prompt.line + 1
results.line = results.line + 1