LinuxSir.cn,穿越时空的Linuxsir!

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

请问谁有emacs的xft补丁?

[复制链接]
发表于 2006-3-6 21:08:59 | 显示全部楼层
Post by pluskid
还有同时按Ctrl和Shift的时候用哪两个手指头按呀?感觉怎样按都不是很方便的样子。
呵呵,如果觉得不方便,可以将它绑定到其他的组合上呀。
回复 支持 反对

使用道具 举报

发表于 2006-3-7 04:19:11 | 显示全部楼层
emacs已经成为我最喜爱的编辑器了. 用了vim快4年了.

编译xft emacs只需要:

%cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/cvsroot/emacs co emacs

%cd emacs

%cvs up -Pd -r XFT_JHD_BRANCH

然后./configure && make bootstrap && make install

但我偿试了xft版的emacs发现并不是很舒服虽然字体改善了很多所以我后来就一
直用emacs unicode-2.

这里有几张我的贴图:
http://linuxfans.org/nuke/module ... eninfo&did=1905
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-7 08:59:04 | 显示全部楼层
Post by euboy
emacs已经成为我最喜爱的编辑器了. 用了vim快4年了.

编译xft emacs只需要:

%cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/cvsroot/emacs co emacs

%cd emacs

%cvs up -Pd -r XFT_JHD_BRANCH

然后./configure && make bootstrap && make install

但我偿试了xft版的emacs发现并不是很舒服虽然字体改善了很多所以我后来就一
直用emacs unicode-2.

这里有几张我的贴图:
http://linuxfans.org/nuke/module ... eninfo&did=1905

奇怪!我也是看到你那幅图了,也是按照那方法做的。为什么编译出来就不能显示中文呢?不管加不加--with-xft选项。
回复 支持 反对

使用道具 举报

发表于 2006-3-10 05:11:35 | 显示全部楼层
Those screenshots were actually using emacs unicode branch.

%cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/cvsroot/emacs co -r emacs-unicode-2 emacs
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-10 15:28:05 | 显示全部楼层
我的Emacs-snapshot显示也很不错,但是,不是xft的话,显示Courier New字体就会很难看。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2006-3-10 19:38:51 | 显示全部楼层
Post by pluskid
我的Emacs-snapshot显示也很不错,但是,不是xft的话,显示Courier New字体就会很难看。
这个貌似不是 Courier New。
另 1:第三个注释应为“每一个”。
另 2:如果你的 Emacs 够新,可以试试这两个模式:(c-toggle-auto-newline 1) [C-c C-a]、(c-subword-mode)。如果设置好的话,非常方便。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-11 14:36:35 | 显示全部楼层
Post by herberteuler
这个貌似不是 Courier New。
另 1:第三个注释应为“每一个”。
另 2:如果你的 Emacs 够新,可以试试这两个模式:(c-toggle-auto-newline 1) [C-c C-a]、(c-subword-mode)。如果设置好的话,非常方便。

这个确实不是Courier New,我没有用Courier New,因为用起来很难看!
:!! 哈哈!确实!写错了!
c-toggle-auto-newline确实很好用呀,只是暂时还不习惯,哈哈!但是c-subword-mode是干什么的?我用describe-function c-subword-mode也看不出什么名堂来呀?
回复 支持 反对

使用道具 举报

发表于 2006-3-11 15:15:31 | 显示全部楼层
Post by pluskid
这个确实不是Courier New,我没有用Courier New,因为用起来很难看!
:!! 哈哈!确实!写错了!
c-toggle-auto-newline确实很好用呀,只是暂时还不习惯,哈哈!但是c-subword-mode是干什么的?我用describe-function c-subword-mode也看不出什么名堂来呀?


c-subword-mode 就是用来使 forward-word 和 backward-word 在像 ThisIsAVariableName 这样的标识符中每次移动一个单词而不是整个标识符的模式。

使用 c-toggle-auto-newline 要和三个变量 c-hanging-braces-alist、c-hanging-colons-alist、c-hanging-semi&comma-criteria 联合使用。这里是我为了让它符合我的风格写的代码:
  1. (defvar xgp-cfsi-left-PAREN-old nil
  2.   "Command used to input "("")
  3. (make-variable-buffer-local 'xgp-cfsi-left-PAREN-old)

  4. (defun xgp-cfsi-modify-alist (alist term new)
  5.   (let ((tl (assq term (symbol-value alist))))
  6.     (if tl
  7.         (setcdr tl new)
  8.       (add-to-list alist (cons term new)))))

  9. (defun xgp-cfsi (style)
  10.   "Deciding whether using CFSI."
  11.   (interactive "sStyle: ")

  12.   (if (equal style "bsd")

  13.       (progn  (c-set-style "bsd")
  14.               (setq indent-tabs-mode t
  15.                     c-hanging-braces-alist (quote ((defun-open after) (defun-close after) (brace-list-open after) (brace-list-close) (brace-entry-open after) (statement-cont after) (substatement-open after) (block-close . c-snug-do-while) (extern-lang-open after) (namespace-open after) (module-open after) (composition-open after) (inexpr-class-open after) (inexpr-class-close after) (class-open after) (class-close)))
  16.                     c-hanging-colons-alist (quote ((label after) (case-label after) (access-label after)))
  17.                     c-hanging-semi&comma-criteria (quote (c-semi&comma-inside-parenlist)))
  18.               (local-set-key " " 'xgp-cfsi-bsd-SPC))

  19.     (progn  (c-set-style style)
  20.             (setq indent-tabs-mode nil
  21.                   c-hanging-colons-alist (quote ((label after) (case-label after) (access-label after)))
  22.                   c-hanging-semi&comma-criteria (quote (c-semi&comma-inside-parenlist)))

  23.             ;; CLASS-CLOSE
  24.             (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-close nil)
  25.             (local-set-key " " 'self-insert-command)

  26.             ;; In GNU style, '(' is always after ' '
  27.             (if (and (equal style "gnu") (not xgp-cfsi-left-PAREN-old))
  28.                 (progn (setq xgp-cfsi-left-PAREN-old (lookup-key (current-local-map) "("))
  29.                        (local-set-key "(" 'xgp-cfsi-gnu-PAREN)))))

  30.   ;; this is correct since ONLY GNU style put a ' ' before '('
  31.   (if (and (not (equal style "gnu")) xgp-cfsi-left-PAREN-old)
  32.       (progn (local-set-key "(" xgp-cfsi-left-PAREN-old)
  33.              (setq xgp-cfsi-left-PAREN-old nil))))

  34. (defun xgp-cfsi-bsd-SPC ()
  35.   (interactive)
  36.   (if (looking-back "^[ \t]*}[ \t]*\n[ \t]*$")
  37.       (let ((s (save-excursion (search-backward "}")
  38.                                (1+ (point)))))
  39.         (delete-region s (point))
  40.         (insert " "))
  41.     (insert " ")))

  42. (defun xgp-cfsi-gnu-PAREN ()
  43.   (interactive)
  44.   (if (not (looking-back " "))
  45.       (insert " "))
  46.   (funcall xgp-cfsi-left-PAREN-old nil))

  47. (defun xgp-cfsi-erase-blanks ()
  48.   "Erase all trivial blanks for CFSI."
  49.   (interactive)
  50.   (save-excursion
  51.     (goto-char (point-min))
  52.     (while (re-search-forward "[ \t]+$" nil t)
  53.       (replace-match "" nil nil))))
复制代码

这里的核心函数是 xgp-cfsi,它接受风格名作为参数,并设置自动换行的方式。这样,在 bsd 风格中只有函数声明、单独的 if、while 和 for 的子句以及枚举和初始化说明中需要手工按回车,其他情况中 Emacs 都会自动插入回车。然后我在 c-mode-common-hook 中加入了 (c-toggle-hungry-state 1)、(c-toggle-auto-newline 1),以及 (xgp-cfsi "bsd") 来将默认风格置为 bsd。同时,如果需要输入其他风格的程序,Emacs 都会自动地进行排版。当然,我在公司的开发组要求了一种我不喜欢的风格 (这也是我自己写这个函数的原因),它是这样设置的:
  1. '(c-hanging-braces-alist (quote ((defun-open before after) (defun-close before after) (brace-list-open after) (brace-list-close) (brace-entry-open before after) (statement-cont before after) (substatement-open before after) (block-close after) (extern-lang-open before after) (namespace-open before after) (module-open before after) (composition-open before after) (inexpr-class-open before after) (inexpr-class-close before after) (class-open before after) (class-close))))
  2. '(c-offsets-alist (quote ((block-open . 0) (block-close . 0) (statement-block-intro . +) (substatement . +) (substatement-open . 0) (substatement-label . 0) (label . 0) (case-label . 0) (do-while-closure . 0) (else-clause . 0) (catch-clause . 0) (case-label . 0) (access-label . -) (namespace-open . 0) (class-open . 0) (class-close . 0) (innamespace . 0))))
复制代码

将对变量的修改和上面的函数结合到一起,c-toggle-auto-newline 可以提供一个非常方便的代码编写方式。

我的代码只是参考,你可以结合它以及上面提到的三个变量的说明来训练 Emacs 使它完全符合你的风格要求
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-11 20:53:40 | 显示全部楼层
自己用回车换行的时候还要按tab来缩进,不爽,我在网上看到的加这条语句:
  1.   (define-key c-mode-map [return] 'newline-and-indent)
复制代码
回车就等于C-j的功能,就可以自动缩进了。
回复 支持 反对

使用道具 举报

发表于 2006-3-11 21:07:27 | 显示全部楼层
Post by pluskid
自己用回车换行的时候还要按tab来缩进,不爽,我在网上看到的加这条语句:
  1.   (define-key c-mode-map [return] 'newline-and-indent)
复制代码
回车就等于C-j的功能,就可以自动缩进了。
呵呵,你可以试试 Auto Newline 模式,大多数情况下,都不用自己按回车了。
不过好像即使不用 tab,Emacs 也会在输入 (、; 的时候自动缩进呀。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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