From 24885b1a1fd22dd29bb12d5a73898dae946eaca4 Mon Sep 17 00:00:00 2001 From: Valdemar Lorenzen Date: Tue, 20 Oct 2026 09:30:27 +0200 Subject: [PATCH] fix: enable Ctrl+Enter query execution --- TODO.md | 2 +- src/connection.rs | 1 + src/main.rs | 21 +++++++++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 44d7ff9..8f5ad1a 100644 --- a/TODO.md +++ b/TODO.md @@ -22,4 +22,4 @@ - [x] `line:col` indicator in the bottom-right status bar should never disappear but instead display "N/A" in that case. - [x] database type indicator should be moved down just left of the "line:col" indicator like in the attached image - [x] introduce vim navigation inside the query input field (`hjkl`, `w/b/e`, `0/^/$`, `gg/G`; bindings listed in `?`). -- [ ] bugfix: ctrl+enter current doesn't work for executing sql, only F5 does. \ No newline at end of file +- [x] bugfix: ctrl+enter current doesn't work for executing sql, only F5 does. \ No newline at end of file diff --git a/src/connection.rs b/src/connection.rs index b5bc0ba..28cb5af 100644 --- a/src/connection.rs +++ b/src/connection.rs @@ -341,6 +341,7 @@ fn draw_help(frame: &mut Frame, screen: Rect, offset: &mut u16) { gg / G First / last line\n\ Home/End Start / end of line in either mode\n\ F5 / Ctrl-Enter Execute query in either mode\n\ + Ctrl-Enter needs enhanced keyboard reporting; use F5 otherwise.\n\ Type / paste Enter SQL in Insert mode\n\ Enter Insert newline in Insert mode\n\ Backspace/Delete Remove text in Insert mode\n\ diff --git a/src/main.rs b/src/main.rs index 30d6d74..2ed1105 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,11 @@ mod sql; use std::{error::Error, io::IsTerminal, path::Path, process::ExitCode}; +use crossterm::event::{ + DisableBracketedPaste, EnableBracketedPaste, KeyboardEnhancementFlags, + PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags, +}; + type Result> = std::result::Result; const HELP: &str = r#"dbdash — read-only PostgreSQL and SQLite inspection @@ -65,6 +70,7 @@ Navigation: including quoted identifiers, literals, and multiline comments/strings as you type. F5 / Ctrl-Enter executes one SELECT/CTE on the current connection, showing up to 100 rows below. Results report truncation; use SQL LIMIT/OFFSET for more. + Ctrl-Enter needs terminal support for enhanced keyboard reporting; use F5 otherwise. Failed queries keep the previous results. Opening a relation restores browsing without clearing the query text. Query text is not saved across connections. q / Ctrl-C Quit outside the query editor (q inserts text only in INSERT) @@ -137,14 +143,21 @@ fn run() -> Result<()> { .transpose()?; let result = (|| { let mut terminal = ratatui::try_init()?; - crossterm::execute!(std::io::stdout(), crossterm::event::EnableBracketedPaste)?; + crossterm::execute!( + std::io::stdout(), + EnableBracketedPaste, + PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES) + )?; connection::run(&mut terminal, database) })(); - let paste_result = - crossterm::execute!(std::io::stdout(), crossterm::event::DisableBracketedPaste); + let restore_result = crossterm::execute!( + std::io::stdout(), + PopKeyboardEnhancementFlags, + DisableBracketedPaste + ); ratatui::restore(); result?; - paste_result?; + restore_result?; Ok(()) }