redcar 0.12.1 → 0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +18 -0
- data/bin/redcar +1 -0
- data/lib/redcar.rb +4 -5
- data/lib/redcar/usage.rb +0 -1
- data/lib/redcar_quick_start.rb +3 -1
- data/plugins/application/lib/application.rb +1 -0
- data/plugins/application/lib/application/commands/treebook_commands.rb +11 -18
- data/plugins/application/lib/application/dialog.rb +1 -1
- data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +13 -5
- data/plugins/application/lib/application/global_state.rb +21 -0
- data/plugins/application/lib/application/menu/item.rb +37 -11
- data/plugins/application/lib/application/notebook.rb +12 -0
- data/plugins/application/lib/application/tree/mirror.rb +0 -11
- data/plugins/application/lib/application/window.rb +32 -7
- data/plugins/application_swt/lib/application_swt.rb +1 -1
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +35 -10
- data/plugins/application_swt/lib/application_swt/icon.rb +1 -1
- data/plugins/application_swt/lib/application_swt/menu.rb +47 -15
- data/plugins/application_swt/lib/application_swt/notebook.rb +11 -2
- data/plugins/application_swt/lib/application_swt/window.rb +37 -34
- data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +1 -1
- data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +9 -0
- data/plugins/declarations/lib/declarations.rb +31 -66
- data/plugins/declarations/lib/declarations/commands.rb +142 -0
- data/plugins/declarations/lib/declarations/file.rb +1 -1
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/javascript.js +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/nothing_to_see.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/one_lonely_class.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/similar_names.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/something_fancy.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/trailing_space.rb +0 -0
- data/plugins/edit_view/lib/edit_view.rb +35 -2
- data/plugins/edit_view/lib/edit_view/commands/change_language_command.rb +31 -0
- data/plugins/edit_view/lib/edit_view/commands/language_settings_commands.rb +45 -0
- data/plugins/edit_view/lib/edit_view/document/command.rb +1 -1
- data/plugins/edit_view/lib/edit_view/edit_tab.rb +11 -13
- data/plugins/key_bindings/lib/key_bindings.rb +6 -2
- data/plugins/project/lib/project.rb +27 -32
- data/plugins/project/lib/project/commands.rb +3 -88
- data/plugins/project/lib/project/dir_controller.rb +12 -18
- data/plugins/project/lib/project/dir_mirror.rb +20 -25
- data/plugins/project/lib/project/file_mirror.rb +10 -10
- data/plugins/project/lib/project/find_file_dialog.rb +20 -18
- data/plugins/project/lib/project/find_recent_dialog.rb +6 -3
- data/plugins/project/lib/project/{adapters/local.rb → local_filesystem.rb} +35 -35
- data/plugins/project/lib/project/manager.rb +21 -75
- data/plugins/project/lib/project/sub_project.rb +3 -3
- data/plugins/project/plugin.rb +0 -1
- data/plugins/project_search/lib/project_search/lucene_refresh.rb +0 -1
- data/plugins/redcar/plugin.rb +2 -2
- data/plugins/redcar/redcar.rb +34 -42
- data/plugins/ruby/lib/ruby/syntax_checker.rb +27 -7
- data/plugins/scm/lib/scm.rb +1 -12
- data/plugins/sessions/lib/sessions.rb +22 -0
- data/plugins/sessions/lib/sessions/cursor_saver.rb +162 -0
- data/plugins/sessions/lib/sessions/loader.rb +99 -0
- data/plugins/sessions/lib/sessions/memory.rb +59 -0
- data/plugins/sessions/plugin.rb +8 -0
- data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +2 -2
- data/plugins/syntax_check/lib/syntax_check.rb +2 -2
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +1 -3
- data/redcar.gemspec +1 -1
- metadata +195 -291
- data/plugins/connection_manager/lib/connection_manager.rb +0 -57
- data/plugins/connection_manager/lib/connection_manager/commands.rb +0 -14
- data/plugins/connection_manager/lib/connection_manager/connection_store.rb +0 -87
- data/plugins/connection_manager/lib/connection_manager/controller.rb +0 -100
- data/plugins/connection_manager/lib/connection_manager/filter_dialog.rb +0 -38
- data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +0 -93
- data/plugins/connection_manager/plugin.rb +0 -12
- data/plugins/connection_manager/views/index.html.erb +0 -284
- data/plugins/edit_view/lib/edit_view/info_speedbar.rb +0 -98
- data/plugins/outline_view/features/outline_view.feature +0 -79
- data/plugins/outline_view/features/project_outline.feature +0 -23
- data/plugins/outline_view/features/step_definitions/outline_steps.rb +0 -61
- data/plugins/outline_view/lib/outline_view.rb +0 -97
- data/plugins/outline_view/lib/outline_view/commands.rb +0 -19
- data/plugins/outline_view/plugin.rb +0 -10
- data/plugins/outline_view_swt/lib/outline_view_swt.rb +0 -79
- data/plugins/outline_view_swt/plugin.rb +0 -7
- data/plugins/project/lib/project/adapters/remote.rb +0 -96
- data/plugins/project/lib/project/adapters/remote_protocols/ftp.rb +0 -93
- data/plugins/project/lib/project/adapters/remote_protocols/protocol.rb +0 -94
- data/plugins/project/lib/project/adapters/remote_protocols/sftp.rb +0 -181
@@ -1,21 +1,21 @@
|
|
1
1
|
require 'java'
|
2
2
|
|
3
|
+
import org.jruby.parser.Parser
|
4
|
+
import org.jruby.parser.ParserConfiguration
|
5
|
+
import org.jruby.CompatVersion
|
6
|
+
|
3
7
|
module Redcar
|
4
8
|
class Ruby
|
5
9
|
class SyntaxChecker < Redcar::SyntaxCheck::Checker
|
6
10
|
supported_grammars "Ruby", "Ruby on Rails", "RSpec"
|
7
11
|
|
8
12
|
def check(*args)
|
9
|
-
path
|
10
|
-
file
|
11
|
-
runtime = org.jruby.Ruby.global_runtime
|
12
|
-
io = java.io.FileInputStream.new(java.io.File.new(path))
|
13
|
+
path = manifest_path(doc)
|
14
|
+
file = File.basename(path)
|
13
15
|
begin
|
14
|
-
|
16
|
+
parser.parse(file, doc.to_s.to_java.get_bytes, config_19.scope, config_19)
|
15
17
|
rescue SyntaxError => e
|
16
18
|
create_syntax_error(doc, e.exception.message, file).annotate
|
17
|
-
ensure
|
18
|
-
io.close
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -25,6 +25,26 @@ module Redcar
|
|
25
25
|
message = $2
|
26
26
|
Redcar::SyntaxCheck::Error.new(doc, line, message)
|
27
27
|
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def runtime
|
32
|
+
org.jruby.Ruby.global_runtime
|
33
|
+
end
|
34
|
+
|
35
|
+
def parser
|
36
|
+
@parser ||= Parser.new(runtime)
|
37
|
+
end
|
38
|
+
|
39
|
+
def config_19
|
40
|
+
@config_19 ||= ParserConfiguration.new(runtime, 0, false, CompatVersion::RUBY1_9)
|
41
|
+
end
|
42
|
+
|
43
|
+
def config_18
|
44
|
+
@config_18 ||= ParserConfiguration.new(runtime, 0, false, CompatVersion::RUBY1_8)
|
45
|
+
end
|
28
46
|
end
|
29
47
|
end
|
30
48
|
end
|
49
|
+
|
50
|
+
|
data/plugins/scm/lib/scm.rb
CHANGED
@@ -126,9 +126,6 @@ module Redcar
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def self.project_loaded(project)
|
129
|
-
# for now we only want to attempt to handle the local case
|
130
|
-
return if project.remote?
|
131
|
-
|
132
129
|
Redcar.log.debug "SCM #{modules.count} SCM modules loaded."
|
133
130
|
|
134
131
|
repo = modules_instance.find do |m|
|
@@ -149,15 +146,7 @@ module Redcar
|
|
149
146
|
begin
|
150
147
|
# associate this repository with a project internally
|
151
148
|
project_repositories[project] = {'repo' => repo}
|
152
|
-
|
153
|
-
# load the repository and inject adapter if there is one
|
154
149
|
repo.load(project.path)
|
155
|
-
adapter = repo.adapter(project.adapter)
|
156
|
-
if not adapter.nil?
|
157
|
-
Redcar.log.debug "SCM Attaching a custom adapter to the project."
|
158
|
-
project.adapter = adapter
|
159
|
-
end
|
160
|
-
|
161
150
|
project_repositories[project]['trees'] = []
|
162
151
|
rescue
|
163
152
|
# cleanup
|
@@ -265,7 +254,7 @@ module Redcar
|
|
265
254
|
end
|
266
255
|
}
|
267
256
|
|
268
|
-
item branch, :type => :radio, :
|
257
|
+
item branch, :type => :radio, :checked => (branch == current), &action
|
269
258
|
end
|
270
259
|
end
|
271
260
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'sessions/memory'
|
4
|
+
require 'sessions/loader'
|
5
|
+
require 'sessions/cursor_saver'
|
6
|
+
|
7
|
+
class Sessions
|
8
|
+
def self.project_loaded(project)
|
9
|
+
Sessions::Memory.project_loaded(project)
|
10
|
+
Sessions::Loader.project_loaded(project)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.project_closed(project, window)
|
14
|
+
Sessions::Memory.project_closed(project, window)
|
15
|
+
Sessions::Loader.project_closed(project, window)
|
16
|
+
Sessions::CursorSaver.project_closed(project, window)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.tab_added(tab)
|
20
|
+
Sessions::CursorSaver.tab_added(tab)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
class Sessions
|
2
|
+
class CursorSaver
|
3
|
+
|
4
|
+
def self.project_closed(project, window)
|
5
|
+
open_tabs(project, window).each do |tab|
|
6
|
+
tab.remove_listener(tab_close_handlers.delete(tab))
|
7
|
+
save_cursor(tab.document, project)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.tab_added(tab)
|
12
|
+
if document = tab.document
|
13
|
+
document_new_mirror_handlers[tab] = document.add_listener(:new_mirror) do
|
14
|
+
document.remove_listener(document_new_mirror_handlers.delete(document))
|
15
|
+
|
16
|
+
if tab.document && tab.document.path
|
17
|
+
tab_focus_handlers[tab] = tab.add_listener(:focus) do
|
18
|
+
tab.remove_listener(tab_focus_handlers.delete(tab))
|
19
|
+
CursorSaver.restore_cursor(document)
|
20
|
+
end
|
21
|
+
|
22
|
+
tab_close_handlers[tab] = tab.add_listener(:before => :close) do
|
23
|
+
tab.remove_listener(tab_close_handlers.delete(tab))
|
24
|
+
CursorSaver.save_cursor(document) if document.path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.save_cursor(document, project = nil)
|
32
|
+
data = {
|
33
|
+
:path => document.path,
|
34
|
+
:cursor_offset => document.cursor_offset,
|
35
|
+
:timestamp => document.mirror.timestamp
|
36
|
+
}
|
37
|
+
if document.selection?
|
38
|
+
data[:selection_offset] = document.selection_offset
|
39
|
+
data[:block_selection_mode] = document.block_selection_mode?
|
40
|
+
end
|
41
|
+
restored_paths.delete(document.path) # FIXME(chrislwade): see note on <restored_paths>
|
42
|
+
Redcar.log.debug("Sessions::CursorSaver: saving cursor data: #{data.inspect}")
|
43
|
+
save_file_data(data, project)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.restore_cursor(document)
|
47
|
+
return if restored_paths[document.path] # FIXME(chrislwade): see note on <restored_paths>
|
48
|
+
data = get_file_data(document.path)
|
49
|
+
return if data.nil?
|
50
|
+
restored_paths[document.path] = true # FIXME(chrislwade): see note on <restored_paths>
|
51
|
+
Redcar.log.debug("Sessions::CursorSaver: restoring cursor data: #{data.inspect}")
|
52
|
+
if data[:cursor_offset] > document.length
|
53
|
+
Redcar.log.debug("Sessions::CursorSaver: offset #{data[:cursor_offset]} doesn't exist, truncated file? [max offset = #{document.length}]")
|
54
|
+
elsif user_storage['check_timestamps'] && data[:timestamp] != document.mirror.timestamp
|
55
|
+
Redcar.log.debug("Sessions::CursorSaver: timestamp #{data[:timestamp]} doesn't match! [new timestamp = #{document.mirror.timestamp}]")
|
56
|
+
else
|
57
|
+
if user_storage['restore_selection'] && data.has_key?(:selection_offset) && data[:selection_offset] <= document.length
|
58
|
+
document.set_selection_range(data[:cursor_offset], data[:selection_offset])
|
59
|
+
document.block_selection_mode = data[:block_selection_mode]
|
60
|
+
else
|
61
|
+
document.cursor_offset = data[:cursor_offset]
|
62
|
+
end
|
63
|
+
document.ensure_cursor_visible
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# FIXME(chrislwade): find a better way to prevent "double restore"
|
70
|
+
# Helps prevent double-restore once Redcar is running. When files are opened via the
|
71
|
+
# project tree, the tab receives the :focus event twice. When they are opened programmatically,
|
72
|
+
# the tab only receives a single :focus event. Unfortunately, removing the :focus handler during
|
73
|
+
# handler itself doesn't prevent a second run!
|
74
|
+
def self.restored_paths
|
75
|
+
@restored_paths ||= {}
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.document_new_mirror_handlers
|
79
|
+
@document_new_mirror_handlers ||= {}
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.tab_close_handlers
|
83
|
+
@tab_close_handlers ||= {}
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.tab_focus_handlers
|
87
|
+
@tab_focus_handlers ||= {}
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.user_storage
|
91
|
+
@storage ||= begin
|
92
|
+
storage = Redcar::Plugin::Storage.new('cursor_saver')
|
93
|
+
storage.set_default('cursor_positions', [])
|
94
|
+
storage.set_default('files_to_retain', 200)
|
95
|
+
storage.set_default('check_timestamps', true)
|
96
|
+
storage.set_default('restore_selection', true)
|
97
|
+
storage
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.project_storage(project)
|
102
|
+
storage = project.storage('cursor_saver')
|
103
|
+
storage.set_default('cursor_positions', [])
|
104
|
+
storage.set_default('files_to_retain', 0)
|
105
|
+
storage
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.project_for_path(path)
|
109
|
+
Redcar.log.debug("Sessions::CursorSaver: searching for open project for #{path}")
|
110
|
+
project = Redcar::Project::Manager.find_projects_containing_path(path).last
|
111
|
+
Redcar.log.debug("Sessions::CursorSaver: found: #{project.inspect}")
|
112
|
+
project
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.open_tabs(project, window)
|
116
|
+
window.all_tabs.select do |tab|
|
117
|
+
tab.is_a?(Redcar::EditTab) &&
|
118
|
+
tab.document.path &&
|
119
|
+
tab.document.path.start_with?(project.path)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.trim(storage)
|
124
|
+
if storage['files_to_retain'] && storage['files_to_retain'] > 0
|
125
|
+
while storage['cursor_positions'].length > storage['files_to_retain']
|
126
|
+
storage['cursor_positions'].shift
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.save_file_data(data, project = nil)
|
132
|
+
if project ||= project_for_path(data[:path])
|
133
|
+
storage = project_storage(project)
|
134
|
+
data[:path] = data[:path][(project.path.length + 1) .. data[:path].length]
|
135
|
+
Redcar.log.debug("Sessions::CursorSaver: using project storage to store offset for #{data[:path]}")
|
136
|
+
else
|
137
|
+
storage = user_storage
|
138
|
+
pathname = Pathname.new(data[:path])
|
139
|
+
data[:path] = pathname.absolute? ? pathname.to_s : pathname.expand_path.to_s
|
140
|
+
Redcar.log.debug("Sessions::CursorSaver: using user storage to store offset for #{data[:path]}")
|
141
|
+
end
|
142
|
+
storage['cursor_positions'].delete_if {|obj| obj[:path] == data[:path]}
|
143
|
+
storage['cursor_positions'] << data
|
144
|
+
trim(storage)
|
145
|
+
storage.save
|
146
|
+
end
|
147
|
+
|
148
|
+
def self.get_file_data(path)
|
149
|
+
if project = project_for_path(path)
|
150
|
+
storage = project_storage(project)
|
151
|
+
scoped_path = path[(project.path.length + 1) .. path.length]
|
152
|
+
Redcar.log.debug("Sessions::CursorSaver: restoring offset from project storage for #{scoped_path}")
|
153
|
+
else
|
154
|
+
storage = user_storage
|
155
|
+
pathname = Pathname.new(path)
|
156
|
+
scoped_path = pathname.absolute? ? pathname.to_s : pathname.expand_path.to_s
|
157
|
+
Redcar.log.debug("Sessions::CursorSaver: restoring offset from user storage for #{scoped_path}")
|
158
|
+
end
|
159
|
+
storage['cursor_positions'].find {|obj| obj[:path] == scoped_path}
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
class Sessions
|
2
|
+
class Loader
|
3
|
+
def self.loaders
|
4
|
+
@loaders ||= {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.project_loaded(project)
|
8
|
+
loaders[project.path] = loader = self.new(project)
|
9
|
+
loader.restore if restore_files?
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.project_closed(project, window)
|
13
|
+
loader = loaders.delete(project.path)
|
14
|
+
loader.save if save_files?
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.storage
|
18
|
+
@storage ||= begin
|
19
|
+
storage = Redcar::Plugin::Storage.new('project_loader')
|
20
|
+
storage.set_default('restore_open_files_on_load', true)
|
21
|
+
storage.set_default('save_open_files_on_close', true)
|
22
|
+
storage
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.restore_files?
|
27
|
+
storage['restore_open_files_on_load']
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.restore_files=(toggle)
|
31
|
+
storage['restore_open_files_on_load'] = toggle
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.restore_project_files(project)
|
35
|
+
loaders[project.path].restore
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.save_files?
|
39
|
+
storage['save_open_files_on_close']
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.save_files=(toggle)
|
43
|
+
storage['save_open_files_on_close'] = toggle
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.save_project_files(project)
|
47
|
+
loaders[project.path].save
|
48
|
+
end
|
49
|
+
|
50
|
+
attr_accessor :project
|
51
|
+
|
52
|
+
def initialize(project)
|
53
|
+
@project = project
|
54
|
+
end
|
55
|
+
|
56
|
+
def storage
|
57
|
+
@storage ||= begin
|
58
|
+
storage = project.storage('project_loader')
|
59
|
+
storage.set_default('open_files', [])
|
60
|
+
storage
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def open_files
|
65
|
+
Redcar.app.all_tabs.select do |tab|
|
66
|
+
tab.is_a?(Redcar::EditTab) &&
|
67
|
+
tab.document && tab.document.path &&
|
68
|
+
tab.document.path.start_with?(project.path)
|
69
|
+
end.collect do |tab|
|
70
|
+
path = tab.document.path
|
71
|
+
path = path[project.path.length + 1 .. path.length]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def saved_files
|
76
|
+
storage['open_files'] ||= []
|
77
|
+
end
|
78
|
+
|
79
|
+
def saved_files=(files)
|
80
|
+
storage['open_files'] = files
|
81
|
+
end
|
82
|
+
|
83
|
+
def restore
|
84
|
+
Redcar.log.info("Sessions::Loader: opening files last open for #{project.path}")
|
85
|
+
unless (files = saved_files).empty?
|
86
|
+
paths = files.each do |file|
|
87
|
+
path = Pathname.new(file).expand_path(project.path)
|
88
|
+
Redcar::Project::Manager.open_file(path.to_s) if path.exist?
|
89
|
+
end
|
90
|
+
Redcar::Project::Manager.find_open_file_tab(paths.first).andand.focus
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def save
|
95
|
+
Redcar.log.info("Sessions::Loader: saving files last open for #{project.path}")
|
96
|
+
self.saved_files = open_files
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class Sessions
|
2
|
+
class Memory
|
3
|
+
def self.memories
|
4
|
+
@memories ||= []
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.project_loaded(project)
|
8
|
+
memories << Sessions::Memory.new(project).recall
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.project_closed(project, window)
|
12
|
+
memories.reject! do |mem|
|
13
|
+
mem.save window if mem.project == project
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :project, :storage
|
18
|
+
|
19
|
+
def initialize(project)
|
20
|
+
@project = project
|
21
|
+
@storage = project.storage('sessions')
|
22
|
+
end
|
23
|
+
|
24
|
+
def last_bounds
|
25
|
+
return unless storage["bounds"]
|
26
|
+
rect = storage["bounds"]
|
27
|
+
[rect["x"], rect["y"], rect["width"], rect["height"]]
|
28
|
+
end
|
29
|
+
|
30
|
+
def tree_width
|
31
|
+
return unless storage["tree_width"]
|
32
|
+
storage["tree_width"].to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def save(window)
|
36
|
+
bs = window.bounds
|
37
|
+
storage["bounds"] = {
|
38
|
+
"x" => bs[0],
|
39
|
+
"y" => bs[1],
|
40
|
+
"width" => bs[2],
|
41
|
+
"height" => bs[3]
|
42
|
+
}
|
43
|
+
storage["tree_width"] = window.treebook_width
|
44
|
+
storage.save
|
45
|
+
end
|
46
|
+
|
47
|
+
def recall
|
48
|
+
if last_bounds
|
49
|
+
project.window.bounds = last_bounds
|
50
|
+
end
|
51
|
+
if tree_width
|
52
|
+
project.window.treebook_width = tree_width
|
53
|
+
end
|
54
|
+
self
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -30,8 +30,8 @@ module Redcar
|
|
30
30
|
Menu::Builder.build do
|
31
31
|
sub_menu "Plugins" do
|
32
32
|
sub_menu "Strip Trailing Spaces", :priority => 195 do
|
33
|
-
item "Enabled",
|
34
|
-
item "Strip Blank Lines", :command => ToggleStripBlankLines,
|
33
|
+
item "Enabled", :command => ToggleStripTrailingSpaces, :type => :check, :checked => lambda { StripTrailingSpaces.enabled? }
|
34
|
+
item "Strip Blank Lines", :command => ToggleStripBlankLines, :type => :check, :checked => lambda { StripTrailingSpaces.strip_blank_lines? }
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|