Skip to content

Instantly share code, notes, and snippets.

@LemonBoy
Created August 24, 2011 23:29
Show Gist options
  • Save LemonBoy/1169579 to your computer and use it in GitHub Desktop.
Save LemonBoy/1169579 to your computer and use it in GitHub Desktop.
A lightweight gtk-based clipboard uploader
"""
gtkPaste 0.1
The Lemon Man (C) 2011
"""
import gtk
import keybinder
import urllib
class GenericError (Exception):
pass
class Codepad ():
Name = 'Codepad'
Url = 'http://codepad.org/'
Syntax_list = {
'C' : 'C',
'C++' : 'C++',
'D' : 'D',
'Haskell' : 'Haskell',
'Lua' : 'Lua',
'OCaml' : 'OCaml',
'Perl' : 'Perl',
'Plain Text' : 'Plain Text',
'Python' : 'Python',
'Ruby' : 'Ruby',
'Scheme' : 'Scheme',
'TCL' : 'TCL'
}
def PasteRequest (self, text, syntax, private):
if text is '':
raise GenericError
form_fields = {
'code' : text,
'run' : 'True',
'private' : private and 'True' or 'False',
'lang' : self.Syntax_list[syntax],
'submit' : 'Submit'
}
return urllib.urlencode(form_fields)
class Pastie ():
Name = 'Pastie'
Url = 'http://pastie.org/pastes'
Syntax_list = {
'Actionscript' : 'actionscript',
'C/C++' : 'c++',
'Css' : 'css',
'Diff/Patch' : 'diff',
'HTML/Rails' : 'html_rails',
'HTML' : 'html',
'Java' : 'java',
'Javascript' : 'javascript',
'Obj-C' : 'objective-c++',
'Pascal' : 'pascal',
'PHP' : 'php',
'Plain Text' : 'plain_text',
'Python' : 'python',
'Ruby' : 'ruby',
'Bash' : 'bash',
'SQL' : 'sql',
'YAML' : 'yaml'
}
def PasteRequest (self, text, syntax, private):
if text is '':
raise GenericError
form_fields = {
'paste[body]' : text,
'paste[authorization]' : 'burger',
'paste[restricted]' : private and '1' or '0',
'paste[parser_id]' : self.Syntax_list[syntax]
}
return urllib.urlencode(form_fields)
servList = [Pastie(), Codepad()]
wndMain = gtk.Window()
clpBoard = gtk.clipboard_get()
def SiteCbChanged (widget, cboSyntax):
service = servList[widget.get_active()]
cboSyntax.get_model().clear()
for syntax in service.Syntax_list:
cboSyntax.append_text(syntax)
cboSyntax.set_active(0)
def PasteClipboard (widget, chkPrivate, cboSite, cboSyntax):
msgbox = gtk.MessageDialog(flags = gtk.DIALOG_MODAL,
buttons = gtk.BUTTONS_OK)
text = clpBoard.wait_for_text()
service = servList[cboSite.get_active()]
syntax = cboSyntax.get_active_text()
private = chkPrivate.get_active()
request_data = service.PasteRequest(text, syntax, private)
try:
res = urllib.urlopen(service.Url, request_data)
except:
msgbox.set_markup('Failed!')
res.close()
clpBoard.set_text(res.geturl())
msgbox.set_markup('The url is ' + res.geturl() + '.\nIt has been copied in your clipboard')
msgbox.run()
msgbox.destroy()
wndMain.destroy()
def OptionsDialog ():
vBox = gtk.VBox()
cboSite = gtk.combo_box_new_text()
chkPrivate = gtk.CheckButton('Make the pastie private')
cboSyntax = gtk.combo_box_new_text()
btnOk = gtk.Button(stock = gtk.STOCK_PASTE)
cboSite.connect('changed', SiteCbChanged, cboSyntax)
btnOk.connect('clicked', PasteClipboard, chkPrivate, cboSite, cboSyntax)
for site in servList:
cboSite.append_text(site.Name)
cboSite.set_active(0)
vBox.pack_start(cboSite)
vBox.pack_start(cboSyntax)
vBox.pack_start(chkPrivate)
vBox.pack_start(btnOk)
wndMain.add(vBox)
wndMain.show_all()
def KeyboardCb ():
OptionsDialog()
if __name__ == '__main__':
keybinder.bind('<Super>V', KeyboardCb)
gtk.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment