Hyper – 基于网页技术的命令行终端
Hyper是一个基于网页技术构建的跨平台命令行终端。它追求速度、稳定性以及可扩展性,目标是打造一个美观、易用、功能强大的下一代命令行界面。
项目目标
Hyper的项目目标是利用开放的网页标准,为命令行用户创建一个漂亮且可扩展的使用体验。在项目初期,重点将放在运行速度、稳定性以及为扩展开发者提供正确的API上。未来,项目团队期待社区能为Hyper增加更多创新功能,使其成为最简单、最强大且经过严谨测试的提高生产力的界面。
可扩展性
Hyper支持使用npm安装扩展插件。任何包含hyper关键字的npm软件包都会被识别为Hyper插件。用户可以通过修改~/.hyper.js
文件的plugins配置来启用插件。
插件完全采用Node.js通用模块规范开发,可以运行在Electron和renderer进程中。这使得插件可以拦截和组合Hyper内部使用的所有React组件和Redux动作,从而实现高度自定义。
键映射
Hyper允许用户自定义所有快捷键。用户可以通过修改~/.hyper.js
文件中的keymaps字段来定义快捷键映射关系。
例如,可以将开发者工具的快捷键修改为Cmd+Alt+O
:
module.exports = {
keymaps: {
'window:devtools': 'cmd+alt+o'
}
}
主题和扩展示例
Hyper的插件机制使得开发主题和扩展变得非常简单。
例如,以下插件通过修改配置,为Hyper界面添加CSS样式和黄色调色:
exports.decorateConfig = (config) => {
return Object.assign({}, config, {
borderColor: 'yellow',
cursorColor: 'yellow',
css: `
${config.css || ''}
/* 自定义CSS */
`
});
}
而Hyperpower插件则通过拦截Redux动作和修改组件,为终端实现了粒子特效:
// 拦截并处理动作
exports.middleware = (store) => (next) => (action) => {
// ...
}
// 包装组件以访问底层实现
exports.decorateTerm = (Term, {React}) => {
return class extends React.Component {
// ...
}
}
配置
Hyper的配置文件位置:
- macOS:
~/Library/Application Support/Hyper/.hyper.js
- Windows:
%APPDATA%Hyper.hyper.js
常见的配置选项包括:
fontSize
、fontFamily
– 字体设置cursorColor
– 光标颜色foregroundColor
、backgroundColor
– 前景和背景颜色css
– 自定义CSSshell
– 默认Shellkeymaps
– 自定义快捷键
插件机制
插件可以通过实现特定的方法来介入Hyper的各个功能:
decorateConfig
– 修改配置onApp
、onWindow
等 – 应用和窗口生命周期事件middleware
– Redux 中间件decorateTerm
– 包装组件mapHyperState
等 – 修改状态映射
通过拦截事件和调度动作,插件可以实现各种自定义功能。
Hyper的运行原理
Hyper构建于Electron和JavaScript社区的先进技术之上,主要采用了以下技术:
- Electron: 使用Chromium和Node.js来实现跨平台的桌面应用。Hyper 的主进程使用 Node.js,渲染进程使用 Chromium 来显示界面。
- React:使用React函数式组件构建界面,实现快速的视图更新。
- Redux:管理组件的状态和数据流。Redux store用于保存系统状态。
- xterm.js: 提供全功能的终端模拟器功能。
借助这些技术,Hyper实现了热重载插件、虚拟文件系统、跨进程RPC通信等功能。
插件开发
开发 Hyper 插件非常简单,只需要通过 npm 发布,添加一些关键词元数据,实现指定的挂钩方法,就可以插入到 Hyper 的各个模块中。
插件可以通过 decorate
系列方法包装组件实现定制化界面,通过 middleware
、mapState
等方法组织数据流,也可以通过挂钩生命周期事件完全接管 Hyper 的行为。
插件还可以直接调用 window.rpc
与主进程通信,调用系统命令,也可以通过 Redux actions 派发 Effect 实现异步任务。
定制化
Hyper 提供了非常灵活的定制化能力:
- 配置文件支持自定义Shell、样式、快捷键等。
- 支持以插件形式添加任意 React 组件实现界面定制。
- 支持拦截和修改内部状态和动作。
- 支持自定义主题样式。
- 提供钩子在各种事件响应应用和窗口生命周期。
- 支持添加预制的 Notifications。
- 支持自定义 Tab 和 Window 标题等内容。
这使得 Hyper 可以高度定制以适应特定的工作流程或审美需求。
总结
Hyper致力于打造一个快速、可靠、可自定义的下一代命令行界面。它的插件机制为用户提供了无限可能,使之可以成为一个简单却功能强大的生产力工具。如果你需要一个 hackable 的终端,Hyper绝对是个不错的选择。
评论留言