Sha256: fe206e8384807fd6973cf59f086c31284a50f018ea1a911fa97660ccb68011a2

Contents?: true

Size: 1.26 KB

Versions: 5

Compression:

Stored size: 1.26 KB

Contents

require 'curses'
require_relative 'ui/color'
require_relative 'ui/hunks_window'

module GitCrecord
  module UI
    ACTIONS = {
      'q' => :quit,
      's' => :stage,
      'c' => :commit,
      'j' => :highlight_next,
      Curses::KEY_DOWN => :highlight_next,
      'k' => :highlight_previous,
      Curses::KEY_UP => :highlight_previous,
      'h' => :collapse,
      Curses::KEY_LEFT => :collapse,
      'l' => :expand,
      Curses::KEY_RIGHT => :expand,
      'f' => :toggle_fold,
      'g' => :highlight_first,
      'G' => :highlight_last,
      ''.ord => :highlight_next_hunk,
      ''.ord => :highlight_previous_hunk,
      ' ' => :toggle_selection,
      'A' => :toggle_all_selections,
      '?' => :help_window,
      'R' => :redraw,
      Curses::KEY_RESIZE => :resize
    }.freeze

    def self.run(files)
      Curses.init_screen.keypad = true
      Color.init
      Curses.clear
      Curses.noecho
      Curses.curs_set(0)
      pad = Curses::Pad.new(1, 1).tap{ |p| p.keypad = true }
      run_loop(HunksWindow.new(pad, files))
    ensure
      Curses.close_screen
    end

    def self.run_loop(win)
      loop do
        c = win.getch
        next if ACTIONS[c].nil?
        quit = win.send(ACTIONS[c])
        break quit if quit == :quit
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
git-crecord-1.0.8 lib/git_crecord/ui.rb
git-crecord-1.0.7 lib/git_crecord/ui.rb
git-crecord-1.0.6 lib/git_crecord/ui.rb
git-crecord-1.0.5 lib/git_crecord/ui.rb
git-crecord-1.0.4 lib/git_crecord/ui.rb