今天的 Tetralet 又在唧唧喳喳了



« 四月 2017 »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30






 

大會報告:為什麼沒辨法改變 LilyTerm 的大小?

Tetralet | 25 五月, 2008 17:08

gtk+2 裡,任何元件的重繪都可能會引發各元件的 "size-request""size-allocate" 事件。比如說,您改變了顯示的字型,同視窗裡的所有元件只好縮放其大小來適應這個變化,儘量滿足使用者的操作。

這本來是極為貼心的功能,但對 vte terminal 而言卻是個大災難。身為 terminal,就得永遠保持固定的行列大小,若您設定了 vte terminal 的大小為 80x24,您總不希望只是改變個字型,整個畫面就跟著亂掉吧?但 gtk+2 的作法讓事情變得非常複雜。

這也就是為什麼所有的 vte terminal based 的程式多多少少都有這方面的問題。像 roxterm 在單一 tab 的狀況下,theme 的改變會改變到 vte terminal 的大小。新版的 xfce4-terminal 的程式碼應該是來自 roxterm 的,但它在快速新增/刪除 tab 時,vte terminal 的大小也會隨之縮小。而其它 libvte based 的程式在此的表現就更糟了,有的只是新增/刪除 tab 就無法保持正確大小了,更別說是其它狀況了。

別誤以為說是因為這些開發者程式功力太差才解決不了這個問題。既然每個 libvte based 的程式或多或少都有類似的問題,就可以看出這個問題並非想像中簡單。

LilyTerm 所支援的『自動更新 cmdline 和 pwd』,會導致 LilyTerm 不定時重繪。因此在 LilyTerm 裡,想保持正確的 vte terminal 大小就更不容易了。尤其 gtk+2GtkLabel 元件在重繪時的行為又蠻怪的,明明大小根本沒變,卻還是引發 vte terminal 的 "size-request""size-allocate" 事件,讓 vte terminal 的大小在意料不到的情況下改變了。在此情況下,LilyTerm 想當然的得需要一堆額外的程式碼才能保持正確的 vte terminal 大小。

而最好的方法,就是即使引發了 "size-request""size-allocate" 事件,用不著任何程式碼 vte terminal 就會自動保持它應有的大小。但因為 vte terminal 的大小會自動保持,使用者也就無法隨意改變 LilyTerm 的大小了。因此又為了要讓使用者也可以用滑鼠來改變 LilyTerm 的大小,個人想到的方法是去偵測 GtkWindow"focus-in-event""focus-out-event" 事件,來決定是否要啟用『vte terminal 自動保持其應有的大小』功能。也就是唯有在 LilyTerm 失去了 focus 時,才能讓使用者改變大小。這個方法在多數的 Window Manager 下運作十分良好。

但有些 Window Manager,像是 fluxboxevilwm,並無法正常傳送出 "focus-in-event""focus-out-event" 訊號給 Gtk+2,因此在 fluxboxevilwm 裡,也受制於『vte terminal 會自動保持它應有的大小』,大小不能隨意改變。更正確得說,只能變大不能變小。

而若要讓無法正常傳送出 "focus-in-event""focus-out-event" 訊號的 fluxboxevilwm 也能改變大小的話,LilyTerm 就得付出額外的代價 - 重點是效能 - 來保持 vte terminal 的大小。因為程式實在無法辨別 vte terminal 的大小是由使用者用滑鼠拖拉才改變的,還是 gtk+ 在重繪時改變的,所以這段程式碼不怎麼好看,也很無意義。因而在魚與熊掌不可兼得的情況下,這段本來就寫好的程式碼只好廢棄了。

若是一直有類似的抱怨的話,LilyTerm 會在下一版把那段廢棄的程式碼拿回來,然後試著在不會嚴重影響效能的前提下改改看。但該不該為了一個小功能而犧牲效能實在很難讓人抉擇呀!

迴響

其實這個問題還好啦...

T大,我只是回報一下而已(有點像來亂的,歹勢)
其實對我的影響不大啦~沒有必要的話,就別花時間修了,感謝~ :)

[回應] winlin @ 25/05/2008, 17:31

Re: 大會報告:為什麼沒辨法改變 LilyTerm 的大小?

lunaterm 也有人用了…

[回應] caleb @ 25/05/2008, 23:20

Re: 大會報告:為什麼沒辨法改變 LilyTerm 的大小?

如果 lilyterm 的 geomety 採取和 roxterm 一樣的手法的話,其實 code 會少一點。但效能就...

我沒把握會寫得很好。

[回應] Tetralet @ 27/05/2008, 22:01

Re: winlin

已經找到更為帥氣的方式來設定 LilyTerm 的 geomety,經過測試應該是可行的,且在效能方面也幾乎不會造成什麼影響。因此,下一版的 LilyTerm 在 fluxbox 和 evilwm 應該不會再有 geometry 方面的問題了,敬請期待!

[回應] Tetralet @ 05/06/2008, 19:52

那裡找得到

ubuntu7.10沒內建

[回應] aa @ 06/06/2008, 17:32

LilyTerm 0.9.3 發佈!

本文主題中的 geometry 的問題已於 Lilyterm 0.9.3 中解決,解決方案比 gnome-terminal / roxterm / xfce4-terminal 都帥氣多了,請不妨試用,若有問題請不吝回報!

[回應] Tetralet @ 13/06/2008, 22:42

Re: 大會報告:為什麼沒辨法改變 LilyTerm 的大小?

感謝T大~
試過之後,新版在這方面是正常的!!!

另外,小弟有個問題想要請教您
如果我不用exit指令登出的話,而是按下icewm的關閉視窗按鈕來關閉lilyterm,
那麼這次在lilyterm裡操作過的指令history好像全部都會消失,
請問這個有什麼辦法可以解決嗎?
感謝~~~ :)

[回應] winlin @ 15/06/2008, 09:44

Re: winlin

這需要一點解釋。

若您在 roxterm 或 mlterm 上執行某些指令,像是 leafpad,然後用 bg 把它們丟到背景去執行。若您在此時又用了 Alt F4 關閉 roxterm/mlterm,你會發現 leafpad 也跟著被強制關閉了。

為了避免這個問題,若您不是用 exit 或 Ctrl D 來關閉 LilyTerm 的話,LilyTerm 會呼叫 kill() 強制關閉 bash,以避免所有背景程式連帶得被強制關閉。但缺點就是 bash 是被強制關閉的,所以它的 history 資訊就會遺失了。

我再想想是不是有什麼其它更好的解決方案。但看來並不會那麼簡單...

[回應] Tetralet @ 17/06/2008, 11:10

Re: 大會報告:為什麼沒辨法改變 LilyTerm 的大小?

話說這是被 evilvte 帶壞的 XD

不過背景程式不會被連帶關閉實在是個好功能。

[回應] guest @ 17/06/2008, 21:20

好個帥氣的方法 :D

這幾天我也在煩惱這 window resizing 的問題,最後的解決方法是利用 VTE 會固定 size 的特性,在『關鍵時刻』開關這功能,然後在這短暫的瞬間,透過提高在 GTK+ 內的 Priority,強制修復在開關這功能時所造成的變形。不過整個程式碼感覺很醜也不易理解就是了。

後來仔細再研究各家程式碼,發現 Lilyterm 方法有同工異妙之處,但細節做法不太一樣。利用 grab-focus 的確是很漂亮的做法。

[回應] Fred @ 19/06/2008, 17:55

nano無法關閉

使用nano的Ctrl+X無法退出nano

[回應] robert @ 17/07/2008, 11:53

Re: robert

可用 <Ctrl><`> 來暫時關閉 LilyTerm 所有的功能鍵。

[回應] Tetralet @ 17/07/2008, 15:26

lilyterm 配色

請問 lilyterm 如何能改變配色呢?

像 xterm 就能在 .Xdefaults……
! Red
*color1: #ff6565
*color9: #ff8d8d
! Green
*color2: #93d44f
*color10: #c8e7a8
! Yellow
*color3: #eab93d
*color11: #ffc123
! Blue
*color4: #204a87
*color12: #3465a4

找了很久都找不到方法,還是……不能改?
謝謝

[回應] kp01 @ 26/07/2008, 17:22

Re: kp01

目前 LilyTerm 並沒有實作這個功能。若順利的話,將會在下一版 (0.9.7) 中實作這個功能。

謝謝您的提議!

[回應] Tetralet @ 29/07/2008, 23:34

亂碼回報

Tetralet 大您好,

目前正在使用 LilyTerm,實在是很棒的軟體,謝謝你的辛勞。

今天發生一個不知道是不是錯誤的狀況,我正在用 cat 看一個編碼過的檔案,然後再回到提示字元後,就整個畫面都亂碼了,clear 清螢幕也沒用,路徑、指令通通亂碼,標題的路徑還是可以顯示,相關抓圖如下:http://img80.imageshack.us/my.php?image=lilytermbug20081015ud4.jpg

我是用 Ubuntu 8.04.1 Server + LXDE 的環境。

[回應] 沒有暱稱 @ 15/10/2008, 16:47

Re: 沒有暱稱

請(盲打)執行「reset」指令,或是【Menu】→【重置分頁的內容】即可。

[回應] Tetralet @ 15/10/2008, 19:27

authimage
驗證碼皆為英文大寫字母
僅輸入前4碼即可。後2碼是假的,欺敵用。
這是為了防制 Spam 而設計的。若造成您的不便還請見諒!
Accessible and Valid XHTML 1.0 Strict and CSS
Powered by LifeType - Design by BalearWeb