1.前言
2.使用方向鍵來實現游標左右移動
3.按兩下esc鍵退出程式
4.移動游標到行首
5.移動游標到行尾
6.總**
之前已經寫過一篇文章了:實現乙個簡單的行編輯器
實現的功能有:
1.按下大小寫字母或者數字的時候,顯示在螢幕上
2.可以使用退格鍵來刪除前乙個字元
3.可以使用del鍵來刪除一行
4.使用'['鍵來實現游標左移
5.使用']'鍵來實現游標右移
但是還是有很多不完善的地方。本篇文章修改以及新增了以下功能:
1.使用方向鍵'←'鍵來實現游標左移
2.使用方向鍵'→'鍵來實現游標右移
3.按兩下esc鍵退出程式
4.使用'['鍵來實現移動游標到行首
5.使用']'鍵來實現移動游標到行尾
並且在之前的文章中,採用的是putchar('\b');
實現游標左移,使用輸出當前字元實現游標右移。
在這篇文章中,將更改這種方法。
在之前的文章中提到過。方向鍵其實是一次性輸入了三個字元才組成的。
以下是對應關係:
上:0x1b 0x5b 0x41
下:0x1b 0x5b 0x42
左:0x1b 0x5b 0x44
右:0x1b 0x5b 0x43
del鍵:0x1b 0x5b 0x33 0x7e
其中,0x41、0x42、0x43、0x44分別就是大寫字母a、b、c、d。
在本篇文章中不實現上和下的功能。
//連續輸出三個字元實現左移游標
putchar(0x1b);
putchar(0x5b);
putchar(0x44);
//連續輸出三個字元實現右移游標
putchar(0x1b);
putchar(0x5b);
putchar(0x43);
在while迴圈中實現:
else if ( c == 0x1b )
else if ( c == 0x43 && p < len )
else continue;
}else continue;
}
這裡使用了乙個叫做狀態機的概念。
有興趣的可以去找找相關的資料了解一下。
只需要在上面的程式中加入一段**就行了。
順便將del鍵也改一下:
else if ( c == 0x1b )
else if ( c == 0x43 && p < len )
else if ( c == 0x33 )
else continue;
}else continue;
}else if ( c == 0x1b )
else continue;
}
使用'['鍵來實現移動游標到行首
else if ( c == '[' && p )
使用']'鍵來實現移動游標到行尾
else if ( c == ']' && p < len )
/* 設計完成乙個行編輯器
* 能夠接受使用者輸入,能倒退刪除,插入,移動游標等
*/#include #include #define oops(s, x)
void fun_set(struct termios *info, char set);//設定回顯位,設定緩衝
void fun_backspace();//實現退格功能
void fun_left();//實現游標左移
void fun_right();//實現游標右移
int main()
else if( c == 0x7f && p )
//2.將最後乙個元素刪除
putchar(' ');
putchar('\b');
len--;
p--;
//3.將游標移動到之前的位置
while( j-- > 0 && p-- )
fun_left();
}else if ( c == 0x1b )
else if ( c == 0x43 && p < len )
else if ( c == 0x33 )
else continue;
}else continue;
}else if ( c == 0x1b )
else continue;
}else if ( c == '[' && p )
else if ( c == ']' && p < len )
}fun_set( &info, 1 );//開啟回顯位,開啟緩衝
}void fun_set(struct termios *info, char set)
else
if ( tcsetattr(0, tcsanow, info) == -1 ) /* set attribs */
oops("tcsetattr",2);
}void fun_backspace()
void fun_left()
void fun_right()
實現乙個簡單的行編輯器
1.要求 2.開啟 關閉回顯和緩衝 3.顯示大小寫字母和數字 4.實現退格鍵 5.實現游標左右移動 6.實現del鍵刪除整行 7.總 但是行編輯器不能讓每個字元都輸出在螢幕上,有些鍵是要作為功能鍵來使用的,所以必須關閉回顯設定,讓我們自己來設計有選擇的輸出字元。二是在linux命令列的預設模式下,輸...
寫乙個簡單的技能編輯器(前言)
還有大叔的這篇也有參考價值 本人分享這個的初衷是經歷了一次直接強擼類arpg遊戲的痛苦,策劃直接給不確定的需求,美術不經過策劃直接給資源給程式,然後程式就是一邊要和策劃確定和執行策劃需求,一邊還要和美術對相應的美術資源,不行再返工,浪費了太多了專案時間,這就造成了中間策劃和美術的一些溝通的架空,本人...
行編輯器的簡易C 實現
說到行編輯器的實現,其實還是主要運用棧的結構特點,具體理論參考 資料結構 嚴蔚敏著 實現 如下 include using namespace std define max size 100 void lineeditor char c1,int length else if c1 i else i...