Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shuxiao9058/tabnine
An unofficial TabNine package for Emacs with TabNine Chat Supported
https://github.com/shuxiao9058/tabnine
capf chat company-mode emacs tabnine
Last synced: 7 days ago
JSON representation
An unofficial TabNine package for Emacs with TabNine Chat Supported
- Host: GitHub
- URL: https://github.com/shuxiao9058/tabnine
- Owner: shuxiao9058
- License: mit
- Fork: true (50ways2sayhard/tabnine-capf)
- Created: 2023-04-05T04:36:38.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-02-27T14:30:04.000Z (9 months ago)
- Last Synced: 2024-02-27T15:36:04.633Z (9 months ago)
- Topics: capf, chat, company-mode, emacs, tabnine
- Language: Emacs Lisp
- Homepage:
- Size: 23.9 MB
- Stars: 29
- Watchers: 0
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.org
- License: LICENSE
Awesome Lists containing this project
README
#+title: TabNine
[[https://melpa.org/#/tabnine][file:https://melpa.org/packages/tabnine-badge.svg]] [[https://github.com/shuxiao9058/tabnine/actions/workflows/melpazoid.yml][https://github.com/shuxiao9058/tabnine/actions/workflows/melpazoid.yml/badge.svg]]
An unofficial TabNine (with TabNine Chat supported) package for Emacs.
* Screen Recording
@@html:@@@@html:@@ *TabNine Complete* @@html:@@
[[file:./assets/screenshot-3.gif]]
@@html:@@@@html:@@@@html:@@ *TabNine Chat* @@html:@@
[[file:./assets/screenshot-4.gif]]
@@html:@@* Screenshot
@@html:@@@@html:@@ *Snippets displayed with overlay* @@html:@@
[[file:./assets/screenshot-1.png]]
@@html:@@@@html:@@@@html:@@ *Classic completions displayed with capf* @@html:@@
[[file:./assets/screenshot-2.png]]
@@html:@@** disable overlay display
If you want to use =capf= only, disable =tabnine-mode= .
* Setup
** Installation
*** Install TabNine package
TabNine is available on [[https://melpa.org/#/tabnine][Melpa]], you can install it with your favorite package manager.
@@html:@@@@html:@@ *Example for manual install* @@html:@@
- Install =tabnine=.
Clone or download this repository and add to your load path:
#+begin_src elisp
(add-to-list 'load-path "")
(require 'tabnine)
#+end_src- Other configurations, e.g. enable =tabnine-mode= in =prog-mode=.
#+begin_src elisp
(with-eval-after-load 'company
;; disable inline previews
(delq 'company-preview-if-just-one-frontend company-frontends))(with-eval-after-load 'tabnine
;; (kbd "TAB") is literal ctrl-I, (kbd ") is the actual tab key
(define-key tabnine-completion-map (kbd "TAB") #'tabnine-accept-completion)
(define-key tabnine-completion-map (kbd "") #'tabnine-accept-completion)(define-key tabnine-completion-map (kbd "M-f") #'tabnine-accept-completion-by-word)
(define-key tabnine-completion-map (kbd "M-") #'tabnine-accept-completion-by-line)(define-key tabnine-completion-map (kbd "C-g") #'tabnine-clear-overlay)
(define-key tabnine-completion-map (kbd "M-[") #'tabnine-next-completion)
(define-key tabnine-completion-map (kbd "M-]") #'tabnine-previous-completion))(add-hook 'prog-mode-hook #'tabnine-mode)
(add-hook 'kill-emacs-hook #'tabnine-kill-process)
#+end_src- Run =M-x tabnine-install-binary= to install the TabNine binary for your system.
@@html:@@@@html:@@@@html:@@ *Example for use-package (straight)* @@html:@@
#+begin_src elisp
(use-package tabnine
:commands (tabnine-start-process)
:hook (prog-mode . tabnine-mode)
:straight t
:diminish "⌬"
:custom
(tabnine-wait 1)
(tabnine-minimum-prefix-length 0)
:hook (kill-emacs . tabnine-kill-process)
:config
(add-to-list 'completion-at-point-functions #'tabnine-completion-at-point)
(tabnine-start-process)
:bind
(:map tabnine-completion-map
("" . tabnine-accept-completion)
("TAB" . tabnine-accept-completion)
("M-f" . tabnine-accept-completion-by-word)
("M-" . tabnine-accept-completion-by-line)
("C-g" . tabnine-clear-overlay)
("M-[" . tabnine-previous-completion)
("M-]" . tabnine-next-completion)))
#+end_src@@html:@@
@@html:@@@@html:@@ *Example for Doom Emacs* @@html:@@
- Add package definition to ~/.doom.d/packages.el:
#+begin_src elisp
(package! tabnine)
#+end_src- Configure tabnine in ~/.doom.d/config.el:
#+begin_src elisp
(use-package! tabnine
:hook ((prog-mode . tabnine-mode)
(kill-emacs . tabnine-kill-process))
:config
(add-to-list 'completion-at-point-functions #'tabnine-completion-at-point)
(tabnine-start-process)
:bind
(:map tabnine-completion-map
("" . tabnine-accept-completion)
("TAB" . tabnine-accept-completion)
("M-f" . tabnine-accept-completion-by-word)
("M-" . tabnine-accept-completion-by-line)
("C-g" . tabnine-clear-overlay)
("M-[" . tabnine-previous-completion)
("M-]" . tabnine-next-completion)))
#+end_src@@html:@@
@@html:@@@@html:@@ *Example for Spacemacs* @@html:@@
Edit your ~/.spacemacs:
#+begin_src elisp
;; ===================
;; dotspacemacs/layers
;; ===================;; add or uncomment the auto-completion layer
dotspacemacs-configuration-layers
'(
...
auto-completion
...
);; add tabnine to additional packages
dotspacemacs-additional-packages
'((tabnine));; ========================
;; dotspacemacs/user-config
;; ========================;; accept completion from tabnine and fallback to company
(with-eval-after-load 'company
;; disable inline previews
(delq 'company-preview-if-just-one-frontend company-frontends))(with-eval-after-load 'tabnine
(define-key tabnine-completion-map (kbd "TAB") #'tabnine-accept-completion)
(define-key tabnine-completion-map (kbd "") #'tabnine-accept-completion)(define-key tabnine-completion-map (kbd "M-f") #'tabnine-accept-completion-by-word)
(define-key tabnine-completion-map (kbd "M-") #'tabnine-accept-completion-by-line)(define-key tabnine-completion-map (kbd "C-g") #'tabnine-clear-overlay)
(define-key tabnine-completion-map (kbd "M-[") #'tabnine-next-completion)
(define-key tabnine-completion-map (kbd "M-]") #'tabnine-previous-completion))(add-hook 'prog-mode-hook 'tabnine-mode)
(add-hook 'kill-emacs-hook #'tabnine-kill-process)
#+end_src
@@html:@@*** Install TabNine binary
After installing the TabNine package, you should finish the installation by executing the interactive command =tabnine-install-binary=.
** TabNine configuration
The advanced features (e.g. advanced completions, TabNine Chat) require a =TabNine Pro= account. Use =tabnine-login= command to login your TabNine account.
** TabNine Chat predefined prompts
| Command | Prompt |
|-------------------------------------+-----------------------------------------------|
| tabnine-chat-explain-code | Explain the selected code |
| tabnine-chat-generate-test-for-code | Write tests for the selected code |
| tabnine-chat-document-code | Add documentation for the selected code |
| tabnine-chat-fix-code | Find errors in the selected code and fix them |* Customization
** tabnine-auto-balance
TabNine can automatically balance parentheses, by removing and adding closing parentheses after the cursor. See the examples [[https://github.com/zxqfl/TabNine/blob/master/HowToWriteAClient.md][here]].
* Default key bindings
** tabnine-mode-map
None.
** tabnine-completion-map
| Key | Action |
|--------------+-----------------------------------|
| TAB | tabnine-accept-completion |
| C-g | tabnine-clear-overlay |
| M-f | tabnine-accept-completion-by-word |
| M- | tabnine-accept-completion-by-line |
| M-[ | tabnine-previous-completion |
| M-] | tabnine-next-completion |** tabnine-chat-mode-map
| Key | Action |
|---------+-------------------|
| C-c RET | tabnine-chat-send |* Known Issues
** Heavy memory and CPU usage
- TabNine's local deep learning completion might be enabled by default. It is very CPU-intensive if your device can't handle it. You can check by typing "TabNine::config" in any buffer (your browser should then automatically open to TabNine's config page) and disable Deep TabNine Local (you will lose local deep learning completion). More details [[https://www.tabnine.com/blog/tabnine-memory-and-cpu-usage/][here]].
** ICON displayed error
If candidate icons of tabnine are displayed wrongly [[https://github.com/shuxiao9058/tabnine/issues/1][capf icon error]], try to set =kind-icon-mapping= for tabnine:
- With all-the-icons
#+begin_src emacs-lisp
(add-to-list 'kind-icon-mapping '(tabnine "ai" :icon "cloud" :face shadow) t)
#+end_src- With all-the-icons-nerd-fonts
#+begin_src emacs-lisp
(add-to-list 'kind-icon-mapping `(tabnine ,(nerd-icons-codicon "nf-cod-hubot") :face font-lock-warning-face) t)
#+end_src* Requirements
- Emacs 27.1 or later
* Thanks
Thanks to the great work of [[https://github.com/TommyX12][Tommy Xiang]], [[https://github.com/zerolfx/copilot.el][zerolfx]] and [[https://github.com/karthink][karthink]].
These projects helped me a lot:
https://github.com/TommyX12/company-tabnine
https://github.com/50ways2sayhard/tabnine-capf
https://github.com/zerolfx/copilot.el
https://github.com/karthink/gptel
* License
Licensed under GPLv3.