Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- " Version: 1.0
- " Last Change: Sat, 14 May 2011 14:38:50 +0200
- " Maintainer: Michon van Dooren <michon1992+vim+publish gmail com>
- " Description: Vim plugin that allows you to paste/publish pieces of code to various sites.
- " Requires: +python
- " Commands:
- " :Publish <site> <arguments>
- " Site can be any valid publisher.
- " Arguments are site-specific.
- if has('python')
- command! -nargs=* -range=% Publish execute ':<line1>,<line2>python publish(<f-args>)'
- else
- command! -nargs=* -range=% Publish echo 'Only avaliable with +python support.'
- endif
- if has('python')
- python << EOF
- # Functions to get settings.
- def getvar(varname, default):
- if int(vim.eval('exists("' + varname + '")')):
- return vim.eval(varname)
- elif default != None:
- return default
- else:
- raise Exception('The setting ' + varname + ' is required')
- def getglobalsetting(settingname, default = None):
- return getvar('g:Publish_' + settingname, default)
- def getsetting(settingname, default = None):
- return getvar('g:Publish_' + getsetting.sitename + '_' + settingname, default)
- # Call a function, with an optional pre and post hook.
- def call(mod, fnname, data, mid = None, pre = None, post = None):
- pre = getattr(mod, fnname + '_pre', pre)
- mid = getattr(mod, fnname, mid or makefn(getattr(mod, fnname + '_url')))
- post = getattr(mod, fnname + '_post', post)
- if data and pre:
- data = pre(*data)
- elif pre:
- data = pre()
- if not data:
- return
- elif data:
- data = data[0]
- data = mid(data)
- if post:
- return post(data)
- else:
- return data
- # Make a simple callback function for basic publishing/login.
- def makefn(url):
- def _(data):
- import urllib
- return urllib.urlopen(url, urllib.urlencode(data)).read()
- return _
- # The actual publishing part.
- def publish(site=None, *args):
- import imp, vim
- if not site:
- site = getglobalsetting('default_site', 'pastebin')
- getsetting.sitename = site
- fn = vim.eval('findfile("publishers/' + site + '.py", &rtp)')
- if not fn:
- raise Exception('no publisher exists for ' + site)
- with open(fn, 'r') as f:
- mod = imp.load_module('vim_publisher_' + site, f, fn, ('.py', 'U', 1))
- mod.getglobalsetting = getglobalsetting
- mod.getsetting = getsetting
- # Login, if needed/possible
- if not getsetting('logindata', 0) and (hasattr(mod, 'login_url') or hasattr(mod, 'login')):
- data = call(mod, 'login', None)
- if data:
- vim.eval('let g:Publish_' + site + '_logindata = "' + data + '"')
- # Build a default data object.
- data = {
- 'code': '\n'.join(vim.current.range),
- 'lang': vim.eval('&filetype'),
- }
- # Publish.
- args = (data,) + args
- response = call(mod, 'publish', args)
- print('Published to ' + response)
- EOF
- endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement