aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin/gist.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/plugin/gist.vim')
-rw-r--r--vim/plugin/gist.vim826
1 files changed, 0 insertions, 826 deletions
diff --git a/vim/plugin/gist.vim b/vim/plugin/gist.vim
deleted file mode 100644
index 9081d00..0000000
--- a/vim/plugin/gist.vim
+++ /dev/null
@@ -1,826 +0,0 @@
-"=============================================================================
-" File: gist.vim
-" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
-" Last Change: 20-Aug-2011.
-" Version: 5.0
-" WebPage: http://github.com/mattn/gist-vim
-" License: BSD
-" Usage:
-"
-" :Gist
-" post current buffer to gist, using default privicy option
-" (see g:gist_private)
-"
-" :'<,'>Gist
-" post selected text to gist., using default privicy option
-" This applies to all permutations listed below (except multi)
-" (see g:gist_private)
-"
-" :Gist -p
-" create a private gist
-"
-" :Gist -P
-" create a public gist
-" (only relevant if you've set gists to be private by default)
-"
-" :Gist -P
-" post whole text to gist as public
-" This is only relevant if you've set gists to be private by default
-" :Gist -a
-" create a gist anonymously
-"
-" :Gist -m
-" create a gist with all open buffers
-"
-" :Gist -e
-" edit the gist. (you need to have opend the gist buffer first)
-" you can update the gist with :w command on gist buffer
-"
-" :Gist -d
-" delete the gist. (you need to have opend the gist buffer first)
-" password authentication is needed
-"
-" :Gist -f
-" fork the gist. (you need to have opend the gist buffer first)
-" password authentication is needed
-"
-" :Gist -e foo.js
-" edit the gist with name 'foo.js'. (you need to have opend the gist buffer first)
-"
-" :Gist XXXXX
-" get gist XXXXX
-"
-" :Gist -c XXXXX
-" get gist XXXXX and add to clipboard
-"
-" :Gist -l
-" list your public gists
-"
-" :Gist -l mattn
-" list gists from mattn
-"
-" :Gist -la
-" list all your (public and private) gists
-"
-" Tips:
-" * if set g:gist_clip_command, gist.vim will copy the gist code
-" with option '-c'.
-"
-" # mac
-" let g:gist_clip_command = 'pbcopy'
-"
-" # linux
-" let g:gist_clip_command = 'xclip -selection clipboard'
-"
-" # others(cygwin?)
-" let g:gist_clip_command = 'putclip'
-"
-" * if you want to detect filetype from gist's filename...
-"
-" # detect filetype if vim failed auto-detection.
-" let g:gist_detect_filetype = 1
-"
-" # detect filetype always.
-" let g:gist_detect_filetype = 2
-"
-" * if you want to open browser after the post...
-"
-" let g:gist_open_browser_after_post = 1
-"
-" * if you want to change the browser...
-"
-" let g:gist_browser_command = 'w3m %URL%'
-"
-" or
-"
-" let g:gist_browser_command = 'opera %URL% &'
-"
-" on windows, should work with original setting.
-"
-" * if you want to show your private gists with ':Gist -l'
-"
-" let g:gist_show_privates = 1
-"
-" * if don't you want to copy URL of the post...
-"
-" let g:gist_put_url_to_clipboard_after_post = 0
-"
-" or if you want to copy URL and add linefeed at the last of URL,
-"
-" let g:gist_put_url_to_clipboard_after_post = 2
-"
-" default value is 1.
-"
-" Thanks:
-" MATSUU Takuto:
-" removed carriage return
-" gist_browser_command enhancement
-" edit support
-"
-" GetLatestVimScripts: 2423 1 :AutoInstall: gist.vim
-" script type: plugin
-
-if &cp || (exists('g:loaded_gist_vim') && g:loaded_gist_vim)
- finish
-endif
-let g:loaded_gist_vim = 1
-
-if (!exists('g:github_user') || !exists('g:github_token')) && !executable('git')
- echohl ErrorMsg | echomsg "Gist: require 'git' command" | echohl None
- finish
-endif
-
-if !executable('curl')
- echohl ErrorMsg | echomsg "Gist: require 'curl' command" | echohl None
- finish
-endif
-
-if !exists('g:gist_open_browser_after_post')
- let g:gist_open_browser_after_post = 0
-endif
-
-if !exists('g:gist_put_url_to_clipboard_after_post')
- let g:gist_put_url_to_clipboard_after_post = 1
-endif
-
-if !exists('g:gist_curl_options')
- let g:gist_curl_options = ""
-endif
-
-if !exists('g:gist_browser_command')
- if has('win32') || has('win64')
- let g:gist_browser_command = "!start rundll32 url.dll,FileProtocolHandler %URL%"
- elseif has('mac')
- let g:gist_browser_command = "open %URL%"
- elseif executable('xdg-open')
- let g:gist_browser_command = "xdg-open %URL%"
- else
- let g:gist_browser_command = "firefox %URL% &"
- endif
-endif
-
-if !exists('g:gist_detect_filetype')
- let g:gist_detect_filetype = 0
-endif
-
-if !exists('g:gist_private')
- let g:gist_private = 0
-endif
-
-if !exists('g:gist_show_privates')
- let g:gist_show_privates = 0
-endif
-
-if !exists('g:gist_cookie_dir')
- let g:gist_cookie_dir = substitute(expand('<sfile>:p:h'), '[/\\]plugin$', '', '').'/cookies'
-endif
-
-function! s:nr2hex(nr)
- let n = a:nr
- let r = ""
- while n
- let r = '0123456789ABCDEF'[n % 16] . r
- let n = n / 16
- endwhile
- return r
-endfunction
-
-function! s:encodeURIComponent(instr)
- let instr = iconv(a:instr, &enc, "utf-8")
- let len = strlen(instr)
- let i = 0
- let outstr = ''
- while i < len
- let ch = instr[i]
- if ch =~# '[0-9A-Za-z-._~!''()*]'
- let outstr = outstr . ch
- elseif ch == ' '
- let outstr = outstr . '+'
- else
- let outstr = outstr . '%' . substitute('0' . s:nr2hex(char2nr(ch)), '^.*\(..\)$', '\1', '')
- endif
- let i = i + 1
- endwhile
- return outstr
-endfunction
-
-" Note: A colon in the file name has side effects on Windows due to NTFS Alternate Data Streams; avoid it.
-let s:bufprefix = 'gist' . (has('unix') ? ':' : '_')
-function! s:GistList(user, token, gistls, page)
- if a:gistls == '-all'
- let url = 'https://gist.github.com/gists'
- elseif g:gist_show_privates && a:gistls == a:user
- let url = 'https://gist.github.com/mine'
- else
- let url = 'https://gist.github.com/'.a:gistls
- endif
- let winnum = bufwinnr(bufnr(s:bufprefix.a:gistls))
- if winnum != -1
- if winnum != bufwinnr('%')
- exe winnum 'wincmd w'
- endif
- setlocal modifiable
- else
- exec 'silent split' s:bufprefix.a:gistls
- endif
- if a:page > 1
- let oldlines = getline(0, line('$'))
- let url = url . '?page=' . a:page
- endif
-
- setlocal foldmethod=manual
- let oldlines = []
- if g:gist_show_privates
- echon 'Login to gist... '
- silent %d _
- let res = s:GistGetPage(url, a:user, '', '-L')
- silent put =res.content
- else
- silent %d _
- exec 'silent r! curl -s' g:gist_curl_options url
- endif
-
- 1delete _
- silent! %s/>/>\r/g
- silent! %s/</\r</g
- silent! %g/<pre/,/<\/pre/join!
- silent! %g/<span class="date"/,/<\/span/join
- silent! %g/^<span class="date"/s/> */>/g
- silent! %v/^\(gist:\|<pre>\|<span class="date">\)/d _
- silent! %s/<div[^>]*>/\r /g
- silent! %s/<\/pre>/\r/g
- silent! %g/^gist:/,/<span class="date"/join
- silent! %s/<[^>]\+>//g
- silent! %s/\r//g
- silent! %s/&nbsp;/ /g
- silent! %s/&quot;/"/g
- silent! %s/&amp;/\&/g
- silent! %s/&gt;/>/g
- silent! %s/&lt;/</g
- silent! %s/&#\(\d\d\);/\=nr2char(submatch(1))/g
- silent! %g/^gist: /s/ //g
-
- call append(0, oldlines)
- $put='more...'
-
- let b:user = a:user
- let b:token = a:token
- let b:gistls = a:gistls
- let b:page = a:page
- setlocal buftype=nofile bufhidden=hide noswapfile
- setlocal nomodified
- syntax match SpecialKey /^gist:/he=e-1
- nnoremap <silent> <buffer> <cr> :call <SID>GistListAction()<cr>
-
- cal cursor(1+len(oldlines),1)
- setlocal foldmethod=expr
- setlocal foldexpr=getline(v:lnum)=~'^\\(gist:\\\|more\\)'?'>1':'='
- setlocal foldtext=getline(v:foldstart)
-endfunction
-
-function! s:GistGetFileName(gistid)
- let url = 'https://gist.github.com/'.a:gistid
- let res = system('curl -s '.g:gist_curl_options.' '.url)
- let res = substitute(res, '^.*<a href="/raw/[^"]\+/\([^"]\+\)".*$', '\1', '')
- if res =~ '/'
- return ''
- else
- return res
- endif
-endfunction
-
-function! s:GistDetectFiletype(gistid)
- let url = 'https://gist.github.com/'.a:gistid
- let mx = '^.*<div class=".\{-}type-\([^"]\+\)">.*$'
- let res = system('curl -s '.g:gist_curl_options.' '.url)
- let res = substitute(matchstr(res, mx), mx, '\1', '')
- let res = substitute(res, '.*\(\.[^\.]\+\)$', '\1', '')
- let res = substitute(res, '-', '', 'g')
- " TODO: more filetype detection that is specified in html.
- if res == 'bat' | let res = 'dosbatch' | endif
- if res == 'as' | let res = 'actionscript' | endif
- if res == 'bash' | let res = 'sh' | endif
- if res == 'cl' | let res = 'lisp' | endif
- if res == 'rb' | let res = 'ruby' | endif
- if res == 'viml' | let res = 'vim' | endif
- if res == 'plain' || res == 'text' | let res = '' | endif
-
- if res =~ '^\.'
- silent! exec "doau BufRead *".res
- else
- silent! exec "setlocal ft=".tolower(res)
- endif
-endfunction
-
-function! s:GistWrite(fname)
- if substitute(a:fname, '\\', '/', 'g') == expand("%:p:gs@\\@/@")
- Gist -e
- else
- exe "w".(v:cmdbang ? "!" : "") fnameescape(v:cmdarg) fnameescape(a:fname)
- silent! exe "file" fnameescape(a:fname)
- silent! au! BufWriteCmd <buffer>
- endif
-endfunction
-
-function! s:GistGet(user, token, gistid, clipboard)
- let url = 'https://raw.github.com/gist/'.a:gistid
- let winnum = bufwinnr(bufnr(s:bufprefix.a:gistid))
- if winnum != -1
- if winnum != bufwinnr('%')
- exe winnum 'wincmd w'
- endif
- setlocal modifiable
- else
- exec 'silent split' s:bufprefix.a:gistid
- endif
- filetype detect
- silent %d _
- exec 'silent 0r! curl -s' g:gist_curl_options url
- $delete _
- setlocal buftype=acwrite bufhidden=delete noswapfile
- setlocal nomodified
- doau StdinReadPost <buffer>
- if (&ft == '' && g:gist_detect_filetype == 1) || g:gist_detect_filetype == 2
- call s:GistDetectFiletype(a:gistid)
- endif
- if a:clipboard
- if exists('g:gist_clip_command')
- exec 'silent w !'.g:gist_clip_command
- else
- %yank +
- endif
- endif
- 1
- au! BufWriteCmd <buffer> call s:GistWrite(expand("<amatch>"))
-endfunction
-
-function! s:GistListAction()
- let line = getline('.')
- let mx = '^gist:\(\w\+\).*'
- if line =~# mx
- let gistid = substitute(line, mx, '\1', '')
- call s:GistGet(g:github_user, g:github_token, gistid, 0)
- return
- endif
- if line =~# '^more\.\.\.$'
- delete
- call s:GistList(b:user, b:token, b:gistls, b:page+1)
- return
- endif
-endfunction
-
-function! s:GistUpdate(user, token, content, gistid, gistnm)
- if len(a:gistnm) == 0
- let name = s:GistGetFileName(a:gistid)
- else
- let name = a:gistnm
- endif
- let namemx = '^[^.]\+\(.\+\)$'
- let ext = ''
- if name =~ namemx
- let ext = substitute(name, namemx, '\1', '')
- endif
- let query = [
- \ '_method=put',
- \ 'file_ext[gistfile1%s]=%s',
- \ 'file_name[gistfile1%s]=%s',
- \ 'file_contents[gistfile1%s]=%s',
- \ 'login=%s',
- \ 'token=%s',
- \ ]
- let squery = printf(join(query, '&'),
- \ s:encodeURIComponent(ext), s:encodeURIComponent(ext),
- \ s:encodeURIComponent(ext), s:encodeURIComponent(name),
- \ s:encodeURIComponent(ext), s:encodeURIComponent(a:content),
- \ s:encodeURIComponent(a:user),
- \ s:encodeURIComponent(a:token))
- unlet query
-
- let file = tempname()
- call writefile([squery], file)
- echon 'Updating it to gist... '
- let quote = &shellxquote == '"' ? "'" : '"'
- let url = 'https://gist.github.com/gists/'.a:gistid
- let res = system('curl -i '.g:gist_curl_options.' -d @'.quote.file.quote.' '.url)
- call delete(file)
- let headers = split(res, '\(\r\?\n\|\r\n\?\)')
- let location = matchstr(headers, '^Location: ')
- let location = substitute(location, '^[^:]\+: ', '', '')
- if len(location) > 0 && location =~ '^\(http\|https\):\/\/gist\.github\.com\/'
- setlocal nomodified
- redraw
- echo 'Done: '.location
- else
- let message = matchstr(headers, '^Status: ')
- let message = substitute(message, '^[^:]\+: [0-9]\+ ', '', '')
- echohl ErrorMsg | echomsg 'Edit failed: '.message | echohl None
- endif
- return location
-endfunction
-
-function! s:GistGetPage(url, user, param, opt)
- if !isdirectory(g:gist_cookie_dir)
- call mkdir(g:gist_cookie_dir, 'p')
- endif
- let cookie_file = g:gist_cookie_dir.'/github'
-
- if len(a:url) == 0
- call delete(cookie_file)
- return
- endif
-
- let quote = &shellxquote == '"' ? "'" : '"'
- if !filereadable(cookie_file)
- let password = inputsecret('Password:')
- if len(password) == 0
- echo 'Canceled'
- return
- endif
- let url = 'https://gist.github.com/login?return_to=gist'
- let res = system('curl -L -s '.g:gist_curl_options.' -c '.quote.cookie_file.quote.' '.quote.url.quote)
- let token = substitute(res, '^.* name="authenticity_token" type="hidden" value="\([^"]\+\)".*$', '\1', '')
-
- let query = [
- \ 'authenticity_token=%s',
- \ 'login=%s',
- \ 'password=%s',
- \ 'return_to=gist',
- \ 'commit=Log+in',
- \ ]
- let squery = printf(join(query, '&'),
- \ s:encodeURIComponent(token),
- \ s:encodeURIComponent(a:user),
- \ s:encodeURIComponent(password))
- unlet query
-
- let file = tempname()
- let command = 'curl -s '.g:gist_curl_options.' -i'
- let command .= ' -b '.quote.cookie_file.quote
- let command .= ' -c '.quote.cookie_file.quote
- let command .= ' '.quote.'https://gist.github.com/session'.quote
- let command .= ' -d @' . quote.file.quote
- call writefile([squery], file)
- let res = system(command)
- call delete(file)
- let res = matchstr(split(res, '\(\r\?\n\|\r\n\?\)'), '^Location: ')
- let res = substitute(res, '^[^:]\+: ', '', '')
- if len(res) == 0
- call delete(cookie_file)
- return ''
- endif
- endif
- let command = 'curl -s '.g:gist_curl_options.' -i '.a:opt
- if len(a:param)
- let command .= ' -d '.quote.a:param.quote
- endif
- let command .= ' -b '.quote.cookie_file.quote
- let command .= ' '.quote.a:url.quote
- let res = iconv(system(command), "utf-8", &encoding)
- let pos = stridx(res, "\r\n\r\n")
- if pos != -1
- let content = res[pos+4:]
- else
- let pos = stridx(res, "\n\n")
- let content = res[pos+2:]
- endif
- return {
- \ "header" : split(res[0:pos], '\r\?\n'),
- \ "content" : content
- \}
-endfunction
-
-function! s:GistDelete(user, token, gistid)
- echon 'Deleting gist... '
- let res = s:GistGetPage('https://gist.github.com/'.a:gistid, a:user, '', '')
- if (!len(res))
- echohl ErrorMsg | echomsg 'Wrong password? no response received from github trying to delete ' . a:gistid | echohl None
- return
- endif
- let mx = '^.* name="authenticity_token" type="hidden" value="\([^"]\+\)".*$'
- let token = substitute(matchstr(res.content, mx), mx, '\1', '')
- if len(token) > 0
- let res = s:GistGetPage('https://gist.github.com/delete/'.a:gistid, a:user, '_method=delete&authenticity_token='.token, '')
- if len(res.content) > 0
- redraw
- echo 'Done: '
- else
- let message = matchstr(res.header, '^Status: ')
- let message = substitute(message, '^[^:]\+: [0-9]\+ ', '', '')
- echohl ErrorMsg | echomsg 'Delete failed: '.message | echohl None
- endif
- else
- echohl ErrorMsg | echomsg 'Delete failed' | echohl None
- endif
-endfunction
-
-
-" GistPost function:
-" Post new gist to github
-"
-" if there is an embedded gist url or gist id in your file,
-" it will just update it.
-" -- by c9s
-"
-" embedded gist url format:
-"
-" Gist: https://gist.github.com/123123
-"
-" embedded gist id format:
-"
-" GistID: 123123
-"
-function! s:GistPost(user, token, content, private)
-
- " find GistID: in content, then we should just update
- for l in split(a:content, "\n")
- if l =~ '\<GistID:'
- let gistid = matchstr(l, 'GistID:\s*[0-9a-z]\+')
-
- if strlen(gistid) == 0
- echohl WarningMsg | echo "GistID error" | echohl None
- return
- endif
- echo "Found GistID: " . gistid
-
- cal s:GistUpdate(a:user, a:token, a:content, gistid, '')
- return
- elseif l =~ '\<Gist:'
- let gistid = matchstr(l, 'Gist:\s*https://gist.github.com/[0-9a-z]\+')
-
- if strlen(gistid) == 0
- echohl WarningMsg | echo "GistID error" | echohl None
- return
- endif
- echo "Found GistID: " . gistid
-
- cal s:GistUpdate(a:user, a:token, a:content, gistid, '')
- return
- endif
- endfor
-
- let ext = expand('%:e')
- let ext = len(ext) ? '.'.ext : ''
- let name = expand('%:t')
-
- let query = [
- \ 'file_ext[gistfile1]=%s',
- \ 'file_name[gistfile1]=%s',
- \ 'file_contents[gistfile1]=%s',
- \ ]
-
- if len(a:user) > 0 && len(a:token) > 0
- call add(query, 'login=%s')
- call add(query, 'token=%s')
- else
- call add(query, '%.0s%.0s')
- endif
-
- if a:private
- call add(query, 'action_button=private')
- endif
- let squery = printf(join(query, '&'),
- \ s:encodeURIComponent(ext),
- \ s:encodeURIComponent(name),
- \ s:encodeURIComponent(a:content),
- \ s:encodeURIComponent(a:user),
- \ s:encodeURIComponent(a:token))
- unlet query
-
- let file = tempname()
- call writefile([squery], file)
- echon 'Posting it to gist... '
- let quote = &shellxquote == '"' ? "'" : '"'
- let url = 'https://gist.github.com/gists'
- let res = system('curl -i '.g:gist_curl_options.' -d @'.quote.file.quote.' '.url)
- call delete(file)
- let headers = split(res, '\(\r\?\n\|\r\n\?\)')
- let location = matchstr(headers, '^Location: ')
- let location = substitute(location, '^[^:]\+: ', '', '')
- if len(location) > 0 && location =~ '^\(http\|https\):\/\/gist\.github\.com\/'
- redraw
- echo 'Done: '.location
- else
- let message = matchstr(headers, '^Status: ')
- let message = substitute(message, '^[^:]\+: [0-9]\+ ', '', '')
- echohl ErrorMsg | echomsg 'Post failed: '.message | echohl None
- endif
- return location
-endfunction
-
-function! s:GistPostBuffers(user, token, private)
- let bufnrs = range(1, bufnr("$"))
- let bn = bufnr('%')
- let query = []
- if len(a:user) > 0 && len(a:token) > 0
- call add(query, 'login=%s')
- call add(query, 'token=%s')
- else
- call add(query, '%.0s%.0s')
- endif
- if a:private
- call add(query, 'action_button=private')
- endif
- let squery = printf(join(query, "&"),
- \ s:encodeURIComponent(a:user),
- \ s:encodeURIComponent(a:token)) . '&'
-
- let query = [
- \ 'file_ext[gistfile]=%s',
- \ 'file_name[gistfile]=%s',
- \ 'file_contents[gistfile]=%s',
- \ ]
- let format = join(query, "&") . '&'
-
- let index = 1
- for bufnr in bufnrs
- if !bufexists(bufnr) || buflisted(bufnr) == 0
- continue
- endif
- echo "Creating gist content".index."... "
- silent! exec "buffer!" bufnr
- let content = join(getline(1, line('$')), "\n")
- let ext = expand('%:e')
- let ext = len(ext) ? '.'.ext : ''
- let name = expand('%:t')
- let squery .= printf(substitute(format, 'gistfile', 'gistfile'.index, 'g'),
- \ s:encodeURIComponent(ext),
- \ s:encodeURIComponent(name),
- \ s:encodeURIComponent(content))
- let index = index + 1
- endfor
- silent! exec "buffer!" bn
-
- let file = tempname()
- call writefile([squery], file)
- echo "Posting it to gist... "
- let quote = &shellxquote == '"' ? "'" : '"'
- let url = 'https://gist.github.com/gists'
- let res = system('curl -i '.g:gist_curl_options.' -d @'.quote.file.quote.' '.url)
- call delete(file)
- let res = matchstr(split(res, '\(\r\?\n\|\r\n\?\)'), '^Location: ')
- let res = substitute(res, '^.*: ', '', '')
- if len(res) > 0 && res =~ '^\(http\|https\):\/\/gist\.github\.com\/'
- redraw
- echo 'Done: '.res
- else
- echohl ErrorMsg | echomsg 'Post failed' | echohl None
- endif
- return res
-endfunction
-
-function! Gist(line1, line2, ...)
- if !exists('g:github_user')
- let g:github_user = substitute(system('git config --global github.user'), "\n", '', '')
- if strlen(g:github_user) == 0
- let g:github_user = $GITHUB_USER
- end
- endif
- if !exists('g:github_token')
- let g:github_token = substitute(system('git config --global github.token'), "\n", '', '')
- if strlen(g:github_token) == 0
- let g:github_token = $GITHUB_TOKEN
- end
- endif
- if strlen(g:github_user) == 0 || strlen(g:github_token) == 0
- echohl ErrorMsg
- echomsg "You have no setting for github."
- echohl WarningMsg
- echo "git config --global github.user your-name"
- echo "git config --global github.token your-token"
- echo "or set g:github_user and g:github_token in your vimrc"
- echo "or set shell env vars GITHUB_USER and GITHUB_TOKEN"
- echohl None
- return 0
- end
-
- let bufname = bufname("%")
- let user = g:github_user
- let token = g:github_token
- let gistid = ''
- let gistls = ''
- let gistnm = ''
- let private = g:gist_private
- let multibuffer = 0
- let clipboard = 0
- let deletepost = 0
- let editpost = 0
- let listmx = '^\(-l\|--list\)\s*\([^\s]\+\)\?$'
- let bufnamemx = '^' . s:bufprefix .'\([0-9a-f]\+\)$'
-
- let args = (a:0 > 0) ? split(a:1, ' ') : []
- for arg in args
- if arg =~ '^\(-la\|--listall\)$\C'
- let gistls = '-all'
- elseif arg =~ '^\(-l\|--list\)$\C'
- if g:gist_show_privates
- let gistls = 'mine'
- else
- let gistls = g:github_user
- endif
- elseif arg == '--abandon\C'
- call s:GistGetPage('', '', '', '')
- return
- elseif arg =~ '^\(-m\|--multibuffer\)$\C'
- let multibuffer = 1
- elseif arg =~ '^\(-p\|--private\)$\C'
- let private = 1
- elseif arg =~ '^\(-P\|--public\)$\C'
- let private = 0
- elseif arg =~ '^\(-a\|--anonymous\)$\C'
- let user = ''
- let token = ''
- elseif arg =~ '^\(-c\|--clipboard\)$\C'
- let clipboard = 1
- elseif arg =~ '^\(-d\|--delete\)$\C' && bufname =~ bufnamemx
- let deletepost = 1
- let gistid = substitute(bufname, bufnamemx, '\1', '')
- elseif arg =~ '^\(-e\|--edit\)$\C' && bufname =~ bufnamemx
- let editpost = 1
- let gistid = substitute(bufname, bufnamemx, '\1', '')
- elseif arg =~ '^\(-f\|--fork\)$\C' && bufname =~ bufnamemx
- let gistid = substitute(bufname, bufnamemx, '\1', '')
- let res = s:GistGetPage("https://gist.github.com/fork/".gistid, g:github_user, '', '')
- let loc = filter(res.header, 'v:val =~ "^Location:"')[0]
- let loc = substitute(loc, '^[^:]\+: ', '', '')
- let mx = '^https://gist.github.com/\([0-9a-z]\+\)$'
- if loc =~ mx
- let gistid = substitute(loc, mx, '\1', '')
- else
- echohl ErrorMsg | echomsg 'Fork failed' | echohl None
- return
- endif
- elseif arg !~ '^-' && len(gistnm) == 0
- if editpost == 1 || deletepost == 1
- let gistnm = arg
- elseif len(gistls) > 0 && arg != '^\w\+$\C'
- let gistls = arg
- elseif arg =~ '^[0-9a-z]\+$\C'
- let gistid = arg
- else
- echohl ErrorMsg | echomsg 'Invalid arguments' | echohl None
- unlet args
- return 0
- endif
- elseif len(arg) > 0
- echohl ErrorMsg | echomsg 'Invalid arguments' | echohl None
- unlet args
- return 0
- endif
- endfor
- unlet args
- "echo "gistid=".gistid
- "echo "gistls=".gistls
- "echo "gistnm=".gistnm
- "echo "private=".private
- "echo "clipboard=".clipboard
- "echo "editpost=".editpost
- "echo "deletepost=".deletepost
-
- if len(gistls) > 0
- call s:GistList(user, token, gistls, 1)
- elseif len(gistid) > 0 && editpost == 0 && deletepost == 0
- call s:GistGet(user, token, gistid, clipboard)
- else
- let url = ''
- if multibuffer == 1
- let url = s:GistPostBuffers(user, token, private)
- else
- let content = join(getline(a:line1, a:line2), "\n")
- if editpost == 1
- let url = s:GistUpdate(user, token, content, gistid, gistnm)
- elseif deletepost == 1
- call s:GistDelete(user, token, gistid)
- else
- let url = s:GistPost(user, token, content, private)
- endif
- endif
- if len(url) > 0
- if g:gist_open_browser_after_post
- let cmd = substitute(g:gist_browser_command, '%URL%', url, 'g')
- if cmd =~ '^!'
- silent! exec cmd
- elseif cmd =~ '^:[A-Z]'
- exec cmd
- else
- call system(cmd)
- endif
- endif
- if g:gist_put_url_to_clipboard_after_post > 0
- if g:gist_put_url_to_clipboard_after_post == 2
- let url = url . "\n"
- endif
- if exists('g:gist_clip_command')
- call system(g:gist_clip_command, url)
- elseif has('unix') && !has('xterm_clipboard')
- let @" = url
- else
- let @+ = url
- endif
- endif
- endif
- endif
- return 1
-endfunction
-
-command! -nargs=? -range=% Gist :call Gist(<line1>, <line2>, <f-args>)
-" vim:set et: