mirror of https://github.com/helix-editor/helix
fix: add back unnecesserily removed content
parent
b83d120295
commit
0e5c160a47
|
@ -5627,7 +5627,63 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
|
||||||
let (view, doc) = current!(editor);
|
let (view, doc) = current!(editor);
|
||||||
let text = doc.text().slice(..);
|
let text = doc.text().slice(..);
|
||||||
|
|
||||||
let selection = doc.selection(view.id).clone().transform(|range| match ch {
|
let textobject_treesitter = |obj_name: &str, range: Range| -> Range {
|
||||||
|
let (lang_config, syntax) = match doc.language_config().zip(doc.syntax()) {
|
||||||
|
Some(t) => t,
|
||||||
|
None => return range,
|
||||||
|
};
|
||||||
|
textobject::textobject_treesitter(
|
||||||
|
text,
|
||||||
|
range,
|
||||||
|
objtype,
|
||||||
|
obj_name,
|
||||||
|
syntax.tree().root_node(),
|
||||||
|
lang_config,
|
||||||
|
count,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
if ch == 'g' && doc.diff_handle().is_none() {
|
||||||
|
editor.set_status("Diff is not available in current buffer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let textobject_change = |range: Range| -> Range {
|
||||||
|
let diff_handle = doc.diff_handle().unwrap();
|
||||||
|
let diff = diff_handle.load();
|
||||||
|
let line = range.cursor_line(text);
|
||||||
|
let hunk_idx = if let Some(hunk_idx) = diff.hunk_at(line as u32, false) {
|
||||||
|
hunk_idx
|
||||||
|
} else {
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
let hunk = diff.nth_hunk(hunk_idx).after;
|
||||||
|
|
||||||
|
let start = text.line_to_char(hunk.start as usize);
|
||||||
|
let end = text.line_to_char(hunk.end as usize);
|
||||||
|
Range::new(start, end).with_direction(range.direction())
|
||||||
|
};
|
||||||
|
|
||||||
|
let selection = doc.selection(view.id).clone().transform(|range| {
|
||||||
|
match ch {
|
||||||
|
'w' => textobject::textobject_word(text, range, objtype, count, false),
|
||||||
|
'W' => textobject::textobject_word(text, range, objtype, count, true),
|
||||||
|
't' => textobject_treesitter("class", range),
|
||||||
|
'f' => textobject_treesitter("function", range),
|
||||||
|
'a' => textobject_treesitter("parameter", range),
|
||||||
|
'c' => textobject_treesitter("comment", range),
|
||||||
|
'T' => textobject_treesitter("test", range),
|
||||||
|
'e' => textobject_treesitter("entry", range),
|
||||||
|
'p' => textobject::textobject_paragraph(text, range, objtype, count),
|
||||||
|
'm' => textobject::textobject_pair_surround_closest(
|
||||||
|
doc.syntax(),
|
||||||
|
text,
|
||||||
|
range,
|
||||||
|
objtype,
|
||||||
|
count,
|
||||||
|
),
|
||||||
|
'g' => textobject_change(range),
|
||||||
|
// TODO: cancel new ranges if inconsistent surround matches across lines
|
||||||
ch if !ch.is_ascii_alphanumeric() => textobject::textobject_pair_surround(
|
ch if !ch.is_ascii_alphanumeric() => textobject::textobject_pair_surround(
|
||||||
doc.syntax(),
|
doc.syntax(),
|
||||||
text,
|
text,
|
||||||
|
@ -5637,6 +5693,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
|
||||||
count,
|
count,
|
||||||
),
|
),
|
||||||
_ => range,
|
_ => range,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
doc.set_selection(view.id, selection);
|
doc.set_selection(view.id, selection);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue