有時候想在外寫個無關機密的東西,但是不方便時時帶個筆電出門,湊巧有個安全的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 版
開放世代("Generation Open"),特指以 "Open Content" (開放內容,包括知識,軟體與創作,...)為出發點的一種新的生活型態 但這裡強調的是群體長期的自由,而非個人一時的自由,因為個人一時的任意自由,是可以被有心人不公不義的用來去擷取個人利益而妨礙群體長期的自由,那不是大家所樂見的。
google code-beautifer
星期二, 8月 01, 2017
星期四, 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 ,先把目前不會去處理的一些副程式的細節收藏起來,真的要用時再打開。這樣編輯處理大程式就更清爽靈活
理論上要是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 "
(global-set-key (kbd "
此外我有搭配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共用設定檔,但是額外安裝套件跟路徑得自己搞定
得先安裝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共用設定檔,但是額外安裝套件跟路徑得自己搞定
星期六, 4月 22, 2017
把(emacs下的)程式輸出成 pdf 檔
有時候出門不方便帶筆電,但是得用手機或平板看之前寫的程式,能方便的轉PDF 就很重要,因為現在的機子很多不能跑Linux ,看大程式檔這種的事反而變得很麻煩。
我因為是在Linux下工作,所是用這個方案。https://genomeek.wordpress.com/2013/03/08/emarch-2-create-a-pdf-with-highlighted-code-source/
他會在你原檔案所在的目錄下產生一個XXX.pdf 的檔案,XXX 就是你的原檔名,比如說hello.c 就會產生hello.c.pdf
假如你有文字有做syntext highlight 這些顏色也會保留。預設值我覺得應付一般狀況還好,不過有時候可能會因個人所好想做一些調整,比如說轉成橫式輸出,或是把每頁的檔頭縮到最小,這就得在postsciprt 輸出時調參數,這以後再談。
要是在windows 下但又沒又裝cygwin 就比較麻煩,這篇的作法是靠GhostView,但安裝也算容易
https://www.emacswiki.org/emacs/PostScriptToPDF
我因為是在Linux下工作,所是用這個方案。https://genomeek.wordpress.com/2013/03/08/emarch-2-create-a-pdf-with-highlighted-code-source/
他會在你原檔案所在的目錄下產生一個XXX.pdf 的檔案,XXX 就是你的原檔名,比如說hello.c 就會產生hello.c.pdf
假如你有文字有做syntext highlight 這些顏色也會保留。預設值我覺得應付一般狀況還好,不過有時候可能會因個人所好想做一些調整,比如說轉成橫式輸出,或是把每頁的檔頭縮到最小,這就得在postsciprt 輸出時調參數,這以後再談。
要是在windows 下但又沒又裝cygwin 就比較麻煩,這篇的作法是靠GhostView,但安裝也算容易
https://www.emacswiki.org/emacs/PostScriptToPDF
星期六, 9月 03, 2016
.emacs 除錯
emacs 是個很強大的編輯器,把.emacs 設好就會展現強大功能,但要新手一下就能對.emacs除錯不易。
覺得emacs 起始頁說要你用emacs --debug-init真是胡扯,我照做了,啥都看不見。正解應該是(至少是在v24.4 之類在xwindows 下跑的emacs):不管錯誤先進emacs再說 ,然後用meta-x ielm進入 inferior lisp mode,下面幾乎就跟完整lisp 解譯發展環境一樣隨你跑,打入一個變數,他就會立即顯示他的值,然後去觀察這值為何沒有設定好。emacs 的外掛大部份時候其實就是把變數設正確就成了。理論上不跑 ielm 用熱鍵contrl-h v 也可以,可是變數一多,重複打熱鍵這就會很煩
而且既然是個lisp 解譯發展環境,可以拿來解決一些生活上的小問題,或拿來練練功也不錯
覺得emacs 起始頁說要你用emacs --debug-init真是胡扯,我照做了,啥都看不見。正解應該是(至少是在v24.4 之類在xwindows 下跑的emacs):不管錯誤先進emacs再說 ,然後用meta-x ielm進入 inferior lisp mode,下面幾乎就跟完整lisp 解譯發展環境一樣隨你跑,打入一個變數,他就會立即顯示他的值,然後去觀察這值為何沒有設定好。emacs 的外掛大部份時候其實就是把變數設正確就成了。理論上不跑 ielm 用熱鍵contrl-h v 也可以,可是變數一多,重複打熱鍵這就會很煩
而且既然是個lisp 解譯發展環境,可以拿來解決一些生活上的小問題,或拿來練練功也不錯
星期日, 11月 17, 2013
如何在gnome3下把珍貴的 super 鍵搶回來好在別處使用
PC 鍵盤的windows 鍵(osx 裏對應成command鍵 )在unix 下一般是被對應成 super 鍵,這在作coding 時很有用,可以設定成各式各樣的快捷鍵,特別是毫秒必爭的live coding。
但是windows 鍵被gnome 3 搶走當Switch between overview and desktop (類似osx的
expose),尤其是筆電那種縮減鍵盤只有一個windows 鍵一旦被搶走就沒的用了。但是既然系統還有指定了Alt-F1 來達成同樣的功能,沒有必要放著好用的 super 鍵不用。但是要想去gnome 桌面上的系統設定值去改這鍵,會發現到根本就找不到選項可以改。得到終端機下用指令改。
首先先確定看一下到底是不是真的被 mutter 給劫持走了:
$ gsettings get org.gnome.mutter overlay-key
'Super_L'
的確是,所以我們把他用空白字串把這鍵結拿掉
$ gsettings set org.gnome.mutter overlay-key ''
登出gnome 桌面再回來就可以了
不過對osx 跟linux雙作業系統的使用者而言:既然windows 鍵在osx 裏對應成
command鍵,要注意Cmd-A, Cmd-C, Cmd-G, Cmd-M, Cmd-F, Cmd-P, Cmd-V,
Cmd-X,Cmd-Z, Cmd-1, Cmd-2, Cmd-3, Cmd-4, Cmd-/, Cmd-., Cmd-SAPCE,
Cmd-LEFT, Cmd-RIGHT, Cmd-UP, Cmd-DOWN, 這些已經被OSX系統用掉了
延伸閱讀
Linuxer/Emacser 在OSX 下用PC的鍵盤
但是windows 鍵被gnome 3 搶走當Switch between overview and desktop (類似osx的
expose),尤其是筆電那種縮減鍵盤只有一個windows 鍵一旦被搶走就沒的用了。但是既然系統還有指定了Alt-F1 來達成同樣的功能,沒有必要放著好用的 super 鍵不用。但是要想去gnome 桌面上的系統設定值去改這鍵,會發現到根本就找不到選項可以改。得到終端機下用指令改。
首先先確定看一下到底是不是真的被 mutter 給劫持走了:
$ gsettings get org.gnome.mutter overlay-key
'Super_L'
的確是,所以我們把他用空白字串把這鍵結拿掉
$ gsettings set org.gnome.mutter overlay-key ''
登出gnome 桌面再回來就可以了
不過對osx 跟linux雙作業系統的使用者而言:既然windows 鍵在osx 裏對應成
command鍵,要注意Cmd-A, Cmd-C, Cmd-G, Cmd-M, Cmd-F, Cmd-P, Cmd-V,
Cmd-X,Cmd-Z, Cmd-1, Cmd-2, Cmd-3, Cmd-4, Cmd-/, Cmd-., Cmd-SAPCE,
Cmd-LEFT, Cmd-RIGHT, Cmd-UP, Cmd-DOWN, 這些已經被OSX系統用掉了
延伸閱讀
Linuxer/Emacser 在OSX 下用PC的鍵盤
星期一, 10月 21, 2013
Linuxer/Emacser 在OSX 下用PC的鍵盤
v 0.9
(還在摸索中。下面不定期增補)
理論上
Command (⌘)鍵對應到window鍵 (emacs 的super鍵)
Option (⌥) 鍵對應到alt鍵 (emacs 的meta鍵)
但是在呆鵝牌的鍵盤上,不管是firefox ,終端機,....他們的⌘對到alt鍵。所以我只好去系統偏好設定的鍵盤設置裡把這兩個鍵交換
1. 把 spotlight 的^-SPC快捷鍵關掉,不然使用中英文切換一定會抓狂,反正spotlight少用而且桌面右上角就是spotlight 了。理論上,可以用小麥注音一直進入到注音輸入法,然後用capslock 鍵切換中英,但是有些程式好像不支援(比如說processing),按半天capslock 鍵只是英文切換大小寫,特別是輸入看不見的文字時,所以還是把這切換換成跟Linux一致的^-SPC
2. 把 space 的 ^-左鍵 ^-右鍵 快捷鍵關聯拿掉,這樣emacs 才用的爽。反正關掉還可以用^-1 ^-2快捷鍵切換。這要到space設定裏把 ^-方向鍵 關掉或換成 option-方向鍵
奇怪的是:明明在emacs 裏就是好好的沒事。但終 端機bash的 ^-左鍵 ^-右鍵 在OSX沒了,這得想辦法把他補回來。記得到終端機設定裏:鍵盤有個使用option key as meta key 的選項要勾選。然後 ^-左鍵的鍵盤碼要設成 ESC b ,(銀幕上的顯示碼是 \033b) 。用同樣方式改 ^-右鍵 到\033b
這樣bash的 ^-左鍵 ^-右鍵就正常了。
假如把滑鼠的第三鍵對應dashboard 的連結關掉,這時終端機/emacs的滑鼠 highlight/select 就可以搭配滑鼠的第三鍵作如同X windows 下的copy and paste !這樣工作就順手多了。但是這只有部分程式支援,其他的像firefox 還是沒辦法。需要用其他軟體設定,這以後再說
(PS.
有人是用這個
https://pqrs.org/macosx/keyremap4macbook/index.html.en
或
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=ukelele
不過我對第三方鍵盤程式安全比較保守,不喜歡用)
(還在摸索中。下面不定期增補)
理論上
Command (⌘)鍵對應到window鍵 (emacs 的super鍵)
Option (⌥) 鍵對應到alt鍵 (emacs 的meta鍵)
但是在呆鵝牌的鍵盤上,不管是firefox ,終端機,....他們的⌘對到alt鍵。所以我只好去系統偏好設定的鍵盤設置裡把這兩個鍵交換
1. 把 spotlight 的^-SPC快捷鍵關掉,不然使用中英文切換一定會抓狂,反正spotlight少用而且桌面右上角就是spotlight 了。理論上,可以用小麥注音一直進入到注音輸入法,然後用capslock 鍵切換中英,但是有些程式好像不支援(比如說processing),按半天capslock 鍵只是英文切換大小寫,特別是輸入看不見的文字時,所以還是把這切換換成跟Linux一致的^-SPC
2. 把 space 的 ^-左鍵 ^-右鍵 快捷鍵關聯拿掉,這樣emacs 才用的爽。反正關掉還可以用^-1 ^-2快捷鍵切換。這要到space設定裏把 ^-方向鍵 關掉或換成 option-方向鍵
奇怪的是:明明在emacs 裏就是好好的沒事。但終 端機bash的 ^-左鍵 ^-右鍵 在OSX沒了,這得想辦法把他補回來。記得到終端機設定裏:鍵盤有個使用option key as meta key 的選項要勾選。然後 ^-左鍵的鍵盤碼要設成 ESC b ,(銀幕上的顯示碼是 \033b) 。用同樣方式改 ^-右鍵 到\033b
這樣bash的 ^-左鍵 ^-右鍵就正常了。
假如把滑鼠的第三鍵對應dashboard 的連結關掉,這時終端機/emacs的滑鼠 highlight/select 就可以搭配滑鼠的第三鍵作如同X windows 下的copy and paste !這樣工作就順手多了。但是這只有部分程式支援,其他的像firefox 還是沒辦法。需要用其他軟體設定,這以後再說
(PS.
有人是用這個
https://pqrs.org/macosx/keyremap4macbook/index.html.en
或
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=ukelele
不過我對第三方鍵盤程式安全比較保守,不喜歡用)
星期五, 11月 06, 2009
ispell 與中文環境emacs
中文emacs使用者可能會遇到一個問題:環境是設好了可以用中文。但是用英文打字了半天想要作一下拼字檢查,卻發現錯誤訊息:"No Word lists can be found for language zh_TW",因為找不到對應語言環境的中文字典檔。
要避免這問題,可以下達
M-x ispell-change-dictionary
再指定要用的字典,比如說美式英語是en_US 。或者是在.eamcs 強迫設定變數 ispell-dictionary:
(setq ispell-dictionary "en-US")
ispell 支援多國語言,但是沒有中文。他的支援語言語言清單設定在變數
ispell-dictionary-alist
裡面沒有中文。只要去看了他的編排方式,就知道至不是很適合中文這種字數是
上萬的語言。舉兩個例子:
("en_US" "[[:alpha:]]" "[^[:alpha:]]" "'" t
("-d" "en_US")
nil utf-8)
("en" "[[:alpha:]]" "[^[:alpha:]]" "'" t
("-d" "en")
nil utf-8)
要避免這問題,可以下達
M-x ispell-change-dictionary
再指定要用的字典,比如說美式英語是en_US 。或者是在.eamcs 強迫設定變數 ispell-dictionary:
(setq ispell-dictionary "en-US")
ispell 支援中文拼字檢查的可能性
ispell 支援多國語言,但是沒有中文。他的支援語言語言清單設定在變數
ispell-dictionary-alist
裡面沒有中文。只要去看了他的編排方式,就知道至不是很適合中文這種字數是
上萬的語言。舉兩個例子:
("en_US" "[[:alpha:]]" "[^[:alpha:]]" "'" t
("-d" "en_US")
nil utf-8)
("en" "[[:alpha:]]" "[^[:alpha:]]" "'" t
("-d" "en")
nil utf-8)
星期六, 3月 07, 2009
Linux 的perl開發環境
有個朋友問起開發軟體用Python 跟Perl 的比較,從我的觀點來看:
1.作研究的人沒有什麼挑程式語言的條件,往往是事情複雜到需要整合好幾個領域,不可能一個人用一個程式語言從頭搞到底,那樣東西還沒做出來你就被別人發表的成果淘汰了。所以你需要什麼樣的武器(通常是以某個語言寫出來的程式庫)來處理某個次領域的事情,你就用那個語言去做基本的處理及呼叫程式庫。再用其他或相同的語言把中間過程串起來。像我本身,約莫是平均一年需要學一個新的程式語言。
2. 光比較Python 跟Perl :為了處理web 的資料,其實我一開始是從Perl 學起,那時web mining programming還沒多少人知道該怎麼作才好。 Perl 寫短程式實在很精簡,但是可閱讀性實在是太差,我覺得比Lisp 還要差,我看自己以前寫的 perl碼,當時要是沒有詳細註解的話,要花很大的力氣。但是為了精簡程式選perl,卻要花更多的時間去詳細註解的話,實在是自相矛盾的作法,所以現在有的選的話,我會以python 優先。其實不只是對perl 而言如此,對lisp 也是一樣。
下面就是從這樣觀點來看perl 的開發環境
不知道是不是大家比較少用perl 開發大一點的程式,相對於python,perl 的開發介面平台在 inux 上比較少。
我現在只知道emacs ,跟Eclipse 。另外有一個在winodws 下用Pascal 寫的Open Perl IDE,也許可以用Lzaurus/free pascal 來在Linux 下編過,不過我還沒時間試。
Eclipse 的壞處就是笨重,用這麼肥的IDE 想來開發輕薄短小的perl實在不太有道理。連在AMD雙核心 4GB Ram 的機器下跑都有點小遲鈍,而且Eclipse 的笨重不只是Eclipse 本身體積肥而已,連寫個小程式都很麻煩:
首先要開一個計劃,然後加上計劃下的程式。假如你之前在外頭寫好了幾個部份片斷程式,恭喜你,片斷程式要匯進去計劃有夠麻煩的,開個不同檔名再剪貼文字過去可能還比較方便。不過在emacs 上的ECB 也有那邊的問題,有時得忍受一下交互使用。要是覺得連去巷口市場買菜都得騎隻恐龍不是什麼大不了的事的話,那Eclipse 這隻大恐龍倒是上天下海無所不包。
Eclipse 的介面,可參考我後續的介紹,
Eclipse 的perl 外掛叫ERIC,目前有兩大版本:0.5 穩定版跟0.6的測試版,我是用0.6版,沒什麼問題。
安裝EPIC這個外掛的步驟在不同版本會有稍許不同,在mandriva 下的eclipse3.4 版是這樣:
啟動Eclipse後在主選單的Help的下拉式選單,選擇Software Updates,然後在Available software的分頁下選擇Add site,在Location 的URL視窗鍵入:
http://e-p-i-c.sf.net/updates/testing
選Find and Updates後,建一個新的名稱(如Eric)給EPIC,然後按下finish後再去勾選這個 Pac外掛做update
把EPIC 外掛裝上後。在主選單file ->new->other
下就會看到Perl型別的選項。先開新一個計劃之後,再依需要慢慢把程式檔加進去。
我試過了Eclipse 的EPIC ,發現所有的變數都要用my 宣告成當地變數,不然eclispe會給你一堆紅色錯誤警告。但要是這樣作的話,在Emacs 下就沒辦法被ECB辨識成變數來顯示,IDE效果就打了折扣。
我最喜歡的一點是在Eclipse 下,只要把游標指到某行的某變數下,在其他行的該變數也會用不同顏色顯示出來,這點在除蟲時很方便。不過這好像是透過全文檢索,所以連不是變數的像標點或字串也行,這讓我懷疑是不是了Eclipse 反應遲鈍的原因之一。
ECB 來寫C/html 是很棒的IDE 。可是對於那些semantic (ECB 賴以解析程式碼的模組)支援很有限的語言如 perl ,表現就只是差強人意。Emacs 的syntax highlight 是沒有問題的,但是ECB左側變數列表會不完整,得用Meta-x!etags *.pl幫現在的perl程式碼編符號表,直接改emacs 裡的程式碼而不重整符號表是不成的,那些在 my 後面直接宣告而且給定起始值的區域變數都顯示不出來。所以要跟eclipse交互使用環境會有一點問題。
兩個IDE 都各有優缺點,我現在是一頁就能看完的程式用emacs 來處理,超過一頁再來用eclipse發展。
用Emacs 開發C 程式
1.作研究的人沒有什麼挑程式語言的條件,往往是事情複雜到需要整合好幾個領域,不可能一個人用一個程式語言從頭搞到底,那樣東西還沒做出來你就被別人發表的成果淘汰了。所以你需要什麼樣的武器(通常是以某個語言寫出來的程式庫)來處理某個次領域的事情,你就用那個語言去做基本的處理及呼叫程式庫。再用其他或相同的語言把中間過程串起來。像我本身,約莫是平均一年需要學一個新的程式語言。
2. 光比較Python 跟Perl :為了處理web 的資料,其實我一開始是從Perl 學起,那時web mining programming還沒多少人知道該怎麼作才好。 Perl 寫短程式實在很精簡,但是可閱讀性實在是太差,我覺得比Lisp 還要差,我看自己以前寫的 perl碼,當時要是沒有詳細註解的話,要花很大的力氣。但是為了精簡程式選perl,卻要花更多的時間去詳細註解的話,實在是自相矛盾的作法,所以現在有的選的話,我會以python 優先。其實不只是對perl 而言如此,對lisp 也是一樣。
下面就是從這樣觀點來看perl 的開發環境
開發介面平台
不知道是不是大家比較少用perl 開發大一點的程式,相對於python,perl 的開發介面平台在 inux 上比較少。
我現在只知道emacs ,跟Eclipse 。另外有一個在winodws 下用Pascal 寫的Open Perl IDE,也許可以用Lzaurus/free pascal 來在Linux 下編過,不過我還沒時間試。
Eclipse
Eclipse 的壞處就是笨重,用這麼肥的IDE 想來開發輕薄短小的perl實在不太有道理。連在AMD雙核心 4GB Ram 的機器下跑都有點小遲鈍,而且Eclipse 的笨重不只是Eclipse 本身體積肥而已,連寫個小程式都很麻煩:
首先要開一個計劃,然後加上計劃下的程式。假如你之前在外頭寫好了幾個部份片斷程式,恭喜你,片斷程式要匯進去計劃有夠麻煩的,開個不同檔名再剪貼文字過去可能還比較方便。不過在emacs 上的ECB 也有那邊的問題,有時得忍受一下交互使用。要是覺得連去巷口市場買菜都得騎隻恐龍不是什麼大不了的事的話,那Eclipse 這隻大恐龍倒是上天下海無所不包。
Eclipse 的介面,可參考我後續的介紹,
Eclipse 的perl 外掛叫ERIC,目前有兩大版本:0.5 穩定版跟0.6的測試版,我是用0.6版,沒什麼問題。
安裝EPIC這個外掛的步驟在不同版本會有稍許不同,在mandriva 下的eclipse3.4 版是這樣:
啟動Eclipse後在主選單的Help的下拉式選單,選擇Software Updates,然後在Available software的分頁下選擇Add site,在Location 的URL視窗鍵入:
http://e-p-i-c.sf.net/updates/testing
選Find and Updates後,建一個新的名稱(如Eric)給EPIC,然後按下finish後再去勾選這個 Pac外掛做update
把EPIC 外掛裝上後。在主選單file ->new->other
下就會看到Perl型別的選項。先開新一個計劃之後,再依需要慢慢把程式檔加進去。
我試過了Eclipse 的EPIC ,發現所有的變數都要用my 宣告成當地變數,不然eclispe會給你一堆紅色錯誤警告。但要是這樣作的話,在Emacs 下就沒辦法被ECB辨識成變數來顯示,IDE效果就打了折扣。
我最喜歡的一點是在Eclipse 下,只要把游標指到某行的某變數下,在其他行的該變數也會用不同顏色顯示出來,這點在除蟲時很方便。不過這好像是透過全文檢索,所以連不是變數的像標點或字串也行,這讓我懷疑是不是了Eclipse 反應遲鈍的原因之一。
Eamcs/ECB
ECB 來寫C/html 是很棒的IDE 。可是對於那些semantic (ECB 賴以解析程式碼的模組)支援很有限的語言如 perl ,表現就只是差強人意。Emacs 的syntax highlight 是沒有問題的,但是ECB左側變數列表會不完整,得用Meta-x!etags *.pl幫現在的perl程式碼編符號表,直接改emacs 裡的程式碼而不重整符號表是不成的,那些在 my 後面直接宣告而且給定起始值的區域變數都顯示不出來。所以要跟eclipse交互使用環境會有一點問題。
結論
兩個IDE 都各有優缺點,我現在是一頁就能看完的程式用emacs 來處理,超過一頁再來用eclipse發展。
延伸閱讀
用Emacs 開發C 程式
星期二, 2月 24, 2009
用 Graphviz 畫工程科學說明圖
一般而言,工程科學說明圖是網路/樹狀結構但沒有很強的流程方向性的圖我用graphivz來畫,圖是網路/樹狀結構而且有很強的資料流程方向性用dia來畫。其他的我才用xfig來畫。
我覺得graphviz 最大的好處是自動編排。只要用文字編輯器把這些節點,聯接,文字相互關係...的.dot 描述檔寫好後。graphivz編譯會自動產生編排好的圖形。不用拿滑鼠在螢幕上移來移去。這在設計複雜的關聯圖形時很重要,而且這些文字大部可以在後面的流程回收。作過一次標準資料庫設計就知道了。剛開始學習要點時間,但是對理工科的人而言長期的回收絕對划算。
Graphviz 編譯命令長的像這樣子
dot -Tpng foo.sql.dot -o foo.png
,除了png 外,也可以選pdf,ps, gif 之類的格式,或是不同風格的圖形編排,輸出成png 或ps 後可以在openoffice 文件裡當插圖用,用中文的話要記得用utf8輸入即可。
graphviz跟emacs 整合的話,工作會更方便,用emacs 編完Graphviz 的.dot
描述檔之後,直接C-c C-c 編譯。(這跟python是一樣的)C-c C-p 直接在 emacs裡預覽輸出圖形。下圖是在emacs裡預覽的結果。

安裝其實很簡單,在winodws 上也有 wingraphviz 可以用。我試過跟某個用winodws平台的人共同用graphviz 溝通開發資料庫,沒有問題。應用實例後面會另文介紹。
參考
用 Graphviz 畫資料庫設計圖
我覺得graphviz 最大的好處是自動編排。只要用文字編輯器把這些節點,聯接,文字相互關係...的.dot 描述檔寫好後。graphivz編譯會自動產生編排好的圖形。不用拿滑鼠在螢幕上移來移去。這在設計複雜的關聯圖形時很重要,而且這些文字大部可以在後面的流程回收。作過一次標準資料庫設計就知道了。剛開始學習要點時間,但是對理工科的人而言長期的回收絕對划算。
Graphviz 編譯命令長的像這樣子
dot -Tpng foo.sql.dot -o foo.png
,除了png 外,也可以選pdf,ps, gif 之類的格式,或是不同風格的圖形編排,輸出成png 或ps 後可以在openoffice 文件裡當插圖用,用中文的話要記得用utf8輸入即可。
graphviz跟emacs 整合的話,工作會更方便,用emacs 編完Graphviz 的.dot
描述檔之後,直接C-c C-c 編譯。(這跟python是一樣的)C-c C-p 直接在 emacs裡預覽輸出圖形。下圖是在emacs裡預覽的結果。

安裝其實很簡單,在winodws 上也有 wingraphviz 可以用。我試過跟某個用winodws平台的人共同用graphviz 溝通開發資料庫,沒有問題。應用實例後面會另文介紹。
參考
用 Graphviz 畫資料庫設計圖
星期六, 1月 19, 2008
Eamcs文字模式熱鍵對應說明
一般所謂的Emacs 命令其實是縮寫了的熱鍵. 指令的字母按鍵沒有大小寫分別,有些鍵(如Meta-a) 在不同模式(如文字模式跟HTML模式)下,移動的方式會不同。
"Ctrl" 表 Ctrl 鍵
"Meta" 表 Meta 鍵,一般應該就是你電腦上的左"Alt"鍵,但如果"Alt"沒作用,
被其他程式佔用,則可以 ESC 鍵來取代之。請先按"ESC",再按"某鍵",這樣就
等於Meta-"某鍵"
"RET" 表 RETURN 或 ENTER 鍵
"ESC" 表 ESC鍵
"BS" 表 Backspace鍵
"DEL" 表 Delete 鍵
"SPC" 表 空白鍵
"F1" - "F12" 對應F1 到 F12功能鍵
兩鍵中有空白鍵表示要分開按,"某鍵1"-"某鍵2" 表示"某鍵1"跟"某鍵2"一起按。例如Ctrl-S-_ 功能如同 Ctrl-x u ,兩者都是回手之前命令,但是 Ctrl-S-_ 要3鍵一起按,Ctrl-x u要先按 Ctrl跟x 再按u。
對於自行定義文字或滑鼠模式熱鍵,參見
Emacs / X window 鍵盤滑鼠定義
每次改完.emacs 需要從新啟動emacs 。要是不確定,想要先試試,可以用
1. M-x global-set-key RET 交互式的綁定某鍵到某命令。
2. C-x Esc Esc 重複顯示上一條"複雜(complex)命令"。會在 minibuffer 裡看到應該寫在 .emacs 的東西。 確定了再改 .emacs
按鍵可以綁定到很複雜的命令,基本上容許執行非常複雜的程式。關於寫elisp 程式可參考
http://cl-cookbook.sourceforge.net/index.html
Ctrl-x Ctrl-f 開啟檔案(不給檔名直接"enter"鍵可以在mini buffer中用選的)
Ctrl-x i 插入檔案到目前游標位置
Ctrl-x d 開啟目錄
Ctrl-x Ctrl-s 存檔
Ctrl-x Ctrl-w 另存新檔
Meta-m 移到本列第一個(非空白)字元
Ctrl-a 移到列首 (等同於 "Home")
Ctrl-e 移到列尾 (等同於 "End")
Meta-a 移到句首 (emacs 似乎不能辨別中文句號,而變成跳到下一段)
Meta-e 移到句尾 (emacs 似乎不能辨別中文句號,而變成跳到下一段)
Ctrl-f 往前移動一個字元 (等同於 "向左")
Ctrl-b 往後移動一個字元 (等同於 "向右")
Meta-f 往前移一個字 (等同於 Ctrl-"向左" 或 Meta-"向左")
Meta-b 往後移一個字 (等同於 Ctrl-"向右" 或 Meta-"向右" )
Meta-[ 往前移一段
Ctrl-"Home" 移到檔頭
Ctrl-"End" 移到檔尾
Meta-< 移到檔頭 (只限於在 Xemacs 下,emacs下似乎被gcin的 Alt-Shift 片語輸入用法搶掉了)
Meta-> 移到檔尾 (只限於在 Xemacs 下,emacs下似乎被gcin的 Alt-Shift 片語輸入用法搶掉了)
Ctrl-n 向下移動一行 (等同於 "向下")
Ctrl-p 向上移動一行 (等同於 "向上")
Meta-r 移到左中行 Move point to left margin, vertically centered in the window (move-to-window-line). Text does not move on the screen.
Ctrl-v 翻下一頁
Meta-v 翻上一頁
Ctrl-l 重畫螢幕,游標連文字移到中間列
Meta-x 輸入命令(例如按Meta-x後輸入goto-line就可以跳行)
Ctrl-g 中斷命令(有時按錯了hot key,要退出來)
ESC ESC ESC 取消執行指令
Ctrl-_ 復原最近一次指令(等同於 Ctrl-x u 但 Ctrl-x u 會衝到xcin的內碼輸入啟動鍵)
Ctrl-u Ctrl-x u Undo one batch of changes in the region
Meta-n 執行n遍剛剛的按鍵 (n 為一個自然數) 如 Meta-10 Meta-b 會往後移十個字
Ctrl-z 文字作業環境:暫停emacs ,回到shell 命令列,或在X視窗裡,最小化窗框(frame)
Ctrl-x Ctrl-c 離開 Emacs (save-buffers-kill-emacs)
emacs的區塊 Active時會反白你所選的範圍,有兩種形式,此時可以用Ctrl-w砍掉反白區Ctrl-x TAB indent反白區...等下命令的方式。另外就是像pe2一樣,標選區塊頭尾後來 copy ....
一般說來在X 視窗下,用滑鼠就可以標示文字了,只要用滑鼠左鍵標好然後移動游標到區域的末端,然後用就可以用
滑鼠中鍵 貼上
滑鼠右鍵連按兩下 剪下 (或按 "Del")
Ctrl-@ 開始區塊標示 (等同於Ctrl-"SPC" )
Ctrl-x h 標示整個編輯區(等同於整個檔案)
Ctrl-w 剪下標記的區塊
Ctrl-y 把剛剛砍掉的或在區塊中的文字貼回
Ctrl-x Ctrl-x 標示區域的末端
Ctrl-x 0 關掉目前視窗
Ctrl-x 1 砍掉其他所有視窗(只剩一個視窗)
Ctrl-x 2 在窗框裡創造水平分割視視窗
Ctrl-x 3 在原本的窗框裡創造垂直新視窗 (等同於 "F2" 2)
Ctrl-x o 跳到別(other 的o)的視窗去
Ctrl-x 5 2 開新的窗框
Ctrl-x 5 0 關閉目前的窗框
Ctrl-x Ctrl-b 列出目前所有編輯中的檔案緩衝區清單
Ctrl-x b 切換到別的檔案緩衝區去
Ctrl-x k 關閉目前檔案緩衝區
F2 分割成左右兩視窗
所有編輯中的檔案會用到一個緩衝區
Ctrl-x ( 開始巨集(紀錄你所按的鍵)
Ctrl-x ) 結束巨集
Ctrl-x e 執行剛剛紀錄的巨集
Ctrl-h 啟動說明 (等同於 "F1" )
Ctrl-h t 使用教學Emacs Tutotial (help-with-tutorial)
Ctrl-h b 看熱鍵對應功能
Ctrl-h k 看command對應的key
ESC ESC ESC 取消執行指令
F10 功能表(Menu Bar)
Meta-` 顯示Menu Bar 功能表(在文字視窗內)
BS 刪除游標前面的一個字元
DEL 刪除游標目前指的字元
Ctrl-d 刪除游標目前指的字元
Ctrl-k 刪除游標後至行尾整行所有字元
Meta-DEL 砍掉游標前一整個字
Meta-d 砍掉游標後一整個字
Ctrl-x Ctrl-o 刪除空行 Delete all but one of many consecutive blank lines (delete-blank-lines)
Ctrl-s 搜尋字串(一直按就一直往前尋找)
Ctrl-r 往後搜尋字串(reverse)
Meta-Ctrl-s 正規表示式(Regular express)搜尋
Meta-% 搜尋取代(按!可以全部換掉,要不然會一個一個問按y/n回答)
Meta-t 與前一字兩字互換
Ctrl-x Ctrl-t 與前一行兩行互換
Ctrl-o 插入空白行
Ctrl-x TAB (等同於 Meta-Ctrl-\)indent 區塊
TAB 對齊indent
F10 功能表 (Menu Bar)
Ctrl-x z 重復最近指令
Ctrl-x zz 再次重復z(每一個z 重復一次)下次的命令
"Ctrl" 表 Ctrl 鍵
"Meta" 表 Meta 鍵,一般應該就是你電腦上的左"Alt"鍵,但如果"Alt"沒作用,
被其他程式佔用,則可以 ESC 鍵來取代之。請先按"ESC",再按"某鍵",這樣就
等於Meta-"某鍵"
"RET" 表 RETURN 或 ENTER 鍵
"ESC" 表 ESC鍵
"BS" 表 Backspace鍵
"DEL" 表 Delete 鍵
"SPC" 表 空白鍵
"F1" - "F12" 對應F1 到 F12功能鍵
兩鍵中有空白鍵表示要分開按,"某鍵1"-"某鍵2" 表示"某鍵1"跟"某鍵2"一起按。例如Ctrl-S-_ 功能如同 Ctrl-x u ,兩者都是回手之前命令,但是 Ctrl-S-_ 要3鍵一起按,Ctrl-x u要先按 Ctrl跟x 再按u。
對於自行定義文字或滑鼠模式熱鍵,參見
Emacs / X window 鍵盤滑鼠定義
每次改完.emacs 需要從新啟動emacs 。要是不確定,想要先試試,可以用
1. M-x global-set-key RET 交互式的綁定某鍵到某命令。
2. C-x Esc Esc 重複顯示上一條"複雜(complex)命令"。會在 minibuffer 裡看到應該寫在 .emacs 的東西。 確定了再改 .emacs
按鍵可以綁定到很複雜的命令,基本上容許執行非常複雜的程式。關於寫elisp 程式可參考
http://cl-cookbook.sourceforge.net/index.html
熱鍵對應列表
檔案
Ctrl-x Ctrl-f 開啟檔案(不給檔名直接"enter"鍵可以在mini buffer中用選的)
Ctrl-x i 插入檔案到目前游標位置
Ctrl-x d 開啟目錄
Ctrl-x Ctrl-s 存檔
Ctrl-x Ctrl-w 另存新檔
游標移動
Meta-m 移到本列第一個(非空白)字元
Ctrl-a 移到列首 (等同於 "Home")
Ctrl-e 移到列尾 (等同於 "End")
Meta-a 移到句首 (emacs 似乎不能辨別中文句號,而變成跳到下一段)
Meta-e 移到句尾 (emacs 似乎不能辨別中文句號,而變成跳到下一段)
Ctrl-f 往前移動一個字元 (等同於 "向左")
Ctrl-b 往後移動一個字元 (等同於 "向右")
Meta-f 往前移一個字 (等同於 Ctrl-"向左" 或 Meta-"向左")
Meta-b 往後移一個字 (等同於 Ctrl-"向右" 或 Meta-"向右" )
Meta-[ 往前移一段
Ctrl-"Home" 移到檔頭
Ctrl-"End" 移到檔尾
Meta-< 移到檔頭 (只限於在 Xemacs 下,emacs下似乎被gcin的 Alt-Shift 片語輸入用法搶掉了)
Meta-> 移到檔尾 (只限於在 Xemacs 下,emacs下似乎被gcin的 Alt-Shift 片語輸入用法搶掉了)
Ctrl-n 向下移動一行 (等同於 "向下")
Ctrl-p 向上移動一行 (等同於 "向上")
Meta-r 移到左中行 Move point to left margin, vertically centered in the window (move-to-window-line). Text does not move on the screen.
Ctrl-v 翻下一頁
Meta-v 翻上一頁
Ctrl-l 重畫螢幕,游標連文字移到中間列
關於命令本身的命令
Meta-x 輸入命令(例如按Meta-x後輸入goto-line就可以跳行)
Ctrl-g 中斷命令(有時按錯了hot key,要退出來)
ESC ESC ESC 取消執行指令
Ctrl-_ 復原最近一次指令(等同於 Ctrl-x u 但 Ctrl-x u 會衝到xcin的內碼輸入啟動鍵)
Ctrl-u Ctrl-x u Undo one batch of changes in the region
Meta-n 執行n遍剛剛的按鍵 (n 為一個自然數) 如 Meta-10 Meta-b 會往後移十個字
離開
Ctrl-z 文字作業環境:暫停emacs ,回到shell 命令列,或在X視窗裡,最小化窗框(frame)
Ctrl-x Ctrl-c 離開 Emacs (save-buffers-kill-emacs)
區塊(region)
emacs的區塊 Active時會反白你所選的範圍,有兩種形式,此時可以用Ctrl-w砍掉反白區Ctrl-x TAB indent反白區...等下命令的方式。另外就是像pe2一樣,標選區塊頭尾後來 copy ....
一般說來在X 視窗下,用滑鼠就可以標示文字了,只要用滑鼠左鍵標好然後移動游標到區域的末端,然後用就可以用
滑鼠中鍵 貼上
滑鼠右鍵連按兩下 剪下 (或按 "Del")
Ctrl-@ 開始區塊標示 (等同於Ctrl-"SPC" )
Ctrl-x h 標示整個編輯區(等同於整個檔案)
Ctrl-w 剪下標記的區塊
Ctrl-y 把剛剛砍掉的或在區塊中的文字貼回
Ctrl-x Ctrl-x 標示區域的末端
檔案緩衝區(buffer)與多重視窗(window)/窗框(frame)
Ctrl-x 0 關掉目前視窗
Ctrl-x 1 砍掉其他所有視窗(只剩一個視窗)
Ctrl-x 2 在窗框裡創造水平分割視視窗
Ctrl-x 3 在原本的窗框裡創造垂直新視窗 (等同於 "F2" 2)
Ctrl-x o 跳到別(other 的o)的視窗去
Ctrl-x 5 2 開新的窗框
Ctrl-x 5 0 關閉目前的窗框
Ctrl-x Ctrl-b 列出目前所有編輯中的檔案緩衝區清單
Ctrl-x b 切換到別的檔案緩衝區去
Ctrl-x k 關閉目前檔案緩衝區
F2 分割成左右兩視窗
所有編輯中的檔案會用到一個緩衝區
巨集
Ctrl-x ( 開始巨集(紀錄你所按的鍵)
Ctrl-x ) 結束巨集
Ctrl-x e 執行剛剛紀錄的巨集
說明
Ctrl-h 啟動說明 (等同於 "F1" )
Ctrl-h t 使用教學Emacs Tutotial (help-with-tutorial)
Ctrl-h b 看熱鍵對應功能
Ctrl-h k 看command對應的key
ESC ESC ESC 取消執行指令
F10 功能表(Menu Bar)
Meta-` 顯示Menu Bar 功能表(在文字視窗內)
刪除
BS 刪除游標前面的一個字元
DEL 刪除游標目前指的字元
Ctrl-d 刪除游標目前指的字元
Ctrl-k 刪除游標後至行尾整行所有字元
Meta-DEL 砍掉游標前一整個字
Meta-d 砍掉游標後一整個字
Ctrl-x Ctrl-o 刪除空行 Delete all but one of many consecutive blank lines (delete-blank-lines)
搜尋/取代
Ctrl-s 搜尋字串(一直按就一直往前尋找)
Ctrl-r 往後搜尋字串(reverse)
Meta-Ctrl-s 正規表示式(Regular express)搜尋
Meta-% 搜尋取代(按!可以全部換掉,要不然會一個一個問按y/n回答)
其他
Meta-t 與前一字兩字互換
Ctrl-x Ctrl-t 與前一行兩行互換
Ctrl-o 插入空白行
Ctrl-x TAB (等同於 Meta-Ctrl-\)indent 區塊
TAB 對齊indent
只適用Emacs 的命令
F10 功能表 (Menu Bar)
Ctrl-x z 重復最近指令
Ctrl-x zz 再次重復z(每一個z 重復一次)下次的命令
星期日, 12月 30, 2007
設定(X)Emacs中文環境參數
1.1 版
在已完善中文化的Linux 系統如Mandriva 2008上跑big5跟utf8中文已不成問題。不過這兩個編碼系統都不夠好。要在Linux上跑CCCII等大字集編碼還有一段路,還是有必要仔細研究一下Emacs對中文設定(X)Emacs中文環境參數,這樣可以用Emacs來作大字集編碼中文的發展測試平台。
這裡針對討論近年來3個版本討論: xEmacs 21.5 及 Emacs22.0.50, Emacs 22.1.5 (支援unicode)。其中 Emacs 22.1.5是在Mandriva 新版(2008)上的測試結果(locale 設定: LANG=zh_TW.UTF-8)。其他是直接引用舊版的測試結果,應該是Windows上的Emacs。我不太確定當初locale 設定,我猜是LANG=zh_TW(意思就是big5)。Emacs以後的23 版的結構應該跟22.1接近,這裡專注在這個版本討論。
Mule 在 win32 build 的 xEmacs 21.5 及 Emacs 22.0.50(跟之後) 都有內建。
查看設定值可由選單中選 Edit->MultiLingual "Mule"->Describe CurrentCoding system
( XEmacs 21.5 在 在選單 Options->Advanced (Customize) ->Emacs-> Environment-> I18n->mule
Emacs 22.0.50 在 Options->Customize Emacs->Top level CustomizationGroup -> Environment -> I18n -> mule)
兩者預設值都是 ISO8 -- iso-2022-8
Emacs 22.1.5 在這裡就看不到這兩個變數,我猜測是因為支援unicode造成的改版,實際上是否移到別的地方,或者可否自行在起始檔(如.emacs) 加入選項,還待研究。
Emacs 22.1.5相關的重要變數有
XEmacs 21.5 相關的重要變數有
Emacs 22.0.50相關的重要變數有
前言
在已完善中文化的Linux 系統如Mandriva 2008上跑big5跟utf8中文已不成問題。不過這兩個編碼系統都不夠好。要在Linux上跑CCCII等大字集編碼還有一段路,還是有必要仔細研究一下Emacs對中文設定(X)Emacs中文環境參數,這樣可以用Emacs來作大字集編碼中文的發展測試平台。
這裡針對討論近年來3個版本討論: xEmacs 21.5 及 Emacs22.0.50, Emacs 22.1.5 (支援unicode)。其中 Emacs 22.1.5是在Mandriva 新版(2008)上的測試結果(locale 設定: LANG=zh_TW.UTF-8)。其他是直接引用舊版的測試結果,應該是Windows上的Emacs。我不太確定當初locale 設定,我猜是LANG=zh_TW(意思就是big5)。Emacs以後的23 版的結構應該跟22.1接近,這裡專注在這個版本討論。
基本設定
Mule 在 win32 build 的 xEmacs 21.5 及 Emacs 22.0.50(跟之後) 都有內建。
查看設定值可由選單中選 Edit->MultiLingual "Mule"->Describe CurrentCoding system
( XEmacs 21.5 在 在選單 Options->Advanced (Customize) ->Emacs-> Environment-> I18n->mule
Emacs 22.0.50 在 Options->Customize Emacs->Top level CustomizationGroup -> Environment -> I18n -> mule)
- Coding system for saving this buffer:
- Default coding system (for new files):
兩者預設值都是 ISO8 -- iso-2022-8
Emacs 22.1.5 在這裡就看不到這兩個變數,我猜測是因為支援unicode造成的改版,實際上是否移到別的地方,或者可否自行在起始檔(如.emacs) 加入選項,還待研究。
Emacs 22.1.5相關的重要變數有
- Keyboard Coding Syste (預設值: nil)
- Default Input Method (設定值: chinese-py-punct-b5)
- Current Language Environment (設定值: Chinese-BIG5)
- Utf Translate Cjk Unicode Range (預設值: Cons-cell:
Integer: 11904
Integer: 55203
Cons-cell:
Integer: 65280
Integer: 65519
- Utf Translate Cjk Mode (預設值: t)
- Utf 8 Compose Scripts (預設值: nil)
- Enable Multibyte Characters (預設值: t)
- Selection Coding System (預設值: compound-text-with-extensions)
- Unibyte Display Via Language Environment (預設值: nil)
- Describe Char Unicodedata File (預設值: )
- Leim (預設值: )
XEmacs 21.5 相關的重要變數有
- Current Language Environmen
- Default Input Method
Emacs 22.0.50相關的重要變數有
- Keyboard Coding Syste (預設值: cp950)
- Default Input Method (預設值: chinese-py-punct-b5)
- Current Language Environment (預設值: Chinese-BIG5)
- Utf Translate Cjk Unicode Range (預設值: )
- Utf Translate Cjk Mode (預設值: t)
- Utf 8 Compose Scripts (預設值: nil)
- Enable Multibyte Characters (預設值: t)
- Selection Coding System (預設值: utf-16le-dos)
- Unibyte Display Via Language Environment (預設值: nil)
- Describe Char Unicodedata File (預設值: )
- Leim (預設值: )
星期四, 12月 13, 2007
(X)Emacs字體設定
Emacs
~/.emacs
(setq default-frame-alist
'(
(font . "-*-fixed-medium-r-normal-*-15-*-*-*-c-*-*-*") ;; 設定每一次開新的視窗(frame in Emacs) 都設定此一字型集
(height . 50)
;(width . 80)
(foreground-color . "Black")
(background-color . "Snow1")
(cursor-color . "Red")
)
)
Xemacs
在 Options -> Font size 下選完大小(比如說15pt)
再於Options -> 按 Save Options to Init File
~/custom.el 就會多出下的設定
(custom-set-faces
'(default ((t (:size "15pt" :family "Fixed"))) t))
當然也可以自行更改 ~/custom.el 裡的內容 但這只會更動選單以外的字體
星期四, 11月 22, 2007
emacs-mule 內建中文輸入法 (v1.2)
v1.2 星期四, 一月 5, 2008
(v1.1 星期四, 十一月 22, 2007
v1.0 於 星期二 十月 19, 2004 12:22 pm 發表在
http://cle.linux.org.tw/forum/viewtopic.php?t=132)
用quail選定輸入中文,在Emacs 下是在
Options->"Mule (MultiLingual Environment)->
在xEmacs 下是在
Edit->MultiLingual "Mule"->
下面是目前 xemacs-mule內建中文輸入法
在系統沒有裝中文輸入法的情況下,依然能在xemacs-mule用quail輸入中文。特別對實驗性的中文需求,如在新的作業系統或新的中文大字集環境,這點讓emacs 的內建中文輸入變成很重要。我會在這個主題下陸續討論相關的技術問題
chinese-4corner 四角號碼
chinese-array30 行列30
chinese-b5-quick 簡易
chinese-b5-tsangchi 倉頡
chinese-cns-quick 簡易
chinese-cns-tsangchi 倉頡
chinese-ctlaub 劉錫祥式粵音
chinese-ecdict 英漢辭典
chinese-etzy 倚天注音
chinese-punct-b5 標點符號
chinese-py-b5 拼音
chinese-py-punct-b5拼音及標點符號
chinese-qj-b5全角
chinese-zozy 零壹(標準)鍵盤注音
chinese-egg-pinyin
chinese-egg-zhuyin
skk 跟egg是其他兩個輸入法,非日文的資料不多,Wnn的繁體字輸入時需要 Chinese CNS character sets 這裡有一點消息
(v1.1 星期四, 十一月 22, 2007
v1.0 於 星期二 十月 19, 2004 12:22 pm 發表在
http://cle.linux.org.tw/forum/viewtopic.php?t=132)
quail
用quail選定輸入中文,在Emacs 下是在
Options->"Mule (MultiLingual Environment)->
在xEmacs 下是在
Edit->MultiLingual "Mule"->
xemacs-mule
下面是目前 xemacs-mule內建中文輸入法
在系統沒有裝中文輸入法的情況下,依然能在xemacs-mule用quail輸入中文。特別對實驗性的中文需求,如在新的作業系統或新的中文大字集環境,這點讓emacs 的內建中文輸入變成很重要。我會在這個主題下陸續討論相關的技術問題
chinese-4corner 四角號碼
chinese-array30 行列30
chinese-b5-quick 簡易
chinese-b5-tsangchi 倉頡
chinese-cns-quick 簡易
chinese-cns-tsangchi 倉頡
chinese-ctlaub 劉錫祥式粵音
chinese-ecdict 英漢辭典
chinese-etzy 倚天注音
chinese-punct-b5 標點符號
chinese-py-b5 拼音
chinese-py-punct-b5拼音及標點符號
chinese-qj-b5全角
chinese-zozy 零壹(標準)鍵盤注音
chinese-egg-pinyin
chinese-egg-zhuyin
衍生閱讀
skk 跟egg是其他兩個輸入法,非日文的資料不多,Wnn的繁體字輸入時需要 Chinese CNS character sets 這裡有一點消息
星期一, 11月 19, 2007
多重(X)emacs設置
一台機器上會有多少版本 ((X)emacs的設置?
不過這都可以共用一個 fat32檔案系統下的 設置檔(etx2/3 或 NTFS 會有一些唯讀,...之類的麻煩)。不過在kernel 2.6.20出來後,ntfs-3g 應該就比較沒有問題了。小心的話可以讓 xemacs, emacs 設定共通部分寫在 .emacs,而且共用local-site lisp 目錄來放使用者自行加裝的套件。
參考
- 原生 win32 build Xemacs 及 emacs : 2
- cygwin build Xemacs 及 emacs : 2
- Linux Xemacs 及 emacs : 2
不過這都可以共用一個 fat32檔案系統下的 設置檔(etx2/3 或 NTFS 會有一些唯讀,...之類的麻煩)。不過在kernel 2.6.20出來後,ntfs-3g 應該就比較沒有問題了。小心的話可以讓 xemacs, emacs 設定共通部分寫在 .emacs,而且共用local-site lisp 目錄來放使用者自行加裝的套件。
- 原生 win32 Xemacs 會在 C:\Documents and Settings\使用者名稱\.xemacs\custom.el裏
- 原生 win32 Emacs 則是在C:\Documents and Settings\使用者名稱\Application Data\.emacs裏
參考
星期日, 11月 18, 2007
uft8 中文Linux 環境用 emacs處理Big5文件
emacs新版(22/23) 已經把utf8加入了。而且也有了gtk 支援,下面的技巧還是適用
假設是用了支援mule的新版emacs (non-mule xemacs 出不來)
在終端機下這樣執行:
#LC_LANG=utf8.tw_Big5 emacs
但 gnome 桌面上的icon不能這樣直接執行 . 變通方式是在
/usrl/local/bin 下做個script 姑稱之 emacs-21.4-BigInUtf8env
內容正如上所示
然後讓 gnome 桌面上的icon執行
/usr/local/bin/emacs-21.4-BigInUtf8env
(註: 原發表於CLE: 星期二 一月 10, 2006 1:11 pm
http://cle.linux.org.tw/forum/viewtopic.php?t=739)
假設是用了支援mule的新版emacs (non-mule xemacs 出不來)
在終端機下這樣執行:
#LC_LANG=utf8.tw_Big5 emacs
但 gnome 桌面上的icon不能這樣直接執行 . 變通方式是在
/usrl/local/bin 下做個script 姑稱之 emacs-21.4-BigInUtf8env
內容正如上所示
然後讓 gnome 桌面上的icon執行
/usr/local/bin/emacs-21.4-BigInUtf8env
(註: 原發表於CLE: 星期二 一月 10, 2006 1:11 pm
http://cle.linux.org.tw/forum/viewtopic.php?t=739)
星期日, 11月 11, 2007
用Emacs 開發C 程式 第三部分:cscope整合
用Emacs 開發C 程式 第三部分:xcscope整合
xcscope 可以讓emacs搜尋變數的過程更簡便。
比如說找變數 i ,直接用 ^S 會找死人 (i被太多變數包含了),用正規表達式找 \bi\b 又不太方便,xcscope 會把所有引用到變數 i的block 跟行號在另一個視窗*cscope*全部列出來,在*cscope*視窗中把鼠標移到其中想要跳過去查看的那一行,按滑鼠中鍵,主程式視窗列表就會跳到對應的那一行。
rpm沒有包入contrib下的檔,所以去抓 tar ball 來用。而且要在.emacs 裡加入
(load-file "/usr/local/cscope-15.6/contrib/xcscope/xcscope.el")
(require 'xcscope)
emacs在載入 C 程式時就會啟用 csope "模式",
xcscope會在當下工作的目錄裡產生cscope.out存放交互連結資料
xcscope在emacs 主選單下有以下選項
Find symbol (d) 列出所有參考到此符號物件的程式行
Find global definition (g)
Find global definition no prompting (G)
Find functions calling a function: (c) 列出所有呼叫此函式的程式行
Find called functions: (C) 列出所有被此函式呼叫的函式
Find text string:
Find egrep pattern
Find a file:
Find files #including a file:
上面這些命令可以用以 C-c s 開頭的按鍵來執行,如Find symbol是 C-c s s跟emacs 的increamental 搜尋不一樣的地方在於,xcscope會另外開一個緩衝區叫*cscope*把所有符合搜尋條件的結果作索引一次全列出來,
比較好的方式,應該是在C 程式緩衝區可以直接用滑鼠鍵叫出 scopse 選單,然後選搜尋選項。根據http://linux.die.net/man/1/xcscope的說法,可以用pop-up (button 3)menus 叫出 xcscopse 選單。問題是沒有一個叫cscope-mode 的東西,所以在C 程式緩衝區裡無法用Ctl 滑鼠右鍵叫出cscope顯示選單。只能在%cscope%緩衝區下針對有列出來的符號用滑鼠叫出cscope顯示選單。
對於這個問題有一個解決的方式是去 ~/.emacs 下自行定義類似這樣的全域鍵盤定義。要充分發揮Emacs 各個元件的功能,善用控制鍵/滑鼠是不可或缺的一環,參考Emacs / X window 鍵盤滑鼠定義。
同樣支援 cscope的有cscope-fu, ecsope, 跟bscope。bscope號稱比xcscope.el好。
參見
CScopeAndEmacs
用Emacs 開發C 程式
xcscope 可以讓emacs搜尋變數的過程更簡便。
比如說找變數 i ,直接用 ^S 會找死人 (i被太多變數包含了),用正規表達式找 \bi\b 又不太方便,xcscope 會把所有引用到變數 i的block 跟行號在另一個視窗*cscope*全部列出來,在*cscope*視窗中把鼠標移到其中想要跳過去查看的那一行,按滑鼠中鍵,主程式視窗列表就會跳到對應的那一行。
安裝:
rpm沒有包入contrib下的檔,所以去抓 tar ball 來用。而且要在.emacs 裡加入
(load-file "/usr/local/cscope-15.6/contrib/xcscope/xcscope.el")
(require 'xcscope)
使用
emacs在載入 C 程式時就會啟用 csope "模式",
xcscope會在當下工作的目錄裡產生cscope.out存放交互連結資料
xcscope在emacs 主選單下有以下選項
Find symbol (d) 列出所有參考到此符號物件的程式行
Find global definition (g)
Find global definition no prompting (G)
Find functions calling a function: (c) 列出所有呼叫此函式的程式行
Find called functions: (C) 列出所有被此函式呼叫的函式
Find text string:
Find egrep pattern
Find a file:
Find files #including a file:
上面這些命令可以用以 C-c s 開頭的按鍵來執行,如Find symbol是 C-c s s跟emacs 的increamental 搜尋不一樣的地方在於,xcscope會另外開一個緩衝區叫*cscope*把所有符合搜尋條件的結果作索引一次全列出來,
比較好的方式,應該是在C 程式緩衝區可以直接用滑鼠鍵叫出 scopse 選單,然後選搜尋選項。根據http://linux.die.net/man/1/xcscope的說法,可以用pop-up (button 3)menus 叫出 xcscopse 選單。問題是沒有一個叫cscope-mode 的東西,所以在C 程式緩衝區裡無法用Ctl 滑鼠右鍵叫出cscope顯示選單。只能在%cscope%緩衝區下針對有列出來的符號用滑鼠叫出cscope顯示選單。
對於這個問題有一個解決的方式是去 ~/.emacs 下自行定義類似這樣的全域鍵盤定義。要充分發揮Emacs 各個元件的功能,善用控制鍵/滑鼠是不可或缺的一環,參考Emacs / X window 鍵盤滑鼠定義。
同樣支援 cscope的有cscope-fu, ecsope, 跟bscope。bscope號稱比xcscope.el好。
參見
CScopeAndEmacs
用Emacs 開發C 程式
星期六, 11月 10, 2007
Emacs / X window 鍵盤滑鼠定義
要充分發揮Emacs 各個元件的功能,善用控制鍵/滑鼠是不可或缺的一環。
當常常用emacs 寫作開發程式做某特定動作,就要按一大串鍵會減低效率。有一個解決的方式是去 ~/.emacs 下自行定義全域鍵盤控制鍵/滑鼠定義。不過要作到自行定義,要先瞭解整個環境是如何定義鍵盤的:
控制字首可以放在"任何"一般字元前,甚至滑鼠動作前,其中可以用下面簡寫
M- (meta)
C- 或 ^(control )
S- (shift)
A-(alt)
H- (hyper)
s- (super)
字首順序是可變換的 (M-C-x 跟 C-M-x 是一樣的意思)
可以用多次如 3*<right>跟<right><right><right>是一樣的意思
function 鍵字首可以寫到角括號裡, C-<down> 跟 <C-down> 是一樣的意思
在我的鍵盤(PC105鍵盤)上
Alt鍵定義成 meta鍵
左視窗鍵定義成 super 鍵
右視窗鍵定義成兩層定義,第二層定義為Multi 鍵(一般所謂的 compose)
選單鍵定義成 Meta-X
其實還有Scroll Lock跟 Caps Lock 跟 SysRq。除了opera, 跟 virtual console ,...外 Scroll lock 跟 SysRq幾乎是沒用的廢物,雖不便澈底改變定義,不過也許卻適合在emacs挪用成其他定義。
要是要去X 視窗改定義的話是在/etc/X11/xorg.conf 下改動
Section "InputDevice"
Identifier "Keyboard1"
Driver "Kbd"
Option "XkbModel" "pc105"
Option "XkbOptions" "compose:rwin"
EndSection
設定是在選項
Option "XkbOptions" "新動作定義:原鍵盤設定"
如Option "XkbOptions" "ctrl:nocaps"
很多人把capsLock 當成 Ctrl,我覺得很浪費,因為可以拿來當別的鍵用
假如想要看當前鍵盤原始定義檔,執行
xkbcomp $DISPLAY
就會產生以 server-0_ 開頭的檔案如
server-0_0.xkb
滑鼠左鍵:選擇
滑鼠中鍵:貼
滑鼠右鍵:標示區間
Shift 滑鼠左鍵: 跳出 Font 選單(相當於Emacs 主選單->Options->Set Font/Fontset)
Shift 滑鼠中鍵: 呼叫 dird ,在檔名字串上按Shift 滑鼠中鍵可開啟這個檔
Shift 滑鼠右鍵: 沒有定義(這應該可以拿來自行定義常用的動作)
Ctl 滑鼠左鍵:跳出緩衝區選單供切換
Ctl 滑鼠中鍵:跳出文字顯示選單供更動顯示選項(相當於Emacs 主選單->Edit->Text Properties)
Ctl 滑鼠右鍵:應不同的緩衝區模式會有不同的回應。
在%cscope%緩衝區下執行會跳出cscope顯示選單供更動顯示選項(在HTML 或 C,... mode 就會跳出相對於Emacs 主選單->HTML/SGML/C模式的選單)
Alt 滑鼠鍵: 視窗管理(跟emacs無關)
Alt 滑鼠左鍵:拉動視窗
Alt 滑鼠中鍵:調整視窗長寬度,這在剛用C-x 5 2 啟動某視窗可是預設的長寬太小時很有用。要是嫌ecb 左邊frame 寬度佔去的比例太大,可以在緩衝區回應視窗裡去拉動分隔線調整比例。
Alt 滑鼠右鍵:視窗動作管理目錄(也包含前二者)
全域鍵盤定義,有幾種不同寫法。在
XEmacs 與 Emacs傳統上 (version 19)用
(define-key global-map [(control f9)] 'cscope-find-global-definition)
(define-key global-map [(ctrl f9)] 'cscope-find-global-definition)
(define-key global-map [(meta f7)] 'cscope-find-global-definition-no-prompting)
XEmacs 與 Emacs兩者較新版(version >20)寫法
(define-key global-map (kbd "C-") 'forward-word)
Emacs 獨有的寫法
(define-key global-map [C-right] 'forward-word)
不過要小心自行定義不要跟別的套件定義打架。比如說
C-F3到C-F6,C-F8,F3到F8跟F11已被Xref定義過了。F1, F2, F10 被Eamcs 定義過了
有幾個X 視窗相關的鍵盤定義也要注意,如
X-windows
Ctl-Alt-F1 到F12
Metacity (無論有 Compiz 與否)
Alt-Tab, Alt-SPACE, Alt-F1,Alt-F2,Alt-F4,Alt-F5,Alt-F7到 Alt-F10,
Ctl-Alt-Tab, Ctl-Alt-d, Ctl-Alt+L, Ctl-Alt-加上左右上下鍵,
Ctl-Alt-SHIFT-加上左右上下鍵, PRINT, Alt-PRINT
Alt-ESC, Ctl-Alt-ESC (但在Emacs 被重新定義了)
Compiz 3D
Ctrl + Alt + 左鼠左鍵在桌面上拖曳, Super + 老鼠右鍵 , super + 老鼠
滾輪向上滑, Super + 老鼠滾輪向下滑, Ctrl+Alt+向下鍵按著不放,Ctrl+Alt按著不放+左右方向鍵
功能鍵剩下
F9,F12
shift-F1, shift-F5, shift-F7,
C-F1,C-F2,C-F7,C-F9到C-F12
M-F3, M-F6, M-F11, M-F12
super F1到F12
metacity 桌面管理員預設鍵盤快速鍵用法
Compiz 3D 桌面的使用設定
CapsKey
Emacs key binding help page
An Unreliable Guide to XKB Configuration
當常常用emacs 寫作開發程式做某特定動作,就要按一大串鍵會減低效率。有一個解決的方式是去 ~/.emacs 下自行定義全域鍵盤控制鍵/滑鼠定義。不過要作到自行定義,要先瞭解整個環境是如何定義鍵盤的:
Emacs 控制字首定義
控制字首可以放在"任何"一般字元前,甚至滑鼠動作前,其中可以用下面簡寫
M- (meta)
C- 或 ^(control )
S- (shift)
A-(alt)
H- (hyper)
s- (super)
字首順序是可變換的 (M-C-x 跟 C-M-x 是一樣的意思)
可以用多次如 3*<right>跟<right><right><right>是一樣的意思
function 鍵字首可以寫到角括號裡, C-<down> 跟 <C-down> 是一樣的意思
X 視窗鍵盤定義
在我的鍵盤(PC105鍵盤)上
Alt鍵定義成 meta鍵
左視窗鍵定義成 super 鍵
右視窗鍵定義成兩層定義,第二層定義為Multi 鍵(一般所謂的 compose)
選單鍵定義成 Meta-X
其實還有Scroll Lock跟 Caps Lock 跟 SysRq。除了opera, 跟 virtual console ,...外 Scroll lock 跟 SysRq幾乎是沒用的廢物,雖不便澈底改變定義,不過也許卻適合在emacs挪用成其他定義。
要是要去X 視窗改定義的話是在/etc/X11/xorg.conf 下改動
Section "InputDevice"
Identifier "Keyboard1"
Driver "Kbd"
Option "XkbModel" "pc105"
Option "XkbOptions" "compose:rwin"
EndSection
設定是在選項
Option "XkbOptions" "新動作定義:原鍵盤設定"
如Option "XkbOptions" "ctrl:nocaps"
很多人把capsLock 當成 Ctrl,我覺得很浪費,因為可以拿來當別的鍵用
假如想要看當前鍵盤原始定義檔,執行
xkbcomp $DISPLAY
就會產生以 server-0_ 開頭的檔案如
server-0_0.xkb
Emacs 滑鼠鍵定義
滑鼠左鍵:選擇
滑鼠中鍵:貼
滑鼠右鍵:標示區間
Shift 滑鼠左鍵: 跳出 Font 選單(相當於Emacs 主選單->Options->Set Font/Fontset)
Shift 滑鼠中鍵: 呼叫 dird ,在檔名字串上按Shift 滑鼠中鍵可開啟這個檔
Shift 滑鼠右鍵: 沒有定義(這應該可以拿來自行定義常用的動作)
Ctl 滑鼠左鍵:跳出緩衝區選單供切換
Ctl 滑鼠中鍵:跳出文字顯示選單供更動顯示選項(相當於Emacs 主選單->Edit->Text Properties)
Ctl 滑鼠右鍵:應不同的緩衝區模式會有不同的回應。
在%cscope%緩衝區下執行會跳出cscope顯示選單供更動顯示選項(在HTML 或 C,... mode 就會跳出相對於Emacs 主選單->HTML/SGML/C模式的選單)
Alt 滑鼠鍵: 視窗管理(跟emacs無關)
Alt 滑鼠左鍵:拉動視窗
Alt 滑鼠中鍵:調整視窗長寬度,這在剛用C-x 5 2 啟動某視窗可是預設的長寬太小時很有用。要是嫌ecb 左邊frame 寬度佔去的比例太大,可以在緩衝區回應視窗裡去拉動分隔線調整比例。
Alt 滑鼠右鍵:視窗動作管理目錄(也包含前二者)
自行定義Emacs 全域鍵盤定義
全域鍵盤定義,有幾種不同寫法。在
XEmacs 與 Emacs傳統上 (version 19)用
(define-key global-map [(control f9)] 'cscope-find-global-definition)
(define-key global-map [(ctrl f9)] 'cscope-find-global-definition)
(define-key global-map [(meta f7)] 'cscope-find-global-definition-no-prompting)
XEmacs 與 Emacs兩者較新版(version >20)寫法
(define-key global-map (kbd "C-
Emacs 獨有的寫法
(define-key global-map [C-right] 'forward-word)
不過要小心自行定義不要跟別的套件定義打架。比如說
C-F3到C-F6,C-F8,F3到F8跟F11已被Xref定義過了。F1, F2, F10 被Eamcs 定義過了
有幾個X 視窗相關的鍵盤定義也要注意,如
X-windows
Ctl-Alt-F1 到F12
Metacity (無論有 Compiz 與否)
Alt-Tab, Alt-SPACE, Alt-F1,Alt-F2,Alt-F4,Alt-F5,Alt-F7到 Alt-F10,
Ctl-Alt-Tab, Ctl-Alt-d, Ctl-Alt+L, Ctl-Alt-加上左右上下鍵,
Ctl-Alt-SHIFT-加上左右上下鍵, PRINT, Alt-PRINT
Alt-ESC, Ctl-Alt-ESC (但在Emacs 被重新定義了)
Compiz 3D
Ctrl + Alt + 左鼠左鍵在桌面上拖曳, Super + 老鼠右鍵 , super + 老鼠
滾輪向上滑, Super + 老鼠滾輪向下滑, Ctrl+Alt+向下鍵按著不放,Ctrl+Alt按著不放+左右方向鍵
功能鍵剩下
F9,F12
shift-F1, shift-F5, shift-F7,
C-F1,C-F2,C-F7,C-F9到C-F12
M-F3, M-F6, M-F11, M-F12
super F1到F12
延伸閱讀
metacity 桌面管理員預設鍵盤快速鍵用法
Compiz 3D 桌面的使用設定
CapsKey
Emacs key binding help page
An Unreliable Guide to XKB Configuration
星期日, 10月 21, 2007
用Emacs 開發C 程式
Version 1.1
(Oct 21: 1.0版)
(Nov.12 1.1版: xcscope 的深入討論獨立出來自成一節)
最近被學校猛操 C 程式開發,我覺得開發C 除錯的時間要比lisp長很多,非得找方便的開發除錯環境來幫忙不可。理論上我可以用eclispe或anjuta 這種大傢伙來開發,但我一邊開發除錯還要一邊作別的事,那些不是很方便。最好的選擇還是找能跟emacs 搭配的工具。
目前在emacs上裝了
ecb
xcscope
xrefactory (xref-1.6.10)
覺得工作起來順手多了。這三個各司其職:
ecb 比較接近快速的瀏覽 source code 整體本身
靜態的呼叫範圍相關問題用xcscope查
跟編譯比較接近的相關問題用xref
三者都跟emacs 的source buffer 緊密結合
除了這三者外,還有一些其他的工具,其中cbrowser好像很久沒更新。SimpleCallTree 我弄不出來,作者勸我用比較正式的工具代替。
Code Crusader 5.2.1 是商業程式。demo有兩種,一種是限制使用時間,另一種是限制最多開啟5 個檔案跟5 個視窗但還要註冊。我不是很喜歡。
Doxymacs等於是Doxygen + {X}Emacs。我根本沒時間好好弄文件,就先擱著。
還有一些不熟的地方,等日後弄通了再整理出來。參見CategoryProgrammerUtils
結合gdb, outline-mode...這些說起來話長,先放一張圖片供參考。下面會再提到。可以看到在History 視窗裡某些檔案icon 從綠點變成橘點,表示下面這些檔更動過
hmm.cpp
Point.h
其他沒有綠點/橘點的檔案(如chineseNL.txtP),是其他正在編輯但不相干這個工作目錄的。但在目錄視窗裡可以看到Makefile 被動過,所以在這會從綠點變成橘點,但不是emacs 弄的,所以不出現在History 視窗。

跟著cscope 有個 xcscope ,提供cscope 支援,可以讓搜尋變數的過程更簡便。附圖可以看到xcscope 把搜尋viterbi 這個符號的兩個結果同時在%cscope%裡顯示

關於xcsope 的深入討論獨立出來,參見第三部分:xcscope整合。
XreFactory(下面簡稱xref)是 www.xref-tech.com 的產品。其中 c/java 是免費使用。現在是1.6.10版。
C/C++ 版現在是2.0.13版,只有八天合法試用期,過了就該買license。
參見http://www.emacswiki.org/cgi-bin/emacs-en/XreFactory
xrefactory 可以列出沒有用到的變數。當編譯時出現問題時,假如選擇查看 log 檔,*xref-log* 視窗會列出有問題的行。如同 cscope,這時用鼠標移到其中想要跳過去查看的那一行,按滑鼠中鍵或左鍵,主程式視窗列表就會跳到對應的那一行。
XreFactory會在~/下產生 .xrefrc
每次建立一個新project 時會產生一個以
[子目錄]
開頭的區塊,裡面可以設定 編譯的選項。我自己是把 make debug 放進去,在
Makefile 註明 gcc -g 好產生符號表供dgb使用。
這兩者分別控制獨立相對應的主程式列表視窗。
假如螢幕夠大,建議開兩個frame ,其中一個執行 ecb ,一個不要執行 ecb。因為 xref切frame成左右兩個視窗,建議在沒有執行 ecb的frame執行xref 動作。在有執行 ecb的frame 下切到*cscope* 的 buffer執行cscope 動作
寫好直接在 emacs主選單下選 compile。
編完直接在 emacs主選單下選 tool -> debugger(GDB)
以我手上這個程式為例,跑到最後出現
Program received signal SIGSEGV, Segmentation fault.
0x00002b4736238eab in fclose () from /lib64/libc.so.6
(gdb) where
#0 0x00002b4736238eab in fclose () from /lib64/libc.so.6
#1 0x00000000004016d6 in main (argc=1, argv=0x7fff74d3e1a8) at test.c:488
(gdb)
所以就知道程式死在第488行附近
(Oct 21: 1.0版)
(Nov.12 1.1版: xcscope 的深入討論獨立出來自成一節)
最近被學校猛操 C 程式開發,我覺得開發C 除錯的時間要比lisp長很多,非得找方便的開發除錯環境來幫忙不可。理論上我可以用eclispe或anjuta 這種大傢伙來開發,但我一邊開發除錯還要一邊作別的事,那些不是很方便。最好的選擇還是找能跟emacs 搭配的工具。
目前在emacs上裝了
ecb
xcscope
xrefactory (xref-1.6.10)
覺得工作起來順手多了。這三個各司其職:
ecb 比較接近快速的瀏覽 source code 整體本身
靜態的呼叫範圍相關問題用xcscope查
跟編譯比較接近的相關問題用xref
三者都跟emacs 的source buffer 緊密結合
除了這三者外,還有一些其他的工具,其中cbrowser好像很久沒更新。SimpleCallTree 我弄不出來,作者勸我用比較正式的工具代替。
Code Crusader 5.2.1 是商業程式。demo有兩種,一種是限制使用時間,另一種是限制最多開啟5 個檔案跟5 個視窗但還要註冊。我不是很喜歡。
Doxymacs等於是Doxygen + {X}Emacs。我根本沒時間好好弄文件,就先擱著。
還有一些不熟的地方,等日後弄通了再整理出來。參見CategoryProgrammerUtils
ecb
結合gdb, outline-mode...這些說起來話長,先放一張圖片供參考。下面會再提到。可以看到在History 視窗裡某些檔案icon 從綠點變成橘點,表示下面這些檔更動過
hmm.cpp
Point.h
其他沒有綠點/橘點的檔案(如chineseNL.txtP),是其他正在編輯但不相干這個工作目錄的。但在目錄視窗裡可以看到Makefile 被動過,所以在這會從綠點變成橘點,但不是emacs 弄的,所以不出現在History 視窗。

xcscope
跟著cscope 有個 xcscope ,提供cscope 支援,可以讓搜尋變數的過程更簡便。附圖可以看到xcscope 把搜尋viterbi 這個符號的兩個結果同時在%cscope%裡顯示

關於xcsope 的深入討論獨立出來,參見第三部分:xcscope整合。
XreFactory
XreFactory(下面簡稱xref)是 www.xref-tech.com 的產品。其中 c/java 是免費使用。現在是1.6.10版。
C/C++ 版現在是2.0.13版,只有八天合法試用期,過了就該買license。
參見http://www.emacswiki.org/cgi-bin/emacs-en/XreFactory
xrefactory 可以列出沒有用到的變數。當編譯時出現問題時,假如選擇查看 log 檔,*xref-log* 視窗會列出有問題的行。如同 cscope,這時用鼠標移到其中想要跳過去查看的那一行,按滑鼠中鍵或左鍵,主程式視窗列表就會跳到對應的那一行。
XreFactory會在~/下產生 .xrefrc
每次建立一個新project 時會產生一個以
[子目錄]
開頭的區塊,裡面可以設定 編譯的選項。我自己是把 make debug 放進去,在
Makefile 註明 gcc -g 好產生符號表供dgb使用。
三者整合使用
這兩者分別控制獨立相對應的主程式列表視窗。
假如螢幕夠大,建議開兩個frame ,其中一個執行 ecb ,一個不要執行 ecb。因為 xref切frame成左右兩個視窗,建議在沒有執行 ecb的frame執行xref 動作。在有執行 ecb的frame 下切到*cscope* 的 buffer執行cscope 動作
寫好直接在 emacs主選單下選 compile。
編完直接在 emacs主選單下選 tool -> debugger(GDB)
以我手上這個程式為例,跑到最後出現
Program received signal SIGSEGV, Segmentation fault.
0x00002b4736238eab in fclose () from /lib64/libc.so.6
(gdb) where
#0 0x00002b4736238eab in fclose () from /lib64/libc.so.6
#1 0x00000000004016d6 in main (argc=1, argv=0x7fff74d3e1a8) at test.c:488
(gdb)
所以就知道程式死在第488行附近
星期五, 6月 08, 2007
在Emacs 上用正規表達式(Regular Expression)
前言
我痛恨Computer Science 一堆老師的位子都被有辦法的外系背景的人佔走,這些人又不懂電腦實務,結果搞出來的電腦教育七零八落。變成惡性循環。這檔事中外皆然,但臺灣尤烈。
假如離散數學學過了正規表達式(Regular expression)跟automata ,就一廂情願以為是可以直接在compiler 上套用non-deterministic的觀念,那就會死的很慘。就算修過compiler ,知道了要用deterministic的觀念,要以為在unix 上的find/grep/awk/表達檔案 wild card 上也可直接套用正規表達式(regular expression) 觀念來用,保證也死的很慘。因為解釋方式不一樣。現在發現,就算知道了前述 unix 系統上的工具如何正確的用正規表達式,在Emacs 下用法還是不太一樣,要小心。但是一但會用,真是如虎添翼。
在eamcs裡起動正規表達式的取代是用
ctrl-alt-%
先輸入搜尋字串正規表達式模版,按enter 後,再輸入取代的字串,一般基本的擴充正規表達式(extended Regular Expression)大多可以用
要輸入控制字元如 Crtl-J (也就是unix 上的換行控制字元),用按Ctrl-Q 後再按j 也就是先按 Ctrl-Q 後再按該字元。這讓Emacs 可以搜尋跟取代跨行的文字。強!
以下是詳細列表
我這裡寫的有一點心虛,是因為emacs原來只針對英文設計,處理中文時,因為語文結構上的差異造成了功能定義變得不明確。不過基本上我目前用emacs 22 處理中英文的試驗結果,\b 跟 \w 對待中文字的確是如同英文一般。有意者可以參考gnu 出版的原文手冊。這裡是GNU emacs 手冊提到正規表達式的章節:
http://www.gnu.org/software/emacs/manual/emacs.html#Regexps
我痛恨Computer Science 一堆老師的位子都被有辦法的外系背景的人佔走,這些人又不懂電腦實務,結果搞出來的電腦教育七零八落。變成惡性循環。這檔事中外皆然,但臺灣尤烈。
假如離散數學學過了正規表達式(Regular expression)跟automata ,就一廂情願以為是可以直接在compiler 上套用non-deterministic的觀念,那就會死的很慘。就算修過compiler ,知道了要用deterministic的觀念,要以為在unix 上的find/grep/awk/表達檔案 wild card 上也可直接套用正規表達式(regular expression) 觀念來用,保證也死的很慘。因為解釋方式不一樣。現在發現,就算知道了前述 unix 系統上的工具如何正確的用正規表達式,在Emacs 下用法還是不太一樣,要小心。但是一但會用,真是如虎添翼。
在eamcs裡起動正規表達式的取代是用
ctrl-alt-%
先輸入搜尋字串正規表達式模版,按enter 後,再輸入取代的字串,一般基本的擴充正規表達式(extended Regular Expression)大多可以用
要輸入控制字元如 Crtl-J (也就是unix 上的換行控制字元),用按Ctrl-Q 後再按j 也就是先按 Ctrl-Q 後再按該字元。這讓Emacs 可以搜尋跟取代跨行的文字。強!
以下是詳細列表
- ^ 代表字串開頭
- $ 代表字串結尾
- . 任何字元
- * 重複前面sub-RE任意次, 跟unix 檔案不一樣的是,這跟數學上的RE 用法接近,前面要接一個sub-RE,sub-RE可以是字元RE或字串RE
- + 同*用法,但是是出現一次以上
- ? 同*用法,但是是出現零或一次
- [ ... ] 把 []裡的字元當成集合元素來用,任選其中之一
- [^ ... ] 把 []裡的字元當成集合元素來用,任選這個集合的補集合裡其中元素之一
- \ 逃逸字元,把上述特殊符號當一般字元時要先加\
- \| 或: 前後兩個sub-RE 任選其中之一 ,比如說 腦殘 \| 丁丁
- \( ... \) 連接或群化:把\( \) 裡的平行元素(用\| 分隔)或把sub-RE 元素連成一個大的序列RE,簡而言之就是數學裡的 (,),按照其出現的順序,這些被\( ... \) 形成的RE 可以被後面再次呼叫引用,如\(腦殘 \| 丁丁 \)
- \數字 去引用前面被\( ... \) 形成的RE,如 \2 是引用前面出現過的第二個\( ... \)的正規表達式模組
- \` 在檔案(正確說法其實應該是buffer)起頭的空字串
- \' 在檔案(正確說法其實應該是buffer)末尾的空字串
- \b (英)文字正前或正後方的空字串 `\bfoo\b' 對應任何單獨存在的 `foo' 字串(以sub-string 型式出現的如food就不算).
- \B 不在(英)文字正前或正後方的空字串
- \< 在(英)文字正前方的空字串
- \> 在(英)文字正後方的空字串
- \w 對應一個文字字元(對英文而言,即abcd,...不包含空白之類的分隔字元)
- \W 對應一個非字元字元,也就是\w 的補集
- \scode 對應任何一個程式(code)字元. 程式字元就是上面那些特殊符號,如
- \Scode 對應一個非程式字元
`w'(文字字元), `-' for whitespace, `(',...等等 。詳情見GNU emacs 手冊的章節: The Syntax Table.
我這裡寫的有一點心虛,是因為emacs原來只針對英文設計,處理中文時,因為語文結構上的差異造成了功能定義變得不明確。不過基本上我目前用emacs 22 處理中英文的試驗結果,\b 跟 \w 對待中文字的確是如同英文一般。有意者可以參考gnu 出版的原文手冊。這裡是GNU emacs 手冊提到正規表達式的章節:
http://www.gnu.org/software/emacs/manual/emacs.html#Regexps
訂閱:
文章 (Atom)