Friday, July 07, 2006

Sawfish

ช่วงนี้ใช้ notebook ที่ลง Linux ไว้บ่อยมาก
เวลาใช้ ก็ใช้เป็น routine เลย
เปิด terminal ที่ workspace 1
เปิด eclipse ที่ workspace 2
เปิด emacs ที่ workspace 2
เปิด firefox ที่ workspace 3

ทุกวันตอนเปิดเครื่อง ก็ต้องไล่ start
แล้วก็ไล่วางให้ถูก workspace
ก็เลยเกิดความคิดจะลอง customize ให้มัน start ให้เอง

โปรแกรมที่ลองใช้ก็คือ Sawfish
ซึ่งเป็น Window manager ที่เขียนด้วย Lisp
ทำให้ได้หัดเขียน lisp ไปในตัว

เริ่มด้วยความต้องการอย่างง่ายสุดก่อน
กดครั้งเดียวได้โปรแกรมทุกตัวที่ต้องการ
(defun run-all ()
(start-emacs)
(start-eclipse)
(start-firefox)
(start-term))

(defun start-emacs ()
(system "emacs &"))

...

start มาได้อย่างนี้แล้ว แต่ทุกตัวก็ยังกองกันอยู่ที่ workspace เดียว
ก็เลยเขียน function ขึ้นมาจัด workspace
(defun arrange-ws ()
(move-window-to-workspace (emacs-win) 0 1)
(move-window-to-workspace (eclipse-win) 0 1)
(move-window-to-workspace (firefox-win) 0 2))

(defun emacs-win ()
(get-window-by-name-re "^emacs"))

(defun eclipse-win ()
(get-window-by-name-re ".Eclipse"))

...


จัดการ bind function เข้ากับ short-cut key
ก็เป็นอันเรียบร้อย
(bind-keys global-keymap
"H-a"
`(run-all))


ขั้นถัดไป ก็คือทำให้โปรแกรมมันฉลาดกว่านี้
กดครั้งเดียวพอ ไม่ต้องกด 2 ครั้ง
(เนื่องจากเวลาสั่ง system เราระบุว่าให้ start process
แต่ความที่มันเป็น asyncronous ทำให้เราไม่รู้ว่า process มัน start เสร็จหรือยัง
ทำให้ไม่รู้ว่าควรจะใช้คำสั่ง switch workspace ตอนไหนดี)

Link
Sawfish code library - แหล่งรวม code ให้ลอก

Related link from Roti

1 comment:

ziddik::zdk said...

เจ๋งฮะ