Skip to content
Kward Search API index

Module: Kward::PromptInterface::GitPrompt

Included in:
Kward::PromptInterface
Defined in:
lib/kward/prompt_interface/git_prompt.rb

Overview

Git status/commit modal overlay support.

Instance Method Summary collapse

Instance Method Details

#git_commit_message(status_lines) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/kward/prompt_interface/git_prompt.rb', line 7

def git_commit_message(status_lines)
  start
  @mutex.synchronize do
    prepare_modal_input_locked("Git>", clear_attachments: true)
    @git_state = git_state_for(status_lines)
    render_prompt_locked
  end

  loop do
    key = read_key(nonblock: true)
    result = nil
    @mutex.synchronize do
      if key.nil?
        resized = handle_resize_locked
        footer_refreshed = tick_footer_locked
        render_prompt_locked if resized || footer_refreshed
      else
        result = handle_git_key(key)
        render_prompt_locked unless result.is_a?(String) || result == SELECT_CANCEL || git_action?(result)
      end
    end

    if git_action?(result)
      action_result = block_given? ? yield(result) : status_lines
      refreshed_status = git_action_status_lines(action_result)
      open_git_diff_viewer(action_result[:diff]) if action_result.is_a?(Hash) && action_result[:diff]
      @mutex.synchronize do
        selected_index = @git_state ? @git_state[:selected_index].to_i : 0
        @git_state = git_state_for(refreshed_status, selected_index: selected_index)
        @prompt_label = "Git>"
        render_prompt_locked
      end
    elsif result.is_a?(String) || result == SELECT_CANCEL
      finish_git_prompt
      return result == SELECT_CANCEL ? nil : result
    end

    sleep 0.02 if key.nil?
  end
end

#open_modal_diff_viewer(path, content) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/kward/prompt_interface/git_prompt.rb', line 48

def open_modal_diff_viewer(path, content)
  @mutex.synchronize do
    open_diff_viewer(path.to_s, content.to_s)
    render_prompt_locked
  end
  read_editor_until_closed
end