From: John Hodge (sonata) Date: Mon, 27 May 2013 11:53:47 +0000 (+0800) Subject: Kernel/VTerm - Implimented cursor save/restore X-Git-Tag: rel0.15~292^2~7 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=cc3501e20d89f5e9db13bd874310bfb9983a35a6;p=tpg%2Facess2.git Kernel/VTerm - Implimented cursor save/restore --- diff --git a/KernelLand/Kernel/drv/vterm.h b/KernelLand/Kernel/drv/vterm.h index 39cc4386..5acb4640 100644 --- a/KernelLand/Kernel/drv/vterm.h +++ b/KernelLand/Kernel/drv/vterm.h @@ -62,6 +62,7 @@ struct sVTerm int AltWritePos; //!< Alternate write position short ScrollTop; //!< Top of scrolling region (smallest) short ScrollHeight; //!< Length of scrolling region + int SavedWritePos; //!< Saved cursor position (\e[s and \e[u) char EscapeCodeCache[16]; size_t EscapeCodeLen; diff --git a/KernelLand/Kernel/drv/vterm_vt100.c b/KernelLand/Kernel/drv/vterm_vt100.c index 1f344794..8ebd9bfd 100644 --- a/KernelLand/Kernel/drv/vterm_vt100.c +++ b/KernelLand/Kernel/drv/vterm_vt100.c @@ -228,7 +228,19 @@ void VT_int_ParseEscape_StandardLarge(tVTerm *Term, char CmdChar, int argc, int Term->ScrollTop = args[0]; Term->ScrollHeight = args[1] - args[0]; break; - + + // Save cursor position + case 's': + if( argc != 0 ) break; + Term->SavedWritePos = (Term->Flags & VT_FLAG_ALTBUF) ? Term->AltWritePos : Term->WritePos; + break; + + // Restore saved cursor position + case 'u': + if( argc != 0 ) break; + *((Term->Flags & VT_FLAG_ALTBUF) ? &Term->AltWritePos : &Term->WritePos) = Term->SavedWritePos; + break; + default: Log_Warning("VTerm", "Unknown control sequence '\\x1B[%c'", CmdChar); break;