summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrail Finder <wohilas@gmail.com>2025-12-04 12:41:49 +0300
committerGrail Finder <wohilas@gmail.com>2025-12-04 12:41:49 +0300
commitb0400612bb44fb26b11cbed30a7a781dd69477a8 (patch)
tree1cae8ca6bed27d892cf2d3d303e43bdc36300ddf
parent8f4d8e472221fc7e0a963c133d9eda1c1d310516 (diff)
Enha: bind fullscreen to f5
-rw-r--r--tui.go65
1 files changed, 33 insertions, 32 deletions
diff --git a/tui.go b/tui.go
index cf8e0b6..2087239 100644
--- a/tui.go
+++ b/tui.go
@@ -57,13 +57,13 @@ var (
[yellow]F2[white]: regen last
[yellow]F3[white]: delete last msg
[yellow]F4[white]: edit msg
-[yellow]F5[white]: toggle system
+[yellow]F5[white]: toggle fullscreen for input/chat window
[yellow]F6[white]: interrupt bot resp
[yellow]F7[white]: copy last msg to clipboard (linux xclip)
[yellow]F8[white]: copy n msg to clipboard (linux xclip)
[yellow]F9[white]: table to copy from; with all code blocks
[yellow]F10[white]: switch if LLM will respond on this message (for user to write multiple messages in a row)
-[yellow]F11[white]: import chat file
+[yellow]F11[white]: import json chat file
[yellow]F12[white]: show this help page
[yellow]Ctrl+w[white]: resume generation on the last msg
[yellow]Ctrl+s[white]: load new char/agent
@@ -73,7 +73,7 @@ var (
[yellow]Ctrl+o[white]: open image file picker
[yellow]Ctrl+p[white]: props edit form (min-p, dry, etc.)
[yellow]Ctrl+v[white]: switch between /completion and /chat api (if provided in config)
-[yellow]Ctrl+r[white]: start/stop recording from your microphone (needs stt server)
+[yellow]Ctrl+r[white]: start/stop recording from your microphone (needs stt server or whisper binary)
[yellow]Ctrl+t[white]: remove thinking (<think>) and tool messages from context (delete from chat)
[yellow]Ctrl+l[white]: rotate through free OpenRouter models (if openrouter api) or update connected model name (llamacpp)
[yellow]Ctrl+k[white]: switch tool use (recommend tool use to llm after user msg)
@@ -83,7 +83,7 @@ var (
[yellow]Ctrl+y[white]: list loaded RAG files (view and manage loaded files)
[yellow]Ctrl+q[white]: cycle through mentioned chars in chat, to pick persona to send next msg as
[yellow]Ctrl+x[white]: cycle through mentioned chars in chat, to pick persona to send next msg as (for llm)
-[yellow]Alt+5[white]: toggle fullscreen for input/chat window
+[yellow]Alt+5[white]: toggle system and tool messages display
[yellow]Alt+1[white]: toggle shell mode (execute commands locally)
=== scrolling chat window (some keys similar to vim) ===
@@ -684,30 +684,10 @@ func init() {
}
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
if event.Key() == tcell.KeyRune && event.Rune() == '5' && event.Modifiers()&tcell.ModAlt != 0 {
- fullscreenMode = !fullscreenMode
- focused := app.GetFocus()
- if fullscreenMode {
- if focused == textArea || focused == textView {
- flex.Clear()
- flex.AddItem(focused, 0, 1, true)
- } else {
- // if focus is not on textarea or textview, cancel fullscreen
- fullscreenMode = false
- }
- } else {
- // focused is the fullscreened widget here
- flex.Clear().
- AddItem(textView, 0, 40, false).
- AddItem(textArea, 0, 10, false).
- AddItem(position, 0, 2, false)
-
- if focused == textView {
- app.SetFocus(textView)
- } else { // default to textArea
- app.SetFocus(textArea)
- }
- }
- return nil
+ // switch cfg.ShowSys
+ cfg.ShowSys = !cfg.ShowSys
+ textView.SetText(chatToText(cfg.ShowSys))
+ colorText()
}
if event.Key() == tcell.KeyF1 {
// chatList, err := loadHistoryChats()
@@ -768,10 +748,31 @@ func init() {
return nil
}
if event.Key() == tcell.KeyF5 {
- // switch cfg.ShowSys
- cfg.ShowSys = !cfg.ShowSys
- textView.SetText(chatToText(cfg.ShowSys))
- colorText()
+ // toggle fullscreen
+ fullscreenMode = !fullscreenMode
+ focused := app.GetFocus()
+ if fullscreenMode {
+ if focused == textArea || focused == textView {
+ flex.Clear()
+ flex.AddItem(focused, 0, 1, true)
+ } else {
+ // if focus is not on textarea or textview, cancel fullscreen
+ fullscreenMode = false
+ }
+ } else {
+ // focused is the fullscreened widget here
+ flex.Clear().
+ AddItem(textView, 0, 40, false).
+ AddItem(textArea, 0, 10, false).
+ AddItem(position, 0, 2, false)
+
+ if focused == textView {
+ app.SetFocus(textView)
+ } else { // default to textArea
+ app.SetFocus(textArea)
+ }
+ }
+ return nil
}
if event.Key() == tcell.KeyF6 {
interruptResp = true