@ -1317,6 +1317,15 @@ fn push_jump(editor: &mut Editor) {
view . jumps . push ( jump ) ;
view . jumps . push ( jump ) ;
}
}
fn switch_to_last_accessed_file ( cx : & mut Context ) {
let alternate_file = cx . view ( ) . last_accessed_doc ;
if let Some ( alt ) = alternate_file {
cx . editor . switch ( alt , Action ::Replace ) ;
} else {
cx . editor . set_error ( "no last buffer" . to_owned ( ) )
}
}
pub fn goto_mode ( cx : & mut Context ) {
pub fn goto_mode ( cx : & mut Context ) {
if let Some ( count ) = cx . _count {
if let Some ( count ) = cx . _count {
push_jump ( cx . editor ) ;
push_jump ( cx . editor ) ;
@ -1338,6 +1347,7 @@ pub fn goto_mode(cx: &mut Context) {
match ( cx . doc ( ) . mode , ch ) {
match ( cx . doc ( ) . mode , ch ) {
( _ , 'g' ) = > move_file_start ( cx ) ,
( _ , 'g' ) = > move_file_start ( cx ) ,
( _ , 'e' ) = > move_file_end ( cx ) ,
( _ , 'e' ) = > move_file_end ( cx ) ,
( _ , 'a' ) = > switch_to_last_accessed_file ( cx ) ,
( Mode ::Normal , 'h' ) = > move_line_start ( cx ) ,
( Mode ::Normal , 'h' ) = > move_line_start ( cx ) ,
( Mode ::Normal , 'l' ) = > move_line_end ( cx ) ,
( Mode ::Normal , 'l' ) = > move_line_end ( cx ) ,
( Mode ::Select , 'h' ) = > extend_line_start ( cx ) ,
( Mode ::Select , 'h' ) = > extend_line_start ( cx ) ,
@ -2449,6 +2459,10 @@ pub fn jump_backward(cx: &mut Context) {
let ( view , doc ) = cx . current ( ) ;
let ( view , doc ) = cx . current ( ) ;
if let Some ( ( id , selection ) ) = view . jumps . backward ( view . id , doc , count ) {
if let Some ( ( id , selection ) ) = view . jumps . backward ( view . id , doc , count ) {
// manually set the alternate_file as we cannot use the Editor::switch function here.
if view . doc ! = * id {
view . last_accessed_doc = Some ( view . doc )
}
view . doc = * id ;
view . doc = * id ;
let selection = selection . clone ( ) ;
let selection = selection . clone ( ) ;
let ( view , doc ) = cx . current ( ) ; // refetch doc
let ( view , doc ) = cx . current ( ) ; // refetch doc