Remove unused query for cursor position reporting

We only query for the cursor position if either
1. if the terminal sends an XTGETTCAP response indicating it supports scroll
   forward (terminfo code indn)
2. if the terminal sends a mouse click event

In practice, the terminals that do either are also capable of reporting the
cursor position, so let's require that for now.

We could definitely make this optional, and degrade gracefully -- that's
what I originally intended.

But maybe we don't need it? Keeps things simpler. In future, we can add a
timeout, and print an error, to help debugging terminals.
This commit is contained in:
Johannes Altmanninger
2025-04-25 21:31:53 +02:00
parent 829709c9c4
commit 364d84e620
2 changed files with 7 additions and 14 deletions

View File

@@ -461,7 +461,7 @@ fn on_mouse_left_click(&mut self, position: ViewportPosition) {
FLOG!(reader, "Mouse left click", position);
self.request_cursor_position(
&mut Outputter::stdoutput().borrow_mut(),
Some(CursorPositionWait::MouseLeft(position)),
CursorPositionWait::MouseLeft(position),
);
}
}

View File

@@ -1436,17 +1436,12 @@ fn update_buff_pos(&mut self, elt: EditableLineTag, mut new_pos: Option<usize>)
true
}
pub fn request_cursor_position(
&mut self,
out: &mut Outputter,
wait: Option<CursorPositionWait>,
) {
if let Some(cursor_position_wait) = wait {
let mut wait_guard = self.blocking_wait();
assert!(wait_guard.is_none());
*wait_guard = Some(BlockingWait::CursorPosition(cursor_position_wait));
}
pub fn request_cursor_position(&mut self, out: &mut Outputter, wait: CursorPositionWait) {
let mut wait_guard = self.blocking_wait();
assert!(wait_guard.is_none());
*wait_guard = Some(BlockingWait::CursorPosition(wait));
out.write_command(QueryCursorPosition);
drop(wait_guard);
self.save_screen_state();
}
@@ -2200,8 +2195,6 @@ fn readline(&mut self, nchars: Option<NonZeroUsize>) -> Option<WString> {
out.begin_buffering();
// Query for kitty keyboard protocol support.
out.write_command(QueryKittyKeyboardProgressiveEnhancements);
// Query for cursor position reporting support.
self.request_cursor_position(&mut out, None);
out.write_command(QueryXtversion);
query_capabilities_via_dcs(out.by_ref(), self.parser.vars());
out.write_command(QueryPrimaryDeviceAttribute);
@@ -3817,7 +3810,7 @@ fn handle_readline_command(&mut self, c: ReadlineCmd) {
drop(wait_guard);
self.request_cursor_position(
&mut Outputter::stdoutput().borrow_mut(),
Some(CursorPositionWait::ScrollbackPush),
CursorPositionWait::ScrollbackPush,
);
return;
};