图说MicroEmacs Jasspa版本的亮点功能(1)

如前面那篇《介绍一下MicroEmacs》所述,Jasspa是MicroEmacs的一个分支版本,也是最有影响力功能特性最多的一个。

Jasspa主页:http://www.jasspa.com

作者提供了Windows/DOS/Cygwin, Sun, Linux, AIX, Mac, OpenBSD/FreeBSD等多种平台的二进制包供下载。

 

File Browser和Shell

file browser & shell in microemacs jasspa

跟GNU Emacs一样,Jasspa可以在里面运行shell交互环境(在Windows上它跟Cygwin结合得也很好,可以直接用M-x cygwin来启动cygwin shell)。

Toolbar

Jasspa允许给上下左右添加toolbar(其实类似“现代编辑器”里面的ToolWindow),有win和page两种方式(也就是平铺还是叠加,后者类似“现代界面”里面的两个工具窗口停放到不同的标签上),提供的功能有文件浏览器、Item List(函数/变量列表)、Buffer List、书签列表等等,用S-F11可以隐藏全部toolbar。跟GNU Emacs不一样的是,toolbar跟buffer不会混淆,不会出现在GNU Emacs里面那种将文件在一个speedbar窗口中打开的问题。

对话框

GNU Emacs的用户都倾向于不使用菜单、工具栏和对话框,因为这都不如一两次按键那么有效率,很多时候还得借助于鼠标,效率就更低了。但它们也有一个优点:会让新手很容易探索到某个分类里大概有一些什么功能,比如你知道GNU Emacs里面缺省对于较长的行有几种显示方法?你看一下菜单Options->Line Wrapping in this Buffer就知道有Wrap at Window Edge、Truncate Long Lines和Visual Line Mode三种(GNU Emacs里面比较赞的是你可以用C-h k然后点击一个菜单项让它告诉你究竟是调用了什么elisp函数,这样你下次可以用M-x的方式或者绑定按键的方式来使用这个功能了)。

Jasspa里面工具栏(如上所述)、菜单和对话框都用得比较多,你在这里可以方便地将jasspa设置为client-server模式,挑选theme, 加载/卸载某个mode,配置鼠标按键的行为等等。

这些对话框、菜单和工具栏都是用宏语言写出来的,下面也是调用其它的宏,所以你也可以用宏来操作。这就叫简单、效率两不误。

 

 

 

Searching...

Firefox上的窗口分割扩展(以及Vimperator/Keysnail插件脚本)

如果你用过Vim,就知道我们可以用:split 或者 :vsplit 把窗口分割成两个,每个窗口编辑/查看不同的文件,继续使用:split / :vsplit 可以继续分割。有时候需要对照着看一些内容的时候,这样的风格很方便(考虑到现在很多程序都抛弃了以前的MDI风格,而是采用了多标签页的风格,要参照一下另外一个标签页当中的内容,来回切换的话相当麻烦)。

Emacs 也有这样的功能,分别是用C-x 2和C-x 3来分割。

其实Firefox上也有一个扩展可以实现这样的功能:Split Browser (后来改名叫做Fox Splitter了,不过改名后好像没发过新版本),虽然最新的版本是20091105,但在新版本的Firefox上面仍然可以安装(该扩展标明是适用于3.0 - 3.7a1。Firefox 4上面我也没有测试过,但有另外一个叫做Tile Tabs的类似扩展声明是支持fx4的)。



如果你在用Keysnail,那么可以这部分代码拷贝到你的~/.keysnail.js里面去,然后你就可以象Emacs 那样来操作分割窗口了:(注意,按Emacs/Vim的术语,这里每个分割出来的部分都叫做window,跟Firefox 原本的Window不要混淆了——那个东西在Emacs里面叫做frame, 在Vim中好像没有对应的术语。而Emacs中又没有标签页的概念):

  • C-x 0   关闭当前窗口(delete-window)
  • C-x 1   关闭其它窗口(delete-other-window),即取消当前标签页内所有分割
  • C-x 2   纵向分割(split-window-vertically)
  • C-x 3   横向分割(split-window-horizontally)
  • C-x o   激活下一个窗口(other-window)
  • C-x k   关闭当前窗口或者标签页

如果你在用Vimperator,那么插件在这里[splitBrowser.js] ,下载后放到~/vimperator/plugin/目录。除了支持:split/:vsplit,它也支持<C-w><C-w>, <C-w><C-v>等快捷键。(Pentadactyl上没测试过,考虑到现在它跟Vimperator越来越不兼容,可能需要对脚本修改一下,这既然是爱折腾的vim粉丝,应该难不倒诸位:-)

另: FoxSpliter的源代码在这里: https://github.com/piroor/foxsplitter 有兴趣的可以下载一下最新的代码


Technorati 标签: , , ,

Pentadactyl

 

Searching...

介绍一下MicroEmacs

看见vmlinz在玩JED((轻量级Emacs--JED介绍 - vmlinz's Blog),于是也装了一个玩玩,但我对它的GUI版本很不满意。该文章里面又说到了其它的轻量级编辑器,里面有个叫做MicroEmacs的。想起以前看见网上说Linus用的就是这个叫做MicroEmacs的编辑器(据说他还说了GNU Emacs is just evil,但我没找到确切的出处,只在EmacsWiki上看到过[link])。好,去找来玩玩。

但在Google上一搜,居然没有看到一个象MicroEmacs官网的网址,中文的说明也很少。在Wikipedia [link]和EmacsWiki [link]上看了一下介绍才明白,这个东西诞生在80年代,因为体积不大,互联网又没有出现,所以大家就拷来拷去,改出了好多个分支:

  1. 原始作者Daniel Lawrence 自己的版本(不过最早的作者是Dave Conroy),,最新版本是09年2月出的5.00,但提供了源代码和Windows版本,似乎用的人不多。网上其它地方可以找到3.12和4.0版本,这两个版本以前使用比较广泛;
  2. uEmacs/PK,作者是Petri H. Kutvonen,基于Lawrence原版的3.9e分支出来的。最后版本是4.0.15, 各个kernel.org镜像上均可以下载到源代码[uemacs]
  3. Linus他们在kernel.org上维护的另一个分支(git仓库链接),基于uEmacs/PK,是在P.K.停止开发后,Linus接手的(这也是为什么kernel.org上有uemacs/pk的下载连接);
  4. 最受欢迎、最有名(似乎功能也最强的)的一个版本是Jasspa,它在1987年就从原版MicroEmacs 3.8中分支出来,增强了特别多,下面将会详细介绍其特性;
  5. 我十年前读书的时候淘到一张C++ User Group的光盘,里面就提供了一个Windows 3.1 GUI的port,似乎改动也不小(要知道除了jasspa,其它版本大多只有终端版本)。刚才在网上搜了半天,找到说是Pierre Perret 基于Lawrence的MicroEmacs 4.0做的,不过其所在网址已经打不开了(已经排除了G.F.W的因素);
  6. 还有其它一些分支和变体,比如快捷键跟GNU Emacs更接近的mg(原名MicroGNUEmacs。它甚至有个WinCE版本),克隆vi 的vileersatz emacsConroy MicroEmacs等等。前面说的JED跟MicroEmacs也有些渊源。。

为什么这么有名的东西,在Linux里面没有见到过呢?因为原始作者Daniel Lawrence是个激进的反GPL分子,多次明确表示不同意将这个东西变成自由软件(free software)——虽然它一直是开放源码(open source)的。一直到了2002年,Lawrence才松口。至于02年之后为什么还没进入各个distribution,我就搞不清楚了(估计是没有吸引力不够?)不过FreeBSD里面是收录了它的。

本来是打算主要介绍Jasspa的主要特性和亮点功能的,没想到前面这版本的考证工作费了我不少时间(而且各处的说法还有些相互矛盾的,比如),所以Jasspa下次再讲吧。

总体说一下MicroEmacs:。它的主要特性有:

  • 按键的行为可配置
  • 多窗口编辑
  • “菜单”可配置
  • 可通过宏语言来扩展
  • 轻量级(加上配置都不到1M)

缺点:虽然有Linus这样的牛人在顶这个东东,但它跟“现代”编辑器的差异还真的很大,大多只有Console版本(除了我上面说的CUG的那个Windows GUI port和Jasspa之外),不支持语法高亮,甚至C-x C-f 都不一定能提供补全,Shell集成也。

当然基本的多窗口编辑、shell集成、可通过宏进行扩展这些基本思想还是有的,你拿它来替代nano还是绰绰有余。——但Jasspa 就不一样了,它完全可以用“麻雀虽小、五脏俱全”来形容,可说是功能齐备、文档详尽、配置方便、扩展容易。这个下次再详细讲吧。

microemacs  mg on wince


对了,还有一点忘了说了,这个MicroEmacs有个别名叫uemacs,因为μ跟micro是差不多的意思。有不少地方都是直接用uemacs这个名字。

如果你想试试,Windows版本可到Daniel Lawrence的主页下载,那里有最新的5.00版本(好像这个网站刚被G-F-W屏蔽了,你可以下载我这里的副本uemacs5.zip(windows console版本和源代码) me404gui.zip(windows gui版本));Linux和其它平台的版本可以到这里下载 [mtxia.com],注意这里虽然也提供了5.00版本(仅Windows版本和源代码),但Windows版本不能正常运行。 下载后注意将exe和那些.cmd宏文件放在一起。

参考:

Technorati 标签: , ,

 

 

 

 

 

 

mtxia.com

 

Searching...

[emacs] auto-complete上使用scite的api文件进行补全

Scite编辑器提供补全功能,备选的函数都由一个外部文件(内容很简单,就是每行一个函数原型)提供,这个文件它称为API文件,每种编程语言可配置一个。

这个机制对于那些非对象化的编程语言来说(比如PHP, Perl, AutoHotKey), 是相当简单方便的,自己可以用一些工具来生成这个文件。即使是对象化语言,有时也很有用,比如Java里面import的时候可以用这种机制来补全包名,或者用全路径方式调用静态函数(比如Python里面os.path.exist())。

以前常用Vim,就怀念这种简单的补全机制。后来用Emacs,也没有看到类似的,一次还发现一个增强的php-mode居然是采用硬编码的方法来提供备选函数的。

于是就想自己写一个,但自己玩Emacs没多久,编码能力不够,一直到了年底,才晃晃悠悠地把这个东西写出来了。这算是我正儿八经写的第一个Emacs包(以前都是在自己的~/.emacs里面折腾各种配置)。

下载: [[file:auto-complete-scite-api.el]] 


 

要使用这个包,需要先安装配置好Auto Complete,它界面漂亮、操作方便、配置简单,自身提供了多种source来进行补全(比如文件名、elisp符号名、Emacs包名、其它buffer中的单词、Semantic、Eclipse(eclim)等),可以根据自己需要来配置每种编程语言需要那些sources。具体配置和使用说明可参见Emacs中文网上的这篇 Emacs补全利器: auto-complete+gccsense (注意: ahei的这篇文章 用auto-complete实现自动补全 是针对老版本auto-complete的(<=0.3),v1.0以上版本变动较大,配置也简单得多了)。

 

使用方法:

  • API文件需要放到/usr/share/scite/api/或者~/.scite/api/两个目录下。如果想放其它目录,可在~/.emacs中设置ac-scite-api-directories。除了SciTE自带的哪些API文件,你还可以到scite-files项目里去找其它人提供的(或者生成工具)。注意每种major-mode会根据如下两种规则读取对应的API文件
    1. major-mode-name - "-mode" + ".api",比如php-mode就会去找php.api
    2. 文件扩展名+.api,比如init.el就会去找el.api和
    3. 如果两个机制都能读取到文件,都会加载(不过目前没处理重复项目),比如编辑functions.pyw文件时会加载python.api 和pyw.api。你可以用这个机制来将区分系统配置和个人配置。
  • 在Emacs中配置:

如果打算在所有使用auto-complete的地方使用这个(推荐),就把ac-source-scite-api添加到ac-sources缺省值里去

(load "auto-complete-config") 
(if (load "auto-complete-scite-api" t)
    (setq-default ac-sources (cons 'ac-source-scite-api ac-sources)))

如果只想在某些模式中使用,还是操作ac-sources(因为ac-sources是每个buffer独立的),不过我提供了一个ac-enable-scite-api-source函数

(if (load "auto-complete-scite-api" t)
     (progn
        (add-hook 'php-mode-hook 'ac-enable-scite-api-source)
        (add-hook 'xahk-mode-hook 'ac-enable-scite-api-source))) 

这个ac-enable-scite-api-source可以交互式调用,即在需要的时候即时打开,M-x ac-enable-scite-api-source。

 

自动补全的效果图 (后面带A的即是由本模块提供的候选项),黄色部分是用Auto Complete机制提供的当前候选项的说明(如果API文件里面提供了的话)

 

作为一个顺带的功能,你可以在任何函数上按M-F1来查看该函数的说明(显示在echo area)——如果API文件中提供了的话。

 

补充说明:

  • 在GNU Emacs 23.2/24.0.50和Auto Complete 1.2/1.3上验证过可用。
  • 如果API文件过大,第一次的性能比较慢,最好文件不要超过500k, 建议删除一些不常用的函数(比如我机器上工具生成的python.api里面包含了很多pyqt的包和函数,而我很少用到)

Technorati 标签: , ,

 

 

 

Debian 6.0 squeeze发布啦 (以及几个有意思的东西)

也许你已经通过各大技术新闻网站知道了,Debian 6.0 (squeeze)在2月6号发布了Debian网站也在同一天换了新面貌

http://deb.li/squeeze

其实对于我这样的桌面用户(用的是Debian testing)而言,新的稳定版的发布意味着testing冻结期结束,Debian又可以向前冲了: 解冻的第二天,就有451个包上传到了ftp-master等待合入仓库(数据来源) ,而且跨平台的AppInstaller(AppStream?) (中文介绍, Debian News里面的说明),wayland, multiarch, 移除qt3/kde3... 很多计划也都摆上了桌面

不过我在现在的testing/unstable里面还是没看见iceweasel-3.6,刚又查了一下,它刚出现在experimental里 :-(

如果只是跟风说一下新版本发布了,也没有必要俺来写一篇博文,所以还是给大家添加一点有用/有趣的内容吧:

[debian] backport-sloppy

2010.06 Maldives (part 2)

 (不使用stable的用户不用看了)

我在公司的办公电脑上装了个colinux,里面跑的是debian stable(目前最新的预装的disk image是5.0 lenny)。为了多一些更新,也加上了lenny-backports这个仓库。

但backports有个问题,那就是只会从往回移植只会从testing到stable,而一旦下一个版本发布testing变为了stable(原来的stable变为oldstable),针对oldstable的backports就停止更新了(除非是stable有了小版本号的更新(比如刚刚5.0.7升级为5.0.8),或者是安全不定,但这都需要临时性的手工批准操作)。所以你只能从lenny + lenny-backports升级到squeeze,不能升级到 squeeze + squeeze-backports。

有点绕糊涂了是吧?简单地说就是不会发生从当前testing移植到oldstable的情况,lenny用户只能在squeeze发布前得到一些testing中的更新,不能在squeeze发布后再得到testing中的更新(好像还是比较绕,没看明白的自己看英文吧)。

为了解决这个问题,Debian提供了backports-sloppy这个新的仓库。

对于lenny用户,lenny-backports-sloppy已经启动了(Feb 8, 2011):


deb http://backports.debian.org/debian-backports lenny-backports main
deb http://backports.debian.org/debian-backports lenny-backports-sloppy main

对于squeeze用户,目前squeeze-backports都刚启动,暂不用考虑squeeze-backports-sloppy。

参考:


 

 

 

Debian testing上加装Mint的软件包,系统变身为LMDE

我在上一篇文章《选LinuxMint Debian Linux作为俺的Linux了》里面提到了:LMDE跟Debian testing是完全兼容的,只不过是在debian testing上面多了一些包,所以将debian testing "变成" LMDE就是一个相当简单的事情了:装上LMDE那些包就行了。

具体步骤如下:

  1. echo "deb http://packages.linuxmint.com/ debian main upstream import"  > /etc/apt/sources.list.d/lmde.list(或者添加到/etc/apt/sources.list里面也可)
  2. apt-get update
  3. apt-get install linuxmint-keyring
  4. apt-get install mint-meta-debian

这就搞定啦!

(以上步骤翻译自这里: http://forums.linuxmint.com/viewtopic.php?f=141&t=57405 )

当然,你也可以到 http://packages.linuxmint.com/list.php?release=Debian 上看看有哪些包,只安装自己感兴趣的(比如主题、驱动、非DFSG软件)。

另外,LinuxMint 还提供了一个"软件管理器",比syntapic界面简单,还多了个LinuxMint社区的评分功能,可以让你轻松在同类软件中选择最受欢迎的)。通过安装mintinstall包即可得到这个工具。


不过你不安装mintinstall 这个工具也行,可以直接用浏览器到LinutMint 社区的软件中心 Software Portal 去浏览/查看评分,并可点击网页上的Install按钮直接安装(前提是你得安装apturl这个包,否则浏览器可不识别 apt://opera 这样的链接)

Technorati 标签: , ,

 
 

两个有意思的玩意儿: linuxlogo, cowsay

linuxlogo:  Color ANSI System Logo

A Color ANSI Logo with some system information that can be displayed at system boot time or, with some local configuration, at the login prompt. Four different Logos are available:

 * Debian Swirl(default)
 * Debian Banner
 * Tux Classic and Banner

The Classic and Banner Logos are based on Larry Ewing's Penguin. Monochrome ASCII versions of all the logos are included.





我修改了一下Debian提供的/etc/init.d/linuxlogo,直接用linuxlogo的输出作为了/etc/issue.net (ANSI彩色版本)和/etc/issue (无ANSI控制字符版本)的头部。

cowsay: A configurable talking cow

Cowsay (or cowthink) will turn text into happy ASCII cows, with speech (or thought) balloons. If you don't like cows, ASCII art is available to replace it with some other creatures (Tux, the BSD daemon, dragons, and a plethora of animals, from a turkey to an elephant in a snake).

homepage: http://www.nog.net/~tony/warez/cowsay.shtml

这次安装LinuxMint以后在登录后就会看到一个牛或者企鹅吐出一段随机的话,对于这些小玩意儿我有些兴趣,于是在/etc/profile等文件里面找了半天才知道是cowsay的效果:LinuxMint封装了一个cowsay+fortune的脚本,叫做mint-fortune,在mintsystem包里面提供。其实自己想要类似的也容易(不过LinuxMint还简单地做了一下随机显示tux/moose还是别的什么,具体如何控制可自己看manpage): 

   $ cowsay `fortune`

对于Debian系统管理员,不妨安装一个fortunes-debian-hints, 在~/.profile里面添加如下一行:

   /usr/games/fortuen debian-hints | /usr/games/cowthink

这样每次登录都会有一条关于Debian系统管理的Tips了。

 

 

Technorati 标签: , ,