amun 0.1.3 → 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.
- checksums.yaml +5 -5
- data/.rspec +1 -0
- data/.rubocop.yml +6 -1
- data/.ruby-version +1 -1
- data/Guardfile +26 -6
- data/README.md +1 -0
- data/Rakefile +4 -6
- data/_config.yml +1 -0
- data/amun.gemspec +6 -5
- data/exe/amun +1 -1
- data/lib/amun/application.rb +11 -5
- data/lib/amun/behaviours/emacs.rb +14 -122
- data/lib/amun/behaviours/erasing.rb +67 -0
- data/lib/amun/behaviours/insertion.rb +22 -0
- data/lib/amun/behaviours/movement.rb +83 -0
- data/lib/amun/buffer.rb +103 -0
- data/lib/amun/event_manager.rb +12 -3
- data/lib/amun/features/echo_event.rb +4 -1
- data/lib/amun/features/files.rb +26 -0
- data/lib/amun/helpers/colors.rb +8 -7
- data/lib/amun/helpers/keyboard.rb +25 -8
- data/lib/amun/major_modes/fundamental.rb +8 -40
- data/lib/amun/major_modes/irb.rb +40 -0
- data/lib/amun/mode_line_segments/buffer_name.rb +10 -0
- data/lib/amun/mode_line_segments/major_mode.rb +11 -0
- data/lib/amun/object.rb +21 -0
- data/lib/amun/primitives/rect.rb +15 -0
- data/lib/amun/version.rb +1 -1
- data/lib/amun/windows/base.rb +42 -0
- data/lib/amun/windows/buffer_window.rb +73 -0
- data/lib/amun/windows/echo_area.rb +34 -0
- data/lib/amun/windows/frame.rb +92 -0
- data/lib/amun/windows/mini_buffer_window.rb +126 -0
- data/lib/amun/windows/mode_line.rb +50 -0
- data/lib/amun/windows/text_renderer.rb +41 -0
- metadata +56 -31
- data/lib/amun/ui/buffer.rb +0 -90
- data/lib/amun/ui/echo_area.rb +0 -42
- data/lib/amun/ui/mode_line.rb +0 -44
- data/lib/amun/ui/mode_line_segments/buffer_name.rb +0 -16
- data/lib/amun/ui/mode_line_segments/major_mode.rb +0 -17
- data/lib/amun/ui/windows/buffer_window.rb +0 -40
- data/lib/amun/ui/windows/frame.rb +0 -75
metadata
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: amun
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Emad Elsaid
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-08-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: curses
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -53,21 +53,21 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '10.0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: pry
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: guard
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - ">="
|
|
@@ -81,7 +81,21 @@ dependencies:
|
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: rspec
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rspec-its
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
86
100
|
requirements:
|
|
87
101
|
- - ">="
|
|
@@ -95,7 +109,7 @@ dependencies:
|
|
|
95
109
|
- !ruby/object:Gem::Version
|
|
96
110
|
version: '0'
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: guard-
|
|
112
|
+
name: guard-rspec
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
100
114
|
requirements:
|
|
101
115
|
- - ">="
|
|
@@ -141,13 +155,14 @@ description: A CLI editor built to have an Emacs similar development environment
|
|
|
141
155
|
and extensions faster and more enjoyable, this editor is kept to the minimum, anything
|
|
142
156
|
that could be written as an pluging will be found as a plugin.
|
|
143
157
|
email:
|
|
144
|
-
-
|
|
158
|
+
- emad.elsaid.hamed@gmail.com
|
|
145
159
|
executables:
|
|
146
160
|
- amun
|
|
147
161
|
extensions: []
|
|
148
162
|
extra_rdoc_files: []
|
|
149
163
|
files:
|
|
150
164
|
- ".gitignore"
|
|
165
|
+
- ".rspec"
|
|
151
166
|
- ".rubocop.yml"
|
|
152
167
|
- ".ruby-version"
|
|
153
168
|
- ".travis.yml"
|
|
@@ -156,32 +171,43 @@ files:
|
|
|
156
171
|
- LICENSE.txt
|
|
157
172
|
- README.md
|
|
158
173
|
- Rakefile
|
|
174
|
+
- _config.yml
|
|
159
175
|
- amun.gemspec
|
|
160
176
|
- bin/console
|
|
161
177
|
- exe/amun
|
|
162
178
|
- lib/amun.rb
|
|
163
179
|
- lib/amun/application.rb
|
|
164
180
|
- lib/amun/behaviours/emacs.rb
|
|
181
|
+
- lib/amun/behaviours/erasing.rb
|
|
182
|
+
- lib/amun/behaviours/insertion.rb
|
|
183
|
+
- lib/amun/behaviours/movement.rb
|
|
184
|
+
- lib/amun/buffer.rb
|
|
165
185
|
- lib/amun/event_manager.rb
|
|
166
186
|
- lib/amun/features/echo_event.rb
|
|
187
|
+
- lib/amun/features/files.rb
|
|
167
188
|
- lib/amun/features/quit.rb
|
|
168
189
|
- lib/amun/features_loader.rb
|
|
169
190
|
- lib/amun/helpers/colors.rb
|
|
170
191
|
- lib/amun/helpers/keyboard.rb
|
|
171
192
|
- lib/amun/major_modes/fundamental.rb
|
|
172
|
-
- lib/amun/
|
|
173
|
-
- lib/amun/
|
|
174
|
-
- lib/amun/
|
|
175
|
-
- lib/amun/
|
|
176
|
-
- lib/amun/
|
|
177
|
-
- lib/amun/ui/windows/buffer_window.rb
|
|
178
|
-
- lib/amun/ui/windows/frame.rb
|
|
193
|
+
- lib/amun/major_modes/irb.rb
|
|
194
|
+
- lib/amun/mode_line_segments/buffer_name.rb
|
|
195
|
+
- lib/amun/mode_line_segments/major_mode.rb
|
|
196
|
+
- lib/amun/object.rb
|
|
197
|
+
- lib/amun/primitives/rect.rb
|
|
179
198
|
- lib/amun/version.rb
|
|
199
|
+
- lib/amun/windows/base.rb
|
|
200
|
+
- lib/amun/windows/buffer_window.rb
|
|
201
|
+
- lib/amun/windows/echo_area.rb
|
|
202
|
+
- lib/amun/windows/frame.rb
|
|
203
|
+
- lib/amun/windows/mini_buffer_window.rb
|
|
204
|
+
- lib/amun/windows/mode_line.rb
|
|
205
|
+
- lib/amun/windows/text_renderer.rb
|
|
180
206
|
homepage: http://www.github.com/blazeeboy/amun
|
|
181
207
|
licenses:
|
|
182
208
|
- MIT
|
|
183
209
|
metadata: {}
|
|
184
|
-
post_install_message:
|
|
210
|
+
post_install_message:
|
|
185
211
|
rdoc_options: []
|
|
186
212
|
require_paths:
|
|
187
213
|
- lib
|
|
@@ -196,9 +222,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
196
222
|
- !ruby/object:Gem::Version
|
|
197
223
|
version: '0'
|
|
198
224
|
requirements: []
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
signing_key:
|
|
225
|
+
rubygems_version: 3.0.3
|
|
226
|
+
signing_key:
|
|
202
227
|
specification_version: 4
|
|
203
228
|
summary: Emacs like editor, with Ruby core instead of ELisp
|
|
204
229
|
test_files: []
|
data/lib/amun/ui/buffer.rb
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
require 'amun/event_manager'
|
|
3
|
-
require 'amun/major_modes/fundamental'
|
|
4
|
-
require 'amun/ui/mode_line'
|
|
5
|
-
|
|
6
|
-
module Amun
|
|
7
|
-
module UI
|
|
8
|
-
# A buffer could present any kind of IO object (File, StringIO...etc)
|
|
9
|
-
# also it has a major mode responsible update lines and visual lines
|
|
10
|
-
class Buffer
|
|
11
|
-
attr_accessor :name, :io, :text
|
|
12
|
-
attr_writer :major_mode, :minor_modes, :mode_line, :point, :mark
|
|
13
|
-
|
|
14
|
-
def initialize(name, io = StringIO.new)
|
|
15
|
-
self.io = io
|
|
16
|
-
self.name = name
|
|
17
|
-
self.point = 0
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def major_mode
|
|
21
|
-
@major_mode ||= MajorModes::Fundamental.new(self)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def mode_line
|
|
25
|
-
@mode_line ||= UI::ModeLine.new(self)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def minor_modes
|
|
29
|
-
@minor_modes ||= Set.new
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def point
|
|
33
|
-
return 0 if @point < 0
|
|
34
|
-
max = text.size
|
|
35
|
-
return max if @point > max
|
|
36
|
-
@point
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def mark
|
|
40
|
-
return 0 if @mark < 0
|
|
41
|
-
max = text.size
|
|
42
|
-
return max if @mark > max
|
|
43
|
-
@mark
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def trigger(event)
|
|
47
|
-
EventManager.join(
|
|
48
|
-
event,
|
|
49
|
-
*(minor_modes + [major_mode])
|
|
50
|
-
)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def render(window)
|
|
54
|
-
major_mode_window = window.subwin(window.maxy - 1, window.maxx, 0, 0)
|
|
55
|
-
mode_line_window = window.subwin(1, window.maxx, window.maxy - 1, 0)
|
|
56
|
-
|
|
57
|
-
major_mode.render(major_mode_window)
|
|
58
|
-
mode_line.render(mode_line_window)
|
|
59
|
-
ensure
|
|
60
|
-
major_mode_window.close
|
|
61
|
-
mode_line_window.close
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
class << self
|
|
65
|
-
attr_writer :current, :instances
|
|
66
|
-
|
|
67
|
-
def instances
|
|
68
|
-
@instances ||= Set.new
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def current
|
|
72
|
-
@current ||= scratch
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def scratch
|
|
76
|
-
@scratch ||= new('*Scratch*')
|
|
77
|
-
instances << @scratch
|
|
78
|
-
@scratch
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def messages
|
|
82
|
-
@messages ||= new('*Messages*')
|
|
83
|
-
instances << @messages
|
|
84
|
-
@messages.text = '' if @messages.text.nil?
|
|
85
|
-
@messages
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
data/lib/amun/ui/echo_area.rb
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
require 'amun/ui/buffer'
|
|
2
|
-
|
|
3
|
-
module Amun
|
|
4
|
-
module UI
|
|
5
|
-
# a line that is rendered by default at the end on the screen
|
|
6
|
-
# takes one line height and extends to take the whole width of screen
|
|
7
|
-
# should be linked to \*messages\* memory buffer and display new messages
|
|
8
|
-
# in the buffer text
|
|
9
|
-
class EchoArea
|
|
10
|
-
attr_writer :events
|
|
11
|
-
|
|
12
|
-
def events
|
|
13
|
-
@events ||= EventManager.new
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def initialize
|
|
17
|
-
@last_messages_size = 0
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def trigger(event)
|
|
21
|
-
EventManager.join(event, events)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# render the echo area window
|
|
25
|
-
def render(window)
|
|
26
|
-
window.clear
|
|
27
|
-
window << message
|
|
28
|
-
update_last_messages_size
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def message
|
|
34
|
-
Buffer.messages.text[@last_messages_size..-1]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def update_last_messages_size
|
|
38
|
-
@last_messages_size = Buffer.messages.text.size
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
data/lib/amun/ui/mode_line.rb
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
require 'amun/helpers/colors'
|
|
2
|
-
require 'amun/ui/mode_line_segments/major_mode'
|
|
3
|
-
require 'amun/ui/mode_line_segments/buffer_name'
|
|
4
|
-
|
|
5
|
-
module Amun
|
|
6
|
-
module UI
|
|
7
|
-
# a line of small segments that display
|
|
8
|
-
# information about the current buffer,
|
|
9
|
-
# like mode name, line number, buffer name...etc
|
|
10
|
-
class ModeLine
|
|
11
|
-
attr_reader :left_segments, :right_segments
|
|
12
|
-
|
|
13
|
-
def initialize(buffer)
|
|
14
|
-
@buffer = buffer
|
|
15
|
-
@right_segments = []
|
|
16
|
-
@left_segments = [
|
|
17
|
-
ModeLineSegments::BufferName.new(buffer),
|
|
18
|
-
ModeLineSegments::MajorMode.new(buffer)
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
Helpers::Colors.register_default(:mode_line, 0, 255)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def render(window)
|
|
25
|
-
right_output = render_segments(right_segments, window)
|
|
26
|
-
left_output = render_segments(left_segments, window)
|
|
27
|
-
|
|
28
|
-
size = (right_output + left_output).map(&:size).inject(0, :+)
|
|
29
|
-
empty_space = [0, window.maxx - size].max
|
|
30
|
-
filler = (' ' * empty_space).colorize(:mode_line)
|
|
31
|
-
|
|
32
|
-
Helpers::Colors.print(window, *left_output, filler, *right_output)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
def render_segments(segments, window)
|
|
38
|
-
segments.map do |segment|
|
|
39
|
-
segment.render(window)
|
|
40
|
-
end.flatten
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Amun
|
|
2
|
-
module UI
|
|
3
|
-
module ModeLineSegments
|
|
4
|
-
# display buffer name in modeline
|
|
5
|
-
class BufferName
|
|
6
|
-
def initialize(buffer)
|
|
7
|
-
@buffer = buffer
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def render(*)
|
|
11
|
-
"#{@buffer.name} ".colorize(:mode_line)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module Amun
|
|
2
|
-
module UI
|
|
3
|
-
module ModeLineSegments
|
|
4
|
-
# display major mode name in mode line
|
|
5
|
-
class MajorMode
|
|
6
|
-
def initialize(buffer)
|
|
7
|
-
@buffer = buffer
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def render(*)
|
|
11
|
-
mode = @buffer.major_mode.class.name.split('::').last
|
|
12
|
-
"(#{mode}) ".colorize(:mode_line)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
require 'amun/ui/buffer'
|
|
2
|
-
|
|
3
|
-
module Amun
|
|
4
|
-
module UI
|
|
5
|
-
module Windows
|
|
6
|
-
# a window to display any buffer
|
|
7
|
-
# or the current buffer
|
|
8
|
-
class BufferWindow
|
|
9
|
-
def initialize(buffer = nil)
|
|
10
|
-
@buffer = buffer
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# set a specific buffer to be displayed in this window
|
|
14
|
-
def display_buffer(buffer)
|
|
15
|
-
@buffer = buffer
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# render current buffer from the Buffer class
|
|
19
|
-
def display_current_buffer
|
|
20
|
-
@buffer = nil
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# get current buffer that this window is rendering
|
|
24
|
-
def buffer
|
|
25
|
-
@buffer || Buffer.current
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# render buffer
|
|
29
|
-
def render(window)
|
|
30
|
-
buffer.render(window)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# trigger the event in buffer
|
|
34
|
-
def trigger(event)
|
|
35
|
-
buffer.trigger(event)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|