mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-07 18:21:16 -03:00
Don't route query responses until we pop them from the input queue
This makes more sense, see also the next commit.
This commit is contained in:
@@ -340,12 +340,8 @@ pub enum ImplicitEvent {
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum QueryResponseEvent {
|
||||
/// Primary DA response.
|
||||
PrimaryDeviceAttribute,
|
||||
/// Handle mouse left click.
|
||||
MouseLeftClickContinuation(ViewportPosition, ViewportPosition),
|
||||
/// Push prompt to top.
|
||||
ScrollbackPushContinuation(usize),
|
||||
CursorPositionReport(ViewportPosition),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -760,7 +756,7 @@ pub fn function_set_status(&mut self, status: bool) {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq)]
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
pub enum CursorPositionQuery {
|
||||
MouseLeft(ViewportPosition),
|
||||
ScrollbackPush,
|
||||
@@ -1184,24 +1180,10 @@ fn parse_csi(&mut self, buffer: &mut Vec<u8>) -> Option<KeyEvent> {
|
||||
return invalid_sequence(buffer);
|
||||
};
|
||||
FLOG!(reader, "Received cursor position report y:", y, "x:", x);
|
||||
let query = self.blocking_query();
|
||||
use TerminalQuery::CursorPositionReport;
|
||||
let Some(CursorPositionReport(cursor_pos_query)) = &*query else {
|
||||
return None;
|
||||
};
|
||||
let continuation = match cursor_pos_query {
|
||||
CursorPositionQuery::MouseLeft(click_position) => {
|
||||
QueryResponseEvent::MouseLeftClickContinuation(
|
||||
ViewportPosition { x, y },
|
||||
*click_position,
|
||||
)
|
||||
}
|
||||
CursorPositionQuery::ScrollbackPush => {
|
||||
QueryResponseEvent::ScrollbackPushContinuation(y)
|
||||
}
|
||||
};
|
||||
drop(query);
|
||||
self.push_front(CharEvent::QueryResponse(continuation));
|
||||
let cursor_pos = ViewportPosition { x, y };
|
||||
self.push_front(CharEvent::QueryResponse(
|
||||
QueryResponseEvent::CursorPositionReport(cursor_pos),
|
||||
));
|
||||
return None;
|
||||
}
|
||||
b'S' => masked_key(function_key(4), None),
|
||||
|
||||
@@ -2539,11 +2539,21 @@ fn handle_char_event(&mut self, injected_event: Option<CharEvent>) -> ControlFlo
|
||||
.store(Capability::NotSupported as _, Ordering::Release);
|
||||
}
|
||||
}
|
||||
QueryResponseEvent::MouseLeftClickContinuation(cursor, click_position) => {
|
||||
self.mouse_left_click(cursor, click_position);
|
||||
}
|
||||
QueryResponseEvent::ScrollbackPushContinuation(cursor_y) => {
|
||||
self.screen.push_to_scrollback(cursor_y);
|
||||
QueryResponseEvent::CursorPositionReport(cursor_pos) => {
|
||||
let cursor_pos_query = match &*self.blocking_query() {
|
||||
Some(TerminalQuery::CursorPositionReport(cursor_pos_query)) => {
|
||||
cursor_pos_query.clone()
|
||||
}
|
||||
_ => return ControlFlow::Continue(()), // Rogue reply.
|
||||
};
|
||||
match cursor_pos_query {
|
||||
CursorPositionQuery::MouseLeft(click_position) => {
|
||||
self.mouse_left_click(cursor_pos, click_position);
|
||||
}
|
||||
CursorPositionQuery::ScrollbackPush => {
|
||||
self.screen.push_to_scrollback(cursor_pos.y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let ok = stop_query(self.blocking_query());
|
||||
|
||||
Reference in New Issue
Block a user