From 7fa5c3354fdd628d568ec995d31d8a2ded2e262e Mon Sep 17 00:00:00 2001 From: valeth Date: Sun, 24 May 2015 08:04:28 +0200 Subject: [PATCH] update config --- autoload/plug.vim | 156 +++++++++++++++++++++++++--------------- core/escape.vim | 9 +-- core/linewrap.vim | 5 ++ core/options.vim | 1 - core/plugins.vim | 1 + core/quit.vim | 1 - core/write_and_quit.vim | 3 + 7 files changed, 112 insertions(+), 64 deletions(-) create mode 100644 core/linewrap.vim delete mode 100644 core/quit.vim diff --git a/autoload/plug.vim b/autoload/plug.vim index a2e057f..d71f070 100644 --- a/autoload/plug.vim +++ b/autoload/plug.vim @@ -22,7 +22,7 @@ " Plug 'https://github.com/junegunn/vim-github-dashboard.git' " " " Plugin options -" Plug 'nsf/gocode', { 'tag': 'go.weekly.2012-03-13', 'rtp': 'vim' } +" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } " " " Plugin outside ~/.vim/plugged with post-update hook " Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': 'yes \| ./install' } @@ -72,8 +72,6 @@ let s:plug_tab = get(s:, 'plug_tab', -1) let s:plug_buf = get(s:, 'plug_buf', -1) let s:mac_gui = has('gui_macvim') && has('gui_running') let s:is_win = has('win32') || has('win64') -let s:py2 = has('python') && !has('nvim') && !s:is_win && !has('win32unix') -let s:ruby = has('ruby') && !has('nvim') && (v:version >= 703 || v:version == 702 && has('patch374')) let s:nvim = has('nvim') && exists('*jobwait') && !s:is_win let s:me = resolve(expand(':p')) let s:base_spec = { 'branch': 'master', 'frozen': 0 } @@ -746,6 +744,10 @@ function! s:update_impl(pull, force, args) abort echohl None endif + let python = (has('python') || has('python3')) && !s:is_win && !has('win32unix') + \ && (!s:nvim || has('vim_starting')) + let ruby = has('ruby') && !s:nvim && (v:version >= 703 || v:version == 702 && has('patch374')) + let s:update = { \ 'start': reltime(), \ 'all': todo, @@ -754,7 +756,7 @@ function! s:update_impl(pull, force, args) abort \ 'pull': a:pull, \ 'force': a:force, \ 'new': {}, - \ 'threads': (s:py2 || s:ruby || s:nvim) ? min([len(todo), threads]) : 1, + \ 'threads': (python || ruby || s:nvim) ? min([len(todo), threads]) : 1, \ 'bar': '', \ 'fin': 0 \ } @@ -763,21 +765,25 @@ function! s:update_impl(pull, force, args) abort call append(0, ['', '']) normal! 2G + let s:clone_opt = get(g:, 'plug_shallow', 1) ? + \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' + " Python version requirement (>= 2.7) - if s:py2 && !s:ruby && !s:nvim && s:update.threads > 1 + if python && !has('python3') && !ruby && !s:nvim && s:update.threads > 1 redir => pyv silent python import platform; print(platform.python_version()) redir END - let s:py2 = s:version_requirement( + let python = s:version_requirement( \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) endif - if (s:py2 || s:ruby) && !s:nvim && s:update.threads > 1 + + if (python || ruby) && s:update.threads > 1 try let imd = &imd if s:mac_gui set noimd endif - if s:ruby + if ruby call s:update_ruby() else call s:update_python() @@ -961,16 +967,18 @@ while 1 " Without TCO, Vim stack is bound to explode call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') redraw - let checkout = s:shellesc(has_key(spec, 'tag') ? spec.tag : spec.branch) - let merge = s:shellesc(has_key(spec, 'tag') ? spec.tag : 'origin/'.spec.branch) + let has_tag = has_key(spec, 'tag') + let checkout = s:shellesc(has_tag ? spec.tag : spec.branch) + let merge = s:shellesc(has_tag ? spec.tag : 'origin/'.spec.branch) if !new let [valid, msg] = s:git_valid(spec, 0) if valid if pull + let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' call s:spawn(name, - \ printf('(git fetch %s 2>&1 && git checkout -q %s 2>&1 && git merge --ff-only %s 2>&1 && git submodule update --init --recursive 2>&1)', - \ prog, checkout, merge), { 'dir': spec.dir }) + \ printf('(git fetch %s %s 2>&1 && git checkout -q %s 2>&1 && git merge --ff-only %s 2>&1 && git submodule update --init --recursive 2>&1)', + \ fetch_opt, prog, checkout, merge), { 'dir': spec.dir }) else let s:jobs[name] = { 'running': 0, 'result': 'Already installed', 'error': 0 } endif @@ -979,7 +987,8 @@ while 1 " Without TCO, Vim stack is bound to explode endif else call s:spawn(name, - \ printf('git clone %s --recursive %s -b %s %s 2>&1', + \ printf('git clone %s %s --recursive %s -b %s %s 2>&1', + \ has_tag ? '' : s:clone_opt, \ prog, \ s:shellesc(spec.uri), \ checkout, @@ -996,12 +1005,16 @@ endwhile endfunction function! s:update_python() -python << EOF +let py_exe = has('python3') ? 'python3' : 'python' +execute py_exe "<< EOF" """ Due to use of signals this function is POSIX only. """ import datetime import functools import os -import Queue +try: + import queue +except ImportError: + import Queue as queue import random import re import shutil @@ -1013,18 +1026,27 @@ import time import traceback import vim +G_NVIM = vim.eval("has('nvim')") == '1' G_PULL = vim.eval('s:update.pull') == '1' G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) +G_CLONE_OPT = vim.eval('s:clone_opt') G_PROGRESS = vim.eval('s:progress_opt(1)') G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) G_STOP = thr.Event() +G_THREADS = {} -class CmdTimedOut(Exception): +class BaseExc(Exception): + def __init__(self, msg): + self._msg = msg + @property + def msg(self): + return self._msg +class CmdTimedOut(BaseExc): pass -class CmdFailed(Exception): +class CmdFailed(BaseExc): pass -class InvalidURI(Exception): +class InvalidURI(BaseExc): pass class Action(object): INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] @@ -1048,13 +1070,13 @@ class GLog(object): with open(fname, 'ab') as flog: ltime = datetime.datetime.now().strftime("%H:%M:%S.%f") msg = '[{0},{1}] {2}{3}'.format(name, ltime, msg, '\n') - flog.write(msg) + flog.write(msg.encode()) class Buffer(object): - def __init__(self, lock, num_plugs): + def __init__(self, lock, num_plugs, is_pull, is_win): self.bar = '' - self.event = 'Updating' if vim.eval('s:update.pull') == '1' else 'Installing' - self.is_win = vim.eval('s:is_win') == '1' + self.event = 'Updating' if is_pull else 'Installing' + self.is_win = is_win self.lock = lock self.maxy = int(vim.eval('winheight(".")')) self.num_plugs = num_plugs @@ -1080,15 +1102,12 @@ class Buffer(object): num_spaces = self.num_plugs - len(self.bar) curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') - vim.command('normal! 2G') - if not self.is_win: - vim.command('redraw') - - def write(self, *args, **kwargs): with self.lock: - self._write(*args, **kwargs) + vim.command('normal! 2G') + if not self.is_win: + vim.command('redraw') - def _write(self, action, name, lines): + def write(self, action, name, lines): first, rest = lines[0], lines[1:] msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] padded_rest = [' ' + line for line in rest] @@ -1159,7 +1178,7 @@ class Command(object): proc = None first_line = True try: - tfile = tempfile.NamedTemporaryFile() + tfile = tempfile.NamedTemporaryFile(mode='w+b', delete=False) proc = subprocess.Popen(self.cmd, cwd=self.cmd_dir, stdout=tfile, stderr=subprocess.STDOUT, shell=True, preexec_fn=os.setsid) while proc.poll() is None: @@ -1180,7 +1199,7 @@ class Command(object): raise CmdTimedOut(['Timeout!']) tfile.seek(0) - result = [line.rstrip() for line in tfile] + result = [line.decode().rstrip() for line in tfile] if proc.returncode != 0: msg = [''] @@ -1192,18 +1211,21 @@ class Command(object): if self.clean: self.clean() raise + finally: + os.remove(tfile.name) return result class Plugin(object): - def __init__(self, name, args, buf, lock): + def __init__(self, name, args, buf_q, lock): self.name = name self.args = args - self.buf = buf + self.buf_q = buf_q self.lock = lock tag = args.get('tag', 0) self.checkout = esc(tag if tag else args['branch']) self.merge = esc(tag if tag else 'origin/' + args['branch']) + self.tag = tag def manage(self): try: @@ -1212,9 +1234,9 @@ class Plugin(object): else: self.install() with self.lock: - vim.command("let s:update.new['{0}'] = 1".format(self.name)) + thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) except (CmdTimedOut, CmdFailed, InvalidURI) as exc: - self.write(Action.ERROR, self.name, exc.message) + self.write(Action.ERROR, self.name, exc.msg) except KeyboardInterrupt: G_STOP.set() self.write(Action.ERROR, self.name, ['Interrupted!']) @@ -1236,9 +1258,9 @@ class Plugin(object): return _clean self.write(Action.INSTALL, self.name, ['Installing ...']) - callback = functools.partial(self.buf.write, Action.INSTALL, self.name) - cmd = 'git clone {0} --recursive {1} -b {2} {3} 2>&1'.format( - G_PROGRESS, self.args['uri'], self.checkout, esc(target)) + callback = functools.partial(self.write, Action.INSTALL, self.name) + cmd = 'git clone {0} {1} --recursive {2} -b {3} {4} 2>&1'.format( + '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], self.checkout, esc(target)) com = Command(cmd, None, G_TIMEOUT, G_RETRIES, callback, clean(target)) result = com.attempt_cmd() self.write(Action.DONE, self.name, result[-1:]) @@ -1256,8 +1278,9 @@ class Plugin(object): if G_PULL: self.write(Action.UPDATE, self.name, ['Updating ...']) - callback = functools.partial(self.buf.write, Action.UPDATE, self.name) - cmds = ['git fetch {0}'.format(G_PROGRESS), + callback = functools.partial(self.write, Action.UPDATE, self.name) + fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' + cmds = ['git fetch {0} {1}'.format(fetch_opt, G_PROGRESS), 'git checkout -q {0}'.format(self.checkout), 'git merge --ff-only {0}'.format(self.merge), 'git submodule update --init --recursive'] @@ -1278,7 +1301,7 @@ class Plugin(object): def write(self, action, name, msg): GLog.write('{0} {1}: {2}'.format(action, name, '\n'.join(msg))) - self.buf.write(action, name, msg) + self.buf_q.put((action, name, msg)) class PlugThread(thr.Thread): def __init__(self, tname, args): @@ -1288,17 +1311,21 @@ class PlugThread(thr.Thread): def run(self): thr.current_thread().name = self.tname - work_q, lock, buf = self.args + buf_q, work_q, lock = self.args try: while not G_STOP.is_set(): name, args = work_q.get_nowait() GLog.write('{0}: Dir {1}'.format(name, args['dir'])) - plug = Plugin(name, args, buf, lock) + plug = Plugin(name, args, buf_q, lock) plug.manage() work_q.task_done() - except Queue.Empty: + except queue.Empty: GLog.write('Queue now empty.') + finally: + global G_THREADS + with lock: + del G_THREADS[thr.current_thread().name] class RefreshThread(thr.Thread): def __init__(self, lock): @@ -1309,19 +1336,26 @@ class RefreshThread(thr.Thread): def run(self): while self.running: with self.lock: - vim.command('noautocmd normal! a') + thread_vim_command('noautocmd normal! a') time.sleep(0.2) def stop(self): self.running = False +if G_NVIM: + def thread_vim_command(cmd): + vim.session.threadsafe_call(lambda: vim.command(cmd)) +else: + def thread_vim_command(cmd): + vim.command(cmd) + def esc(name): return '"' + name.replace('"', '\"') + '"' def nonblock_read(fname): """ Read a file with nonblock flag. Return the last line. """ fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) - buf = os.read(fread, 100000) + buf = os.read(fread, 100000).decode() os.close(fread) line = buf.rstrip('\r\n') @@ -1338,7 +1372,6 @@ def main(): if GLog.ON and os.path.exists(GLog.LOGDIR): shutil.rmtree(GLog.LOGDIR) - threads = [] nthreads = int(vim.eval('s:update.threads')) plugs = vim.eval('s:update.todo') mac_gui = vim.eval('s:mac_gui') == '1' @@ -1348,24 +1381,33 @@ def main(): GLog.write('Num Threads: {0}'.format(nthreads)) lock = thr.Lock() - buf = Buffer(lock, len(plugs)) - work_q = Queue.Queue() + buf = Buffer(lock, len(plugs), G_PULL, is_win) + buf_q, work_q = queue.Queue(), queue.Queue() for work in plugs.items(): work_q.put(work) GLog.write('Starting Threads') + global G_THREADS for num in range(nthreads): tname = 'PlugT-{0:02}'.format(num) - thread = PlugThread(tname, (work_q, lock, buf)) + thread = PlugThread(tname, (buf_q, work_q, lock)) thread.start() - threads.append(thread) + G_THREADS[tname] = thread if mac_gui: rthread = RefreshThread(lock) rthread.start() - GLog.write('Joining Live Threads') - for thread in threads: - thread.join() + GLog.write('Buffer Writing Loop') + while not buf_q.empty() or len(G_THREADS) != 0: + try: + action, name, msg = buf_q.get(True, 0.25) + buf.write(action, name, msg) + buf_q.task_done() + except queue.Empty: + pass + except KeyboardInterrupt: + G_STOP.set() + if mac_gui: rthread.stop() rthread.join() @@ -1533,6 +1575,7 @@ function! s:update_ruby() end } if VIM::evaluate('s:mac_gui') == 1 + clone_opt = VIM::evaluate('s:clone_opt') progress = VIM::evaluate('s:progress_opt(1)') nthr.times do mtx.synchronize do @@ -1562,7 +1605,8 @@ function! s:update_ruby() else if pull log.call name, 'Updating ...', :update - bt.call "#{cd} #{dir} && git fetch #{progress} 2>&1 && git checkout -q #{checkout} 2>&1 && git merge --ff-only #{merge} 2>&1 && #{subm}", name, :update, nil + fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' + bt.call "#{cd} #{dir} && git fetch #{fetch_opt} #{progress} 2>&1 && git checkout -q #{checkout} 2>&1 && git merge --ff-only #{merge} 2>&1 && #{subm}", name, :update, nil else [true, skip] end @@ -1570,7 +1614,7 @@ function! s:update_ruby() else d = esc dir.sub(%r{[\\/]+$}, '') log.call name, 'Installing ...', :install - bt.call "git clone #{progress} --recursive #{uri} -b #{checkout} #{d} 2>&1", name, :install, proc { + bt.call "git clone #{clone_opt unless tag} #{progress} --recursive #{uri} -b #{checkout} #{d} 2>&1", name, :install, proc { FileUtils.rm_rf dir } end diff --git a/core/escape.vim b/core/escape.vim index 06135b9..039830e 100644 --- a/core/escape.vim +++ b/core/escape.vim @@ -1,8 +1,5 @@ imap jk -vmap jk +imap JK +imap Jk -"aug FastEscape - "au! - "au InsertEnter * set timeoutlen=0 - "au InsertLeave * set timeoutlen=1000 -"aug END +set timeoutlen=500 diff --git a/core/linewrap.vim b/core/linewrap.vim new file mode 100644 index 0000000..979a5e2 --- /dev/null +++ b/core/linewrap.vim @@ -0,0 +1,5 @@ +if has("linebreak") + let &showbreak = "↳ " + set breakindent + set breakindentopt=sbr +endif diff --git a/core/options.vim b/core/options.vim index e47b855..3b9a22e 100644 --- a/core/options.vim +++ b/core/options.vim @@ -1,4 +1,3 @@ -set autowrite set shortmess=aoOtTI set clipboard=unnamed,unnamedplus,autoselect diff --git a/core/plugins.vim b/core/plugins.vim index f3f72a1..87b754d 100644 --- a/core/plugins.vim +++ b/core/plugins.vim @@ -11,6 +11,7 @@ Plug 'vim-scripts/gnupg' Plug 'tomasr/molokai' Plug 'junegunn/seoul256.vim' +Plug 'baeuml/summerfruit256.vim' Plug 'zefei/vim-colortuner', { 'on': 'Colortuner' } Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } diff --git a/core/quit.vim b/core/quit.vim deleted file mode 100644 index 86dddcf..0000000 --- a/core/quit.vim +++ /dev/null @@ -1 +0,0 @@ -set confirm diff --git a/core/write_and_quit.vim b/core/write_and_quit.vim index c79ebc5..26eaf29 100644 --- a/core/write_and_quit.vim +++ b/core/write_and_quit.vim @@ -1,3 +1,6 @@ +set confirm +set autowrite + command! Wq wq command! WQ wq command! Q q