class BufferList

Attributes

current_buf[R]

Public Instance Methods

<<(_buf) click to toggle source
Calls superclass method
# File lib/vimamsa/buffer_list.rb, line 26
def <<(_buf)
  super
  $buffer = _buf
  @current_buf = self.size - 1
  $buffer_history << @current_buf
  @recent_ind = 0
  $hook.call(:change_buffer, $buffer)
  gui_set_current_buffer($buffer.id)
  gui_set_cursor_pos($buffer.id, $buffer.pos)
end
add_current_buf_to_history() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 61
def add_current_buf_to_history()
  @recent_ind = 0
  $buffer_history << @current_buf
  compact_buf_history()
end
close_all_buffers() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 170
def close_all_buffers()
  message("Closing all buffers")
  while true
    if self.size == 1
      close_buffer(0)
      break
    else
      close_buffer(0)
    end
  end
  # self << Buffer.new("\n")
end
close_buffer(buffer_i, from_recent = false) click to toggle source
# File lib/vimamsa/buffer_list.rb, line 141
def close_buffer(buffer_i, from_recent = false)
  return if self.size <= buffer_i
  
  bufname = self[buffer_i].basename
  message("Closed buffer #{bufname}")
  recent = get_recent_buffers
  jump_to_buf = recent[@recent_ind + 1]
  jump_to_buf = 0 if jump_to_buf == nil

  self.slice!(buffer_i)
  $buffer_history = $buffer_history.collect { |x| r = x; r = x - 1 if x > buffer_i; r = nil if x == buffer_i; r }.compact

  if @current_buf == buffer_i
    if from_recent
      @current_buf = jump_to_buf
    else
      @current_buf = $buffer_history.last
    end
  end
  # Ripl.start :binding => binding
  if self.size == 0
    self << Buffer.new("\n")
    @current_buf = 0
  else
    @current_buf = 0 if @current_buf >= self.size
  end
  set_current_buffer(@current_buf, false)
end
close_current_buffer(from_recent = false) click to toggle source
# File lib/vimamsa/buffer_list.rb, line 194
def close_current_buffer(from_recent = false)
  close_buffer(@current_buf, from_recent)
end
close_scrap_buffers() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 183
def close_scrap_buffers()
  i = 0
  while i < self.size
    if !self[i].pathname
      close_buffer(i)
    else
      i += 1
    end
  end
end
compact_buf_history() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 134
def compact_buf_history()
  h = {}
  # Keep only first occurence in history
  bh = $buffer_history.reverse.select { |x| r = h[x] == nil; h[x] = true; r }
  $buffer_history = bh.reverse
end
delete_current_buffer(from_recent = false) click to toggle source
# File lib/vimamsa/buffer_list.rb, line 198
def delete_current_buffer(from_recent = false)
  fn = buf.fname
  close_buffer(@current_buf, from_recent)
  #TODO: confirm with user, "Do you want to delete file X"
  if is_existing_file(fn)
    message("Deleting file: #{fn}")
    File.delete(fn)
  end
end
get_buffer_by_filename(fname) click to toggle source
# File lib/vimamsa/buffer_list.rb, line 55
def get_buffer_by_filename(fname)
  #TODO: check using stat/inode?  http://ruby-doc.org/core-1.9.3/File/Stat.html#method-i-ino
  buf_idx = self.index { |b| b.fname == fname }
  return buf_idx
end
get_last_dir() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 92
def get_last_dir
  lastdir = nil
  if $buffer.fname
    lastdir = File.dirname($buffer.fname)
  else
    for bufid in $buffer_history.reverse[1..-1]
      bf = $buffers[bufid]
      debug "FNAME:#{bf.fname}"
      if bf.fname
        lastdir = File.dirname(bf.fname)
        break
      end
    end
  end
  lastdir = File.expand_path(".") if lastdir.nil?
  return lastdir
end
get_recent_buffers() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 110
def get_recent_buffers()
  bufs = []; b = {}
  $buffer_history.reverse.each { |x| bufs << x if !b[x] && x < self.size; b[x] = true }
  return bufs
end
history_switch_backwards() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 116
def history_switch_backwards()
  recent = get_recent_buffers()
  @recent_ind += 1
  @recent_ind = 0 if @recent_ind >= recent.size
  bufid = recent[@recent_ind]
  debug "IND:#{@recent_ind} RECENT:#{recent.join(" ")}"
  set_current_buffer(bufid, false)
end
history_switch_forwards() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 125
def history_switch_forwards()
  recent = get_recent_buffers()
  @recent_ind -= 1
  @recent_ind = self.size - 1 if @recent_ind < 0
  bufid = recent[@recent_ind]
  debug "IND:#{@recent_ind} RECENT:#{recent.join(" ")}"
  set_current_buffer(bufid, false)
end
set_current_buffer(buffer_i, update_history = true) click to toggle source
# File lib/vimamsa/buffer_list.rb, line 67
def set_current_buffer(buffer_i, update_history = true)
  buffer_i = self.size -1 if buffer_i > self.size
  buffer_i = 0 if buffer_i < 0
  $buffer = self[buffer_i]
  return if !$buffer
  @current_buf = buffer_i
  debug "SWITCH BUF2. bufsize:#{self.size}, curbuf: #{@current_buf}"
  fpath = $buffer.fname
  if fpath and fpath.size > 50
    fpath = fpath[-50..-1]
  end

  if update_history
    add_current_buf_to_history
  end

  $hook.call(:change_buffer, $buffer)
  $buffer.set_active

  gui_set_current_buffer($buffer.id)
  gui_set_window_title($buffer.title,$buffer.subtitle)   

  # hpt_scan_images() if $debug # experimental
end
switch() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 37
def switch()
  debug "SWITCH BUF. bufsize:#{self.size}, curbuf: #{@current_buf}"
  @current_buf += 1
  @current_buf = 0 if @current_buf >= self.size
  m = method("switch")
  set_last_command({ method: m, params: [] })
  set_current_buffer(@current_buf)
end
switch_to_last_buf() click to toggle source
# File lib/vimamsa/buffer_list.rb, line 46
def switch_to_last_buf()
  debug "SWITCH TO LAST BUF:"
  debug $buffer_history
  last_buf = $buffer_history[-2]
  if last_buf
    set_current_buffer(last_buf)
  end
end