google code-beautifer

星期一, 11月 19, 2007

多重(X)emacs設置

一台機器上會有多少版本 ((X)emacs的設置?

  • 原生 win32 build Xemacs 及 emacs : 2
  • cygwin build Xemacs 及 emacs : 2
  • Linux Xemacs 及 emacs : 2
2+2+2 =6!
不過這都可以共用一個 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)

星期日, 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 程式

星期六, 11月 10, 2007

Emacs / X window 鍵盤滑鼠定義

要充分發揮Emacs 各個元件的功能,善用控制鍵/滑鼠是不可或缺的一環。

當常常用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-") '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

星期五, 11月 09, 2007

The Core Pocket Media Player (TCPMP)

The Core Pocket Media Player (TCPMP)是Palm OS上開放原碼的多媒體播放器,比起Sony 內建的播放器好太多了,支援多種格式如
Audio codecs:
Mpeg 1 LayerIII, Ogg Vorbis, Musepack, Wav(Adpcm, uLaw) AC-3
Video codecs:
DivX, XviD, MS-Mpeg4-V3, Mpeg-1
圖片:
MJPEG, JPG, PNG,TIFF
Containers:
AVI (*.avi), Matroska (*.mkv, *.mka), MP4 (*.mp4, *.m4a), Ogg Media (*.ogg, *.ogm)

安裝使用建議
1. 將TCPMP主檔及所有Plugin檔放入MS pro 卡或SD/CF卡內 的/PALM/Launcher/內
2. Sony的palm PDA要去http://aibohack.com/clie/modclieaud.htm 下載MCA v2.05 (檔案名稱:MCA2_05.prc)來提供Palm OS 5.2的音效。安裝後,還要到System Settings 設定裡的「MCA2」選項去啟動Install,指定某個應用程式使用MCA來做聲音處理。之後才會有聲音。
3. 把多媒體檔放入MS pro 或 CF卡 內自建資料夾內,這樣TCPMP就可播放。

惟一美中不足的是播放清單沒有好的介面。若偶爾還是要用Sony 的播放器聽音樂,那還是乖乖把音樂檔放到/PALM/Programs/MSAUDIO/內

使用以下這段影片在CLie TG-50 (200Mhz) 測試 0.72RC1
http://picard.exceed.hu/samples/RL_LQB_320x176_256_64.avi
得到以下數據
Average speed 149.65

benchmark FPS 35.92
benchmark time: 1:41.209

original FPS 24.00
original time: 2:31.459

以這個CPU 的速度而言,算是了不得的。我在Linux 上測,原檔案影音是同步的,但在 TG-50 上 就會有影音同步問題。裝了sonyhhe plugin/打開override AVI timing based on audio 也沒用,不知道是不是CPU 不夠力。但聽音樂是絕對沒問題的。 理論上要讓他跑的順一些,還可以用UDMH 或超頻之類的手段,不過我沒時間去試了。

http://forum.palmislife.com/viewthread.php?tid=47801&extra=&page=1
跟這裡
http://blogs.shintak.info/articles/4567.aspx
有一些benchmark 資料