<commit_before>*gina.txt*		Asynchronously control git repositories from Vim

Version: 0.2.1
Author:  Alisue <<EMAIL>>
Support: Vim 8.0.0027 and above
Support: Neovim 0.1.7 and above
License: MIT License (See LICENSE)


=============================================================================
CONTENTS					*gina-contents*

INTRODUCTION			|gina-introduction|
USAGE				|gina-usage|
  COMMAND			  |gina-usage-command|
  ACTION			  |gina-usage-action|
  COMPONENT			  |gina-usage-component|
CUSTOM				|gina-custom|
  ACTION			  |gina-custom-action|
  MAPPING			  |gina-custom-mapping|
  COMMAND			  |gina-custom-command|
  EXECUTE			  |gina-custom-execute|
  EXAMPLE			  |gina-custom-example|
BUFFER				|gina-buffer|
  BLAME				  |gina-buffer-blame|
  BRANCH			  |gina-buffer-branch|
  CHANGES			  |gina-buffer-changes|
  COMMIT			  |gina-buffer-commit|
  DIFF				  |gina-buffer-diff|
  GREP				  |gina-buffer-grep|
  LOG				  |gina-buffer-log|
  LS				  |gina-buffer-ls|
  REFLOG			  |gina-buffer-reflog|
  SHOW				  |gina-buffer-show|
  STASH				  |gina-buffer-stash|
  STASH	SHOW			  |gina-buffer-stash-show|
  STATUS			  |gina-buffer-status|
  TAG				  |gina-buffer-tag|
INTERFACE			|gina-interface|
  COMMANDS			  |gina-commands|
  FUNCTIONS			  |gina-functions|
  VARIABLES			  |gina-variables|
  HIGHLIGHTS			  |gina-highlights|
  OPTIONS			  |gina-options|
  ACTIONS			  |gina-actions|
MISC				|gina-misc|
  SHORT FORMAT			  |gina-misc-short-format|
  TREEISH			  |gina-misc-treeish|
  STRING FORMAT			  |gina-misc-string-format|
  ASKPASS     			  |gina-misc-askpass|
CHANGELOG			|gina-changelog|


=============================================================================
INTRODUCTION					*gina-introduction*

*gina.vim* (gina) is a plugin to asynchronously control git repositories.

- Execute a git command asynchronously (|job|)
- List candidates of a result of a git command
- Perform actions on candidates above to control a git repository

Latest version:~
https://github.com/lambdalisue/gina.vim


=============================================================================
USAGE						*gina-usage*

The following is a schematic image of general working-flow with gina.
>
           ┌─────┬──────────┐
	   │     │          │
	#DIRTY#  │          ▼
	   ▲     │    :Gina status  │ <<  : stage
	   │     │          │       │ >>  : unstage
	   │     │          │       │ --  : toggle
	:write   │       #STAGED#   │ ==  : discard
	   ▲     │          │       │ pp  : patch
	   │     ├──────────┤       │ dd  : diff
	   │     │          ▼   
	#CLEAN#  │     :Gina commit │ !   : switch --amend
	   │     │          │       │ :w  : save cache
	   │     ▼          │       │ :q  : commit changes (confirm)
	   └────────────────┘       │ :wq : commit changes (immediate)
<
So basically user would

1. Edit contents in a git repository
2. Stage changes with |:Gina-status|
   - "<<" to stage
   - ">>" to unstage
   - etc.
3. Commit changes with |:Gina-commit|
   - |:w| to save message into a cache
   - |:q| to commit changes (user will be asked if they want)
   - |:wq| to commit changes (immediately the commit will be performed)

Read further to learn more basic of gina.

-----------------------------------------------------------------------------
COMMAND						*gina-usage-command*

gina provides a single command |:Gina| which takes at least one argument.

When |:Gina| is executed with a |bang| modifier (|:Gina!|), it executes a
corresponding git command asynchronously and echo the result.
For example, when users execute ":Gina! status", it echos the current status
of a git repository like
>
	:Gina! status
	[gina] On branch master
	[gina] Your branch is up-to-date with 'origin/master'.
	...
	[gina] 
	[gina] no changes added to commit (use "git add" and/or "git ...
<
When |:Gina| is executed with a double |bang| modifier (|:Gina!!|), it
executes a corresponding git command under the shell by |:!| or |:terminal|.
It is mainly for supporting an interactive features, such as "git add -p" or
"git rebase -i". Note that the command is not executed asynchronously.

When |:Gina| is executed without a |bang| modifier, it tries to find a
corresponding gina command from a "gina#command#..." namespace and execute.
If no corresponding command is found, it fallbacks to the above behavior,
namely non-gina conmmand executes a raw git command.

For example, when user executes ":Gina add", it fallbacks to ":Gina! add"
while there is no corresponding gina command for "add" exist.
>
	:Gina add
	[gina] Nothing specified, nothing added.
	[gina] Maybe you wanted to say 'git add .'?
<
And when user executes ":Gina status", it opens a "gina-status" buffer while
"status" is found in "gina#command#..." namespace and the function
opens a "gina-status" buffer of the current git repository.
>
	:Gina status
	--> Opens a "gina-status" window instead
<
And on the buffer, users can execute pre-defined actions which is explained
in the next section. 

-----------------------------------------------------------------------------
ACTION						*gina-usage-action*

When |:Gina| opens a non file-like buffer (e.g. "gina-status" buffer), users
may able to perform pre-defined actions on candidates shown in the buffer.

For example, ":Gina status" opens a "gina-status" buffer which looks like
>
	M  foo.txt
	 M bar.txt
<
The buffer contents indiceate the index status of each files.
The first line indicates that a "foo.txt" is staged and the last line
indicates a "bar.txt" isn't.

When users hit <Tab> on the last line, users will be asked to select an
action to perform with a prompt like
>
	action: 
<
So now, type "sta" on that prompt like
>
	action: sta
<
And now, hit <Tab> again and "stage" is completed. This is a basic behavior
of |cmdline-completion| so read that if you are not familiar with.

And now, hit <Return> to perform the action. This will perform an
"index:stage" action which is aliased to "stage", what users just input.
And then the buffer content will becomes
>
	M  foo.txt
	M  bar.txt
<
Which indicates all changes are staged into the index.
<commit_msg>Fix document<commit_after>*gina.txt*		Asynchronously control git repositories from Vim

Version: 0.2.1
Author:  Alisue <<EMAIL>>
Support: Vim 8.0.0027 and above
Support: Neovim 0.1.7 and above
License: MIT License (See LICENSE)


=============================================================================
CONTENTS					*gina-contents*

INTRODUCTION			|gina-introduction|
USAGE				|gina-usage|
  COMMAND			  |gina-usage-command|
  ACTION			  |gina-usage-action|
  COMPONENT			  |gina-usage-component|
CUSTOM				|gina-custom|
  ACTION			  |gina-custom-action|
  MAPPING			  |gina-custom-mapping|
  COMMAND			  |gina-custom-command|
  EXECUTE			  |gina-custom-execute|
  EXAMPLE			  |gina-custom-example|
BUFFER				|gina-buffer|
  BLAME				  |gina-buffer-blame|
  BRANCH			  |gina-buffer-branch|
  CHANGES			  |gina-buffer-changes|
  COMMIT			  |gina-buffer-commit|
  DIFF				  |gina-buffer-diff|
  GREP				  |gina-buffer-grep|
  LOG				  |gina-buffer-log|
  LS				  |gina-buffer-ls|
  REFLOG			  |gina-buffer-reflog|
  SHOW				  |gina-buffer-show|
  STASH				  |gina-buffer-stash|
  STASH	SHOW			  |gina-buffer-stash-show|
  STATUS			  |gina-buffer-status|
  TAG				  |gina-buffer-tag|
INTERFACE			|gina-interface|
  COMMANDS			  |gina-commands|
  FUNCTIONS			  |gina-functions|
  VARIABLES			  |gina-variables|
  HIGHLIGHTS			  |gina-highlights|
  OPTIONS			  |gina-options|
  ACTIONS			  |gina-actions|
MISC				|gina-misc|
  SHORT FORMAT			  |gina-misc-short-format|
  TREEISH			  |gina-misc-treeish|
  STRING FORMAT			  |gina-misc-string-format|
  ASKPASS     			  |gina-misc-askpass|
CHANGELOG			|gina-changelog|


=============================================================================
INTRODUCTION					*gina-introduction*

*gina.vim* (gina) is a plugin to asynchronously control git repositories.

- Execute a git command asynchronously (|job|)
- List candidates of a result of a git command
- Perform actions on candidates above to control a git repository

Latest version:~
https://github.com/lambdalisue/gina.vim


=============================================================================
USAGE						*gina-usage*

The following is a schematic image of general working-flow with gina.
>
           ┌─────┬──────────┐
	   │     │          │
	#DIRTY#  │          ▼
	   ▲     │    :Gina status  │ <<  : stage
	   │     │          │       │ >>  : unstage
	   │     │          │       │ --  : toggle
	:write   │       #STAGED#   │ ==  : discard
	   ▲     │          │       │ pp  : patch
	   │     ├──────────┤       │ dd  : diff
	   │     │          ▼   
	#CLEAN#  │     :Gina commit │ !   : switch --amend
	   │     │          │       │ :w  : save cache
	   │     ▼          │       │ :q  : commit changes (confirm)
	   └────────────────┘       │ :wq : commit changes (immediate)
<
So basically user would

1. Edit contents in a git repository
2. Stage changes with |:Gina-status|
   - "<<" to stage
   - ">>" to unstage
   - etc.
3. Commit changes with |:Gina-commit|
   - |:w| to save message into a cache
   - |:q| to commit changes (user will be asked if they want)
   - |:wq| to commit changes (immediately the commit will be performed)

Read further to learn more basic of gina.

-----------------------------------------------------------------------------
COMMAND						*gina-usage-command*

gina provides a single command |:Gina| which takes at least one argument.

When |:Gina| is executed with a |bang| modifier (|:Gina!|), it executes a
corresponding git command asynchronously and echo the result.
For example, when users execute ":Gina! status", it echos the current status
of a git repository like
>
	:Gina! status
	[gina] On branch master
	[gina] Your branch is up-to-date with 'origin/master'.
	...
	[gina] 
	[gina] no changes added to commit (use "git add" and/or "git ...
<
When |:Gina| is executed with a double |bang| modifier (|:Gina!!|), it
executes a corresponding git command under the shell by |:!| or |:terminal|.
It is mainly for supporting an interactive features, such as "git add -p" or
"git rebase -i". Note that the command is not executed asynchronously.

When |:Gina| is executed without a |bang| modifier, it tries to find a
corresponding gina command from a "gina#command#..." namespace and execute.
If no corresponding command is found, it fallbacks to the above behavior,
namely non-gina conmmand executes a raw git command.

For example, when user executes ":Gina add", it fallbacks to ":Gina! add"
while there is no corresponding gina command for "add" exist.
>
	:Gina add
	[gina] Nothing specified, nothing added.
	[gina] Maybe you wanted to say 'git add .'?
<
And when user executes ":Gina status", it opens a "gina-status" buffer while
"status" is found in "gina#command#..." namespace and the function
opens a "gina-status" buffer of the current git repository.
>
	:Gina status
	--> Opens a "gina-status" window instead
<
And on the buffer, users can execute pre-defined actions which is explained
in the next section. 

-----------------------------------------------------------------------------
ACTION						*gina-usage-action*

When |:Gina| opens a non file-like buffer (e.g. "gina-status" buffer), users
may able to perform pre-defined actions on candidates shown in the buffer.

For example, ":Gina status -s" opens a "gina-status" buffer with short format
which looks like
>
	M  foo.txt
	 M bar.txt
<
The buffer contents indiceate the index status of each files.
The first line indicates that a "foo.txt" is staged and the last line
indicates a "bar.txt" isn't.

When users hit <Tab> on the last line, users will be asked to select an
action to perform with a prompt like
>
	action: 
<
So now, type "sta" on that prompt like
>
	action: sta
<
And now, hit <Tab> again and "stage" is completed. This is a basic behavior
of |cmdline-completion| so read that if you are not familiar with.

And now, hit <Return> to perform the action. This will perform an
"index:stage" action which is aliased to "stage", what users just input.
And then the buffer content will becomes
>
	M  foo.txt
	M  bar.txt
<
Which indicates all changes are staged into the index.

{'fraction_non_alphanumeric': 0.16208026208026208, 'fraction_numerical': 0.002457002457002457, 'mean_word_length': 2.70142467414368, 'pattern_counts': {'":': 10, '<': 37, '<?xml version=': 0, '>': 39, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5657637', 'n_tokens_mistral': 4250, 'n_tokens_neox': 3923, 'n_words': 1441}