aboutsummaryrefslogtreecommitdiffhomepage
path: root/tigrc
blob: fece813d89e31e23d5bcce040f1e184fabc41e39 (plain)
1
2
3
4
5
6
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# ref:
# https://qiita.com/sfus/items/063797a1dd8fdc7d032f
# https://github.com/jonas/tig/wiki/Bindings

#====================
# geineric
#====================
# vim-like g binding, 'gp' for git grep
bind generic g none
bind generic gp view-grep
bind generic gg move-first-line
bind generic G move-last-line

# scroll right easily
bind generic <C-H> scroll-left
bind generic <C-L> scroll-right

# redraw, refresh, source tigrc
bind generic <C-R> refresh
bind generic <Esc>l screen-redraw
bind generic R :source ~/.tigrc

# clipboard
bind generic xx +sh -c "echo -n %(commit) | head -c7 | xclip -sel c && echo Commit Clipped!"
bind generic xc +sh -c "echo -n %(commit) | xclip -sel c && echo Full Commit Clipped!"
bind generic xt +sh -c "echo -n %(text) | xclip -sel c && echo Text Clipped!"
bind generic xrb +sh -c "echo -n %(branch) | xclip -sel c && echo Branch Clipped!"
bind generic xrB +sh -c "echo -n %(remote):%(branch) | xclip -sel c && echo Remote Branch Clipped!"
bind generic xrt +sh -c "echo -n %(tag) | xclip -sel c && echo tag Clipped"
bind generic xf +sh -c "echo -n %(file) | xclip -sel c && echo File Clipped"
bind generic xb +sh -c "echo -n %(blob) | head -c7 | xclip -sel c && echo Blob Clipped"
bind generic xB +sh -c "echo -n %(blob) | xclip -sel c && echo Full Blob Clipped"

# toggle case sensitive for search
bind generic w :toggle ignore-case 

# see reflog, reset refernece
bind generic 8 >sh -c "git reflog --pretty=raw | tig --pretty=raw"
bind generic gl ?git checkout HEAD@{"%(prompt Enter HEAD@{} number: )"}
bind generic gL ?git reset --hard HEAD@{"%(prompt Enter HEAD@{} number: )"}

# highlight diff without +/-
set diff-show-signs = false
set diff_column_highlight = ALL

# misc settings
set ignore-case = true
set line-graphics = utf-8
set refresh-mode = auto

#====================
# main view
#====================
set main-view = \
    date:relative \
    author:abbreviated \
    id \
    commit-title:graph=v2,refs=true 

# override graph toggling
bind main G none
bind main G move-last-line
bind main ` :toggle commit-title-graph
bind main F none
bind main <C-T> :toggle commit-title-refs

# edit tigrc
bind main e >sh -c "vim ~/git/settings/tigrc"

# move
bind main <C-J> :move-next-merge
bind main <C-K> :move-prev-merge
bind main gh :goto HEAD
bind main ; :goto %(commit)^2 # go to second parent

# branch
bind main b none
bind main bn @git branch "%(prompt Enter branch name: )" %(commit)
bind main bN @git branch %(branch) --track %(remote)/%(branch)
bind main bu @git branch --set-upstream-to="%(prompt Set remote/branch: )"
bind main bc @git checkout -b "%(prompt Checkout at new branch: )" %(commit)
bind main bd @git branch -d "%(prompt Delete branch: )"
bind main bbd @git branch -d %(branch)
bind main bD ?>git branch -D "%(prompt Delete branch anyway: )"
bind main bbD ?>git branch -D %(branch)
bind main brd ?git branch -rd %(remote)/%(branch)
bind main bv +sh -c "git branch -vv | grep %(branch)"
bind main bm @git branch -m %(branch) "%(prompt New branch name: )"
bind main bM @git branch -f "%(prompt Move which branch to here? )" %(commit)
bind main c @sh -c "git branch --points-at=%(commit) | \
                    sed -n '/^*/ {n;p}' | \
                    (cat -; echo %(commit)) | \
                    head -1 | \
                    xargs git checkout"
bind main bo >tig %(branch)
bind main bO >tig "%(prompt Enter branchs: )"
bind main ba >tig --all

# commit
bind main a !>git commit --amend
bind main 3 >git commit --allow-empty -m "%(prompt Empty commit, enter message: )"

# merge
bind main m ?@git merge %(commit)
bind main M ?@git merge %(branch) --no-ff
bind main gm ?@git merge %(remote)/%(branch)         # merge with current remote
bind main gM ?@git merge %(remote)/%(branch) --no-ff # merge-no-ff with current remote

# push
bind main p none # override default pager binding
bind main pp ?git push
bind main pP ?git push -u %(remote) %(branch):%(branch)
bind main pr ?git push -u '%(prompt Which remote? )' %(branch):%(branch)
bind main pF ?git push -f
bind main pd ?git push %(remote) :%(branch)
bind main pD ?git push '%(prompt Which remote? )' :'%(prompt Which branch? )'

# fetch
bind main F ?git fetch %(remote) %(branch)          # Go to Fetch
bind main <C-F> ?git fetch %(remote)
bind main gf ?git fetch '%(prompt Which remote? )'  # Go to Fetch a specific remote 
bind main pu ?git pull
bind main pU ?git pull --rebase
 
# reset/rebase/revert
bind main uu ?git reset %(commit)
bind main us ?sh -c "git reset %(commit) && git stash push -m 'deprecated from reset'" # reset and stash the changes
bind main uh ?git reset %(commit) --hard
bind main B !?git rebase -i %(commit)
bind main gb !?git rebase --onto '%(prompt Rebase onto which branch? )' %(commit) %(repo:head)
bind main ! ?git revert %(commit)

# tag
bind main Tn @git tag "%(prompt Enter tag name: )" %(commit)
bind main TN !git tag "%(prompt Enter tag name: )" %(commit) -a
bind main Tm @sh -c 'git tag -d %(tag) && git tag "%(prompt Enter tag name: )" %(commit)'
bind main TM @sh -c 'git cat-file -p %(tag) | sed -n \'6,$p\' | git tag -a -F - "%(prompt Enter tag name: )" && git tag -d %(tag)'
bind main Ts >tig show %(tag)
bind main Td @git tag -d "%(prompt Delete tag: )"
bind main Tp ?git push --tags
bind main pt ?git push %(remote) %(tag)
bind main TTd @git tag -d %(tag)

# search in history
bind main S >sh -c 'git log -S "%(prompt Search: )" --pretty=raw | tig --pretty=raw'

# submodule
bind main Zu ?>git submodule update
bind main Zi ?>git submodule init

# show diff based on revision
bind main . >sh -c "git diff %(commit) | tig"
bind main > >sh -c "git diff %(commit) --no-prefix -U1000 | tig"

# make patches
bind main PP ?>git format-patch %(commit)
bind main P1 ?>git format-patch -1 %(commit)

# Hub
bind main i @hub browse -- commit/%(commit)
bind main I >sh -c "hub issue | tig"

# Misc
## Statistics
bind main gc !sh -c 'cloc --git %(commit) | tig'
## Misc-android
bind main <C-B> !sh scripts/bump_version.sh
## Remote
bind main gr +sh -c "git remote -v | grep %(remote)"

# note
#bind generic gnn !git notes edit %(commit)
#bind generic gnr !git notes remove %(commit)

#====================
# blame view
#====================
bind blame m >tig -- %(file)
bind blame . >sh -c "git diff %(ref) -- %(file) | tig"
bind blame > >sh -c "git diff %(ref) --no-prefix -U1000i -- %(file) | tig"

set blame-view = author:abbreviated date:relative id:yes,color line-number:yes text

#====================
# blob view
#====================
bind blob m >tig -- %(file)

#====================
# status view
#====================
bind status j :/^[MADRU?]
bind status k :?^[MADRU?]

# stash
bind status s ?>git stash 
bind status S @git stash push -m "%(prompt Enter stash name: )"
bind status gs !git stashstaged

# quick commit
bind status c @git commit -m "%(prompt Enter commit message: )"
bind status a !>git commit --amend
bind status p ?>sh -c "git commit -m 'update' && git push" # quick push
bind status d ?>rm %(file)

# solve conflict
bind status U ?>git reset --hard
bind status gc @git clean -f
bind status Ba @git rebase --abort
bind status Bc @git rebase --continue
bind status <F4> !sh -c "git difftool -y \"$(git rev-parse --show-toplevel)/%(file)\""
bind status gu @git update-index --assume-unchanged %(file)

# apply patch file
bind status <C-O> ?git am %(file)

#====================
# stash view
#====================
bind stash a ?git stash apply %(stash)
bind stash d ?>git stash drop %(stash)
bind stash p ?>git stash pop %(stash)

# rename a stash
bind stash n @sh -c "git stash drop %(stash) | \
                     awk '{print $3}' | \
                     tr -d '()' | \
                     xargs git stash store -m '%(prompt Enter stash name: )'"

#====================
# stage view
#====================
bind stage <C-J> :/^@@
bind stage <C-K> :?^@@
bind stage <Esc>j :/^diff --(git|cc)
bind stage <Esc>k :?^diff --(git|cc)

#====================
# tree view
#====================
set tree-view = author:abbreviated date:relative mode file-size:units id:no file-name

bind tree l enter

bind tree t +git cat-file -p %(commit)

bind tree d ?rm %(file)
bind tree m >tig -- %(file)

bind tree xt +sh -c "git rev-parse %(commit)^{tree} | xclip -sel c -o | awk '{print \"Tree Clipped\", $1}'"

bind tree . >sh -c "git diff %(ref) -- %(file) | tig"
#====================
# refs view
#====================
bind refs C none
bind refs c @git checkout %(branch)

bind refs b none
bind refs bd @git branch -d %(branch)
bind refs bD ?git branch -D %(branch)
bind refs pd ?git push %(remote) :%(branch)
bind refs r none
bind refs brd ?git branch -rd %(remote)/%(branch)

bind refs U ?git fetch --all
bind refs <C-F> ?git fetch %(remote)
bind refs F ?git fetch %(remote) %(branch)

bind refs . >sh -c "git diff %(branch) | tig"
bind refs > >sh -c "git diff %(branch) --prefix -U1000 | tig"

#====================
# log view
#====================
bind log <C-J> :/^commit
bind log <C-K> :?^commit

#====================
# diff view
#====================
bind diff <C-J> :/^@@
bind diff <C-K> :?^@@
bind diff <Esc>j :/^diff --(git|cc)
bind diff <Esc>k :?^diff --(git|cc)

bind diff u @git checkout %(commit)^ -- %(file)

#====================
# help view
#====================

# edit tigrc
bind help e >sh -c "vim ~/.tigrc"

#====================
# color
#====================
color diff-chunk white magenta