Documentation
¶
Overview ¶
gecore/cancelable_manager.go
gecore/echo.go
gecore/keylayer.go
KeyLayer はキーイベント処理の「優先度付き多段パイプライン」を 明示的なデータとして表現する。
これまで ge/key_dispatcher.go の dispatch() 関数に直列 if/switch として ベタ書きされていた
cancelKeyOnly -> macro -> globalKey -> minibuffer -> mode -> leaf
という6段のキー階層を、優先度 (Priority) を持つレイヤーのリストとして 明示化する。設計思想は gecore/cancelable_manager.go の CancelManager と 同型 (Priority() を持つハンドラを登録し、上位から順に試す) であり、 新しいパターンを持ち込むのではなく既存の設計を転用したもの。
各レイヤーは内部で好きなだけ keychord.RootNode を使ってよい。 KeyLayerManager はレイヤー同士の「優先順位」と「排他性」だけを扱う。
Index ¶
- Constants
- Variables
- func AppState() *state
- func InitQuitGuardManager(quit chan struct{})
- func StateSave() error
- type CancelManagerStruct
- type Cancelable
- type EchoStruct
- func (e *EchoStruct) AddText(s ...string) *chainStruct
- func (e *EchoStruct) Clear()
- func (e *EchoStruct) Draw() bool
- func (e *EchoStruct) IsActive() bool
- func (e *EchoStruct) RequiredHeight() int
- func (e *EchoStruct) Resize(overlayRect screen.Rect)
- func (e *EchoStruct) SetText(s string) *chainStruct
- func (e *EchoStruct) UniversalCancel()
- type EventCancelManager
- func (m *EventCancelManager) Cancel(key string) context.Context
- func (m *EventCancelManager) CancelAll()
- func (m *EventCancelManager) Get(key string) context.Context
- func (m *EventCancelManager) IsCanceled(ctx context.Context, key string) bool
- func (m *EventCancelManager) Rotate(key string) context.Context
- type GuardEventStatus
- type GuardType
- type KeyLayer
- type KeyLayerManagerStruct
- type KeyStatusFunc
- type MacroModeStruct
- func (m *MacroModeStruct) AbortRecording()
- func (m *MacroModeStruct) Append(ev tcell.EventKey)
- func (m *MacroModeStruct) CurrentMode() mode.Mode
- func (m *MacroModeStruct) Draw()
- func (m *MacroModeStruct) Keys() *keychord.RootNode
- func (m *MacroModeStruct) Name() string
- func (m *MacroModeStruct) Replay()
- func (m *MacroModeStruct) StartRecording()
- func (m *MacroModeStruct) StopRecording()
- func (m *MacroModeStruct) WillEnter()
- func (m *MacroModeStruct) WillExit()
- type QuitGuardManagerStruct
- func (q *QuitGuardManagerStruct) CurrentQuitGuardResolver() QuitGuardResolver
- func (q *QuitGuardManagerStruct) ExitApp()
- func (q *QuitGuardManagerStruct) HandleNextResolver()
- func (q *QuitGuardManagerStruct) Register(c QuitGuardResolver, t GuardType)
- func (q *QuitGuardManagerStruct) Reset(result GuardEventStatus)
- func (q *QuitGuardManagerStruct) Unregister(c QuitGuardResolver)
- type QuitGuardResolver
Constants ¶
const ( EchoNormal activeFlag = iota EchoBlue EchoGreen EchoYellow EchoRed )
Variables ¶
var ( WorkSpaces []string // directory Switches []string // prefix - Files []string )
Arguments groups
Functions ¶
func InitQuitGuardManager ¶ added in v0.1.1
func InitQuitGuardManager(quit chan struct{})
Types ¶
type CancelManagerStruct ¶ added in v0.1.1
type CancelManagerStruct struct {
// contains filtered or unexported fields
}
func CancelManager ¶ added in v0.1.1
func CancelManager() *CancelManagerStruct
func (*CancelManagerStruct) CancelAll ¶ added in v0.1.1
func (m *CancelManagerStruct) CancelAll()
func (*CancelManagerStruct) CancelTop ¶ added in v0.1.1
func (m *CancelManagerStruct) CancelTop() bool
func (*CancelManagerStruct) Register ¶ added in v0.1.1
func (m *CancelManagerStruct) Register(c Cancelable)
Manager を Cancelable として登録する Cancelable = Manager Session = 状態 Popupmenu / Editorleaf = 部品 Cancel / Close / Dispatch 集約点は CancelManager
func (*CancelManagerStruct) Unregister ¶ added in v0.1.1
func (m *CancelManagerStruct) Unregister(c Cancelable)
type Cancelable ¶ added in v0.1.1
type EchoStruct ¶ added in v0.1.1
type EchoStruct struct {
// contains filtered or unexported fields
}
Required implement Overlay interface
var Echo *EchoStruct = NewEcho()
func NewEcho ¶ added in v0.1.1
func NewEcho() *EchoStruct
func (*EchoStruct) AddText ¶ added in v0.1.1
func (e *EchoStruct) AddText(s ...string) *chainStruct
func (*EchoStruct) Clear ¶ added in v0.1.1
func (e *EchoStruct) Clear()
func (*EchoStruct) Draw ¶ added in v0.1.1
func (e *EchoStruct) Draw() bool
func (*EchoStruct) IsActive ¶ added in v0.1.1
func (e *EchoStruct) IsActive() bool
Overlay interface
func (*EchoStruct) RequiredHeight ¶ added in v0.1.1
func (e *EchoStruct) RequiredHeight() int
Overlay interface
func (*EchoStruct) Resize ¶ added in v0.1.1
func (e *EchoStruct) Resize(overlayRect screen.Rect)
func (*EchoStruct) SetText ¶ added in v0.1.1
func (e *EchoStruct) SetText(s string) *chainStruct
func (*EchoStruct) UniversalCancel ¶ added in v0.1.1
func (e *EchoStruct) UniversalCancel()
type EventCancelManager ¶ added in v0.1.5
type EventCancelManager struct {
// contains filtered or unexported fields
}
func NewEventCancelManager ¶ added in v0.1.5
func NewEventCancelManager(parent context.Context) *EventCancelManager
func (*EventCancelManager) Cancel ¶ added in v0.1.5
func (m *EventCancelManager) Cancel(key string) context.Context
func (*EventCancelManager) CancelAll ¶ added in v0.1.5
func (m *EventCancelManager) CancelAll()
func (*EventCancelManager) Get ¶ added in v0.1.5
func (m *EventCancelManager) Get(key string) context.Context
func (*EventCancelManager) IsCanceled ¶ added in v0.1.5
func (m *EventCancelManager) IsCanceled(ctx context.Context, key string) bool
type GuardEventStatus ¶ added in v0.1.1
type GuardEventStatus int
const ( EventWait GuardEventStatus = iota EventGaveUp EventReadyToClose )
type KeyLayer ¶ added in v0.1.6
type KeyLayer interface {
// UI 表示やログに使うレイヤー名
Name() string
// このレイヤーが今キー入力を受け付ける状態か。
// false ならこのレイヤーは丸ごとスキップされ、Dispatch は呼ばれない。
Active() bool
// Dispatch が DispatchNotFound / DispatchPrefix / DispatchInvalidAfterPrefix
// を返したとき、後続のレイヤーへイベントを流してよいかどうか。
//
// true (排他) の場合、後続レイヤー (リーフの自己挿入を含む) には
// 一切イベントを渡さない。
//
// 例:
// - cancelKeyOnly : false (Ctrl+G 以外は普通に下へ流れてほしい)
// - macro : false (C-x e e e... の連続リプレイを妨げないため)
// - globalKey : false (該当しなければ普通の編集キーとして下へ流す)
// - minibuffer : IsActive() と同じ (アクティブなら排他)
// - mode (modeManager): IsInMode() と同じ
// (Push されたモード中は他のキー階層/リーフへ絶対漏らさない。
// 旧実装は Prefix/NotFound を無条件に下へ流していたため、
// LeafOpMode 中の未知キーがリーフの自己挿入に抜けるバグがあった)
// - leaf : true (最終防衛ライン。ここで必ず消費される)
Exclusive() bool
// 優先度。小さいほど先に試される。
Priority() int
// 実際のディスパッチ。string は echo 表示用のキー状態文字列
// (RootNode.Dispatch がそのまま返すものをそのまま使えばよい)。
Dispatch(ev tcell.EventKey) (string, keychord.KeyDispatchTransition)
}
KeyLayer は、キーディスパッチパイプラインの1段を表す。
type KeyLayerManagerStruct ¶ added in v0.1.6
type KeyLayerManagerStruct struct {
// contains filtered or unexported fields
}
func KeyLayerManager ¶ added in v0.1.6
func KeyLayerManager() *KeyLayerManagerStruct
func (*KeyLayerManagerStruct) Dispatch ¶ added in v0.1.6
func (m *KeyLayerManagerStruct) Dispatch(ev tcell.EventKey, onStatus KeyStatusFunc)
Dispatch は登録済みレイヤーを優先度順に試し、 最初に「イベントを消費した」レイヤーで処理を止める。
旧 dispatch() 関数の6段 if/switch を置き換えるのがこの1メソッド。
func (*KeyLayerManagerStruct) Layers ¶ added in v0.1.6
func (m *KeyLayerManagerStruct) Layers() []KeyLayer
Layers はデバッグ表示用に現在の登録順序を返す。
func (*KeyLayerManagerStruct) Register ¶ added in v0.1.6
func (m *KeyLayerManagerStruct) Register(l KeyLayer)
Register はレイヤーを優先度順(昇順)に挿入する。 userleaf など将来の拡張は、ここに自分のレイヤーを Register するだけで パイプラインに参加できる (ge/key_dispatcher.go 本体を触らずに済む)。
func (*KeyLayerManagerStruct) Reset ¶ added in v0.1.6
func (m *KeyLayerManagerStruct) Reset()
type KeyStatusFunc ¶ added in v0.1.6
type KeyStatusFunc func(layer KeyLayer, status string, res keychord.KeyDispatchTransition)
KeyStatusFunc はレイヤーの結果を通知するコールバック。 旧 `prefix []string` パッケージグローバル変数が担っていた echo 表示用の副作用を、呼び出し側 (ge パッケージ) に一本化して渡すためのもの。
注意: 各 keychord.RootNode は内部で既に "C-x" のような キー状態文字列を蓄積して Dispatch の戻り値として返しているため、 dispatch() 側で改めてグローバル変数に再集計する必要はない。
type MacroModeStruct ¶ added in v0.1.1
type MacroModeStruct struct {
ModeManager *mode.Manager
RootNode *keychord.RootNode
// contains filtered or unexported fields
}
func NewMacroMode ¶ added in v0.1.1
func NewMacroMode(mm *mode.Manager, key func(*keychord.RootNode, *MacroModeStruct), dispatch func(tcell.EventKey)) *MacroModeStruct
func (*MacroModeStruct) AbortRecording ¶ added in v0.1.1
func (m *MacroModeStruct) AbortRecording()
func (*MacroModeStruct) Append ¶ added in v0.1.1
func (m *MacroModeStruct) Append(ev tcell.EventKey)
func (*MacroModeStruct) CurrentMode ¶ added in v0.1.1
func (m *MacroModeStruct) CurrentMode() mode.Mode
--- Mode pointer ---
func (*MacroModeStruct) Draw ¶ added in v0.1.1
func (m *MacroModeStruct) Draw()
func (*MacroModeStruct) Keys ¶ added in v0.1.1
func (m *MacroModeStruct) Keys() *keychord.RootNode
func (*MacroModeStruct) Name ¶ added in v0.1.1
func (m *MacroModeStruct) Name() string
--- Mode interface ---
func (*MacroModeStruct) Replay ¶ added in v0.1.1
func (m *MacroModeStruct) Replay()
func (*MacroModeStruct) StartRecording ¶ added in v0.1.1
func (m *MacroModeStruct) StartRecording()
--- Macro functions ---
func (*MacroModeStruct) StopRecording ¶ added in v0.1.1
func (m *MacroModeStruct) StopRecording()
func (*MacroModeStruct) WillEnter ¶ added in v0.1.1
func (m *MacroModeStruct) WillEnter()
func (*MacroModeStruct) WillExit ¶ added in v0.1.1
func (m *MacroModeStruct) WillExit()
type QuitGuardManagerStruct ¶ added in v0.1.1
type QuitGuardManagerStruct struct {
// contains filtered or unexported fields
}
var ( QuitGuardManager *QuitGuardManagerStruct = &QuitGuardManagerStruct{ timeout: 10 * time.Second, } )
func (*QuitGuardManagerStruct) CurrentQuitGuardResolver ¶ added in v0.1.1
func (q *QuitGuardManagerStruct) CurrentQuitGuardResolver() QuitGuardResolver
func (*QuitGuardManagerStruct) ExitApp ¶ added in v0.1.1
func (q *QuitGuardManagerStruct) ExitApp()
func (*QuitGuardManagerStruct) HandleNextResolver ¶ added in v0.1.1
func (q *QuitGuardManagerStruct) HandleNextResolver()
func (*QuitGuardManagerStruct) Register ¶ added in v0.1.1
func (q *QuitGuardManagerStruct) Register(c QuitGuardResolver, t GuardType)
func (*QuitGuardManagerStruct) Reset ¶ added in v0.1.1
func (q *QuitGuardManagerStruct) Reset(result GuardEventStatus)
func (*QuitGuardManagerStruct) Unregister ¶ added in v0.1.1
func (q *QuitGuardManagerStruct) Unregister(c QuitGuardResolver)