File: C:/Ruby27-x64/share/doc/ruby/html/Reline/Core.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>class Reline::Core - RDoc Documentation</title>
<script type="text/javascript">
var rdoc_rel_prefix = "../";
var index_rel_prefix = "../";
</script>
<script src="../js/navigation.js" defer></script>
<script src="../js/search.js" defer></script>
<script src="../js/search_index.js" defer></script>
<script src="../js/searcher.js" defer></script>
<script src="../js/darkfish.js" defer></script>
<link href="../css/fonts.css" rel="stylesheet">
<link href="../css/rdoc.css" rel="stylesheet">
<body id="top" role="document" class="class">
<nav role="navigation">
<div id="project-navigation">
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
<a href="../index.html" rel="home">Home</a>
</h2>
<div id="table-of-contents-navigation">
<a href="../table_of_contents.html#pages">Pages</a>
<a href="../table_of_contents.html#classes">Classes</a>
<a href="../table_of_contents.html#methods">Methods</a>
</div>
</div>
<div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<div id="search-field-wrapper">
<input id="search-field" role="combobox" aria-label="Search"
aria-autocomplete="list" aria-controls="search-results"
type="text" name="search" placeholder="Search" spellcheck="false"
title="Type to search, Up and Down to navigate, Enter to load">
</div>
<ul id="search-results" aria-label="Search Results"
aria-busy="false" aria-expanded="false"
aria-atomic="false" class="initially-hidden"></ul>
</form>
</div>
</div>
<div id="class-metadata">
<div id="parent-class-section" class="nav-section">
<h3>Parent</h3>
<p class="link"><a href="../Object.html">Object</a>
</div>
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
<h3>Methods</h3>
<ul class="link-list" role="directory">
<li ><a href="#method-c-new">::new</a>
<li ><a href="#method-i-auto_indent_proc-3D">#auto_indent_proc=</a>
<li ><a href="#method-i-basic_quote_characters-3D">#basic_quote_characters=</a>
<li ><a href="#method-i-basic_word_break_characters-3D">#basic_word_break_characters=</a>
<li ><a href="#method-i-completer_quote_characters-3D">#completer_quote_characters=</a>
<li ><a href="#method-i-completer_word_break_characters-3D">#completer_word_break_characters=</a>
<li ><a href="#method-i-completion_append_character-3D">#completion_append_character=</a>
<li ><a href="#method-i-completion_case_fold">#completion_case_fold</a>
<li ><a href="#method-i-completion_case_fold-3D">#completion_case_fold=</a>
<li ><a href="#method-i-completion_proc-3D">#completion_proc=</a>
<li ><a href="#method-i-completion_quote_character">#completion_quote_character</a>
<li ><a href="#method-i-dig_perfect_match_proc-3D">#dig_perfect_match_proc=</a>
<li ><a href="#method-i-emacs_editing_mode">#emacs_editing_mode</a>
<li ><a href="#method-i-emacs_editing_mode-3F">#emacs_editing_mode?</a>
<li ><a href="#method-i-encoding">#encoding</a>
<li ><a href="#method-i-filename_quote_characters-3D">#filename_quote_characters=</a>
<li ><a href="#method-i-get_screen_size">#get_screen_size</a>
<li ><a href="#method-i-inner_readline">#inner_readline</a>
<li ><a href="#method-i-input-3D">#input=</a>
<li ><a href="#method-i-may_req_ambiguous_char_width">#may_req_ambiguous_char_width</a>
<li ><a href="#method-i-output-3D">#output=</a>
<li ><a href="#method-i-output_modifier_proc-3D">#output_modifier_proc=</a>
<li ><a href="#method-i-pre_input_hook-3D">#pre_input_hook=</a>
<li ><a href="#method-i-prompt_proc-3D">#prompt_proc=</a>
<li ><a href="#method-i-read_escaped_key">#read_escaped_key</a>
<li ><a href="#method-i-read_io">#read_io</a>
<li ><a href="#method-i-readline">#readline</a>
<li ><a href="#method-i-readmultiline">#readmultiline</a>
<li ><a href="#method-i-special_prefixes-3D">#special_prefixes=</a>
<li ><a href="#method-i-vi_editing_mode">#vi_editing_mode</a>
<li ><a href="#method-i-vi_editing_mode-3F">#vi_editing_mode?</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="class-Reline::Core">
<h1 id="class-Reline::Core" class="class">
class Reline::Core
</h1>
<section class="description">
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section class="constants-list">
<header>
<h3>Constants</h3>
</header>
<dl>
<dt id="ATTR_READER_NAMES">ATTR_READER_NAMES
<dd>
</dl>
</section>
<section class="attribute-method-details" class="method-section">
<header>
<h3>Attributes</h3>
</header>
<div id="attribute-i-ambiguous_width" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">ambiguous_width</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-config" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">config</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-key_stroke" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">key_stroke</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-last_incremental_search" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">last_incremental_search</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-line_editor" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">line_editor</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-output" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">output</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
</section>
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Class Methods</h3>
</header>
<div id="method-c-new" class="method-detail ">
<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">() { |self| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 43</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">output</span> = <span class="ruby-constant">STDOUT</span>
<span class="ruby-keyword">yield</span> <span class="ruby-keyword">self</span>
<span class="ruby-ivar">@completion_quote_character</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Instance Methods</h3>
</header>
<div id="method-i-auto_indent_proc-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">auto_indent_proc=</span><span
class="method-args">(p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="auto_indent_proc-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 116</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">auto_indent_proc=</span>(<span class="ruby-identifier">p</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:call</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@auto_indent_proc</span> = <span class="ruby-identifier">p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-basic_quote_characters-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">basic_quote_characters=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="basic_quote_characters-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 73</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">basic_quote_characters=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@basic_quote_characters</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-basic_word_break_characters-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">basic_word_break_characters=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="basic_word_break_characters-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 65</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">basic_word_break_characters=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@basic_word_break_characters</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completer_quote_characters-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">completer_quote_characters=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completer_quote_characters-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 77</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completer_quote_characters=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@completer_quote_characters</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completer_word_break_characters-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">completer_word_break_characters=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completer_word_break_characters-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 69</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completer_word_break_characters=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@completer_word_break_characters</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completion_append_character-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">completion_append_character=</span><span
class="method-args">(val)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completion_append_character-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 53</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completion_append_character=</span>(<span class="ruby-identifier">val</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@completion_append_character</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
<span class="ruby-ivar">@completion_append_character</span> = <span class="ruby-identifier">val</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">1</span>
<span class="ruby-ivar">@completion_append_character</span> = <span class="ruby-identifier">val</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@completion_append_character</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completion_case_fold" class="method-detail ">
<div class="method-heading">
<span class="method-name">completion_case_fold</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completion_case_fold-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 93</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completion_case_fold</span>
<span class="ruby-ivar">@config</span>.<span class="ruby-identifier">completion_ignore_case</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completion_case_fold-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">completion_case_fold=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completion_case_fold-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 89</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completion_case_fold=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@config</span>.<span class="ruby-identifier">completion_ignore_case</span> = <span class="ruby-identifier">v</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completion_proc-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">completion_proc=</span><span
class="method-args">(p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completion_proc-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 101</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completion_proc=</span>(<span class="ruby-identifier">p</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:call</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@completion_proc</span> = <span class="ruby-identifier">p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-completion_quote_character" class="method-detail ">
<div class="method-heading">
<span class="method-name">completion_quote_character</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="completion_quote_character-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 97</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">completion_quote_character</span>
<span class="ruby-ivar">@completion_quote_character</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-dig_perfect_match_proc-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">dig_perfect_match_proc=</span><span
class="method-args">(p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="dig_perfect_match_proc-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 125</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">dig_perfect_match_proc=</span>(<span class="ruby-identifier">p</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:call</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@dig_perfect_match_proc</span> = <span class="ruby-identifier">p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-emacs_editing_mode" class="method-detail ">
<div class="method-heading">
<span class="method-name">emacs_editing_mode</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="emacs_editing_mode-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 154</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">emacs_editing_mode</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">editing_mode</span> = <span class="ruby-value">:emacs</span>
<span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-emacs_editing_mode-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">emacs_editing_mode?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="emacs_editing_mode-3F-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 163</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">emacs_editing_mode?</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">editing_mode_is?</span>(<span class="ruby-value">:emacs</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-encoding" class="method-detail ">
<div class="method-heading">
<span class="method-name">encoding</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="encoding-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 49</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">encoding</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-filename_quote_characters-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">filename_quote_characters=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="filename_quote_characters-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 81</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">filename_quote_characters=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@filename_quote_characters</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-get_screen_size" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_screen_size</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="get_screen_size-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 167</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_screen_size</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">get_screen_size</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-input-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">input=</span><span
class="method-args">(val)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="input-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 130</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">input=</span>(<span class="ruby-identifier">val</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:getc</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:getc</span>)
<span class="ruby-keyword">if</span> <span class="ruby-keyword">defined?</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">ANSI</span>) <span class="ruby-keyword">and</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">ANSI</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">ANSI</span>.<span class="ruby-identifier">input</span> = <span class="ruby-identifier">val</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">GeneralIO</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">GeneralIO</span>.<span class="ruby-identifier">input</span> = <span class="ruby-identifier">val</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-output-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">output=</span><span
class="method-args">(val)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="output-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 141</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">output=</span>(<span class="ruby-identifier">val</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:write</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@output</span> = <span class="ruby-identifier">val</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">defined?</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">ANSI</span>) <span class="ruby-keyword">and</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">ANSI</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">ANSI</span>.<span class="ruby-identifier">output</span> = <span class="ruby-identifier">val</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-output_modifier_proc-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">output_modifier_proc=</span><span
class="method-args">(p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="output_modifier_proc-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 106</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">output_modifier_proc=</span>(<span class="ruby-identifier">p</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:call</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@output_modifier_proc</span> = <span class="ruby-identifier">p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-pre_input_hook-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">pre_input_hook=</span><span
class="method-args">(p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="pre_input_hook-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 121</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">pre_input_hook=</span>(<span class="ruby-identifier">p</span>)
<span class="ruby-ivar">@pre_input_hook</span> = <span class="ruby-identifier">p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-prompt_proc-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">prompt_proc=</span><span
class="method-args">(p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="prompt_proc-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 111</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">prompt_proc=</span>(<span class="ruby-identifier">p</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:call</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-ivar">@prompt_proc</span> = <span class="ruby-identifier">p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-readline" class="method-detail ">
<div class="method-heading">
<span class="method-name">readline</span><span
class="method-args">(prompt = '', add_hist = false)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="readline-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 187</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">readline</span>(<span class="ruby-identifier">prompt</span> = <span class="ruby-string">''</span>, <span class="ruby-identifier">add_hist</span> = <span class="ruby-keyword">false</span>)
<span class="ruby-identifier">inner_readline</span>(<span class="ruby-identifier">prompt</span>, <span class="ruby-identifier">add_hist</span>, <span class="ruby-keyword">false</span>)
<span class="ruby-identifier">line</span> = <span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">line</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-identifier">line</span>.<span class="ruby-identifier">taint</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator"><</span> <span class="ruby-string">'2.7'</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">add_hist</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">line</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-string">"\n"</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">HISTORY</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-string">"\n"</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">reset_line</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">line</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-identifier">line</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-readmultiline" class="method-detail ">
<div class="method-heading">
<span class="method-name">readmultiline</span><span
class="method-args">(prompt = '', add_hist = false, &confirm_multiline_termination)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="readmultiline-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 171</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">readmultiline</span>(<span class="ruby-identifier">prompt</span> = <span class="ruby-string">''</span>, <span class="ruby-identifier">add_hist</span> = <span class="ruby-keyword">false</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">confirm_multiline_termination</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">confirm_multiline_termination</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">'#readmultiline needs block to confirm multiline termination'</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">inner_readline</span>(<span class="ruby-identifier">prompt</span>, <span class="ruby-identifier">add_hist</span>, <span class="ruby-keyword">true</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">confirm_multiline_termination</span>)
<span class="ruby-identifier">whole_buffer</span> = <span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">whole_buffer</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-identifier">whole_buffer</span>.<span class="ruby-identifier">taint</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator"><</span> <span class="ruby-string">'2.7'</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">add_hist</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">whole_buffer</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">whole_buffer</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-string">"\n"</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">HISTORY</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">whole_buffer</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">reset_line</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">whole_buffer</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-identifier">whole_buffer</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-special_prefixes-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">special_prefixes=</span><span
class="method-args">(v)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="special_prefixes-3D-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 85</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">special_prefixes=</span>(<span class="ruby-identifier">v</span>)
<span class="ruby-ivar">@special_prefixes</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-vi_editing_mode" class="method-detail ">
<div class="method-heading">
<span class="method-name">vi_editing_mode</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="vi_editing_mode-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 149</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">vi_editing_mode</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">editing_mode</span> = <span class="ruby-value">:vi_insert</span>
<span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-vi_editing_mode-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">vi_editing_mode?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="vi_editing_mode-3F-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 159</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">vi_editing_mode?</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">editing_mode_is?</span>(<span class="ruby-value">:vi_insert</span>, <span class="ruby-value">:vi_command</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="private-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Private Instance Methods</h3>
</header>
<div id="method-i-inner_readline" class="method-detail ">
<div class="method-heading">
<span class="method-name">inner_readline</span><span
class="method-args">(prompt, add_hist, multiline, &confirm_multiline_termination)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="inner_readline-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 200</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">inner_readline</span>(<span class="ruby-identifier">prompt</span>, <span class="ruby-identifier">add_hist</span>, <span class="ruby-identifier">multiline</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">confirm_multiline_termination</span>)
<span class="ruby-keyword">if</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">'RELINE_STDERR_TTY'</span>]
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">reopen</span>(<span class="ruby-constant">ENV</span>[<span class="ruby-string">'RELINE_STDERR_TTY'</span>], <span class="ruby-string">'w'</span>)
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">sync</span> = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">"Reline is used by #{Process.pid}"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">otio</span> = <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">prep</span>
<span class="ruby-identifier">may_req_ambiguous_char_width</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">reset</span>(<span class="ruby-identifier">prompt</span>, <span class="ruby-value">encoding:</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">encoding</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">multiline</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">multiline_on</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">confirm_multiline_termination_proc</span> = <span class="ruby-identifier">confirm_multiline_termination</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">multiline_off</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">output</span> = <span class="ruby-identifier">output</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">completion_proc</span> = <span class="ruby-identifier">completion_proc</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">completion_append_character</span> = <span class="ruby-identifier">completion_append_character</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">output_modifier_proc</span> = <span class="ruby-identifier">output_modifier_proc</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">prompt_proc</span> = <span class="ruby-identifier">prompt_proc</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">auto_indent_proc</span> = <span class="ruby-identifier">auto_indent_proc</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">dig_perfect_match_proc</span> = <span class="ruby-identifier">dig_perfect_match_proc</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">pre_input_hook</span> = <span class="ruby-identifier">pre_input_hook</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">test_mode</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">read</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">reset_default_key_bindings</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span><span class="ruby-operator">::</span><span class="ruby-constant">RAW_KEYSTROKE_CONFIG</span>.<span class="ruby-identifier">each_pair</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">func</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">config</span>.<span class="ruby-identifier">add_default_key_binding</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">func</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">rerender</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">loop</span> <span class="ruby-keyword">do</span>
<span class="ruby-identifier">read_io</span>(<span class="ruby-identifier">config</span>.<span class="ruby-identifier">keyseq_timeout</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">inputs</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">inputs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">input_key</span>(<span class="ruby-identifier">c</span>)
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">rerender</span>
}
}
<span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">finished?</span>
<span class="ruby-keyword">end</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">move_cursor_column</span>(<span class="ruby-value">0</span>)
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">EIO</span>
<span class="ruby-comment"># Maybe the I/O has been closed.</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">StandardError</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">e</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">finalize</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">deprep</span>(<span class="ruby-identifier">otio</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">line_editor</span>.<span class="ruby-identifier">finalize</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">deprep</span>(<span class="ruby-identifier">otio</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-may_req_ambiguous_char_width" class="method-detail ">
<div class="method-heading">
<span class="method-name">may_req_ambiguous_char_width</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="may_req_ambiguous_char_width-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 339</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">may_req_ambiguous_char_width</span>
<span class="ruby-ivar">@ambiguous_width</span> = <span class="ruby-value">2</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">GeneralIO</span> <span class="ruby-keyword">or</span> <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">File</span>)
<span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">ambiguous_width</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">move_cursor_column</span>(<span class="ruby-value">0</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span> <span class="ruby-string">"\u{25bd}"</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">UndefinedConversionError</span>
<span class="ruby-comment"># LANG=C</span>
<span class="ruby-ivar">@ambiguous_width</span> = <span class="ruby-value">1</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@ambiguous_width</span> = <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">cursor_pos</span>.<span class="ruby-identifier">x</span>
<span class="ruby-keyword">end</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">move_cursor_column</span>(<span class="ruby-value">0</span>)
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">erase_after_cursor</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-read_escaped_key" class="method-detail ">
<div class="method-heading">
<span class="method-name">read_escaped_key</span><span
class="method-args">(keyseq_timeout, c, block)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="read_escaped_key-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 318</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">read_escaped_key</span>(<span class="ruby-identifier">keyseq_timeout</span>, <span class="ruby-identifier">c</span>, <span class="ruby-identifier">block</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">escaped_c</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-identifier">keyseq_timeout</span> <span class="ruby-operator">/</span> <span class="ruby-value">1000.0</span>) {
<span class="ruby-identifier">escaped_c</span> = <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">getc</span>
}
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span> <span class="ruby-comment"># independent ESC</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>)])
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">escaped_c</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>)])
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">escaped_c</span> <span class="ruby-operator">>=</span> <span class="ruby-value">128</span> <span class="ruby-comment"># maybe, first byte of multi byte</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>), <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">escaped_c</span>, <span class="ruby-identifier">escaped_c</span>, <span class="ruby-keyword">false</span>)])
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">escaped_c</span> <span class="ruby-operator">==</span> <span class="ruby-string">"\e"</span>.<span class="ruby-identifier">ord</span> <span class="ruby-comment"># escape twice</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>), <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>)])
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">escaped_c</span>, <span class="ruby-identifier">escaped_c</span> <span class="ruby-operator">|</span> <span class="ruby-value">0b10000000</span>, <span class="ruby-keyword">true</span>)])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-read_io" class="method-detail ">
<div class="method-heading">
<span class="method-name">read_io</span><span
class="method-args">(keyseq_timeout, &block)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Keystrokes of GNU <a href="../Readline.html"><code>Readline</code></a> will timeout it with the specification of “keyseq-timeout” when waiting for the 2nd character after the 1st one. If the 2nd character comes after 1st ESC without timeout it has a meta-property of meta-key to discriminate modified key with meta-key from multibyte characters that come with 8th bit on.</p>
<p>GNU <a href="../Readline.html"><code>Readline</code></a> will wait for the 2nd character with “keyseq-timeout” milli-seconds but wait forever after 3rd characters.</p>
<div class="method-source-code" id="read_io-source">
<pre><span class="ruby-comment"># File lib/reline.rb, line 268</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">read_io</span>(<span class="ruby-identifier">keyseq_timeout</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-identifier">buffer</span> = []
<span class="ruby-identifier">loop</span> <span class="ruby-keyword">do</span>
<span class="ruby-identifier">c</span> = <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">getc</span>
<span class="ruby-identifier">buffer</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">key_stroke</span>.<span class="ruby-identifier">match_status</span>(<span class="ruby-identifier">buffer</span>)
<span class="ruby-keyword">case</span> <span class="ruby-identifier">result</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:matched</span>
<span class="ruby-identifier">expanded</span> = <span class="ruby-identifier">key_stroke</span>.<span class="ruby-identifier">expand</span>(<span class="ruby-identifier">buffer</span>).<span class="ruby-identifier">map</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">expanded_c</span><span class="ruby-operator">|</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">expanded_c</span>, <span class="ruby-identifier">expanded_c</span>, <span class="ruby-keyword">false</span>)
}
<span class="ruby-identifier">block</span>.(<span class="ruby-identifier">expanded</span>)
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:matching</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">succ_c</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-identifier">keyseq_timeout</span> <span class="ruby-operator">/</span> <span class="ruby-value">1000.0</span>) {
<span class="ruby-identifier">succ_c</span> = <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">getc</span>
}
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span> <span class="ruby-comment"># cancel matching only when first byte</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>)])
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">key_stroke</span>.<span class="ruby-identifier">match_status</span>(<span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">succ_c</span>)) <span class="ruby-operator">==</span> <span class="ruby-value">:unmatched</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-string">"\e"</span>.<span class="ruby-identifier">ord</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">succ_c</span>, <span class="ruby-identifier">succ_c</span> <span class="ruby-operator">|</span> <span class="ruby-value">0b10000000</span>, <span class="ruby-keyword">true</span>)])
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">block</span>.([<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>, <span class="ruby-identifier">c</span>, <span class="ruby-keyword">false</span>), <span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">succ_c</span>, <span class="ruby-identifier">succ_c</span>, <span class="ruby-keyword">false</span>)])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">else</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">IOGate</span>.<span class="ruby-identifier">ungetc</span>(<span class="ruby-identifier">succ_c</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:unmatched</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-string">"\e"</span>.<span class="ruby-identifier">ord</span>
<span class="ruby-identifier">read_escaped_key</span>(<span class="ruby-identifier">keyseq_timeout</span>, <span class="ruby-identifier">c</span>, <span class="ruby-identifier">block</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">expanded</span> = <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">map</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">expanded_c</span><span class="ruby-operator">|</span>
<span class="ruby-constant">Reline</span><span class="ruby-operator">::</span><span class="ruby-constant">Key</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">expanded_c</span>, <span class="ruby-identifier">expanded_c</span>, <span class="ruby-keyword">false</span>)
}
<span class="ruby-identifier">block</span>.(<span class="ruby-identifier">expanded</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
</section>
</main>
<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>