2017-02-26 158 views
1

使用C代碼讀取一行文本,並允許使用TERMCAP例程(類似於「readline」庫)來移動和編輯光標。問題是:當一行或多行字符需要從行末擦除時,(1)將光標移至EOL併發出\b \b序列更有效;或(2),將光標移動到截斷點併發出一個「擦除到行尾」命令?不知道後者的命令是多麼「昂貴」,特別是在寬廣的終端上。任何人都知道什麼是權衡/指導方針?TUI文本編輯

+0

用\ b擦除不同於殺死到行尾。如果同一行中有兩個單詞,並且您想從第一個單詞中刪除一些字符,該怎麼辦?清除行結束可能會更快(在現代硬件中不重要),但會刪除第二個字。 – linuxfan

回答

1

它取決於輸出設備(終端)以及有多少字符正在被擦除。通常情況下,如果設備首先支持Erase-to-EOL,那麼它就在那裏,因爲它比執行一個或兩個以上的Erase-Single-Character操作要快。

除非您通過非常慢的連接進行操作,否則可能並不重要。早在上世紀八十年代,這種事情就成了一個問題,因爲我們經常工作在1200bps以上的連接等等。這也是爲什麼人們經常避開詛咒(3)並直接進入術語上限的原因。現在,通信和輸出設備通常比用戶的反應時間快得多,你可能經常無法完全重新繪製屏幕。

出於好奇,爲什麼要使用termcap呢?它在幾十年前的大多數UNIXy平臺上被terminfo所取代。更不用說像curses這樣的更高級庫的可用性了。

+0

好點。通過慢速連接重新繪製線條所需的時間將是唯一真正值得關注的問題,而這些日子可能不是問題。只是試圖在代碼中做一些優化來最大限度地減少光標移動。我想我會在行尾使用一個字符的擦除單字符;否則,備份和擦除到EOL。 – italia389

+0

我使用termcap系統調用(在macOS下的terminfo庫中實現),因爲我還沒有能夠獲得直接的terminfo調用。一旦我找出問題所在,我打算切換到terminfo。謝謝。 – italia389