google code-beautifer

星期六, 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 資料

星期一, 10月 29, 2007

Linux 的Palm及Zaurus Big5/Unicode同步解決方案

Palm OS5上面的中文是Big5,而MAC OS X /Windows XP系統上是Unicode,Evolution也是。直接拿PC 上的unicode 給Zaurus 有潛在的風險,見mfhsieh 寫的[分享] Zaurus 的 UTF-8 編碼

Palm跟Linux同步可以用jpilot 或Evolution + pilot-link (pilot-link 純粹是一個同步的管道)。jpilot則是自成一格的軟體,好處是可以在輸出時選編碼。

我偏好用Evolution,除Linux 外,不但支援Mac OS X,還有win32 版(2.8.簡易安裝版Calendar 好像還沒完成,不過現有2.16自行安裝版)。Mozilla 計劃的Thunderbird+lignting 的方案現階段還不成熟,就暫不考慮。但要把 pilot-link的Big5/Unicode同步搞定。pilot-link裡libpisync/util.c 裡面有這一段

#define PILOT_CHARSET "CP1252"

/***********************************************************************
*
* Function: convert_ToPilotChar
*
* Summary: Convert any supported desktop text encoding to the Palm
* supported encoding
*
* Summary: Convert from Palm supported encoding to a supported
* desktop text encoding. The Palm charset is assumed to
* be CP1252. This default can be overridden by the
* 'PILOT_CHARSET' environment variable.

所以暴力法就是在/etc/profile 下強迫
export PILOT_CHARSET=BIG5
讓輸出同步資料時編碼轉Big5。(注意BIG5大小寫)。其實應該可以用script來作。

這基本上是叫用 iconv ,所以我相信在zaurus 上,只要把這個port 到
KO/Pi(KDE Pim/Platform-independent)
http://sourceforge.net/projects/kdepimpi/
Zaurus 就可以同步Big5資料
不過我猜測可能要給glibc 瘦身,加入
/usr/lib/gconv/BIG5.so
/usr/lib/gconv/UTF-16.so
/usr/lib/gconv/UTF-32.so
/usr/lib/gconv/UTF-7.so
/usr/lib/gconv/UNICODE.so
這些檔...

目前Palm行事曆,連絡人,todo跟Evolution同步都沒問題,但在Evolutiong上的備忘錄(memo)摘要跟描述要完全一樣,不然無法同步。(palm 的備忘錄欄位較少)

星期六, 10月 27, 2007

Sony palm PDA 的軟體安裝跟其他PDA 基本比較心得

有人給我一台 Palm OS5 的舊clie TG-50 ,但是沒有安裝光碟,我在sony台灣網站上找不到軟體下載。感謝PALMisLIFE上網友MailCone 及mfhsieh 提供資訊我才順利完成軟體安裝。這篇是對那些熱心網友的回應。除了基本比較心得外,也對下一代PDA作一些推測。將分段刊出


基本軟體安裝

其中大部分的軟體需要去www.sonyclie.org 找,再針對個別需要Sony 美國的技術支援網下載換裝新版。

但www.sonyclie.org 需要寄電子郵件給管理員才拿得到帳號密碼。其中有原廠CD 的 iso 如tg50.iso,及個別的zip 如 SonyCliePC.zip。

原廠CD 的 setup.exe 程式會去執行 Palm desktop for Clie'.msi
Windows XP 會因為codepage 不同的緣故會找不到法文字母 e' 的檔名。直接跳過setup.exe,直接去執行 Palm desktop for Clie'.msi 是可以的。此外安裝完了時不會顯示正確的完成百分比。只有過一陣子強迫結束程式,重開機。

所以我改裝SonyCliePC.zip中的Clie Organizer for PC (1.0.040113.2)
Clie Oranizer for PC 會要求先去裝Palm Desktop 。不過 Palm Desktop for
Clie (1.00.031222.1)會有安裝完了時不會顯示正確的完成百分比的問題。裝完後,Add or remove Programs 就會正常出現CLIE Oranizer for PC 及Palm Desktop 。為什麼需要多一個 Clie' Oranizer? 因為 Clie' 有多個Clie' memo 提供非文字手寫筆記。這是Palm Desktop沒有的。

目前測試的結果,在英文版(但default codepage 改成中文,事實上等於中文版)上執行一般的同步沒有問題。

同步

第一次 hotsync 時 XP會去抓PalmUSBD,sys,在原廠CD \Drivers\Hotsync\裡有。
Inteliigence Sync Lite 在SonyCliePC.zip中的比較新(2003版),不過好像不支援 outllok express 的 address book 。

鍵盤

tg-50有內建小鍵盤,不過數字鍵要並用功能鍵才打得出,用注音輸入頗不便。但朋友的紅外線palm one universal wireless keyboard是可以搭配使用。上面就有獨立數字鍵,這是我找得到紅外線鍵盤搭配注音輸入最好的一個,裝上palm的驅動程式就能用了。理論上zaurus 也能用,不過還沒試成功。

大容量快閃記憶體支援

palm OS 據說只能認得第一個分割區。大容量快閃記憶體支援是一個問題。據說新版palm 機系統悄悄用了fat32,所以沒問題,有些人還自己把舊機系統改fat32也能用大容量快閃記憶體。Sony 的產品幾乎清一色用memory stick ,又貴又難用。據Sony官方說法,TG-50是不支援4G MS 的,而且2G 還得用高速的 MS才行,還不保證沒問題。真是爛。在美國看了半天,MS 比起 SD 卡還是天價。所以去網路標了片2G sony 的 high speed MS。等收到了再來更新使用心得。

clie 初步印象跟zaurus 與其他PDA比較

比較之下,palm 把最長用的小程式放在動態記憶體裡,切換速度很快。(1 秒)。這點的便利是那些需要 context switch 的大系統比不上的。zaurus 在這一點顯然比不上。出門在外要臨時找資料,palm 的反應時間會比較快。eee PC 就算CPU跑的快,恐怕也是一樣的情況。個人覺得1 秒內的反應時間是一個很重要的臨界點。想用個計算機去超市比價或算個小費要等長於1 秒就會讓人不耐。但是像查字典第一次啟動長於1秒就還好。palm OS 沒有真正的多工,切換反應時間變成瓶頸。
Palm Foleo 計劃掛掉了,無法得知他們對未來的想法。不過我覺得作業系統像palm OS 4/5 這樣有動態記憶體保留給專屬的常用軟體常駐是蠻重要的。

反應時間會比較快相對犧牲下的是功能性,palm一般人是用power run 之類程式把切換反應時間不太在乎的程式移到快閃記憶體裡,要用時再載入動態記憶體。等於回到了虛擬記憶體的作法。 但是每個連結要用去 lk 的動態記憶體。相對之下 TG-50 的 16M (只能用到11M)記憶體實在太小了。我連 gps程式都不太敢裝。而且這樣的做法不是系統原先就在API 裡規畫好的,不太穩定。有時會當機。

公開的手寫辨識程式跟實作資訊

最近在思考一些有趣的事情:中文的部首/字/詞是分別對應到英文的字母/字/詞。不知道中文詞的平均筆劃經過頻率統計加權後的結果會不會比英文詞小?(因為資訊傳達是以詞作單位,而不僅是以字作單位的任意組合)是的話,這到是半理論證明"中文輸入不會比英文慢": 所謂正體中文會妨礙科學進步的論調只是那些不深思熟慮的傢伙不經證明的夸夸之詞。我為什麼直覺這樣推斷?因為直覺上中文字形的的熵(entrop)平均值應該比英文字形的大。假如我的假說成立的話,以手寫來說,中文輸入會比英文快。

我的確是有在著手一些關連到中文的語料問題,這些是解決很多事的關鍵性基礎研究。不過對大多數的人而言,最重要的問題反倒是: 能不能有公開的手寫辨識程式?關於這點,目前看到公開的手寫辨識程式跟實作資訊有:

Palatis 寫了 Chrasis,似乎可以用滑鼠輸入。今年6月 的時候我曾試著在Mandriva 2007.1上編譯看看,但還不成功,後來忙就先擱著。

jserv 寫了這一篇從Chrasis 談手寫辨識引擎在移動裝置的機會,有提到一些相關的問題

歪林 (superylam@netcape.net)為了掌心雷跟百變小蒙恬寫了X Windows手寫板驅程程序及輸入法

根據網路上的說法,蒙恬筆豪華版(LLC 504)隨附的數位手寫版(型號FT-0405-U02),是由知名數位繪圖板廠商Wacom代工。而Linux 在wacom 的支援好像還不錯。臺灣的繪圖板就不知道。

繪圖板蠻貴的,我連每天要用的老舊交通工具都沒錢去修,一時沒辦法負擔得起這種昂貴的玩具。那天要是弄得到不管是臺灣或Wacom的繪圖板時,再來試試看把歪林跟Palatis的成果整合在一起。就看誰要先借我手寫版來開發了。