amun 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +6 -1
  4. data/.ruby-version +1 -1
  5. data/Guardfile +26 -6
  6. data/README.md +1 -0
  7. data/Rakefile +4 -6
  8. data/_config.yml +1 -0
  9. data/amun.gemspec +6 -5
  10. data/exe/amun +1 -1
  11. data/lib/amun/application.rb +11 -5
  12. data/lib/amun/behaviours/emacs.rb +14 -122
  13. data/lib/amun/behaviours/erasing.rb +67 -0
  14. data/lib/amun/behaviours/insertion.rb +22 -0
  15. data/lib/amun/behaviours/movement.rb +83 -0
  16. data/lib/amun/buffer.rb +103 -0
  17. data/lib/amun/event_manager.rb +12 -3
  18. data/lib/amun/features/echo_event.rb +4 -1
  19. data/lib/amun/features/files.rb +26 -0
  20. data/lib/amun/helpers/colors.rb +8 -7
  21. data/lib/amun/helpers/keyboard.rb +25 -8
  22. data/lib/amun/major_modes/fundamental.rb +8 -40
  23. data/lib/amun/major_modes/irb.rb +40 -0
  24. data/lib/amun/mode_line_segments/buffer_name.rb +10 -0
  25. data/lib/amun/mode_line_segments/major_mode.rb +11 -0
  26. data/lib/amun/object.rb +21 -0
  27. data/lib/amun/primitives/rect.rb +15 -0
  28. data/lib/amun/version.rb +1 -1
  29. data/lib/amun/windows/base.rb +42 -0
  30. data/lib/amun/windows/buffer_window.rb +73 -0
  31. data/lib/amun/windows/echo_area.rb +34 -0
  32. data/lib/amun/windows/frame.rb +92 -0
  33. data/lib/amun/windows/mini_buffer_window.rb +126 -0
  34. data/lib/amun/windows/mode_line.rb +50 -0
  35. data/lib/amun/windows/text_renderer.rb +41 -0
  36. metadata +56 -31
  37. data/lib/amun/ui/buffer.rb +0 -90
  38. data/lib/amun/ui/echo_area.rb +0 -42
  39. data/lib/amun/ui/mode_line.rb +0 -44
  40. data/lib/amun/ui/mode_line_segments/buffer_name.rb +0 -16
  41. data/lib/amun/ui/mode_line_segments/major_mode.rb +0 -17
  42. data/lib/amun/ui/windows/buffer_window.rb +0 -40
  43. 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.1.3
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: 2017-03-28 00:00:00.000000000 Z
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: '1.2'
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: '1.2'
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: '1.14'
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: '1.14'
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: minitest
56
+ name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '5.0'
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: '5.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry
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: guard
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-minitest
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
- - blazeeboy@gmail.com
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/ui/buffer.rb
173
- - lib/amun/ui/echo_area.rb
174
- - lib/amun/ui/mode_line.rb
175
- - lib/amun/ui/mode_line_segments/buffer_name.rb
176
- - lib/amun/ui/mode_line_segments/major_mode.rb
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
- rubyforge_project:
200
- rubygems_version: 2.6.10
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: []
@@ -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
@@ -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
@@ -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