aeuaeo
This commit is contained in:
+38
-33
@@ -59,22 +59,24 @@ Your Doom Emacs now has a comprehensive gptel setup with:
|
|||||||
|
|
||||||
## ⌨️ Keybindings Reference
|
## ⌨️ Keybindings Reference
|
||||||
|
|
||||||
All gptel commands are under `SPC a` (AI prefix):
|
All gptel commands are under `SPC A` (uppercase A - AI prefix):
|
||||||
|
|
||||||
| Keybinding | Command | Description |
|
| Keybinding | Command | Description |
|
||||||
|------------|---------|-------------|
|
|------------|---------|-------------|
|
||||||
| `SPC a g` | `gptel` | Open gptel chat buffer |
|
| `SPC A g` | `gptel` | Open gptel chat buffer |
|
||||||
| `SPC a s` | `gptel-send` | Send prompt to LLM |
|
| `SPC A s` | `gptel-send` | Send prompt to LLM |
|
||||||
| `SPC a m` | `gptel-menu` | Open transient menu (change model, backend, etc) |
|
| `SPC A m` | `gptel-menu` | Open transient menu (change model, backend, etc) |
|
||||||
| `SPC a r` | `gptel-rewrite` | Rewrite selected region with AI |
|
| `SPC A r` | `gptel-rewrite` | Rewrite selected region with AI |
|
||||||
| `SPC a c` | `gptel-add` | Add region/buffer to context |
|
| `SPC A c` | `gptel-add` | Add region/buffer to context |
|
||||||
| `SPC a f` | `gptel-add-file` | Add file to context |
|
| `SPC A f` | `gptel-add-file` | Add file to context |
|
||||||
| `SPC a q` | `gptel-quick` | Quick lookup in popup (word/region) |
|
| `SPC A q` | `gptel-quick` | Quick lookup in popup (word/region) |
|
||||||
| `SPC a l` | Load buffer into session | Send whole buffer as context |
|
| `SPC A l` | Load buffer into session | Send whole buffer as context |
|
||||||
| `SPC a b` | Send whole buffer | Send entire buffer to AI |
|
| `SPC A b` | Send whole buffer | Send entire buffer to AI |
|
||||||
| `SPC a R` | Refactor region | Refactor selected code |
|
| `SPC A R` | Refactor region | Refactor selected code |
|
||||||
| `SPC a e` | Quick explain | Explain selected code quickly |
|
| `SPC A e` | Quick explain | Explain selected code quickly |
|
||||||
| `SPC a p` | Proofread text | Fix grammar/spelling in selection |
|
| `SPC A p` | Proofread text | Fix grammar/spelling in selection |
|
||||||
|
| `SPC A C` | Complete at point | Trigger AI code completion |
|
||||||
|
| `SPC A a` | Accept completion | Accept displayed ghost text completion |
|
||||||
|
|
||||||
### In gptel buffer:
|
### In gptel buffer:
|
||||||
- `C-c RET` - Send message
|
- `C-c RET` - Send message
|
||||||
@@ -82,7 +84,8 @@ All gptel commands are under `SPC a` (AI prefix):
|
|||||||
- `C-c C-k` - Abort request
|
- `C-c C-k` - Abort request
|
||||||
|
|
||||||
### Auto-completion (in programming modes):
|
### Auto-completion (in programming modes):
|
||||||
- `M-TAB` or `C-c TAB` - Trigger completion
|
- `M-TAB` or `C-c TAB` - Trigger completion (`gptel-complete`)
|
||||||
|
- `C-c C-a` - Accept completion (`gptel-accept-completion`)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -90,7 +93,7 @@ All gptel commands are under `SPC a` (AI prefix):
|
|||||||
|
|
||||||
Presets let you switch AI behavior for specific tasks:
|
Presets let you switch AI behavior for specific tasks:
|
||||||
|
|
||||||
1. Open gptel menu: `SPC a m` or `C-c C-c`
|
1. Open gptel menu: `SPC A m` or `C-c C-c`
|
||||||
2. Select "Preset" option
|
2. Select "Preset" option
|
||||||
3. Choose from:
|
3. Choose from:
|
||||||
- **coder** - Expert coding assistant (uses Claude Sonnet 4.5)
|
- **coder** - Expert coding assistant (uses Claude Sonnet 4.5)
|
||||||
@@ -99,7 +102,7 @@ Presets let you switch AI behavior for specific tasks:
|
|||||||
- **quick** - Quick, concise answers (uses fast Gemini Flash)
|
- **quick** - Quick, concise answers (uses fast Gemini Flash)
|
||||||
- **docs** - Documentation writer
|
- **docs** - Documentation writer
|
||||||
|
|
||||||
Or use `C-u SPC a s` to adjust settings on-the-fly!
|
Or use `C-u SPC A s` to adjust settings on-the-fly!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -107,15 +110,15 @@ Or use `C-u SPC a s` to adjust settings on-the-fly!
|
|||||||
|
|
||||||
### 1. Chat with AI
|
### 1. Chat with AI
|
||||||
```
|
```
|
||||||
SPC a g → Opens gptel buffer
|
SPC A g → Opens gptel buffer
|
||||||
Type question → Write your prompt
|
Type question → Write your prompt
|
||||||
C-c RET → Send (or SPC a s)
|
C-c RET → Send (or SPC A s)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Rewrite Code
|
### 2. Rewrite Code
|
||||||
```
|
```
|
||||||
1. Select code region (visual mode)
|
1. Select code region (visual mode)
|
||||||
2. SPC a r
|
2. SPC A r
|
||||||
3. Type instruction: "Add error handling"
|
3. Type instruction: "Add error handling"
|
||||||
4. Review changes and accept
|
4. Review changes and accept
|
||||||
```
|
```
|
||||||
@@ -123,23 +126,23 @@ C-c RET → Send (or SPC a s)
|
|||||||
### 3. Add Context (Multi-file awareness)
|
### 3. Add Context (Multi-file awareness)
|
||||||
```
|
```
|
||||||
1. Open reference file
|
1. Open reference file
|
||||||
2. SPC a c (adds buffer to context)
|
2. SPC A c (adds buffer to context)
|
||||||
3. Open gptel: SPC a g
|
3. Open gptel: SPC A g
|
||||||
4. Now AI knows about the reference file!
|
4. Now AI knows about the reference file!
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. Quick Explanations
|
### 4. Quick Explanations
|
||||||
```
|
```
|
||||||
1. Hover over word or select code
|
1. Hover over word or select code
|
||||||
2. SPC a q
|
2. SPC A q
|
||||||
3. See explanation in popup!
|
3. See explanation in popup!
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. Code Completion
|
### 5. Code Completion
|
||||||
```
|
```
|
||||||
Start typing code...
|
Start typing code...
|
||||||
M-TAB → Shows AI completion as ghost text
|
M-TAB or SPC A C → Request AI completion (shows as ghost text)
|
||||||
TAB → Accept completion
|
C-c C-a or SPC A a → Accept the completion
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -188,18 +191,18 @@ Want to run AI locally for privacy?
|
|||||||
|
|
||||||
1. **Save conversations**: gptel uses org-mode by default, so just save the buffer!
|
1. **Save conversations**: gptel uses org-mode by default, so just save the buffer!
|
||||||
|
|
||||||
2. **Switch models on-the-fly**: `C-u SPC a s` before sending
|
2. **Switch models on-the-fly**: `C-u SPC A s` before sending
|
||||||
|
|
||||||
3. **Context management**:
|
3. **Context management**:
|
||||||
- Add files in Dired: Mark files → `SPC a c`
|
- Add files in Dired: Mark files → `SPC A c`
|
||||||
- Remove context: `SPC a m` → Manage context
|
- Remove context: `SPC A m` → Manage context
|
||||||
|
|
||||||
4. **Org-mode features**:
|
4. **Org-mode features**:
|
||||||
- Each heading can be a separate conversation branch
|
- Each heading can be a separate conversation branch
|
||||||
- Set properties: `M-x gptel-org-set-properties`
|
- Set properties: `M-x gptel-org-set-properties`
|
||||||
- Set topic: `M-x gptel-org-set-topic`
|
- Set topic: `M-x gptel-org-set-topic`
|
||||||
|
|
||||||
5. **Custom instructions**: Use `SPC a r` on selected code and give specific instructions
|
5. **Custom instructions**: Use `SPC A r` on selected code and give specific instructions
|
||||||
|
|
||||||
6. **Programmatic use**: See helper functions at bottom of `ai.el` for examples
|
6. **Programmatic use**: See helper functions at bottom of `ai.el` for examples
|
||||||
|
|
||||||
@@ -210,7 +213,7 @@ Want to run AI locally for privacy?
|
|||||||
1. **Secure your API key** (see section above)
|
1. **Secure your API key** (see section above)
|
||||||
2. **Run:** `doom sync` to install packages
|
2. **Run:** `doom sync` to install packages
|
||||||
3. **Restart Emacs**
|
3. **Restart Emacs**
|
||||||
4. **Try:** `SPC a g` to start chatting!
|
4. **Try:** `SPC A g` to start chatting!
|
||||||
5. **Watch:** "Every LLM in Emacs, with gptel" video (17 min)
|
5. **Watch:** "Every LLM in Emacs, with gptel" video (17 min)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -235,10 +238,12 @@ Then: `M-x package-install RET transient RET`
|
|||||||
- Ensure proper encryption password
|
- Ensure proper encryption password
|
||||||
- Test: `(auth-source-pick-first-password :host "openrouter.ai")`
|
- Test: `(auth-source-pick-first-password :host "openrouter.ai")`
|
||||||
|
|
||||||
### Autocomplete not showing?
|
### Autocomplete not working?
|
||||||
- Enable manually: `M-x gptel-autocomplete-mode`
|
- Trigger manually: `M-x gptel-complete` or `M-TAB`
|
||||||
- Check if in prog-mode buffer
|
- Accept completion: `M-x gptel-accept-completion` or `C-c C-a`
|
||||||
- May need specific model configuration
|
- Note: There's no auto-mode - you trigger completions on-demand
|
||||||
|
- Check gptel is configured and working first (`SPC A g`)
|
||||||
|
- Adjust context size if needed (see `gptel-autocomplete-*-context-lines` variables)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,9 @@
|
|||||||
;; Move cursor to end of response automatically
|
;; Move cursor to end of response automatically
|
||||||
(add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
(add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
||||||
|
|
||||||
;; Keybindings
|
;; Keybindings - using SPC A for AI (uppercase to avoid conflicts)
|
||||||
(map! :leader
|
(map! :leader
|
||||||
(:prefix ("a" . "AI")
|
(:prefix ("A" . "AI/gptel")
|
||||||
:desc "gptel chat" "g" #'gptel
|
:desc "gptel chat" "g" #'gptel
|
||||||
:desc "gptel send" "s" #'gptel-send
|
:desc "gptel send" "s" #'gptel-send
|
||||||
:desc "gptel menu" "m" #'gptel-menu
|
:desc "gptel menu" "m" #'gptel-menu
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
(setq gptel-quick-use-context t)
|
(setq gptel-quick-use-context t)
|
||||||
|
|
||||||
(map! :leader
|
(map! :leader
|
||||||
(:prefix "a"
|
(:prefix "A"
|
||||||
:desc "Quick lookup" "q" #'gptel-quick)))
|
:desc "Quick lookup" "q" #'gptel-quick)))
|
||||||
|
|
||||||
;;; ============================================================================
|
;;; ============================================================================
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
:after gptel
|
:after gptel
|
||||||
:config
|
:config
|
||||||
(map! :leader
|
(map! :leader
|
||||||
(:prefix "a"
|
(:prefix "A"
|
||||||
:desc "Load buffer into session" "l" #'gptel-extensions-load-buffer
|
:desc "Load buffer into session" "l" #'gptel-extensions-load-buffer
|
||||||
:desc "Send whole buffer" "b" #'gptel-extensions-send-whole-buffer
|
:desc "Send whole buffer" "b" #'gptel-extensions-send-whole-buffer
|
||||||
:desc "Refactor region" "R" #'gptel-extensions-refactor)))
|
:desc "Refactor region" "R" #'gptel-extensions-refactor)))
|
||||||
@@ -106,18 +106,24 @@
|
|||||||
|
|
||||||
(use-package! gptel-autocomplete
|
(use-package! gptel-autocomplete
|
||||||
:after gptel
|
:after gptel
|
||||||
|
:commands (gptel-complete gptel-accept-completion)
|
||||||
:config
|
:config
|
||||||
;; Enable in programming modes
|
;; Configure context size
|
||||||
(add-hook 'prog-mode-hook #'gptel-autocomplete-mode)
|
(setq gptel-autocomplete-before-context-lines 100
|
||||||
|
gptel-autocomplete-after-context-lines 20
|
||||||
|
gptel-autocomplete-temperature 0.1)
|
||||||
|
|
||||||
;; Configure keybindings for autocomplete
|
;; Keybindings for autocomplete
|
||||||
(map! :map gptel-autocomplete-mode-map
|
(map! :leader
|
||||||
"M-TAB" #'gptel-autocomplete-complete
|
(:prefix "A"
|
||||||
"C-c TAB" #'gptel-autocomplete-complete)
|
:desc "Complete at point" "C" #'gptel-complete
|
||||||
|
:desc "Accept completion" "a" #'gptel-accept-completion))
|
||||||
|
|
||||||
;; Optional: Configure which model to use for completion
|
;; Also add convenient keybindings in prog-mode
|
||||||
;; (setq gptel-autocomplete-model 'google/gemini-2.5-flash)
|
(map! :map prog-mode-map
|
||||||
)
|
"M-TAB" #'gptel-complete
|
||||||
|
"C-c TAB" #'gptel-complete
|
||||||
|
"C-c C-a" #'gptel-accept-completion))
|
||||||
|
|
||||||
;;; ============================================================================
|
;;; ============================================================================
|
||||||
;;; Optional: Add Ollama for local models (commented out by default)
|
;;; Optional: Add Ollama for local models (commented out by default)
|
||||||
@@ -163,7 +169,7 @@
|
|||||||
|
|
||||||
;; Add keybindings for helper functions
|
;; Add keybindings for helper functions
|
||||||
(map! :leader
|
(map! :leader
|
||||||
(:prefix "a"
|
(:prefix "A"
|
||||||
:desc "Quick explain" "e" #'my/gptel-quick-explain-region
|
:desc "Quick explain" "e" #'my/gptel-quick-explain-region
|
||||||
:desc "Proofread text" "p" #'my/gptel-proofread-region))
|
:desc "Proofread text" "p" #'my/gptel-proofread-region))
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,17 @@
|
|||||||
|
|
||||||
(use-package! nix-mode
|
(use-package! nix-mode
|
||||||
:mode "\\.nix\\'"
|
:mode "\\.nix\\'"
|
||||||
|
:hook (nix-mode . lsp-deferred)
|
||||||
:config
|
:config
|
||||||
|
;; Configure nil LSP server
|
||||||
|
(after! lsp-mode
|
||||||
|
(add-to-list 'lsp-language-id-configuration '(nix-mode . "nix"))
|
||||||
|
(lsp-register-client
|
||||||
|
(make-lsp-client :new-connection (lsp-stdio-connection "nil")
|
||||||
|
:major-modes '(nix-mode)
|
||||||
|
:server-id 'nil-ls
|
||||||
|
:priority 0)))
|
||||||
|
|
||||||
;; Function to check if we're in a nixpkgs repository
|
;; Function to check if we're in a nixpkgs repository
|
||||||
(defun in-nixpkgs-repo-p ()
|
(defun in-nixpkgs-repo-p ()
|
||||||
(when-let ((root (or (locate-dominating-file default-directory ".git")
|
(when-let ((root (or (locate-dominating-file default-directory ".git")
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
;;lua ; one-based indices? one-based indices
|
;;lua ; one-based indices? one-based indices
|
||||||
markdown ; writing docs for people to ignore
|
markdown ; writing docs for people to ignore
|
||||||
;;nim ; python + lisp at the speed of c
|
;;nim ; python + lisp at the speed of c
|
||||||
nix ; I hereby declare "nix geht mehr!"
|
(nix +lsp) ; I hereby declare "nix geht mehr!"
|
||||||
;;ocaml ; an objective camel
|
;;ocaml ; an objective camel
|
||||||
(org +brain
|
(org +brain
|
||||||
+contacts
|
+contacts
|
||||||
|
|||||||
Reference in New Issue
Block a user