reline 0.5.9 → 0.6.1

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,6 +1,9 @@
1
1
  require 'fiddle/import'
2
2
 
3
3
  class Reline::Windows < Reline::IO
4
+
5
+ attr_writer :output
6
+
4
7
  def initialize
5
8
  @input_buf = []
6
9
  @output_buf = []
@@ -52,7 +55,6 @@ class Reline::Windows < Reline::IO
52
55
  [224, 83] => :key_delete, # Del
53
56
  [224, 71] => :ed_move_to_beg, # Home
54
57
  [224, 79] => :ed_move_to_end, # End
55
- [ 0, 41] => :ed_unassigned, # input method on/off
56
58
  [ 0, 72] => :ed_prev_history, # ↑
57
59
  [ 0, 80] => :ed_next_history, # ↓
58
60
  [ 0, 77] => :ed_next_char, # →
@@ -157,16 +159,27 @@ class Reline::Windows < Reline::IO
157
159
  STD_OUTPUT_HANDLE = -11
158
160
  FILE_TYPE_PIPE = 0x0003
159
161
  FILE_NAME_INFO = 2
162
+ ENABLE_WRAP_AT_EOL_OUTPUT = 2
160
163
  ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
161
164
 
165
+ # Calling Win32API with console handle is reported to fail after executing some external command.
166
+ # We need to refresh console handle and retry the call again.
167
+ private def call_with_console_handle(win32func, *args)
168
+ val = win32func.call(@hConsoleHandle, *args)
169
+ return val if val != 0
170
+
171
+ @hConsoleHandle = @GetStdHandle.call(STD_OUTPUT_HANDLE)
172
+ win32func.call(@hConsoleHandle, *args)
173
+ end
174
+
162
175
  private def getconsolemode
163
- mode = "\000\000\000\000"
164
- @GetConsoleMode.call(@hConsoleHandle, mode)
176
+ mode = +"\0\0\0\0"
177
+ call_with_console_handle(@GetConsoleMode, mode)
165
178
  mode.unpack1('L')
166
179
  end
167
180
 
168
181
  private def setconsolemode(mode)
169
- @SetConsoleMode.call(@hConsoleHandle, mode)
182
+ call_with_console_handle(@SetConsoleMode, mode)
170
183
  end
171
184
 
172
185
  #if @legacy_console
@@ -242,7 +255,7 @@ class Reline::Windows < Reline::IO
242
255
 
243
256
  key = KeyEventRecord.new(virtual_key_code, char_code, control_key_state)
244
257
 
245
- match = KEY_MAP.find { |args,| key.matches?(**args) }
258
+ match = KEY_MAP.find { |args,| key.match?(**args) }
246
259
  unless match.nil?
247
260
  @output_buf.concat(match.last)
248
261
  return
@@ -297,6 +310,14 @@ class Reline::Windows < Reline::IO
297
310
  yield
298
311
  end
299
312
 
313
+ def write(string)
314
+ @output.write(string)
315
+ end
316
+
317
+ def buffered_output
318
+ yield
319
+ end
320
+
300
321
  def getc(_timeout_second)
301
322
  check_input_event
302
323
  @output_buf.shift
@@ -334,35 +355,38 @@ class Reline::Windows < Reline::IO
334
355
  # [18,2] dwMaximumWindowSize.X
335
356
  # [20,2] dwMaximumWindowSize.Y
336
357
  csbi = 0.chr * 22
337
- return if @GetConsoleScreenBufferInfo.call(@hConsoleHandle, csbi) == 0
338
- csbi
358
+ if call_with_console_handle(@GetConsoleScreenBufferInfo, csbi) != 0
359
+ # returns [width, height, x, y, attributes, left, top, right, bottom]
360
+ csbi.unpack("s9")
361
+ else
362
+ return nil
363
+ end
339
364
  end
340
365
 
366
+ ALTERNATIVE_CSBI = [80, 24, 0, 0, 7, 0, 0, 79, 23].freeze
367
+
341
368
  def get_screen_size
342
- unless csbi = get_console_screen_buffer_info
343
- return [1, 1]
344
- end
345
- csbi[0, 4].unpack('SS').reverse
369
+ width, _, _, _, _, _, top, _, bottom = get_console_screen_buffer_info || ALTERNATIVE_CSBI
370
+ [bottom - top + 1, width]
346
371
  end
347
372
 
348
373
  def cursor_pos
349
- unless csbi = get_console_screen_buffer_info
350
- return Reline::CursorPos.new(0, 0)
351
- end
352
- x = csbi[4, 2].unpack1('s')
353
- y = csbi[6, 2].unpack1('s')
354
- Reline::CursorPos.new(x, y)
374
+ _, _, x, y, _, _, top, = get_console_screen_buffer_info || ALTERNATIVE_CSBI
375
+ Reline::CursorPos.new(x, y - top)
355
376
  end
356
377
 
357
378
  def move_cursor_column(val)
358
- @SetConsoleCursorPosition.call(@hConsoleHandle, cursor_pos.y * 65536 + val)
379
+ _, _, _, y, = get_console_screen_buffer_info
380
+ call_with_console_handle(@SetConsoleCursorPosition, y * 65536 + val) if y
359
381
  end
360
382
 
361
383
  def move_cursor_up(val)
362
384
  if val > 0
363
- y = cursor_pos.y - val
385
+ _, _, x, y, _, _, top, = get_console_screen_buffer_info
386
+ return unless y
387
+ y = (y - top) - val
364
388
  y = 0 if y < 0
365
- @SetConsoleCursorPosition.call(@hConsoleHandle, y * 65536 + cursor_pos.x)
389
+ call_with_console_handle(@SetConsoleCursorPosition, (y + top) * 65536 + x)
366
390
  elsif val < 0
367
391
  move_cursor_down(-val)
368
392
  end
@@ -370,62 +394,43 @@ class Reline::Windows < Reline::IO
370
394
 
371
395
  def move_cursor_down(val)
372
396
  if val > 0
373
- return unless csbi = get_console_screen_buffer_info
374
- screen_height = get_screen_size.first
375
- y = cursor_pos.y + val
376
- y = screen_height - 1 if y > (screen_height - 1)
377
- @SetConsoleCursorPosition.call(@hConsoleHandle, (cursor_pos.y + val) * 65536 + cursor_pos.x)
397
+ _, _, x, y, _, _, top, _, bottom = get_console_screen_buffer_info
398
+ return unless y
399
+ screen_height = bottom - top
400
+ y = (y - top) + val
401
+ y = screen_height if y > screen_height
402
+ call_with_console_handle(@SetConsoleCursorPosition, (y + top) * 65536 + x)
378
403
  elsif val < 0
379
404
  move_cursor_up(-val)
380
405
  end
381
406
  end
382
407
 
383
408
  def erase_after_cursor
384
- return unless csbi = get_console_screen_buffer_info
385
- attributes = csbi[8, 2].unpack1('S')
386
- cursor = csbi[4, 4].unpack1('L')
409
+ width, _, x, y, attributes, = get_console_screen_buffer_info
410
+ return unless x
387
411
  written = 0.chr * 4
388
- @FillConsoleOutputCharacter.call(@hConsoleHandle, 0x20, get_screen_size.last - cursor_pos.x, cursor, written)
389
- @FillConsoleOutputAttribute.call(@hConsoleHandle, attributes, get_screen_size.last - cursor_pos.x, cursor, written)
390
- end
391
-
392
- def scroll_down(val)
393
- return if val < 0
394
- return unless csbi = get_console_screen_buffer_info
395
- buffer_width, buffer_lines, x, y, attributes, window_left, window_top, window_bottom = csbi.unpack('ssssSssx2s')
396
- screen_height = window_bottom - window_top + 1
397
- val = screen_height if val > screen_height
398
-
399
- if @legacy_console || window_left != 0
400
- # unless ENABLE_VIRTUAL_TERMINAL,
401
- # if srWindow.Left != 0 then it's conhost.exe hosted console
402
- # and puts "\n" causes horizontal scroll. its glitch.
403
- # FYI irb write from culumn 1, so this gives no gain.
404
- scroll_rectangle = [0, val, buffer_width, buffer_lines - val].pack('s4')
405
- destination_origin = 0 # y * 65536 + x
406
- fill = [' '.ord, attributes].pack('SS')
407
- @ScrollConsoleScreenBuffer.call(@hConsoleHandle, scroll_rectangle, nil, destination_origin, fill)
408
- else
409
- origin_x = x + 1
410
- origin_y = y - window_top + 1
411
- @output.write [
412
- (origin_y != screen_height) ? "\e[#{screen_height};H" : nil,
413
- "\n" * val,
414
- (origin_y != screen_height or !x.zero?) ? "\e[#{origin_y};#{origin_x}H" : nil
415
- ].join
416
- end
412
+ call_with_console_handle(@FillConsoleOutputCharacter, 0x20, width - x, y * 65536 + x, written)
413
+ call_with_console_handle(@FillConsoleOutputAttribute, attributes, width - x, y * 65536 + x, written)
414
+ end
415
+
416
+ # This only works when the cursor is at the bottom of the scroll range
417
+ # For more details, see https://github.com/ruby/reline/pull/577#issuecomment-1646679623
418
+ def scroll_down(x)
419
+ return if x.zero?
420
+ # We use `\n` instead of CSI + S because CSI + S would cause https://github.com/ruby/reline/issues/576
421
+ @output.write "\n" * x
417
422
  end
418
423
 
419
424
  def clear_screen
420
425
  if @legacy_console
421
- return unless csbi = get_console_screen_buffer_info
422
- buffer_width, _buffer_lines, attributes, window_top, window_bottom = csbi.unpack('ss@8S@12sx2s')
423
- fill_length = buffer_width * (window_bottom - window_top + 1)
424
- screen_topleft = window_top * 65536
426
+ width, _, _, _, attributes, _, top, _, bottom = get_console_screen_buffer_info
427
+ return unless width
428
+ fill_length = width * (bottom - top + 1)
429
+ screen_topleft = top * 65536
425
430
  written = 0.chr * 4
426
- @FillConsoleOutputCharacter.call(@hConsoleHandle, 0x20, fill_length, screen_topleft, written)
427
- @FillConsoleOutputAttribute.call(@hConsoleHandle, attributes, fill_length, screen_topleft, written)
428
- @SetConsoleCursorPosition.call(@hConsoleHandle, screen_topleft)
431
+ call_with_console_handle(@FillConsoleOutputCharacter, 0x20, fill_length, screen_topleft, written)
432
+ call_with_console_handle(@FillConsoleOutputAttribute, attributes, fill_length, screen_topleft, written)
433
+ call_with_console_handle(@SetConsoleCursorPosition, screen_topleft)
429
434
  else
430
435
  @output.write "\e[2J" "\e[H"
431
436
  end
@@ -439,14 +444,14 @@ class Reline::Windows < Reline::IO
439
444
  size = 100
440
445
  visible = 0 # 0 means false
441
446
  cursor_info = [size, visible].pack('Li')
442
- @SetConsoleCursorInfo.call(@hConsoleHandle, cursor_info)
447
+ call_with_console_handle(@SetConsoleCursorInfo, cursor_info)
443
448
  end
444
449
 
445
450
  def show_cursor
446
451
  size = 100
447
452
  visible = 1 # 1 means true
448
453
  cursor_info = [size, visible].pack('Li')
449
- @SetConsoleCursorInfo.call(@hConsoleHandle, cursor_info)
454
+ call_with_console_handle(@SetConsoleCursorInfo, cursor_info)
450
455
  end
451
456
 
452
457
  def set_winch_handler(&handler)
@@ -462,6 +467,28 @@ class Reline::Windows < Reline::IO
462
467
  # do nothing
463
468
  end
464
469
 
470
+ def disable_auto_linewrap(setting = true, &block)
471
+ mode = getconsolemode
472
+ if 0 == (mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING)
473
+ if block
474
+ begin
475
+ setconsolemode(mode & ~ENABLE_WRAP_AT_EOL_OUTPUT)
476
+ block.call
477
+ ensure
478
+ setconsolemode(mode | ENABLE_WRAP_AT_EOL_OUTPUT)
479
+ end
480
+ else
481
+ if setting
482
+ setconsolemode(mode & ~ENABLE_WRAP_AT_EOL_OUTPUT)
483
+ else
484
+ setconsolemode(mode | ENABLE_WRAP_AT_EOL_OUTPUT)
485
+ end
486
+ end
487
+ else
488
+ block.call if block
489
+ end
490
+ end
491
+
465
492
  class KeyEventRecord
466
493
 
467
494
  attr_reader :virtual_key_code, :char_code, :control_key_state, :control_keys
@@ -491,7 +518,7 @@ class Reline::Windows < Reline::IO
491
518
  # Verifies if the arguments match with this key event.
492
519
  # Nil arguments are ignored, but at least one must be passed as non-nil.
493
520
  # To verify that no control keys were pressed, pass an empty array: `control_keys: []`.
494
- def matches?(control_keys: nil, virtual_key_code: nil, char_code: nil)
521
+ def match?(control_keys: nil, virtual_key_code: nil, char_code: nil)
495
522
  raise ArgumentError, 'No argument was passed to match key event' if control_keys.nil? && virtual_key_code.nil? && char_code.nil?
496
523
 
497
524
  (control_keys.nil? || [*control_keys].sort == @control_keys) &&
data/lib/reline/io.rb CHANGED
@@ -35,6 +35,20 @@ module Reline
35
35
  def reset_color_sequence
36
36
  self.class::RESET_COLOR
37
37
  end
38
+
39
+ # Read a single encoding valid character from the input.
40
+ def read_single_char(keyseq_timeout)
41
+ buffer = String.new(encoding: Encoding::ASCII_8BIT)
42
+ loop do
43
+ timeout = buffer.empty? ? Float::INFINITY : keyseq_timeout
44
+ c = getc(timeout)
45
+ return unless c
46
+
47
+ buffer << c
48
+ encoded = buffer.dup.force_encoding(encoding)
49
+ return encoded if encoded.valid_encoding?
50
+ end
51
+ end
38
52
  end
39
53
  end
40
54
 
@@ -1,12 +1,18 @@
1
1
  class Reline::KeyActor::Base
2
- def initialize(mapping = [])
3
- @mapping = mapping
2
+ def initialize(mappings = nil)
4
3
  @matching_bytes = {}
5
4
  @key_bindings = {}
5
+ add_mappings(mappings) if mappings
6
6
  end
7
7
 
8
- def get_method(key)
9
- @mapping[key]
8
+ def add_mappings(mappings)
9
+ add([27], :ed_ignore)
10
+ 128.times do |key|
11
+ func = mappings[key]
12
+ meta_func = mappings[key | 0b10000000]
13
+ add([key], func) if func
14
+ add([27, key], meta_func) if meta_func
15
+ end
10
16
  end
11
17
 
12
18
  def add(key, func)
@@ -15,7 +15,7 @@ module Reline::KeyActor
15
15
  # 6 ^F
16
16
  :ed_next_char,
17
17
  # 7 ^G
18
- :ed_unassigned,
18
+ nil,
19
19
  # 8 ^H
20
20
  :em_delete_prev_char,
21
21
  # 9 ^I
@@ -49,19 +49,19 @@ module Reline::KeyActor
49
49
  # 23 ^W
50
50
  :em_kill_region,
51
51
  # 24 ^X
52
- :ed_unassigned,
52
+ nil,
53
53
  # 25 ^Y
54
54
  :em_yank,
55
55
  # 26 ^Z
56
56
  :ed_ignore,
57
57
  # 27 ^[
58
- :ed_unassigned,
58
+ nil,
59
59
  # 28 ^\
60
60
  :ed_ignore,
61
61
  # 29 ^]
62
62
  :ed_ignore,
63
63
  # 30 ^^
64
- :ed_unassigned,
64
+ nil,
65
65
  # 31 ^_
66
66
  :undo,
67
67
  # 32 SPACE
@@ -257,101 +257,101 @@ module Reline::KeyActor
257
257
  # 127 ^?
258
258
  :em_delete_prev_char,
259
259
  # 128 M-^@
260
- :ed_unassigned,
260
+ nil,
261
261
  # 129 M-^A
262
- :ed_unassigned,
262
+ nil,
263
263
  # 130 M-^B
264
- :ed_unassigned,
264
+ nil,
265
265
  # 131 M-^C
266
- :ed_unassigned,
266
+ nil,
267
267
  # 132 M-^D
268
- :ed_unassigned,
268
+ nil,
269
269
  # 133 M-^E
270
- :ed_unassigned,
270
+ nil,
271
271
  # 134 M-^F
272
- :ed_unassigned,
272
+ nil,
273
273
  # 135 M-^G
274
- :ed_unassigned,
274
+ nil,
275
275
  # 136 M-^H
276
276
  :ed_delete_prev_word,
277
277
  # 137 M-^I
278
- :ed_unassigned,
278
+ nil,
279
279
  # 138 M-^J
280
280
  :key_newline,
281
281
  # 139 M-^K
282
- :ed_unassigned,
282
+ nil,
283
283
  # 140 M-^L
284
284
  :ed_clear_screen,
285
285
  # 141 M-^M
286
286
  :key_newline,
287
287
  # 142 M-^N
288
- :ed_unassigned,
288
+ nil,
289
289
  # 143 M-^O
290
- :ed_unassigned,
290
+ nil,
291
291
  # 144 M-^P
292
- :ed_unassigned,
292
+ nil,
293
293
  # 145 M-^Q
294
- :ed_unassigned,
294
+ nil,
295
295
  # 146 M-^R
296
- :ed_unassigned,
296
+ nil,
297
297
  # 147 M-^S
298
- :ed_unassigned,
298
+ nil,
299
299
  # 148 M-^T
300
- :ed_unassigned,
300
+ nil,
301
301
  # 149 M-^U
302
- :ed_unassigned,
302
+ nil,
303
303
  # 150 M-^V
304
- :ed_unassigned,
304
+ nil,
305
305
  # 151 M-^W
306
- :ed_unassigned,
306
+ nil,
307
307
  # 152 M-^X
308
- :ed_unassigned,
308
+ nil,
309
309
  # 153 M-^Y
310
310
  :em_yank_pop,
311
311
  # 154 M-^Z
312
- :ed_unassigned,
312
+ nil,
313
313
  # 155 M-^[
314
- :ed_unassigned,
314
+ nil,
315
315
  # 156 M-^\
316
- :ed_unassigned,
316
+ nil,
317
317
  # 157 M-^]
318
- :ed_unassigned,
318
+ nil,
319
319
  # 158 M-^^
320
- :ed_unassigned,
320
+ nil,
321
321
  # 159 M-^_
322
322
  :redo,
323
323
  # 160 M-SPACE
324
324
  :em_set_mark,
325
325
  # 161 M-!
326
- :ed_unassigned,
326
+ nil,
327
327
  # 162 M-"
328
- :ed_unassigned,
328
+ nil,
329
329
  # 163 M-#
330
- :ed_unassigned,
330
+ nil,
331
331
  # 164 M-$
332
- :ed_unassigned,
332
+ nil,
333
333
  # 165 M-%
334
- :ed_unassigned,
334
+ nil,
335
335
  # 166 M-&
336
- :ed_unassigned,
336
+ nil,
337
337
  # 167 M-'
338
- :ed_unassigned,
338
+ nil,
339
339
  # 168 M-(
340
- :ed_unassigned,
340
+ nil,
341
341
  # 169 M-)
342
- :ed_unassigned,
342
+ nil,
343
343
  # 170 M-*
344
- :ed_unassigned,
344
+ nil,
345
345
  # 171 M-+
346
- :ed_unassigned,
346
+ nil,
347
347
  # 172 M-,
348
- :ed_unassigned,
348
+ nil,
349
349
  # 173 M--
350
- :ed_unassigned,
350
+ nil,
351
351
  # 174 M-.
352
- :ed_unassigned,
352
+ nil,
353
353
  # 175 M-/
354
- :ed_unassigned,
354
+ nil,
355
355
  # 176 M-0
356
356
  :ed_argument_digit,
357
357
  # 177 M-1
@@ -373,21 +373,21 @@ module Reline::KeyActor
373
373
  # 185 M-9
374
374
  :ed_argument_digit,
375
375
  # 186 M-:
376
- :ed_unassigned,
376
+ nil,
377
377
  # 187 M-;
378
- :ed_unassigned,
378
+ nil,
379
379
  # 188 M-<
380
- :ed_unassigned,
380
+ nil,
381
381
  # 189 M-=
382
- :ed_unassigned,
382
+ nil,
383
383
  # 190 M->
384
- :ed_unassigned,
384
+ nil,
385
385
  # 191 M-?
386
- :ed_unassigned,
386
+ nil,
387
387
  # 192 M-@
388
- :ed_unassigned,
388
+ nil,
389
389
  # 193 M-A
390
- :ed_unassigned,
390
+ nil,
391
391
  # 194 M-B
392
392
  :ed_prev_word,
393
393
  # 195 M-C
@@ -395,63 +395,63 @@ module Reline::KeyActor
395
395
  # 196 M-D
396
396
  :em_delete_next_word,
397
397
  # 197 M-E
398
- :ed_unassigned,
398
+ nil,
399
399
  # 198 M-F
400
400
  :em_next_word,
401
401
  # 199 M-G
402
- :ed_unassigned,
402
+ nil,
403
403
  # 200 M-H
404
- :ed_unassigned,
404
+ nil,
405
405
  # 201 M-I
406
- :ed_unassigned,
406
+ nil,
407
407
  # 202 M-J
408
- :ed_unassigned,
408
+ nil,
409
409
  # 203 M-K
410
- :ed_unassigned,
410
+ nil,
411
411
  # 204 M-L
412
412
  :em_lower_case,
413
413
  # 205 M-M
414
- :ed_unassigned,
414
+ nil,
415
415
  # 206 M-N
416
416
  :vi_search_next,
417
417
  # 207 M-O
418
- :ed_unassigned,
418
+ nil,
419
419
  # 208 M-P
420
420
  :vi_search_prev,
421
421
  # 209 M-Q
422
- :ed_unassigned,
422
+ nil,
423
423
  # 210 M-R
424
- :ed_unassigned,
424
+ nil,
425
425
  # 211 M-S
426
- :ed_unassigned,
426
+ nil,
427
427
  # 212 M-T
428
- :ed_unassigned,
428
+ nil,
429
429
  # 213 M-U
430
430
  :em_upper_case,
431
431
  # 214 M-V
432
- :ed_unassigned,
432
+ nil,
433
433
  # 215 M-W
434
- :ed_unassigned,
434
+ nil,
435
435
  # 216 M-X
436
- :ed_unassigned,
436
+ nil,
437
437
  # 217 M-Y
438
438
  :em_yank_pop,
439
439
  # 218 M-Z
440
- :ed_unassigned,
440
+ nil,
441
441
  # 219 M-[
442
- :ed_unassigned,
442
+ nil,
443
443
  # 220 M-\
444
- :ed_unassigned,
444
+ nil,
445
445
  # 221 M-]
446
- :ed_unassigned,
446
+ nil,
447
447
  # 222 M-^
448
- :ed_unassigned,
448
+ nil,
449
449
  # 223 M-_
450
- :ed_unassigned,
450
+ nil,
451
451
  # 224 M-`
452
- :ed_unassigned,
452
+ nil,
453
453
  # 225 M-a
454
- :ed_unassigned,
454
+ nil,
455
455
  # 226 M-b
456
456
  :ed_prev_word,
457
457
  # 227 M-c
@@ -459,57 +459,57 @@ module Reline::KeyActor
459
459
  # 228 M-d
460
460
  :em_delete_next_word,
461
461
  # 229 M-e
462
- :ed_unassigned,
462
+ nil,
463
463
  # 230 M-f
464
464
  :em_next_word,
465
465
  # 231 M-g
466
- :ed_unassigned,
466
+ nil,
467
467
  # 232 M-h
468
- :ed_unassigned,
468
+ nil,
469
469
  # 233 M-i
470
- :ed_unassigned,
470
+ nil,
471
471
  # 234 M-j
472
- :ed_unassigned,
472
+ nil,
473
473
  # 235 M-k
474
- :ed_unassigned,
474
+ nil,
475
475
  # 236 M-l
476
476
  :em_lower_case,
477
477
  # 237 M-m
478
- :ed_unassigned,
478
+ nil,
479
479
  # 238 M-n
480
480
  :vi_search_next,
481
481
  # 239 M-o
482
- :ed_unassigned,
482
+ nil,
483
483
  # 240 M-p
484
484
  :vi_search_prev,
485
485
  # 241 M-q
486
- :ed_unassigned,
486
+ nil,
487
487
  # 242 M-r
488
- :ed_unassigned,
488
+ nil,
489
489
  # 243 M-s
490
- :ed_unassigned,
490
+ nil,
491
491
  # 244 M-t
492
492
  :ed_transpose_words,
493
493
  # 245 M-u
494
494
  :em_upper_case,
495
495
  # 246 M-v
496
- :ed_unassigned,
496
+ nil,
497
497
  # 247 M-w
498
- :ed_unassigned,
498
+ nil,
499
499
  # 248 M-x
500
- :ed_unassigned,
500
+ nil,
501
501
  # 249 M-y
502
- :ed_unassigned,
502
+ nil,
503
503
  # 250 M-z
504
- :ed_unassigned,
504
+ nil,
505
505
  # 251 M-{
506
- :ed_unassigned,
506
+ nil,
507
507
  # 252 M-|
508
- :ed_unassigned,
508
+ nil,
509
509
  # 253 M-}
510
- :ed_unassigned,
510
+ nil,
511
511
  # 254 M-~
512
- :ed_unassigned,
512
+ nil,
513
513
  # 255 M-^?
514
514
  :ed_delete_prev_word
515
515
  # EOF