14

Получаем 1 символ из ввода пользователя, перехватывая нажатия Ctrl и Alt.

Содержимое test.rb

def get_char
        key = ""
        begin
                  system("stty raw -echo")
                  f = STDIN.getc
                  if (1..26) === f
                          key = "C-" + (f + 96).chr
                  elsif f == ?\e
                        c = STDIN.getc
                        if (1..26) === c
                                key = "C-A-" + (c + 96).chr
                        else
                                key = "A-" + c.chr
                        end
                  else
                          if f >= 208
                                  key = f.chr + STDIN.getc.chr
                          else
                                  key = f.chr
                          end
                  end
        ensure
                  system("stty -raw echo")
        end
        key
end
while c = get_char
        exit if c == "q"
        puts c
end

Запускаем:

$ ruby test.rb

a
a

ф
ф

Ctrl+s
C-s

Alt+d
A-d

1
1

Ctrl+Alt+w
C-A-w