glimmer-cs-gladiator 0.8.2 → 0.9.3

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.
@@ -1,22 +1,22 @@
1
- # Copyright (c) 2020-2021 Andy Maleh
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining
4
- # a copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish,
7
- # distribute, sublicense, and/or sell copies of the Software, and to
8
- # permit persons to whom the Software is furnished to do so, subject to
9
- # the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- require_relative '../lib/glimmer-cs-gladiator/launch'
1
+ # Copyright (c) 2020-2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require_relative '../lib/glimmer-cs-gladiator/launch'
@@ -1,22 +1,21 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: glimmer-cs-gladiator 0.8.2 ruby lib
5
+ # stub: glimmer-cs-gladiator 0.9.3 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-cs-gladiator".freeze
9
- s.version = "0.8.2"
9
+ s.version = "0.9.3"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Andy Maleh".freeze]
14
- s.date = "2021-02-08"
14
+ s.date = "2022-01-29"
15
15
  s.description = "Gladiator (short for Glimmer Editor) is a Glimmer sample project under on-going development. It is not intended to be a full-fledged editor by any means, yet mostly a fun educational exercise in using Glimmer to build a text editor. Gladiator is also a personal tool for shaping an editor exactly the way I like. I leave building truly professional text editors to software tooling experts who would hopefully use Glimmer one day.".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.executables = ["glimmer-cs-gladiator".freeze, "gladiator".freeze, "gladiator-setup".freeze]
18
18
  s.extra_rdoc_files = [
19
- "CHANGELOG.md",
20
19
  "LICENSE.txt",
21
20
  "README.md"
22
21
  ]
@@ -46,36 +45,30 @@ Gem::Specification.new do |s|
46
45
  s.homepage = "http://github.com/AndyObtiva/glimmer-cs-gladiator".freeze
47
46
  s.licenses = ["MIT".freeze]
48
47
  s.post_install_message = "\nTo make the gladiator command available system-wide (especially with RVM), make sure you run this command with jruby in path: gladiator-setup\n\n".freeze
49
- s.rubygems_version = "3.0.6".freeze
48
+ s.rubygems_version = "3.3.6".freeze
50
49
  s.summary = "Gladiator (Glimmer Editor) - Glimmer Custom Shell - Text Editor Built in Ruby".freeze
51
50
 
52
51
  if s.respond_to? :specification_version then
53
52
  s.specification_version = 4
53
+ end
54
54
 
55
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
- s.add_runtime_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.18.4.3", "< 5.0.0.0"])
57
- s.add_runtime_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
58
- s.add_runtime_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
59
- s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
60
- s.add_development_dependency(%q<jeweler>.freeze, ["= 2.3.9"])
61
- s.add_development_dependency(%q<warbler>.freeze, ["= 2.0.5"])
62
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
63
- else
64
- s.add_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.18.4.3", "< 5.0.0.0"])
65
- s.add_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
66
- s.add_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
67
- s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
68
- s.add_dependency(%q<jeweler>.freeze, ["= 2.3.9"])
69
- s.add_dependency(%q<warbler>.freeze, ["= 2.0.5"])
70
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
71
- end
55
+ if s.respond_to? :add_runtime_dependency then
56
+ s.add_runtime_dependency(%q<glimmer-dsl-swt>.freeze, ["~> 4.20.16.0"])
57
+ s.add_runtime_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
58
+ s.add_runtime_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
59
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
60
+ s.add_development_dependency(%q<jeweler>.freeze, ["= 2.3.9"])
61
+ s.add_development_dependency(%q<warbler>.freeze, ["= 2.0.5"])
62
+ s.add_development_dependency(%q<jruby-jars>.freeze, ["= 9.2.19.0"])
63
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
72
64
  else
73
- s.add_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.18.4.3", "< 5.0.0.0"])
65
+ s.add_dependency(%q<glimmer-dsl-swt>.freeze, ["~> 4.20.16.0"])
74
66
  s.add_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
75
67
  s.add_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
76
68
  s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
77
69
  s.add_dependency(%q<jeweler>.freeze, ["= 2.3.9"])
78
70
  s.add_dependency(%q<warbler>.freeze, ["= 2.0.5"])
71
+ s.add_dependency(%q<jruby-jars>.freeze, ["= 9.2.19.0"])
79
72
  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
80
73
  end
81
74
  end
Binary file
@@ -1,6 +1,27 @@
1
- require_relative '../glimmer-cs-gladiator'
2
-
3
- include Glimmer
4
-
5
- local_dir = ENV['LOCAL_DIR'] || '.'
6
- gladiator(project_dir_path: local_dir).open
1
+ # Copyright (c) 2020-2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require_relative '../glimmer-cs-gladiator'
23
+
24
+ include Glimmer
25
+
26
+ local_dir = ENV['LOCAL_DIR'] || '.'
27
+ gladiator(project_dir_path: local_dir).open
@@ -1,30 +1,30 @@
1
- $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
2
-
3
- require 'glimmer-dsl-swt'
4
- require 'filewatcher'
5
- require 'clipboard'
6
- require 'puts_debuggerer'
7
- require 'views/glimmer/gladiator'
8
-
9
- # Custom Composite Initializer (avoid default margins)
10
- Glimmer::SWT::WidgetProxy::DEFAULT_INITIALIZERS['composite'] = lambda do |composite|
11
- if composite.get_layout.nil?
12
- layout = GridLayout.new
13
- composite.layout = layout
14
- end
15
- end
16
-
17
- # Custom LayoutProxy initialize method (avoid default margins)
18
- module Glimmer
19
- module SWT
20
- class LayoutProxy
21
- def initialize(underscored_layout_name, widget_proxy, args)
22
- @underscored_layout_name = underscored_layout_name
23
- @widget_proxy = widget_proxy
24
- args = SWTProxy.constantify_args(args)
25
- @swt_layout = self.class.swt_layout_class_for(underscored_layout_name).new(*args)
26
- @widget_proxy.swt_widget.setLayout(@swt_layout)
27
- end
28
- end
29
- end
30
- end
1
+ $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
2
+
3
+ require 'glimmer-dsl-swt'
4
+ require 'filewatcher'
5
+ require 'clipboard'
6
+ require 'puts_debuggerer'
7
+ require 'views/glimmer/gladiator'
8
+
9
+ # Custom Composite Initializer (avoid default margins)
10
+ Glimmer::SWT::WidgetProxy::DEFAULT_INITIALIZERS['composite'] = lambda do |composite|
11
+ if composite.get_layout.nil?
12
+ layout = GridLayout.new
13
+ composite.layout = layout
14
+ end
15
+ end
16
+
17
+ # Custom LayoutProxy initialize method (avoid default margins)
18
+ module Glimmer
19
+ module SWT
20
+ class LayoutProxy
21
+ def initialize(underscored_layout_name, widget_proxy, args)
22
+ @underscored_layout_name = underscored_layout_name
23
+ @widget_proxy = widget_proxy
24
+ args = SWTProxy.constantify_args(args)
25
+ @swt_layout = self.class.swt_layout_class_for(underscored_layout_name).new(*args)
26
+ @widget_proxy.swt_widget.setLayout(@swt_layout)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,24 @@
1
+ # Copyright (c) 2020-2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  module Glimmer
2
23
  class Gladiator
3
24
  class Command
@@ -1,3 +1,24 @@
1
+ # Copyright (c) 2020-2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  require 'models/glimmer/gladiator/file'
2
23
 
3
24
  module Glimmer
@@ -6,7 +27,7 @@ module Glimmer
6
27
  include Glimmer
7
28
  include Glimmer::DataBinding::ObservableModel
8
29
 
9
- IGNORE_PATHS = ['.gladiator', '.git', 'coverage', 'packages', 'node_modules', 'tmp', 'vendor', 'pkg', 'dist']
30
+ IGNORE_PATHS = ['.gladiator', '.gladiator-scratchpad', '.git', 'coverage', 'packages', 'node_modules', 'tmp', 'vendor', 'pkg', 'dist', 'log']
10
31
 
11
32
  attr_accessor :selected_child, :filter, :children, :filtered_path_options, :filtered_path, :display_path, :ignore_paths
12
33
  attr_reader :name, :parent, :path
@@ -16,13 +37,13 @@ module Glimmer
16
37
  @project_dir = project_dir
17
38
  if is_local_dir
18
39
  @filewatcher = Filewatcher.new(path)
19
- Thread.new(@filewatcher) do |fw|
40
+ @filewatcher_thread = Thread.new(@filewatcher) do |fw|
20
41
  begin
21
42
  fw.watch do |filename, event|
22
43
  # TODO do fine grained processing of events for enhanced performance (e.g. dir refresh vs file change)
23
44
  # TODO do fine grained file change only without a refresh delay for enhanced performance
24
45
  begin
25
- if !@refresh_in_progress && !filename.include?('new_file') && (event != :updated || find_child_file(filename).nil?)
46
+ if !@refresh_in_progress && !filename.include?('new_file') && !ignore_paths.any? { |ignore_path| filename.include?(ignore_path) } && (event != :updated || find_child_file(filename).nil?)
26
47
  Thread.new {
27
48
  refresh
28
49
  }
@@ -109,6 +130,19 @@ module Glimmer
109
130
  def selected_child_path_history
110
131
  @selected_child_path_history ||= []
111
132
  end
133
+
134
+ def close
135
+ all_children_files.each(&:close)
136
+ stop_filewatcher
137
+ end
138
+
139
+ def stop_filewatcher
140
+ @filewatcher&.stop
141
+ @filewatcher_thread&.kill
142
+ @filewatcher_thread = nil
143
+ @filewatcher&.finalize
144
+ @filewatcher = nil
145
+ end
112
146
 
113
147
  def pause_refresh
114
148
  @refresh_paused = true
@@ -177,7 +211,8 @@ module Glimmer
177
211
  # scratchpad scenario
178
212
  if selected_path.empty? # Scratchpad
179
213
  @selected_child&.write_dirty_content
180
- return (self.selected_child = File.new)
214
+ @scratchpad = (self.selected_child = File.new('', project_dir)) if @scratchpad.nil? || @scratchpad.closed?
215
+ return @scratchpad
181
216
  end
182
217
  full_selected_path = selected_path.include?(project_dir.path) ? selected_path : ::File.join(project_dir.path, selected_path)
183
218
  return if ::Dir.exist?(full_selected_path) ||
@@ -188,7 +223,6 @@ module Glimmer
188
223
  new_child = find_child_file(selected_path)
189
224
  begin
190
225
  unless new_child.dirty_content.nil?
191
- self.selected_child&.stop_filewatcher
192
226
  selected_child_path_history << new_child.path if new_child && !selected_child_path_history.include?(new_child.path)
193
227
  self.selected_child = new_child
194
228
  self.selected_child.start_filewatcher
@@ -212,7 +246,7 @@ module Glimmer
212
246
  @selected_child.restore_properties(file_properties) if file_properties
213
247
  end
214
248
 
215
- def delete!
249
+ def remove!
216
250
  FileUtils.rm_rf(path)
217
251
  end
218
252
 
@@ -1,3 +1,24 @@
1
+ # Copyright (c) 2020-2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  module Glimmer
2
23
  class Gladiator
3
24
  class File
@@ -28,58 +49,81 @@ module Glimmer
28
49
  return 'ruby' if dirty_content.start_with?('#!/usr/bin/env ruby') || dirty_content.start_with?('#!/usr/bin/env jruby')
29
50
  return 'yaml' if path.to_s.end_with?('Gemfile.lock')
30
51
  return 'shell' if extension.nil? && path.to_s.include?('/bin/')
52
+ return 'make' if path.to_s.end_with?('Makefile') || path.to_s.end_with?('makefile') || path.to_s.end_with?('GNUmakefile')
31
53
  case extension
32
54
  # TODO extract case statement to an external config file
33
- when 'rb'
34
- 'ruby'
35
- when 'md', 'markdown'
36
- 'markdown'
37
- when 'js', 'es6'
38
- 'javascript'
39
- when 'json'
40
- 'json'
41
- when 'yaml'
42
- 'yaml'
43
- when 'html'
44
- 'html'
45
- when 'h', 'c'
55
+ when 'c', 'h'
46
56
  'c'
47
- when 'hs'
48
- 'haskell'
49
- when 'gradle'
50
- 'gradle'
51
- when 'cpp'
57
+ when 'cr'
58
+ 'crystal'
59
+ when 'cpp', 'cc', 'C', 'cxx', 'c++', 'hpp', 'hh', 'H', 'hxx', 'h++'
52
60
  'cpp'
53
61
  when 'css'
54
62
  'css'
55
- when 'java'
56
- 'java'
57
- when 'jsp'
58
- 'jsp'
59
- when 'plist'
60
- 'plist'
63
+ when 'conf'
64
+ 'conf'
65
+ when 'coffee'
66
+ 'coffeescript'
67
+ when 'erb'
68
+ 'erb'
69
+ when 'feature'
70
+ 'gherkin'
71
+ when 'gradle'
72
+ 'gradle'
61
73
  when 'haml'
62
74
  'haml'
63
- when 'xml'
64
- 'xml'
75
+ when 'html'
76
+ 'html'
65
77
  when 'ini'
66
78
  'ini'
79
+ when 'java'
80
+ 'java'
81
+ when 'js', 'cjs', 'mjs', 'es6', 'es'
82
+ 'javascript'
83
+ when 'json'
84
+ 'json'
85
+ when 'jsp'
86
+ 'jsp'
87
+ when 'kt', 'ktm', 'kts'
88
+ 'kotlin'
89
+ when 'md', 'markdown'
90
+ 'markdown'
91
+ when 'patch'
92
+ 'diff'
67
93
  when 'pl'
68
94
  'perl'
69
- when 'tcl'
70
- 'tcl'
95
+ when 'plist'
96
+ 'plist'
97
+ when 'pp'
98
+ 'puppet'
99
+ when 'properties'
100
+ 'properties'
101
+ when 'ps'
102
+ 'postscript'
103
+ when 'ps1'
104
+ 'powershell'
105
+ when 'py'
106
+ 'python'
107
+ when 'rb'
108
+ 'ruby'
71
109
  when 'sass'
72
110
  'sass'
111
+ when 'scm', 'sps', 'sls', 'sld'
112
+ 'scheme'
73
113
  when 'scss'
74
114
  'scss'
75
- when 'sql'
76
- 'sql'
77
115
  when 'sh'
78
116
  'shell'
79
- when 'vue'
80
- 'vue'
117
+ when 'sql'
118
+ 'sql'
119
+ when 'tcl'
120
+ 'tcl'
81
121
  when 'txt', nil
82
122
  'plain_text'
123
+ when 'yaml', 'yml'
124
+ 'yaml'
125
+ when 'xml'
126
+ 'xml'
83
127
  end
84
128
  end
85
129
 
@@ -121,8 +165,8 @@ module Glimmer
121
165
  unless (current_line_number && current_line_number == new_line_number)
122
166
  self.line_number = new_line_number
123
167
  # TODO check if the following line is needed
124
- self.line_position = caret_position - caret_position_for_line_index(line_number - 1) + 1
125
168
  end
169
+ self.line_position = caret_position - caret_position_for_line_index(line_number - 1) + 1
126
170
  end
127
171
 
128
172
  def path=(the_path)
@@ -145,7 +189,13 @@ module Glimmer
145
189
  end
146
190
 
147
191
  def scratchpad?
148
- path.to_s.empty?
192
+ path.to_s.empty? # TODO consider updating to set the .gladiator-scratchpad path directly
193
+ end
194
+
195
+ def scratchpad_file
196
+ scratchpad_file = ::File.join(project_dir.path, '.gladiator-scratchpad')
197
+ ::File.write(scratchpad_file, content)
198
+ scratchpad_file
149
199
  end
150
200
 
151
201
  def backup_properties
@@ -221,20 +271,25 @@ module Glimmer
221
271
  end
222
272
 
223
273
  def close
274
+ @closed = true
224
275
  stop_filewatcher
225
276
  remove_all_observers
226
277
  initialize(path, project_dir)
227
278
  Command.clear(self)
228
279
  end
229
280
 
281
+ def closed?
282
+ @closed
283
+ end
284
+
230
285
  def read_dirty_content
231
286
  path.empty? ? '' : ::File.read(path)
232
287
  end
233
288
 
234
289
  def start_filewatcher
235
290
  return if scratchpad?
236
- @filewatcher = Filewatcher.new(@path)
237
- @thread = Thread.new(@filewatcher) do |fw|
291
+ @filewatcher ||= Filewatcher.new(@path)
292
+ @filewatcher_thread ||= Thread.new(@filewatcher) do |fw|
238
293
  fw.watch do |filename, event|
239
294
  async_exec do
240
295
  begin
@@ -250,6 +305,10 @@ module Glimmer
250
305
 
251
306
  def stop_filewatcher
252
307
  @filewatcher&.stop
308
+ @filewatcher_thread&.kill
309
+ @filewatcher_thread = nil
310
+ @filewatcher&.finalize
311
+ @filewatcher = nil
253
312
  end
254
313
 
255
314
  def write_dirty_content
@@ -291,8 +350,8 @@ module Glimmer
291
350
  lines[line_number - 1]
292
351
  end
293
352
 
294
- def delete!
295
- FileUtils.rm(path) unless scratchpad?
353
+ def remove!
354
+ FileUtils.rm_rf(path) unless scratchpad?
296
355
  end
297
356
 
298
357
  def prefix_new_line!
@@ -508,16 +567,17 @@ module Glimmer
508
567
  self.dirty_content = new_dirty_content
509
568
  find_next
510
569
  find_next if replace_text.to_s.include?(find_text) && !replace_text.to_s.start_with?(find_text)
570
+ write_dirty_content
511
571
  end
512
572
 
513
573
  def page_up
514
- self.selection_count = 0
515
574
  self.line_number = [(self.line_number - 15), 1].max
575
+ self.selection_count = 0
516
576
  end
517
577
 
518
578
  def page_down
519
- self.selection_count = 0
520
579
  self.line_number = [(self.line_number + 15), lines.size].min
580
+ self.selection_count = 0
521
581
  end
522
582
 
523
583
  def home
@@ -551,6 +611,7 @@ module Glimmer
551
611
  self.selection_count = (caret_position_for_line_index(self.line_number) - 1) - caret_position
552
612
  end
553
613
 
614
+ # deletes content that is highlighted
554
615
  def delete!
555
616
  new_dirty_content = dirty_content
556
617
  new_dirty_content[caret_position...(caret_position + selection_count)] = ''
@@ -627,13 +688,13 @@ module Glimmer
627
688
 
628
689
  def run
629
690
  if scratchpad?
630
- TOPLEVEL_BINDING.receiver.send(:eval, content)
691
+ load scratchpad_file
631
692
  else
632
693
  write_dirty_content
633
694
  load path
634
695
  end
635
696
  end
636
-
697
+
637
698
  def lines
638
699
  need_padding = dirty_content.to_s.end_with?("\n")
639
700
  splittable_content = need_padding ? "#{dirty_content} " : dirty_content
@@ -1,3 +1,24 @@
1
+ # Copyright (c) 2020-2022 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
1
22
  module Glimmer
2
23
  class Gladiator
3
24
  class FileEditMenu