summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorAlef Pereira <alefpereira@users.noreply.github.com>2022-03-02 18:05:09 -0400
committerGitHub <noreply@github.com>2022-03-02 22:05:09 +0000
commit76120285f88c1becb5728695f6df77c545437c53 (patch)
tree11be3e91311977c27530e6207d2d6126bc3650a3 /lua
parent567ec85b157f1606b500a0f755181f284810a28e (diff)
Change center layout strategy to allow vertical anchoring (#1719)
* Change center layout strategy to allow vertical anchoring Affects `telescope.pickers.layout_strategies.center` that is used by dropdown (`telescope.themes.get_dropdown()`) theme, allowing more customization for dropdown theme, i. e. setting it in the top with mirrored preview. For `anchor` containing `N` or `S` will ignore `mirror` config and preview will be placed as follows: - Anchoring for `N` put the preview below the prompt result block. - Anchoring for `S` put the preview above the prompt result block. - For horizontal anchoring preview will be placed according to `mirror`. * [docgen] Update doc/telescope.txt skip-checks: true Co-authored-by: Github Actions <actions@github>
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/pickers/layout_strategies.lua50
1 files changed, 35 insertions, 15 deletions
diff --git a/lua/telescope/pickers/layout_strategies.lua b/lua/telescope/pickers/layout_strategies.lua
index 7159797..1483cf9 100644
--- a/lua/telescope/pickers/layout_strategies.lua
+++ b/lua/telescope/pickers/layout_strategies.lua
@@ -395,11 +395,18 @@ layout_strategies.horizontal = make_documented_layout(
--- Centered layout with a combined block of the prompt
--- and results aligned to the middle of the screen.
---- The preview window is then placed in the remaining space above.
+--- The preview window is then placed in the remaining
+--- space above or below, according to `anchor` or `mirror`.
--- Particularly useful for creating dropdown menus
---- (see |telescope.themes| and |themes.get_dropdown()|`).
+--- (see |telescope.themes| and |themes.get_dropdown()|).
---
---- Note that the `anchor` option can only pin this layout to the left or right edges.
+--- Note that vertical anchoring, i.e. `anchor` containing
+--- `"N"` or `"S"`, will override `mirror` config. For `"N"`
+--- anchoring preview will be placed below prompt/result
+--- block. For `"S"` anchoring preview will be placed above
+--- prompt/result block. For horizontal only anchoring preview
+--- will be placed according to `mirror` config, default is
+--- above the prompt/result block.
---
--- <pre>
--- ┌──────────────────────────────────────────────────┐
@@ -476,25 +483,38 @@ layout_strategies.center = make_documented_layout(
error(string.format("Unknown prompt_position: %s\n%s", self.window.prompt_position, vim.inspect(layout_config)))
end
- if not layout_config.mirror then
- preview.line = 1 + bs
- preview.height = topline - (2 * bs + 2)
+ 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 = layout_config.anchor or ""
+ local anchor_pos = resolve.resolve_anchor_pos(anchor, width, height, max_columns, max_lines)
+ adjust_pos(anchor_pos, prompt, results, preview)
+
+ -- Vertical anchoring (S or N variations) ignores layout_config.mirror
+ anchor = anchor:upper()
+ local mirror
+ if anchor:find "S" then
+ mirror = false
+ elseif anchor:find "N" then
+ mirror = true
else
- preview.line = topline + (results.height + (2 * bs + 2))
- preview.height = max_lines - preview.line + (1 - bs)
+ mirror = layout_config.mirror
+ end
+
+ -- Set preview position
+ local block_line = math.min(results.line, prompt.line)
+ if not mirror then -- Preview at top
+ preview.line = 1 + bs
+ preview.height = block_line - (2 + 2 * bs)
+ else -- Preview at bottom
+ preview.line = block_line + results.height + 2 + 2 * bs
+ preview.height = max_lines - preview.line - bs + 1
end
if not (self.previewer and max_lines >= layout_config.preview_cutoff) then
preview.height = 0
end
- 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
results.line = results.line + 1