pry 0.9.0pre3-java → 0.9.4pre2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG +84 -6
  3. data/CONTRIBUTORS +13 -0
  4. data/README.markdown +23 -183
  5. data/Rakefile +22 -19
  6. data/TODO +36 -6
  7. data/bin/pry +12 -1
  8. data/lib/pry.rb +60 -12
  9. data/lib/pry/command_context.rb +21 -0
  10. data/lib/pry/command_processor.rb +62 -16
  11. data/lib/pry/command_set.rb +25 -11
  12. data/lib/pry/commands.rb +0 -3
  13. data/lib/pry/completion.rb +6 -6
  14. data/lib/pry/config.rb +25 -5
  15. data/lib/pry/default_commands/basic.rb +27 -6
  16. data/lib/pry/default_commands/context.rb +84 -35
  17. data/lib/pry/default_commands/documentation.rb +69 -31
  18. data/lib/pry/default_commands/easter_eggs.rb +5 -0
  19. data/lib/pry/default_commands/input.rb +193 -56
  20. data/lib/pry/default_commands/introspection.rb +98 -50
  21. data/lib/pry/default_commands/ls.rb +51 -21
  22. data/lib/pry/default_commands/shell.rb +57 -13
  23. data/lib/pry/extended_commands/experimental.rb +0 -32
  24. data/lib/pry/extended_commands/user_command_api.rb +33 -2
  25. data/lib/pry/helpers/base_helpers.rb +30 -10
  26. data/lib/pry/helpers/command_helpers.rb +75 -16
  27. data/lib/pry/helpers/text.rb +12 -11
  28. data/lib/pry/history.rb +61 -0
  29. data/lib/pry/plugins.rb +23 -12
  30. data/lib/pry/pry_class.rb +51 -50
  31. data/lib/pry/pry_instance.rb +129 -119
  32. data/lib/pry/version.rb +1 -1
  33. data/pry.gemspec +46 -0
  34. data/test/helper.rb +37 -3
  35. data/test/test_command_processor.rb +62 -19
  36. data/test/test_command_set.rb +40 -2
  37. data/test/test_completion.rb +27 -0
  38. data/test/test_default_commands/test_context.rb +185 -1
  39. data/test/test_default_commands/test_documentation.rb +10 -0
  40. data/test/test_default_commands/test_input.rb +207 -11
  41. data/test/test_default_commands/test_introspection.rb +20 -1
  42. data/test/test_default_commands/test_shell.rb +18 -0
  43. data/test/test_pry.rb +261 -45
  44. data/test/test_pry_history.rb +82 -0
  45. data/test/test_pry_output.rb +44 -0
  46. data/test/test_special_locals.rb +35 -0
  47. metadata +185 -159
@@ -3,6 +3,11 @@ class Pry
3
3
 
4
4
  EasterEggs = Pry::CommandSet.new do
5
5
 
6
+ command(/!s\/(.*?)\/(.*?)/, "") do |source, dest|
7
+ eval_string.gsub!(/#{source}/) { dest }
8
+ run "show-input"
9
+ end
10
+
6
11
  command "east-coker", "" do
7
12
  text = %{
8
13
  --
@@ -3,33 +3,110 @@ class Pry
3
3
 
4
4
  Input = Pry::CommandSet.new do
5
5
 
6
- command "!", "Clear the input buffer. Useful if the parsing process goes wrong and you get stuck in the read loop." do
6
+ command "!", "Clear the input buffer. Useful if the parsing process goes wrong and you get stuck in the read loop.", :use_prefix => false do
7
7
  output.puts "Input buffer cleared!"
8
8
  eval_string.replace("")
9
9
  end
10
10
 
11
- command "show-input", "Show the current eval_string" do
12
- render_output(false, 0, Pry.color ? CodeRay.scan(eval_string, :ruby).term : eval_string)
11
+ command "show-input", "Show the contents of the input buffer for the current multi-line expression." do
12
+ render_output(false, 1, Pry.color ? CodeRay.scan(eval_string, :ruby).term : eval_string)
13
13
  end
14
14
 
15
- command(/amend-line-?(\d+)?/, "Experimental amend-line, where the N in amend-line-N represents line to replace. Aliases: %N",
16
- :interpolate => false, :listing => "amend-line-N") do |line_number, replacement_line|
15
+ command(/amend-line.?(-?\d+)?(?:\.\.(-?\d+))?/, "Amend a line of input in multi-line mode. Type `amend-line --help` for more information. Aliases %",
16
+ :interpolate => false, :listing => "amend-line") do |*args|
17
+ start_line_number, end_line_number, replacement_line = *args
18
+
19
+ opts = Slop.parse!(args.compact) do |opt|
20
+ opt.banner %{Amend a line of input in multi-line mode. `amend-line N`, where the N in `amend-line N` represents line to replace.
21
+
22
+ Can also specify a range of lines using `amend-line N..M` syntax. Passing '!' as replacement content deletes the line(s) instead. Aliases: %N
23
+ e.g amend-line 1 puts 'hello world! # replace line 1'
24
+ e.g amend-line 1..4 ! # delete lines 1..4
25
+ e.g amend-line 3 >puts 'goodbye' # insert before line 3
26
+ e.g amend-line puts 'hello again' # no line number modifies immediately preceding line
27
+ }
28
+ opt.on :h, :help, "This message." do
29
+ output.puts opt
30
+ end
31
+ end
32
+
33
+ next if opts.h?
34
+ next output.puts "No input to amend." if eval_string.empty?
35
+
17
36
  replacement_line = "" if !replacement_line
18
37
  input_array = eval_string.each_line.to_a
19
- line_num = line_number ? line_number.to_i : input_array.size - 1
20
- input_array[line_num] = arg_string + "\n"
38
+
39
+ end_line_number = start_line_number.to_i if !end_line_number
40
+ line_range = start_line_number ? (one_index_number(start_line_number.to_i)..one_index_number(end_line_number.to_i)) : input_array.size - 1
41
+
42
+ # delete selected lines if replacement line is '!'
43
+ if arg_string == "!"
44
+ input_array.slice!(line_range)
45
+ elsif arg_string.start_with?(">")
46
+ insert_slot = Array(line_range).first
47
+ input_array.insert(insert_slot, arg_string[1..-1] + "\n")
48
+ else
49
+ input_array[line_range] = arg_string + "\n"
50
+ end
21
51
  eval_string.replace input_array.join
52
+ run "show-input"
53
+ end
54
+
55
+ alias_command(/%.?(-?\d+)?(?:\.\.(-?\d+))?/, /amend-line.?(-?\d+)?(?:\.\.(-?\d+))?/, "")
56
+
57
+ command "play", "Play back a string variable or a method or a file as input. Type `play --help` for more information." do |*args|
58
+ opts = Slop.parse!(args) do |opt|
59
+ opt.banner "Usage: play [OPTIONS] [--help]\nDefault action (no options) is to play the provided string variable\ne.g `play _in_[20] --lines 1..3`\ne.g `play -m Pry#repl --lines 1..-1`\ne.g `play -f Rakefile --lines 5`"
60
+
61
+ opt.on :l, :lines, 'The line (or range of lines) to replay.', true, :as => Range
62
+ opt.on :m, :method, 'Play a method.', true
63
+ opt.on :f, "file", 'The file to replay in context.', true
64
+ opt.on :o, "open", 'When used with the -m switch, it plays the entire method except the last line, leaving the method definition "open". `amend-line` can then be used to modify the method.'
65
+ opt.on :h, :help, "This message." do
66
+ output.puts opt
67
+ end
68
+ end
69
+
70
+ if opts.m?
71
+ meth_name = opts[:m]
72
+ if (meth = get_method_object(meth_name, target, {})).nil?
73
+ output.puts "Invalid method name: #{meth_name}."
74
+ next
75
+ end
76
+ code, _ = code_and_code_type_for(meth)
77
+ next if !code
78
+
79
+ range = opts.l? ? one_index_range_or_number(opts[:l]) : (0..-1)
80
+ range = (0..-2) if opts.o?
81
+
82
+ _pry_.input = StringIO.new(Array(code.each_line.to_a[range]).join)
83
+ elsif opts.f?
84
+ file_name = File.expand_path(opts[:f])
85
+ next output.puts "No such file: #{opts[:f]}" if !File.exists?(file_name)
86
+ text_array = File.readlines(file_name)
87
+ range = opts.l? ? one_index_range_or_number(opts[:l]) : (0..-1)
88
+ range = (0..-2) if opts.o?
89
+
90
+ _pry_.input = StringIO.new(Array(text_array[range]).join)
91
+ else
92
+ code = target.eval(args.first)
93
+
94
+ range = opts.l? ? one_index_range_or_number(opts[:l]) : (0..-1)
95
+ range = (0..-2) if opts.o?
96
+
97
+ eval_string << Array(code.each_line.to_a[range]).join
98
+ end
22
99
  end
23
100
 
24
- alias_command(/%(\d+)?/, /amend-line-?(\d+)?/, "")
101
+ command "hist", "Show and replay Readline history. Type `hist --help` for more info. Aliases: history" do |*args|
102
+ # exclude the current command from history.
103
+ history = Pry.history.to_a[0..-2]
25
104
 
26
- command "hist", "Show and replay Readline history. Type `hist --help` for more info." do |*args|
27
- Slop.parse(args) do |opt|
28
- history = Readline::HISTORY.to_a
29
- opt.banner "Usage: hist [--replay START..END] [--clear] [--grep PATTERN] [--head N] [--tail N] [--help]\n"
105
+ opts = Slop.parse!(args) do |opt|
106
+ opt.banner "Usage: hist [--replay START..END] [--clear] [--grep PATTERN] [--head N] [--tail N] [--help] [--save [START..END] file.txt]\n"
30
107
 
31
108
  opt.on :g, :grep, 'A pattern to match against the history.', true do |pattern|
32
- pattern = Regexp.new arg_string.split(/ /)[1]
109
+ pattern = Regexp.new arg_string.strip.split(/ /, 2).last.strip
33
110
  history.pop
34
111
 
35
112
  history.map!.with_index do |element, index|
@@ -41,64 +118,67 @@ class Pry
41
118
  stagger_output history.compact.join "\n"
42
119
  end
43
120
 
44
- opt.on :head, 'Display the first N items of history', :optional => true, :as => Integer do |limit|
45
- unless opt.grep?
46
- limit ||= 10
47
- list = history.first limit
48
- lines = text.with_line_numbers list.join("\n"), 0
49
- stagger_output lines
50
- end
121
+ opt.on :head, 'Display the first N items of history',
122
+ :optional => true,
123
+ :as => Integer,
124
+ :unless => :grep do |limit|
125
+
126
+ limit ||= 10
127
+ list = history.first limit
128
+ lines = text.with_line_numbers list.join("\n"), 0
129
+ stagger_output lines
51
130
  end
52
131
 
53
- opt.on :t, :tail, 'Display the last N items of history', :optional => true, :as => Integer do |limit|
54
- unless opt.grep?
55
- limit ||= 10
56
- offset = history.size-limit
57
- offset = offset < 0 ? 0 : offset
132
+ opt.on :t, :tail, 'Display the last N items of history',
133
+ :optional => true,
134
+ :as => Integer,
135
+ :unless => :grep do |limit|
58
136
 
59
- list = history.last limit
60
- lines = text.with_line_numbers list.join("\n"), offset
61
- stagger_output lines
62
- end
137
+ limit ||= 10
138
+ offset = history.size - limit
139
+ offset = offset < 0 ? 0 : offset
140
+
141
+ list = history.last limit
142
+ lines = text.with_line_numbers list.join("\n"), offset
143
+ stagger_output lines
63
144
  end
64
145
 
65
- opt.on :s, :show, 'Show the history corresponding to the history line (or range of lines).', true, :as => Range do |range|
66
- unless opt.grep?
67
- start_line = range.is_a?(Range) ? range.first : range
68
- lines = text.with_line_numbers Array(history[range]).join("\n"), start_line
69
- stagger_output lines
70
- end
146
+ opt.on :s, :show, 'Show the history corresponding to the history line (or range of lines).',
147
+ true,
148
+ :as => Range,
149
+ :unless => :grep do |range|
150
+
151
+ start_line = range.is_a?(Range) ? range.first : range
152
+ lines = text.with_line_numbers Array(history[range]).join("\n"), start_line
153
+ stagger_output lines
71
154
  end
72
155
 
73
- opt.on :e, :exclude, 'Exclude pry commands from the history.' do
74
- unless opt.grep?
75
- history.map!.with_index do |element, index|
76
- unless command_processor.valid_command? element
77
- "#{text.blue index}: #{element}"
78
- end
156
+ opt.on :e, :exclude, 'Exclude pry commands from the history.', :unless => :grep do
157
+ history.map!.with_index do |element, index|
158
+ unless command_processor.valid_command? element
159
+ "#{text.blue index}: #{element}"
79
160
  end
80
- stagger_output history.compact.join "\n"
81
161
  end
162
+ stagger_output history.compact.join "\n"
82
163
  end
83
164
 
84
- opt.on :r, :replay, 'The line (or range of lines) to replay.', true, :as => Range do |range|
85
- unless opt.grep?
86
- actions = Array(history[range]).join("\n") + "\n"
87
- Pry.active_instance.input = StringIO.new(actions)
88
- end
165
+ opt.on :r, :replay, 'The line (or range of lines) to replay.',
166
+ true,
167
+ :as => Range,
168
+ :unless => :grep do |range|
169
+ actions = Array(history[range]).join("\n") + "\n"
170
+ _pry_.input = StringIO.new(actions)
89
171
  end
90
172
 
91
- opt.on :c, :clear, 'Clear the history' do
92
- unless opt.grep?
93
- Readline::HISTORY.shift until Readline::HISTORY.empty?
94
- output.puts 'History cleared.'
95
- end
173
+ opt.on "save", "Save history to a file. --save [start..end] output.txt. Pry commands are excluded from saved history.", true, :as => Range
174
+
175
+ opt.on :c, :clear, 'Clear the history', :unless => :grep do
176
+ Pry.history.clear
177
+ output.puts 'History cleared.'
96
178
  end
97
179
 
98
- opt.on :h, :help, 'Show this message.', :tail => true do
99
- unless opt.grep?
100
- output.puts opt.help
101
- end
180
+ opt.on :h, :help, 'Show this message.', :tail => true, :unless => :grep do
181
+ output.puts opt.help
102
182
  end
103
183
 
104
184
  opt.on_empty do
@@ -106,6 +186,63 @@ class Pry
106
186
  stagger_output lines
107
187
  end
108
188
  end
189
+
190
+ # FIXME: hack to save history (this must be refactored)
191
+ if opts["save"]
192
+ file_name = nil
193
+ hist_array = nil
194
+
195
+ case opts["save"]
196
+ when Range
197
+ hist_array = Array(history[opts["save"]])
198
+ next output.puts "Must provide a file name." if !args.first
199
+ file_name = File.expand_path(args.first)
200
+ when String
201
+ hist_array = history
202
+ file_name = File.expand_path(opts["save"])
203
+ end
204
+
205
+ output.puts "Saving history in #{file_name} ..."
206
+ # exclude pry commands
207
+ hist_array.reject! do |element|
208
+ command_processor.valid_command?(element)
209
+ end
210
+
211
+ File.open(file_name, 'w') do |f|
212
+ f.write hist_array.join("\n")
213
+ end
214
+
215
+ output.puts "... history saved."
216
+ end
217
+
218
+ end
219
+
220
+ alias_command "history", "hist", ""
221
+
222
+ helpers do
223
+ def one_index_number(line_number)
224
+ if line_number > 0
225
+ line_number - 1
226
+ elsif line_number < 0
227
+ line_number
228
+ else
229
+ line_number
230
+ end
231
+ end
232
+
233
+ def one_index_range(range)
234
+ Range.new(one_index_number(range.begin), one_index_number(range.end))
235
+ end
236
+
237
+ def one_index_range_or_number(range_or_number)
238
+ case range_or_number
239
+ when Range
240
+ one_index_range(range_or_number)
241
+ else
242
+ one_index_number(range_or_number)
243
+ end
244
+ end
245
+
109
246
  end
110
247
 
111
248
  end
@@ -1,3 +1,5 @@
1
+ require 'tempfile'
2
+
1
3
  class Pry
2
4
  module DefaultCommands
3
5
 
@@ -7,11 +9,13 @@ class Pry
7
9
  target = target()
8
10
 
9
11
  opts = Slop.parse!(args) do |opt|
10
- opt.banner "Usage: show-method [OPTIONS] [METH]\n" \
12
+ opt.banner "Usage: show-method [OPTIONS] [METH 1] [METH 2] [METH N]\n" \
11
13
  "Show the source for method METH. Tries instance methods first and then methods by default.\n" \
12
14
  "e.g: show-method hello_method"
13
15
 
14
16
  opt.on :l, "line-numbers", "Show line numbers."
17
+ opt.on :b, "base-one", "Show line numbers but start numbering at 1 (useful for `amend-line` and `play` commands)."
18
+
15
19
  opt.on :M, "instance-methods", "Operate on instance methods."
16
20
  opt.on :m, :methods, "Operate on methods."
17
21
  opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
@@ -25,27 +29,33 @@ class Pry
25
29
 
26
30
  next if opts.help?
27
31
 
28
- meth_name = args.shift
29
- if (meth = get_method_object(meth_name, target, opts.to_hash(true))).nil?
30
- output.puts "Invalid method name: #{meth_name}. Type `show-method --help` for help"
31
- next
32
- end
32
+ args = [nil] if args.empty?
33
+ args.each do |method_name|
34
+ meth_name = method_name
35
+ if (meth = get_method_object(meth_name, target, opts.to_hash(true))).nil?
36
+ output.puts "Invalid method name: #{meth_name}. Type `show-method --help` for help"
37
+ next
38
+ end
33
39
 
34
- code, code_type = code_and_code_type_for(meth)
35
- next if !code
40
+ code, code_type = code_and_code_type_for(meth)
41
+ next if !code
36
42
 
37
- output.puts make_header(meth, code_type, code)
38
- if Pry.color
39
- code = CodeRay.scan(code, code_type).term
40
- end
43
+ output.puts make_header(meth, code_type, code)
44
+ if Pry.color
45
+ code = CodeRay.scan(code, code_type).term
46
+ end
41
47
 
42
- start_line = false
43
- if opts.l?
44
- start_line = meth.source_location ? meth.source_location.last : 1
45
- end
48
+ start_line = false
49
+ if opts.l?
50
+ start_line = meth.source_location ? meth.source_location.last : 1
51
+ end
52
+
53
+ start_line = opts.b? ? 1 : start_line
46
54
 
47
- render_output(opts.flood?, start_line, code)
48
- code
55
+
56
+ render_output(opts.flood?, start_line, code)
57
+ code
58
+ end
49
59
  end
50
60
 
51
61
  alias_command "show-source", "show-method", ""
@@ -98,18 +108,83 @@ class Pry
98
108
  end
99
109
  end
100
110
 
111
+ command "edit", "Invoke the default editor on a file. Type `edit --help` for more info" do |*args|
112
+ opts = Slop.parse!(args) do |opt|
113
+ opt.banner "Usage: edit [OPTIONS] [FILE]\n" \
114
+ "Edit the method FILE in an editor.\nWhen no file given, opens editor with contents of input buffer and evals after closing." \
115
+ "\nEnsure #{text.bold("Pry.config.editor")} is set to your editor of choice.\n" \
116
+ "e.g: edit sample.rb"
117
+
118
+ opt.on :r, "reload", "Eval file content after editing (evals at top level)"
119
+ opt.on :n, "no-reload", "Do not automatically reload the file after editing (only applies to --ex and -t)."
120
+ opt.on :ex, "Open an editor at the line and file that generated the most recent Exception, reloads file after editing."
121
+ opt.on :t, "temp", "Open a temporary file in an editor with contents of input buffer and eval it in current context after closing (same as `edit` with no args)"
122
+ opt.on :p, "play", "Use the pry `play` command to eval the file content after editing."
123
+ opt.on :l, "line", "Specify line number to jump to in file", true, :as => Integer
124
+ opt.on :h, :help, "This message." do
125
+ output.puts opt
126
+ end
127
+ end
128
+ next if opts.h?
129
+
130
+ should_reload_at_top_level = opts[:r]
131
+ should_reload_locally = false
132
+
133
+ if opts.ex?
134
+ next output.puts "No Exception found." if _pry_.last_exception.nil?
135
+
136
+ if is_core_rbx_path?(_pry_.last_exception.file)
137
+ file_name = rbx_convert_path_to_full(_pry_.last_exception.file)
138
+ else
139
+ file_name = _pry_.last_exception.file
140
+ end
141
+
142
+ line = _pry_.last_exception.line
143
+ next output.puts "Exception has no associated file." if file_name.nil?
144
+ next output.puts "Cannot edit exceptions raised in REPL." if Pry.eval_path == file_name
145
+
146
+ should_reload_at_top_level = opts[:n] ? false : true
147
+
148
+ elsif opts.t? || args.first.nil?
149
+ file_name = Tempfile.new(["tmp", ".rb"]).tap(&:close).path
150
+ File.open(file_name, "w") { |f| f.puts eval_string } if !eval_string.empty?
151
+ line = eval_string.lines.count + 1
152
+ should_reload_locally = opts[:n] ? false : true
153
+ else
154
+ file_name, line = File.expand_path(args.first).split(/:/)
155
+ line = line ? line.to_i : opts[:l].to_i
156
+ end
157
+
158
+ invoke_editor(file_name, line)
159
+ set_file_and_dir_locals(file_name)
160
+
161
+ if opts[:p]
162
+ silence_warnings do
163
+ _pry_.input = StringIO.new(File.readlines(file_name).join)
164
+ end
165
+ elsif should_reload_locally
166
+ silence_warnings do
167
+ eval_string.replace(File.read(file_name))
168
+ end
169
+ elsif should_reload_at_top_level
170
+ silence_warnings do
171
+ TOPLEVEL_BINDING.eval(File.read(file_name), file_name)
172
+ end
173
+ end
174
+ end
175
+
101
176
  command "edit-method", "Edit a method. Type `edit-method --help` for more info." do |*args|
102
177
  target = target()
103
178
 
104
179
  opts = Slop.parse!(args) do |opt|
105
180
  opt.banner "Usage: edit-method [OPTIONS] [METH]\n" \
106
181
  "Edit the method METH in an editor.\n" \
107
- "Ensure #{text.bold("Pry.editor")} is set to your editor of choice.\n" \
182
+ "Ensure #{text.bold("Pry.config.editor")} is set to your editor of choice.\n" \
108
183
  "e.g: edit-method hello_method"
109
184
 
110
185
  opt.on :M, "instance-methods", "Operate on instance methods."
111
186
  opt.on :m, :methods, "Operate on methods."
112
- opt.on :n, "no-reload", "Do not automatically reload the method's file after editting."
187
+ opt.on :n, "no-reload", "Do not automatically reload the method's file after editing."
113
188
  opt.on "no-jump", "Do not fast forward editor to first line of method."
114
189
  opt.on :c, :context, "Select object context to run under.", true do |context|
115
190
  target = Pry.binding_for(target.eval(context))
@@ -127,7 +202,7 @@ class Pry
127
202
  next
128
203
  end
129
204
 
130
- next output.puts "Error: No editor set!\nEnsure that #{text.bold("Pry.editor")} is set to your editor of choice." if !Pry.editor
205
+ next output.puts "Error: No editor set!\nEnsure that #{text.bold("Pry.config.editor")} is set to your editor of choice." if !Pry.config.editor
131
206
 
132
207
  if is_a_c_method?(meth)
133
208
  output.puts "Error: Can't edit a C method."
@@ -139,40 +214,13 @@ class Pry
139
214
  file, line = path_line_for(meth)
140
215
  set_file_and_dir_locals(file)
141
216
 
142
- if Pry.editor.respond_to?(:call)
143
- editor_invocation = Pry.editor.call(file, line)
144
- else
145
- # only use start line if -n option is not used
146
- start_line_syntax = opts["no-jump"] ? "" : start_line_for_editor(line)
147
- editor_invocation = "#{Pry.editor} #{start_line_syntax} #{file}"
148
- end
149
-
150
- run ".#{editor_invocation}"
217
+ invoke_editor(file, opts["no-jump"] ? 0 : line)
151
218
  silence_warnings do
152
- load file if !opts.n?
219
+ load file if !opts.n? && !Pry.config.disable_auto_reload
153
220
  end
154
221
  end
155
222
  end
156
223
 
157
- helpers do
158
-
159
- def start_line_for_editor(line_number)
160
- case Pry.editor
161
- when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/
162
- "+#{line_number}"
163
- when /^mate/, /^geany/
164
- "-l #{line_number}"
165
- else
166
- if RUBY_PLATFORM =~ /mswin|mingw/
167
- ""
168
- else
169
- "+#{line_number}"
170
- end
171
- end
172
- end
173
-
174
- end
175
-
176
224
  end
177
225
  end
178
226
  end