class Diakonos::Session

Attributes

buffer_current[RW]
buffers[R]
dir[R]
filename[R]
name[R]
readline_histories[R]
settings[R]

Public Class Methods

file_hash_for(filepath) click to toggle source
# File lib/diakonos/sessions.rb, line 117
def self.file_hash_for(filepath)
  filepath, line_number = ::Diakonos.parse_filename_and_line_number(filepath)
  {
    'filepath'  => filepath,
    'read_only' => false,
    'cursor'    => {
      'row' => line_number || 0,
      'col' => 0,
    },
    'display'   => {
      'top_line'    => 0,
      'left_column' => 0
    },
  }
end
from_yaml_file(yaml_filename) click to toggle source

@return [Session] The Session created from the YAML data in the specified file

or nil on failure to load
# File lib/diakonos/sessions.rb, line 79
def self.from_yaml_file(yaml_filename)
  return nil  if ! File.exist?(yaml_filename)
  session = nil

  File.open(yaml_filename) do |f|
    loaded = YAML::load(f) or break

    if(
      loaded[ 'filename' ] &&
      loaded[ 'settings' ] &&
      loaded[ 'settings' ].respond_to?( :values ) &&
      loaded.has_key?( 'name' ) &&
      (
        loaded[ 'files' ] &&
        loaded[ 'files' ].respond_to?( :each ) ||
        loaded[ 'buffers' ] &&
        loaded[ 'buffers' ].respond_to?( :each )
      )
    )
      # Convert old sessions
      if loaded[ 'files' ]
        loaded[ 'buffers' ] = loaded[ 'files' ].map { |f|
          Session.file_hash_for f
        }
        loaded.delete 'files'
      end

      session = Session.new(loaded['filename'], loaded)
    end
  end

  session
end
new(filepath, data = nil) click to toggle source
# File lib/diakonos/sessions.rb, line 6
def initialize(filepath, data = nil)
  if data.nil?
    @filename = File.expand_path(filepath)
    @settings = Hash.new

    basename = File.basename(filepath)
    if ! Session.pid_session?(filepath)
      @name = basename
    end

    @buffers = []
    @buffer_current = 1
    self.dir = Dir.getwd
  else
    @filename = data['filename']
    @settings = data['settings']
    @name = data['name']
    @buffers = data['buffers']
    @buffer_current = data['buffer_current'] || 1
    self.dir = data['dir']
  end
end
pid_session?(path) click to toggle source
# File lib/diakonos/sessions.rb, line 113
def self.pid_session?(path)
  %r{/\d+$} === path
end

Public Instance Methods

dir=(new_dir) click to toggle source
# File lib/diakonos/sessions.rb, line 72
def dir=(new_dir)
  @dir = new_dir
  Dir.chdir new_dir
end
set_buffers(buffers) click to toggle source
# File lib/diakonos/sessions.rb, line 41
def set_buffers(buffers)
  @buffers = buffers.reject { |buffer|
    buffer.name.nil?
  }.collect { |buffer|
    {
      'filepath' => buffer.name,
      'read_only' => buffer.read_only,
      'cursor'   => {
        'row' => buffer.last_row,
        'col' => buffer.last_col,
      },
      'display'  => {
        'top_line'    => buffer.top_line,
        'left_column' => buffer.left_column
      },
      'last_search_regexps' => buffer.last_search_regexps.map { |r| r.to_s },
    }
  }.compact
end
set_readline_histories(rlh_general, rlh_files, rlh_search, rlh_shell, rlh_help, rlh_sessions) click to toggle source
# File lib/diakonos/sessions.rb, line 61
def set_readline_histories(rlh_general, rlh_files, rlh_search, rlh_shell, rlh_help, rlh_sessions)
  @readline_histories = {
    'general'  => rlh_general,
    'files'    => rlh_files,
    'search'   => rlh_search,
    'shell'    => rlh_shell,
    'help'     => rlh_help,
    'sessions' => rlh_sessions,
  }
end
to_yaml() click to toggle source
# File lib/diakonos/sessions.rb, line 29
def to_yaml
  {
    'filename' => @filename,
    'settings' => @settings,
    'name' => @name,
    'buffer_current' => @buffer_current,
    'dir' => @dir,
    'buffers' => @buffers,
    'readline_histories' => @readline_histories
  }.to_yaml
end