實現乙個簡單的行編輯器(優化)

2022-09-17 13:54:25 字數 2727 閱讀 9204

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...