From 2121cb9eda4d133e15e100233be6222339f5398f Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Mon, 18 Dec 2023 17:38:27 +0200 Subject: [PATCH] feat(tx): completions wip --- .config/nvim/lua/custom/plugins/lsp.lua | 2 +- .config/nvim/lua/custom/plugins/telescope.lua | 22 +++++++------ completions/_tx | 24 ++++++++++++++ utils/src/tmux/cmd.ts | 33 ++++++++++++------- 4 files changed, 59 insertions(+), 22 deletions(-) create mode 100755 completions/_tx diff --git a/.config/nvim/lua/custom/plugins/lsp.lua b/.config/nvim/lua/custom/plugins/lsp.lua index 4f3ac720..8e29b317 100644 --- a/.config/nvim/lua/custom/plugins/lsp.lua +++ b/.config/nvim/lua/custom/plugins/lsp.lua @@ -186,7 +186,6 @@ cmp.setup { }, } return { - 'akinsho/flutter-tools.nvim', lazy = false, dependencies = { @@ -224,6 +223,7 @@ return { -- if empty dap will not stop on any exceptions, otherwise it will stop on those specified -- see |:help dap.set_exception_breakpoints()| for more info exception_breakpoints = {}, + ---@diagnostic disable-next-line: unused-local register_configurations = function(paths) require("dap").configurations.dart = { -- diff --git a/.config/nvim/lua/custom/plugins/telescope.lua b/.config/nvim/lua/custom/plugins/telescope.lua index 4b1b952e..38786fff 100644 --- a/.config/nvim/lua/custom/plugins/telescope.lua +++ b/.config/nvim/lua/custom/plugins/telescope.lua @@ -39,11 +39,11 @@ end vim.defer_fn(function() -- See `:help telescope.builtin` - vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) - vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) + vim.keymap.set('n', '?', builtin.oldfiles, { desc = '[?] Find recently opened files' }) + vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' }) vim.keymap.set('n', '/', function() -- You can pass additional configuration to telescope to change theme, layout, etc. - require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { + builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { winblend = 10, previewer = false, }) @@ -64,14 +64,16 @@ vim.defer_fn(function() builtin.grep_string({ search = term }) end) - vim.keymap.set('n', 'gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) - vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) - vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) - vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) - vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) + vim.keymap.set('n', 'gf', builtin.git_files, { desc = 'Search [G]it [F]iles' }) + vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) + vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) + vim.keymap.set('n', 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) + vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) vim.keymap.set('n', 'sG', live_grep_git_root, { desc = '[S]earch by [G]rep on Git Root' }) - vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) - vim.keymap.set('n', 'sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) + vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) + vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' }) + vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) + vim.keymap.set('n', 'st', "Telescope", { desc = '[S]earch [T]elescope Pickers' }) pcall(require('telescope').load_extension, 'fzf') pcall(require('telescope').load_extension, 'media_files') require('telescope').setup { diff --git a/completions/_tx b/completions/_tx new file mode 100755 index 00000000..d1618cc5 --- /dev/null +++ b/completions/_tx @@ -0,0 +1,24 @@ +#compdef tx + +names=($(tx ls -b)) + +if [[ -z $names ]]; then + return 1 +fi + +sessions=( +) +cmds=( + 'list:List all tmux configurations and sessions' + 'show:Show the tmux configuration file for a specific key' + 'edit:Edit the tmux configuration file' + 'remove:Remove a tmux workspace from the config file' + 'create:Create a new tmux session (temporary)' + 'attach:Attach to a tmux session' +) +for i in $names; do + sessions+=("$i") +done + +_describe 'session' sessions +# _describe 'cmds' cmds diff --git a/utils/src/tmux/cmd.ts b/utils/src/tmux/cmd.ts index b14ead2d..9af2655f 100644 --- a/utils/src/tmux/cmd.ts +++ b/utils/src/tmux/cmd.ts @@ -81,35 +81,46 @@ const showCmd = new MassargCommand({ }) .help({ bindOption: true, bindCommand: true }) -const listCmd = { +const listCmd = new MassargCommand({ name: 'list', aliases: ['ls'], description: 'List all tmux configurations and sessions', - run: async (opts: Opts) => { + run: async (opts) => { const configs = await getTmuxConfigFileInfo() const rawConfig = await getTmuxConfig() const config = Object.fromEntries( Object.entries(rawConfig).map(([key, item]) => [key, parseConfig(item)]), ) - const sessions = await getCommandOutput(opts, 'tmux ls') const keys = Object.keys(config).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) + if (opts.bare) { + console.log(keys.join('\n')) + return + } + const sessions = await getCommandOutput(opts, 'tmux ls') console.log('tmux sessions:\n') console.log(indent(sessions.output)) console.log('tmux config files:\n') console.log( ' - ' + - Object.entries(configs) - .map(([key, config]) => - config && key !== 'merged' ? key + ': ' + config.filepath : undefined, - ) - .filter(Boolean) - .join('\n - ') + - '\n', + Object.entries(configs) + .map(([key, config]) => + config && key !== 'merged' ? key + ': ' + config.filepath : undefined, + ) + .filter(Boolean) + .join('\n - ') + + '\n', ) console.log('tmux configurations:\n') console.log(' - ' + keys.join('\n - ')) }, -} +}) + .flag({ + name: 'bare', + aliases: ['b'], + description: + 'Show only the tmux session names, without the config or formatting (useful for scripting)', + }) + .help({ bindOption: true, bindCommand: true }) export type ConfigFileOpts = Opts & { local?: boolean