diff options
author | Jon Cairns <jon@joncairns.com> | 2013-07-10 10:05:21 +0100 |
---|---|---|
committer | Jon Cairns <jon@joncairns.com> | 2013-07-10 10:05:21 +0100 |
commit | 92b5b8cfc640edd102cbf1fe43dd3c0007d5bc54 (patch) | |
tree | 3aa3bf2bcdd39d8616e822334815c2647dd01db1 /rubylib | |
parent | 181d192c3aeb44153ab1846ca2d255227c9da695 (diff) | |
download | vdebug-92b5b8cfc640edd102cbf1fe43dd3c0007d5bc54.zip |
Add vdebug remote ruby interface and spec
Diffstat (limited to 'rubylib')
-rw-r--r-- | rubylib/vdebug.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/rubylib/vdebug.rb b/rubylib/vdebug.rb new file mode 100644 index 0000000..88e8cfd --- /dev/null +++ b/rubylib/vdebug.rb @@ -0,0 +1,68 @@ +class Vdebug + class BufferNotFound < StandardError; end; + + attr_reader :vim + + def initialize(vim) + @vim = vim + end + + def start_listening + clear_buffer_cache! + vim.server.remote_send ":python debugger.run()<CR>" + sleep 0.5 + end + + # Retrieve a hash with the buffer names (values) and numbers (keys) + def buffers + @buffers ||= fetch_buffers + end + + # Do this when you want to refresh the buffer list + def clear_buffer_cache! + @buffers = nil + end + + # Has the vdebug GUI been opened? + def gui_open? + names = buffers.values + %w[DebuggerStack DebuggerStatus DebuggerWatch].all? { |b| + names.include? b + } + end + + def running? + gui_open? && connected? + end + + def connected? + vim.server.remote_send( + ":python debugger.runner.is_alive()" + ) == "True" + end + + def watch_window_content + fetch_buffer_content 'DebuggerWatch' + end + + def status_window_content + fetch_buffer_content 'DebuggerStatus' + end + +protected + def fetch_buffer_content(name) + bufnum = buffers.invert.fetch(name) + vim.echo(%Q{join(getline(#{bufnum}, "$"), "\\n")}) + rescue KeyError + raise BufferNotFound, "#{name} buffer not found" + end + + def fetch_buffers + buffer_string = vim.command('buffers') + names = buffer_string.split("\n").collect do |bufline| + matches = /\A\s*(\d+).*"([^"]+)"/.match(bufline) + [matches[1].to_i, matches[2]] if matches + end + Hash[names.compact] + end +end |