gecore

package module
v0.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2026 License: MIT Imports: 18 Imported by: 4

README

gecore - Core Functionalities for ge Text Editor

gecore is a package that provides core functionalities for the ge text editor.

Features

  • Screen management: Handles screen rendering and updates.
  • Tree structure: Manages the hierarchical structure of text buffers.
  • Kill buffer: Provides functionality to delete or yank text.
  • Utility functions: Includes various utility functions used within the ge text editor.

License

This package is licensed under the MIT License.

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

View Source
const (
	EchoNormal activeFlag = iota
	EchoBlue
	EchoGreen
	EchoYellow
	EchoRed
)

Variables

View Source
var (
	WorkSpaces []string // directory
	Switches   []string // prefix -
	Files      []string
)

Arguments groups

Functions

func AppState added in v0.1.5

func AppState() *state

func InitQuitGuardManager added in v0.1.1

func InitQuitGuardManager(quit chan struct{})

func StateSave added in v0.1.5

func StateSave() error

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 Cancelable interface {
	Cancel()        // Ctrl-G
	IsActive() bool // 今キャンセル対象か
	Priority() int  // 小さいほど優先(0 が最優先)
}

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 (*EventCancelManager) IsCanceled added in v0.1.5

func (m *EventCancelManager) IsCanceled(ctx context.Context, key string) bool

func (*EventCancelManager) Rotate added in v0.1.5

func (m *EventCancelManager) Rotate(key string) context.Context

type GuardEventStatus added in v0.1.1

type GuardEventStatus int
const (
	EventWait GuardEventStatus = iota
	EventGaveUp
	EventReadyToClose
)

type GuardType added in v0.1.1

type GuardType int
const (
	GuardWaitResolved       GuardType = iota // 同期で1つずつ処理(UI応答など)
	GuardWaitResolvedSignal                  // 非同期で全体待機(バックグラウンド処理など)
)

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 (*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)

type QuitGuardResolver added in v0.1.1

type QuitGuardResolver interface {
	Priority() int

	Name() string
	Keys() *keychord.RootNode

	WillEnter()
	WillExit()
	Draw() bool
}

Directories

Path Synopsis
gecore/modes/redo_mode.go 最もシンプルなモード
gecore/modes/redo_mode.go 最もシンプルなモード
gecore/popupmenu/popupmenu.go
gecore/popupmenu/popupmenu.go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL