LinuxSir.cn,穿越时空的Linuxsir!

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

和兄弟姐妹们讨论和推广emacs

[复制链接]
发表于 2004-5-28 20:44:18 | 显示全部楼层
真是精华贴!!!
赞!!!
 楼主| 发表于 2004-5-29 13:24:09 | 显示全部楼层
hvj的讨论和推广emacs贴12:

emacs中浏览网页的工具包主要有两个w3和w3m,xemacs中会默认使用w3,而w3已经很久没有更新了,在GNU emacs中推荐使用w3m。

w3m是一个非常优秀的字符端网页浏览器,并且对CJK支持非常不错;在emacs中使用w3m是通过emacs-w3m扩展包使用w3m的。而w3是完全用elisp语言编写的一个给emacs使用的浏览器扩展包。相对而言,emacs-w3m速度更快,对中文支持更好,对网页的支持也更强一些。

安装w3m时如果要给emacs使用,还得安装emacs-w3m包;另,很重要的一点,要安装w3m的图标,否则emacs-w3m无法使用。

emacs-w3m不仅仅可用来单独浏览网页(支持图片),gnus或mew可以调用他来读html格式的邮件,所以对于一个爱好emacs的朋友,我还是推荐大家安装w3m;虽然大部分我们上网浏览网页还是用mozilla或opera。

下面是我的配置文件:
hvj-w3m.el
[php]
;;启动和初始化w3m.el
(autoload 'w3m "w3m" "Interface for w3m on Emacs." t)
(autoload 'w3m-browse-url "w3m" "Ask a WWW browser to show a URL." t)
(autoload 'w3m-search "w3m-search" "Search words using emacs-w3m." t)
;;使用mule-ucs,只有在你安装mule-ucs elisp扩展包时这个才有用,可以看Unicode解码的网页
(setq w3m-use-mule-ucs t)
;;使用工具包
(setq w3m-use-toolbar t)
;;启用cookie
(setq w3m-use-cookies t)
;;设定w3m图标所在文件夹,gentoo的默认安装位置就是如下,大家可以根据自己的情况改一下
(setq w3m-icon-directory "/usr/share/emacs-w3m/emacs-w3m/icon")
;;设定w3m运行的参数,分别为使用cookie和使用框架
(setq w3m-command-arguments '("-cookie" "-F"))
;;用w3m浏览网页时也显示图片
(setq w3m-display-inline-image t)
;;设定w3m的语言设置,以便方便使用和阅读中文
;;书签解码设置
(setq w3m-bookmark-file-coding-system 'chinese-iso-8bit)
;;w3m的解码设置,后面最好都有,我也不详解了
(setq w3m-coding-system 'chinese-iso-8bit)
(setq w3m-default-coding-system 'chinese-iso-8bit)
(setq w3m-file-coding-system 'chinese-iso-8bit)
(setq w3m-file-name-coding-system 'chinese-iso-8bit)
(setq w3m-terminal-coding-system 'chinese-iso-8bit)
(setq w3m-input-coding-system 'chinese-iso-8bit)
(setq w3m-output-coding-system 'chinese-iso-8bit)
;;w3m是使用tab的,设定Tab的宽度
(setq w3m-tab-width 8)
;;设定w3m的主页,同mozilla的默认主页一样
(setq w3m-home-page "file://home/hans/.w3m/bookmark.html")
;;以下都给倒忘了
(setq w3m-view-this-url-new-session-in-background t)
(add-hook 'w3m-fontify-after-hook 'remove-w3m-output-garbages)
;;好像是有利于中文搜索的
(defun remove-w3m-output-garbages ()
  (interactive)
  (let ((buffer-read-only))
    (setf (point) (point-min))
    (while (re-search-forward "[\200-\240]" nil t)
      (replace-match " "))
    (set-buffer-multibyte t))
  (set-buffer-modified-p nil))
[/php]
发表于 2004-5-29 13:28:01 | 显示全部楼层
此贴应该加精,而不是http://www.linuxsir.cn/forum.php?mod=viewthread&tid=112890。
个人观点
 楼主| 发表于 2004-5-29 13:35:54 | 显示全部楼层
谢谢,已经加精

那个帖子属于版务精华贴,管理需要。
 楼主| 发表于 2004-5-29 22:29:53 | 显示全部楼层
hvj的讨论和推广emacs贴13:

sir的IRC已经开了,相信不少人想去聊天和讨论问题,也找了不少IRC客户端,如:Xchat, mirc, ircssi, chatzilla等等,这里就向大家推荐erc,emacs里的IRC客户端,对中文的支持也是非常好的。

下面是我的配置文件和讲解:hvj-erc.el

[php]
;;加载erc.el包
;;这个配置文件最好不要编译,否则下面定义的erc-sir等函数不能用
;;不过这个应该可以修改,我以后试试
(require 'erc)
;;设定一个有关方便连接IRC服务器的函数
(defmacro de-erc-connect (command server port nick)
  "Create interactive command `command', for connecting to an IRC server. The
command uses interactive mode if passed an argument."
  (fset command
        `(lambda (arg)
           (interactive "p")
           (if (not (= 1 arg))
               (erc-select ,server ,port ,nick)
             (erc ,server ,port ,nick ,erc-user-full-name t)))))
;;这是咱们Sir的IRC,大家记得常去
(de-erc-connect erc-sir "linuxsir.cn" 6667 "hvj")
;;这是linuxfans的IRC,有些时日了
(de-erc-connect erc-fans "irc.linuxfans.org" 6667 "hvj")
;;下面是我所在局域网里的IRC
(de-erc-connect erc-me "192.168.1.191" 6667 "hvj")
(de-erc-connect erc-van "192.168.1.14" 6667 "hvj")

;;设定一些有关变量
(custom-set-variables
;;进入linuxsir的IRC,自动加入#javalee频道,咱们的灌水频道,人气还不错
'(erc-autojoin-channels-alist '(("linuxsir.cn" "#javalee")
;;进入linuxfans的IRC,自动加入#linuxfans和#linuxer频道,不过linuxfans的IRC已经自动这样设置了
                                 ("irc.linuxfans.org" "#linuxfans" "#linuxer")))
;;在默认情况下IRC里我的ID是hvj
'(erc-email-userid "hvj")
;;设定聊天时的行宽,方便阅读
'(erc-fill-column 67)
;;什么来着?
'(erc-fill-prefix "      ")
;;屏蔽掉的一些命令
'(erc-hide-list '("JOIN" "ART" "QUIT"))
;;默认的昵称,这和userid有什么区别?还不清楚,清大家告诉我。
'(erc-nick "hvj")
;;默认的端口6667
'(erc-port 6667)
;;登录这些IRC不用密码登录
;;我在linuxfans已经注册了我的ID,我不用密码登录,将会一分钟后将我改名
;;下次我将改改这个变量
'(erc-prompt-for-password nil)
;;有关退出IRC的,什么意思来着?
'(erc-quit-reason 'erc-quit-reason-zippy)
;;不保存IRC聊天记录
;;大家可以找找,是可以保存的,只要你愿意
'(erc-save-buffer-on-part nil))

;;设定erc模式的一个滚动设置,保持输入在当前窗口的最后一行
(add-hook 'erc-mode-hook 'erc-add-scroll-to-bottom)

;;erc中文的关键设置,这个一定需要,否则你只能看中文,而不能“说”中文
(setq erc-encoding-default 'chinese-iso-8bit)
[/php]
 楼主| 发表于 2004-5-29 22:34:23 | 显示全部楼层
hvj的讨论和推广emacs贴14:

这贴讲一点emacs中的文件管理了。Emacs的文件管理默认有一个扩展包dired.el,这是一个同命令行式文件管理器相似但又功能非常强大的东东。我想对于emacs的爱好者,以及一些NO GNOME&NO KDE的用户,这是一个非常好的工具。

[php]
;;设定显示文件的参数,具体不记得了,以后再加上
(setq dired-listing-switches "-vl")
;;允许复制和删除时将文件夹里所有内容一起带上
(setq dired-recursive-copies t)
(setq dired-recursive-deletes t)
;;cvs时的一个浏览设置
(setq cvs-dired-use-hook 'always)
;;主要可以详细设置的地方
;;对于特定的文件,用什么程序打开
;;记住是用!,而不是enter键,enter键表示编辑,同v
;;记住在后面带上&,为后台运行,我们还要用Emacs做别的事情呢
;;下面的文件用的是正则表达式,要表达清楚
(add-hook 'dired-load-hook
          (function (lambda ()
;;记住这里要加载另一个有关文件管理器的包dired-x.el,这个是dired的扩展,非常强大
                      (load "dired-x")
                      (setq dired-guess-shell-alist-user
                            (list
                             (list "\\.tar\\.bz2$" "tar jxvf * &")
                             '("\\.ps$" "gv * &")
                             '("\\.html?$" "rxvt -e w3m * &")
                             '("\\.pdf$" "xpdf * &")
                             '("\\.\\(jpe?g\\|gif\\|png\\|bmp\\|xbm\\|fig\\|eps\\)$" "display * &")
                             '("\\.\\([Ww][Mm][Vv]\\|[Vv][Oo][Bb]\\|[Mm][Pp][Ee]?[Gg]\\|asf\\|[Rr][Aa]?[Mm]\\)$" "mplayer * &")
                             ))
                      )))
;;这个也忘了,好像是不允许忽略掉某些文件
;;到底是哪些文件,我想想
(add-hook 'dired-mode-hook
          (function (lambda ()
                      (setq dired-omit-files-p nil)
                      )))
[/php]
 楼主| 发表于 2004-5-29 22:49:11 | 显示全部楼层
hvj的讨论和推广emacs贴15:

上面讲了不少别的地方有,emacs中也有的工具,如文件管理器dired,IRC客户端erc,邮件客户端mew,新闻组阅读器gnus,字典emacs-dictionary等等,那么是否也有虚拟终端呢?

大家常用的是xterm, rxvt, mlterm, 等等,主要希望的就是对中文支持够好。而在emacs中也有类似的工具,虽然有的只是调用外面的程序而已。

前不久在sir里面讨论时,就发现原来emacs中只是有四种虚拟终端:eshell, shell, term, termianl-emulator。而我一直孤陋寡闻,使用的是eshell,这是一个由elisp写的,老感觉只是凑合而已。不过现在不同了,term真的不错,感觉就跟rxvt一样,非常方便,当然因为在Emacs里,还支持粘贴/复制呢。鄙人一直没搞定在rxvt和外部程序的粘贴复制

小知识:上面这些虚拟终端可以通过类似M-x term的命令来运行。

因为刚开始用,目前这方面还没有单独的配置文件,都是默认的。但是有几点大家可以注意一下:
1,eshell没有使用~/.bashrc配置文件的,所以你得单独写很多elisp来完成你在~/.bashrc里有的功能。不过eshell有个小功能不错,摁TAB键多几次,你会发现补全很有意思和效率。
2,term(shell, termianl-emulator?)是使用你得Bash配置文件的,这一点我非常喜欢。可能大家会觉得term里的提示符不大漂亮,可以在~/.bashrc里设置一下,大家可以通过命令
  1. echo $TERM
复制代码

获得当前的TERM变量来设置。term的TERM变量为eterm。
3,目前我只会在一个emacsl里打开一个term。我在用eshell的时候见过有人这样写的,通过修改eshell的buffer名称,可以同时打开几个Eshell。以后有空我会在term这里试试,不知可行性如何?
 楼主| 发表于 2004-5-30 17:25:41 | 显示全部楼层
hvj的讨论和推广emacs贴16:

用wiki整理你的笔记和作小型网站。虽然html也不难,但是wiki更简单,做的网页也非常不错,管理站点也很好。目前Wiki有很多版本,我常用的就是emacs-wiki,和大家分享一下。不过目前没有用他作网站,只是管理笔记,感觉非常的灵活。下面就是我的配置文件:

hvj-wiki.el
[php]
;;加载emacs-wiki
(require 'emacs-wiki)
;;设置wiki所在文件夹
(setq emacs-wiki-directories '("~/hvj/wiki"))
;;设置wiki转换为html后所在的文件夹
(setq emacs-wiki-publishing-directory "publish")
;;设置wiki转为html用的解码
;;但好像仍然有些问题,用firefox打开时有时仍需手动调整解码
(setq emacs-wiki-meta-charset "gb2312")
;;设置wiki转为html的样式,不过目前我还没用
(setq emacs-wiki-style-sheet
      "")
;;设置Wiki内图片的路径
(setq emacs-wiki-inline-relative-to 'default-directory)

;;现面两个函数,是由王垠编写的
;;预览生成网页的源码,即html源码
;;不过先将wiki生成html
(defun emacs-wiki-preview-source ()
  (interactive)
  (emacs-wiki-publish-this-page)
  (find-file (emacs-wiki-published-file)))
;;这个函数是预览在浏览器中所生成的网页
;;这里用的是emacs-w3m浏览器,你也可使用外部浏览器,如firefox,这可能稍复杂点
(defun emacs-wiki-preview-html ()
  (interactive)
  (emacs-wiki-publish-this-page)
  (w3m-browse-url (emacs-wiki-published-file)))

;;设定你的Wiki项目,有时候你可能拥有几个,一个给个人整理笔记用,一个用来发表为网站形式
(setq emacs-wiki-projects
      '(("default" . ((emacs-wiki-directories . ("~/hvj/wiki"))))
        ("work" . ((fill-column . 65)
                 (emacs-wiki-directories . ("~/hvj/workwiki/"))))))
[/php]
 楼主| 发表于 2004-5-30 17:27:13 | 显示全部楼层
hvj的讨论和推广emacs贴17:

这里是我用的非emacs默认的扩展包,都是自己安装的,配置文件也不常,就集中在这里了。

hvj-other-elisp.el
[php]
;;有关解压缩的,以前用过,好久没用了
(require 'jka-compr)

;;desktop.el在.emacs文件中(贴1)讲过,需要放在Emacs配置文件的最后

;;session.el,同desktop.el,保存上次关闭时编辑文件所在的位置,而不仅仅只是打开那些文件
(require 'session)
;;将这个功能加到emacs初始化过程中
(add-hook 'after-init-hook 'session-initialize)

;;redo.el,与undo相反了,不过Emacs默认没有带这个功能
(require 'redo)

;;thumbs.el,看图的好东西,方便看大量的图片
;;他将图片都建立缩略图,所以第一次看比较慢,以后就方便了
;;不过我最近不用了,我喜欢用display *
;;(require 'thumbs)

;;tabbar.el,用firefox,opera的人都用过tab,很方便和人性化的一个功能
;;这里也有,并且按文件的模式分类
;;对于这个扩展包,我还用了一个绑定键,用来切换buffer,很方便
;;不过在非X下功能不全
(require 'tabbar)
(tabbar-mode)

;;table.el,图表功能,不错
;;还有一个适合双字节的一个类似的扩展包,大家可找找
;;好像是印度人写的
(require 'table)
(autoload 'table-insert "table" "WYGIWYS table editor")
(add-hook 'text-mode-hook 'table-recognize)

;;browse-kill-ring.el,emacs默认undo次数不多,用这个扩展包,可以极大的加强这个功能
;;有一次我在翻译一本书,翻译了一天,有好几万行了,朋友叫我去打排球,我就保存放在那里了
;;宿舍的一个朋友不懂emacs,在那用鼠标左键右键中键点了几次,却不知鼠标的键在emacs通过组合绑定了不少功能
;;可惜我的翻译文档,我回来的时候,全没了!
;;不过还好,有了这个包,我可以超强恢复,也不知道摁了多少次undo,所有的都恢复了
(require 'browse-kill-ring)
(browse-kill-ring-default-keybindings)

;;sawfish.el,我的窗口管理器是sawfish,我在编辑Sawfish的配置文件时,用这个模式可以正确的语法显示
(autoload 'sawfish-mode "sawfish" "sawfish-mode" t)

;;maxima.el,我很喜欢的数值计算工具maxima在emacs中使用所需的扩展包
;;maxima-mode只是普通的模式,同在终端上运行maxima类似
(autoload 'maxima "maxima" "Maxima interaction" t)
(autoload 'maxima-mode "maxima" "Maxima mode" t)
;;emaxima-mode,这个是非常漂亮的,因为掉用了tex,那可是对数学天生支持就好的
(autoload 'emaxima-mode "emaxima" "Emaxima" t)
(add-hook 'emaxmia-mode-hook 'emaxima-mark-file-as-emaxima)
(autoload 'imaxima "imaxima" "Image support for Maxima." t)

;;htmlhelpmode.el,加强的html扩展包,对html等网页源码能更好的语法显亮
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
;;css-mode.el,对css文件很配
(autoload 'css-mode "css-mode" "Mode for editing CSS files" t)

;;services.el,一个小巧的玩意,询问端口和对应服务的关系
(autoload 'services-lookup      "services" "erform a service lookup" t)
(autoload 'services-clear-cache "services" "Clear the service cache"  t)

;;igrep.el,emacs中的egrep
(require 'igrep)
[/php]
 楼主| 发表于 2004-5-30 17:30:13 | 显示全部楼层
hvj的讨论和推广emacs贴18:

emacs和vim的一大有点就是对大量的文件有语法高亮显示,这里看一点emacs中的语法高亮显示。当然这里我们可以看到emacs所支持的好像没有vim多一点,但是无关紧要,Emacs的爱好者可以自个写的,我等着大家

hvj-mode.el
[php]
;;将默认模式从fundemental-mode改为text-mode
(setq default-major-mode 'text-mode)
;;启动语法高亮模式
(global-font-lock-mode t)
;;一些具体的设置,从别的地方拷过来的,目前编程较少,所以也没具体改了,感觉目前配置还是非常不错的
;;如果你是一个程序员,这块你可以仔细改改
(setq font-lock-maximum-decoration t)
(setq font-lock-global-modes '(not text-mode))
(setq font-lock-verbose t)
(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000)))

;;对相应的文件设定相应的模式,以便正确的语法显亮
;;文件名用正则表达式表示,注意不要后面覆盖了前面的而引起的误会
;;修改这个之前先C-h v auto-mode-alist查查已有的设置
(mapcar
(function (lambda (setting)
             (setq auto-mode-alist
                   (cons setting auto-mode-alist))))
'(("\\.\\(xml\\|rdf\\)\\'" . sgml-mode)
   ("\\.\\([ps]?html?\\|cfm\\|asp\\)\\'" . html-helper-mode)
   ("\\.css\\'" . css-mode)
   ("\\.\\(emacs\\|session\\|gnus\\)\\'" . emacs-lisp-mode)
   ("\\.wiki\\'" . emacs-wiki-mode)
   ("\\.\\(jl\\|sawfishrc\\)\\'" . sawfish-mode)
   ("\\.scm\\'" . scheme-mode)
   ("\\.py\\'" . python-mode)
   ("\\.\\(ba\\)?sh\\'" . sh-mode)
   ("\\.l\\'" . c-mode)
   ("\\.max\\'" . maxima-mode)))
[/php]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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