WANGZ's blog / Tags

Firefox 的快捷键修改

1 基本配置

1.1 隐藏 tabbar

1.1.1 配置 about:config

都是 true

toolkit.legacyUserProfileCustomizations.stylesheets
browser.tabs.drawInTitlebar

1.1.2 配置 userChrome.css

/* Hide sidebar title */
#sidebar-header {
    display: none;
}

#TabsToolbar {
    visibility: collapse !important;
    /* height: 1px !important; */
    /* min-height: 1px !important; */
    /* max-height: 1px !important; */
}
#TabsToolbar .tabbrowser-tab {
    display: none !important;
}

2 DarkMaker

ui.systemUsesDarkTheme browser.in-content.dark-mode extensions.activeThemeID

2.1 implemention.js

const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
// const { XPCOMUtils } = ChromeUtils.import(
//   "resource://gre/modules/XPCOMUtils.jsm"
// );

// XPCOMUtils.defineLazyServiceGetter(
//   this,
//   "ProfileService",
//   "@mozilla.org/toolkit/profile-service;1",
//   "nsIToolkitProfileService"
// );

this.ProfileManager = class extends ExtensionAPI {
    getAPI(context) {
        return {
            DarkMaker: {
                Services.prefs.setBoolPref("browser.in-content.dark-mode", true);
                Services.prefs.setIntPref("ui.systemUsesDarkTheme", 1);
            }
        }
    }
}

3 修改快捷键

继昨天也能用 rofi 转跳 firefox 标签之后,我决定逃回 firefox 了,但是还有一点习惯问题就是我习惯使用 Ctrl-n 来向下导航,firefox 中的该键是用来创建新窗口的,不能忍,改了它!

3.1 编辑默认快捷键

如果想要编辑 firefox 量子的默认快捷键,比较方便的是编辑 omni.ja 。

3.1.1 得到 omni.ja 文件

在 Archlinux 下可以通过

$ pacman -Ql firefox | grep omni.ja
firefox /usr/lib/firefox/browser/omni.ja
firefox /usr/lib/firefox/omni.ja

如上得到了两个 omni.ja 文件,我们只需要编辑第一个文件就可以了。

3.1.2 解压 omni.ja 文件

注意:请备份 omni.ja 文件

omni.ja 可以直接通过 unzip 进行解压,在 Linux 下不妨参照如下命令:

$ cp /usr/lib/firefox/browser/omni.ja $HOME/omni.ja.bak
$ mkdir -p $HOME/temp_omni_ja # 创建临时文件夹
$ cd $HOME/temp_omni_ja
$ unzip ../omni.ja.bak

3.1.3 编辑快捷键

  1. 两个文件

    现在就进入了正题,要开始编辑快捷键了。

    需要注意两个文件:

    localization/en-US/browser/browserSets.ftl
    

    这个里面存放的是诸如

    window-minimize-shortcut =
     .key = M
    

    这样的定义,相当于为每个 key 取了一个名称,例子中的 M 就是键盘上的 M 键。

    还有就是

    chrome/browser/content/browser/browser.xhtml
    

    这个文件了,这个里面就是我们需要着重修改的地方。

  2. 一个例子,使用 <C-s> 搜索

    如果想使用 <C-s> 进行类似 Emacs 中的向下搜索,在 firefox 中这个动作的默认快捷键是 <C-g>, 既然 ff 中有还有字母的这个快捷键,那么在 localization/en-US/browser/browserSets.ftl 就应该有 G 这个定义,要做的就变成了中找到 G 并改成 S, 结果如下:

    search-find-again-shortcut =
           .key = G
    

    将它修改成

    search-find-again-shortcut =
           .key = S
    
  3. 又一个例子,使用 <M-n> 到下一个标签

    这个例子相对就麻烦一些,因为在 chrome/browser/content/browser/browser.xhtml 中默认没有 <M-j> 类似的快捷键。就不能直接在 localization/en-US/browser/browserSets.ftl 直接修改定义来完成这个了。

    但是通过阅读文件,发现该文件中存在着切换到下一个标签的命令

    <command id="Browser:NextTab" oncommand="gBrowser.tabContainer.advanceSelectedTab(1, true);"/>
    

    那么要做的就变成了添加快捷键,照猫画虎,在 <keyset id="mainKeyset"> 一节中添加如下命令即可:

    <key id="goNextTabKb"
         data-l10n-id="window-new-shortcut"
         command="Browser:NextTab"
         modifiers="alt"/>
    

    需要说明的是, data-l10n-id 就是在 localization/en-US/browser/browserSets.ftl 中定义的 key, 在该文件中有

    window-new-shortcut =
          .key = N
    

    我需要的是 <M-n> 切换到下一个标签,然后就偷了懒,没有改名称,直接拿过来用了。剩下的几个就是字面意思,没啥好说的。

  4. 其他

    不想要的直接注释掉就好了

    我的修改记录在这: https://pastebin.com/G7aLMqsv

3.1.4 重新打包

等到修改满意以后要做的就是怎么拿出来怎么送回去了。 官方推荐的是 zip -qr9XD omni.ja * 这样进行打包,所以

$ zip -qr9XD $HOME/omni.ja *
$ sudo cp $HOME/omni.ja /usr/lib/firefox/browser/omni.ja

3.1.5 启动 firefox

首先需要使用 firefox --purgecaches 来重载 omni.ja, 这样修改的才会生效。

3.2 配置 Vimium

页面内导航,我选用了 vimium, 然后将 Vimium 的快捷键修改了一下。

unmapAll
map n scrollDown
map p scrollUp
map <a-v> scrollToTop
map <c-v> scrollToBottom
map <a-w> copyCurrentUrl
map <a-c> enterVisualMode
map <a-C> enterVisualLineMode
map j LinkHints.activateMode
map <a-j> LinkHints.activateModeToOpenInNewTab

3.3 后话

firefox 差不多就比较接近 vanilla emacs 的键位了,我也可以愉快地使用了。

4 添加 WebExtension API

4.1 123


Other posts
Powered by Org-mode and a fork of org-static-blog