ZHL的emacs笔记:配置小技巧


本文档是"ZHL的emacs笔记"的一部分。

本文档的格式是为了快速检索与浏览而专门调整的,最好用emacs来查看,将tab
缩进显式设为3个字符(参见第49),设置不自动换行(参见第7),并使用outline模
式(参见第67),以提高学习和工作效率。

本文档包含的小配置,有的是从网络上搜集的,有的是本人自己写的,所有都经
过本人测试或正在使用,应该拿来就可以用的那种,但随着时间推移以及软件版
本升级,有些配置可能已经不用了或过时了(很少),请读者注意。

希望本文档能给emacs同好一些帮助,任何问题或建议可以发信到 seaxii@https://www.360docs.net/doc/9115268746.html, 来讨论。

文档正文----------------------------------------------------------------

**emacs配置小技巧:不做特殊说明的基本是在~/.emacs里进行配置。
**1、语法加亮。(Font Lock is also known as "syntax highlighting".)
(global-font-lock-mode t)
**2、文件以newline结尾。
(setq require-final-newline t)
**3、当光标在文件末尾时执行"到下行"操作时不自动添加新行。否则,会自动加入一个新行并移动到这个新行。
(setq next-line-add-newlines nil)
**4、不要菜单条和工具条,显示时钟和列号在状态行。
(menu-bar-mode -1)
(tool-bar-mode -1)
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time)
(column-number-mode t)
**<<5>>、设置初始窗格和后续窗格打开时的字体大小和窗口大小及位置。
;; Set the frame's default parameters. ---by ZHL
;; Use the tool 'xwininfo' to detect the window's size, pay attention to the relation of the font's size and window's size.
(when (string-match "x" (prin1-to-string window-system))
(setq initial-frame-alist
(append '(
(font . "7x14")
(top . 30)
(left . 7)
(width . 178)
(height . 68))
initial-frame-alist))
(setq default-frame-alist
(append '(
(font . "7x14")
(top . 0)
(left . 0)
(width . 178)
(height . 68))
default-frame-alist)))
;; execute (w32-select-font nil t) in the *scratch* buffer (by
;; pressing C-j at the end of the line) to find a correct font's
;; Fontconfig name. ---by ZHL 2011-12-30 10:51:27
(when (string-match "w32" (prin1-to-string window-system))
(setq initial-frame-alist
(append '(
;; (font . "Courier New-11")
(font . "NSimSun-11")
(background-color . "black")
(foreground-color . "ivory")
(cursor-color . "red")
(top . 0)
(left . 29)
(width . 153)


(height . 51))
initial-frame-alist))
(setq default-frame-alist
(append '(
;; (font . "Courier New-11")
(font . "NSimSun-11")
(background-color . "black")
(foreground-color . "ivory")
(cursor-color . "red")
(top . 0)
(left . 29)
(width . 153)
(height . 51))
default-frame-alist)))
**6、文本块加亮以及文本块替换和括号对加亮。
(transient-mark-mode t)
(delete-selection-mode t)
(show-paren-mode t)
**7、行过长时不做自动换行显示,而是截短显示。truncate-lines 的默认值为 nil ,即换行显示。但minibuffer不应截短。
(setq-default truncate-lines t)
(global-set-key "\eOo" 'toggle-truncate-lines)
(add-hook 'minibuffer-setup-hook
'(lambda ()
(setq truncate-lines nil)))
**8、决定emacs在水平分割的窗口中其是否换行显示或截短显示的行为跟随变量 truncate-lines 的值进行控制。truncate-partial-width-windows 的默认值为 t ,即在水平分割的窗口中一定截短显示。
(setq-default truncate-partial-width-windows nil)
**9、使输入密码时暗文显示。否则密码是明文。
(add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)
**10、用于C编码风格,设置缩进量基准值为4个字符,且插入tab符时以等量空格字符填充。
(add-hook 'c++-mode-hook
'(lambda ()
(setq c-basic-offset 4)
(setq indent-tabs-mode nil)))
**11、For CEDET and ECB 。
;; for 23.1.1
;; (when (string-match "23.1.1" (prin1-to-string emacs-version))
;; ;; Load CEDET
;; (load-file "~/local/zhl-lisp/cedet-1.0beta3b/common/cedet.el")
;; ;; Enabling SEMANTIC minor modes. See semantic/INSTALL for more ideas.
;; (semantic-load-enable-code-helpers)
;; ;; set the default dir to save semantic cache file, otherwise will save current dir base on code file. make sure the dir exist. ---by ZHL
;; (setq semanticdb-default-save-directory "~/backup/semantic")
;; ;; set interval (seconds) to check idle for running of idle-scheduler, expand it to save CPU. ---by ZHL
;; (setq-default semantic-idle-scheduler-idle-time 30)
;; ;; Load ECB
;; (add-to-list 'load-path "~/local/zhl-lisp/ecb-2.32")
;; (require 'ecb)
;; (setq ecb-layout-window-sizes nil)
;; (setq ecb-options-version "2.32")
;; (setq ecb-tip-of-the-day nil)
;; (global-set-key "\eOea" 'ecb-activate)
;; (global-set-key "\eOed" 'ecb-deactivate)
;; )
;; for 23.3.1
(when (string-match "23.3.1" (prin1-to-string emacs-version))
(setq semantic-default-submodes
'(global-semanticdb-minor-mode
global-semantic-idle-scheduler-mode

;; global-semantic-idle-summary-mode
;; global-semantic-idle-completions-mode
;; global-semantic-decoration-mode
;; global-semantic-highlight-func-mode
;; global-semantic-mru-bookmark-mode
global-semantic-stickyfunc-mode))
(semantic-mode 1)
(add-hook 'org-mode-hook
'(lambda ()
(semantic-mode -1))) ;; Org模式下按键(C-c ,)有冲突,所以关闭之。
)
**12、For Session Management 。第三方的包。
(add-to-list 'load-path "~/local/zhl-lisp/session/lisp")
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
**13、使在dired模式中可对非空目录进行拷贝和删除操作。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
**14、循环切换 buffer 的键绑定,由包 bs.el 支持。
(global-set-key "\C-x\C-b" 'bs-show)
(global-set-key "\M-p" 'bs-cycle-previous)
(global-set-key "\M-n" 'bs-cycle-next)
注:1、bs-show函数类似于list-buffers函数,提供一个缓冲区清单以供操作,但更好使。
2、bs-show函数可以带参数以便显示不同类型的缓冲区清单,默认不带参数时显示"files"类型缓冲区清单。将自动调用bs--configuration-name-for-prefix-arg函数对其参数进行分析并找到对应的变量,再由变量决定显示何种类型的缓冲区清单,具体的:无参数对应变量bs-default-configuration,其默认值为"files";整型参数对应变量bs-configurations,其默认值为一个列表,简单说明如下,1为"all",2为"files",3为"files-and-scratch",4为"all-intern-last",具体请查看帮助;其它参数(包括C-u和M--)对应变量bs-alternative-configuration,其默认值为"all"。
3、bs包扩展了默认的缓冲区管理,且更好使,但基本操作是一样的,参见"文件、缓冲区与窗口"。
**15、在缓冲区保存或关闭后删除自动存盘文件:形如 #file# 的文件。
(setq delete-auto-save-files t)
**16、不要生成备份文件:形如 file~ 的文件。
(setq-default make-backup-files nil)
**17、在状态行上实时显示文本块选择时的行数与字符数。
(setq-default mode-line-format
(add-to-list 'mode-line-format
'(mark-active
(:eval (format "Sel: %d lines, %d chars "
(count-lines (region-beginning) (region-end))
(- (region-end) (region-beginning)))))))
**18、设置显示时的行间距,但只在window系统下才会有作用。
(if window-system (setq-default line-spacing 5))
**19、不显示滚动条。可取值有 nil 、 'right 和 'left 。
(set-scroll-bar-mode nil)
**20、将光标设置成短线(bar),而不是方块(box)。可取值有 nil(不显示光标) 和 'bar ,默认显示成

方块。
(setq-default cursor-type 'bar)
**21、在存盘时自动更新时间戳字符串,并使查找时间戳标记的范围从开头8行扩大为开头50行。
(require 'time-stamp)
(add-hook 'write-file-hooks 'time-stamp)
(setq time-stamp-line-limit 50)
**22、自动保存和装入会话环境。第一次需执行一下 desktop-save 操作。
1、版本22.1以前这样配:
(load "desktop")
(desktop-load-default)
(desktop-read) ;;该语句也可以不指定,以便emacs启动时是清洁的,然后在需要时用手工方式装入环境。
2、版本22.1及以后这样配:
(load "desktop")
(desktop-save-mode)
(setq desktop-save t)
注:1、该配置最好置于~/.emacs的最后,以便等模式的配置装入以后再以新配置的模式打开各个文件,否则先打开了文件而其后的模式配置却未生效。
**23、绑定hippie-expand到M-/,并设定hippie-expand的补全优先列表。
(global-set-key [(meta ?/)] 'hippie-expand)
(setq hippie-expand-try-functions-list
'(try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-complete-file-name-partially
try-complete-file-name
try-expand-all-abbrevs
try-expand-list
try-expand-line
try-complete-lisp-symbol-partially
try-complete-lisp-symbol))
**24、临时记号:有时你需要跳到另一个文件进行一些操作,然后很快的跳回来。你当然可以使用 bookmark 或者寄存器。但是这些实在是太慢了。你多想拥有vi那样的 ma, mb, 'a, 'b 的操作。现在你可以用几行 elisp 达到类似的目的:当你按 C-. 时就做了一个记号。然后你可以到别处,按 C-, 就可以在这两点之间来回跳转了。这虽然没有 vi 的 26 个 mark 多,但是你仔细想想,vi的26个 mark,你通常能用到几个?
(global-set-key [(control ?\.)] 'ska-point-to-register)
(global-set-key "\M-s\M-." 'ska-point-to-register) ;;Windows下有时 C-. 会被万能五笔给截下,所以再加一个键绑定。
(global-set-key [(control ?\,)] 'ska-jump-to-register)
(global-set-key "\M-s\M-," 'ska-jump-to-register)
(defun ska-point-to-register()
"Store cursorposition _fast_ in a register. Use ska-jump-to-register to jump back to the stored position."
(interactive)
(message "ska-point-to-register")
(point-to-register 8))
(defun ska-jump-to-register()
"Switches between current cursorposition and position that was stored with ska-point-to-register."
(interactive)
(let ((tmp (point-marker)))
(jump-to-register 8)
(message "ska-jump-to-register")
(set-register 8 tmp)))
**25、不特别处理大小写而进行精确查找和替换。
(setq-default case-fold-search nil)
(setq-default case-replace nil)
**26、在C++模式中替换词前进按键绑定为词单位前进。

将会将所有绑定在forward-word和backward-word上的按键重新绑定在c-forward-into-nomenclature和c-backward-into-nomenclature。
(add-hook 'c++-mode-hook
'(lambda ()
(let ((fbinds (where-is-internal 'forward-word))
(bbinds (where-is-internal 'backward-word)))
(while fbinds
(define-key c++-mode-map (car fbinds) 'c-forward-into-nomenclature)
(setq fbinds (cdr fbinds)))
(while bbinds
(define-key c++-mode-map (car bbinds) 'c-backward-into-nomenclature)
(setq bbinds (cdr bbinds))))))
**27、将.h文件和.c文件绑定到C++模式中(而不是默认的C模式);将.js文件绑定到java模式中(而不是默认的text模式);
(setq auto-mode-alist (cons '("\\.h\\'" . c++-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.c\\'" . c++-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.js\\'" . java-mode) auto-mode-alist))
注:1、auto-mode-alist变量是一个主模式绑定关系列表,第一条语句的cons将.h与C++模式的绑定关系添加到列表的头部,由于绑定关系的搜索是从前向后的,所以该关系覆盖(顶替)了其后的.h与C模式的绑定关系。相对于cons,还有append(追加)。
**28、使能启动时自动加载最近访问文件列表并在关闭时自动保存最近访问文件列表。
(recentf-mode t)
**29、使能自动插入功能:当新建文件时,会根据文件类型自动填入模板内容。
(setq auto-insert t)
(setq auto-insert-query t)
(add-hook 'find-file-hooks 'auto-insert)
(setq auto-insert-directory "~/.emacs.insert/")
(define-auto-insert '("\\.\\([Hh]\\|hh\\|hpp\\)\\'" . "C / C++ header") "sample.h")
(define-auto-insert '("\\.\\([Cc]\\|cc\\|cpp\\)\\'" . "C / C++ program") "sample.cpp")
(define-auto-insert '("\\.sh\\'" . "Shell-Script") "sample.sh")
**30、关闭烦人的出错时的提示声。光标在最后一行再向下移动时会叫。按 C-g 也会叫(emacs-23.3)。
(setq visible-bell t)
(setq ring-bell-function (lambda () t)) ;;关闭声音后会闪屏,用该行禁止。
**31、不要总是没完没了的问yes or no,为什么不能用 y/n :
(fset 'yes-or-no-p 'y-or-n-p)
**32、为什么使用语法显示的大文件在移动时如此之慢:
(setq lazy-lock-defer-on-scrolling t)
(setq font-lock-support-mode 'lazy-lock-mode)
(setq font-lock-maximum-decoration t)
**33、在mozilla,openoffice等拷贝的中文文字无法正确粘贴在Emacs中(Emacs 21.3 发布版有此问题, 至少在我的FreeBSD下是这样的):
(set-clipboard-coding-system 'ctext)
**34、启动Emacs报错,~/.emacs中有问题,如何忽略错误:
(condition-case err
(progn
(require 'xxx) )
(error
(message "Can't load xxx-mode %s" (cdr err))))
如上所示,可以截获progn内部出错,在min

i-buffer下打出错误信息。
**35、自动打开日记模块,用于自动提醒。
(diary)
**36、光标不要闪烁:
(blink-cursor-mode -1)
**37、自己的名字和邮件地址,很多地方用得到,比如发邮件时或在 VC(version control) 中产生 ChangeLog 文件时:
(setq user-full-name "ZHL")
(setq user-mail-address "seaxii@https://www.360docs.net/doc/9115268746.html,")
**38、保存 customize 设置的文件:customize 功能保存设置的文件默认的是 Emacs 的初始化文件 ~/.emacs,但是我比较喜欢用另外的文件保存,当然,这样还需要在 .emacs 中加载一下。
(setq custom-file "~/.emacs.d/.emacs_custom.el")
(load custom-file)
**39、c++模式及text模式中用命令 M-( 插入小括号对时不再在小括号对左右插入空格:
(add-hook 'c++-mode-hook
'(lambda ()
(set (make-local-variable 'parens-require-spaces) nil)))
(add-hook 'text-mode-hook
'(lambda ()
(when (equal major-mode 'text-mode)
(set (make-local-variable 'parens-require-spaces) nil))))
**40、vi有一个特别好的命令"f",当你按 "fx",x是任意一个字符时,光标就会移动到下一个"x"处,这之后只要按 ";"(分号),光标就到再下一个"x"。这个函数是一个vi的"f"命令的替代品,有了这段代码之后,当你按 C-c g x (x 是任意一个字符) 时,光标就会到下一个 x 处,再次按 x,光标就到下一个 x。
(defun go-to-char (n char)
"Move forward to Nth occurence of CHAR.
Typing `CHAR' again will move forwad to the next Nth occurence of CHAR."
(interactive "p\ncGo to char: ")
(search-forward (string char) nil nil n)
(while (char-equal (read-char) char)
(search-forward (string char) nil nil n))
(setq unread-command-events (list last-input-event)))
(define-key global-map (kbd "C-c g") 'go-to-char)
**41、我写的用双引号括住指定数量表达式的函数,并将其绑定到 M-" 键上:
(defun zhl-insert-quotes (&optional arg)
"Same as `insert-parentheses' , but insert quotation marks and without spaces."
(interactive "P")
(let ((parens-require-spaces nil))
(insert-pair arg ?\" ?\")))
(define-key global-map (kbd "M-\"") 'zhl-insert-quotes)
**42、第三方包 ibuffer.el 提供更好使的buffer list管理功能,其界面与使用方法与dired模式非常类似,可以直接对这些buffer做一些复杂的操作。
;; 在emacs-23.1中已经包含了该包。
;; (require 'ibuffer)
(global-set-key (kbd "C-x C-b") 'ibuffer)
**43、第三方包 browse-kill-ring.el 用于方便的在kill ring里查看和选择。键入 ? 可看到快捷键说明。
(require 'browse-kill-ring)
;; (global-set-key [(control c)(k)] 'browse-kill-ring)
(browse-kill-ring-default-keybindings)
注:1、browse-kill-ring 包会重新配置 M-y 按键,丰富了它的功能,其重新配置后的行为为

:若 M-y 没有紧接在 C-y 后按下则执行命令 browse-kill-ring 弹出kill ring;否则依然执行 yank-pop 命令。
**44、包 ido.el 用于方便高效的切换buffer和寻找并打开文件。
(ido-mode t)
(add-hook 'ido-setup-hook
'(lambda ()
(define-key ido-completion-map "\eR" 'ido-prev-match-dir)
(define-key ido-completion-map "\eS" 'ido-next-match-dir)))
**45、几个快捷键绑定。
(global-set-key [(f4)] 'next-error) ;; 绑定 F4 到 next-error 命令。next-error 命令原来还绑定在 C-x ` 上,但这个键按起来太麻烦。
(global-set-key [(f3)] 'previous-error)
(global-set-key [(f5)] 'isearch-repeat-backward)
(global-set-key [(f8)] 'isearch-repeat-forward)
(global-set-key [(f6)] 'keyboard-escape-quit)
(global-set-key [(control f6)] 'delete-window)
(global-set-key [(meta f6)] 'other-window)
(global-set-key [(f7)] 'call-last-kbd-macro) ;; 绑定 F7 到运行宏命令。该命令原来还绑定在 C-x e 上,但这个键按起来太麻烦。
(global-set-key [(f9)] 'gud-next) ;; 绑定 F9 到GDB的单步前进命令。
(global-set-key [(f10)] 'gud-step) ;; 绑定 F10 到GDB的单步前入命令。
(global-set-key "\M-sp" 'compare-windows)
(global-set-key "\M-Om" 'man-follow)
(global-set-key "\eOl" 'recentf-open-files) ;; 绑定 M-O l 到 recentf-open-files 命令。recentf-open-files 原来没有绑定到任何键上。
(global-set-key "\eOn" 'wb-line-number-toggle) ;; 绑定 M-O n 到 wb-line-number-toggle 命令。wb-line-number-toggle 原来没有绑定到任何键上。
**46、防止装入全局定制文件default.el(一般全局定制文件放在emacs安装路径下的 site-lisp 目录下,典型的为:/usr/local/share/emacs/site-lisp,因为普通用户改变不了它,所以如果想禁用它则可用该方法)。
(setq inhibit-default-init t)
**47、设置窗格标题更有意义。
;; (setq frame-title-format (concat "%b - emacs@" system-name))
(when (string-match "x" (prin1-to-string window-system))
(setq frame-title-format '((:eval (getenv-internal "LOGNAME"))
"@"
(:eval (system-name))
" Emacs-"
(:eval emacs-version)
" "
(:eval (prin1-to-string window-system))
"-"
(:eval (number-to-string window-system-version))
" : "
(buffer-file-name "%f ( %i / %I )" "%b ( %i / %I )")
)))
(when (string-match "w32" (prin1-to-string window-system))
(setq frame-title-format '((:eval (getenv-internal "USERNAME"))
"@"
(:eval (system-name))
" Emacs

-"
(:eval emacs-version)
" "
(:eval (prin1-to-string window-system))
"-"
(:eval (mapconcat 'number-to-string (w32-version) "."))
" : "
(buffer-file-name "%f ( %i / %I )" "%b ( %i / %I )")
)))
**48、设置打开无法识别类型的文件时默认进入文本模式 text-mode ,原始值为默认进入基本模式 fundamental-mode 。
(setq default-major-mode 'text-mode)
**49、缩进时插入空格,但文本方式时插入TAB符且显示为3个字符宽。
(setq-default indent-tabs-mode nil)
(add-hook 'text-mode-hook
'(lambda ()
(setq tab-width 3)
(setq indent-tabs-mode t)))
;; (setq tab-stop-list ())
;; (loop for x downfrom 40 to 1 do
;; (setq tab-stop-list (cons (* x 3) tab-stop-list)))
(setq tab-stop-list (number-sequence 3 120 3)) ; ---by ZHL 2012-02-13 17:11:05
**50、第三方包 swbuff.el 用于快速在最近编辑的buffer之间切换,切换的时候会出现一个小窗口显示附近的buffer,就像翻页一样。默认的绑定在 C-f6 和 C-S-f6 两个组合键上。
(require 'swbuff)
;; (global-set-key (kbd "") 'swbuff-switch-to-next-buffer) ;bind to C-f6 by default.
;; (global-set-key (kbd "") 'swbuff-switch-to-previous-buffer) ;bind to C-S-f6 by default.
(setq swbuff-exclude-buffer-regexps '("^ " "\\*.*\\*")) ;buffer list will not include these buffer names.
;; (setq swbuff-status-window-layout 'scroll) ;window type, other value can be: 'adjust or 'default .
;; (setq swbuff-clear-delay 1) ;window dismiss delay time.
;; (setq swbuff-separator "|")
;; (setq swbuff-window-min-text-height 0) ; 0 will not pop up window.
**51、第三方包 hide-region.el 用于隐藏选中区域。
(require 'hide-region)
(global-set-key (kbd "C-c r") 'hide-region-hide)
(global-set-key (kbd "C-c R") 'hide-region-unhide)
**52、第三方包 hide-lines.el 用于隐藏指定行。
(require 'hide-lines)
(global-set-key (kbd "C-c l") 'hide-lines) ; add C-u prefix will cause show only matched lines.
(global-set-key (kbd "C-c L") 'show-all-invisible)
**53、第三方包 color-theme.el 和 color-theme-maker.el 用于提供配色方案(主题)。
(require 'color-theme)
(color-theme-jsc-dark) ;Cooper Dark
**54、第三方包 setnu.el 和 setnu+.el 用来在左侧显示行号。
(require 'setnu+)
;; (add-hook 'text-mode-hook 'turn-on-setnu-mode)
**55、第三方包 clearcase.el 提供了版本控制工具 clearcase 的前端。
(load "clearcase")
(define-key clearcase-prefix-map "\C-o" 'clearcase-checkout-current-buffer)
(define-key clearcase-prefix-map "\C-i" 'clearcase-checkin-current-buffer)
(define-key c

learcase-prefix-map "b" 'clearcase-gui-vtree-browser-current-buffer)
(define-key clearcase-prefix-map "p" 'clearcase-gui-diff-pred-current-buffer)
(define-key clearcase-prefix-map "=" 'clearcase-gui-diff-branch-base-current-buffer)
(define-key clearcase-prefix-map "\C-p" 'clearcase-ediff-pred-current-buffer)
(define-key clearcase-prefix-map (kbd "C-=") 'clearcase-ediff-branch-base-current-buffer)
**56、切换缓冲区为只读(toggle-read-only)时使其能自动进入view模式。并重新绑定按键序列 ESC ESC ESC 到进入只读状态。
(setq view-read-only t)
(global-set-key "\C-[\C-[\C-["
(lambda ()
(interactive)
(toggle-read-only 1)))
**57、Windows下 C-SPC 被占用,绑定 C-lwin/M-lwin/C-M-lwin 给 set-mark-command 。
(when (string-match "w32" (prin1-to-string window-system))
(global-set-key [(control lwindow)] 'set-mark-command)
(global-set-key [(meta lwindow)] 'set-mark-command)
(global-set-key [(control meta lwindow)] 'set-mark-command))
**58、自启动emacs server。
(require 'server)
(server-start)
**59、第三方包 wb-line-number.el 用来在左侧显示行号。
(require 'wb-line-number)
**60、进入 C++ 和 C 模式时同时打开 hideif 辅模式、设置语义分析、打开 hs 辅模式。
(add-hook 'c++-mode-hook
'(lambda ()
(hide-ifdef-mode t)
(semantic-default-c-setup)
(hs-minor-mode t)))
(add-hook 'c-mode-hook
'(lambda ()
(hide-ifdef-mode t)
(semantic-default-c-setup)
(hs-minor-mode t)))
**61、用 kill-line 删除整行时连带删除结尾的 newline 。
(setq-default kill-whole-line t)
**62、appointment 相关设置。
(require 'appt)
(setq appt-issue-message t)
(setq appt-display-duration 20)
**63、todo 相关设置。
(setq todo-file-do "~/.emacs.d/todo-do")
(setq todo-file-done "~/.emacs.d/todo-done")
(setq todo-file-top "~/.emacs.d/todo-top")
(setq todo-show-priorities 3)
(global-set-key "\eOt" 'todo-show)
**64、简写模式(abbrev minor mode)相关设置。必须先手工创建一下文件 ~/.emacs.zhl.abbrev ,空的就行,否则会报错。
(setq-default abbrev-mode t)
(read-abbrev-file "~/.emacs.zhl.abbrev")
(setq-default abbrev-file-name "~/.emacs.zhl.abbrev")
(setq save-abbrevs 'silently)
**65、第三方包 xcscope.el 的配置和键绑定。
(when (not (string-match "w32" (prin1-to-string window-system)))
(add-to-list 'load-path "~/local/zhl-lisp/cscope-15.5/contrib/xcscope")
(require 'xcscope)
(setq cscope-initial-directory "/vobs/linuxjava/messaging")
;; key binds. M-f4 and M-S-f4 will quit emacs. C-M-fx can not work.
(if window-system ;; GUI
(progn
(define-key global-map [(control f3)] 'cscope-prev-symbol)
(define-key global-map [(control f4)

] 'cscope-next-symbol)
(define-key global-map [(control shift f3)] 'cscope-find-this-symbol)
(define-key global-map [(control shift f4)] 'cscope-find-functions-calling-this-function)
(define-key global-map [(meta f3)] 'cscope-find-global-definition)
(define-key global-map [(meta shift f3)] 'cscope-find-this-text-string)
(global-set-key (quote [27 f3]) (quote cscope-pop-mark)) ; ESC-f3
(global-set-key (quote [27 f4]) (quote cscope-display-buffer)) ; ESC-f4
) ;; terminal
(define-key global-map [(f13)] 'cscope-prev-symbol) ; C-S-f3
(define-key global-map [(f14)] 'cscope-next-symbol) ; C-S-f4
(global-set-key (quote [27 f3]) (quote cscope-find-this-symbol)) ; M-f3
(global-set-key (quote [27 f13]) (quote cscope-find-functions-calling-this-function)) ; M-S-f3
)
)
**66、第三方包 ascii.el 的配置和键绑定。
(require 'ascii)
(global-set-key "\eOc" 'ascii-display)
**<<67>>、在文本模式下使用大纲辅模式来编辑我的文档,以及使用第三方包 outline-magic.el 增强TAB键功能。
;; use outline-minor-mode in text mode. ---by ZHL
(setq outline-minor-mode-prefix [(control c)])
(add-hook 'text-mode-hook
'(lambda ()
(when (equal major-mode 'text-mode)
;; (setq outline-minor-mode-prefix [(control c)])
(set (make-local-variable 'outline-regexp) "\\[\\|\t*[*\f]\\{2,\\}")
(outline-minor-mode))))
;; to show invisible or fold others. ---by ZHL 2012-06-19 09:31:23
(defun zhl-outline-reveal (&optional hide-other-first)
"Show invisible headers or fold other headers.
No prefix parameter will show invisible headers.
- will fold all other headers.
C-u will fold all other headers and only list first level in current header.
0 will list first level in current header.
1~9 will list sub-level in current header."
(interactive "P")
(if (or (symbolp hide-other-first) (null hide-other-first)) ; - or nil
(save-excursion
(if hide-other-first
(hide-other))
(show-children)
(outline-back-to-heading t)
(let ((start-level (funcall outline-level)))
(when (<= start-level 1)
(error "Already at top level of the outline"))
(while (and (> start-level 1) (not (bobp)))
(outline-up-heading 1 t)
(show-children)
(setq start-level (- start-level 1)))))
(if (consp hide-other-first) ; C-u
(progn
(hide-other)
(outline-back-to-heading t)
(let ((start-level (funcall outline-level)))
(if (< start-level 1)
(error "Out of level of the outline")
(if (= start-level 1)
(hide-subtree)
(if (>= start-level 2)

(progn
(while (> start-level 2)
(outline-up-heading 1 t)
(setq start-level (- start-level 1)))
(save-excursion
(hide-subtree)
(outline-up-heading 1 t)
(show-children))))))))
(if (integerp hide-other-first) ; number
(if (zerop hide-other-first) ; 0
(progn
(outline-back-to-heading t)
(let ((start-level (funcall outline-level)))
(if (< start-level 1)
(error "Out of level of the outline")
(if (= start-level 1)
(hide-subtree)
(if (>= start-level 2)
(progn
(while (> start-level 2)
(outline-up-heading 1 t)
(setq start-level (- start-level 1)))
(save-excursion
(outline-up-heading 1 t)
(hide-subtree)
(show-children))))))))
(progn ; 1~9
(outline-back-to-heading t)
(let ((start-level (funcall outline-level)))
(if (< start-level 1)
(error "Out of level of the outline")
(if (= start-level 1)
(hide-subtree)
(let ((temp hide-other-first))
(while (and (> temp 1) (> start-level 1))
(outline-up-heading 1 t)
(setq start-level (- start-level 1))
(setq temp (- temp 1)))
(if (= start-level 1)
(hide-subtree)
(save-excursion
(outline-up-heading 1 t)
(hide-subtree)
(show-children)))))))))))))
;; outline-magic.el ,use tab to show or hide headline. ---by ZHL
(add-hook 'outline-minor-mode-hook
'(lambda ()
(require 'outline-magic)
(define-key outline-minor-mode-map "\C-c\C-r" 'zhl-outline-reveal)
;; (define-key outline-minor-mode-map "\C-c\C-r" 'org-reveal)
(define-key outline-minor-mode-map "\C-c&" 'org-mark-ring-goto)
(define-key outline-minor-mode-map "\M-[" 'org-beginning-of-line)
(define-key outline-minor-mode-map "\M-]" 'org-end-of-line)
(define-key outline-minor-mode-map [(tab)] 'outline-cycle)))
**68、使同名缓冲区的自动重命名更有意义。带上部分父目录。
(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
**69、

第三方包 shell-toggle.el 的配置和键绑定。
(require 'shell-toggle)
(global-set-key [M-f1] 'shell-toggle)
(global-set-key [C-f1] 'shell-toggle-cd)
**70、文本模式下高亮显示当前行。
(add-hook 'text-mode-hook 'hl-line-mode)
**71、不再显示启动后的初始信息。
(setq inhibit-startup-message t)
**72、扩大删除环长度以防不小心删掉重要的东西。
(setq kill-ring-max 100)
**73、调整滚屏时的行为。
(setq scroll-margin 3 scroll-conservatively 10000)
**74、光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。
(mouse-avoidance-mode 'animate)
**75、使可以直接打开和显示图片。仅在Linux下可以工作。
(auto-image-file-mode)
**76、始终高亮显示当前行。
(global-hl-line-mode t)
**77、图形模式下不要插入tab符。
(add-hook 'picture-mode-hook
'(lambda ()
(setq indent-tabs-mode nil)))
**78、第三方包 git.el 和 git-blame.el 提供了版本控制工具 git 的前端。
;; (when (not (string-match "w32" (prin1-to-string window-system)))
(require 'git)
(global-set-key "\eOg" 'git-status)
(require 'git-blame)
(global-set-key "\eOb" 'git-blame-mode)
;; )
**79、在当前位置插入当前时间字符串。第二个函数显示的时间字符串的格式更可控一点。
(defun insert-current-time ()
"Insert the current time"
(interactive)
(insert (current-time-string)))
(defun insert-current-time2 ()
"Insert the current time"
(interactive)
(insert (format-time-string "%Y-%m-%d %H:%M:%S")))
(global-set-key "\eOy" 'insert-current-time2)
**80、设置窗口分裂的默认方式为纵向分裂。Linux下用上emacs-23.1.1时发现帮助窗口或搜索结果窗口总弹出在右窗口,很不爽,加入以下设置后弹出在下窗口就舒服多了。
(setq split-width-threshold nil)
;; (setq split-height-threshold 0)
**81、使shell模式下的 ls --color 命令能显示出有颜色文件列表而无乱码。
(ansi-color-for-comint-mode-on)
;; 后来使用下面更优化的语句。
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
**82、在多个缓冲区中进行查找。
;; bind occur in specified buffers ---ZHL
(global-set-key (kbd "M-s C-/") 'multi-occur-in-matching-buffers)
;; bind occur in all buffers ---ZHL
(defun zhl-multi-occur-in-matching-buffers (regexp &optional allbufs)
"Show all lines matching REGEXP in all buffers."
(interactive (occur-read-primary-args))
(multi-occur-in-matching-buffers ".*" regexp))
(global-set-key "\M-s\M-/" 'zhl-multi-occur-in-matching-buffers)
;; bind occur in some specified buffers ---ZHL 2012-04-12 15:33:35
(defun zhl-multi-occur (regexp)
"Show all lines matching REGEXP in some specified buffers."
(interactive
(list
(read-regexp "zhl matching regexp"
(dow

ncase
(if mark-active
(prog1 (buffer-substring-no-properties (region-beginning) (region-end))
(setq mark-active nil))
(or (current-word nil) "zhltodo"))))))
(multi-occur
(delq nil (mapcar (lambda (buf)
(set-buffer buf)
(and (not (equal major-mode 'dired-mode))
(not (string-match "^[ *]" (buffer-name buf)))
(not (equal major-mode 'tags-table-mode)) ;not search in TAGS
buf))
(buffer-list)))
regexp))
(global-set-key "\M-s/" 'zhl-multi-occur)
;; bind isearch in specified buffers ---ZHL
(defun zhl-isearch-buffers ()
"isearch multiple buffers."
(interactive)
(multi-isearch-buffers
(delq nil (mapcar (lambda (buf)
(set-buffer buf)
(and (not (equal major-mode 'dired-mode))
(not (string-match "^[ *]" (buffer-name buf)))
buf))
(buffer-list)))))
(global-set-key (kbd "M-s s") 'zhl-isearch-buffers)
**83、在多个窗口进行比较,绑定到 M-s p 组合键上。
(global-set-key "\M-sp" 'compare-windows)
(global-set-key [(meta f7)] 'compare-windows)
**84、在状态行显示当前函数名。
(setq which-func-modes t)
(which-function-mode 1)
**85、执行命令1秒钟后提示对应的按键绑定。
(setq suggest-key-bindings 1)
**86、显示当前词的man手册页,绑定到 M-O m 组合键上。
(global-set-key "\M-Om" 'man-follow)
**87、nXML模式的相关设置。
(setq auto-mode-alist (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode) auto-mode-alist))
(setq nxml-slash-auto-complete-flag t)
;; (setq nxml-sexp-element-flag t)
(setq rng-nxml-auto-validate-flag t)
(setq nxml-child-indent 4)
(setq nxml-attribute-indent 8)
(add-hook 'nxml-mode-hook
'(lambda ()
(setq indent-tabs-mode nil)))
**88、跳到符号的下一个定义位置的按键序列太繁杂,按起来不方便。将回跳和前跳分别绑定到 F11 和 F12 上去,通过宏来实现。
(fset 'zhl-find-tag-previous
;; [?\M-- ?\M-.])
[?\M-*])
(global-set-key [(f11)] 'zhl-find-tag-previous)
(fset 'zhl-find-tag-next
[?\C-u ?\M-.])
(global-set-key [(f12)] 'zhl-find-tag-next)
**<<89>>、为了能更方便快速的在View模式中进行滚屏和光标移动操作,重新绑定了以下几个单键。
(add-hook 'view-mode-hook
'(lambda ()
(define-key view-mode-map "j" 'View-scroll-line-forward)
(define-key view-mode-map "k" 'View-scroll-line-backward)
(define-key view-mode-map "h" 'backward-char)
(define-key view-mode-map "l" 'forward-char)

(define-key view-mode-map "n" 'next-line)
(define-key view-mode-map "p" 'previous-line)
(define-key view-mode-map "f" 'forward-word)
(define-key view-mode-map "b" 'backward-word)
(define-key view-mode-map "E" 'end-of-line)
(define-key view-mode-map "e" 'org-end-of-line)
;; (define-key view-mode-map "a" 'beginning-of-line)
(define-key view-mode-map "a" 'org-beginning-of-line)
(define-key view-mode-map "y" 'View-scroll-half-page-forward)
(define-key view-mode-map "d" 'View-exit)
(define-key view-mode-map "c" 'zhl-show-hide-entry)
;; (define-key view-mode-map "c" 'hide-entry)
;; (define-key view-mode-map "C" 'show-entry)
(define-key view-mode-map "t" 'hide-sublevels) ;;全部折叠。
(define-key view-mode-map "V" 'show-all) ;;全部展开。
(define-key view-mode-map "v" 'zhl-outline-reveal)
(define-key view-mode-map "o" 'outline-cycle) ;;右手单指折叠/展开。
(define-key view-mode-map "[" 'outline-up-heading)
(define-key view-mode-map "]" 'outline-next-visible-heading)
(define-key view-mode-map "." 'outline-backward-same-level)
(define-key view-mode-map "/" 'outline-forward-same-level)
(define-key view-mode-map "O" 'org-open-at-point-global)
(define-key view-mode-map "&" 'org-mark-ring-goto)
(define-key view-mode-map "i" 'kid-sdcv-to-buffer2))) ;;右手单指查字典。
;; Toggle show-entry and hide-entry. ---by ZHL 2012-06-27 00:31:51
(setq zhl-show-hide-entry-flag nil)
(defun zhl-show-hide-entry ()
"Toggle show-entry and hide-entry."
(interactive)
(if zhl-show-hide-entry-flag
(hide-entry)
(show-entry))
(if zhl-show-hide-entry-flag
(setq zhl-show-hide-entry-flag nil)
(setq zhl-show-hide-entry-flag t)))
**90、为了能更方便快速的使用hs模式提供的功能,重新绑定了以下几个稍微简单一点的组合键(相对于原来绑定的组合键而言)。
(add-hook 'hs-minor-mode-hook
'(lambda ()
(define-key hs-minor-mode-map "\M-s\M-q" 'hs-toggle-hiding)
(define-key hs-minor-mode-map "\M-s\M-l" 'hs-hide-level)
(define-key hs-minor-mode-map "\M-s\M-s" 'hs-show-block)
(define-key hs-minor-mode-map "\M-s\M-h" 'hs-hide-block)
(define-key hs-minor-mode-map "\M-s\M-\C-s" 'hs-show-all)
(define-key hs-minor-mode-map "\M-s\M-\C-h" 'hs-hide-all)))
**91、利用 sdcv 在emacs里查词典非常方便,在Windows下也非常好使。
具体配置方法和代码参见"查词典"里的"stardict"。
**92、创建脚本文件后还得手工加上文件可执行权限才可运行,

可以在文件保存后的勾子函数内自动完成这个过程。
具体代码参见"Shell-script模式"。
**93、有关邮件的相关配置。以前还能发邮件,现在却发不成了,可能是公司的防火墙导致,以后再研究吧。
省略。
**94、使 C-w 执行回删一个词,但在选中文本块时依然是删除文本块。
(defun zhl-kill-region-or-backward-kill-word ()
"If selection region active, execute function kill-region,
otherwise, execute function backward-kill-word."
(interactive)
(if mark-active
(call-interactively 'kill-region)
(call-interactively 'backward-kill-word)))
(global-set-key "\C-w" 'zhl-kill-region-or-backward-kill-word)
**95、使退出shell模式后其缓冲区自动被杀掉。
(add-hook 'shell-mode-hook 'zhl-shell-mode-hook-func)
(defun zhl-shell-mode-hook-func ()
(set-process-sentinel (get-buffer-process (current-buffer))
#'zhl-shell-mode-kill-buffer-on-exit))
(defun zhl-shell-mode-kill-buffer-on-exit (process state)
(message "%s" state)
(if (or (string-match "exited abnormally with code.*" state)
(string-match "finished" state))
(kill-buffer (current-buffer))))
**96、快速打开光标下的文件。
(require 'ffap)
;; (global-set-key "\C-xf" 'find-file-at-point)
(global-set-key "\C-xf" 'ffap-read-only)
**97、文件比较的相关设置。
(global-set-key "\M-sd" 'diff-backup)
(global-set-key "\M-s\M-d" 'diff)
(setq diff-switches "-u")
(global-set-key "\M-s\C-d" 'ediff-directories)
;; 下面这一段的解释参见"只读状态与View辅模式"。
(add-hook 'diff-mode-hook
'(lambda ()
(put major-mode 'mode-class 'special)
;; (set (make-local-variable 'view-read-only) nil)
(setq truncate-lines nil)
(setq buffer-read-only t)))
**98、在本地/全局标记环上回跳时可以接着按 C-@ 连续回跳,而不用每次都要加前辍。
(setq-default set-mark-command-repeat-pop t)
**99、为了能更方便快速的在Info模式中进行滚屏和光标移动操作,重新绑定了以下几个单键。
(add-hook 'Info-mode-hook
'(lambda ()
(define-key Info-mode-map "e" 'end-of-buffer)
(define-key Info-mode-map "j" 'View-scroll-line-forward)
(define-key Info-mode-map "k" 'View-scroll-line-backward)))
**A0、Windows下最大化窗格的方法,其核心是 w32-send-sys-command 函数。
以下语句加入~/.emacs中可使emacs在windows下启动后自动最大化,以及使新创建的窗格自动最大化。
以下语句在emacs-23.1上做了调整,因为发现初始化最后一步去最大化会达不到效果(后来放到勾子 window-setup-hook 里就好了),而手工执行最大化或复原函数是能正常操作的,所以加了一个翻转函数来最大化或复原,

并将其绑定到 M-O x 上。
(when (string-match "w32" (prin1-to-string window-system))
(setq zhl-w32-toggle-flag nil)
(defun zhl-w32-maximize-frame ()
"Maximize the current frame"
(interactive)
(setq zhl-w32-toggle-flag t)
(w32-send-sys-command #xf030))
(defun zhl-w32-restore-frame ()
"Restore a maximized frame"
(interactive)
(setq zhl-w32-toggle-flag nil)
(w32-send-sys-command #xf120))
(defun zhl-w32-toggle-frame ()
"Toggle the current frame"
(interactive)
(if zhl-w32-toggle-flag
(zhl-w32-restore-frame)
(zhl-w32-maximize-frame)))
(global-set-key "\eOx" 'zhl-w32-toggle-frame)
(defun zhl-w32-minimize-frame ()
"Minimize the current frame"
(interactive)
(w32-send-sys-command #xf020))
(defun zhl-w32-activate-menubar ()
"Activate the menubar"
(interactive)
(w32-send-sys-command #xf100))
(defun zhl-w32-activate-screensaver ()
"Activate the screen saver"
(interactive)
(w32-send-sys-command #xf140))
(global-set-key "\M-s\M-x" 'zhl-w32-maximize-frame)
(global-set-key "\M-sx" 'zhl-w32-restore-frame)
(global-set-key "\M-s\C-x" 'zhl-w32-minimize-frame)
(global-set-key "\M-s\M-\C-x" 'zhl-w32-activate-screensaver)
;; maximize after startup. ---by ZHL
(add-hook 'window-setup-hook ;in emacs-startup-hook , it doesn't work.
(lambda ()
(zhl-w32-maximize-frame)))
;; maximize after make a new frame. ---by ZHL 2012-06-11 15:28:47
(add-hook 'after-make-frame-functions
(lambda (frame)
(w32-send-sys-command #xf030 frame)))
)
**A1、进入DocView主模式时不要连带进入View辅模式。
这样配置的解释参见"只读状态与View辅模式"。
(put 'doc-view-mode 'mode-class 'special)
**<>、有关 org-mode 的设置。
;; (add-to-list 'load-path "PATH_TO_WHERE_YOU_UNPACKED_ORGMODE")
;; (require 'org)
;; (add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(define-key global-map "\C-cs" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
(global-set-key "\C-c\M-l" 'org-insert-link-global)
(global-set-key "\C-co" 'org-open-at-point-global)
(global-set-key "\C-c\M-o" 'org-open-link-from-string)
(setq org-goto-auto-isearch nil)
(add-hook 'org-load-hook
(lambda ()
(setq org-hide-leading-stars t)
(setq org-startup-indented t)
(setq org-startup-folded 'content)
(setq org-hierarchical-todo-statistics nil)
(setq org-clock-idle-time 15)
(define-key org-mode-map "\M-n" 'org-next-link)
(define-key org-mode-map "\M-p" 'org-previous-link)))
(add-hook 'org-mode-hook
'(lambda ()
(setq org-cycle-emulate-tab nil)

(setq org-log-done 'time)))
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
(let (org-log-done org-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook 'org-summary-todo)
;; for org-remember
(org-remember-insinuate)
(setq org-default-notes-file "~/https://www.360docs.net/doc/9115268746.html,")
(define-key global-map "\C-cc" 'org-remember)
;; for clock
(setq org-clock-persist t)
(org-clock-persistence-insinuate)
;; for refiling
(add-hook 'org-mode-hook
'(lambda ()
(setq org-reverse-note-order t)
(setq org-refile-use-outline-path t)
(setq org-outline-path-complete-in-steps nil)
(setq org-completion-use-ido t)
(setq org-refile-targets '((zhl-refiling-files . (:tag . "nextStep")) (nil . (:level . 1))))))
(defun zhl-refiling-files ()
"Find all Org buffer files."
(with-current-buffer (current-buffer)
(delq nil (mapcar (lambda (buf)
(set-buffer buf)
(and (equal major-mode 'org-mode)
(not (string-match "^[ *]" (buffer-name buf)))
;; (buffer-file-name buf)))
buf))
(buffer-list)))))
**<>、有关 htmlize 的设置。
(require 'htmlize)
;; (setq htmlize-output-type 'font)
(global-set-key "\M-se" 'htmlize-region)
(global-set-key "\M-s\M-e" 'htmlize-buffer)
(global-set-key "\M-s\C-e" 'htmlize-file)
**<>、有关编码方式的设置。
;; open .txt file by chinese coding system. ---by ZHL
;; (if (string-match "w32" (prin1-to-string window-system))
;; (setq file-coding-system-alist (cons '("\\.txt\\'" cn-gb . cn-gb) file-coding-system-alist))
;; ;; for linux (X or non-X)
;; (setq file-coding-system-alist (cons '("\\.txt\\'" cn-gb . cn-gb) file-coding-system-alist)))
;; change all reference files' coding to utf-8 , so, start use utf-8 as default coding system. ---by ZHL 2012-06-05 18:17:31
(if (string-match "w32" (prin1-to-string window-system))
(setq file-coding-system-alist (cons '("\\.txt\\'" utf-8 . utf-8) file-coding-system-alist)))

;; set default saving file coding system to utf-8. ---by ZHL 2012-06-05 18:56:22
(when (string-match "w32" (prin1-to-string window-system))
;; (setq default-process-coding-system '(utf-8-unix . utf-8-unix)) ;for sdcv input under WinXP
;; (setq default-process-coding-system '(utf-8-unix . cn-gb-unix)) ;for sdcv input under Win7
(setq-default buffer-file-coding-system 'utf-8))

;; open shell mode by correct coding system. ---by ZHL 2012-03-22 17:19:53
;; (when (string-match "w32" (prin1-to-string window-system))
;; (when (= 5 (car (w32-version)))
;; ;; for display Chinese file

name under WinXP
;; (setq process-coding-system-alist (cons '("[bB][aA][sS][hH]" cn-gb . cn-gb) process-coding-system-alist)))
;; (when (= 6 (car (w32-version)))
;; ;; for display Chinese file name under Win7
;; (setq process-coding-system-alist (cons '("[bB][aA][sS][hH]" utf-8 . utf-8) process-coding-system-alist))))
;; for decoding diff-backup output correctly, bash I/O coding system should be utf-8,
;; and all reference files' coding has been changed to utf-8 already. ---by ZHL 2012-06-11 10:23:43
(when (string-match "w32" (prin1-to-string window-system))
(setq process-coding-system-alist (cons '("[bB][aA][sS][hH]" utf-8 . utf-8) process-coding-system-alist))
(when (= 5 (car (w32-version)))
;; for sdcv input under WinXP
(setq process-coding-system-alist (cons '("[sS][dD][cC][vV]" utf-8-unix . utf-8-unix) process-coding-system-alist)))
(when (= 6 (car (w32-version)))
;; for sdcv input under Win7
(setq process-coding-system-alist (cons '("[sS][dD][cC][vV]" utf-8-unix . cn-gb-unix) process-coding-system-alist))))
**<>、
**<>、
**<>、
**<>、
**<>、
**<>、
**<>、Emacs Wiki

相关文档
最新文档