LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: joanphan

和兄弟姐妹们讨论和推广emacs

[复制链接]
 楼主| 发表于 2004-5-26 19:08:53 | 显示全部楼层
hvj的讨论和推广emacs贴5:

这次讲讲日历的设置。emacs的日历功能是很强大的,我只使用了万年历、生日功能。其实还有很多不错别的功能,如日记功能,以前学习emacs的时候就听有人用emacs的diary记日记和笔记。我的笔记都是用Wikij记录的,这在后面将会有介绍。

M-x calendar可以进入emacs中的日历,我将此功能绑定在一个键上了(在最后会将键的绑定)

小知识:M-x calendar是指Alt键和x键同时摁,然后在minibuffer输入calendar

下面就看看我的配置文件:
;;日历基本配置
;;设置我所在地方的经纬度,calendar里有个功能是日月食的预测,和你的经纬度相联系的。
(setq calendar-latitude +39.9)
(setq calendar-longitude +116.4)
;;我的所在地北京,欢迎大家来找北京请我吃饭
(setq calendar-location-name "Beijing")
;;这个做什么的?忘了,有谁能告诉我,谢谢。
;;我的配置文件里很多东西忘了,欢迎大家来指正下
(setq calendar-remove-frame-by-deleting t)
;;设定一周的开始为周一
(setq calendar-week-start-day 1)
;;节日和生日提醒设置
;;我不过基督徒的节日、希伯来人的节日和伊斯兰教的节日。
;;我是无神论者,不过我喜欢神话,大家有兴趣也可以探讨一下,发email给我吧
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
;;设定一些自定义的生日和节日
;;隐私需要,删掉朋友的生日
;;后面那些农历节日需要每年根据日历修改
;;有些可惜,没有中国传统农历,谁能写个扩展elisp包弄一下
(setq general-holidays '((holiday-fixed 1 1 "元旦")
                         (holiday-fixed 3 8 "妇女节")
                         (holiday-fixed 4 1 "愚人节")
                         (holiday-fixed 4 11 "谁的生日")
                         (holiday-fixed 5 1 "劳动节")
                         (holiday-fixed 10 1 "国庆节")
                         (holiday-fixed 12 25 "圣诞节")
                         (holiday-fixed 2 5 "元宵节")
                         (holiday-fixed 4 4 "清明节")
                         (holiday-fixed 4 21 "鬼节")
                         (holiday-fixed 6 22 "端午节")
                         (holiday-fixed 9 28 "中秋节")
                         (holiday-float 5 0 2 "母亲节")
                         (holiday-float 6 0 3 "父亲节")
                         ))
;;其他的一些设置
;;日历不和日记相连,我不用Calendar自带的diary记日记
(setq mark-diary-entries-in-calendar nil)
;;这个又忘了,我真是忘性好!
(setq appt-issue-message nil)
;;在日历中突出标记节日和生日
(setq mark-holidays-in-calendar t)
;;打开calendar自动打开节日和生日列表
(setq view-calendar-holidays-initially t)

;;下面两个是设置年份为中国年,好像默认的是用英文写的,由王垠修改的。
;;这个设置在节日列表的春节那天能看到,如今年的春节他就写着
;;Thursday, January 22, 2004: Chinese New Year (甲-申)
(setq chinese-calendar-celestial-stem
      ["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
      ["子" "丑" "寅" "卯" "辰" "巳" "戊" "未" "申" "酉" "戌" "亥"])
发表于 2004-5-27 00:45:34 | 显示全部楼层

强,版主应该加精!!

正解答了我的一些疑问。正在使用中……
发表于 2004-5-27 09:27:07 | 显示全部楼层
好文!但是看的还是很糊涂!
 楼主| 发表于 2004-5-27 09:41:40 | 显示全部楼层
我也觉得我的这些帖子有些糊涂,虽然写了不少注解,还是不够详细,特别的是没有讲使用方法。使用方法推荐看倩儿的“emacs的方便”,我这里主要讲配置和Elisp的使用,面向对象主要为学习过emacs两三周时间的人们,不适合初学者。
发表于 2004-5-27 09:43:55 | 显示全部楼层

我找了一个.emacs 大家帮忙看一看。呵呵。

我把这个文件分成了两部分,这个文件有167K之大。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-5-27 09:45:50 | 显示全部楼层

第二部分。

大家分析一下,看看实不实用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2004-5-27 10:36:13 | 显示全部楼层
粗略的看了一下cioworld的dotemacs,不错!
不过我最近有些忙,我先把我这个帖子余下的完成之后再来仔细看看你提供的配置文件。
 楼主| 发表于 2004-5-27 10:47:12 | 显示全部楼层
hvj的讨论和推广emacs贴6:

这贴主要讲hvj-folding.el,内容是关于编辑的。我目前用的不多,不好发表太多想法。这里主要引用王垠的一段话如下:

“我编辑了这么长一个 HTML 文件,你觉得一定很费力,不容易定位吧?其实我的屏幕看起来就是这个样子 。所有小节都被我折叠了起来,我很容易就可以调换小节的位置。我刚才把folding的大段的配置代码移动到了另一个文件,就像移动了一行。

folding 根据不同的文档有不同的标记,它都是基于注释的。本网页就是这样一个例子。”

我的配置文件也是直接从王垠那copy过来的,如下:
[php]
;;小知识:autoload和load相比,前者是在需要时启动folding.el,而在emacs启动时只加载这个函数名而已,也就是让Emacs知道有这个函数。而是用load,则在Emacs启动时便加载,如果加载东西很多,emacs启动会很慢。
(autoload 'folding-mode "folding"
"Minor mode that simulates a folding editor" t)
(load-library  "folding")
(defun folding-mode-find-file-hook ()
  "One of the hooks called whenever a `find-file' is successful."
  (and (assq 'folded-file (buffer-local-variables))
       folded-file
       (folding-mode 1)
       (kill-local-variable 'folded-file)))
(setq fold-fold-on-startup t)
(folding-mode-add-find-file-hook)

;;修改folding.el默认的快捷键,以方便自己使用
;;我大部分的快捷键在最后一帖中将会讲到
(setq fold-keys-already-setup nil)
(add-hook 'folding-mode-hook
          (function (lambda()
                      (unless fold-keys-already-setup
                        (setq fold-keys-already-setup t)
                        (define-prefix-command 'ctl-f-folding-mode-prefix)
                        (define-key 'ctl-f-folding-mode-prefix "f" 'fold-fold-region)
                        (define-key 'ctl-f-folding-mode-prefix "e" 'fold-enter)
                        (define-key 'ctl-f-folding-mode-prefix "x" 'fold-exit)
                        (define-key 'ctl-f-folding-mode-prefix "b" 'fold-whole-buffer)
                        (define-key 'ctl-f-folding-mode-prefix "o" 'fold-open-buffer)
                        (define-key 'ctl-f-folding-mode-prefix "h" 'fold-hide)
                        (define-key 'ctl-f-folding-mode-prefix "s" 'fold-show)
                        (define-key 'ctl-f-folding-mode-prefix "t" 'fold-top-level)
                        (define-key 'ctl-f-folding-mode-prefix "f" 'fold-fold-region)
                        )
                     (local-set-key "\C-f" 'ctl-f-folding-mode-prefix))))

;;设定各个模式下,折叠的具体内容和方式
(fold-add-to-marks-list 'sgml-mode
                        "<!-- {"
                        "<!-- } -->" " --> ")
(fold-add-to-marks-list 'c-mode "/* <" "/* > */" "*/")
(fold-add-to-marks-list 'c++-mode
                        "//<" "//>" "")
(fold-add-to-marks-list 'LaTeX-mode "%%% {{{" "%%% }}}" " ")
(fold-add-to-marks-list 'latex2e-mode "%%% {{{" "%%% }}}" " ")
(fold-add-to-marks-list 'latex-mode "%%%% {{{" "%%%% }}}" " ")
(fold-add-to-marks-list 'BibTeX-mode "%%% {{{" "%%% }}}" " ")
(fold-add-to-marks-list 'lisp-mode ";;; {" ";;; }" "")
(fold-add-to-marks-list 'lex-mode" /* {{{ " " /* }}} */ " "*/")
(fold-add-to-marks-list 'html-mode "<!-- { " "<!-- } -->" "-->")
(fold-add-to-marks-list 'shell-script-mode "# {{{" "# }}}" nil)
(fold-add-to-marks-list 'sh-mode "# {{{ " "# }}}" nil)
[/php]
 楼主| 发表于 2004-5-27 11:00:03 | 显示全部楼层
hvj的讨论和推广emacs贴7:

这里讲讲切换buffer的扩展elisp包。Emacs默认的好象是C-c C-b,感觉不是很人性化。所以很多emacs爱好者写出了学多这方面的扩展包:ibuffer.el,swbuffer.el,ido.el,tabbar.el,等等。

在王垠的网站里对这些包都有具体的说明。

而我使用的是ido.el和tabbar.el。

这贴主要贴一下ido.el,我对应的配置文件是hvj-ido.el,差不多也是从王垠那拷过来的。不过我用的功能不多,也没用到其切换buffer的功能,只用到其查找文件时的超级匹配功能;我切换buffer在后面的tabbar.el的功能中有讲解。切换buffer的功能,大家可以自己去体验一下,也很不错的。这个ido.el包确实非常的强大。

以下是我的hvj-ido.el,主要是对键绑定的修改。其实Emacs中的键绑定是比较难记的,但又是完全可以自定义的。除开一些基本的操作键,我很多键都自己绑定了;这就像自己写的程序,不管格式多乱,自己都能看懂。

hvj-ido.el
[php]
(require 'ido)
(ido-mode t)
(add-hook 'ido-define-mode-map-hook 'ido-hvj-keys)
(defun ido-hvj-keys ()
  "Set up the keymap for `ido'."
  ;; common keys
  (define-key ido-mode-map "\C-e" 'ido-edit-input)   
  (define-key ido-mode-map "\t" 'ido-complete) ;; complete partial
  (define-key ido-mode-map "\C-j" 'ido-select-text)
  (define-key ido-mode-map "\C-m" 'ido-exit-minibuffer)
  (define-key ido-mode-map "?" 'ido-completion-help) ;; list completions
  (define-key ido-mode-map [(control ? )] 'ido-restrict-to-matches)
  (define-key ido-mode-map [(control ?@)] 'ido-restrict-to-matches)
  ;; cycle through matches
  (define-key ido-mode-map "\C-r" 'ido-prev-match)
  (define-key ido-mode-map "\C-s" 'ido-next-match)
  (define-key ido-mode-map
'ido-next-match)
  (define-key ido-mode-map
'ido-prev-match)
  ;; toggles
  (define-key ido-mode-map "\C-t" 'ido-toggle-regexp) ;; same as in isearch
  (define-key ido-mode-map "\C-p" 'ido-toggle-prefix)
  (define-key ido-mode-map "\C-c" 'ido-toggle-case)
  (define-key ido-mode-map "\C-a" 'ido-toggle-ignore)
  ;; keys used in file and dir environment
  (when (memq ido-cur-item '(file dir))
    (define-key ido-mode-map "\C-b" 'ido-enter-switch-buffer)
    (define-key ido-mode-map "\C-d" 'ido-enter-dired)
    (define-key ido-mode-map "\C-f" 'ido-fallback-command)
    ;; cycle among directories
    ;; use
and
for matching files
    (define-key ido-mode-map [down] 'ido-next-match-dir)
    (define-key ido-mode-map [up]   'ido-prev-match-dir)
    ;; backspace functions
    (define-key ido-mode-map [backspace] 'ido-delete-backward-updir)
    (define-key ido-mode-map "\d"        'ido-delete-backward-updir)
    (define-key ido-mode-map [(meta backspace)] 'ido-delete-backward-word-updir)
    (define-key ido-mode-map [(control backspace)] 'ido-up-directory)
    ;; I can't understand this
    (define-key ido-mode-map [(meta ?d)] 'ido-wide-find-dir)
    (define-key ido-mode-map [(meta ?f)] 'ido-wide-find-file)
    (define-key ido-mode-map [(meta ?k)] 'ido-forget-work-directory)
    (define-key ido-mode-map [(meta ?m)] 'ido-make-directory)
    (define-key ido-mode-map [(meta down)] 'ido-next-work-directory)
    (define-key ido-mode-map [(meta up)] 'ido-prev-work-directory)
    (define-key ido-mode-map [(meta left)] 'ido-prev-work-file)
    (define-key ido-mode-map [(meta right)] 'ido-next-work-file)
    ;; search in the directories
    ;; use C-_ to undo this
    (define-key ido-mode-map [(meta ?s)] 'ido-merge-work-directories)
    (define-key ido-mode-map [(control ?\_)] 'ido-undo-merge-work-directory)
    )
  (when (eq ido-cur-item 'file)
    (define-key ido-mode-map "\C-k" 'ido-delete-file-at-head)
    (define-key ido-mode-map "\C-l" 'ido-toggle-literal)
    (define-key ido-mode-map "\C-o" 'ido-copy-current-word)
    (define-key ido-mode-map "\C-v" 'ido-toggle-vc)
    (define-key ido-mode-map "\C-w" 'ido-copy-current-file-name)
    )
  
  (when (eq ido-cur-item 'buffer)
    (define-key ido-mode-map "\C-b" 'ido-fallback-command)
    (define-key ido-mode-map "\C-f" 'ido-enter-find-file)
    (define-key ido-mode-map "\C-k" 'ido-kill-buffer-at-head)
    ))
[/php]
 楼主| 发表于 2004-5-27 12:00:34 | 显示全部楼层
hvj的讨论和推广emacs贴8:

相信大部分在使用stardict或在将要使用linuxfans某开发组(好像有baif)的cutedict,我这里向大家推荐另外一个字典工具dictd。

dictd是一个字典服务器,dict是一个文本界面客户端。其实这个大家也应该比较熟悉,如kdict就是KDE桌面的dictd客户端。dictd的官方地址为:http://www.dict.org 。这是一个免费的字典服务器,有很多字典数据库给我们使用。

dictd的安装我就不讲了,很简单的。一般会同时安装客户端和服务器端。将dictd设为电脑启动的一个程序,这样电脑可以随时去查字典。默认的客户端为dict,常见用法就是dict -h localhost whatyourwanttolookup

在emacs下也有一个dictd的客户端,叫做dictionary.el。常用的有两种模式,一种就是查字典dictionary-lookup-definition,一种是字典提示模式(dictionary-toolip-mode),也就是有屏幕取词功能,当然这里指在Emacsl里取词。还有单词匹配功能、单词搜索功能等等......

目前这个有一些问题就是:
1,我添加了一些英汉词典,我忘了在那个网站有找的,大家可以搜搜,找不到的话,我传到Sir的ftp里。
2,目前的有关中文的词典很少(只有cdict,xdict,和stardic的默认字典,都是英汉的),而stardict的好字典很多。我现在的想法是将Stardict的字典格式能够改一下适合dictd使用。由于最近比较忙,一直托着没做,希望暑假能够去做一下。baif兄为libdict(cutedict的内核)开发字典,转了一下,我前几天看了一下,感觉还是不适合dictd使用。希望有兴趣的朋友能够参与这个给dictd增加有关中文的词典。

hvj-dictionary.el
[php]
;;在需要的时候加载所需的elisp
(autoload 'dictionary-search "dictionary"
  "Ask for a word and search it in all dictionaries" t)
(autoload 'dictionary-match-words "dictionary"
  "Ask for a word and search all matching words in the dictionaries" t)
(autoload 'dictionary-lookup-definition "dictionary"
  "Unconditionally lookup the word at point." t)
(autoload 'dictionary "dictionary"
  "Create a new dictionary buffer" t)
(autoload 'dictionary-mouse-popup-matching-words "dictionary"
  "Display entries matching the word at the cursor" t)
(autoload 'dictionary-popup-matching-words "dictionary"
  "Display entries matching the word at the point" t)
(autoload 'dictionary-tooltip-mode "dictionary"
  "Display tooltips for the current word" t)
(autoload 'global-dictionary-tooltip-mode "dictionary"
  "Enable/disable dictionary-tooltip-mode for all buffers" t)

;;设定字典服务器为本地服务器
;;如果你在包月的宽带上,不妨设定为http://www.dict.org
;;如果你在局域网上,而局域网的某台机器有dictd服务器,你将服务器设定为他的IP即可。
(setq dictionary-server "localhost")
;;在字典提示模式中,使用wordnet字典数据库作为默认字典数据库
;;当然你可以修改,取决于你dictd服务器里的字典数据库
(setq dictionary-tooltip-dictionary "wn")

;; 设定中文词典的解码
;; 由qtjava兄告知,谢谢!
(setq dictionary-coding-systems-for-dictionaries '(("cdict" . gb2312)
                                                                                   ("xdict" . gbk2312)
                                                                                   ("stardic" . gb2312)))
[/php]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表