Wednesday, 28 January 2009
Vim和Shell/GNU Screen搭配的困扰
一直使用Vim与GNU Screen搭配编程,有几个原因:
1. 命令行上的Vim和GVim在功能上几乎没有区别(某些插件是只能用GVim,不过我没有);
2. GNU Screen在重启X时不会影响其中程序的运行;
3. 一直用命令行的话,我可以随时关注命令行上其他程序的情况,例如mutt有无新的邮件,irssi有无新的消息;
但一直有一个问题困扰着我,就是命令行下的Vim屏幕滚动非常缓慢,按住j不动一直到屏幕上最后一行,然后松手,光标会继续往下走十几行甚至几十行,这让我很不爽。
今天作了一个实验,得出以下结果:
1. GNU Screen打开与否和这个现象无关;
2. 此现象只有在分裂Vim窗口时才会出现;
3. GVim没有这个现象;
在网上搜索了一番,暂时没有找到解决的办法。因为GVim没有这个问题,所以暂时用GVim代替。GVim的问题在于离开命令行我就无法得知某些命令行程序的信息。如果能找到解决办法就好了
Thursday, 22 January 2009
irssi提醒脚本
喜欢irssi这个命令行上的IRC,每天都会打开上#ppmm, #ubuntu-cn, #java, #python等频道~~
命令行工具的一个缺陷在于,提醒功能不完善。虽然用screen,在状态栏上也有提醒,不过并不是任何时候都会盯着命令行的,所以还得有一个图形界面的提醒。
幸好irssi提供了扩展脚本这个功能,所以能够用Perl对其进行扩展。在网上搜索一番之后,发现有人写过提醒脚本,调用gtk-dialog-info这个命令行在屏幕右下角生成提醒窗口。但原始脚本并不是很适合我,所以作了一番修改之后,成了下面这样:
## ## Put me in ~/.irssi/scripts, and then execute the following in irssi: ## ## /load perl ## /script load notify ## use strict; use Irssi; use vars qw($VERSION %IRSSI); $VERSION = "0.01"; %IRSSI = ( authors => 'Luke Macken', contact => 'lewk@csh.rit.edu', name => 'notify.pl' ); sub notify { my ($server, $msg, $nick, $address, $target) = @_; return if (!($msg =~ /anticlockwise/)); system("notify-send -i gtk-dialog-info -t 5000 '$nick' '$msg'"); } Irssi::signal_add('message public', 'notify');原始脚本采用的irssi信号是print text,虽然这个信号能够检测个人信息,却无法得到消息的内容(所谓的text是指的系统消息,却不是聊天消息)。所以就改成了message public,然后message public又没有一个通用的检测是否个人消息的方法,所以就只能用正则表达式来判断了,有些傻,不过管用。
Wednesday, 21 January 2009
Python Google Translate调用脚本
前一阵子一直想找一个命令行上的翻译程序,就自己写了一个Python程序:
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib import urllib2 import sys import jsonlib from optparse import OptionParser URL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s%%7C%s" parser = OptionParser() parser.add_option("-f", "--from", dest="lang1", help="The language code to translate from", default="en") parser.add_option("-t", "--to", dest="lang2", help="The language code to translate to", default="zh") (options, args) = parser.parse_args() if len(args) < 1: print "Usage: python translate.py <translate text>" sys.exit(0) text = ' '.join(args) print "Translating %s from %s to %s" % (text, options.lang1, options.lang2) query = (URL % (urllib.quote(text), options.lang1, options.lang2)) req = urllib2.Request(query) req.add_header("Referer", "http://www.my-ajax-site.com") r = urllib2.urlopen(req) data = r.read() obj = jsonlib.read(data) if obj['responseStatus'] != 200L: print "Error: %s" % obj['responseDetails'] else: print "Translated text: %s" % obj['responseData']['translatedText']
Subscribe to:
Posts (Atom)