Add goto preview (#2982)
This commit is contained in:
parent
18f6ec7a8e
commit
bcba5d67f9
2 changed files with 33 additions and 9 deletions
|
@ -1196,18 +1196,41 @@ pub(super) fn goto_line_number(
|
|||
args: &[Cow<str>],
|
||||
event: PromptEvent,
|
||||
) -> anyhow::Result<()> {
|
||||
if event != PromptEvent::Validate {
|
||||
return Ok(());
|
||||
match event {
|
||||
PromptEvent::Abort => {
|
||||
if let Some(line_number) = cx.editor.last_line_number {
|
||||
goto_line_impl(cx.editor, NonZeroUsize::new(line_number));
|
||||
let (view, doc) = current!(cx.editor);
|
||||
view.ensure_cursor_in_view(doc, line_number);
|
||||
cx.editor.last_line_number = None;
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
PromptEvent::Validate => {
|
||||
ensure!(!args.is_empty(), "Line number required");
|
||||
cx.editor.last_line_number = None;
|
||||
}
|
||||
PromptEvent::Update => {
|
||||
if args.is_empty() {
|
||||
if let Some(line_number) = cx.editor.last_line_number {
|
||||
// When a user hits backspace and there are no numbers left,
|
||||
// we can bring them back to their original line
|
||||
goto_line_impl(cx.editor, NonZeroUsize::new(line_number));
|
||||
let (view, doc) = current!(cx.editor);
|
||||
view.ensure_cursor_in_view(doc, line_number);
|
||||
cx.editor.last_line_number = None;
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
let (view, doc) = current!(cx.editor);
|
||||
let text = doc.text().slice(..);
|
||||
let line = doc.selection(view.id).primary().cursor_line(text);
|
||||
cx.editor.last_line_number.get_or_insert(line + 1);
|
||||
}
|
||||
}
|
||||
|
||||
ensure!(!args.is_empty(), "Line number required");
|
||||
|
||||
let line = args[0].parse::<usize>()?;
|
||||
|
||||
goto_line_impl(cx.editor, NonZeroUsize::new(line));
|
||||
|
||||
let (view, doc) = current!(cx.editor);
|
||||
|
||||
view.ensure_cursor_in_view(doc, line);
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -643,7 +643,7 @@ pub struct Editor {
|
|||
/// The currently applied editor theme. While previewing a theme, the previewed theme
|
||||
/// is set here.
|
||||
pub theme: Theme,
|
||||
|
||||
pub last_line_number: Option<usize>,
|
||||
pub status_msg: Option<(Cow<'static, str>, Severity)>,
|
||||
pub autoinfo: Option<Info>,
|
||||
|
||||
|
@ -717,6 +717,7 @@ impl Editor {
|
|||
syn_loader,
|
||||
theme_loader,
|
||||
last_theme: None,
|
||||
last_line_number: None,
|
||||
registers: Registers::default(),
|
||||
clipboard_provider: get_clipboard_provider(),
|
||||
status_msg: None,
|
||||
|
|
Loading…
Reference in a new issue