Readline

GNU Readline �ˤ�륳�ޥ�ɥ饤�����ϥ��󥿥ե��������󶡤���⥸�塼 ��Ǥ���

�Ȥ���

���Τ褦�ˤ��ƻȤ��ޤ���

require "readline"

while buf = Readline.readline("> ", true)
    print "-> ", buf, "\n"
end

�⥸�塼��ؿ�

Readline.readline([prompt, [add_hist]])

�桼������Υ������Ϥ��ᡢ���Ϥ���ʸ������֤��ޤ���EOF(UNIX �� �� ^D)�����Ϥ���� nil ���֤��ޤ���

���ϻ��ˤϹ����Խ�����ǽ�ǡ�vi �⡼�ɤ� Emacs �⡼�ɤ��Ѱդ���Ƥ��ޤ��� (Readline.vi_editing_mode��Readline.emacs_editing_mode �򻲾�)���ǥե���Ȥ� Emacs �⡼�ɤǤ���

ʸ���� prompt ����ꤹ��ȥ�����������ˤ���ʸ�����ɽ�����ޤ���

add_hist �����ʤ�С����Ϥ���ʸ����ϥҥ��ȥ�˵�Ͽ����ޤ��� Emacs �⡼�ɤʤ� ^P �����Ϥ��뤳�Ȥ��������Ϥ���ʸ�����ƤӽФ��� �ꡢReadline::HISTORY �⥸�塼��ˤ��ҥ��ȥ�����Ƥ��� �뤳�Ȥ��Ǥ��ޤ������Υǥե�����ͤ� nil �Ǥ���

����

�����Ԥ��ξ��֤� ^C ����� ruby ���󥿥ץ꥿����Ȥ⽪λ��ü���� �֤��������ޤ��󡣤������򤹤�ˤϡ�

stty_save = `stty -g`.chomp
begin
  while buf = Readline.readline
      p buf
  end
rescue Interrupt
  system("stty", stty_save)
  exit
end

�ޤ��ϡ�

stty_save = `stty -g`.chomp
trap("INT") { system "stty", stty_save; exit }

while buf = Readline.readline
  p buf
end

�ʤɤȤ��ޤ���ñ�ˡ�^C ������դ��ʤ���������ʤ�аʲ��ǽ�ʬ�Ǥ���

trap("INT", "SIG_IGN")

while buf = Readline.readline
  p buf
end

�⥸�塼��᥽�å�

Readline.completion_proc= proc

�䴰����ư�����ꤹ��Proc���֥������Ȥ���ꤷ�ޤ��� proc�ϰ���������ʸ������ꡢ����ʸ�����������֤��褦�� ���Ƥ��������� ����ʸ�����ñ�줴�Ȥ˶��ڤ��ޤ��� bash���䴰��Ʊ����/[ \t\n\"\\'`@$><=;|&{(]/��ñ��˶��ڤ�ޤ���*1

require 'readline'

WORDS = %w(foo foobar foobaz)

Readline.completion_proc = proc {|word|
    WORDS.grep(/^#{Regexp.quote word}/)
}

while buf = Readline.readline("> ")
  p buf
end
Readline.basic_word_break_characters=(str)
Readline.basic_word_break_characters

�䴰����ñ��Ʊ�Τζ��ڤ����ꤹ�� basic ��ʸ���󡣥ǥե���ȤǤ� Bash�Ѥ�ʸ���� " \t\n\"\\'`@$><=;|&{(" (���ڡ����ޤ�)�ˤʤäƤ��ޤ���

Readline.completer_word_break_characters=(str)
Readline.completer_word_break_characters

rl_complete_internal() �ǻȤ��롢�䴰����ñ��Ʊ�Τζ��ڤ����ꤹ�� ʸ����Ǥ����ǥե���ȤǤ� Readline.basic_word_break_characters �Ǥ���

Readline.basic_quote_characters=(str)
Readline.basic_quote_characters

���������ꤷ�ޤ����ǥե���ȤǤϡ�/"'/ �Ǥ���

Readline.completer_quote_characters=(str)
Readline.completer_quote_character

�䴰���ΰ��������ꤷ�ޤ������ΰ�����δ֤Ǥϡ�completer_word_break_characters �⡢���̤�ʸ����Ȥ��ư����ޤ���

Readline.filename_quote_characters=(str)
Readline.filename_quote_characters

�䴰���Υե�����̾�ΰ��������ꤷ�ޤ����ǥե���ȤǤ� nil �Ǥ���

Readline.completion_proc

�䴰����ư�����ꤹ��Proc���֥������Ȥ��֤��ޤ���

Readline.completion_case_fold=(bool)
Readline.completion_case_fold

�����䴰������ʸ������ʸ���ζ��̤򤹤뤫�ɤ�������ꤷ�ޤ��� bool �����ʤ�ж��̤��ޤ���

Readline.vi_editing_mode

�Խ��⡼�ɤ� vi �⡼�ɤˤ��ޤ����ܺ٤ϡ�GNU Readline �Υޥ˥奢�� �򻲾Ȥ��Ƥ���������

Readline.emacs_editing_mode

�Խ��⡼�ɤ� Emacs �⡼�ɤˤ��ޤ����ǥե���Ȥ� Emacs �⡼�ɤǤ���

�ܺ٤ϡ�GNU Readline �Υޥ˥奢��򻲾Ȥ��Ƥ���������

���

Readline::FILENAME_COMPLETION_PROC
Readline::USERNAME_COMPLETION_PROC

�饤�֥����Ȥ߹��ߤ��Ѱդ��줿�䴰�� Proc ���֥������ȤǤ��� ���줾��ե�����̾���桼��̾���䴰��Ԥ��ޤ��� Readline.completion_proc= �ǻ��Ѥ��ޤ���

Readline::HISTORY

Readline�⥸�塼������Ϥ������Ƥ���������Ȥ��Ƶ�Ͽ����ޤ�(ͭ���ˤ� �Ƥ���ФǤ�����Readline.readline �򻲾�)

��������ˤ�ꡢ������������Ƥ˥����������뤳�Ȥ��Ǥ��ޤ��������褽�� Array ���饹�Υ��󥹥��󥹤Τ褦�˿��񤤤ޤ��� (Enumerable �⥸�塼���extend ���Ƥ��ޤ�)

while buf = Readline.readline("> ", true)
  p Readline::HISTORY.to_a
  print "-> ", buf, "\n"
end

���Ԥ�ľ�������Ϥ�Ʊ�����Ƥ���������˻Ĥ������ʤ��Ȼפ������Τ�ޤ��� ���ξ�硢�ʲ��Τ褦�ˤ��ޤ���

while buf = Readline.readline("> ", true)
  # p Readline::HISTORY.to_a
  Readline::HISTORY.pop if /^\s*$/ =~ buf

  begin
    Readline::HISTORY.pop if Readline::HISTORY[Readline::HISTORY.length-2] == buf
  rescue IndexError
  end

  # p Readline::HISTORY.to_a
  print "-> ", buf, "\n"
end

����