diff options
| author | Senghan Bright <1448118+sunjon@users.noreply.github.com> | 2020-11-03 03:05:10 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-02 21:05:10 -0500 |
| commit | 051aefdb8cea71294e6e62e8a4a1e051c48e4edd (patch) | |
| tree | b46ca931f284f6fad19d3e3f80061cf1070736c9 /lua/telescope/pickers | |
| parent | 855d818a5dc3e7762a6c375b424cc99e1a7e8553 (diff) | |
feat: v1 options menu (#133)
Still has a bunch of improvements that can be done, but wanted to merge in some of the related changes.
* options parser
* wip: vimoptions finder
* feat: pre-populate ex-command line with `:set foo=`
* use options current value when populating command line
* fix: use result.raw_value to store original option value
* .
* options: Continue work on option finder
* [WIP]: Tue 27 Oct 2020 10:34:09 PM EDT
* [WIP]: Mon 02 Nov 2020 08:20:13 PM EST
* [WIP]: Mon 02 Nov 2020 09:04:23 PM EST
Co-authored-by: TJ DeVries <devries.timothyj@gmail.com>
Diffstat (limited to 'lua/telescope/pickers')
| -rw-r--r-- | lua/telescope/pickers/entry_display.lua | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/lua/telescope/pickers/entry_display.lua b/lua/telescope/pickers/entry_display.lua new file mode 100644 index 0000000..c661b89 --- /dev/null +++ b/lua/telescope/pickers/entry_display.lua @@ -0,0 +1,100 @@ +local log = require('telescope.log') + +local entry_display = {} + +-- index are used to determine the correct order +-- elements = { +-- [1] = { element, max width }, -- max width should be greater than 0 +-- [2] = { a, 0 } -- Use 0 to disable max width +-- [3] = { b, 0 } -- If b is nil, skip this column, should skip column for all rows +-- }, +-- separator = " " -- either arbitrary string, when you wanna use the same separator between all elements +-- separator = { " ", ":" } -- or table, where [1] is separator between elements[1] and elements[2], etc + +-- TODO: Remove this and move ONLY to create method. + +local table_format = function(picker, elements, separator) + -- TODO: Truncate... + local win_width = vim.api.nvim_win_get_width(picker.results_win) + + local output = "" + for k, v in ipairs(elements) do + local text = v[1] + local width = v[2] + if text ~= nil then + if k > 1 then + output = output .. (type(separator) == "table" and separator[k - 1] or separator) + end + if width then + if width == 0 then + output = output .. string.format("%s", text) + elseif width < 1 then + output = output .. string.format("%-" .. math.floor(width * win_width) .. "s", text) + else + output = output .. string.format("%-" .. width .."s", text) + end + else + output = output .. text + end + end + end + return output +end + +local function truncate(str, len) + -- TODO: This doesn't handle multi byte chars... + if vim.fn.strdisplaywidth(str) > len - 1 then + str = str:sub(1, len) + str = str .. "…" + end + return str +end + +entry_display.create = function(configuration) + local generator = {} + for _, v in ipairs(configuration.items) do + if v.width then + local justify = not v.right_justify and "-" or "" + local format_str = "%" .. justify .. v.width .. "s" + table.insert(generator, function(item) + return string.format(format_str, truncate(item, v.width)) + end) + else + table.insert(generator, function(item) + return item + end) + end + end + + return function(self, picker) + local results = {} + for k, v in ipairs(self) do + table.insert(results, generator[k](v, picker)) + end + + return table.concat(results, configuration.separator or "│") + end +end + + +entry_display.resolve = function(self, entry) + local display, display_highlights + if type(entry.display) == 'function' then + self:_increment("display_fn") + display, display_highlights = entry:display(self) + + if type(display) == 'string' then + return display, display_highlights + end + else + display = entry.display + end + + if type(display) == 'string' then + return display, display_highlights + elseif type(display) == 'table' then + return table_format(self, display, "│"), display_highlights + end +end + +return entry_display |
