我重新映射了Insert、Home、、和,并且它已经工作了很多年,但是随着最新的 Google Chrome 更新,它会忽略重新映射,并在没有重新映射的情况下执行操作。在 Chrome 之外,重新映射有效Page Up。DeleteEndPage Down
知道如何让 Chrome 遵守重新映射的按键吗?
答案1
我做过类似的键重新映射,也遇到过同样的问题。我不确定 xmodmap 重新映射在 Chrome 中是否真的能正常工作。例如,在 Google Sheets 中,按下修饰键(在我的情况下是大写锁定键)会清除当前单元格。
我通过以下方式解决了这个问题:(a)购买了一款支持 QMK 固件的新 USB 键盘;(b)发现我的 System76 笔记本电脑自定义键盘固件很简单。
我意识到这两个选项都可能涉及新硬件和大量费用,因此并不理想。
我认为 Chrome 能够绕过重新映射的键这一事实表明重新映射是在太高的级别上进行的。使用 evdev 重新映射可能效果更好,但我还没有尝试过。祝你好运,很抱歉我没有更通用的解决方案。
答案2
我不知道这是否能解决您的具体问题,但我在 Google 表格中也遇到了类似的问题,我的映射无法正常工作。
基本上,据我所知,大写锁定键代码仍被发送到浏览器——我对此了解不够,无法理解操作系统中的情况——所以我最终做的是keydown
专门覆盖 Google 表格中的事件。不理想,绝对不是。然而,这可以阻止 Google 表格清除当前单元格。
您必须安装 TamperMonkey 并添加以下脚本。确保脚本在 处运行document-start
。
// ==UserScript==
// @name Google Sheets Capslock Blocker
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Take control of Google Sheets.
// @author nate-wilkins
// @match https://docs.google.com/spreadsheets/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant none
// ==/UserScript==
'use strict';
console.log('Running Google Sheets Capslock Blocker');
const element = document.createElement('div');
const originalAddEventListener = element.__proto__.addEventListener;
element.__proto__.addEventListener = function (event, handler) {
if (event === 'keydown') {
originalAddEventListener.call(this, event, function () {
console.log({ e: arguments[0] });
if (arguments[0].key === 'ModeChange') {
console.log(">> Blocked Caps <<");
return;
} else {
handler.apply(this, arguments);
}
});
} else {
originalAddEventListener.call(this, event, handler);
}
};
这使我能够拥有.xmodmap
:
keycode 66 = Mode_switch
keysym h = h H Left
keysym l = l L Right
keysym k = k K Up
keysym j = j J Down
这让我可以使用非常基本的 vi/vim 移动键来浏览 Google Sheets。
很高兴这终于奏效了。如果你找到了一种较低级别的方法来解决这个问题,请告诉我,我将不胜感激!