概述

Pentadactyl 是由 Vimperator 项目最活跃的开发者 Kris Maglione、Doug Kearns、Martin Stubenschrott维护的针对 Firefox4的一个分支。及由pentadactyl插件,firefox可以采用vim的操作方式进行网页浏览。

由于dactyl不符合火狐的插件规范,所以官方插件中心收录的dactyl版本很低,已经不支持新版本,要从项目网站上下载最新版。

使用

Hint模式

在我看来,dactyl最大的作用就是减少鼠标操作,利用键盘与浏览器进行交互。那么该如何与网页上的可点击元素交互呢?pentadactyl里采用的方案是hints f or F。进入hints模式后,网页上的可点击元素都会被高亮,并用数字或者字母编号。这时候输入对应编号的字符就可以过滤高亮的元素,当能够唯一定位一个元素时,即执行点击动作。

通过配置项hintkeys可以修改编号时使用的字符,我个人习惯用字母编号(尽管这样就不方便使用Follow Hint了)

set hintkeys='asdfjklgheriop'

扩展Hint模式

上面两个模式会高亮页面上所有的可点击元素,而且定位元素后直接触发点击动作。使用扩展hint模式,可以更灵活地控制高亮元素的范围,比如只高亮超链、只高亮图片等;可以控制定位元素后的触发动作,比如复制链接地址、另存图片等。具体请查看帮助 :h ;

状态栏

状态栏会显示如下信息:

url [+-??]		[n/m]100% plugins
  • url 为当前页面的url地址
    • 此页面包含后退历史
    • 此页面包含前进历史
  • ? 代表此页面已存为书签
  • 其他字符代表QuickMark
  • n/m 当前标签索引/总标签数
  • 100% 当前位置在页面纵向上的百分比

编译

#解压缩
unzip dactyl-master.zip
#编译pentadactyl
make -C pentadactyl xpi 
#downloads/dactyl-xxx.xpi为编译完的文件

安装

  1. 打开插件管理界面
  2. 点击上方的工具按钮,选择从文件安装插件并安装dactyl

配置

dactyl也存在类似vim的配置方式,在~/.pentadactylrc文件中进行配置.而~/.pentadactyl/目录可以存放各种脚本

UI选项(guioptions)

通过该配置项可以控制firefox的GUI显示,可以简写成go,其取值是一个字符列表,每个字符对应一个可控GUI元素,包含在go中的会显示出来。通过命令操作:

set go+=x      "让x对应的GUI元素显示出来
set go-=x      "让x对应的GUI元素不显示
set go=abc     "只显示a,b,c对应的GUI元素

参见.pentadactylrc文件

firefox行为配置

及由dactyl的 set语法,可以对firefox about:config里的设置进行修改
例如:

set! xxx=hello

前边的探号是为了强行覆盖设置,这样的效果在变量已经被定义的时候不会弹出警告信息
同时由于本身配置文件是遵循vim语法的,所以可以辅助vim script语法,做一些逻辑判断

if config.OS.isWindows
set! font.name.monospace.x-western="Monaco"
end

默认搜索引擎设置

另外发现dactyl可以修改自身插件的默认搜索引擎设置

set defsearch=google
set suggestengines=google

有意思的是,在dactyl命令行调用默认搜索引擎或者s调用的时候,会自动补全google关键字的提示.
由于国内某些不可抗拒的原因,无法使用google进行搜索,可以使用百度作为默认搜索引擎,同样可以达到智能补全的效果

  1. dialog searchengines打开搜索引擎设置窗口,点击"更多搜索引擎"按钮
  2. 访问firefox的搜索引擎添加页面,找到需要的搜索引擎添加就可以了
  3. 为搜索引擎定义一个关键字
    例如:
    baidu -> bd
    google -> gg
    方便后边调用其他搜索引擎
  4. 修改配置文件
set defsearch=bd
set suggestenginges=bd

这里可以用别名,也可以用搜索引擎列表上面的默认名称.不过取个别名,可以在dactyl里直接快速打开,例如现在默认引擎是baidu,但是想用google搜个内容
o gg xxxx

  • o 激活命令行并输入:open命令
  • gg google 搜索引擎
    后边输入内容还会自动调用google suggest

插件

插件存放

插件应该存放在名为plugins的文件夹下
pentadactyl会从配置项runtimepath定义的文件夹中查找plugins子文件夹
可以有多个plugins文件夹
runtimepath默认值是 $PENTADACTYL_RUNTIME,如果没设置,windows系统下则是~/pentadactyl,其他系统下是~/.pentadactyl,所以在windows下,默认情况插件应该放在~/pentadactyl/plugins文件夹里
我准备把plugins放到profile文件夹下,因此需要将profile加到runtimepath中,由于已在启动参数设置$HOME为profile,所以

set runtimepath+=$HOME

插件加载

根据上述查找方式找到的所有plugins文件夹里的脚本文件会被加载
脚本文件通过配置项loadplugins来控制识别,默认是以.js和.penta结尾的文件
设置配置项noloadplugins可以关闭所有脚本的加载,但是最新每夜版(hg6126)无此参数,不过可以通过设置loadplugins达到同样的目的
set loadplugins=’’
设置如下启动参数(++noplugin或者+u=NONE),同样可以关闭脚本加载。具体请查看帮助
:h startup-options

插件下载

dactyl项目网站有收集一些插件,可以 :h,底部有项目网站链接

dict.js 翻译插件
https://github.com/grassofhust/dict.js

夜间模式
https://code.google.com/p/dactyl/issues/detail?id=1013

配色方案

pentadactyl项目网站上有几个配色方案,其中感觉vimium,kolor,ubuntu三个配色方案不错。

  • vimium 只是让基本配色更“圆润”,另外修改了hint标记样式。
  • kolor 典型的深色主题
  • ubuntu 仿照ubuntu的配色,大字体效果

三个配色或多或少都存在一些瑕疵,网站安全配色都忽略了一部分。

常用命令

命令 描述
:mkp 生成配置文件
:mkp! 强制保存更改的配置文件 此操作会覆盖现有文件
:rehash 重载插件 好像有bug 补全菜单失效
:restart 重启firefox
:downloads 显示下载列表
:bmarks 书签列表
:!command 执行命令
:source path 加载配置
:colorscheme name 更换配色方案
:scrptnames 查看当前生效的配置文件路径
:w 下载文件
:tabo(nly) 只保留当前标签,关闭其他所有标签
:undoa(ll) 恢复closed标签列表中的所有标签
:pin 隐藏当前标签title只保留logo
:unpin 恢复当前标签title
:tabm(ove)[[!]+/-] count 移动标签顺序 tabm! 移动到边界时会循环(只在+/-方式中有效)
u 重新打开上一个关闭的标签
a 添加到书签
d 关闭当前标签,选中右侧标签 (:tabc) [count]d 连续关闭count个
:tabc keywords 关闭匹配keywords的主机名 :tabc! keywords 同时匹配url和title
D 关闭当前标签,选中左侧标签
T 复制当前标签 (:tabdu)
t 新标签打开
o 在当前标签打开
w 在新窗口打开
t,o,w 支持打开单个URL,多个URLs(URL之间的分隔符可以通过配置项urlseparator设置),
书签(关键字),指定搜索引擎搜索,用默认搜索引擎搜索(默认引擎通过配置项defsearch设置)
另外打开命令还提供了非常强大的completion(细节请查阅配置项complete和autocomplete)
s 用默认搜索引擎搜索
i 光标定位模式
iv 选择模式
zo 缩小
zm 放大
zz 恢复默认缩小
gu 回上级url目录
gh 回firefox首页 about:home
Ctrl+n(ext) 下一个标签
Ctrl+p(revious) 上一个标签
gt 下一个标签
gT 上一个标签
g0 第一个标签
g^ 第一个标签
g$ 最后一个标签
Ctrl+^ 切换到上次选的标签,连续使用可以实现在两个标签间切换
[count]b 切换到第[count]个标签
p 在当前标签打开剪贴板的内容 如果是url则打开url,如果不是url则调用默认搜索引擎搜索
P 在新标签打开剪贴板的内容
ctrl+b 向上滚一屏
ctrl+f 向下滚一屏
ctrl+u 向上滚半屏
ctrl+d 向下滚半屏
j k h l 页面移动
gg 顶部
G 底部
count% 按百分比移动
^ 屏幕左移到头 0 功能相同
$ 屏幕右移到头
/ 正向搜索
? 反向搜索
n 下一个匹配项
N 上一个匹配项
* 向下查找当前光标处单词
# 向上查找当前光标处单词
查看当前标签基本信息
g 查看当前标签详细信息
gf 查看页面源码
gF 用外部编辑器查看页面源码
y 复制当前焦点hint的链接
B 缓冲区列表 (:buffers)
app tab和一般的tab会分开显示。
带%标记的对应当前tab
带#标记的对应上一次选择的tab,可以通过<C-^>跳转过去
buffer/buffers keywords 匹配keywords 包括url和title
b 显示缓冲区列表,可以利用tab切换
f hint模式
F hint模式 在新标签打开
; 扩展hint模式 :h ;
;i 查看图片
;y 复制链接地址
;Y 复制链接文字
;; 定位焦点到hint
firefox gui命令
:emenu name 打开指定菜单项
:dialog name 打开对话框
:toolbarshow name 显示name工具栏
:toolbarhide name 隐藏name工具栏
:toolbartoggle name 切换隐藏/显示name工具栏

相关链接

代码托管地址
项目首页
火狐插件中心 dactyl首页

总结

pentadactyl作为众多类vim操作插件,其功能强大真是无与伦比.其中,翻页/搜索/插件更是把pentadactyl的功能推向极至.
然而pentadactyl由于内部实现紧紧依赖firefox的XUL插件API,每当firefox升级,必然造成pentadactyl兼容性出现问题,pentadactyl的开发热度又相当底下,所以导致插件的正确使用时长遇到问题.
在最近的firefox更新到57的时候,mozilla彻底抛弃了XUL插件API,拥抱WebExtension,这种插件模式是google在chrome使用的,对多进程和插件安全性有更好的优化,然而就我知道的问题,就是插件只能在页面加载完成后才能使用,通俗的说,如果刚打开浏览器,不能使用vim操作浏览器.再加上本身就几近中止的开发进度,遇到需要用WebExtension重写整个插件.后果已经显而易见了.

对我来说,pentadactyl和一些其他插件是我坚持使用firefox的主要原因.面对mozilla的决策我很无奈,正如以前在知乎上看到的说法:“我用firefox从来不是因为他的性能比别人快”,firefox的插件绝对是众多浏览器中最优秀的.然后现在mozilla放弃了他最后坚持的阵地.现在浏览器市场chrome一家独大,firefox的前途,真的很不明朗.

2018-05-13

上面这段总结是我在整理pentadactyl笔记的时候追加的,现在已经改用chrome有一年左右了,类vim操作插件是cvim,算是接触过的类vim操作插件中,比较接近pentadactyl的.
但是WebExtension的限制已经无法避免了,今天在github上搜索dactyl的时候,发现pentadactyl项目已经一年有余没有更新了…不过意外的发现了一个叫tridactyl的项目,其描述信息是"Implementing Vimperator/Pentadactyl as a WebExtension.",看了下readme文件,虽然同样存在webextension的众多不足,但是心里感觉就像pentadactyl以另外一种方式活了过来一样,感到很欣慰.现在已经回不去firefox了,很多插件的重写,不知道还会带来什么变故.只是写下这些,祭奠曾经陪我度过N个日夜的dactyl.