在 Firefox 57 中更改键绑定(键盘快捷键)

在 Firefox 57 中更改键绑定(键盘快捷键)

自 Firefox 57 (Quantum) 更新以来,所有允许更改 Firefox 中的键绑定的附加组件似乎都已停止工作/不受支持。

有没有方法可以更改 Firefox Quantum 中的默认键绑定?

答案1

有一种方法。它不是超级官方的,但基本上你可以解压browser/omni.ja,编辑其中的键绑定chrome/browser/content/browser/browser.xul,重新打包,删除启动缓存,它就可以工作了。

或者,如果您认为解包和重新打包比构建更具黑客攻击性,那么您可以编译自己的 Firefox,这样您就不需要解包二进制文件了。

构建的另一个优点是,你可以将修改存储在 git 中的官方源之上,并始终进行变基,就像我在这里所做的那样:https://github.com/errge/gecko-dev/tree/gregzilla-patched-20181223

我建议您首先从二进制选项开始,因为 20 分钟后您就能使用可用的键盘快捷键,而不只是刚开始执行 mercurial 克隆程序 :)

这两种方法都独立于任何扩展/Web 扩展,并且始终有效,即使在位置栏中,甚至在受保护的页面上也是如此(正如您在评论中询问的那样)。因此,它们比重新映射 Web 扩展效果更好。

我写了一篇文章,其中包含您可能感兴趣的所有细节:https://github.com/nilcons/firefox-hacks

如果您有更多问题,请在 github 上报告问题。

答案2

您可以使用以下方式更改 Firefox 中的按键绑定自动配置,而无需解压和修改 Firefox 二进制文件。

创建一个config-prefs.jsconfig.js文件:

在 Windows 上:

  • C:\Program Files\Mozilla Firefox\defaults\pref\config-prefs.js
  • C:\Program Files\Mozilla Firefox\defaults\pref\config.js

在 macOS 上:

  • Firefox.app\Contents\Resources\config.js
  • Firefox.app\Contents\Resources\defaults\pref\config-prefs.js

在 Linux 上:

  • /usr/lib/firefox/config.js
  • /usr/lib/firefox/browser/defaults/preferences/config-prefs.js

内容如下:

config-prefs.js

pref("general.config.filename", "config.js");    
pref("general.config.obscure_value", 0);  
pref("general.config.sandbox_enabled", false);  

config.js

try {
  let { classes: Cc, interfaces: Ci, manager: Cm  } = Components;
  const Services = globalThis.Services;
  const {SessionStore} = Components.utils.import('resource:///modules/sessionstore/SessionStore.jsm');
  function ConfigJS() { Services.obs.addObserver(this, 'chrome-document-global-created', false); }
  ConfigJS.prototype = {
    observe: function (aSubject) { aSubject.addEventListener('DOMContentLoaded', this, {once: true}); },
    handleEvent: function (aEvent) {
      let document = aEvent.originalTarget; let window = document.defaultView; let location = window.location;
      if (/^(chrome:(?!\/\/(global\/content\/commonDialog|browser\/content\/webext-panels)\.x?html)|about:(?!blank))/i.test(location.href)) {
        if (window._gBrowser) {

          // Place your keyboard shortcut changes here
          // ...
          // ...


        }
      }
    }
  };
  if (!Services.appinfo.inSafeMode) { new ConfigJS(); }
} catch(ex) {};

修改这些文件后,您始终必须转到about:support并运行Clear startup cache,以使用新配置重新启动浏览器。

以下是您可以执行的操作的一些示例:

将这些片段放入config.js我写的 中Place your keyboard shortcut changes here

删除现有的键盘快捷键

// remove Ctrl-Shift-X, so that I can map it to 1Password in the 1Password app later
let keySwitchDirection = window.document.getElementById('key_switchTextDirection');
keySwitchDirection.remove();

更改现有的键盘快捷键

// remap Ctrl-J to downloads (removing it from focusing the browser bar)
let search2 = window.document.getElementById('key_search2')
search2.remove();
let openDownloads = window.document.getElementById('key_openDownloads')
openDownloads.setAttribute("modifiers", "accel");
openDownloads.setAttribute("key", "J");

创建新的键盘快捷键

// create keyboard shortcut to Toolbar > Settings with Ctrl-,
let settingsKey = window.document.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'key');
settingsKey.setAttribute("id", "key_Settings");
settingsKey.setAttribute("modifiers", "accel,shift");
settingsKey.setAttribute("key", "U");
settingsKey.setAttribute("oncommand", "openPreferences()");
settingsKey.addEventListener('command', this, false);
mainKeyset.appendChild(settingsKey);

完全定制的东西。(Firefox 引入了 Shift-Ctrl-T 作为通用撤消操作(变更集),因此这里的示例不再必要。我将它留在这里作为其他自定义的示例。

// make Ctrl-Shift-T reopen last tab OR last window, depending on which one was closed last
let undoCloseTabKey = window.document.getElementById('key_undoCloseTab');
undoCloseTabKey.removeAttribute('command');
undoCloseTabKey.setAttribute('oncommand', 'undoCloseLastClosedTabOrWindow()');
undoCloseTabKey.addEventListener('command', this, false);

window.undoCloseLastClosedTabOrWindow = function() {
  // don't have any tabs to restore
  if (SessionStore.getClosedTabCount(window) == 0) {
    // we don't need to worry whether there are any windows to restore - undoCloseWindow does that for us
    window.undoCloseWindow();
  }

  // don't have any windows to restore
  else if (SessionStore.getClosedWindowCount() == 0) {
    // we don't need to worry whether there are any tabs to restore - undoCloseTab does that for us
    window.undoCloseTab();
  }

  // restore whichever was closed more recently
  else if (SessionStore.getClosedTabData(window)[0].closedAt > SessionStore.getClosedWindowData()[0].closedAt) {
    window.undoCloseTab();
  } else {
    window.undoCloseWindow();
  }
}

指示:

要查找现有的键盘快捷键:

  • 汉堡菜单 > 更多工具 > 浏览器工具箱
  • 在检查器中,搜索#mainKeyset
  • 在那里,你可以看到所有指定的键盘快捷键

查找可通过键盘快捷键触发的菜单操作

  • 汉堡菜单 > 更多工具 > 浏览器工具箱
  • 使用检查器找到要通过键盘快捷键触发的元素,例如appMenu-settings-button
  • oncommand从菜单项中获取属性,并将其用作oncommand关键标签的属性

或者

  • 使用检查器,搜索#mainCommandSet
  • 并获取命令的id,并将其用作键标签的command(非)属性。oncommand

定义键盘快捷键:

  • 使用属性指定修饰符modifiers。您可以使用accel(表示 Ctrl)shiftalt
  • key使用属性指定键本身

所有这些的来源:Reddit,u/aveyo,通过设置 config.js 恢复 Ctrl+Shift+B = 库

更多细节:Firefox 键盘快捷键(网络存档)

答案3

如果您使用 macOS,您可以自定义任何应用程序的快捷方式,只要它们出现在应用程序菜单中即可。macOS 13+ 的说明

  1. 在 Mac 上,选择  菜单 >系统设置, 点击键盘 (您可能需要向下滚动),然后点击键盘快捷键在右侧。

  2. 选择应用程序快捷方式在左侧,单击添加按钮,单击应用弹出菜单,然后选择特定应用或所有应用程序

  3. 在里面菜单标题字段中,键入要创建快捷方式的菜单命令,与应用程序中显示的命令完全相同

更多详细信息请参阅 Apple 网站:https://support.apple.com/guide/mac-help/create-keyboard-shortcuts-for-apps-mchlp2271/mac

答案4

我不确定你想要什么样的快捷方式,但有一个很棒的扩展叫做维美拉让您可以完全不使用鼠标进行浏览。此扩展提供了一种过滤机制,让您可以决定键绑定应在哪些网站上起作用。

它仍处于实验阶段,因为它是从 Chrome 扩展程序移植的,但我在使用它时确实遇到了任何错误或问题。

绑定遵循 VIM 绑定,如果您已经熟悉这些绑定,那么绑定应该是自然的,否则,您可以根据自己的喜好对它们进行定制。

相关内容