今天和emacs的ido mode較勁了

2021-05-22 12:20:06 字數 2003 閱讀 4883

emacs無疑是最強大的編輯器,最近她又公升級到23.2 了,內建了強大的cedet。沒有不公升級一下的道理。

公升級後主要是把.emacs中關於cedet載入的配置關掉即可。但是我日常使用的ido-mode居然出現了問題。

因為在做symbian手機應用開發,所以隨大流把所有工程放到了c:/symbian/source目錄當中,並且用emacs修改,用abld編譯。fine,一步步編寫越來越多的工程,用helloworldbasic到helloworldplus到multiviews。可以在安裝23.2之後,每次在用c-x c-f開啟c:/symbian/source時,都只能看到乙個helloworldbasic目錄的補全。沒理由啊,我用cmd看過,用explorer看過,source目錄下子目錄不下20個。

我重灌回23.1,問題依舊。試過其它目錄,補全都正常。

難道是.emacs出問題了(用-q啟動正常)。我用二分法試完了.emacs,發現問題依舊。

最後懷疑到~/.ido.last檔案上,因為在裡面看到了c:/symbian/source的cache。刪之。。

重啟emacs。still malfunction...

又亂折騰了一會兒,想起,ido-mode可能會在退出時把cache寫回.ido.last,所以退出emacs,刪.ido.last。終於好了。

在前面「亂折騰」那會兒,還去檢視了ido-find-file,心想它是不是有bug。在看ido-find-file,我震驚了。原來這函式這麼強大呀,還支援歷史管理、find查詢、正規表示式。其中的find查詢(在補全時m-f)非常吸引我,這樣可以瞬間定位多級子目錄中的同名檔案。在windows中試了一下,發現不行。ssh到ubuntu中,可用。。。這回鐵是bug沒錯了。。

我花了些時間修改了 ido-wide-find-dirs-or-files函式,還把cygwin的windows目錄名相容支援開啟了。哈哈。以後find-file就可以跨越多級目錄補全了。。

p.s:在windows下,find.exe和系統內建的有衝突,所以建議把cygwin版的find複製成cygfind,再把

find-program定製成"cygfind"就好了。

;remember to set cygwin=nodosfilewarning

(defun ido-wide-find-dirs-or-files (dir file &optional prefix finddir)

;; as ido-run-find-command, but returns a list of cons pairs ("file" . "dir")

(let ((filenames

(split-string

(shell-command-to-string

(concat find-program " " ;"cygfind "

(shell-quote-argument dir)

" -name "

(shell-quote-argument

(concat (if prefix "" "*") file "*"))

" -type " (if finddir "d" "f") " -print"))))

filename d f

res)

(while filenames

(message find-program)

(setq filename (car filenames)

filenames (cdr filenames))

(if (and (or (string-match "^/" filename) (string-match "^.:" filename))

(file-exists-p filename))

(setq d (file-name-directory filename)

f (file-name-nondirectory filename)

res (cons (cons (if finddir (ido-final-slash f t) f) d) res))))

res))

昨天和今天

昨天,學校運動會開幕,早上不到七點爬起來去看開幕式。開幕式在我這個外行看來比想象中的好很多。當然給我印象最深的還是某幾個學院運動員出場的短裙加 還有每個方陣前面舉牌子的禮儀小姐。而後去看了健美操比賽,沒想到場面相當火爆,我們去的時候都沒有座位,站了乙個上午,夠累的。我看不出門道,只能去看熱鬧,當然主...

Oracle的昨天和今天

什麼是 oracle 乙個很好的問題!在 oracle 的版本3 時,就希望有人來問這個問題,那時 oracle 的所有資料不過三四本書。當時 oracle 主要是乙個資料庫公司,提供的服務很少,甚至可以說幾乎沒有,此外也沒有成熟的應用軟體。今天情況就相當不同了,這個數十億美元的公司擁有大量的軟體產...

Shell 的昨天今天和明天

yesterdayformat date date yesterday y m d h m s echo yesterdayformat 輸出格式是 2006 03 30 08 39 54 明天的命令是 tomorrowformat date date tomorrow y m d h m s ec...