search
searchE
Quickwpthemes se Szh rsearchh Quickwpthemes Szh u Quickwpthemes sia12 Quickwpthemes Au Quickwpthemes h Szh r Family h Quickwpthemes p Szh 2 Quickwpthemes Ssearche Szh % Family 0 Family D Szh %C Family %D6%searchE Family B Szh %search9 Family C Quickwpthemes %C Quickwpthemes %searchE Szh D Quickwpthemes %C2% Szh B
D4 Family A Szh % Family 4aB4%C%search8c Quickwpthemes w Szh tsearchesearche Quickwpthemes Szh searchzh Quickwpthemes %ssearcha
c7 searchzh Szh %searchE%search6 Szh 9search% Quickwpthemes 0% Quickwpthemes 7 Family Asearch% Quickwpthemes 1 Family E0%1E Szh 9 Szh %E1% Family 8
9 Family %E
%8 Family % Family AsearchE Quickwpthemes %8 Family %A Szh % Quickwpthemes 5search9 Szh % Quickwpthemes 7
Family Szh search Family Szh Szh Quickwpthemes Szh 
Family Szh 1search Quickwpthemes searchsearch Quickwpthemes search Szh 火狐中使用XPath的示例在这里。这里是MDC文档。
2011年8月12日更新:加入了维基词典的支持。
2011年11月7日更新:加入对 HTTPS 的支持。
月光都说了,的大多数页面还是白色顶栏比较合适,黑的看着实在是不爽。所以还是改回来好了:
// ==UserScript==
// @name White topbar
// @namespace
// @description bring back 's white topbar
// @include / @include / ==/UserScript==
var css = "#gbx3, #gbx4 {} #gbz .gbzt, #gbz .gbgt, #gbg .gbgt, .gbts, .gbz0l {} .gbzt-hvr, .gbzt:focus, .gbgt-hvr, .gbgt:focus {} .gbz0l .gbtb2 {} #gbi5 {}";
if (typeof GM_addStyle != "undefined") {} else if (typeof PRO_addStyle != "undefined") {} else if (typeof addStyle != "undefined") {} else {}
}
点击安装。
Zsh 的模块真多呀,最初文档时知道有 ztcp 模块时已惊叹,最近又在邮件列表看到竟然有 zpty 模块,解决了困扰我良久的一个小问题。
会往终端输出彩色字符的程序都知道,如果输出的目的地不是终端,通常彩色转义字符是不需要的,比如重定向到文件,或者通过管道传给 grep 之类的程序。所以不少程序会有个--color=WHEN选项,你可以指定是程序自己决定,还是总是要彩色或者不要彩色。Linux 总是善于提供一堆选项来满足不同的需要。可是,除此之外,ls 还会根据输出目的地是不是终端来确定要不要一行显示多个文件名。更囧的是,只有办法强制 ls 一行显示一个文件名,却没有选项强制它把管道当成终端进行多栏显示。结果就是,当文件比较多时,ls | less会一行一个文件名,即使右边还有大把的空间。强制显示彩色也需要--color=always这么长的参数(而 tree 只需要-C就可以了)。
很早就想写个程序利用专门的伪终端来给 ls 的彩色多栏输出加上翻页器了。现在我终于把它实现了,而且简单很多:
ptyless () {} # ptyless 是这个 pty 的名字
zpty -r ptyless > /tmp/ptyless.$$ # 读取数据到临时文件。不知为什么直接输出到管道不行
less /tmp/ptyless.$$
rm -f /tmp/ptyless.$$
zpty -d ptyless # 删除已完成的 pty
}
另外,这个用于 yaourt 查找时也是不错的 ;-)
火狐4正式版还没出来之前,我就很担心。一是因为好些扩展会用不了了,二是新的界面我不看好。现在已经到火狐5了。我觉得比3.6版本更好的地方却只有三点——速度更快、对标准的支持更好,以及标签页分组功能。
换火狐4,最主要的原因是换 Arch 了,源里面只有最新版。换到火狐5倒没什么。用户可见的改变可能只有标签栏和Chrome一样,在关闭后鼠标离开标签栏才会重新调整大小以方便连续关闭多个标签页。插件方面,装了个Add-on Compatibility Reporter,除了 Update Scanner 不能加新的页面外,尚未发现不能用的。
但是,看到这篇文章中写到火狐在Nightly7.0中去掉了地址栏的code>显示。即使复制URL时会加上,但这样使得把 http 改成 https 或者 ftp 都更麻烦了,而且,它从外观上破坏了 URI 的一致性。我想火狐是不会提供选项的,就像在前一篇文章里我说过火狐4的两个问题一样。只能靠插件了。
现在的火狐,一点点被Opera和Chrome同化,原有的我喜欢的特性一个个地需要依赖插件了。等到它和其它浏览器完全一样的时候,我不知道我还有什么理由去继续使用它了。插件?别提了,现在更新的速度太快,插件会一个接一个的不兼容,继续下去的话,最终连Chrome都不如。火狐已经没什么可期待的了。我现在只指望uzbl能够在我需要时取代火狐。
Ubuntu极力想推广自己,最后我离开了它。火狐在Chrome出现后推广的力度越来越强劲,看来我最终也只能离开它了。我注定是小众。不知道这是幸还是不幸。
To be popular or to be outstanding, it is a question.
2011年10月7日更新:关于地址栏的 URL,情况比预料的好一些,Mozilla 为其保留了一个选项。详见文章调教火狐地址栏。
换Arch后,我把首选字体改成了这样:
<match target="pattern"> <test qual="any" name="family"> <string>monospace</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>DejaVu Sans Mono</string> <string>文泉驿等宽正黑</string> </edit> </match> <match target="pattern"> <test qual="any" name="family"> <string>serif</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>DejaVu Serif</string> <string>文泉驿正黑</string> </edit> </match> <match target="pattern"> <test qual="any" name="family"> <string>sans-serif</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>DejaVu Sans</string> <string>文泉驿正黑</string> </edit> </match>
也就是说,DejaVu 的字体优先于文泉驿的,因为我觉得 DejaVu 的英文字体比文泉驿的好看。这一般没什么问题,除了某些PDF文件,不知道怎么搞的,不嵌入字体也就算了,字体名也奇奇怪怪弄得 evince 不认识。因为太奇怪,并且 evince 显示得更奇怪,我也不好像 KaiTi_GB2312→KaiTi 这样做字体替换了(其实应该用别名的,但当时不会)。想到一个很简单的办法是,让中文字体拥有更高的优先级。实践证明这样做有效。但是,我不希望为了几个乱码的PDF而更改我的全局字体配置。于是,基于 LD_PRELOAD 的解决方案出来了。
LD_PRELOAD 是 Linux 动态链接器认识的一个环境变量(不知道其他系统是否支持)。我看的资料是这个Fun with LD_PRELOAD。原理很简单,使用自己的函数覆盖掉其它动态链接库的。因为 libc 对系统调用都有一个 wrapper,所以正常的程序都会“被骗”的。proxychains 这个让其它程序使用 socks/https 代理的程序的原理就是这个。
我想对指定程序(evince)重定向~/.fonts.conf的读取,所以准备覆盖open这个系统调用。按照从那个PDF的链接中找到的源码的方式,写出了最初的代码。结果用cat测试就失败了——原来还有个 manpage 没说的open64。继续测试,又发现对vi写文件时不起作用。于是加上了第三个要覆盖的函数creat。
程序写好后,觉得光重定向一个文件的读写不好玩,稍稍扩展一下,支持配置就强大了。本来想学那个PDF提到的netjail一样用环境变量的。但又觉得不好设计,而且 C 语言真的写起来太麻烦了。于是想到了用 Lua 来配置。后来还想到用 Python 的,但很可惜,段错误了。
#include<stdarg.h>
#include<dlfcn.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
#include<unistd.h>
#include<lua.h>
#include<lualib.h>
#include<lauxlib.h>
static int lib_initialized = 0;
static int (*orig_open)(const char*, int, mode_t) = 0;
static int (*orig_open64)(const char*, int, mode_t) = 0;
static int (*orig_creat)(const char*, mode_t) = 0;
static lua_State *L = NULL;
void lib_init();
void die(char *fmt, ...) {}
static char* redirect(const char* file){}else{}
return (char*)new;
}
int open(const char* file, int flags, mode_t mode) {}
int open64(const char* file, int flags, mode_t mode) {}
int creat(const char* file, mode_t mode) {}
void lib_init() {}
lua_getglobal(L, "redirect");
if(!lua_isfunction(L,-1)){}
lua_pop(L, 1);
lib_initialized = 1;
}
Makefile 如下:
CC=gcc CFLAGS=-g -Wall -I/usr/include/lua5.1 LDFLAGS=-ldl -llua .PHONY: all clean all: openredir.so openredir.so: openredir.o gcc -shared $< -o $@ $(LDFLAGS) clean: -rm *.o
下面这个是配置文件,要放到~/.openredir.lua才行。
redirect = function(path)
-- TODO use absolute and normalized path
io.stderr:write('打开文件 ' .. path .. '\n')
if path == '/' then
return '/etc/issue.tty1'
elseif path == '/home/lilydjwg/.fonts.conf' then
return '/home/lilydjwg/tmpfs/fonts.conf'
else
return path
end
end
示例:
>>> LD_PRELOAD=./openredir.so cat / 打开文件 / Arch Linux \r (\n) (\l)
不过使用时在LD_PRELOAD中最好使用绝对路径,因为某些程序会chdir()到其它地方去的。
最后吐槽下,Lua 里把路径转成 normalize 过的绝对路径都没有现成的函数,囧。。。