將Cygwin Emacs設爲Windows explorer默認打開程序

因爲我在平日的學習與工做中會常常用到Cygwin中的Emacs,很天然地想到應該將emacsclient做爲指定文件類型在Windows explorer中的默認打開程序。這樣,即可以直接雙擊文件後在Emacs中編輯,從而省去了在Cygwin命令行下手動輸入路徑與文件名的麻煩,亦能夠用方便快捷的Windows explorer替代Emacs Dired mode。要實現這樣的功能,須要解決兩個問題:學習

  1. 從Windows文件路徑格式到Cygwin路徑格式的轉換。
  2. 對於XP操做系統,中文文件名爲GBK編碼,而Cygwin使用的是UTF-8編碼。爲此須要對(包含中文的)文件路徑進行編碼轉換。

個人解決辦法是:建立一個Windows批處理文件emacsclient.bat,將指定文件類型的默認打開程序與之關聯。該批處理文件獲取在Windows explorer中被雙擊的文件路徑名,用UTF-8編碼存入臨時文件。而後,從該文件中提取出路徑字符串,將其做爲emacsclient的參數調用執行。該批處理文件emacsclient.bat的內容以下:編碼

@echo off
touch "/cygdrive/c/.emacsclient_gbk.tmp"
cygpath %1 > C:\.emacsclient_gbk.tmp
iconv -f GBK -t UTF-8 -o "/cygdrive/c/.emacsclient_utf8.tmp" "/cygdrive/c/.emacsclient_gbk.tmp"
for /f "usebackq delims=:" %%f in ("C:\.emacsclient_utf8.tmp") do emacsclient-w32.exe "%%f"
@echo on

其中,操作系統

touch "/cygdrive/c/.emacsclient_gbk.tmp"

調用Cygwin的touch命令生成臨時文件.emacsclient_gbk.tmp,用於存放GBK編碼的待打開文件路徑名。須要注意,因爲touch是Cygwin命令,做爲其參數的臨時文件路徑名應採用Cygwin格式。 而後,調用cygpath命令,將待打開文件路徑名(以%1參數傳入emacsclient.bat)做爲標準輸出重定向到C:\.emacsclient_gbk.tmp。須要注意,因爲此時的標準輸出重定向是在Windows批處理文件中作的,因此臨時文件.emacsclient_gbk.tmp的路徑應採用Windows格式。值得一提的是,在首次調用emacsclient.bat前,臨時文件.emacsclient_gbk.tmp還沒有生成,而Windows批處理命令並不支持標準輸出重定向到一個不存在的文件。因此,在這以前調用touch命令生成該臨時文件是必須的。 再調用iconv命令進行編碼轉換,將UTF-8編碼的路徑名存入.emacsclient_utf8.tmp文件。命令行

iconv -f GBK -t UTF-8 -o "/cygdrive/c/.emacsclient_utf8.tmp" "/cygdrive/c/.emacsclient_gbk.tmp"

最後,從.emacsclient_utf8.tmp文件中提取出文件路徑名,交由emacsclient-w32程序打開。字符串

相關文章
相關標籤/搜索