📄 edit.cpp
字号:
#include "stdafx.h"
#include "edit.h"
#include "Vt100Disp.h"
#include "screen.h"
extern int g_iArrPara[50]; //参数数组
extern struct struScreen struScrMsp;
extern CharStru ScreenBuf[24][132];
extern int iWidth;
//extern ClearScreen();
//编辑****************************************
//插入方式
//CSI 4 h 插入方式:新显示字符使光标位置后的原来显示字符右移,移出边界的字符丢失。
int SetInsertMode()
{
return 0;
}
//替代方式
//CSI 4 l 替代方式:新显示字符替代光标位置字符显示。
int SetReplaceMode()
{
return 0;
}
//清除行
//CSI K或CSI 0 K 清除光标至行末字符,包括光标位置,行属性不受影响。
//CSI 1 K 清除行首至光标位置字符,包括光标位置,行属性不受影响。
//CSI 2 K 清除光标所在行的所有字符。
//清除光标至行末字符,包括光标位置,行属性不受影响。"\x1b[K",
//同上"\x1b[0K",
//清除行首至光标位置字符,包括光标位置,行属性不受影响。"\x1b[1K",
//清除光标所在行的所有字符"\x1b[2K",
int ClearRowK()
{
ClearBuf(struScrMsp.iYPos,struScrMsp.iXPos ,struScrMsp.iYPos,iWidth-1);
Refresh(struScrMsp.iYPos,struScrMsp.iXPos ,struScrMsp.iYPos,iWidth-1);
return 0;
}
int ClearRow1K()
{
ClearBuf(struScrMsp.iYPos,0 ,struScrMsp.iYPos,struScrMsp.iXPos);
Refresh(struScrMsp.iYPos,0 ,struScrMsp.iYPos,struScrMsp.iXPos);
return 0;
}
int ClearRow2K()
{
ClearBuf(struScrMsp.iYPos,0 ,struScrMsp.iYPos,iWidth-1);
Refresh(struScrMsp.iYPos,0 ,struScrMsp.iYPos,iWidth-1);
return 0;
}
//清除屏幕
//CSI J或CSI 0 J 清除从光标至屏末字符,整行被清的行属性变成单宽单高。
//CSI 1 J 清除从屏首至光标字符,整行被清的行属性变成单宽单高。
//CSI 2 J 清除整个屏幕,行属性变成单宽单高,光标位置不变。
//清除从光标至屏末字符,整行被清的行属性变成单宽单高"\x1b[J",
//同上"\x1b[0J",
//清除从屏首至光标字符,整行被清的行属性变成单宽单高"\x1b[1J",
//清除整个屏幕,行属性变成单宽单高,光标位置不变 "\x1b[2J",
int ClearScreenJ()
{
ClearScreen(0);
return 0;
}
int ClearScreen1J()
{
ClearScreen(1);
return 0;
}
int ClearScreen2J()
{
ClearScreen(2);
return 0;
}
//清除光标至行末的"可清除"字符,不影响其它字符和行属性"\x1b[?K",
//清除光标至行末的"可清除"字符,不影响其它字符和行属性"\x1b[?0K",
int ClearRowEK()
{
return 0;
}
//清除行首至光标位置的"可清除"字符,不影响其它字符和行属性"\x1b[?1K",
int ClearRowE1K()
{
return 0;
}
//清除光标所在行的所有"可清除"字符,不影响其它字符和行属性"\x1b[?2K",
int ClearRowE2K()
{
return 0;
}
//清除从光标至屏末的"可清除"字符,不影响其它字符和行属性"\x1b[?J",
//清除从光标至屏末的"可清除"字符,不影响其它字符和行属性"\x1b[?0J",
//清除从屏首至光标的"可清除"字符,不影响其它字符和行属性"\x1b[?1J",
//清除整个屏幕中的"可清除"字符,不影响其它字符和行属性"\x1b[?2J",
int ClearScreenEJ()
{
return 0;
}
int ClearScreenE1J()
{
return 0;
}
int ClearScreenE2J()
{
return 0;
}
//插入行
//CSI Pn L 从光标行起插入Pn行,如当前行至滚动区域末的行数
//小于Pn则插入行数取较小者。如果在滚动区域范围内插入,
//则光标下移,移出滚动区域的行内容丢失,光标定在行首。
//当光标不在滚动区域内时,该序列无效。
int InsertRow()
{
int i;
if (g_iArrPara[0]==0)
return 1;
struScrMsp.iTopRow =struScrMsp.iYPos ;
for (i=0;i<g_iArrPara[1];i++)
ScreenRollDown();
struScrMsp.iTopRow =0;
return 0;
}
//删除行
/*CSI Pn M 从光标行起删除Pn行,
如当前行至区域末的行数小于Pn则删除行数取较小者。
当前行被删除,光标以下在滚动区域内的行上移,
且在区域末添加空行,光标在行首。
当光标不在滚动区域内,则该序列无效。
*/
int DeleteRow()
{
int i;
if (g_iArrPara[0]==0)
return 1;
struScrMsp.iTopRow =struScrMsp.iYPos ;
for (i=0;i<g_iArrPara[1];i++)
ScreenRollUp();
struScrMsp.iTopRow =0;
return 0;
}
//字符删除
/*CSI Pn P 删除包括光标位置在内的Pn个字符,
光标右边的字符向左移动。
*/
int DeleteChar()
{
int i;
int iTrueRow;
if (g_iArrPara[0]==0)
return 1;
iTrueRow=(struScrMsp.iYPos +struScrMsp.iBaseRow)%24;
for(i=struScrMsp.iXPos;i<iWidth-g_iArrPara[1];i++)
{
ScreenBuf[iTrueRow][i].ch =ScreenBuf[iTrueRow][i+g_iArrPara[1]].ch ;
ScreenBuf[iTrueRow][i].iFan =ScreenBuf[iTrueRow][i+g_iArrPara[1]].iFan ;
ScreenBuf[iTrueRow][i].iType =ScreenBuf[iTrueRow][i+g_iArrPara[1]].iType ;
}
ClearBuf(iTrueRow,i,iTrueRow,iWidth-1);
Refresh(iTrueRow,struScrMsp.iYPos ,iTrueRow,iWidth-1);
return 0;
}
//字符插入
//CSI Pn @ 在光标位置插入Pn个空字符,光标右边的字符都向右移动。
int InsertChar()
{
int i;
int iTrueRow;
if (g_iArrPara[0]==0)
return 1;
iTrueRow=(struScrMsp.iYPos +struScrMsp.iBaseRow)%24;
for(i=struScrMsp.iXPos;i<iWidth-g_iArrPara[1];i++)
{
ScreenBuf[iTrueRow][i+g_iArrPara[1]].ch =ScreenBuf[iTrueRow][i].ch ;
ScreenBuf[iTrueRow][i+g_iArrPara[1]].iFan =ScreenBuf[iTrueRow][i].iFan ;
ScreenBuf[iTrueRow][i+g_iArrPara[1]].iType =ScreenBuf[iTrueRow][i].iType ;
}
ClearBuf(iTrueRow,struScrMsp.iXPos,iTrueRow,struScrMsp.iXPos+g_iArrPara[1]-1);
Refresh(iTrueRow,struScrMsp.iYPos ,iTrueRow,iWidth-1);
return 0;
}
//字符清除
//CSI Pn X 清除当前光标开始右边的Pn个字符,不影响光标位置。
int ClearChar()
{
// int i;
int iTrueRow;
if (g_iArrPara[0]==0)
return 1;
iTrueRow=(struScrMsp.iYPos +struScrMsp.iBaseRow)%24;
ClearBuf(iTrueRow,struScrMsp.iXPos ,iTrueRow,struScrMsp.iXPos +g_iArrPara[1]);
Refresh(iTrueRow,struScrMsp.iXPos ,iTrueRow,struScrMsp.iXPos +g_iArrPara[1]);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -