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/builtin.lua | |
| 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/builtin.lua')
| -rw-r--r-- | lua/telescope/builtin.lua | 83 |
1 files changed, 77 insertions, 6 deletions
diff --git a/lua/telescope/builtin.lua b/lua/telescope/builtin.lua index e90797d..d4030ae 100644 --- a/lua/telescope/builtin.lua +++ b/lua/telescope/builtin.lua @@ -24,14 +24,13 @@ if 2 > vim.o.report then end --- TODO: Give some bonus weight to files we've picked before --- TODO: Give some bonus weight to oldfiles - local actions = require('telescope.actions') local finders = require('telescope.finders') +local log = require('telescope.log') local make_entry = require('telescope.make_entry') -local previewers = require('telescope.previewers') +local path = require('telescope.path') local pickers = require('telescope.pickers') +local previewers = require('telescope.previewers') local sorters = require('telescope.sorters') local utils = require('telescope.utils') @@ -46,11 +45,17 @@ local builtin = {} builtin.git_files = function(opts) opts = opts or {} + local show_untracked = utils.get_default(opts.show_untracked, true) + if opts.cwd then opts.cwd = vim.fn.expand(opts.cwd) else --- Find root of git directory and remove trailing newline characters - opts.cwd = string.gsub(vim.fn.system("git rev-parse --show-toplevel"), '[\n\r]+', '') + opts.cwd = vim.fn.systemlist("git rev-parse --show-toplevel")[1] + + if not vim.fn.isdirectory(opts.cwd) then + error("Not a working directory for git_files:", opts.cwd) + end end -- By creating the entry maker after the cwd options, @@ -60,7 +65,7 @@ builtin.git_files = function(opts) pickers.new(opts, { prompt_title = 'Git File', finder = finders.new_oneshot_job( - { "git", "ls-tree", "--full-tree", "-r", "--name-only", "HEAD" }, + { "git", "ls-files", "--exclude-standard", "--cached", show_untracked and "--others" }, opts ), previewer = previewers.cat.new(opts), @@ -412,6 +417,72 @@ builtin.command_history = function(opts) }):find() end +builtin.vim_options = function(opts) + opts = opts or {} + + -- Load vim options. + local vim_opts = loadfile(utils.data_directory() .. path.separator .. 'options' .. path.separator .. 'options.lua')().options + + pickers.new(opts, { + prompt = 'options', + finder = finders.new_table { + results = vim_opts, + entry_maker = make_entry.gen_from_vimoptions(opts), + }, + -- TODO: previewer for Vim options + -- previewer = previewers.help.new(opts), + sorter = sorters.get_fzy_sorter(), + attach_mappings = function(prompt_bufnr, map) + local edit_option = function() + local selection = actions.get_selected_entry(prompt_bufnr) + local esc = "" + + + if vim.fn.mode() == "i" then + -- TODO: don't make this local + esc = vim.api.nvim_replace_termcodes("<esc>", true, false, true) + end + + -- TODO: Make this actually work. + + -- actions.close(prompt_bufnr) + -- vim.api.nvim_win_set_var(vim.fn.nvim_get_current_win(), "telescope", 1) + -- print(prompt_bufnr) + -- print(vim.fn.bufnr()) + -- vim.cmd([[ autocmd BufEnter <buffer> ++nested ++once startinsert!]]) + -- print(vim.fn.winheight(0)) + + -- local prompt_winnr = vim.fn.getbufinfo(prompt_bufnr)[1].windows[1] + -- print(prompt_winnr) + + -- local float_opts = {} + -- float_opts.relative = "editor" + -- float_opts.anchor = "sw" + -- float_opts.focusable = false + -- float_opts.style = "minimal" + -- float_opts.row = vim.api.nvim_get_option("lines") - 2 -- TODO: include `cmdheight` and `laststatus` in this calculation + -- float_opts.col = 2 + -- float_opts.height = 10 + -- float_opts.width = string.len(selection.last_set_from)+15 + -- local buf = vim.fn.nvim_create_buf(false, true) + -- vim.fn.nvim_buf_set_lines(buf, 0, 0, false, {"default value: abcdef", "last set from: " .. selection.last_set_from}) + -- local status_win = vim.fn.nvim_open_win(buf, false, float_opts) + -- -- vim.api.nvim_win_set_option(status_win, "winblend", 100) + -- vim.api.nvim_win_set_option(status_win, "winhl", "Normal:PmenuSel") + -- -- vim.api.nvim_set_current_win(status_win) + -- vim.cmd[[redraw!]] + -- vim.cmd("autocmd CmdLineLeave : ++once echom 'beep'") + vim.api.nvim_feedkeys(string.format("%s:set %s=%s", esc, selection.name, selection.current_value), "m", true) + end + + map('i', '<CR>', edit_option) + map('n', '<CR>', edit_option) + + return true + end + }):find() +end + builtin.help_tags = function(opts) opts = opts or {} |
