Created
December 28, 2010 19:58
-
-
Save cristibalan/757625 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" 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', "ipicjkbkles | |
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