分页: 1 / 1

Emacs中的几个不太常见的设置汇集

发表于 : 2008-06-19 1:45
fengzishaoye
我在这里说的"不常见", 是指的在google上不常见, 而不是我们不常用到的, 至少我认为挺有用的.
在这里总结一下, 分享给大家.

注:此帖是我总结的, 但里面的配置都是google出来的, 不是我发明的 :P


1. 有些人想在tty下启动emacs, 比如说我. 因为要是想连续写几个小时, 甚至十几个小时程序, tty下还是比较舒
服的(不闪的才是健康的嘛 :P), 但是配置文件中的有些配置, 比如xft字体什么的在tty下肯定是用不了, 会导致启
动emacs失败. 于是就有:

代码: 全选

(if (not window-system) nil 

;;gui下的专有配置, 比如xft字体, 启动最大化一类的配置写在这

)
这样, 一个配置文件就可以"两用"了.

2.在minibuffer上面那个横杠上显示时间, 相信很多人都用的是

代码: 全选

(display-time-mode 1)                   ;;启用时间显示设置
(setq display-time-24hr-format t)       ;;时间使用24小时制
(setq display-time-day-and-date t)      ;;时间显示包括日期和具体时间
(setq display-time-use-mail-icon t)     ;;时间栏旁边启用邮件设置
(setq display-time-interval 10)         ;;时间的变化频率
结果显示是"6 月 19", 和后面的混在一起, 很不好看.
于是可以在上面的配置后面跟上两句:

代码: 全选

(setq display-time-format " %Y-%m-%d %A %H:%M ") ;;设定日期时间的格式
(display-time) ;;这句可能用不着
这样就好看多了.

3.在emacs里man. emacs里的man被称作woman(WithOut man, 搞笑的创意), 配置如下:

代码: 全选

(global-set-key [(f1)] (lambda()        ;;设定F1为woman快捷键
                 (interactive) 
                 (let ((woman-topic-at-point t))
                 (woman))))
(setq woman-use-own-frame nil)          ;; WoMan不打开新的 frame, 你可能会想要这个配置
4.在emacs里查词典, 这个有点麻烦.
----a.安装sdcv. 不知道是什么的就google一下, 比我讲的要清楚.

代码: 全选

sudo apt-get install sdcv
----b.去http://stardict.sourceforge.net/Dictionaries.php下载你想要的词典, 那一页
也有词典的安装方法.
----c.去http://code.google.com/p/sdcv-mode/下载sdcv-mode.el, 放在你的插件库里.
----d.在你的emacs配置文件里加上:

代码: 全选

(require 'sdcv-mode)
(global-set-key (kbd "C-c d") 'sdcv-search)
----e.在你的emacs里看到一个英文词不爽, 就Ctrl+c d.

5.在emacs里面聊MSN, Gtalk(很遗憾, 不支持QQ). 这个我只能提示一下, 用bitlbee, 然后配合erc, 详细的我
也没有弄明白, 非常抱歉.

6.在写程序的时候, 也许会打开两个 main.c, 有时候你会搞糊涂哪个是哪个. 假如标题栏上有文件的路径多好,于
是:

代码: 全选

;;;Emacs title bar to reflect file name
(defun frame-title-string ()
   "Return the file name of current buffer, using ~ if under home directory"
   (let
      ((fname (or
                 (buffer-file-name (current-buffer))
                 (buffer-name))))
      ;;let body
      (when (string-match (getenv "HOME") fname)
        (setq fname (replace-match "~" t t fname))        )
      fname))
;;; Title = 'system-name File: foo.bar'
(setq frame-title-format '("" system-name "  File: "(:eval (frame-title-string))))
好了, 就这些了, 希望我上边的这些配置中有你想要的.

同时我也想在这求助一下, 是关于cc-mode里编程风格的设置问题, 我比较喜欢FreeBSD内核的编程风格, 它其中有
一条规定是, 假如一句话(通常是if/while 和 有很长参数列表的函数)很长, 那么二级缩进1/2个tab. 如下:

代码: 全选

if (sysctlbyname("kern.init_shutdown_timeout", &shutdowntimeout, &len,
    NULL, 0) == -1 || shutdowntimeout < 2)

代码: 全选

emergency("fatal signal: %s",
    (unsigned)sig < NSIG ? sys_siglist[sig] : "unknown signal");
不知道配置文件怎么写才能实现. 有谁知道请跟帖告诉我, 同时也分享给大家. 如果同时也能给我发封邮件直接告诉
我, 我将感激不尽, 因为我不是经常泡论坛. fengzi.gg {at} google.com

7. 谢谢8楼得回帖, 上面这个问题已经解决, C语言的BSD内核风格缩进的配置如下:

代码: 全选

;;--------------------CC-mode配置  http://cc-mode.sourceforge.net/
;; http://docs.freebsd.org/cgi/getmsg.cgi?fetch=26277+0+archive/2001/freebsd-standards/20011230.freebsd-standards
(require 'cc-mode)
(defun my-c-mode-hook ()
  "happy hacking."
  (interactive)
  (c-set-style "bsd")
  (setq tab-width 8    ;; TAB键的宽度设置为8 
	c-basic-offset 8    
	indent-tabs-mode t  ;; 使用TAB缩进
	c-tab-always-indent nil) ;;也使用TAB的原有功能
  (setq c-cleanup-list (append c-cleanup-list (list 'brace-else-brace)))
  (c-set-offset 'arglist-close 0)
  (c-set-offset 'arglist-cont-nonempty 4)
  (c-set-offset 'inline-open 0)
  (c-set-offset 'case-label 0)
  (c-set-offset 'statement-cont 4)
  (c-toggle-auto-state -1) ;;不用自动换行/1表示自动换行
  (c-toggle-hungry-state)  ;; 此模式下,当按Backspace时会删除最多的空格 
  (define-key c-mode-map [return] 'newline-and-indent) ;; 将回车代替C-j的功能,换行的同时对齐 
  (define-key c-mode-map "\C-ce" 'c-comment-edit) ;;写注释
)

(add-hook 'c-mode-hook 'my-c-mode-hook) 

6月23日更新第6项

10月27日更新第7项C语言代码风格

发表于 : 2008-06-20 9:41
cvgmt
学习了,赶快试用一下,非常感谢分享!
想问一下,(setq display-time-use-mail-icon t) ;;时间栏旁边启用邮件设置
是什么意思呢,出现一个 0.* 和一个信封?

发表于 : 2008-06-20 9:52
haria1988
飘过,不用emacs。。。。。。

发表于 : 2008-06-20 10:58
fengzishaoye
cvgmt 写了:学习了,赶快试用一下,非常感谢分享!
想问一下,(setq display-time-use-mail-icon t) ;;时间栏旁边启用邮件设置
是什么意思呢,出现一个 0.* 和一个信封?
关于display-time-use-mail-icon:
The word `Mail' appears after the load level if there is mail for
you that you have not read yet. On a graphical display you can use an
icon instead of `Mail' by customizing `display-time-use-mail-icon';
this may save some space on the mode line.
就是说, 假如有未读邮件的话用一个信封图标显示出来.

关于0.*:
L.LL is the average number of running processes in the whole
system recently.
系统平均的进程数.

出自 http://www.cs.cmu.edu/cgi-bin/info2www? ... ode%20Line

发表于 : 2008-06-20 18:46
cvgmt
不过还有一些不明白,如果有一个信封,那么如何读该邮件呢?虽然用 emacs 有一年了,但主要拿来编辑 .tex 和 .asy 和 .mp 文件,不太懂这些配置,谢谢指教。

发表于 : 2008-06-20 19:46
fengzishaoye
cvgmt 写了:不过还有一些不明白,如果有一个信封,那么如何读该邮件呢?虽然用 emacs 有一年了,但主要拿来编辑 .tex 和 .asy 和 .mp 文件,不太懂这些配置,谢谢指教。
指教就算了, 我也是初学者啊 :P

按理说(我也不是很肯定), 你配置了收发邮件的插件, 比如gnus或者mew, 然后收到了邮件, 才会有这个标志.
所以看一下你的配置文件里的配置, 确定是用了gnus还是mew, 还是别的什么? 然后再查相关的操作方法.

Re: Emacs中的几个不太常见的设置汇集

发表于 : 2008-10-22 10:38
clxme
对我这种初学者很有用,找到了很多以前不知道的设置。
在这谢楼主了。 :em05

Re: Emacs中的几个不太常见的设置汇集

发表于 : 2008-10-22 11:19
herberteuler
最后那个 C 模式的问题你可以看一下 c-offsets-alist。这个可以解决你的问题。