From 4d0b638f7de11930a88933a80f4c7534677b4a79 Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Fri, 27 Mar 2026 09:43:19 -0400 Subject: [PATCH] prep: Fix increment script to auto-commit dirty worktree before version bump --- config.ini | 6 +++--- increment_and_push.sh | 39 ++++++++++++++++++++++++++++++++++----- src/gui_main.c | 34 ++++++++++++++++++++++++++++++++++ voice_commands.ini | 3 +-- 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/config.ini b/config.ini index 77ae408..b3e2184 100644 --- a/config.ini +++ b/config.ini @@ -11,20 +11,20 @@ hotkey=Ctrl+Alt+V type_delay_us=8000 max_record_seconds=30 # always-on VAD controls -always_on=1 +always_on=0 # legacy window size (unused by new VAD pipeline, kept for compatibility) always_on_window_ms=1400 # live level threshold (0.0 - 1.0) vad_peak_threshold=0.0460 # level must stay above threshold this long before speech starts -vad_trigger_ms=100 +vad_trigger_ms=153 # level must stay below threshold this long before speech ends vad_release_ms=300 # include this much pre-trigger audio in transcript segment vad_preroll_ms=500 # discard segments shorter than this -vad_min_speech_ms=250 +vad_min_speech_ms=692 # hard cap for one speech segment vad_max_speech_ms=15000 diff --git a/increment_and_push.sh b/increment_and_push.sh index a5fca4d..1874cc5 100755 --- a/increment_and_push.sh +++ b/increment_and_push.sh @@ -37,6 +37,10 @@ EXAMPLES: ./increment_and_push.sh -m "Add live debug indicators" ./increment_and_push.sh -M "Breaking config format update" ./increment_and_push.sh -r -m "Release minor update" + +NOTES: + - If the working tree is dirty, the script auto-commits pending changes first + as: prep: EOF } @@ -47,11 +51,36 @@ check_git_repo() { fi } -require_clean_worktree() { - if ! git -C "$ROOT_DIR" diff --quiet || ! git -C "$ROOT_DIR" diff --cached --quiet; then - print_error "Working tree is not clean. Commit or stash changes before running this script." - exit 1 +has_pending_changes() { + if ! git -C "$ROOT_DIR" diff --quiet; then + return 0 fi + if ! git -C "$ROOT_DIR" diff --cached --quiet; then + return 0 + fi + if [[ -n "$(git -C "$ROOT_DIR" ls-files --others --exclude-standard)" ]]; then + return 0 + fi + return 1 +} + +auto_commit_pending_changes() { + local message="$1" + + if ! has_pending_changes; then + return 0 + fi + + print_warning "Working tree is dirty. Auto-committing pending changes before version bump." + git -C "$ROOT_DIR" add -A + + if git -C "$ROOT_DIR" diff --cached --quiet; then + print_warning "No staged changes after auto-add; continuing." + return 0 + fi + + git -C "$ROOT_DIR" commit -m "prep: ${message}" >/dev/null + print_success "Committed pending changes: prep: ${message}" } latest_version_tag() { @@ -221,7 +250,7 @@ fi print_status "voice_linux increment and push" check_git_repo -require_clean_worktree +auto_commit_pending_changes "$COMMIT_MESSAGE" LATEST_TAG="$(latest_version_tag || true)" if [[ -z "$LATEST_TAG" ]]; then diff --git a/src/gui_main.c b/src/gui_main.c index 8a71244..b87339b 100644 --- a/src/gui_main.c +++ b/src/gui_main.c @@ -992,6 +992,26 @@ static unsigned int voice_cmd_mods_from_gdk(guint state) { return mods; } +static int is_modifier_keyval(guint keyval) { + switch (keyval) { + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: + case GDK_KEY_Control_L: + case GDK_KEY_Control_R: + case GDK_KEY_Alt_L: + case GDK_KEY_Alt_R: + case GDK_KEY_Meta_L: + case GDK_KEY_Meta_R: + case GDK_KEY_Super_L: + case GDK_KEY_Super_R: + case GDK_KEY_Hyper_L: + case GDK_KEY_Hyper_R: + return 1; + default: + return 0; + } +} + static gboolean on_window_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { (void)widget; gui_state_t *s = (gui_state_t *)user_data; @@ -999,6 +1019,20 @@ static gboolean on_window_key_press(GtkWidget *widget, GdkEventKey *event, gpoin if (!s->cmd_capture_armed) return FALSE; + if (event->keyval == GDK_KEY_Escape) { + s->cmd_capture_armed = 0; + s->cmd_capture_keyval = 0; + s->cmd_capture_mods = 0; + gtk_label_set_text(GTK_LABEL(s->cmd_capture_label), "Capture cancelled"); + gtk_button_set_label(GTK_BUTTON(s->cmd_capture_btn), "Capture"); + return TRUE; + } + + if (is_modifier_keyval(event->keyval)) { + gtk_label_set_text(GTK_LABEL(s->cmd_capture_label), "Hold modifier(s), then press a non-modifier key..."); + return TRUE; + } + s->cmd_capture_keyval = (unsigned int)event->keyval; s->cmd_capture_mods = voice_cmd_mods_from_gdk(event->state); s->cmd_capture_armed = 0; diff --git a/voice_commands.ini b/voice_commands.ini index 733661e..c79f73e 100644 --- a/voice_commands.ini +++ b/voice_commands.ini @@ -21,6 +21,5 @@ open bracket|text|[ close bracket|text|] open brace|text|{ close brace|text|} -over|key|65293:0 end of command|key|65293:3 -over.|text|Return +over.|key|65293:2