27 个版本 (12 个稳定版)
1.7.0-prerelease-1 | 2024 年 7 月 13 日 |
---|---|
1.6.1-prerelease-1 | 2024 年 4 月 26 日 |
1.6.0-prerelease-1 | 2024 年 2 月 11 日 |
1.5.0 | 2023 年 12 月 22 日 |
1.0.6 | 2022 年 7 月 31 日 |
#55 in 命令行工具
每月 547 次下载
1.5MB
27K SLoC
卡纳塔
这能做什么?
这是一个适用于 Linux、macOS 和 Windows 的跨平台软件键盘重映射器。以下是功能的简要概述
- 多层键盘功能
- 高级按键行为定制(例如:轻触保持,宏,Unicode)
- 跨平台可读配置文件
要查看所有功能,请参阅配置指南。配置指南旨在与主线保持最新,可能包含您版本中未有的功能。请参阅发布页面中的适用链接。
与之最相似的项目是kmonad,它为卡纳塔提供了灵感。以下是比较文档。
您可以在此处查看已知问题列表。
演示视频
为什么这很有用?
想象一下,如果我们不是按 Shift 键来输入大写字母,而是有分开的大写和小写字母的巨大键盘。我们都应该同意:这将是一个糟糕的用户体验!
可以这样思考 Shift 键的工作方式:它们将您的输入切换到另一个功能层,您现在输入的是大写字母和符号,而不是小写字母和数字。
kanata 允许您将 Shift 键具有的这种替代层概念应用到任何键上。然后您可以自定义这些层的功能,以满足您的具体需求和工作流程。
使用方法
目前运行kanata时无法在后台进程启动它。您需要保持启动kanata的窗口运行以保持kanata活跃。以下是运行kanata在后台的一些技巧
- Windows: https://github.com/jtroo/kanata/discussions/193
- Linux: https://github.com/jtroo/kanata/discussions/130
- 从托盘图标运行:kanata-tray
预构建的可执行文件
有关可执行文件和说明,请参阅发行页面。
自行构建
本项目使用最新的Rust稳定工具链。如果您使用rustup
安装了Rust工具链,例如通过官方网站的说明,您可以使用rustup update stable
获取最新的稳定工具链。
说明
使用cargo install
cargo install kanata
# On Linux and macOS, this may not work without `sudo`, see below
kanata --cfg <your_configuration_file>
在Linux上自行构建和运行
git clone https://github.com/jtroo/kanata && cd kanata
cargo build # --release optional, not really perf sensitive
# sudo is used because kanata opens /dev/ files
#
# See below if you want to avoid needing sudo:
# https://github.com/jtroo/kanata/wiki/Avoid-using-sudo-on-Linux
sudo target/debug/kanata --cfg <your_configuration_file>
在Windows上自行构建和运行。
git clone https://github.com/jtroo/kanata; cd kanata
cargo build # --release optional, not really perf sensitive
target\debug\kanata --cfg <your_configuration_file>
在macOS上自行构建和运行
对于macOS 11及更高版本:安装Karabiner VirtualHiDDevice驱动程序。
要激活它
/应用程序/.Karabiner-VirtualHIDDevice-管理器.应用/内容/MacOS/Karabiner-VirtualHIDDevice-管理器激活
对于macOS 10及更早版本:安装Karabiner内核扩展。
git clone https://github.com/jtroo/kanata && cd kanata
cargo build # --release optional, not really perf sensitive
# sudo is needed to gain permission to intercept the keyboard
sudo target/debug/kanata --cfg <your_configuration_file>
完整的配置指南可以在此处找到。
示例配置文件位于cfg_samples。文件simple.kbd包含一个基本的配置文件,它可能容易理解但并不包含所有功能。文件kanata.kbd
包含所有功能的示例和文档。发布资产还包含一个经过测试与该版本一起工作的kanata.kbd
文件。所有键名都可以在keys模块中找到,您还可以定义自己的键名。
功能标志
当自行构建或使用cargo install
时,您可以添加功能标志以启用默认关闭的功能。
说明
如果您想启用cmd
动作,请添加标志--features cmd
。例如
cargo build --release --features cmd
cargo install --features cmd
在Windows上,如果您想编译使用拦截驱动程序的二进制文件,应添加标志--features interception_driver
。例如
cargo build --release --features interception_driver
cargo install --features interception_driver
要组合多个标志,请使用单个--features
标志,并用逗号分隔功能。例如
cargo build --release --features cmd,interception_driver
cargo install --features cmd,interception_driver
其他安装方法
显著特性
- 可读性强的配置文件。
- 配置的实时重新加载,便于测试您的更改。
- 多层键功能
- 高级动作,如轻触保持、Unicode输出、动态和静态宏
- 类似Vim的领导者序列以执行其他操作
- 可选运行TCP服务器以与其他程序交互
- 其他程序可以响应层变化或触发层变化
- 拦截驱动程序支持(使用
kanata_wintercept.exe
)- 请注意,这个问题存在,这超出了本项目控制范围:https://github.com/oblitum/Interception/issues/25
贡献
欢迎贡献!
除非明确说明,否则您对kanata的贡献将仅在LGPL-3.0许可证下进行*。
某些目录是例外
- keyberon:MIT许可证
- interception:MIT或Apache-2.0许可证
如何帮助
- 试用并告诉我您的想法。请随意提交问题或开始讨论。
- 可用性问题和无用的错误消息被视为需要修复的错误。如果您遇到任何问题,我会很感激您提交问题。
- 浏览开放问题,并在您能够和/或愿意的情况下提供帮助。如果您想尝试贡献,请随时ping jtroo以获取一些提示。
- 如果您了解编写Windows键盘驱动程序的情况,开始一个Interception驱动程序的开放源代码替代品将非常棒。
与kanata相关的社区项目
- vscode-kanata:VS Code中kanata配置文件的语言支持
- komokana:为
komorebi
(Windows)提供自动应用程序感知层切换 - kanata-tray:从托盘图标控制kanata
- 应用程序感知层切换
这个名字意味着什么?
我想找一个与键盘相关的“k”字。据维基百科,kanata是易洛魁语的一个土著词汇,意为“村庄”或“定居点”,是加拿大名字的起源。
还有PPT✧。
动机
TLDR:QMK功能,但适用于任何键盘,而不仅仅是花哨的机械键盘。
长版本
我有一些运行QMK的键盘。QMK允许用户根据他们的意愿自定义键盘的功能。
QMK的一个很好的用例是其能够将键映射到与主键盘行键重叠的位置,但在另一层可访问。我不会评论生产力,但我发现这极大地帮助了我的键盘舒适度。
例如,这些键位于键盘的右侧
7 8 9
u i o
j k l
m , .
在一层中,我在相同的位置有箭头键,在另一层中有数字键盘。
arrows: numpad:
- - - 7 8 9
- ↑ - 4 5 6
← ↓ → 1 2 3
- - - 0 * .
人们可以添加任何喜欢的自定义来提高舒适度、速度等。就我个人而言,我的主要动机是由于过去的重复性劳损。
然而,QMK并不在所有地方运行。实际上,它不运行在大多数你能够获得的硬件上。你不能在笔记本电脑键盘或任何主流办公室键盘上运行它。我相信QMK提供的舒适度和赋权应该对任何在现有硬件上有电脑的人可用,而不是必须购买一个爱好者的机械键盘(诚然,它们非常好——我自己有几台——但可能很贵)。
我为不支持QMK的键盘找到的最佳替代方案是kmonad。这是一个非常优秀的项目,如果你想要尝试类似的东西,我推荐它。
这个项目的存在原因在于,kmonad是用Haskell编写的,我对如何开始贡献一个Haskell项目一无所知。从局外人的角度来看,我认为Haskell是一种伟大的语言,但我真的无法理解它。在撰写本文时,还有一些突出的问题,使得kmonad对我的个人工作流程不够理想。
这个项目是用Rust编写的,因为Rust是我最喜欢的编程语言,而且存在前人优秀的keyberon crate。
类似项目
- kmonad:kanata(Linux、Windows、Mac)的灵感来源
- QMK:开源键盘固件
- keyberon:针对键盘固件的Rust库
- ktrl:仅适用于Linux的键盘定制器,具有层、TCP服务器和音频支持
- kbremap:仅适用于Windows的键盘定制器,具有层和Unicode
- xcape:仅适用于Linux的轻触保持修饰符
- karabiner-elements:仅适用于Mac的键盘定制器
- capsicain:仅适用于Windows的键映射器,具有驱动程序级别的键拦截
- keyd:与QMK、kmonad和kanata非常相似的仅适用于Linux的键映射器
- xremap:受Emacs键序列启发的仅适用于Linux的应用程序感知键映射器,与QMK层/Vim模式不同
- keymapper:具有不同转换模型的上下文感知跨平台键映射器(Linux、Windows、Mac)
为什么有这个列表?
虽然kanata是某些人的最佳工具,但它可能不是你的最佳工具。我很高兴向你介绍可能更适合你需求的工具。这个列表也可以作为参考/灵感,以添加到kanata中可能的功能。
捐赠/支持?
作者(jtroo)不会接受kanata工作的货币捐赠。请改为捐赠你的时间和/或金钱给慈善机构。
以下是一些链接。这些链接提供学习和有趣的阅读材料。它们不是推荐。
依赖关系
~9–25MB
~310K SLoC