@ -860,6 +860,7 @@ fn align_selections(cx: &mut Context) {
let transaction = Transaction ::change ( doc . text ( ) , changes . into_iter ( ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
fn goto_window ( cx : & mut Context , align : Align ) {
@ -1290,6 +1291,7 @@ fn replace(cx: &mut Context) {
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
} )
}
@ -1307,6 +1309,7 @@ where
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
fn switch_case ( cx : & mut Context ) {
@ -2113,6 +2116,7 @@ fn delete_selection_impl(cx: &mut Context, op: Operation) {
( range . from ( ) , range . to ( ) , None )
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
match op {
Operation ::Delete = > {
@ -2126,7 +2130,7 @@ fn delete_selection_impl(cx: &mut Context, op: Operation) {
}
#[ inline ]
fn delete_selection_insert_mode ( doc : & mut Document , view : & View, selection : & Selection ) {
fn delete_selection_insert_mode ( doc : & mut Document , view : & mut View, selection : & Selection ) {
let view_id = view . id ;
// then delete
@ -2134,6 +2138,7 @@ fn delete_selection_insert_mode(doc: &mut Document, view: &View, selection: &Sel
( range . from ( ) , range . to ( ) , None )
} ) ;
doc . apply ( & transaction , view_id ) ;
view . apply ( & transaction , doc ) ;
}
fn delete_selection ( cx : & mut Context ) {
@ -2230,6 +2235,7 @@ fn append_mode(cx: &mut Context) {
[ ( end , end , Some ( doc . line_ending . as_str ( ) . into ( ) ) ) ] . into_iter ( ) ,
) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
let selection = doc . selection ( view . id ) . clone ( ) . transform ( | range | {
@ -2530,6 +2536,7 @@ async fn make_format_callback(
let view = view_mut ! ( editor ) ;
if doc . version ( ) = = doc_version {
doc . apply ( & format , view . id ) ;
view . apply ( & format , doc ) ;
doc . append_changes_to_history ( view . id ) ;
doc . detect_indent_and_line_ending ( ) ;
view . ensure_cursor_in_view ( doc , scrolloff ) ;
@ -2617,6 +2624,7 @@ fn open(cx: &mut Context, open: Open) {
transaction = transaction . with_selection ( Selection ::new ( ranges , selection . primary_index ( ) ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
// o inserts a new line after each line with a selection
@ -2637,7 +2645,7 @@ fn normal_mode(cx: &mut Context) {
cx . editor . mode = Mode ::Normal ;
let ( view , doc ) = current ! ( cx . editor ) ;
try_restore_indent ( doc , view .id );
try_restore_indent ( doc , view );
// if leaving append mode, move cursor back by 1
if doc . restore_cursor {
@ -2654,7 +2662,7 @@ fn normal_mode(cx: &mut Context) {
}
}
fn try_restore_indent ( doc : & mut Document , view _id : ViewId ) {
fn try_restore_indent ( doc : & mut Document , view : & mut View) {
use helix_core ::chars ::char_is_whitespace ;
use helix_core ::Operation ;
@ -2673,18 +2681,19 @@ fn try_restore_indent(doc: &mut Document, view_id: ViewId) {
let doc_changes = doc . changes ( ) . changes ( ) ;
let text = doc . text ( ) . slice ( .. ) ;
let range = doc . selection ( view _ id) . primary ( ) ;
let range = doc . selection ( view . id) . primary ( ) ;
let pos = range . cursor ( text ) ;
let line_end_pos = line_end_char_index ( & text , range . cursor_line ( text ) ) ;
if inserted_a_new_blank_line ( doc_changes , pos , line_end_pos ) {
// Removes tailing whitespaces.
let transaction =
Transaction ::change_by_selection ( doc . text ( ) , doc . selection ( view _ id) , | range | {
Transaction ::change_by_selection ( doc . text ( ) , doc . selection ( view . id) , | range | {
let line_start_pos = text . line_to_char ( range . cursor_line ( text ) ) ;
( line_start_pos , pos , None )
} ) ;
doc . apply ( & transaction , view_id ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
}
@ -2999,6 +3008,7 @@ pub mod insert {
let ( view , doc ) = current ! ( cx . editor ) ;
if let Some ( t ) = transaction {
doc . apply ( & t , view . id ) ;
view . apply ( & t , doc ) ;
}
// TODO: need a post insert hook too for certain triggers (autocomplete, signature help, etc)
@ -3021,6 +3031,7 @@ pub mod insert {
indent ,
) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
pub fn insert_newline ( cx : & mut Context ) {
@ -3108,6 +3119,7 @@ pub mod insert {
let ( view , doc ) = current ! ( cx . editor ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
pub fn delete_char_backward ( cx : & mut Context ) {
@ -3202,6 +3214,7 @@ pub mod insert {
} ) ;
let ( view , doc ) = current ! ( cx . editor ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
lsp ::signature_help_impl ( cx , SignatureHelpInvoked ::Automatic ) ;
}
@ -3220,6 +3233,7 @@ pub mod insert {
)
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
lsp ::signature_help_impl ( cx , SignatureHelpInvoked ::Automatic ) ;
}
@ -3413,7 +3427,7 @@ enum Paste {
Cursor ,
}
fn paste_impl ( values : & [ String ] , doc : & mut Document , view : & View, action : Paste , count : usize ) {
fn paste_impl ( values : & [ String ] , doc : & mut Document , view : & mut View, action : Paste , count : usize ) {
let repeat = std ::iter ::repeat (
values
. last ( )
@ -3457,6 +3471,7 @@ fn paste_impl(values: &[String], doc: &mut Document, view: &View, action: Paste,
( pos , pos , values . next ( ) )
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
pub ( crate ) fn paste_bracketed_value ( cx : & mut Context , contents : String ) {
@ -3549,6 +3564,7 @@ fn replace_with_yanked(cx: &mut Context) {
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
}
}
@ -3572,6 +3588,7 @@ fn replace_selections_with_clipboard_impl(
} ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
doc . append_changes_to_history ( view . id ) ;
Ok ( ( ) )
}
@ -3642,6 +3659,7 @@ fn indent(cx: &mut Context) {
} ) ,
) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
fn unindent ( cx : & mut Context ) {
@ -3681,6 +3699,7 @@ fn unindent(cx: &mut Context) {
let transaction = Transaction ::change ( doc . text ( ) , changes . into_iter ( ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
fn format_selections ( cx : & mut Context ) {
@ -3728,6 +3747,7 @@ fn format_selections(cx: &mut Context) {
// );
// doc.apply(&transaction, view.id);
// view.apply(&transaction, doc);
}
}
@ -3783,6 +3803,7 @@ fn join_selections_inner(cx: &mut Context, select_space: bool) {
} ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
fn keep_or_remove_selections_impl ( cx : & mut Context , remove : bool ) {
@ -3936,6 +3957,7 @@ fn toggle_comments(cx: &mut Context) {
let transaction = comment ::toggle_line_comments ( doc . text ( ) , doc . selection ( view . id ) , token ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
exit_select_mode ( cx ) ;
}
@ -3992,6 +4014,7 @@ fn rotate_selection_contents(cx: &mut Context, direction: Direction) {
) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
fn rotate_selection_contents_forward ( cx : & mut Context ) {
@ -4488,6 +4511,7 @@ fn surround_add(cx: &mut Context) {
let transaction = Transaction ::change ( doc . text ( ) , changes . into_iter ( ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
} )
}
@ -4527,6 +4551,7 @@ fn surround_replace(cx: &mut Context) {
} ) ,
) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
} ) ;
} )
}
@ -4554,6 +4579,7 @@ fn surround_delete(cx: &mut Context) {
let transaction =
Transaction ::change ( doc . text ( ) , change_pos . into_iter ( ) . map ( | p | ( p , p + 1 , None ) ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
} )
}
@ -4729,6 +4755,7 @@ fn shell(cx: &mut compositor::Context, cmd: &str, behavior: &ShellBehavior) {
if behavior ! = & ShellBehavior ::Ignore {
let transaction = Transaction ::change ( doc . text ( ) , changes . into_iter ( ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
doc . append_changes_to_history ( view . id ) ;
}
@ -4792,6 +4819,7 @@ fn add_newline_impl(cx: &mut Context, open: Open) {
let transaction = Transaction ::change ( text , changes ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
/// Increment object under cursor by count.
@ -4885,6 +4913,7 @@ fn increment_impl(cx: &mut Context, amount: i64) {
let transaction = transaction . with_selection ( selection . clone ( ) ) ;
doc . apply ( & transaction , view . id ) ;
view . apply ( & transaction , doc ) ;
}
}