星期六, 12月 22, 2012

xdg-utils, nautilus 與 nemo

因為想知道怎麼把 nautilus 改為 nemo,就開始追代碼了。主要是先從 xdg-open 開始,因為 xdg-open ~ 就可以叫出檔案總管並把位置帶到家目錄。
我 忘了是怎麼知道 xdg-open 這指令的了,這指令就相似於 Windows 的 start 指令,Windows 的 start 是這樣,只要打 start xxx.doc 或是 start http://www.google.com.tw 就可以自動打開相應的程式,像 xxx.doc 就會開 MS Word,網址就會開瀏覽器。xdg-open 也是一樣,輸入 xdg-open xxx.doc 就會用 Open Office 或 LibreOffice 開啟 xxx.doc,以此類推。
xdg-open 是由 xdg-utils 所提供,是用 perl 寫的,再看裏面,會發現程式會根據目前的桌面環境來自動決定要呼叫哪個桌面環境的 open 程式來開啟指定檔案或位置。GNOME 就是 gnome-open,KDE 就是 kde-open,XFCE 就是 exo-open,LXDE 就是 pcmanfm,不一樣的情況可能會改呼叫 gvfs-open, kfmclient 等等的。
所以在 GNOME 環境下打 xdg-open 或 gnome-open 是一樣的。那 gnome-open 又是怎麼做到的呢?gnome-open 是收錄在 libgnome 裡,source code 可以在這裡看到 git.gnome.org/browse/libgnome/tree/libgnome/gnome-open.c ,程式很短,就先判斷檔案的位置,然後就呼叫 glib gio 的 g_app_info_launch_default_for_uri 進行啟動。再更深入,就沒有細究了,總之是根據 GNOME 內建的 MIME 對應來得知該使用哪個程式的。
記得有可以編輯 MIME 的程式,就可以去改,但我忘了程式的名字,一時在系統設定裡也找不到。最後是用了 ubuntu-tweak 來做修改,就把 nautilus 改為 nemo 了。

沒有留言: