summaryrefslogtreecommitdiff
path: root/start/signify/autoload/sy/util.vim
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2022-05-22 22:47:23 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2022-05-22 22:47:23 +0100
commit95aea6b533e71e478d61d18fac71cca116c56a4d (patch)
tree1a1f42f723772258cc54551495826768f374474a /start/signify/autoload/sy/util.vim
Add all the plugins I currently use
Diffstat (limited to 'start/signify/autoload/sy/util.vim')
-rw-r--r--start/signify/autoload/sy/util.vim109
1 files changed, 109 insertions, 0 deletions
diff --git a/start/signify/autoload/sy/util.vim b/start/signify/autoload/sy/util.vim
new file mode 100644
index 0000000..43a9cc6
--- /dev/null
+++ b/start/signify/autoload/sy/util.vim
@@ -0,0 +1,109 @@
+" vim: et sw=2 sts=2
+
+scriptencoding utf-8
+
+" Function: #escape {{{1
+function! sy#util#escape(path) abort
+ if exists('+shellslash')
+ let old_ssl = &shellslash
+ if fnamemodify(&shell, ':t') == 'cmd.exe'
+ set noshellslash
+ else
+ set shellslash
+ endif
+ endif
+
+ let path = shellescape(a:path)
+
+ if exists('old_ssl')
+ let &shellslash = old_ssl
+ endif
+
+ return path
+endfunction
+
+" Function: #refresh_windows {{{1
+function! sy#util#refresh_windows() abort
+ if exists('*win_getid')
+ let winid = win_getid()
+ else
+ let winnr = winnr()
+ endif
+
+ if !get(g:, 'signify_cmdwin_active')
+ keepjumps windo if exists('b:sy') | call sy#start() | endif
+ endif
+
+ if exists('winid')
+ call win_gotoid(winid)
+ else
+ execute winnr .'wincmd w'
+ endif
+endfunction
+
+" Function: #hunk_text_object {{{1
+function! sy#util#hunk_text_object(emptylines) abort
+ execute sy#util#return_if_no_changes()
+
+ let lnum = line('.')
+ let hunks = filter(copy(b:sy.hunks), 'v:val.start <= lnum && v:val.end >= lnum')
+
+ if empty(hunks)
+ echomsg 'signify: Here is no hunk.'
+ return
+ endif
+
+ execute hunks[0].start
+ normal! V
+
+ if a:emptylines
+ let lnum = hunks[0].end
+ while getline(lnum+1) =~ '^$'
+ let lnum += 1
+ endwhile
+ execute lnum
+ else
+ execute hunks[0].end
+ endif
+endfunction
+
+" Function: #shell_redirect {{{1
+function! sy#util#shell_redirect(path) abort
+ " if shellredir contains a %s it is replaced with the path
+ " otherwise, just append it (from :help shellredir:
+ " The name of the temporary file can be represented by '%s' if necessary
+ " (the file name is appended automatically if no %s appears in the value
+ " of this option)
+ if &shellredir =~# '%s'
+ return substitute(&shellredir, '\C%s', a:path, 'g')
+ else
+ return &shellredir .' '. a:path
+ endif
+endfunction
+
+" Function: #chdir {{{1
+function! sy#util#chdir() abort
+ let chdir = haslocaldir()
+ \ ? 'lcd'
+ \ : (exists(':tcd') && haslocaldir(-1, 0)) ? 'tcd' : 'cd'
+ return [getcwd(), chdir]
+endfunction
+
+" Function: #has_changes {{{1
+function! sy#util#return_if_no_changes() abort
+ if !exists('b:sy') || empty(b:sy.hunks)
+ echomsg 'signify: There are no changes.'
+ return 'return'
+ endif
+ return ''
+endfunction
+
+" Function: #execute {{{1
+function! sy#util#execute(cmd) abort
+ let lang = v:lang
+ redir => output
+ silent! execute a:cmd
+ redir END
+ silent! execute 'language message' lang
+ return output
+endfunction