| Commit message (Collapse) | Author | Age | Files |
| |\
| |
| | |
fix: grok xai blocks without user agent, fixes #136 104
|
| | | |
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\ |
|
| | | |
|
| |/ |
|
| |\
| |
| | |
docs: update README.md
|
| |/
|
| |
seleciton -> selection
|
| |\
| |
| | |
allow multiple chats in keep open mode
|
| | | |
|
| | | |
|
| | | |
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| |\
| |
| | |
Fix print_info_message <Esc> issue
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I ran into an issue when first using this plugin where the
print_info_message function wasn't working correctly due to vim
misinterpreting the <Esc> sequence in `vim.command("normal \\<Esc>")` as
a series of individual characters rather than a single literal Escape
character. This resulted in the characters 'c>' being inserted into the
active buffer at the cursor location because the 's' in '<Esc>' was
being interpreted as a normal mode 's', causing it to enter insert mode,
and none of the info messages were being echoed properly. This was
frustrating as it was not easy to figure out why my commands weren't
working initially (turns out I hadn't configured my billing plan
correctly, d'oh).
Fix this by using a more robust way of sending the <Esc> character to
vim via `vim.command('call feedkeys("\<Esc>")')`.
The usage of double quotes inside the feedkeys() call is important
because it causes vim to treat the sequence as a proper escape sequence
rather than a series of individual characters (see :h feedkeys).
|
| | |
|
| | |
|
| |\
| |
| | |
increase token limit
|
| |/ |
|
| |\
| |
| | |
detect chat window in other tabs as well
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
First search for AI chat windows within the same tab and then within other tabs if none are found in the current tab.
It now prioritizes the reusing of an existing chat window that matches the '.aichat' filetype before considering opening a new one.
If there are no existing AI chat windows, the plugin will open a new chat window as a last resort.
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim:
- " reuse chat in active window or tab
+ " TODO: look for first active chat buffer. If .aichat file is used,
+ " then reuse chat in active window
- " allow .aichat files windows to be switched to, preferably on same tab
- let buffer_list_tab = tabpagebuflist(tabpagenr())
- let buffer_list_tab = filter(buffer_list_tab, 'getbufvar(v:val, "&filetype") ==# "aichat"')
-
- let buffer_list = []
- for i in range(tabpagenr('$'))
- call extend(buffer_list, tabpagebuflist(i + 1))
- endfor
- let buffer_list = filter(buffer_list, 'getbufvar(v:val, "&filetype") ==# "aichat"')
-
- if len(buffer_list_tab) > 0
- call win_gotoid(win_findbuf(buffer_list_tab[0])[0])
- elseif len(buffer_list) > 0
- call win_gotoid(win_findbuf(buffer_list[0])[0])
- else
- " open new chat window
- let l:open_conf = l:config['ui']['open_chat_command']
- call s:OpenChatWindow(l:open_conf)
- endif
+ " open new chat window
+ let l:open_conf = l:config['ui']['open_chat_command']
+ call s:OpenChatWindow(l:open_conf)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim:
-
- let l:chat_win_ids = win_findbuf(bufnr(s:scratch_buffer_name))
- if !empty(l:chat_win_ids)
- " TODO: look for first active chat buffer. If .aichat file is used,
- " then reuse chat in active window
- call win_gotoid(l:chat_win_ids[0])
+ let l:chat_win_id = bufwinid(s:scratch_buffer_name)
+ if l:chat_win_id != -1
+ " TODO: look for first active chat buffer, in case .aichat file is used
+ " reuse chat in active window
+ call win_gotoid(l:chat_win_id)
|
| |\ \
| | |
| | | |
automatically unset &paste also after failed command
|
| | | | |
|
| | |/ |
|
| |\ \
| |/
|/| |
Custom roles
|
| | | |
|
| | |\
| | |
| | | |
Ensure role config file exists and optional Vim source
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The application was restricted to loading role configurations only from
a predefined config file, which limited extensibility.
Enable dynamic role configuration by invoking a custom Vim function if
it is defined. This allows users to extend the role configurations
beyond the static file.
diff --git a/doc/vim-ai.txt b/doc/vim-ai.txt:
-The roles in g:vim_ai_roles_config_file are converted to a Vim dictionary.
-Optionally, additional roles can be added by defining a function VimAIRoleParser()
-whose output is a dictionary of the same format as g:vim_ai_roles_config_file.
-
diff --git a/py/roles.py b/py/roles.py:
-if vim.eval('exists("*VimAIRoleParser")'):
- roles.update(vim.eval('VimAIRoleParser()'))
-
diff --git a/py/utils.py b/py/utils.py:
- if vim.eval('exists("*VimAIRoleParser")'):
- roles.update(vim.eval('VimAIRoleParser()'))
-
|
| | |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The problem was that the application tried to load a roles configuration file without checking whether it actually exists, potentially leading to unhandled exceptions if the file is missing.
Ensure that the roles configuration file exists before attempting to read from it; raise an exception with a clear message if the file is not found.
diff --git a/py/roles.py b/py/roles.py:
-if not os.path.exists(roles_config_path):
- raise Exception(f"Role config file does not exist: {roles_config_path}")
-
|
| | | |
|
| | | |
|