显示标签为“Emacs”的博文。显示所有博文
显示标签为“Emacs”的博文。显示所有博文

2008年11月15日星期六

emacsclient(w)和gnuclient(w)

Emacs有一个Server-Client模式,如果你是码字狂人,同时编辑好几个文件,这就很有用了,比如你在网上发帖子,就可以在Firefox中将文本发送到Emacs中进行编辑,是的,我知道你离不开Emacs,人不能没有信仰啊。


Windows上,我原本使用的是gnuclient(w),XEmacs自带的。我在Live Drive上有个备份,安装很简单,exe文件放bin目录,el文件放到site-lisp目录就可以了。在配置文件中添加如下代码:
(load "gnuserv")
(gnuserv-start)
启动的时候,用gnuclientw.exe -s代替runemacs.exe启动。

事实上,Emacs自22.1以后也自带了类似工具:emacsclient(w),虽然有点小问题,不过个人还是倾向于使用原配,纯粹个人喜好,就象我使用Windows画图多过photoshop。既然是自带的,就没有安装问题了,配置也很简单,只要1句配置就可以使用了:
(server-start)
只有把Emacs集成到Windows右键菜单,这一切才算完整。你需要的只是一个注册表文件,下面是gnuclient(w)的:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
@="*"

[HKEY_CLASSES_ROOT\*\shell\emacs]
@="用Emacs打开..."

[HKEY_CLASSES_ROOT\*\shell\emacs\command]
@="D:\\Programs\\ntemacs23\\bin\\gnuclientw.exe -s \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs]
"HOME"="D:\\foo\\Home"
emacsclient(w)的如下:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
@="*"

[HKEY_CLASSES_ROOT\*\shell\emacs]
@="用Emacs打开..."

[HKEY_CLASSES_ROOT\*\shell\emacs\command]
@="D:\\ntemacs\\bin\\emacsclientw.exe -a \"D:\\ntemacs\\bin\\runemacs.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs]
"HOME"="D:\\foo\\Home\\"
上面提到过emacsclient(w)有点小问题,就是这里设置的HOME目录似乎对emacsclient(w)不起作用,必须设置HOME变量才可以,还有就是如果Emacs事先未打开,会弹出一个对话框报告connet: No error,确定后就可以正常打开了,不过这个文件不是通过emacsclient(w)打开的,而是runemacs,所以关闭该buffer用的也不是C-x #,这点gnuclient(w)做得完美,反正只要用gnuclient(w)替代runemacs启动就可以了,它的buffer关闭也跟普通buffer一样,而不是C-x #

不过我觉得这是个小问题,不是么?而且可能跟我用的Emacs 23比较老有关,ntemacs很久没更新了,emacs.cn又挂了:( ,因为我看到了这个讨论,不过也并不完全一样,我是在废话么......

2007年10月7日星期日

我的AutoInsert设置

AutoInsert是Emacs的模板系统。我的配置如下

;; auto-insert设置
(require 'autoinsert)
;; Adds hook to find-files-hook
(auto-insert-mode)
;; 注意路径中最后的斜杠不能省,但我们并不使用它
;; 我们使用skeleton,因为可以定位光标
;;(setq auto-insert-directory "~/.emacs.d/templates/")
;; 插入时不提示
(setq auto-insert-query nil)
(setq auto-insert-alist '(
;;("\\.txt$" . "rst.txt")
;;{{{ Rst
(("\\.txt$" . "Rst File")
nil
".. -*- coding: utf-8 -*-\n"
"\n"
""_"\n"
"\n"
"..\n"
" Local Variables:\n"
" mode: rst\n"
" indent-tabs-mode: nil\n"
" sentence-end-double-space: t\n"
" fill-column: 70\n"
" End:"
(rst-mode)
)
;;}}}
))
skeleton的语法参见SkeletonModeFeatures for Automatic Typing,注意那个那个下划线(后面紧跟个回车:\n)就是应用模板后,光标所在处,你可以方便的从这里开始编辑。

其实还有个TemplatesMode可以做这事(一个中文教程),不过skeleton应该也能做到,虽然可能复杂了点,但它是Emacs自带的,在自动输入(AutoType)方面还有其它更强大的应用,而且上面的基本配置也并不复杂,不是么?

此外这里也有个很好的设置可以参考。

2007年10月6日星期六

reStructuredText的Emacs支持:从一个节标记移动到另一个节标记

控制光标在节标记间顺序移动的函数是: rst-backward-sectionrst-forward-section 。 默认绑定到 C-c p pC-c p n (也可以用 C-c C-pC-c C-n )。

2007年9月9日星期日

reStructuredText的Emacs支持:保持目录是最新的

保持目录是最新的

这里有个问题是如何维护目录的更新?有一个函数可以帮上忙: rst-toc-insert-update 。 你可以将它添加到节标记调整函数的hook,以后你每次调整一个节标记时,目录也会被自动更新了。 在Emacs配置文件中添加如下内容:

(add-hook 'rst-adjust-hook 'rst-toc-insert-update)

当然也可以显式的呼叫函数了更新当前buffer,快捷键是 C-c p u

2007年9月8日星期六

reStructuredText的Emacs支持:大纲视图

大纲视图

在一份长文档中导航通常是一件困难的事情。为此,特意提供了一个函数,它可以迅速 分析文档,然后将文档的目录结构以缩进的形式在一个临时buffer中展示出来。 在这个临时buffer中,你可以方便的导航,选中一个标题,按回车,就会跳到主文档中 相应的地方。

这个函数就是 rst-toc (快捷键是 C-c p t )。临时buffer看起来 象这样

Table of Contents:
Debugging Meta-Techniques
Introduction
Debugging Solution Patterns
Recognize That a Bug Exists
Subdivide and Isolate
Identify and Verify Assumptions
Use a Tool for Introspection
Change one thing at a time
Learn about the System
Understanding a bug
The Basic Steps in Debugging
Attitude
Bad Feelings
Good Feelings
References

选中一个节标题后,临时buffer会消失(译按:但窗口还在),光标停留在 文档中相应节标题的最左端。

插入目录

一份较长的文档开头通常会有一个目录。就象你在互联网上大多数FAQs中 看到的那样。对于 reStructuredText 文档,目录由分析器根据指令 .. contents:: 自动生成,人们通常并不会在源文档中再添加纯文本目录,因为编辑和维护它都是件很麻烦的事。

但是Emacs的 reStructuredText 插件提供了一个函数,可以在文档中插入这样的目录。 注意纯文本目录不应该成为文档的主体内容之一,你需要把它放在注释中,这样就可以被分析器忽略了。 以下是最常见的用法:

. contents::
..
1 Introduction
2 Debugging Solution Patterns
2.1 Recognize That a Bug Exists
2.2 Subdivide and Isolate
2.3 Identify and Verify Assumptions
2.4 Use a Tool for Introspection
2.5 Change one thing at a time
2.6 Learn about the System
3 Understanding a bug
4 The Basic Steps in Debugging
5 Attitude
5.1 Bad Feelings
5.2 Good Feelings
6 References

可以使用快捷键 C-c p i 来呼叫这个函数,目录会从当前光标处开始插入。 目录的内容是在插入点所在节中(译注:插入点必须在某一节中)级别更低的所有节标题。 这样你就可以(在合适的地方)方便地插入本节的局部目录。

如果你的节标题嵌套很深,可以使用数字前缀来限定显示的目录深度。

下面的变量通常用来定制目录的显示:rst-toc-indent, rst-toc-insert-style, rst-toc-insert-max-level

2007年9月5日星期三

reStructuredText的Emacs支持:查看节标记的层次

想知道当前文档中各个级别的节标记到底使用什么符号也很简单: 呼叫rst-display-decorations-hierarchy 函数就可以了,快捷键是 C-c p h 。在一个临时buffer中会显示表示标题级别的节标题以及相应的 节标记。通常在编辑别人的文档时用来查询某个节标记符号是什么级别。

2007年9月3日星期一

reStructuredText的Emacs支持:节标记调整

rst插件并不彻底分析所有的 reStructuredText 指令, 但它还是能识别节标记并用来构建文档大纲结构。我们所说的节标记就是用来标记节标题 的那些下划线,或者是环绕标题的上下两行。

有一个函数可以为处理这个标记带来很大的方便: rst-adjust (默认绑定键 C-c p aC-c p =C-= )。这个函数就象一把瑞士军刀,可以被反复调用,实际效果 依赖于上下文:

  1. 如果标记不完整,例如:

    My Section Title
    ^^

    调用该命令就会帮你自动完成标记中剩余的部分。 你可以只输入节标记的开头然后调用这个函数来 补全。它也在你修改标题后被用来重新调整节标记的长度。

  2. 如果光标位置没有节标记,就添加一个。级别和上一个节标记相同。

  3. 如果节标记已经存在, 它的级别会被提升,如果反复调用,就会在当前存在的所有标题级别中循环。

如果在调用函数时使用了否定前缀,如 C-- C-= ,就会在标题级别中按反方向循环。 要在节标记的下划线或上下行包围两种风格间切换,你可以使用正规的命令前缀,就象这样 C-u C-= 。更多关于前缀的使用,参见 rst-adjust 的文档。

一次操作多个节的提升或降级

当你在重新编排文档结构的时候,经常会碰到需要一次改变多个节的级别的情况。这和改变 一个节标记的函数(以及绑定到该函数的快捷键)是一样的:你需要做的只是选中一个区域(region), 然后调用 rst-adjust 来提升区域中所有节标记的级别(或降级,如果使用了否定前缀的话)。

使节标记符合你的习惯

如果你在查看别人的文档,发现它使用了陌生的节标记符号,你会想要把它们替换成符合自己 习惯的符号。如果手工一个一个来改的话会很烦人。不要怕,有一个函数可以帮你轻松的完成 这件工作: rst-straighten-decorations (C-c p s)。该命令会影响整个buffer。

定制

你可以将你喜欢的节标记指定给变量 rst-preferred-decorations ,每个人都有他的 偏好。 变量 rst-default-indent 用来设置使用上下行包围风格的节标记时 标题文字缩进几个空格。

2007年9月2日星期日

reStructuredText的Emacs支持:基本设置

我会把Emacs Support for reStructuredText部翻译出来,为Blog充一下数吧


Emacs的所有支持由 rst.el 提供。为了使用它,你需要把rst.el放到 你的emacs的load-path中,然后加载它:

(require 'rst) ;; or (load "rst")

你可以在 rst.el 源代码中找到其它的配置。

接下来你要为那些最常用的命令设置键绑定。 rst.el 提供了一个 标准的text-mode hook函数来做这件事,你可以这样设置:

(add-hook 'text-mode-hook 'rst-text-mode-bindings)

所有的 rst.el 命令都有一个前缀。默认绑定是使用mode-specific-map变量和 p , 例如 C-c p ...

2007年6月13日星期三

Emacs minibuffer中的自动补全功能

你有3种选择:Icicles功能最强InteractivelyDoThings(Ido)次之,最后一个是IswitchBuffers。其中后 2个Emacs有自带(我用的是Emacs 23),而Icicles更侧重于图形界面下的体验。