Posted on 10-03-2010
Filed Under (技术) by waterlin

通过使用 Jabber 插件,可以在 Emacs 里进行即时通讯聊天,相关截图可以在 Emacs-wiki 上看到,怎么样,很不错吧?!我们可以通过 Jabber 来在 Emacs 里使用若干即时通讯工具,这里就以 Gtalk 为例简单说明一下 Jabber 的基本使用方法。

Ubuntu/Debian 上可以直接从源里安装 emacs-jabber 的软件包。

例如,我要配置 Google Talk 的话,可以在 .emacs 里用下面的方法来配置:

(setq jabber-account-list
      '(("waterlin.org@gmail.com"
         (:network-server . "talk.google.com")
         (:connection-type . ssl))))

配置好了以后,可以用 M-x jabber-connect 来登陆,它会让你输入 JID,你直接输入你设置好的邮箱名即可。

登录成功后,Emacs 会有一个 \*-jabber-roster-\* 的 buffer,从里面就能找到你想聊天的人一起聊天。

和某个人聊天的话,就用 M-x jabber-chat-with 命令,输入某个人的帐号,或者直接从 \*-jabber-roster-\* buffer 里找到某人的帐号并按回车,就会出现 \*-jabber-chat-:-person-\* 这样的一个 buffer。在这个 Buffer 里,你就可以和他/她聊天了。如果对方有消息过来,Emacs 会在 minibuffer 里提示对方的名字,提示你有新的消息。

聊天时,用回车就是发送消息,用 C-j 就是新建一行输入消息。

默认情况下,你会显示为在线状态,如果需要修改状态,例如修改为 away,可以用命令 M-x jabber-send-presence 或快捷键 C-x C-j C-p 来切换状态。

其它常用命令:

  • 要退出用 M-x jabber-disconnect 命令即可;
  • 要添加某人为好友,可以用命令 M-x jabber-send-subscription-request
  • 用命令 M-x jabber-customize 可以对 jabber 进行基本的配置。

这个玩意不错,尤其是作为 Linux 下面的 Gtalk 客户端挺好的,不仅能聊天,同时也支持在 Gmail 里保存聊天记录。

(0) Comments    Read More   
Posted on 21-02-2010
Filed Under (技术) by waterlin

之前介绍了如何在 Emacs 里用 EasyPG 来加密文件,可是一旦自己想重新设置加密用的密钥( Key,类似于密码的东东),这时,要怎么办呢?

其实很简单,只要在修改文件后需要保存的时候,输入一个新的 Key 就可以了,下面是详细的步骤:

1. Open the file in emacs.

2. Enter the original passphrase when prompted.

3. Type a letter then remove it (to convince emacs the file unchanged).

4. C-x C-s will prompt you for a new passphrase.

如果你为了让 Emacs 在当前的 Session 里记住密钥,而在 .emacs 文件里用到了下面两行代码:

;; save the password
(setq epa-file-cache-passphrase-for-symmetric-encryption t)
;; auto-save
(setq epa-file-inhibit-auto-save nil)

可以先注释掉再进行以上操作。

当然,你也可以通过 gnupg 来进行类似的修改。不过对于密钥的修改不会太频繁,我觉得以上的方法足够简单方便了。

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More   
Posted on 23-01-2010
Filed Under (技术) by waterlin

对于一些比较隐私的文件,比如说帐号、密码等,如果不用文件记下来则容易忘记;而用普通文件记下来,总是觉得有点不放心,哪天电脑丢了怎么办?

Emacs 支持加密文件的操作,总的来说,比较好用的有下面这些方法

  1. 最简单的可能是 ange-crypt 包:

    把下面的代码添加到 .emacs 文件里

    (load <span style="color: #ffa500;">"ange-crypt"</span>)
    

    或者用命令 M-x ange-crypt-mode 来启动这个模式。

  2. EasyPG 应该是比较好用的,EmacsWiki 上也专门有相关的讨论

    EasyPG 的安装很简单,把下面的代码放到 .emacs 文件里:

    <br />(require 'epa-file)<br />(epa-file-enable)<br />

    这样,打开或是保存以 .gpg 为后缀的文件,Emacs 就会提示输入加密用的关键字。

下面讨论一些有关 EasyPG 使用上可能碰到的问题:

  1. 如果希望在打开以 .gpg 为后缀的加密文件时,也能进入相应的 mode,我们只需要把 .gpg 作为普通文件的后缀添加到普通文件名后面。比如说,一个使用 org mode 文件原来应该命名为 test.org,现在我希望通过 Emacs 来对它进行加密处理,则我可以把它保存为 test.org.gpg,这样下次打开该文件时,Emacs 会自动进入相应的 org mode。

  2. 如果在使用 EasyPG 的时候,提示下面的错误

    <br />byte-code: Opening output file: Searching for program, no such file or directory, gpg   <br />

    则表示没有安装 gpg 这个程序,可以下载安装。

当然,如果希望用 EasyPG 用得爽,仅仅有上面这些设置是远远不够的,还应该进一步的设置:

  1. 默认使用对称加密

    每次保存加密文件,Emacs 都会弹出来问你要用什么方式来加密,很烦人!把下面的语句扔到 .emacs 文件里:

    <br />;; Using symmetric encryption always<br />(setq epa-file-encrypt-to nil)<br />

    这样就可以让 Emacs 每次都使用对称加密。

  2. 不要每次保存加密文件的时候,都让我输一遍密码!

    每次保存加密文件的时候,Emacs 都要让你输一遍密码。我相信你不想每次保存文件的时候,都让你输一遍密码吧?用下面的代码可以让 Emacs 记住密码并自动保存文档:

    <br />;; save the password<br />(setq epa-file-cache-passphrase-for-symmetric-encryption t)<br />;; auto-save<br />(setq epa-file-inhibit-auto-save nil)<br />

    当然,不用担心,Emacs 只是在当前这次 Session 记住密码,下次你重启 Emacs 要再次打开这个文件的时候,Emacs 依然会向你要一次密码的。

感谢水木社区 Emacs 版上 Dieken 大牛的笔记,我只是做了一点工匠性质的工作,把它加工成我们普通人能看懂的笔记 :)

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More   
Posted on 20-12-2009
Filed Under (技术) by waterlin

不知道为什么,我的 Emacs 自带的 cmake-mode.el 文件是比较旧的版本,与最新的版本相比,少了好几个函数。

可以从 CMake 官方网站的 Editor Syntax Files 下载最新的 Emacs 的 cmake-mode.el 或是 Vim 的扩展包,方便编辑。

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More   
Posted on 20-12-2009
Filed Under (技术) by waterlin

Linux 下,默认情况下 Emacs 里用 M-w 并不能复制内容到系统的剪切板,如果需要让 M-w 能复制内容到剪切板的话,可以把下面的这一行语句加入到 .emacs 里:

(setq x-select-enable-clipboard t)

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More   
Posted on 17-11-2009
Filed Under (技术) by waterlin

很多时候,我们的程序目录里并没有像样的版本管理功能(比如自己的一些小工具),过了一段时间,你很可能会发现你不记得以前修改了一些什么、已经实现了哪些功能,甚至于,你都忘记了你的代码里还有啥小 Bug 没处理掉。

Emacs 自带了一个快速日志记录功能,即 Change Log 的功能。一个 Change Log 文件按时间顺序记录了你修改程序的时间、原因,以及一些你想写下来备忘的内容。当然,Emacs 只会自动帮我们生成记录的时间、修改的文件名,其它的内容还是需要我们自己来补充。

默认情况下,Emacs 会用当前目录下名为 ChangeLog 的文件来记录这些 log 信息,该文件可以记录该目录以及所有子目录的日志。

用快捷键 C-x 4 a 或是命令 M-x add-change-log-entry-other-window 就可以为当前编辑的文件在 ChangeLog 文件里添加一条日志,Emacs 会自动创建时间戳和文件名,剩下的内容我们自己补全。

类似于其他 Emacs 提供的功能,我们可以根据自己的喜好来设置参数,详情看 Chang Log 的官方文档

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More   
Posted on 09-11-2009
Filed Under (技术) by waterlin

前几天用设置 Emacs 文件系统的编码格式的方法,重新设定了 Emacs 默认的编码格式。

可是又来了一些问题。当以前一些文件不是用 UTF-8 来编码的时候,Emacs 默认用 UTF-8 来打开就会产生混乱。比如说我的 Muse 文件就是用编码

  chinese-iso-8bit

来保存的(至于为什么 Muse 会用这个编码,我也不知道),现在 Emacs 一打开 Muse 文档就乱码。

虽然我可以用 M-x revert-buffer-with-coding-system 来用指定编码(这里即是 chinese-iso-8bit)重新正常地读入文件,但是因为我把默认的编码设为 UTF-8 了,Muse 文档发布成网页后,乱码问题依然存在。

经过实践发现,最好的解决办法就是把 Muse 文档的编码统一改为 UTF-8 的编码格式。事实上,现在我们也没有不使用 UTF-8 编码的理由!

需要修改显示为乱码的现有文件的编码格式,则可以用下面几个步骤:

  1. 用命令 M-x revert-buffer-with-coding-system 来用指定编码重新读入文件,以便正常显示;
  2. 用命令 M-x describe-coding-system 查看一下当前的文件格式是否和默认的 UTF-8 一样;
  3. 如果不一样,就用命令 C-x <RET> c ( M-x universal-coding-system-argument ) 来设定下一步操作的编码格式,我们设定为 UTF-8,然后再用 C-c C-s 命令保存当前的文件。

这样,我们就完成了修改当前文件编码格式的任务。

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(2) Comments    Read More   
Posted on 06-11-2009
Filed Under (技术) by waterlin

重装系统后,Emacs 打开以前的文件,都显示为乱码,着实吓了我一跳。这个时候千万不要慌张,也不要随便地保存乱码的文件。

其实这只是 Emacs 读取文件的编码格式与你的文件格式不一样。我们可以用 M-x describe-coding-system 这个命令来查看一下 Emacs 是用什么编码来读取当前文件的。

比如说我的 org 文件都是用 UTF-8 来保存的,而打开某个 org 文件显示乱码,用命令 M-x describe-coding-system 显示当前解读的编码为:

  1 -- iso-latin-1-unix (alias: iso-8859-1-unix latin-1-unix)

Emacs 错把 UTF-8 的编码解读成了 latin 编码格式,难怪会乱码!

这个时候,有两种解决办法。

  1. 把 Emacs 的默认编码设置为 UTF-8。

    在 .emacs 文件里放入下面这段代码:

    ;;
                  set the default text coding system
    (setq default-buffer-file-coding-system 'utf-8)
    

    可是即使我加了上面这条语句,为什么 Emacs 依然显示 org 文件为乱码呢?

    原来上面这一行,只是适用于写文件的情况。当你读取一个文件的时候,可能依然会显示出乱码,因为 Emacs 读文件也是按照一定的编码规律来解读文件的。我们再用命令 M-x describe-coding-system 仔细观察一下结果里面的内容,是不是有类似下面这样一段:

      Priority order for recognizing coding systems when reading files:
        1. iso-latin-1 (alias: iso-8859-1 latin-1)
        2. utf-8 (alias: mule-utf-8)
        3. iso-2022-7bit
        4. iso-2022-7bit-lock (alias: iso-2022-int-1)
        5. iso-2022-8bit-ss2
        6. emacs-mule
        7. raw-text
        8. iso-2022-jp (alias: junet)
        9. in-is13194-devanagari (alias: devanagari)
        10. chinese-iso-8bit (alias: cn-gb-2312 euc-china euc-cn cn-gb gb2312)
        11. utf-8-auto
        12. utf-8-with-signature
        13. utf-16
        14. utf-16be-with-signature (alias: utf-16-be)
        15. utf-16le-with-signature (alias: utf-16-le)
        16. utf-16be
        17. utf-16le
        18. japanese-shift-jis (alias: shift_jis sjis cp932)
        19. undecided
    

    这就是 Emacs 在读文件时候的解码顺序!如果你的文件是以英文开头,自然会套用第一种方法。这个时候,我们还需要调整一下这个编码的先后次序。用命令 M-x prefer-coding-system 就可以调整这些顺序。调整完顺序,再打开 org 文件看一看,终于恢复原貌了。

    如果你只是用命令 M-x prefer-coding-system 来设置,下次重启 Emacs 的时候,这个设置就会自动清除。如果需要每次都采用这个设置,可以把下面这行扔到 .emacs 里指定优先用 utf-8 来解码:

    (prefer-coding-system 'utf-8)
    
  2. 另外一种解决乱码的办法,就是用命令 C-x <RET> r ( M-x revert-buffer-with-coding-system) 来用指定的编码重新读入这个文件。

另外,碰到文件编码混乱的时候,最重要的一点,看到乱码的文件,不要随便保存。有关 Emacs 编码格式的详情可以看看官方文档

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(4) Comments    Read More   
Posted on 23-10-2009
Filed Under (技术) by waterlin

如果使用 Tabbar 而又不喜欢它默认的文档分组功能 ( group ),想自己控制哪些文档应该分成一组、哪些文档应该放到另外一组,可以参考下面的代码,重新定制 Tabbar 的分组规则:

(defun tabbar-buffer-groups (buffer)
  "Define tabbar groups depending on major mode and buffer name"
  (with-current-buffer (get-buffer buffer)
    (cond
     ((or (get-buffer-process (current-buffer))
          (memq major-mode
                '(comint-mode compilation-mode)))
      '("Misc")
      )
     ((eq major-mode 'org-mode)
      '("org")
      )
     ((eq major-mode 'muse-mode)
      '("muse")
      )
     ((memq major-mode
            '(fundamental-mode help-mode apropos-mode Info-mode Man-mode))
      '("Misc")
      )
     ((memq major-mode
            '(c-mode c++-mode))
      '("Cpp")
      )
     ((eq major-mode 'emacs-lisp-mode)
      '("Emacs-lisp")
      )
     ((memq major-mode
            '(php-mode nxml-mode nxhtml-mode))
      '("WebDev")
      )
     ((memq major-mode
            '(tex-mode latex-mode text-mode snippet-mode))
      '("Text")
      )
     ((memq major-mode
            '(rmail-mode
              rmail-edit-mode vm-summary-mode vm-mode mail-mode
              mh-letter-mode mh-show-mode mh-folder-mode
              gnus-summary-mode message-mode gnus-group-mode
              gnus-article-mode score-mode gnus-browse-killed-mode))
      '("Mail")
      )
     ((string-equal "*" (substring (buffer-name) 0 1))
      '("Emacs Buffer")
      )
     (t
      '("Main")
      )
     )))

代码的基本原则就是,根据 mode 来进行分组,比如说把基于 org-mode 的所有文件放到一个组里,把和 Web 开发有关的 mode (如 php-mode,nxml-mode 及 nxhtml-mode)放到一个组里。我觉得这样分组,更加有利于编辑效率的提高。

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More   
Posted on 14-10-2009
Filed Under (技术) by waterlin

在用 Emacs 编辑文档的时候,使用命令时经常会碰到大量的错误信息。但是,默认情况下,对于错误的提示信息不是很详细,我们很难分析究竟是哪里出错了。

这个时候,我们可以试着使用 Emacs 的 debug on error 特性。先用命令

M-x toggle-debug-on-error RET

激活当前缓冲区的 debug on error 功能,然后再运行之前出错的命令,则出错的时候会调用 Lisp 调试器 ( Lisp debugger )显示详细地调试信息,方便进一步地查找出错的真正原因。

这里要注意的是,每次需要 Lisp 调试器去捕捉错误信息的时候,就要用命令 M-x toggle-debug-on-error RET 激活一次,也就是说,该命令成功激活 debug on error 功能后,只有有效地使用一次!

如果你还不能解决问题的话,就把 Messages 缓冲区 ( buffer ) 里的全部内容(而不是一部分),以及 Lisp 调试器里的错误信息,一股脑地拷到新闻组或是论坛里去和别人讨论吧!

原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]

Copyright © WaterLin.org. All rights reserved.

(0) Comments    Read More