mui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +158 -0
  3. data/CHANGELOG.md +349 -0
  4. data/exe/mui +1 -2
  5. data/lib/mui/autocmd.rb +66 -0
  6. data/lib/mui/buffer.rb +275 -0
  7. data/lib/mui/buffer_word_cache.rb +131 -0
  8. data/lib/mui/buffer_word_completer.rb +77 -0
  9. data/lib/mui/color_manager.rb +136 -0
  10. data/lib/mui/color_scheme.rb +63 -0
  11. data/lib/mui/command_completer.rb +21 -0
  12. data/lib/mui/command_context.rb +90 -0
  13. data/lib/mui/command_line.rb +137 -0
  14. data/lib/mui/command_registry.rb +25 -0
  15. data/lib/mui/completion_renderer.rb +84 -0
  16. data/lib/mui/completion_state.rb +58 -0
  17. data/lib/mui/config.rb +56 -0
  18. data/lib/mui/editor.rb +319 -0
  19. data/lib/mui/error.rb +29 -0
  20. data/lib/mui/file_completer.rb +51 -0
  21. data/lib/mui/floating_window.rb +161 -0
  22. data/lib/mui/handler_result.rb +101 -0
  23. data/lib/mui/highlight.rb +22 -0
  24. data/lib/mui/highlighters/base.rb +23 -0
  25. data/lib/mui/highlighters/search_highlighter.rb +26 -0
  26. data/lib/mui/highlighters/selection_highlighter.rb +48 -0
  27. data/lib/mui/highlighters/syntax_highlighter.rb +105 -0
  28. data/lib/mui/input.rb +17 -0
  29. data/lib/mui/insert_completion_renderer.rb +92 -0
  30. data/lib/mui/insert_completion_state.rb +77 -0
  31. data/lib/mui/job.rb +81 -0
  32. data/lib/mui/job_manager.rb +113 -0
  33. data/lib/mui/key_code.rb +30 -0
  34. data/lib/mui/key_handler/base.rb +100 -0
  35. data/lib/mui/key_handler/command_mode.rb +443 -0
  36. data/lib/mui/key_handler/insert_mode.rb +354 -0
  37. data/lib/mui/key_handler/motions/motion_handler.rb +56 -0
  38. data/lib/mui/key_handler/normal_mode.rb +579 -0
  39. data/lib/mui/key_handler/operators/base_operator.rb +134 -0
  40. data/lib/mui/key_handler/operators/change_operator.rb +179 -0
  41. data/lib/mui/key_handler/operators/delete_operator.rb +176 -0
  42. data/lib/mui/key_handler/operators/paste_operator.rb +113 -0
  43. data/lib/mui/key_handler/operators/yank_operator.rb +127 -0
  44. data/lib/mui/key_handler/search_mode.rb +188 -0
  45. data/lib/mui/key_handler/visual_line_mode.rb +20 -0
  46. data/lib/mui/key_handler/visual_mode.rb +397 -0
  47. data/lib/mui/key_handler/window_command.rb +112 -0
  48. data/lib/mui/key_handler.rb +16 -0
  49. data/lib/mui/layout/calculator.rb +15 -0
  50. data/lib/mui/layout/leaf_node.rb +33 -0
  51. data/lib/mui/layout/node.rb +29 -0
  52. data/lib/mui/layout/split_node.rb +132 -0
  53. data/lib/mui/line_renderer.rb +122 -0
  54. data/lib/mui/mode.rb +13 -0
  55. data/lib/mui/mode_manager.rb +185 -0
  56. data/lib/mui/motion.rb +139 -0
  57. data/lib/mui/plugin.rb +35 -0
  58. data/lib/mui/plugin_manager.rb +106 -0
  59. data/lib/mui/register.rb +110 -0
  60. data/lib/mui/screen.rb +85 -0
  61. data/lib/mui/search_completer.rb +50 -0
  62. data/lib/mui/search_input.rb +40 -0
  63. data/lib/mui/search_state.rb +88 -0
  64. data/lib/mui/selection.rb +55 -0
  65. data/lib/mui/status_line_renderer.rb +40 -0
  66. data/lib/mui/syntax/language_detector.rb +74 -0
  67. data/lib/mui/syntax/lexer_base.rb +106 -0
  68. data/lib/mui/syntax/lexers/c_lexer.rb +127 -0
  69. data/lib/mui/syntax/lexers/ruby_lexer.rb +114 -0
  70. data/lib/mui/syntax/token.rb +42 -0
  71. data/lib/mui/syntax/token_cache.rb +91 -0
  72. data/lib/mui/tab_bar_renderer.rb +87 -0
  73. data/lib/mui/tab_manager.rb +96 -0
  74. data/lib/mui/tab_page.rb +35 -0
  75. data/lib/mui/terminal_adapter/base.rb +92 -0
  76. data/lib/mui/terminal_adapter/curses.rb +162 -0
  77. data/lib/mui/terminal_adapter.rb +4 -0
  78. data/lib/mui/themes/default.rb +315 -0
  79. data/lib/mui/undo_manager.rb +83 -0
  80. data/lib/mui/undoable_action.rb +175 -0
  81. data/lib/mui/unicode_width.rb +100 -0
  82. data/lib/mui/version.rb +1 -1
  83. data/lib/mui/window.rb +158 -0
  84. data/lib/mui/window_manager.rb +249 -0
  85. data/lib/mui.rb +156 -2
  86. metadata +98 -3
data/lib/mui.rb CHANGED
@@ -1,8 +1,162 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "mui/version"
4
+ require_relative "mui/error"
5
+ require_relative "mui/key_code"
6
+ require_relative "mui/unicode_width"
7
+ require_relative "mui/config"
8
+ require_relative "mui/color_scheme"
9
+ require_relative "mui/color_manager"
10
+ require_relative "mui/themes/default"
11
+ require_relative "mui/terminal_adapter"
12
+ require_relative "mui/screen"
13
+ require_relative "mui/input"
14
+ require_relative "mui/undoable_action"
15
+ require_relative "mui/undo_manager"
16
+ require_relative "mui/buffer"
17
+ require_relative "mui/highlight"
18
+ require_relative "mui/highlighters/base"
19
+ require_relative "mui/highlighters/selection_highlighter"
20
+ require_relative "mui/highlighters/search_highlighter"
21
+ require_relative "mui/syntax/token"
22
+ require_relative "mui/syntax/lexer_base"
23
+ require_relative "mui/syntax/lexers/ruby_lexer"
24
+ require_relative "mui/syntax/lexers/c_lexer"
25
+ require_relative "mui/syntax/token_cache"
26
+ require_relative "mui/syntax/language_detector"
27
+ require_relative "mui/highlighters/syntax_highlighter"
28
+ require_relative "mui/line_renderer"
29
+ require_relative "mui/status_line_renderer"
30
+ require_relative "mui/layout/node"
31
+ require_relative "mui/layout/leaf_node"
32
+ require_relative "mui/layout/split_node"
33
+ require_relative "mui/layout/calculator"
34
+ require_relative "mui/window"
35
+ require_relative "mui/window_manager"
36
+ require_relative "mui/tab_page"
37
+ require_relative "mui/tab_manager"
38
+ require_relative "mui/tab_bar_renderer"
39
+ require_relative "mui/mode"
40
+ require_relative "mui/handler_result"
41
+ require_relative "mui/command_line"
42
+ require_relative "mui/completion_state"
43
+ require_relative "mui/insert_completion_state"
44
+ require_relative "mui/command_completer"
45
+ require_relative "mui/file_completer"
46
+ require_relative "mui/buffer_word_completer"
47
+ require_relative "mui/buffer_word_cache"
48
+ require_relative "mui/completion_renderer"
49
+ require_relative "mui/insert_completion_renderer"
50
+ require_relative "mui/floating_window"
51
+ require_relative "mui/search_state"
52
+ require_relative "mui/search_input"
53
+ require_relative "mui/search_completer"
54
+ require_relative "mui/motion"
55
+ require_relative "mui/selection"
56
+ require_relative "mui/register"
57
+ require_relative "mui/key_handler"
58
+ require_relative "mui/mode_manager"
59
+ require_relative "mui/command_context"
60
+ require_relative "mui/command_registry"
61
+ require_relative "mui/autocmd"
62
+ require_relative "mui/plugin"
63
+ require_relative "mui/plugin_manager"
64
+ require_relative "mui/job"
65
+ require_relative "mui/job_manager"
66
+ require_relative "mui/editor"
4
67
 
68
+ # mui(無為) top level module
5
69
  module Mui
6
- class Error < StandardError; end
7
- # Your code goes here...
70
+ class << self
71
+ def config
72
+ @config ||= Config.new
73
+ end
74
+
75
+ def plugin_manager
76
+ @plugin_manager ||= PluginManager.new
77
+ end
78
+
79
+ def register
80
+ @register ||= Register.new
81
+ end
82
+
83
+ def set(key, value)
84
+ config.set(key, value)
85
+ end
86
+
87
+ # Register gem for lazy installation via bundler/inline
88
+ def use(gem_name, version = nil)
89
+ plugin_manager.add_gem(gem_name, version)
90
+ end
91
+
92
+ def keymap(mode, key, &block)
93
+ config.add_keymap(mode, key, block)
94
+ end
95
+
96
+ def command(name, &block)
97
+ config.add_command(name, block)
98
+ end
99
+
100
+ def autocmd(event, pattern: nil, &block)
101
+ config.add_autocmd(event, pattern, block)
102
+ end
103
+
104
+ def define_plugin(name, dependencies: [], &block)
105
+ plugin_manager.register(name, block, dependencies:)
106
+ end
107
+
108
+ def load_config
109
+ config.load_file(File.expand_path("~/.muirc"))
110
+ config.load_file(".lmuirc")
111
+ end
112
+
113
+ # Stub for LSP configuration DSL
114
+ # This allows .muirc to call Mui.lsp { ... } before mui-lsp gem is loaded
115
+ # When mui-lsp is loaded, it replaces this with the real ConfigDsl
116
+ def lsp(&block)
117
+ @lsp_config ||= LspConfigStub.new
118
+ @lsp_config.instance_eval(&block) if block
119
+ @lsp_config
120
+ end
121
+
122
+ def lsp_server_configs
123
+ @lsp_config&.server_configs || []
124
+ end
125
+ end
126
+
127
+ # Stub class for LSP configuration before mui-lsp gem is loaded
128
+ # Stores configuration to be applied when the actual gem loads
129
+ class LspConfigStub
130
+ attr_reader :server_configs
131
+
132
+ def initialize
133
+ @server_configs = []
134
+ end
135
+
136
+ # Stub methods that mirror Mui::Lsp::ConfigDsl
137
+ def use(name, **options)
138
+ @server_configs << { type: :preset, name: name.to_sym, options: }
139
+ end
140
+
141
+ def server(name:, command:, language_ids:, file_patterns:, auto_start: true, sync_on_change: true)
142
+ @server_configs << {
143
+ type: :custom,
144
+ name:,
145
+ command:,
146
+ language_ids:,
147
+ file_patterns:,
148
+ auto_start:,
149
+ sync_on_change:
150
+ }
151
+ end
152
+ end
153
+
154
+ class << self
155
+ def reset_config!
156
+ @config = nil
157
+ @plugin_manager = nil
158
+ @register = nil
159
+ @lsp_config = nil
160
+ end
161
+ end
8
162
  end
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - S-H-GAMELINKS
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: curses
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
12
26
  description: Mui (無為) is a Vim-like TUI text editor written in Ruby. Inspired by the
13
27
  concept of 'wu wei' (effortless action), it aims to be a minimal yet extensible
14
28
  editor.
@@ -19,13 +33,93 @@ executables:
19
33
  extensions: []
20
34
  extra_rdoc_files: []
21
35
  files:
36
+ - ".rubocop_todo.yml"
22
37
  - CHANGELOG.md
23
38
  - LICENSE.txt
24
39
  - README.md
25
40
  - Rakefile
26
41
  - exe/mui
27
42
  - lib/mui.rb
43
+ - lib/mui/autocmd.rb
44
+ - lib/mui/buffer.rb
45
+ - lib/mui/buffer_word_cache.rb
46
+ - lib/mui/buffer_word_completer.rb
47
+ - lib/mui/color_manager.rb
48
+ - lib/mui/color_scheme.rb
49
+ - lib/mui/command_completer.rb
50
+ - lib/mui/command_context.rb
51
+ - lib/mui/command_line.rb
52
+ - lib/mui/command_registry.rb
53
+ - lib/mui/completion_renderer.rb
54
+ - lib/mui/completion_state.rb
55
+ - lib/mui/config.rb
56
+ - lib/mui/editor.rb
57
+ - lib/mui/error.rb
58
+ - lib/mui/file_completer.rb
59
+ - lib/mui/floating_window.rb
60
+ - lib/mui/handler_result.rb
61
+ - lib/mui/highlight.rb
62
+ - lib/mui/highlighters/base.rb
63
+ - lib/mui/highlighters/search_highlighter.rb
64
+ - lib/mui/highlighters/selection_highlighter.rb
65
+ - lib/mui/highlighters/syntax_highlighter.rb
66
+ - lib/mui/input.rb
67
+ - lib/mui/insert_completion_renderer.rb
68
+ - lib/mui/insert_completion_state.rb
69
+ - lib/mui/job.rb
70
+ - lib/mui/job_manager.rb
71
+ - lib/mui/key_code.rb
72
+ - lib/mui/key_handler.rb
73
+ - lib/mui/key_handler/base.rb
74
+ - lib/mui/key_handler/command_mode.rb
75
+ - lib/mui/key_handler/insert_mode.rb
76
+ - lib/mui/key_handler/motions/motion_handler.rb
77
+ - lib/mui/key_handler/normal_mode.rb
78
+ - lib/mui/key_handler/operators/base_operator.rb
79
+ - lib/mui/key_handler/operators/change_operator.rb
80
+ - lib/mui/key_handler/operators/delete_operator.rb
81
+ - lib/mui/key_handler/operators/paste_operator.rb
82
+ - lib/mui/key_handler/operators/yank_operator.rb
83
+ - lib/mui/key_handler/search_mode.rb
84
+ - lib/mui/key_handler/visual_line_mode.rb
85
+ - lib/mui/key_handler/visual_mode.rb
86
+ - lib/mui/key_handler/window_command.rb
87
+ - lib/mui/layout/calculator.rb
88
+ - lib/mui/layout/leaf_node.rb
89
+ - lib/mui/layout/node.rb
90
+ - lib/mui/layout/split_node.rb
91
+ - lib/mui/line_renderer.rb
92
+ - lib/mui/mode.rb
93
+ - lib/mui/mode_manager.rb
94
+ - lib/mui/motion.rb
95
+ - lib/mui/plugin.rb
96
+ - lib/mui/plugin_manager.rb
97
+ - lib/mui/register.rb
98
+ - lib/mui/screen.rb
99
+ - lib/mui/search_completer.rb
100
+ - lib/mui/search_input.rb
101
+ - lib/mui/search_state.rb
102
+ - lib/mui/selection.rb
103
+ - lib/mui/status_line_renderer.rb
104
+ - lib/mui/syntax/language_detector.rb
105
+ - lib/mui/syntax/lexer_base.rb
106
+ - lib/mui/syntax/lexers/c_lexer.rb
107
+ - lib/mui/syntax/lexers/ruby_lexer.rb
108
+ - lib/mui/syntax/token.rb
109
+ - lib/mui/syntax/token_cache.rb
110
+ - lib/mui/tab_bar_renderer.rb
111
+ - lib/mui/tab_manager.rb
112
+ - lib/mui/tab_page.rb
113
+ - lib/mui/terminal_adapter.rb
114
+ - lib/mui/terminal_adapter/base.rb
115
+ - lib/mui/terminal_adapter/curses.rb
116
+ - lib/mui/themes/default.rb
117
+ - lib/mui/undo_manager.rb
118
+ - lib/mui/undoable_action.rb
119
+ - lib/mui/unicode_width.rb
28
120
  - lib/mui/version.rb
121
+ - lib/mui/window.rb
122
+ - lib/mui/window_manager.rb
29
123
  - sig/mui.rbs
30
124
  homepage: https://github.com/S-H-GAMELINKS/mui
31
125
  licenses:
@@ -35,6 +129,7 @@ metadata:
35
129
  homepage_uri: https://github.com/S-H-GAMELINKS/mui
36
130
  source_code_uri: https://github.com/S-H-GAMELINKS/mui
37
131
  changelog_uri: https://github.com/S-H-GAMELINKS/mui/blob/main/CHANGELOG.md
132
+ rubygems_mfa_required: 'true'
38
133
  rdoc_options: []
39
134
  require_paths:
40
135
  - lib
@@ -49,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
144
  - !ruby/object:Gem::Version
50
145
  version: '0'
51
146
  requirements: []
52
- rubygems_version: 4.0.0.beta2
147
+ rubygems_version: 3.6.9
53
148
  specification_version: 4
54
149
  summary: Mui - A Vim-like TUI editor written in Ruby
55
150
  test_files: []