Skip to content

Instantly share code, notes, and snippets.

@llj098
Created November 22, 2010 08:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save llj098/709676 to your computer and use it in GitHub Desktop.
Save llj098/709676 to your computer and use it in GitHub Desktop.
vimpress multiuser support
" Copyright (C) 2007 Adrien Friggeri.
"
" This program is free software; you can redistribute it and/or modify
" it under the terms of the GNU General Public License as published by
" the Free Software Foundation; either version 2, or (at your option)
" any later version.
"
" This program is distributed in the hope that it will be useful,
" but WITHOUT ANY WARRANTY; without even the implied warranty of
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" GNU General Public License for more details.
"
" You should have received a copy of the GNU General Public License
" along with this program; if not, write to the Free Software Foundation,
" Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
"
" Maintainer: Adrien Friggeri <adrien@friggeri.net>
" Modify: lijin liu <llj098@gmail.com>, http://coding.liulijin.info
" URL: http://www.friggeri.net/projets/vimblog/
" Version: 0.9
" Last Change: 2010 Nov 22
"
" Commands :
" ":BlogList"
" Lists all articles in the blog
" ":BlogNew"
" Opens page to write new article
" ":BlogOpen <id>"
" Opens the article <id> for edition
" ":BlogSend"
" Saves the article to the blog
"
" Configuration :
" Edit the "Settings" section (starts at line 51).
"
" If you wish to use UTW tags, you should install the following plugin :
" http://blog.circlesixdesign.com/download/utw-rpc-autotag/
" and set "enable_tags" to 1 on line 50
"
" Usage :
" Just fill in the blanks, do not modify the highlighted parts and everything
" should be ok.
command! -nargs=0 BlogState exec("py blog_state()")
command! -nargs=0 BlogList exec("py blog_list_posts()")
command! -nargs=0 BlogNew exec("py blog_new_post()")
command! -nargs=0 BlogSend exec("py blog_send_post()")
command! -nargs=1 BlogOpen exec('py blog_open_post(<f-args>)')
command! -nargs=1 BlogInit exec('py blog_init(<f-args>)')
python <<EOF
# -*- coding: utf-8 -*-
import urllib , urllib2 , vim , xml.dom.minidom , xmlrpclib , sys , string , re
#####################
# Settings #
#####################
enable_tags = 1
blog_username = ''
blog_password = ''
blog_url = ''
settings = {
1:["user name..","password","xmlrpc address"],
2:["user name 2","password2","xmlrpc address"]
}
#####################
# Do not edit below #
#####################
handler = xmlrpclib.ServerProxy(settings[1][2]).metaWeblog
edit = 1
def blog_init(id):
s = settings[int(id)]
global blog_username,blog_password,blog_url,handler
blog_username = s[0]
blog_password = s[1]
blog_url = s[2]
handler = xmlrpclib.ServerProxy(blog_url).metaWeblog
vim.command('echo "change to:'+blog_url+'"')
def blog_state():
vim.command('echo "Current Blog Url:' + blog_url +'"')
def blog_edit_off():
global edit
if edit:
edit = 0
for i in ["i","a","s","o","I","A","S","O"]:
vim.command('map '+i+' <nop>')
def blog_edit_on():
global edit
if not edit:
edit = 1
for i in ["i","a","s","o","I","A","S","O"]:
vim.command('unmap '+i)
def blog_send_post():
def get_line(what):
start = 0
while not vim.current.buffer[start].startswith('"'+what):
start +=1
return start
def get_meta(what):
start = get_line(what)
end = start + 1
while not vim.current.buffer[end][0] == '"':
end +=1
return " ".join(vim.current.buffer[start:end]).split(":")[1].strip()
strid = get_meta("StrID")
title = get_meta("Title")
cats = [i.strip() for i in get_meta("Cats").split(",")]
if enable_tags:
tags = get_meta("Tags")
text_start = 0
while not vim.current.buffer[text_start] == "\"========== Content ==========":
text_start +=1
text_start +=1
text = '\n'.join(vim.current.buffer[text_start:])
content = text
if enable_tags:
post = {
'title': title,
'description': content,
'categories': cats,
'mt_keywords': tags
}
else:
post = {
'title': title,
'description': content,
'categories': cats,
}
if strid == '':
strid = handler.newPost('', blog_username,
blog_password, post, 1)
vim.current.buffer[get_line("StrID")] = "\"StrID : "+strid
else:
handler.editPost(strid, blog_username,
blog_password, post, 1)
vim.command('set nomodified')
def blog_new_post():
def blog_get_cats():
l = handler.getCategories('', blog_username, blog_password)
s = ""
for i in l:
s = s + (i["description"].encode("utf-8"))+", "
if s != "":
return s[:-2]
else:
return s
del vim.current.buffer[:]
blog_edit_on()
vim.command("set syntax=blogsyntax")
vim.current.buffer[0] = "\"=========== Meta ============\n"
vim.current.buffer.append("\"StrID : ")
vim.current.buffer.append("\"Title : ")
vim.current.buffer.append("\"Cats : "+blog_get_cats())
if enable_tags:
vim.current.buffer.append("\"Tags : ")
vim.current.buffer.append("\"========== Content ==========\n")
vim.current.buffer.append("\n")
vim.current.window.cursor = (len(vim.current.buffer), 0)
vim.command('set nomodified')
vim.command('set textwidth=0')
def blog_open_post(id):
try:
post = handler.getPost(id, blog_username, blog_password)
blog_edit_on()
vim.command("set syntax=blogsyntax")
del vim.current.buffer[:]
vim.current.buffer[0] = "\"=========== Meta ============\n"
vim.current.buffer.append("\"StrID : "+str(id))
vim.current.buffer.append("\"Title : "+(post["title"]).encode("utf-8"))
vim.current.buffer.append("\"Cats : "+",".join(post["categories"]).encode("utf-8"))
if enable_tags:
vim.current.buffer.append("\"Tags : "+(post["mt_keywords"]).encode("utf-8"))
vim.current.buffer.append("\"========== Content ==========\n")
content = (post["description"]).encode("utf-8")
for line in content.split('\n'):
vim.current.buffer.append(line)
text_start = 0
while not vim.current.buffer[text_start] == "\"========== Content ==========":
text_start +=1
text_start +=1
vim.current.window.cursor = (text_start+1, 0)
vim.command('set nomodified')
vim.command('set textwidth=0')
except:
sys.stderr.write("An error has occured")
def blog_list_edit():
try:
row,col = vim.current.window.cursor
id = vim.current.buffer[row-1].split()[0]
blog_open_post(int(id))
except:
pass
def blog_list_posts():
try:
lessthan = handler.getRecentPosts('',blog_username, blog_password,1)[0]["postid"]
size = len(lessthan)
allposts = handler.getRecentPosts('',blog_username, blog_password,int(lessthan))
del vim.current.buffer[:]
vim.command("set syntax=blogsyntax")
vim.current.buffer[0] = "\"====== List of Posts ========="
for p in allposts:
vim.current.buffer.append(("".zfill(size-len(p["postid"])).replace("0", " ")+p["postid"])+"\t"+(p["title"]).encode("utf-8"))
vim.command('set nomodified')
blog_edit_off()
vim.current.window.cursor = (2, 0)
vim.command('map <enter> :py blog_list_edit()<cr>')
except:
sys.stderr.write("An error has occured")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment