2012-11-11 60 views
2

我使用Term :: ReadLine,並且有一個奇怪的問題,我需要點擊向上箭頭兩次才能從addhistory檢索項目。這是我正在使用的腳本。Term :: ReadLine - 我需要點擊向上箭頭兩次檢索歷史

use Term::ReadLine; 

my $term = Term::ReadLine->new('Term1'); 
print $term->ReadLine."\n"; 

while (defined(my $cmd = $term->readline())) { 
    $term->addhistory($cmd) if $cmd =~ /\S/; 
} 

爲了測試,我會輸入一些「命令」,然後嘗試用向上箭頭檢索這些命令。我打了一次向上箭頭,最後一個項目立即出現,但是我需要在檢索每個後續項目之前按兩次向上箭頭。

我之前在一個正在處理的小項目中遇到過這個問題,並且遇到了一個具有相同問題的人。在解決這一問題的addhistory行修改如下:

$term->addhistory($cmd) if $cmd !~ /\S||\n/; 

它的工作讓我感動,直到Tanktalus在另一個問題我貼提出這。 Perl Term::ReadLine::Gnu Signal Handling Difficulties

他問「什麼是/ \ S || \ n /應該做什麼?」。好吧,讓我去找到那個網頁,這表明這是一個修復...是的...找不到它。所以,雖然我可以使它與我發佈的修改一起工作,但自A以來我有點卡住了。我不知道它爲什麼修復它,以及B.爲什麼我似乎是唯一一個遇到此問題的人?

任何幫助或建議,將不勝感激! :)

測試上面的腳本與以下版本:

Perl - 5.12.4 and 5.16.1 
Term::ReadLine::Gnu - 1.20 
Term::ReadLine::Perl - 1.0303 (Just tried it to make sure it wasn't Gnu) 
Term::ReadLine - 1.10 
+0

你正在使用什麼樣的終端,以及TERM設置的環境變量是什麼? – ysth

回答

5

/\S||\n/將總是一致的,所以你永遠不會被調用addhistory。如果$term->Features->{autohistory}是真的,那麼你不需要。

通過「擊中兩次向上箭頭」,你的意思是你每兩個向上箭頭向上移動歷史一次?如果是這樣,你不必要地加入歷史是罪魁禍首。只是完全刪除電話是適當的修復。

+0

非常感謝您指點我正確的方向!情況就是這樣,消除(第二次)添加歷史問題解決了我的問題。 :) –