google code-beautifer

星期二, 10月 17, 2017

mageia 6 中文輸入整合跟顯示方案

終於把mageia 6 裝起來。(之前不知為何進入桌面幾分鐘之內就會自動重開機,只好再重裝。)這一次改版終於把中文整合搞定到順手。我之前在mageia 5裝好堪用的hime 輸入法在這一次又沒法用了,但因為ibus新酷音這次可以整合到堪用,(甚至比windows 7/10+pime新酷音還好)所以就先回到ibus新酷音。這下可以一直停在新酷音輸入法不要動,然後用shift鍵快速做中英切換。這對中文使用者應該是要有的基本功能,但這幾年主流設計都是不同語系要切換用不同輸入法輸入,但是不同輸入法輸入之間切換的時間延遲代價比起在單一中文輸入法裏做中英模式切換來的高很多。所以問題很多都變成很難用,這次算是回復到應有的水準。不管是gnome-terminal 或 xed(取代gedit),輸入中文都沒問題。emacs還沒時間試。

不過呢,因為gnome-shell 語言列只能顯示目前哪個輸入法而不能顯示額外的狀態,所以我又裝了topicon plus 這個擴充讓ibus新酷音在狀態列顯示多餘的圖示,而這圖示的右下角在全形時會顯示橘色圓圈提醒。可以用把游標移到該處用滑鼠右鍵切換全半形,我覺的算是蠻合理的設計。但是有兩個問題:一是新的gnome shell 預設是使用wayland 的後端而非xorg 的後端,但是有一些舊程式一時還沒做出相容的措施,在登入使用wayland 後端topicon plus 就看不到該程式,比如說blueman 。這不是topicon plus的問題,因為ibus新酷音在兩者下登入都可以在topicon plus內正常顯示狀態顯示

另一個就是遠憂:GtkStatusIcon 在gnome-3.26 之後就要被Gtk+ 拿掉了。到時你想用topicon plus 來hack顯示狀態顯示都不成。所以下次改版前要把這問題解決。我查了一下,牽涉很多並不是很容易,不過也不是不行,後面有頭緒再來開一個專案跟分享一些想法。

星期二, 8月 01, 2017

EMACS usb 隨身碟版的配置

有時候想在外寫個無關機密的東西,但是不方便時時帶個筆電出門,湊巧有個安全的windows  機器在那可以讓你用USB碟可是你沒有管理員權限,這時在隨身帶的USB 碟上裝一套可攜版的 emacs 來寫寫文件不錯,不過既然都能跑emacs ,當然會想把自己家裡電腦整套.emacs 配置跟.emacs.d 裡面包山包海的套件也帶過來所以跟自家的環境一樣方便。這要怎麼做?其實不難:

可以在啟動emacs 的batch 檔裡設定環境參數:主要就是下面兩行
set HOME=%~dp0..\emacshome
"%~dp0\winbin\emacs-24.5\bin\runemacs.exe" %*

其中 %~dp0 就是windows 裡現行執行檔的現行目錄, 假如把這兩行寫到USB 碟上根目錄的一個檔案叫runEmacsUSB.bat,不管 USB 碟 是 e: 還是f:.... %~dp0 就是那個碟的根目錄,假定 USB 碟 是 e: 那 runEmacsUSB.bat 的位置在e:\runEmacsUSB.bat 而 %~dp0 就是 e:\
這個可以照自己喜好更動,我在  USB 碟 下開了一個子目錄 winbin ,然後又把整個emacs 隨身版拷貝到 winbin 子目錄下的emacs-24.5 裡,所以執行檔路徑就在e:\winbin\emacs-24.5\bin\runemacs.exe
這就是 runEmacsUSB.bat 第二行的前半段但是用雙引號刮起來 後半段就只是把參數全吃下傳給emacs
這樣這個在根目錄的批次檔就會去子目錄裡找到真正的執行檔
但是這個emacs 配置重點在第一行,他會指定 emacs 的家目錄 ,我是在USB 碟根目錄下開了一個子目錄叫emacshome ,然後把 .emacs 設定檔跟 .emacs.d 目錄全拷貝過去emacshome 之下,這下執行 runEmacsUSB.bat 就可以在USB 碟上跑全套 emacs 服務,在電腦上看大螢幕寫東西的爽度不是用手機可以比擬的

順帶一提,我試過emacs 24 跟25 版,在windows 10上某機器上, 25 版對我特製化的程式碼字型設定顯示不佳,會糊糊的。但是24 版不會,所以為了相容性我就沒有跑25 版

星期四, 6月 08, 2017

emacs 裡要快速跳躍記憶文件位置

編輯超過一千行的程式,要從不管是開頭或結尾跳到中間都會蠻痛苦的。當然emacs 也可以下指令一次跳好幾頁,但是要是不知道正確的數量一次到位,也是很麻煩,這時候需要有個好方法來快速跳躍:比如說在事情沒做完的位置先留個書籤,就可以先跑到其他的地方編輯(比如說回頭去修改定義,或前一次叫用的地方改個幾行),改完再按一個鍵跑回來
理論上要是cedet 可以辨識你的程式語言語法的話,應該是不太需要用記憶程式位置,不過有時候就是得在一些cedet 不是支援很好的文件裡跳來跳去作編輯,這時記憶程式位置就很有用

emacs 裡要記憶位置可以用register 或bookmark來完成:
register有個缺點: 一旦關掉emacs 這些記憶就被清掉,而且位置標籤名只能用單一字母。但是對於臨時要用的再方便不過,但是用 bookmark的話位置標籤名會一直記住,且位置標籤名可以取一個很長的名稱,比較不常用的位置這樣記會比較適合
用bookmark 的話,假如對某個檔是第一次叫用,預設的標籤名就是目前檔名,假如是針對多個檔案這當然是方便,但是對在同一個檔案裡跳來跳去就不便。

視這個變數對於修改的本質,我自己是這樣工作:假如是臨時要在一個檔案跳來跳去,而且一旦改完這個位置就不須需要記憶的,我用register 來處裡,位置名就取1, 2, 3, 4  ....
但是對於久久用一下的就用bookmark,當然bookmark 也是可以用單一字母來當標籤名
所以我通常都用bookmark 來處理,就像前面說的:短期記憶就用1 2 3 4 命名,需要長期記憶的再取個有意義方便回想的名稱
我有在.emacs設定下綁定兩個熱鍵F9跟 F12 來當設置書籤 跟跳到書籤去
(global-set-key (kbd "") 'bookmark-set)
(global-set-key (kbd "") 'bookmark-jump)

此外我有搭配hide-show mode ,先把目前不會去處理的一些副程式的細節收藏起來,真的要用時再打開。這樣編輯處理大程式就更清爽靈活

星期三, 6月 07, 2017

用 windows版emacs輸入中文

忘了是 23 版還是24 版之後的emacs 加入了unicode 支援,所以在新的winodws 上輸入中文還是改用unicode 編碼吧

得先安裝unicode-fonts套件
然後把這兩行加到.emacs
(require 'unicode-fonts)
(unicode-fonts-setup)

在windows 下.emacs 他的路徑要放在\User\使用者名稱\AppData\Roaming\之下 (怪異的是我照新的方式在.emacs.d下設置init.el 沒用 )

中文輸入法我目前是用pime ,不過pime 1.10 或0.16對emacs 都有個問題:在按enter 之前,選字buffer 不會出現,但是按enter後選字buffer 的內容會正確送到應用程式裡
可是在其他編輯程式如emeditor下  pime都沒有問題

然後目前cygwin mate desktop下我沒有辦法輸入中文,可能跟它預設的ibus 輸入有關,
cygwin 版emacs其實可以用symbolic link 跟windows版emacs共用設定檔,但是額外安裝套件跟路徑得自己搞定

星期三, 5月 03, 2017

randr :多螢幕的空間配置變換

多螢幕的空間配置是門學問,因為螢幕通常是寬大於高,比較直覺的作法是把次螢幕放在主螢幕的上方,所以不用時時都頭抬的高高,有需要才抬頭,以gnome desktop 而言,他會把面板顯示鎖定放在主螢幕頂端,但是桌面的捷徑因為跟著桌面的左上角起開始排列,他們會跑到次螢幕去,

這用法一般工作還好但是有個問題,有些程式好像水土不服(比如說pluma 編輯器):除非你要是在次螢幕下進行使用pluma開啟檔案選單,不然的話,會發現pluma在主螢幕下進行的檔案開啟選單行為會很怪異,(基本上要是選單很長的話,他不會往下列而是往上列,但是因為Gnome shell 的面板taskbar 放在主螢幕頂端,他就認為到頂了就切掉而不會去利用主螢幕面板顯示更上方的次螢幕,所以明明螢幕空間很多,選單卻擠在一起)不過不是所有程式都是這樣,我認為是pluma 沒設計的很周全,不過gedit 被改到我很不順手,三不五時除了emacs 外我還是得用pluma寫東西。所以我是這樣設定:

一般需要專心debug 很長的程式之類工作而不需做檔案開啟之時,把雙螢幕切到上下並列的配置,不然才就是左右(而且以左邊的主螢幕為主)
要切換可以用Arandr ,用他的GUI寫兩個設置檔:一個是上下並列的配置,一個是左右並列的配置。這暫時可以解決,但還不夠好:因為每次切換要先開Arandr ,然後開啟設置檔,再點執行....需要很多鍵很慢。理論上Arandr 可以配置綁定某一快捷鍵給某一螢幕設置檔,但是0.17 版只支援metacity ,所以我在改成用mutter 的gnome shell 上按了設置的快捷鍵是沒有用的。
所以後來我寫了兩個執行檔,內容分別是
xrandr --output DVI-I-3 --right-of DVI-I-2
xrandr --output DVI-I-3 --above DVI-I-2
然後寫了兩個gnome 的桌面捷徑去分別執行。想知道螢幕的代碼可以用不加任何參數去執行 xrandr  比如說這是我在某電腦的執行結果,可以看到 4 個介面 DVI-I-XXX 只執行了兩個,如何配置就看個人
$ xrandr
DVI-I-0 disconnected (normal left inverted right x axis y axis)
DVI-I-1 disconnected (normal left inverted right x axis y axis)
DVI-I-2 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
   1680x1050     59.95*+
   1440x900      74.98    59.89 
   1360x765      60.00 
   1280x1024     75.02    60.02 
   1280x960      60.00 
   1280x720      60.00 
   1152x864      75.00 
   1024x768      75.03    70.07    60.00 
   800x600       75.00    72.19    60.32    56.25 
   640x480       75.00    72.81    59.94 
DVI-I-3 connected 1440x900+1680+0 (normal left inverted right x axis y axis) 408mm x 255mm
   1440x900      59.89*+  74.98 
   1280x1024     75.02    60.02 
   1152x864      75.00 
   1024x768      75.03    70.07    60.00 
   800x600       75.00    72.19    60.32    56.25 
   640x480       75.00    72.81    59.94 

在從睡眠模式醒來後,或是鎖定螢幕一陣子後,有時候會發生螢幕的桌布花屏,偏移或解析度錯誤的情形,一個方式是用alt -F2 去強迫重畫桌面,重新啟動rAndr 也是可以解決
   
一些設置可以去參考
http://www.thinkwiki.org/wiki/Xorg_RandR_1.2