Class/Module Index [+]

Quicksearch

Rex::Ui::Text::Input::Readline

This class implements standard input using readline against standard input. It supports tab completion.

Attributes

output[RW]

The output handle to use when displaying the prompt.

prompt[RW]

The prompt that is to be displayed.

Public Class Methods

new(tab_complete_proc = nil) click to toggle source

Initializes the readline-aware Input instance for text.

# File lib/rex/ui/text/input/readline.rb, line 20
def initialize(tab_complete_proc = nil)
        if(not Object.const_defined?('Readline'))
                begin
                        require 'readline'
                rescue ::LoadError
                        require 'readline_compatible'
                end
        end

        self.extend(::Readline)

        if (tab_complete_proc)
                ::Readline.basic_word_break_characters = "\x00"
                ::Readline.completion_proc = tab_complete_proc
                @rl_saved_proc = tab_complete_proc
        end
end

Public Instance Methods

fd() click to toggle source

Returns the output pipe handle

# File lib/rex/ui/text/input/readline.rb, line 101
def fd
        $stdin
end
gets() click to toggle source

Read a line from stdin

# File lib/rex/ui/text/input/readline.rb, line 67
def gets()
        begin
                self.fd.gets()
        rescue ::Errno::EINTR
                retry
        end
end
intrinsic_shell?() click to toggle source

Indicates that this input medium as a shell builtin, no need to extend.

# File lib/rex/ui/text/input/readline.rb, line 109
def intrinsic_shell?
        true
end
pgets() click to toggle source

Stick readline into a low-priority thread so that the scheduler doesn't slow down other background threads. This is important when there are many active background jobs, such as when the user is running Karmetasploit

# File lib/rex/ui/text/input/readline.rb, line 80
def pgets()

        line = nil
        orig = Thread.current.priority

        begin
                Thread.current.priority = -20

                output.prompting
                line = ::Readline.readline(prompt, true)
                ::Readline::HISTORY.pop if (line and line.empty?)
        ensure
                Thread.current.priority = orig || 0
        end

        line
end
reset_tab_completion(tab_complete_proc = nil) click to toggle source

Reattach the original completion proc

# File lib/rex/ui/text/input/readline.rb, line 41
def reset_tab_completion(tab_complete_proc = nil)
        ::Readline.basic_word_break_characters = "\x00"
        ::Readline.completion_proc = tab_complete_proc || @rl_saved_proc
end
supports_readline() click to toggle source

Whether or not the input medium supports readline.

# File lib/rex/ui/text/input/readline.rb, line 49
def supports_readline
        true
end
sysread(len = 1) click to toggle source

Calls sysread on the standard input handle.

# File lib/rex/ui/text/input/readline.rb, line 56
def sysread(len = 1)
        begin
                self.fd.sysread(len)
        rescue ::Errno::EINTR
                retry
        end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.