fly2never
火狐狸
火狐狸
  • UID29103
  • 注册日期2009-06-08
  • 最后登录2017-06-06
  • 发帖数116
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:1410回复:0

[转] Firegestures 创建弹出菜单

楼主#
更多 发布于:2010-04-13 19:54
原文: http://qixinglu.com/archives/create_fir ... popup_menu

图片就不复制过来了,大家请去原文看.
=======================================

这篇又是关于Firegestures,因为Firegestures实在太好用了,这次来讨论一下Firegestures弹出菜单创建,这篇文章比较长。

用了Firegestures很久了,没了这个扩展还真不习惯,关闭标签页已经条件反射地划“L”(即下右),而不是把鼠标移上去点关闭按钮。一个和两个方向的手势已给我分配完了,三个方向手势也用得七七八八,四个方向也用了几个,我是参考使用频率来分配。
弹出菜单

不过实用的脚本越来越多,手势好像不够用了,而且记住每个手势对应哪个动作还要时间一段时间适应。三个方向的以上手势鼠标行走距离还是多了点,换方向还要有少许停顿,影响操作的流畅度(划下和划右还是比较顺手的)。

create_firegestures_popup_menu

不要忘了Firegestures还提供弹出菜单功能!可以看看设置窗口里的自带弹出菜单,有四个。而Firegestures是支持自定义脚本的,理所当然能创建自己的弹出菜单,也就是说Firegestures给你提供额外的右键菜单,那就不需要记下每个手势,不需要划那么多个方向,只需要轻划一下,弹出个菜单,然后选择自己所需的功能,很实用吧。
脚本写法

Firegestures的官网有些例子,来看看弹出菜单的脚本写法,很简单

FireGestures.generatePopup(event,
    [
        { label: "菜单显示文字1", oncommand: "命令1;" },
        { label: "菜单显示文字2", oncommand: "命令2;" },
        { label: "菜单显示文字3", oncommand: "命令3;" },
    ]
);

其中“命令”就是你点击后执行的命令,直接写上去就行了,用分号隔开。之前的《AutoPager 简明攻略七-鼠标手势》,就是直接把命令写到双引号之间。比如打开书签和历史侧边栏可以这样写,你可以复制下面代码来试一试。

FireGestures.generatePopup(event,
    [
        { label: "显示书签侧边栏", oncommand: "toggleSidebar('viewBookmarksSidebar');" },
        { label: "最小化窗口", oncommand: "window.minimize();" },
        { label: "关闭标签页", oncommand: "gBrowser.removeCurrentTab();" },
    ]
);

但是这样需要自己找出哪些语句执行哪些动作,得看Firefox的开发者文档,很麻烦,也不实用。如果某个动作需要多个语句才能实现的话,可以用分号隔开,然后就是痛苦了,代码混乱难以阅读。当然有个方式是,封装成一个函数,不过依然能让这段脚本变得很长很长。

所以这篇文章的重点是,通过弹出菜单来调用已存在的手势!
调用外部手势

经过我看了半天的Firegestures源代码,郁闷阅读和探索过程就不分享了。总算发现了一个方法,写了几个工具函数,再去调用 Firegestures内部的函数,方便来调用已存在的手势。这三个工具函数如下

    * FireGestures.API_runFromCommand,按命令调用
    * FireGestures.API_runFromName,按名称调用
    * FireGestures.API_runFromDirection,按手势方向调用。

不要给吓倒,其实很简单的。下面是一个例子,你只需关心菜单怎么写就行了,完整脚本代码在这里。

FireGestures.generatePopup(event,
   [
        { label: "按命令调用,显示书签侧边栏", oncommand: "FireGestures.API_runFromCommande('FireGestures:BookmarksSidebar');" },
        { label: "按名称调用,TinyURL 当前网址", oncommand: "FireGestures.API_runFromName('TinyURL 当前网址');" },
        { label: "当手势方向调用,打开历史测边栏", oncommand: "FireGestures.API_runFromDirection('LD');" },
   ]
);

一个一个函数来解释一下

    *
      FireGestures.API_runFromCommand

      这个是按命令来调用

      { label: "按命令调用,显示书签侧边栏", oncommand: "FireGestures.API_runFromCommande('FireGestures:BookmarksSidebar');" },

      注意括号里面用的是单引号,值为“FireGestures:BookmarksSidebar”,这个命令是怎么搞来的呢,但你编辑“显示书签侧边栏”的手势,在编辑窗口就看到了这个命令了。

      create_firegestures_popup_menu_1

      这个函数只对默认自带的手势有用。
    *
      FireGestures.API_runFromName

      这个是按名称调用

      { label: "按名称调用,TinyURL 当前网址", oncommand: "FireGestures.API_runFromName('TinyURL 当前网址');" },

      例子是之前的的《创建 TinyURL的Firegestures鼠标手势》,这里的命令就是你自己添加的脚本的名称

      create_firegestures_popup_menu_2

      所以这个函数只对自己添加的手势有用。
    *
      FireGestures.API_runFromDirection

      这个是按手势方向调用

      { label: "当手势方向调用,打开历史测边栏", oncommand: "FireGestures.API_runFromDirection('LD');" },

      这里面的“LD”就是鼠标的方向手势。如果你已经为该动作分配了手势后,你就可以用这个函数来调用,还句话书说你既可以划手势来执行也可以用弹出菜单来执行

      create_firegestures_popup_menu_3

      这个方法对默认和自己添加的动作都有用,前提是分配了手势。
Every browser does fast. But not every browser does good.
游客

返回顶部