|
9 | 9 | --- - |MiniMisc.bench_time()| to benchmark function execution time.
|
10 | 10 | --- Useful in combination with `stat_summary()`.
|
11 | 11 | ---
|
| 12 | +--- - |MiniMisc.peek()| to peek a line by entering the linenr in cmdline. |
| 13 | +--- |
12 | 14 | --- - |MiniMisc.put()| and |MiniMisc.put_text()| to pretty print its arguments
|
13 | 15 | --- into command line and current buffer respectively.
|
14 | 16 | ---
|
@@ -108,6 +110,55 @@ MiniMisc.get_gutter_width = function(win_id)
|
108 | 110 | return vim.fn.getwininfo(win_id)[1].textoff
|
109 | 111 | end
|
110 | 112 |
|
| 113 | +--- Peek a line by entering the linenr in cmdline. |
| 114 | +MiniMisc.peek = function() |
| 115 | + local win_states = {} |
| 116 | + |
| 117 | + local function save_win_state(winnr) |
| 118 | + win_states[winnr] = { |
| 119 | + foldenable = vim.api.nvim_get_option_value('foldenable', { win = winnr }), |
| 120 | + cursorline = vim.api.nvim_get_option_value('cursorline', { win = winnr }), |
| 121 | + cursor = vim.api.nvim_win_get_cursor(winnr), |
| 122 | + } |
| 123 | + end |
| 124 | + |
| 125 | + local function restore_win_state(winnr) |
| 126 | + if not win_states[winnr] then return end |
| 127 | + |
| 128 | + vim.api.nvim_set_option_value('foldenable', win_states[winnr].foldenable, { win = winnr }) |
| 129 | + vim.api.nvim_set_option_value('cursorline', win_states[winnr].cursorline, { win = winnr }) |
| 130 | + vim.api.nvim_win_set_cursor(winnr, win_states[winnr].cursor) |
| 131 | + |
| 132 | + win_states[winnr] = nil |
| 133 | + end |
| 134 | + |
| 135 | + local goto_linenr = function(winnr, linenr) |
| 136 | + linenr = math.max(math.min(linenr, vim.api.nvim_buf_line_count(vim.api.nvim_win_get_buf(winnr))), 1) |
| 137 | + |
| 138 | + if not win_states[winnr] then save_win_state(winnr) end |
| 139 | + |
| 140 | + vim.api.nvim_set_option_value('foldenable', false, { win = winnr }) |
| 141 | + vim.api.nvim_set_option_value('cursorline', true, { win = winnr }) |
| 142 | + |
| 143 | + vim.api.nvim_win_set_cursor(winnr, { linenr, 1 }) |
| 144 | + |
| 145 | + vim.cmd('redraw') |
| 146 | + end |
| 147 | + |
| 148 | + vim.api.nvim_create_autocmd('CmdlineChanged', { |
| 149 | + pattern = '*', |
| 150 | + callback = function() |
| 151 | + local cmdline_str = vim.api.nvim_call_function('getcmdline', {}) |
| 152 | + if tonumber(cmdline_str) then goto_linenr(vim.api.nvim_get_current_win(), tonumber(cmdline_str)) end |
| 153 | + end, |
| 154 | + }) |
| 155 | + |
| 156 | + vim.api.nvim_create_autocmd('CmdlineLeave', { |
| 157 | + pattern = '*', |
| 158 | + callback = function() restore_win_state(vim.api.nvim_get_current_win()) end, |
| 159 | + }) |
| 160 | +end |
| 161 | + |
111 | 162 | --- Print Lua objects in command line
|
112 | 163 | ---
|
113 | 164 | ---@param ... any Any number of objects to be printed each on separate line.
|
|
0 commit comments