Showing posts with label Emacs. Show all posts
Showing posts with label Emacs. Show all posts

Thursday, June 23, 2011

Gocode——用于Go语言的自动补全工具

原文发表于「桃源」: http://linux.cuit.edu.cn/?p=1362

一直以来, 我不太习惯于使用自动补全, 一是没有发现合适的 (这方面VS和Xcode这些IDE明显做得更好), 二来也觉得自己敲还来得快一点 (=_,=). 前几天发现 Gocode, 试用下来感觉还不错, 配置也不算繁琐, 推荐给使用Go语言的同学.

Gocode

Gocode现在支持的编辑器有Vim和Emacs, 分别利用Vim的omni completion和Emacs的 Auto Complete Mode. 想看实际演示效果的同学可以点 这里. 这里主要讲一下安装和Emacs的配置, Vim的配置由于比较简单, 可以参考 官方文档.

很多同学在安装Gocode的时候都会出现编译错误, 这主要是因为Go语言发展比较迅速, 这个星期的版本和上个星期的版本之间都可能存在不兼容, 默认 clone 下来的Gocode代码都是兼容最新版Go语言的 (这作者真勤劳), 因此如果你的Go编译器版本太陈旧的话就可能编译失败. 比如我电脑上的Go版本是 r57.1 (weekly.2011-05-03), 是一个release版, 而最新的Gocode是针对weekly.2011-06-16的, 这是一个开发者版. 理所当然的, 我在编译的时候遇到了编译错误, 这时我有两种选择, 要么升级Go, 要么降级Gocode. 升级Go对于我来说不太方便, 因为我的Go版本都是随着软件仓库一起更新的, 因此我选择了降级Gocode. 还好Gocode的作者给那些存在兼容问题的版本都打上了tag, 我们只需找到兼容自己电脑上当前Go版本的tag, 再回滚就行了.

$ git log --decorate
$ git checkout compatible-with-go-weekly.2011-04-27

接下来是编译和安装.

$ gomake
$ sudo gomake install

编译完成之后会生成 gocode 命令, 默认情况下 gomake install 会将 gocode 放到 GOBIN 环境变量指定的目录, 如果你没有设置 GOBIN, 那就会放到 ${GOROOT}/bin 里. 必须确保 gocode 命令可以在 PATH 环境变量中找到.

最后是配置Emacs. 首先你需要安装 Auto Complete Mode 扩展, 安装步骤可以参考 这里. 然后将Gocode提供的Emacs Lisp文件放到Emacs的 load-path 里即可. 注意这里使用到的el文件需要是最新版的 (非回滚版), 否则补全将失败.

现在用Emacs打开一个Go源文件试试看吧~

Sunday, January 30, 2011

ELPA: 下一代Emacs的扩展管理器

原文发表于「桃源」: http://linux.cuit.edu.cn/?p=1169

我们已经习惯了各种包管理器工具, Debian、Ubuntu有 apt-get, RedHat、Fedora有 yum, Arch有 pacman, Gentoo有 emerge, BSD有 port. 包管理器的存在让我们再也不用考虑安装、删除、升级软件的细节, 也不用为了各种包之间的依赖关系而头疼, 这也是我认为UNIX/Linux相比于Window$的一个很大的优点. 今天介绍的 ELPA (Emacs Lisp Package Archive) 就是专为Emacs设计的包管理器, Emacs发展至今已经拥有了数量庞大的第三方扩展, 但安装这些扩展的方式依旧非常原始. 下载压缩包, 解压, 放到Emacs可以识别的 load-path, 修改 “.emacs”, 这一系列动作对于用户来说实在是不够友好 (虽然Emacs用户普遍喜欢折腾). ELPA可以使得安装Emacs扩展就像使用发行版的包管理器工具安装软件一样便捷, 并且Emacs官方也 决定 在下一个Emacs版本, 即Emacs 24中默认集成ELPA. 这里 是GNU的官方ELPA页面, 在那里你也可以下载到已经集成了ELPA的Emacs 24测试版.

ELPA采用同 apt-get 等包管理器工具类似的原理, 会从指定的源服务器中下载扩展以及相关依赖扩展, 然后放到特定目录 (默认为 “~/.emacs.d/elpa/”), 可能会将Lisp代码编译成字节码, 最后激活它, 当下次Emacs启动时自动加载它.

虽然Emacs 24还没有正式发布, 但是我们已经能够提前使用ELPA (实际上ELPA已经发展了好几年). 步骤很简单, 如果你使用的是Emacs 22及以上版本, 把下面的代码复制到Emacs的 *scratch* buffer中, 将光标移动到代码的最后一行, 然后按下 C-j, 一切就都搞定了, 剩下的事情就交给代码去完成吧. 如果你使用的是Emacs 21及以下版本, 请参考 这个帮助页面.

(let ((buffer (url-retrieve-synchronously
               "http://tromey.com/elpa/package-install.el")))
 (save-excursion
   (set-buffer buffer)
   (goto-char (point-min))
   (re-search-forward "^$" nil 'move)
   (eval-region (point) (point-max))
   (kill-buffer (current-buffer))))

上面的代码执行完之后, ELPA就算安装完毕, 这时会多出一个 “~/.emacs.d/elpa/” 目录, 所有通过ELPA安装的扩展都会放在那里, 并且 “.emacs” 文件也被自动添加了加载ELPA的代码. 该如何通过ELPA安装扩展呢? 在Emacs中按下 M-x package-list-packages 会列出所有可供安装和已经安装的扩展, 如下图:

ELPA

将光标移动到需要安装的扩展上, 按下 i 键, 就会出现如上图的 “I” 标志, 选定好之后按下 x 键便开始安装扩展. 还有其它一些按键:

按键 功能
n
下移一行
p
上移一行
r
刷新扩展列表
i
标记为安装
d
标记为删除
u
取消标记
g
还原所有标记
x
执行标记
q
关闭当前窗口
h
帮助
?
查看当前扩展的详细注释信息

当前ELPA的最大缺点是扩展数量还不是很多, 截至写这篇文章时仅有134个扩展. 有人说是因为ELPA只接受自由软件的缘故, 但我觉得大多数Emacs扩展开发者并不会太在意这个, 可能最大的原因还是因为大部分开发者都不知道ELPA的存在. Emacs发展这么多年, GNU也没有 像Vim那样 集中管理各种第三方扩展, 好在官方也终于决定在Emacs 24中集成ELPA, 可以预想将来也会逐渐丰富扩展仓库. 如果你是第三方扩展的开发者并且也愿意将扩展提交给ELPA, 可以参考 这个页面, YASnippet的作者pluskid也写了 一篇给需要提交给ELPA的作者的建议, 希望ELPA的扩展仓库可以越来越丰富.

最后, GNU正在寻找用于Emacs 24的合适配色主题, 有兴趣参与的同学可以访问 这个页面 自定义一份主题提交给GNU, 也许你的方案就会出现在下一个版本的Emacs中. 参与开源, 我为人人, 人人为我.

Sunday, January 23, 2011

解决Mac中Emacs、MacVim不能正确读取PATH的问题

发现我现在的题目真是越来越长了, 越来越有论文开题的范了~

因为安装了MacPort, 我在 “.bashrc” 文件中自定义了 PATH 变量, 但当我打开 “Emacs.app” 时却发现 PATH 变量并没有被正确读取, 最明显的表现就是会找不到我用MacPort安装的程序. 经过一番查找才 发现, 原来是因为Mac OS X中的GUI程序在启动时并不鸟Shell初始化文件, 管你 bash, tcsh, 什么 sh. 在Mac中有一个专门给GUI程序 设置环境变量的地方: ~/.MaxOSX/environment.plist, 这是一个二进制文件, 你可以使用Xcode自带的 “Property List Editor.app” 来查看、修改其中的内容, Mac中还有一个命令 defaults 也可以对这种类型的文件进行读写. 我们可以稍微修改一下 “.bashrc” 文件以便每次自定义好 PATH 变量之后就立即修改 “environment.plist” 文件, 代码如下:

export PATH=...
defaults write ~/.MacOSX/environment PATH "$PATH"

这样当再次打开 “Emacs.app” 时查看到的 PATH 变量就是正确的值了. 同样我在使用 “MacVim.app” 时也遇到了这样的情况, 我本来以为通过上面的方法已经解决, 但… 你懂的, 再次经过一番查找, 很多人也只是推荐上面的方法. 还有 勾选MacVim的 “Preferences” 中的 “Launch Vim processes in a login shell.”, 但在我的MacVim中没有找到这个选项, 应该是新版本取消掉了. 我怀疑这是MacVim的bug (不然为啥 “Emacs.app” 好好的…), 不过貌似也不是所有人都有遇到. 而我现在找到的唯一解决办法是直接从Terminal中执行 “mvim” 命令来启动MacVim, 这样就会继承Shell的环境变量, 不过这也是不得已才想出的临时解决办法, 毕竟我以后就不能直接用Quicksilver来启动MacVim了, 真是遗憾.

综上, Mac的App真够折腾.

Monday, April 27, 2009

近期的一些杂感

由于这几周都在忙着做事, 有好几篇blog想发却一直搁置着, 今天就把它们都写到一起吧.

先说攻防吧, 最近又出新题了还没去看, 对于注入这种层次的题目暂时不想了, 其它的什么编程题还能应付下, 无奈比例不大, 不能让队伍再靠前一点. 因为某题需要用到PHP的编程, 于是在重拾Emacs时发现默认是不支持PHP的高亮的, 这种事情肯定有人想到并解决了的, 安装php-mode就行了, Ubuntu可以直接apt-get install php-mode, 也可以自己到SF上去下载, 然后修改.emacs:
;; PHP mode for Emacs.
(require 'php-mode)
(add-hook 'php-mode-user-hook 'turn-on-font-lock)

以前的文章[参加三叶草Linux方向考核的一些总结]中介绍了一个叫做template的Emacs插件, 可以实现新建特定扩展名的文件时自动加载模板的功能, 像现在的某些IDE一样. SHE同学前段时间因为用Vim写汇编时必须重复地输入那些又长又难记的SEGMENT而苦恼, 问我Vim是否能自动加载模板. 查了一下, 还挺简单的, 这个不需要任何插件就能实现了. 修改.vimrc:
" Template for Vim.
autocmd BufNewFile *.asm 0r ~/.vim/templates/template.asm
注意中间那个是数字0, 而不是字母o. 把你的模板放在相应的文件里, 如果需要其它类型的模板修改扩展名就行了. 以上方法来自LinuxSir.Org.

由于最近需要经常测试网页, 愈发觉得用当前的Firefox调试很麻烦. 最让人痛苦的一点就是如果调试页面崩溃了, 还要连带影响我的正常浏览页面, 不得不一次又一次地重启. 实在是忍受不了之后 (看来我还是一个很能忍的人), 决定来一个专业一点的调试方法. 来自Mozilla的一篇文章:
Setting up an extension development environment
介绍了如何利用Firefox打造调试环境, 解决我前面那个问题的方法就是使用多用户配置文件, 实话说, 用了这么久Firefox还真不知道可以多用户运行的... 使用如下命令启动Firefox:
$ firefox -no-remote -P dev
这时应该会弹一个选择用户配置文件的窗口, 因为以前没有dev这个配置文件, 需要新建一个才行. 建好以后再用上面的命令运行的时候就会使用dev, 而不是默认的default了, 这样新开的浏览器与我之前打开的就不会相互影响了. 那篇文章还介绍了Firefox的一些配置调整以适应调试的需求和一些有用的调试插件, 这里强烈推荐Firebug, 看网页结构那叫一个爽.

最后, 那天看到一个很搞的命令: vrms. 为什么说它搞呢? 先看看这个缩写的全称吧: Virtual Richard M. Stallman. 那这个命令是用来干什么的呢? 号称可以找出你电脑上所有的非自由 (non-free) 软件, 晒下我的结果, ORZ... 内核也算?
                Non-free packages installed on LAN

fglrx-amdcccle Catalyst Control Center for the ATI graphics accelerat
fglrx-kernel-source Kernel module source for the ATI graphics accelerators
fglrx-modaliases Identifiers supported by the ATI graphics driver
human-icon-theme Human Icon theme
linux-generic Complete Generic Linux kernel
linux-restricted-modules- Non-free Linux 2.6.27 modules helper script
linux-restricted-modules- Restricted Linux modules for generic kernels
nvidia-173-modaliases Modaliases for the NVIDIA binary X.Org driver
nvidia-177-modaliases Modaliases for the NVIDIA binary X.Org driver
nvidia-71-modaliases Modaliases for the NVIDIA binary X.Org driver
nvidia-96-modaliases Modaliases for the NVIDIA binary X.Org driver
rar Archiver for .rar files
tangerine-icon-theme Tangerine Icon theme
tango-icon-theme Tango Icon theme
Reason: Creative Commons Attribution-ShareAlike 2.5 License
xorg-driver-fglrx Video driver for the ATI graphics accelerators

Contrib packages installed on LAN

msttcorefonts Installer for Microsoft TrueType core fonts
nvidia-common Find obsolete NVIDIA drivers

15 non-free packages, 0.9% of 1628 installed packages.
2 contrib packages, 0.1% of 1628 installed packages.

Saturday, January 17, 2009

发现gdb的一个新功能

都怪以前没好好看看gdb的man page, 今天帮同学整gdb的时候, 偶然发现gdb有一个选项-tui, 就是这个神奇的选项, 让我来到了一个崭新的gdb的世界.

gdb
看下这张图片, 是不是和普通的gdb调试有点不一样, 那个占了大半个屏幕的东西就是改变gdb体验的一个重要工具. 有了它, 可以把代码都显示在里面, 比以前一个劲地list方便多了. 有了它, 你可以显式地看到打断点的位置. 有了它, 你可以看到当前执行到哪一行代码了. 这已经和在Emacs里面用gdb调试差不多了, 除了打断点没有那么方便, 对代码中的中文支持很差和没有代码高亮以外, 其它我都觉得用着挺爽的, 以后在没有Emacs的机器上调试也可以很舒适了, OY!

Sunday, December 21, 2008

关于在Emacs中注释代码

以前在用Emacs写注释的时候, 用M-;在C/C++里都是在行尾插入"// ", 然后我就可以很方便地添加注释了. 可今天很神奇, 突然就从"// "变成"/* */"了, 这样很是不爽. 看了下Emacs的帮助文档, 发现无论是"// ", 还是"/* */", 都是由两个变量来控制的. 一个叫做comment-start, 另一个是comment-end, 分别控制开头和结尾. 比如说"/* */"这个, 它的comment-start就是"/* ", 而comment-end则是" */". 所以只需要在我的配置文件的C Mode里面添加下面两行就行了:
(setq comment-start "// ")
(setq comment-end "")

另外在看帮助的时候, 又学到了一招. 比如说下面的情况:
/*
* ...
*/
光标在中间那行, 当我输入完注释以后回车想输入下一行, 却发现Emacs不会自动跳到相应的位置并且添加那个星号, 在Vim里就可以. 难道Emacs不支持? 其实不是, 你不需要使用回车来换行, 当你想要输入下一行注释时, 按M-j就行了, 效果和Vim中是一样的, 呵呵~

P.S. 之所以用Emacs来写注释, 一是因为M-;这样按着很爽很方便, 还有一个就是那些注释会对得很整齐, 以前不知道这是为什么, 今天发现原来也是因为一个变量的缘故: comment-column. 这个变量的默认值是32, 每行注释都会从32列开始, 所以会很整齐了.

Thursday, December 4, 2008

让GTK+程序使用Emacs的键绑定

$ cat ~/.gtkrc-2.0
# Emacs-like Keybindings
include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"
gtk-key-theme-name="Emacs"

Saturday, November 22, 2008

在Emacs中使用矢量字体

也不是所有的矢量字体都有问题, 只是我现在使用的Courier 10 Pitch这个字体在Emacs中显示的是点阵的效果, 不是很好看. 于是Google了一下, 看到有人引用了zhan的配置, 试了试, 果然很有效果.

配置.Xresources
$ cat ~/.Xresources
Xft.antialias:1
Xft.hinting:1
Xft.hintstyle:hintfull
Emacs.FontBackend:xft
然后
$ xrdb ~/.Xresources

Monday, November 10, 2008

参加三叶草Linux方向考核的一些总结

这标题好像有点正式, 其实也就是上个星期的事情, joy给我们出了几道题, 做为进入三叶草的一个考核. 虽然题不多, 而且难度也不是很大, 不过还是有一些值得写下来的东西.

首先了解了indent这个软件. 以前在桃源上看过joy写的介绍, 没用过, 这次题上有, 就去下来用了用. 只需要简单地配置一下就可以使用了, 不过只能用来缩进C语言, 这个范围有点窄了. 但某些地方还是要比我自己配置的在Vim和Emacs里的缩进要先进一点, 以后可以这两种方法结合着用. 配置参考了joy写的, 自己查了点也添了进去:
$ cat ~/.indent.pro
-bl        // Put braces on line after if, etc.
-bli0      // Indent braces n spacs.
-bls       // Put braces on the line after struct declaration lines.
-c32       // Put comments to the right of code in column n.
-cd32      // Put comments to the right of declarations in column n.
-cp32      // Put comments to the right of #else and #endif statements in column n.
-i4        // Set indentation level to n spaces.
-kr        // Use Kernighan & Ritchie coding style.
-nce       // Do not cuddle } and else.

然后根据joy的题的要求写了一个将Window$下的文本文件转换为Linux下的格式的脚本. 功能很简单, 不过有时候也挺实用的, 现在还只能处理单个文件, 准备以后加入批处理功能.

最后这个和这次的题没有多大关系, 只是因为上次看joy演示的时候很好奇那个在Emacs中自动添加文件头的东西. 于是先去网上找了下, 找到一个叫做template的插件. 虽然不是joy那个, 不过发现这个插件的好处就是可以自动帮我在tex文件的开头插入导言区, 这下可省事多了, 呵呵~ 然后问了joy, 知道了那个插件叫做auto-header.el. 最开始还下了一个错误的版本, 导致Emacs启动错误, 推荐大家在这里下载. 这个的配置参考猫猫的配置.
$ cat ~/.emacs
;; template
(require 'template)
(template-initialize)

;; auto-header.el
(require 'auto-header)
(setq header-full-name "Dreamseeker"
      header-email-address "gaochangjian<at>gmail<dot>com"
      header-copyright-notice "Copyleft (c) INF, Dreamseeker"
      header-update-on-save '(filename modified counter copyright)
      header-field-list '(filename
                          blank
                          description
                          blank
                          author
                          created
                          blank
                          modified_by
                          modified
                          blank
                          status
                          update
                          blank
                          copyright))
;; auto update the number of count
(global-set-key (kbd "s-h") (lambda ()
                              (interactive)
                              (if (header-exists-p)
                                  (header-update-count)
                                (header-make t))))

Sunday, November 2, 2008

用Emacs听歌

这真是一个很geek的想法, 要不是joy让我做, 我才不会去试呢. 就像虽然我知道Gnus可以用来收发邮件, 但我也决不会用它来管理我的Gmail. 以前用ERC, 现在觉得麻烦也换成XChat了. 事实证明, 我也不是一个CLI的狂热者.

好了, 该介绍今天的主角了: EMMS. 解压放到你的Emacs的load-path就行了, 下面是我的.emacs中的配置:
;; EMMS
(add-to-list 'load-path "/usr/share/emacs/site-lisp/emms/")
(require 'emms-setup)
(emms-standard)
(emms-default-players)
(setq emms-repeat-playlist t
emms-source-file-default-directory "/home/xiaolan/music/"
emms-lyrics-coding-system nil ;; let emacs to identify the encode of lyrics
emms-lyrics-dir "/home/xiaolan/music/lyrics")
;; show info at mode-line
(require 'emms-mode-line)
(emms-mode-line 1)
;; show time of music
(require 'emms-playing-time)
(emms-playing-time 1)
;; show lyrics
(require 'emms-lyrics)
(emms-lyrics 1)
;; auto identify encode
(require 'emms-i18n)
;; auto save and import playlist
(require 'emms-history)
(emms-history-load)
参考了这篇文章.

键绑定是必须设置的, 不然每次都手动敲, 会累死你的.
(global-set-key (kbd "<f6>") 'emms-play-directory)
(global-set-key (kbd "<f5>") 'emms-playlist-mode-go)

这是截图, 有显时间和歌词功能:
EMMS

Saturday, August 23, 2008

配置LaTeX & XeTeX & AUCTeX

这几天折腾了一下LaTeX, 对于其中的概念也有了一些了解. 这篇日志主要是说下在Ubuntu 8.04下配置LaTeX+XeTeX环境的过程, 还有Emacs里的AUCTeX的配置.

  1. 首先是LaTeX与XeTeX的安装
  2. $ sudo apt-get install texlive texlive-latex-extra texlive-xetex lmodern

    当时为了安装最新的XeTeX, 花了很多时间在编译安装上, 最后只弄好一个半成品, 无法使用. 于是决定舍弃zhspacing宏包, 直接装了源里的XeTeX.

    经过以上步骤后, 应该就可以正常编译TeX文件了, 用XeTeX调整字体也很爽. 如果你也使用Emacs来编辑TeX文件的话, 那么一定要安上AUCTeX这个扩展, 下面是一些配置详情.

  3. AUCTeX
  4. $ sudo apt-get install auctex

    安装好以后, 重点是配置.emacs文件, 因为AUCTeX本身是不支持通过xelatex编译的.
    ;; AUCTeX
    (defun auctex ()
      (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t; %`xelatex%(mode)%' %t" TeX-run-TeX nil t)) ;; 这里我编译了两次
        (setq TeX-command-default "XeLaTeX") ;; 设定默认编译命令为XeLaTeX
        (setq TeX-save-query nil)            ;; 保存之前不询问
        (setq TeX-show-compilation t))       ;; 在新窗口显示编译过程
    (add-hook 'LaTeX-mode-hook 'auctex)
    
    (custom-set-variables
     '(TeX-output-view-style (quote (("^dvi$nnnnnnn" ("^landscape$" "^pstricks$\\|^pst-\\|^psfrag$") "%(o?)dvips -t landscape %d -o && gv %f") ("^dvi$" "^pstricks$\\|^pst-\\|^psfrag$" "%(o?)dvips %d -o && gv %f") ("^dvi$" ("^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "^landscape$") "%(o?)xdvi %dS -paper a4r -s 0 %d") ("^dvi$" "^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "%(o?)xdvi %dS -paper a4 %d") ("^dvi$" ("^a5\\(?:comb\\|paper\\)$" "^landscape$") "%(o?)xdvi %dS -paper a5r -s 0 %d") ("^dvi$" "^a5\\(?:comb\\|paper\\)$" "%(o?)xdvi %dS -paper a5 %d") ("^dvi$" "^b5paper$" "%(o?)xdvi %dS -paper b5 %d") ("^dvi$" "^letterpaper$" "%(o?)xdvi %dS -paper us %d") ("^dvi$" "^legalpaper$" "%(o?)xdvi %dS -paper legal %d") ("^dvi$" "^executivepaper$" "%(o?)xdvi %dS -paper 7.25x10.5in %d") ("^dvi$" "." "%(o?)xdvi %dS %d") ("^pdf$" "." "acroread %o %(outpage)") ("^html?$" "." "netscape %o")))))
    最后那个有点长, 主要是没有找到合适的方法像添加XeLaTeX一样只需要写新增的条目, 所以这里就把原有的和修改以后的都写了出来. 其实只改了一个地方, 已经用红色标注出来了, 就是在使用C-c C-v预览PDF文件的时候使用什么软件来打开. 我这里就是acroread, 你用的其它的话, 可以相应修改.

    这样修改好以后, 以后就可以直接使用C-c C-c编译, C-c C-v预览, C-c `在错误间跳转了.

    8月5日更新:
    如果不是用的源安装的LaTeX, 比如我为了用上最新版的XeTeX, 就选择单独安装TeX Live. 这时再用源安装AUCTeX的时候, 会因为依赖关系而又把源里的LaTeX相关包给装上, 囧

    不过幸运的是这并不会与TeX Live冲突, 原因在于:
    $ echo $PATH
    /home/xiaogaozi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    嘿嘿, 我的TeX Live的可执行文件都放在了/usr/local/bin里, 而源里安装的放在了/usr/bin, 自然优先级不同啦~

    但是TeX Live中的install-info文件会导致源安装AUCTeX的时候失败, 所以如果是先安装的TeX Live, 再安装AUCTeX, 就需要先把TeX Live的install-info"消灭"掉:
    $ sudo mv /usr/local/bin/install-info /usr/local/bin/install-info.bak

附上我的TeX文件模板, 很杂, 也许有的在article上能用上, 而有的则只能在book上用上.

\documentclass[adobefonts]{ctexart}

\CTEXoptions[captiondelimiter={\quad}]

\usepackage{amsmath}            % AMS的数学宏包
\usepackage{amssymb}            % AMS的数学符号宏包
\usepackage{graphicx}           % 插入图片需要的宏包
\usepackage{float}              % 强大的浮动环境控制宏包
\usepackage{framed}             % `shaded'环境需要用到
\usepackage{enumitem}           % 增强列表功能
\usepackage{alltt}              % 在`alltt'环境中为等宽字体, 但可以使用LaTeX命令

% \usepackage{shortvrb}           % 简化\verb的写法
% \MakeShortVerb{\|}

\usepackage{color}              % 可以定义各种颜色
\usepackage[x11names]{xcolor}   % 下面的RoyalBlue3颜色需要用到的宏包
% 自定义的几种颜色
\definecolor{shadecolor}{gray}{0.85}
% \definecolor{darkblue}{rgb}{52,101,164}
% \definecolor{darkgreen}{rgb}{78,154,6}

% % 设置背景颜色
% \definecolor{bisque}{rgb}{.996,.891,.755}
% \pagecolor{bisque}

\usepackage[pdfauthor={Dreamseeker},
            pdftitle={For Alist},
            colorlinks=true,
            urlcolor=blue,
            linkcolor=RoyalBlue3]{hyperref} % 为超链接设置颜色, 修改PDF文件信息

\title{\textbf{For Alist}}
\author{Dreamseeker}
% \date{}

\usepackage[pagestyles]{titlesec} % 定制页眉页脚
% % 设置页眉页脚
% \newpagestyle{main}{%
%   \sethead[$\cdot$~\thepage~$\cdot$][][\thesection\quad%
%   \sectiontitle]{\thesection\quad\sectiontitle}{}{%
%   $\cdot$~\thepage~$\cdot$}
%   \setfoot{}{}{}\headrule}
% \pagestyle{main}
% \renewpagestyle{plain}{\sethead{}{}{}\setfoot{}{}{}}
\pagestyle{plain}

\usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry} % 设置页边距

\setlength{\belowcaptionskip}{1em} % 设置caption之后的距离

% XeTeX logo
\def\XeTeX{\leavevmode
\setbox0=\hbox{X\lower.5ex\hbox{\kern-.15em\reflectbox{E}}\kern-.1667em
\TeX}%
\dp0=0pt\ht0=0pt\box0}

% For LaN
\newcommand{\LaN}{L{\scriptsize\hspace{-0.47em}\raisebox{0.23em}{A}}\hspace{-0.1em}N}

\begin{document}

\maketitle

\tableofcontents
\newpage

\end{document}

另外推荐下好用的LaTeX, XeTeX入门文档:

  1. The (Not So) Short Introduction to LaTeX2e, 一个比较全面的文档, 是一个老外写的, CTeX论坛翻译的在这里下载, 版本相对老一点. 我刚开始看的就是这个, 觉得还是要边看边动手, 而且要勤动手, 毕竟说全面, 也只是相对下面两个文档的, 对于初学者来说, 里面很多讲得也不是很详细的, 毕竟这些都是比较短小的文档. 因为是老外写的, 所以看完以后你还是不会知道怎样在文档中输出中文.

  2. LaTeX Notes, 清华的一个老师写的LaTeX笔记, 比较务实地将经常用到的命令都讲了出来, 而且内容整体上比上一个新, 所以上一个主要是用来掌握基础, 看完你基本上可以写一个格式和这个PDF差不多的文章了. 最后还专门讲了一下中文化的一些内容, 不过现在用XeTeX了, 也基本上用不上了, 回顾下历史也是不错的.
    P.S. 文中古诗无数, 附精美照片一张.

  3. XeTeX/LaTeX中文排版之胡言乱语, 这个作为了我的XeTeX入门教程, 其实XeTeX的主要学习的地方还是在导言区. 这是一个很短小的文档, 总共只有7页, 对于提高排版质量有一定用处.

Friday, August 15, 2008

Emacs和Vim中将tab转化为空格

Emacs:
在.emacs中添加:
(setq-default indent-tabs-mode nil)
对于已经保存好的文件, 可以选中需要转化的区域, 然后:
M-x untabify

Vim:
在.vimrc中添加:
set expandtab
对于已经保存好的文件, 可以选中需要转化的区域, 然后:
:retab

Friday, June 13, 2008

Emacs中文字体调整

一直尝试想让Emacs用上文泉驿正黑的矢量字体, 可一直就没成功过, 于是最后认定文泉驿正黑暂时还不支持在Emacs中的显示, 就又去找了zhuqin的史上最伪合成字体——DejaVu Sans YuanTi, 修改.emacs文件, 搞定.
(set-fontset-font (frame-parameter nil 'font)
  'unicode '("DejaVu Sans YuanTi" . "unicode-bmp"))

Thursday, June 12, 2008

使用JDEE编译时报错不支持现有Java版本的解决办法

当刚刚安装完JDEE, 如果没有做任何设置, 那么当编译Java文件时JDEE会显示一个错误, 说不支持现在的Java版本, 具体的解决办法是:
xiaogaozi@LAN:~$ java -version
java version "1.6.0_06"
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Server VM (build 10.0-b22, mixed mode)
记下其中的版本号, 然后在Emacs中执行
M-x costomize-variable <RET> jde-jdk-registry
将其中的Version项修改为刚才记下的版本号就行了.

Wednesday, June 11, 2008

Emacs 常用命令 (持续更新)

C-x C-f
打开文件

C-x C-s
保存, 输入"!"保存所有缓冲区

C-x d
Emacs中的目录管理, 类似Vim的":e .", 下面是一些常用命令:
^访问目录的父目录
q退出缓冲
R重命名
D删除文件
C-x C-f创建文件
+创建目录
g刷新缓冲所有文件 (这很有用, 当你新建了文件以后, 需要手动刷新)


C-@
用来作为一个选定区域的开始标记, 由于对于现在的键盘来说, 要按出这个组合键实在是很麻烦, 在Emacs中文站上找到一行.emacs的配置, 把这个组合键替换成了C-x <SPC>, 但是因为这个组合键同GDB的设置断点的组合键冲突, 于是我稍微修改了一下:
;; Replace `C-@' to `C-^'.
(global-set-key (kbd "C-^") 'set-mark-command)


M-w
复制选定的文本, 这里有一个简单的Emacs Lisp函数可以实现当没有选定任何本文的时候, 使用M-w来选定一行文本:
;; Make `M-w' can copy a line.
(defun xiaogaozi-kill-ring-save (&optional n)
  "If region is active, copy region. Otherwise, copy line."
  (interactive "p")
  (if mark-active
      (kill-ring-save (region-beginning) (region-end))
    (if (> n 0)
        (kill-ring-save (line-beginning-position) (line-end-position n))
      (kill-ring-save (line-beginning-position n) (line-end-position)))))
(global-set-key (kbd "M-w") 'xiaogaozi-kill-ring-save)


C-x h
选定整个缓冲区

C-w
剪切选定的文本

C-y
粘贴

C-/
撤销

C-x r k
剪切选定的矩形区域

C-x r y
粘贴

C-x r t STRING <RET>
替换选定矩形区域

C-x r o
在选定矩形区域前插入一个空格

C-x r M-w
复制选定的矩形区域, 但这需要插件的支持, 可以在这里下载rect-mark.el, 然后修改.emacs文件:
;; rect-mark.el
;; Support for marking a rectangle of text with highlighting.
(define-key ctl-x-map "r\C-@" 'rm-set-mark)
(define-key ctl-x-map [?r ?\C-\ ] 'rm-set-mark)
(define-key ctl-x-map "r\C-x" 'rm-exchange-point-and-mark)
(define-key ctl-x-map "r\C-w" 'rm-kill-region)
(define-key ctl-x-map "r\M-w" 'rm-kill-ring-save)
(define-key global-map [S-down-mouse-1] 'rm-mouse-drag-region)
(autoload 'rm-set-mark "rect-mark"
  "Set mark for rectangle." t)
(autoload 'rm-exchange-point-and-mark "rect-mark"
  "Exchange point and mark for rectangle." t)
(autoload 'rm-kill-region "rect-mark"
  "Kill a rectangular region and save it in the kill ring." t)
(autoload 'rm-kill-ring-save "rect-mark"
  "Copy a rectangular region to the kill ring." t)
(autoload 'rm-mouse-drag-region "rect-mark"
  "Drag out a rectangular region with the mouse." t)


C-x r <SPC> X
保存当前光标位置到寄存器X

C-x r j X
跳转到寄存器X存储的位置

C-x r s X
保存选定区域到寄存器X

C-x r i X
插入寄存器X中保存的内容

M-% STRING <RET> NEWSTRING <RET>
普通的查找替换, 选定特定区域之后就只会在其中查找.

C-M-% REGEXP <RET> NEWSTRING <RET>
支持正则表达式的查找替换, 其余同上.

C-M-n
跳转到下一个匹配的括号

C-M-p
跳转到上一个匹配的括号

M-g M-g
跳转到指定行

M-;
多行注释, 如果没有选中任何区域, 则在当前行尾添加注释.

C-M-\
多行缩进