インストール
最新バージョン: 3.0.2
macOS (.app) | 3.0.0
|
|
64ビット |
Windows (.exe) | 3.0.2 | ||
Debian (.deb) | 3.0.2 | ||
Fedora (.exe) | |||
Windows (.rpm) | 3.0.2 | ||
Other Linux distros (.AppImage) | 3.0.2 |
プロジェクトの目標
プロジェクトの目標はコマンドラインのインターフェイスユーザー向けに美しく伸縮性の高い経験をオープン Web 標準に構築することです。 当初は、主に速度、安定性、および拡張機能作者のための正しい API の開発に注力します。
将来的には、生産性のための最もシンプルで強力かつ十分にテストされたインターフェイスとなり得るものを強化するために、コミュニティが革新的な追加機能を考え出すと予想しています。 package.json
.
$ npm search hyper
Then edit .hyper.js
and add it to plugins
module.exports = { config: { /*... */ }, plugins: };
Hyper
will show a notification when your modules are installed to .hyper_plugins
.
キーマップ
すべてのコマンドキーを変更できるようになりました。 変更するには、.hyper.js
を編集し、keymaps
に変更したい内容を追加します。
そうすると、Hyper はデフォルトを変更した内容に変更します。 'window:devtools': 'Cmd+Alt+O'
module.exports = { config: { /*... */ }, keymaps: { 'window:devtools': 'cmd+alt+o' }};
デフォルトのキーマップ。
Configuration
Config location
macOS | ~/Library/Application Support/Hyper/.hyper.js |
Windows | $Env:AppData/Hyper/.hyper.js |
Linux | ~/.config/Hyper/.hyper.js |
Note: ~/.hyper.js
での設定はまだサポートされていますが、アプリケーション ディレクトリに設定がある場合は無視されます。 そうでない場合は、最初の実行時にアプリケーション ディレクトリに移動されます。
.hyper.js
で見た config
オブジェクトは、次のように承認されます
プロパティ | デフォルト | 説明 | |
updateChannel |
“stable” | 更新を受け取る更新チャネル | |
fontSize |
12 | ターミナルのデフォルト サイズ(ピクセル) | |
fontFamily “Menlo.X” |
オプションのフォールバックで使用するフォントファミリー | ||
uiFontFamily |
“-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, ….」 | UI に使用するフォント ファミリ(フォールバックはオプション) | |
fontWeight |
“normal” | デフォルトのフォントの太さ:「通常」または「大胆」 | |
fontWeightBold |
太字用フォント 太さを指定することができる。 “normal” または “bold” | ||
cursorColor |
“rgba(248,28,229,0.8)” | 端末のキャレットの色 | |
cursorAccentColor |
“#000” | BLOCKカーソル下の文字色 | |
cursorShape |
“BLOCK” | 端末内のキャレット形状を指定することができるようになりました。 利用可能なオプションは次のとおりです。 ‘BEAM’, ‘UNDERLINE’, ‘BLOCK’ | |
cursorBlink |
trueのとき。 カーソルが点滅する | ||
foregroundColor |
“#fff” | 端末のメインテキストの色 | |
backgroundColor |
“#000” | ウィンドウとメインターミナルの背景の色と不透明度 | |
selectionColor |
“rgba(248,28,229,0.3)” | 端末のテキスト選択の背景色/不透明度 | |
borderColor |
“#333” | メインウィンドウの枠とタブバーの色 | |
css |
“” | メイン ウィンドウに含めるカスタム CSS | |
padding |
“12px 14px” | CSS padding values for space around each term | |
colors |
{ black: “#000000”, red: “#ff0000”, … } | カラーパレットのオーバーライドのリスト。 キーの名前は「ANSI 16」を表し、すべてデフォルトの設定で見ることができる。 | |
shell |
Hyper が新しいセッションを開始するときに実行するカスタムシェルへのパス | ||
shellArgs |
“” | シェル引数の配列 | |
env |
{} | 事前に設定する環境変数オブジェクト。 シェルを起動する | |
windowSize |
新しいウィンドウのデフォルトの幅/高さ (ピクセル) | ||
scrollback |
1000 | スクロールのために端末バッファに保持される行数 | |
copyOnSelect |
false | trueの場合。 選択したテキストを自動的にクリップボードにコピーする | |
quickEdit |
false | この機能が有効の場合、選択したテキストはクリップボードにコピーされます。 右クリックで選択されたテキストはコピーされるか、選択範囲がない場合は貼り付けられます (Windows のデフォルトでは真) | |
defaultSSHApp |
true | 真ならば Hyper は SSH | |
modifierKeys |
{altIsMeta.X} のデフォルト プロトコル クライアントとして設定されます。 false} | 修飾キーがメタキーとして動作するように変更 | |
showHamburgerMenu |
Linux/Windowsではtrue、 macOS では false | ハンバーガー メニューの表示を変更します。 利用可能なオプションは:true, false | |
showWindowControls |
“” | ウィンドウ コントロールの位置と可視性を変更します。 利用可能なオプションは、true, false, “left” |
Extensions API
拡張機能は Electron とレンダラー プロセスの両方で読み込まれる汎用 Node.js モジュールです。 React
コンポーネントと Redux
アクション。
可能なカスタマイズ ポイントごとにカスタム API メソッドまたはパラメーターを公開する代わりに、機能のあらゆるビットを傍受して合成することができます。
プラグイン開発に関するさらなる詳細は、Hyper リポジトリで見つけることができます。
あなたのモジュールは、これらのメソッドの少なくとも 1 つを公開する必要があります。
Method | Invoked from | Description | ||||||
onApp |
Electron | アプリが最初にロードされると呼び出されます。 プラグインが再ロードされると、既存のアプリで再度呼び出されます。
Parameters:
|
||||||
onWindow |
Electron |
それぞれのウィンドウが作成されたときに呼び出されます。 プラグインがリロードされると、既存のウィンドウで再度呼び出されます。 Parameters:
|
||||||
onUnload |
Electron |
プラグインがユーザーにより削除されると発生する。 Parameters:
|
||||||
decorateConfig |
Electron / Renderer |
v0.5.0+.0.0 レンドラ。 ユーザーの設定を装飾できるようにします。 Parameters:
|
||||||
decorateEnv |
v0.7.0+.0 |
プラグインのユーザー設定を飾ることができます。 変更された環境オブジェクトを返すことにより、ユーザーの環境を装飾することを可能にします。
Parameters:
|
||||||
decorateMenu |
Electron |
Electron の パラメータ:
|
||||||
decorateBrowserOptions |
Electron |
新しいウィンドウが作られるときElectronの Parameters:
|
||||||
onRendererWindow |
レンダラ |
ウィンドウごとにプラグインが最初にロードまたはその後再ロードされるときに起動されます。 パラメータ:
|
||||||
middleware |
Renderer |
あらゆる動作を傍受できるカスタム Reduxミドルウエアです。 その後、 |
||||||
reduceUI reduceSessions reduceTermGroups |
Renderer |
State shape用のカスタムreducerです。
|
||||||
getTabsProps |
Renderer |
parentProps |
親コンポーネントからの小道具。 |
props |
コンポーネントに渡される既存のプロパティ。 |
getTabProps
<Tab>
から<Tabs>
コンポーネントにプロパティを受け渡します。
uid |
Tab / Term uid |
parentProps |
親コンポーネントからのプロップスです。 |
props |
コンポーネントに渡される既存のプロパティ。 |
getTermGroupProps
<Terms>
から <TermGroup>
コンポーネントにプロパティを受け渡します。
uid |
TermGroup uid |
parentProps |
親コンポーネントからのプロップを返さなければならない。 |
props |
コンポーネントに渡される既存のプロパティ。 |
getTermProps
<TermGroup>
から<Term>
コンポーネントにプロパティを引き継ぎます。
uid |
Term uid |
parentProps |
親コンポーネントからのプロップ。 |
props |
コンポーネントへの既存のプロパティが渡されていること。 |
mapHyperState
mapTermsState
mapHeaderState
mapNotificationsState
コンポーネントが受け取る状態のプロパティのためのカスタムマッパーです。 子コンポーネントがこれらのプロパティを取得するには、対応するメソッド (getTermProps
など) を使用してそれらを渡す必要があることに注意してください。
渡されたマップの拡張オブジェクトを返す必要があります。
state |
The Redux global state |
map |
コンポーネントに渡されるプロパティの既存のマップです。 |
mapHyperDispatch
mapTermsDispatch
mapHeaderDispatch
mapNotificationsDispatch
Dispatch Properties のカスタムマッパーです。 渡されたマップの拡張オブジェクトを返す必要があります。
dispatch |
The Redux ディスパッチ関数 |
map |
コンポーネントに渡されるプロパティの既存のマップです。 |
decorateHyper
decorateNotifications
decorateNotification
decorateHeader
decorateTabs
decorateTab
decorateTerms
decorateTermGroup
decorateSplitPane
decorateTerm
装飾するためにReact
Component
で起動されます。 高次コンポーネントを返す必要があります。
Parameters:
Hyper |
The React Component constructor. |
env |
コンポーネント構築用に有用なモジュール リファレンスを収集したものです。 下記参照 |
Module loading
ユーザーは Command + R (refresh) でプラグインのホットロードおよびホットリロードが可能です。 733>
Notice
`BrowserWindow` に影響を与えるプラグインは、ホットロード後に新しいウィンドウで効果を発揮します。
将来的には、自動的にこれを行うかもしれません。 新しいプラグインをロードする:
- 定期的に(数時間おき)
- 設定ファイルに変更があったとき(
plugins
またはlocalPlugins
) - ユーザーがプラグイン > Update all now
再ロードするプロセスでは .hyper_plugins
で npm prune
と npm install
を走らせることになります。
require.cache
を実行on*
メソッドを呼び出し、新しい装飾が配置されたコンポーネントを再レンダリングします。Plugins location
macOS | ~/Library/Application Support/Hyper/.hyper_plugins |
Windows | $Env:AppData/Hyper/.hyper_plugins |
Linux | ~/.config/Hyper/.hyper_plugins |
Note: のプラグインはまだサポートされていますが、アプリケーション ディレクトリにプラグインがある場合は無視されます。
注意: メイン プロセスでは、プラグインはできるだけ早く登録されます (私たちは onLoad
を起動します)。 ブラウザ上では、command+R を押すことによってロードをトリガーするのはユーザー次第です。 状態をリセットしたり、正しく保存しない拡張機能によって重要な作業が失われるのを防ぐために、この方法でユーザーにロードの制御をさせます。
Decorating components
UI のすべてのピースに高次コンポーネントを提供する機能を提供します。
その構造は次のとおりです:
<Hyper> <Header> <Tabs> <Tab /> ... </Tabs> </Header> <Terms> <TermGroup> <SplitPane> <TermGroup> <Term /> ... </TermGroup> <TermGroup> <Term /> ... </TermGroup> </SplitPane> </TermGroup> </Terms> <Notifications> <Notification /> ... </Notifications></Hyper>
すべての decorate*
メソッドは、第2パラメーターとして渡されるオブジェクトで次の参照を受け取ります:
React |
React 名前空間全体です。 |
notify |
デスクトップ通知を表示するヘルパー関数です。 最初のパラメーターはタイトル、2 番目は通知のオプションの本文、3 番目は開発コンソールに詳細を記録するために使用できる別のオプションのパラメーターです。 これらの詳細を渡すには、単に、ログに記録する情報を含む |
すべてのコンポーネントは、そのマークアップを拡張するために次の 2 つのプロパティを受け入れます:
customChildren |
Element の配列またはコンポーネントの下部に挿入する単一の Element です。 |
customChildrenBefore |
上記のプロパティと同じですが、コンポーネントの最初の子要素(複数可)として挿入されます。 |
高次コンポーネントは、装飾されたコンポーネントに onDecorated
プロパティを供給して、そのインスタンスへの参照を取得することができます。
Term 高次コンポーネントは、カーソルが移動したときに呼び出される onCursorMove
handler プロパティを、Term の原点に対する相対位置を表すオブジェクト パラメータで提供することができます。
x |
ピクセル単位の水平位置 |
y |
ピクセル単位の垂直位置 |
width |
ピクセル単位のカーソル幅 |
height |
カーソルの高さ (ピクセル) |
col |
列での水平位置 |
row |
行での垂直位置 |
他のデコレーターと互換性を保つようお勧めします。 733>
For example, if you’re passing children, compose potential existing values:
render () { const customChildren = Array.from(this.props.customChildren) .concat(<p>My new child</p>); return <Tab {...this.props} customChildren={customChildren} />}
or if you use onDecorated
property
onDecorated (term) { this.term = term; if (this.props.onDecorated) { this.props.onDecorated(term); }}
Actions and Effects
All the Redux actions are available to you to handle through your middleware and reducers.The Reduxアクションは、あなたのミドルウェアとリデューサーを通して処理することができます。 733>
Side effects は 2 つの基本的な形式で発生します。
- 一部のアクションは、状態に基づいて他のアクションをディスパッチします。
- RPC チャネルを介してメイン プロセスと通信することにより、非同期処理を行うアクションもある
いずれの場合も、副作用はアクションの effect
キーとして渡され、後に当社のミドルウェアによって処理される
つまり、効果を上書き、合成、完全に排除できるのです! 言い換えると、このようにしてアプリのデフォルトの機能や動作を変更することができます。
例として、Command+=
を押したときにフォント サイズを大きくするために使用するアクションを考えてみましょう:
export function increaseFontSize () { return (dispatch, getState) => { dispatch({ type: UI_FONT_SIZE_INCR, effect () { const state = getState(); const old = state.ui.fontSizeOverride || state.ui.fontSize; const value = old + 1; dispatch({ type: UI_FONT_SIZE_SET, value }); } }); };}
The underlying terminal
Hyper
has a lot of its speed and functionality thanks of the power of xterm.js
追加 API
Electron app
オブジェクトは以下のプロパティで拡張されています:
config |
.hyper.js のconfig ブロックと Object です。 |
plugins |
プラグイン用のヘルパーを持つ Object 。 |
getWindows |
すべての開いているウィンドウの Set を返す Function 。 |
createWindow |
新規ウィンドウを作成する Function 。 新しいウィンドウのinit コールバックとして渡されるオプションのcallback を受け入れます。 |
電子BrowserWindow
オブジェクトは次のパラメータで拡張されます:
rpc |
ウィンドウプロセスとのコミュニケーションを可能にするEventEmitter です。 |
sessions |
各項のptyとの通信を保持するSession オブジェクトのMap です。 |
Renderer ウィンドウも同様に:
rpc |
ウィンドウ プロセスとのコミュニケーションを可能にする EventEmitter を拡張します。 |
store |
ブラウザとレンダリングプロセスで対称的なrpc
オブジェクトです。 API は Node.js と同じですが、パラメータとして単一のオブジェクトしか認めない点が異なります。
window.rpc.emit('hi there', { some: 'payload', any: });
Example theme: Hyperyellow
以下の拡張機能は、CSS と黄色を追加するように設定を変更するだけです! 以下はそのコードです。
テーマは単なるプラグインです! 必要なフックは decorateConfig
のみです:
exports.decorateConfig = (config) => { return Object.assign({}, config, { borderColor: 'yellow', cursorColor: 'yellow', css: ` ${config.css || ''} .tabs_nav .tabs_list .tab_text { color: yellow; } .tabs_nav .tabs_title { color: yellow; } ` });}
Devtools で用語を検査することにより、クラス名を取得しました。 その際、いくつかのクラスは自動的に生成され、ランダムな nonce が続くことに注意してください (例: term_13hv8io
)。 それらは無視してください: それらはすべての新しいウィンドウで変わります!
他の拡張機能とうまくやることに重点を置いていることに注目してください。 具体的には、新しいオブジェクトを作成し、関心のあるキーのみを拡張し、ユーザーの設定と他の作者の設定を維持するために CSS を構成します:
return Object.assign({}, config, { css: ` ${config.css || ''} /* your css here */ `});
Example extension: Hyperpower
The following extension renders particles as the caret moves:
Let’s walk through its code.
First, we intercept the Redux action SESSION_ADD_DATA
.この拡張機能では、パーティクルを移動して表示します。
exports.middleware = (store) => (next) => (action) => { if ('SESSION_ADD_DATA' === action.type) { const { data } = action; if (/bash: wow: command not found/.test(data)) { store.dispatch({ type: 'WOW_MODE_TOGGLE' }); } else { next(action); } } else { next(action); }};
アクションを再派遣しない、つまり、コマンドの出力をターミナルにレンダリングしないことに注意してください。 その代わりに、uiReducer
で取得し、後でマップする独自のアクションをディスパッチします。
exports.reduceUI = (state, action) => { switch (action.type) { case 'WOW_MODE_TOGGLE': return state.set('wowMode', !state.wowMode); } return state;};exports.mapTermsState = (state, map) => { return Object.assign(map, { wowMode: state.ui.wowMode });};
次に、基礎となるキャレットにアクセスできるように <Term>
コンポーネントを装飾します。
exports.getTermProps = (uid, parentProps, props) => { return Object.assign(props, { wowMode: parentProps.wowMode });}
次に、拡張機能は <Term>
をラップする高次のコンポーネントを返します。 ベースとなる Term コンポーネントとその DOM 参照にアクセスするために onDecorated
プロパティを渡し、Hyper カーソル API を使用するために onCursorMove
プロパティを渡していることに注意してください:
render () { return React.createElement(Term, Object.assign({}, this.props, { onDecorated: this._onDecorated, onCursorMove: this._onCursorMove }));}