2012-06-28 24 views
1

我使用Ubuntu 12.04和八度:倍頻按Ctrl-C殺死編輯窗口

$ octave 
octave:1> _ 

設置我的編輯器的gedit:

octave:1> edit editor "gedit %s" 

我編輯功能:

octave:2> edit someFunction 

gedit按預期打開someFunction.m,並在gedit仍然打開文件時立即返回:

octave:3> _ 

我跑一些其他的長期運行的功能:

octave:3> runAllTests 

雖然runAllTests正在執行我按CTRL-C中斷它。

觀察到的行爲是runAllTests被中斷且gedit被終止。

預期的行爲是runAllTests被中斷且gedit不會被終止。

有沒有人知道如何在這種情況下停止CTRL-C殺死gedit?另外還有另一種方法來中斷runAllTests而不會終止gedit?

回答

2

設置:

edit editor "gedit %s &" 

原因八度的地方「在後臺」的編輯器,因此CTRL-C不影響它,並有預期的行爲。

0

嘗試:

edit mode async 

它指定了編輯的命令

0

不幸的是,使用命令行(octave-cli)處理後綴爲'&'的分叉進程是不夠的。

有關此問題的GNU Octave development webpage上有一個錯誤。

當然,這不僅是一個編輯器問題,而且任何新的分叉過程都會受到影響。例如

octave> system("$TERM&") 

創建一個新的窗口,該終端將通過後續<ctrl-c>被殺死。

我提出了一個基於shell的解決方法。這包括添加一個額外的「後臺分叉」層,它可以保護髮送到八度的信號的最終終端(或文本編輯器或其他)。簡而言之,我啓動了一個終端,在後臺啓動另一個終端,從中終止第一個終端(這樣它就不會打擾我們)。

創建可執行文件:

term-kill.sh 
----------------------------- 
#!/bin/sh 
$TERM& 
sleep 0.01 
kill $1 
----------------------------- 

(注意沒有第二終端沒有足夠的時間來從第一脫落後就會被殺死之前sleep命令)。然後,命令

octave> system("$TERM -e term-kill.sh $$&") 

創建一個終端不會被殺死。

打開一個文本編輯器,只需考慮可執行

term-edit-kill.sh 
------------------------ 
#!/bin/sh 
$TERM -e $EDITOR $1& 
sleep 0.01 
kill $2 
------------------------ 

,並通過

octave> EDITOR('$TERM -e term-edit-kill.sh %s $$') 

NB改變倍頻edit命令:我認爲你的系統知道如何找到term-kill.shterm-edit-kill.sh,並且變量$TERM$EDITOR存在並適合您的需求。終端仿真器必須支持-e選項。