LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1494|回复: 8

有关PORTAGE中通过CVS安装的包的问题

[复制链接]
发表于 2008-8-3 21:54:56 | 显示全部楼层 |阅读模式
最近在使用EMACS过程中遇到三个麻烦:
1.htmlize无法使用(error "Invalid face")
2.muse的多级目录项目不正常
3.cedet无法编译通过
这几个问题折腾了我好几天了,查资料未果,多处求助未果。今天晚上鬼使神差的跑到WINDOWS下下载了一个NTEMACS,随便测试了一下第一个问题,居然是正常的,晕了……之前除了第三个问题有朋友指出是EMACS的BUG之外,前两个我一直以为是自己哪里配置没搞好……现在看来应该是EMACS的问题吧(我用的那个NTEMACS也是23版本,但小版本号比GENTOO下的低)。
查看了一下EMACS-CVS的EBUILD,看到有这样两句:
WANT_AUTOCONF="latest"
WANT_AUTOMAKE="latest"
意思是从CVS下载最新的源代码么?假设我遇到的那三个问题都是EMACS的问题,并且某一天EMACS的开发者修正了这些BUG,那么我只要再次emerge emacs-cvs就可以解决了吗?如果是这样的话,那不是没有传统的包更新起来方便吗?比如说,sync后用emerge -avuDN world就知道系统中哪些包需要升级,而对于这些用CVS安装的程序,是不是只要大的版本没有变化(没有新的ebuild产生)就永远不会提示更新呢?
再者,我现在觉得这个EMACS-CVS不太好用,但又不想用稳定版的EMACS22(因为我要用XFT字体和UTF8支持),怎样去安装稍微稳定点的而不是最新的EMACS-CVS版本?(比如说和WINDOWS下那个版本相同)

哎,不知道EMACS23稳定版何时能出来啊。
发表于 2008-8-4 01:15:27 | 显示全部楼层
emacs-cvs出了问题不要尝试去解决
emacs-cvs出问题正常
不出问题人品好
所有的cvs/svn/git版本都可以套用此公理

换低版本
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-4 02:08:10 | 显示全部楼层
呵呵,看来我RP的确不好
哎,也罢,先SLOT个EMACS22用着吧,这下又要设置字体了……
另外打算每天emerge emacs-cvs一次,直到我需要的功能没问题为止,HOHO
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-4 03:25:59 | 显示全部楼层
我很郁闷……相当的郁闷!看来我最近RP不是一般的差啊……
顶楼里说的第二个问题解决了……
因为我刚刚安装了EMACS22,htmlize用的很正常,但是muse的子目录项目仍然不行,单独发布项目是可以的,但发布顶层项目就总是提示No page need publish,和在23版本里的问题一样。我心想不可能啊,如果22版本就有问题,都这么久了,肯定被fixed了啊,于是不死心,到MUSE的BUG列表里搜了半天发现:没有关于这个问题的任何BUG。于是打开这几天看了N遍的MUSE MANUAL,索性将作者的配置例子直接拿过来,连目录定义都没修改,然后惊奇的发现……正常了!真见鬼……于是怀疑是不是我原来将源文件目录分离设置了,MUSE不支持?试着把目录结构修改到我原来的设置,居然也能正常工作!但是我将自己原来的配置备份替换过来就是不行!我真快要疯了,因为这两个配置现在几乎完全相同啊,打开两个GVIM,调到同样大小的窗口,对照着能正常工作的那份配置一行行修改格式(这也是我没用diff的原因,因为内容虽然相同,但是代码格式不同)我一边修改一边想:没听说LISP对格式有啥特殊要求啊,我今天就执着一下,非弄清楚为啥我原来的配置文件不能用!
当我对照到
(setq muse-project-alist `(
这一行的时候,猛然发现两份配置中的“`”似乎看起来不太相同……原来我自己那份配置里其实是单引号!修改完毕,一切正常!eselect到EMACS23也正常。
但是,我确实觉得相当的冤枉……不是因为我原来眼神不好,而是这个配置本来是参考了某个BLOG里的文章来的,我是直接复制过来然后修改的,我至今清晰的记得博主在这一行下面写着一段注释“注意,这里是ESC下面那个字符,而不是单引号,我曾经因为这个问题困惑了好久”。于是我潜意识里认为,既然作者一再强调这一点,那肯定是正确的啦。哎……所以我这几天把MUSE的文档看了不下10遍都没注意这个地方……
我现在在想:要是那个博主不加那句话该多好……那样我肯定会仔细检查的,因为以前玩LFS的时候多次吃过这个亏……现在基本上养成了从网上复制代码的时候一定要在那个重音符旁边自己输入一个单引号看看究竟正确与否的习惯。倒是那位博主好心的提醒让我这次放松了警惕。(发个牢骚:您既然提醒了,好歹自己也写对吧,您这不是故意玩人啊?想让别人重温你的困惑?):mad:
回复 支持 反对

使用道具 举报

发表于 2008-8-4 03:36:10 | 显示全部楼层
hehe, 解决就好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-5 18:38:41 | 显示全部楼层
报告一下,第一个问题已解决。
想要解决它的动机是:我每天都要更新一次emacs-cvs看看修复了没有,但是muse这个插件在不同版本的emacs下使用需要重新编译,于是我测试一次就要eselect到23,然后编译muse,测试完用22的时候又要再编译……实在是让人受不了。
今天我终于鼓起勇气,加入了bug-gnu-emacs@gnu.org,发了个BUG报告,下午有人回复了。用他的方法,修改htmlize里面的一句代码,问题解决。附上他的邮件原文:
  1. In Emacs 23.X,

  2.   (face-attribute 'default :inherit) => nil

  3. while in Emacs 22.X,

  4.   (face-attribute 'default :inherit) => unspecified

  5. I'm not sure whether that's a bug, but it is an incompatible change.

  6. For the time being, you can patch your htmlize.el, changing one line
  7. of htmlize-face-size, from

  8.           for f = face then (face-attribute f :inherit)

  9. to

  10.           for f = face then (or (face-attribute f :inherit) 'unspecified)

  11. Juanma
复制代码

看来这个问题是由于EMACS23里的函数接口(不好意思,我不懂lisp,不知道这个该咋表达,就说成是“函数接口”吧)发生了改变所导致的,应该不算是emacs的BUG。这里要说明一下,直接修改了htmlize.el之后依然无效,是因为htmlize在它所在的文件夹里缓存了elc文件,我的方法是直接删除了这个elc,因为这个elc文件似乎是为了使加载的时候更快的吧,所以删掉也没关系……记得前几天看过怎么生成elc的,现在忘记了,一会儿去查查。
回复 支持 反对

使用道具 举报

发表于 2008-8-5 19:05:31 | 显示全部楼层
就应该这样做,
没有什么好怕的,大家都是人,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-5 20:16:44 | 显示全部楼层
哈哈,谢谢老大鼓励。
其实我一直没去官方问的原因有两个,一是觉得我连lisp都不懂,说不定是我自己不会用呢,如果贸然去问的话怕给人家填乱。直到后来查阅了大量资料,并且发现以前的版本没问题我才确认不是我配置的问题。
第二个原因就是自认为我的E文水平也就只能看看文档什么的,担心自己写出来的英语太“高级”,以至于老外看不懂,嘿嘿。而且后来又有一个人给我回复,就一句话,居然让我思考了半天:
  1. Please also notice that htmlfontify.el was meant to be included in Emacs. Vivek, what has happened with this?
复制代码

我开始一直没明白他问的是啥意思,而且那个“vivek”我怎么查也没查出来是啥意思,后来猛然看到,他的邮箱地址就叫这个……所以我觉得那后半句问句应该是他的签名(不过依然不敢确定,因为如果是签名档的话为啥不换行呢?)。为了保险起见,我回复的很模糊“Thank you , it works now”  呵呵,汗啊……

看来这英语还是很重要滴,啥时候有机会了去考考专八?
回复 支持 反对

使用道具 举报

发表于 2010-4-1 12:06:17 | 显示全部楼层
遇到同样的问题喔,我的系统是debian lenny。
使用的emacs22时没有问题,使用自己编译的emacs23就有问题。而且是htmsize.el的问题。

在网上找到了补丁文件,其实道理是一样的,文件名为htmlize-hack.el。代码如下:
;; This file provides a fix for htmlize.el and Emacs 23.
;; To use it, add the path to this directory to your load path and
;; add (require 'htmlize-hack) to your Emacs init file.

(require 'htmlize)

(when (equal htmlize-version "1.34")
  (defun htmlize-face-size (face)
    ;; The size (height) of FACE, taking inheritance into account.
    ;; Only works in Emacs 21 and later.
    (let ((size-list
           (loop
            for f = face then (face-attribute f :inherit)
            until (or (null f) (eq f 'unspecified))
            for h = (face-attribute f :height)
            collect (if (eq h 'unspecified) nil h))))
      (reduce 'htmlize-merge-size (cons nil size-list)))))

(provide 'htmlize-hack)
回复 支持 反对

使用道具 举报

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

本版积分规则

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