Class: Rex::Ui::Text::Shell::HistoryManager

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/ui/text/shell/history_manager.rb

Constant Summary collapse

MAX_HISTORY =
2000

Instance Method Summary collapse

Constructor Details

#initializeHistoryManager

Returns a new instance of HistoryManager.



14
15
16
17
18
19
20
21
# File 'lib/rex/ui/text/shell/history_manager.rb', line 14

def initialize
  @contexts = []
  @debug = false
  # Values dequeued before work is started
  @write_queue = ::Queue.new
  # Values dequeued after work is completed
  @remaining_work = ::Queue.new
end

Instance Method Details

#_closeObject



64
65
66
67
68
# File 'lib/rex/ui/text/shell/history_manager.rb', line 64

def _close
  event = { type: :close }
  @write_queue << event
  @remaining_work << event
end

#_contextsObject



56
57
58
# File 'lib/rex/ui/text/shell/history_manager.rb', line 56

def _contexts
  @contexts
end

#_debug=(value) ⇒ Object



60
61
62
# File 'lib/rex/ui/text/shell/history_manager.rb', line 60

def _debug=(value)
  @debug = value
end

#flushObject

Flush the contents of the write queue to disk. Blocks synchronously.



44
45
46
47
48
49
50
# File 'lib/rex/ui/text/shell/history_manager.rb', line 44

def flush
  until @write_queue.empty? && @remaining_work.empty?
    sleep 0.1
  end

  nil
end

#inspectObject



52
53
54
# File 'lib/rex/ui/text/shell/history_manager.rb', line 52

def inspect
  "#<HistoryManager stack size: #{@contexts.length}>"
end

#with_context(history_file: nil, name: nil, input_library: nil, &block) ⇒ nil

Create a new history command context when executing the given block

Parameters:

  • history_file (String, nil) (defaults to: nil)

    The file to load and persist commands to

  • name (String) (defaults to: nil)

    Human readable history context name

  • input_library (Symbol) (defaults to: nil)

    The input library to provide context for. :reline, :readline

  • block (Proc)

Returns:

  • (nil)


30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rex/ui/text/shell/history_manager.rb', line 30

def with_context(history_file: nil, name: nil, input_library: nil, &block)
  # Default to Readline for backwards compatibility.
  push_context(history_file: history_file, name: name, input_library: input_library || :readline)

  begin
    block.call
  ensure
    pop_context
  end

  nil
end