mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 14:05:02 +02:00

(https://github.com/ruby/reline/pull/509) * Add key bindings for PgUp, PgDn * Match behavior of readline 8.2 In the latest readline (8.2), page-up and page-down are bound to history-search-backward and history-search-forward by default. We would like reline to have the same default behavior.
96 lines
2.7 KiB
Ruby
96 lines
2.7 KiB
Ruby
require_relative 'helper'
|
|
require 'reline/ansi'
|
|
|
|
class Reline::ANSI::TestWithTerminfo < Reline::TestCase
|
|
def setup
|
|
Reline.send(:test_mode, ansi: true)
|
|
@config = Reline::Config.new
|
|
Reline::IOGate.set_default_key_bindings(@config, allow_terminfo: true)
|
|
end
|
|
|
|
def teardown
|
|
Reline.test_reset
|
|
end
|
|
|
|
# Home key
|
|
def test_khome
|
|
assert_key_binding(Reline::Terminfo.tigetstr('khome'), :ed_move_to_beg)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# End key
|
|
def test_kend
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kend'), :ed_move_to_end)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# Delete key
|
|
def test_kdch1
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kdch1'), :key_delete)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# PgUp key
|
|
def test_kpp
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kpp'), :ed_search_prev_history)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# PgDn key
|
|
def test_knp
|
|
assert_key_binding(Reline::Terminfo.tigetstr('knp'), :ed_search_next_history)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# Up arrow key
|
|
def test_kcuu1
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kcuu1'), :ed_prev_history)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# Down arrow key
|
|
def test_kcud1
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kcud1'), :ed_next_history)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# Right arrow key
|
|
def test_kcuf1
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kcuf1'), :ed_next_char)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# Left arrow key
|
|
def test_kcub1
|
|
assert_key_binding(Reline::Terminfo.tigetstr('kcub1'), :ed_prev_char)
|
|
rescue Reline::Terminfo::TerminfoError => e
|
|
omit e.message
|
|
end
|
|
|
|
# Ctrl+arrow and Meta+arrow; always mapped regardless of terminfo enabled or not
|
|
def test_extended
|
|
assert_key_binding("\e[1;5C", :em_next_word) # Ctrl+→
|
|
assert_key_binding("\e[1;5D", :ed_prev_word) # Ctrl+←
|
|
assert_key_binding("\e[1;3C", :em_next_word) # Meta+→
|
|
assert_key_binding("\e[1;3D", :ed_prev_word) # Meta+←
|
|
end
|
|
|
|
# Shift-Tab; always mapped regardless of terminfo enabled or not
|
|
def test_shift_tab
|
|
assert_key_binding("\e[Z", :completion_journey_up, [:emacs, :vi_insert])
|
|
end
|
|
|
|
# A few emacs bindings that are always mapped regardless of terminfo enabled or not
|
|
def test_more_emacs
|
|
assert_key_binding("\e ", :em_set_mark, [:emacs])
|
|
assert_key_binding("\C-x\C-x", :em_exchange_mark, [:emacs])
|
|
end
|
|
end if Reline::Terminfo.enabled?
|