Sha256: fe5e6960fd7093f684d84a2ce91a102ddd17625b3b632071308b6c6a2daf2174
Contents?: true
Size: 1.85 KB
Versions: 1
Compression:
Stored size: 1.85 KB
Contents
# frozen_string_literal: true require 'git' require 'tty-prompt' require 'logger' require_relative './treeish' require_relative './monkey_patches/tty/prompt' class GitPrompt SELECT_OPTIONS_PER_PAGE = 10 attr_reader :git, :branch, :tag, :prompt, :logger def initialize(git: nil) @git = git || Git.open(Dir.pwd) @branch = Treeish::Branch.new(git: git) @tag = Treeish::Tag.new(git: git) create_prompt define_key_events display_select(:branch, branch.recents) end private def define_key_events prompt.on(:keypress) do |event| if event.value == 'q' puts '' exit end # move up/down in the list if event.value == 'j' prompt.trigger(:keydown) end if event.value == 'k' prompt.trigger(:keyup) end # Select a mode if event.value == 'b' prompt.clear! display_select(:branch, branch.recents) end if event.value == 't' prompt.clear! display_select(:tag, tag.recents) end end end def create_prompt @prompt = TTY::Prompt.new(quiet: false) end def display_select(treeish_type, treeishes) message = prompt.decorate("Select #{treeish_type.to_s.capitalize} > ", :green) message += <<~MSG.chomp [b] branch view [t] tag view j: down, k: up, q: quit, Enter: choose tag MSG if treeishes.size > 0 prompt.select(message, filter: false, per_page: SELECT_OPTIONS_PER_PAGE) do |menu| treeishes.each do |treeish| menu.choice(treeish[:name], -> { checkout(treeish[:value]) }) end end else prompt.ok 'No tags were found' end rescue TTY::Reader::InputInterrupt => e # exit automatically end def checkout(treeish_name) git.checkout(treeish_name) exit rescue Git::GitExecuteError => e prompt.error(e.message) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gnav-0.6.3 | lib/git_prompt.rb |