Skip to content

Instantly share code, notes, and snippets.

@cristibalan
Created December 28, 2010 19:58
Show Gist options
  • Save cristibalan/757625 to your computer and use it in GitHub Desktop.
Save cristibalan/757625 to your computer and use it in GitHub Desktop.
" VAMP 0.1
" Script to send answers to vamp questions.
"
" Read more at:
" http://vamp.ducki.es
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CONFIG YOUR VAMP DETAILS BELOW
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:VampLogin = "login"
let g:VampPassword = "password"
let g:VampBaseUrl = "http://vamp.ducki.es"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" DON'T EDIT BELOW THIS LINE
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Dump the contents of a question in a new buffer
" :VampGetQuestion 123
function! VampGetQuestion(id)
let l:question_id = str2nr(a:id)
let l:temp_file = tempname()
call system("curl -H \"Accept: text/plain\" ".g:VampBaseUrl."/questions/".question_id." > ".temp_file)
"tabnew
exe ":e ".temp_file
endfunction
command! -nargs=1 VampGetQuestion :call VampGetQuestion(<args>)
" 2. Fetch an answer into register v, so you can try it out with @v
"
" :VampGetAnswer 123, v
function! VampGetAnswer(id, register)
let l:answer_id = str2nr(a:id)
let l:temp_file = tempname()
let l:commands = system("curl -s -H \"Accept: text/plain\" ".g:VampBaseUrl."/answers/".answer_id)
call setreg(a:register, commands)
endfunction
command! -nargs=* VampGetAnswer :call VampGetAnswer(<f-args>)
" 3. Post the answer contained in register v. It's assumed you have already
" recorded something into this register.
"
" :VampSendAnswer 123, v
function! VampSendAnswer(id, register)
let l:answer_string = VampRegisterToMap_(a:register)
let l:raw_answer = getreg(a:register)
let l:question_id = str2nr(a:id)
let l:commands_temp_filename = tempname()
let l:raw_temp_filename = tempname()
call writefile([answer_string], commands_temp_filename)
call writefile([raw_answer], raw_temp_filename, "b")
call system("curl -H \"Accept: text/javascript\" --basic -u ".g:VampLogin.":".g:VampPassword." ".g:VampBaseUrl."/questions/".question_id."/answers -F \"answer[answer_file]=@".commands_temp_filename."\" -F \"answer[raw_answer_file]=@".raw_temp_filename."\"")
endfunction
command! -nargs=* VampSendAnswer :call VampSendAnswer(<f-args>)
" Basic conversion from vim speak to some more readable form.
" A more advanced form of this is actually done serverside, so this is mainly
" just a quick hack^H^H^H^Hsanity check that might be removed soon.
function! VampRegisterToMap_(register)
let l:keycodes = { 'ku': {'name': 'Up', 'meaning': 'arrow up'}, 'kd': {'name': 'Down', 'meaning': 'arrow down'}, 'kr': {'name': 'Right', 'meaning': 'arrow right'}, 'kl': {'name': 'Left', 'meaning': 'arrow left'}, '%i': {'name': 'S-Right', 'meaning': 'shift arrow right'}, '#4': {'name': 'S-Left', 'meaning': 'shift arrow left'}, 'k1': {'name': 'F1', 'meaning': 'function key 1'}, 'k2': {'name': 'F2', 'meaning': 'function key 2'}, 'k3': {'name': 'F3', 'meaning': 'function key 3'}, 'k4': {'name': 'F4', 'meaning': 'function key 4'}, 'k5': {'name': 'F5', 'meaning': 'function key 5'}, 'k6': {'name': 'F6', 'meaning': 'function key 6'}, 'k7': {'name': 'F7', 'meaning': 'function key 7'}, 'k8': {'name': 'F8', 'meaning': 'function key 8'}, 'k9': {'name': 'F9', 'meaning': 'function key 9'}, 'k;': {'name': 'F10', 'meaning': 'function key 10'}, 'F1': {'name': 'F11', 'meaning': 'function key 11'}, 'F2': {'name': 'F12', 'meaning': 'function key 12'}, 'F3': {'name': 'F13', 'meaning': 'function key 13'}, 'F4': {'name': 'F14', 'meaning': 'function key 14'}, 'F5': {'name': 'F15', 'meaning': 'function key 15'}, 'F6': {'name': 'F16', 'meaning': 'function key 16'}, 'F7': {'name': 'F17', 'meaning': 'function key 17'}, 'F8': {'name': 'F18', 'meaning': 'function key 18'}, 'F9': {'name': 'F19', 'meaning': 'function key 19'}, '%1': {'name': 'Help', 'meaning': 'help key'}, '&8': {'name': 'Undo', 'meaning': 'undo key'}, 'kI': {'name': 'Insert', 'meaning': 'insert key'}, 'kD': {'name': 'Del', 'meaning': 'delete key'}, 'kb': {'name': 'BS', 'meaning': 'backspace key'}, 'kB': {'name': 'S-Tab', 'meaning': 'back-tab (shift-tab)'}, 'kh': {'name': 'Home', 'meaning': 'home key'}, '#2': {'name': 'S-Home', 'meaning': 'shifted home key'}, '@7': {'name': 'End', 'meaning': 'end key'}, '*7': {'name': 'S-End', 'meaning': 'shifted end key'}, 'kP': {'name': 'PageUp', 'meaning': 'page-up key'}, 'kN': {'name': 'PageDown', 'meaning': 'page-down key'}, 'K1': {'name': 'kHome', 'meaning': 'keypad home key'}, 'K4': {'name': 'kEnd', 'meaning': 'keypad end key'}, 'K3': {'name': 'kPageUp', 'meaning': 'keypad page-up key'}, 'K5': {'name': 'kPageDown', 'meaning': 'keypad page-down key'}, 'K6': {'name': 'kPlus', 'meaning': 'keypad plus key'}, 'K7': {'name': 'kMinus', 'meaning': 'keypad minus key'}, 'K8': {'name': 'kDivide', 'meaning': 'keypad divide'}, 'K9': {'name': 'kMultiply', 'meaning': 'keypad multiply'}, 'KA': {'name': 'kEnter', 'meaning': 'keypad enter key'}, 'KB': {'name': 'kPoint', 'meaning': 'keypad decimal point'}, 'KC': {'name': 'k0', 'meaning': 'keypad 0'}, 'KD': {'name': 'k1', 'meaning': 'keypad 1'}, 'KE': {'name': 'k2', 'meaning': 'keypad 2'}, 'KF': {'name': 'k3', 'meaning': 'keypad 3'}, 'KG': {'name': 'k4', 'meaning': 'keypad 4'}, 'KH': {'name': 'k5', 'meaning': 'keypad 5'}, 'KI': {'name': 'k6', 'meaning': 'keypad 6'}, 'KJ': {'name': 'k7', 'meaning': 'keypad 7'}, 'KK': {'name': 'k8', 'meaning': 'keypad 8'}, 'KL': {'name': 'k9', 'meaning': 'keypad 9'} }
let l:case = &ignorecase
set noignorecase
let l:s = strtrans(getreg(a:register))
for [code, details] in items(keycodes)
" fuckin substitute()!
" it eats the next char after the <80>
" so i'm hacking it using strtrans
"let s = substitute(s, "\\%x80" . key, "<" . value . ">", "g")
"let s = substitute(s, "<80>" . code, "(" . details['meaning'] . ") ", "g")
let s = substitute(s, "<80>" . code, "<" . details['name'] . ">", "g")
endfor
if case
set ignorecase
endif
return s
endfunction
function! VampTest()
exe ":tabnew"
call setreg('a', '', '')
call setreg('a', "ipicj€kbkles
are
delicious
in
my
mouth" ,'')
normal @a
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment