Skip to content

Commit

Permalink
Version 2.3.1
Browse files Browse the repository at this point in the history
Bugfix release with various fixes.

* Fixed regression in highlighting of numeric functions. (Reported by Ogino-san.)
* Restore various registers correctly after yanking. (Reported by Dave Ray.)
* Improved fuzzy indent heuristic and fixed special case for with-meta.
* Removed highlighting of the comment form. It's broken and unlikely to be ever fixed. (Reported by Dave Ray.)
* Fixed version range for the clojure dependency. [1.2,1.5)
* Removed usages of anonymous functions. This caused a small delay when using 'o' or 'O' commands. (Interestingly only then but with a normal carriage return�) This problem was a long lasting issue for several years. A big big thank you to Dave Ray for tracking this down!
* Loads the user.clj if found on the classpath of the server.
* Fixed problems with result buffers when issuing certain sequences of commands. (Reported by Dave Ray.)
* Made gradle plugin milestone 6 compatible.
  • Loading branch information
Meikel Brandmeyer authored and vim-scripts committed Jan 5, 2012
1 parent 35e21e4 commit d449753
Show file tree
Hide file tree
Showing 5 changed files with 208 additions and 157 deletions.
107 changes: 60 additions & 47 deletions autoload/vimclojure.vim
Original file line number Diff line number Diff line change
Expand Up @@ -107,33 +107,34 @@ function! vimclojure#AddCompletions(ns)
endif
endfunction

" Nailgun part:
function! vimclojure#ExtractSexpr(toplevel)
let closure = {
\ "flag" : (a:toplevel ? "r" : ""),
\ "level" : (a:toplevel ? "0" : '\d')
\ }
function! ClojureExtractSexprWorker() dict
let pos = [0, 0]
let start = getpos(".")

function closure.f() dict
let pos = [0, 0]
let start = getpos(".")
if getline(start[1])[start[2] - 1] == "("
\ && vimclojure#util#SynIdName() =~ 'clojureParen' . self.level
let pos = [start[1], start[2]]
endif

if getline(start[1])[start[2] - 1] == "("
\ && vimclojure#util#SynIdName() =~ 'clojureParen' . self.level
let pos = [start[1], start[2]]
endif
if pos == [0, 0]
let pos = searchpairpos('(', '', ')', 'bW' . self.flag,
\ 'vimclojure#util#SynIdName() !~ "clojureParen\\d"')
endif

if pos == [0, 0]
let pos = searchpairpos('(', '', ')', 'bW' . self.flag,
\ 'vimclojure#util#SynIdName() !~ "clojureParen\\d"')
endif
if pos == [0, 0]
throw "Error: Not in a s-expression!"
endif

if pos == [0, 0]
throw "Error: Not in a s-expression!"
endif
return [pos, vimclojure#util#Yank('l', 'normal! "ly%')]
endfunction

return [pos, vimclojure#util#Yank('l', 'normal! "ly%')]
endfunction
" Nailgun part:
function! vimclojure#ExtractSexpr(toplevel)
let closure = {
\ "flag" : (a:toplevel ? "r" : ""),
\ "level" : (a:toplevel ? "0" : '\d'),
\ "f" : function("ClojureExtractSexprWorker")
\ }

return vimclojure#util#WithSavedPosition(closure)
endfunction
Expand Down Expand Up @@ -225,6 +226,7 @@ let vimclojure#Object = {}

function! vimclojure#Object.New(...) dict
let instance = copy(self)
let instance.prototype = self

call call(instance.Init, a:000, instance)

Expand Down Expand Up @@ -321,21 +323,29 @@ let vimclojure#ResultBuffer["__superBufferNew"] = vimclojure#ResultBuffer["New"]
let vimclojure#ResultBuffer["__superBufferInit"] = vimclojure#ResultBuffer["Init"]
let vimclojure#ResultBuffer.__instance = []

function! ClojureResultBufferNewWorker() dict
set switchbuf=useopen
call self.instance.goHereWindow()
call call(self.instance.Init, self.args, self.instance)

return self.instance
endfunction

function! vimclojure#ResultBuffer.New(...) dict
if g:vimclojure#ResultBuffer.__instance != []
let closure = {
\ 'instance' : g:vimclojure#ResultBuffer.__instance[0],
\ 'args' : a:000
\ }
function closure.f() dict
set switchbuf=useopen
call self.instance.goHereWindow()
call call(self.instance.Init, self.args, self.instance)

return self.instance
endfunction

return vimclojure#util#WithSavedOption('switchbuf', closure)
let oldInstance = g:vimclojure#ResultBuffer.__instance[0]

if oldInstance.prototype is self
let closure = {
\ 'instance' : oldInstance,
\ 'args' : a:000,
\ 'f' : function("ClojureResultBufferNewWorker")
\ }

return vimclojure#util#WithSavedOption('switchbuf', closure)
else
call oldInstance.close()
endif
endif

let b:vimclojure_result_buffer = 1
Expand Down Expand Up @@ -401,13 +411,16 @@ if !exists("vimclojure#NailgunClient")
let vimclojure#NailgunClient = "ng"
endif

function! vimclojure#ShellEscapeArguments(vals)
let closure = { 'vals': a:vals }
function! ClojureShellEscapeArgumentsWorker() dict
set noshellslash
return map(copy(self.vals), 'shellescape(v:val)')
endfunction

function closure.f() dict
set noshellslash
return map(copy(self.vals), 'shellescape(v:val)')
endfunction
function! vimclojure#ShellEscapeArguments(vals)
let closure = {
\ 'vals': a:vals,
\ 'f' : function("ClojureShellEscapeArgumentsWorker")
\ }

return vimclojure#util#WithSavedOption('shellslash', closure)
endfunction
Expand Down Expand Up @@ -664,17 +677,17 @@ function! vimclojure#EvalToplevel()
wincmd p
endfunction

function! ClojureEvalParagraphWorker() dict
normal! }
return line(".")
endfunction

function! vimclojure#EvalParagraph()
let file = vimclojure#BufferName()
let ns = b:vimclojure_namespace
let startPosition = line(".")

let closure = {}

function! closure.f() dict
normal! }
return line(".")
endfunction
let closure = { 'f' : function("ClojureEvalParagraphWorker") }

let endPosition = vimclojure#util#WithSavedPosition(closure)

Expand Down
87 changes: 53 additions & 34 deletions autoload/vimclojure/util.vim
Original file line number Diff line number Diff line change
Expand Up @@ -19,60 +19,79 @@ function! vimclojure#util#WithSaved(closure)
return r
endfunction

function! vimclojure#util#WithSavedPosition(closure)
function a:closure.save() dict
let [ _b, l, c, _o ] = getpos(".")
let b = bufnr("%")
return [b, l, c]
endfunction
function! s:SavePosition() dict
let [ _b, l, c, _o ] = getpos(".")
let b = bufnr("%")
return [b, l, c]
endfunction

function a:closure.restore(value) dict
let [b, l, c] = a:value
function! s:RestorePosition(value) dict
let [b, l, c] = a:value

if bufnr("%") != b
execute b "buffer!"
endif
call setpos(".", [0, l, c, 0])
endfunction
if bufnr("%") != b
execute b "buffer!"
endif
call setpos(".", [0, l, c, 0])
endfunction

function! vimclojure#util#WithSavedPosition(closure)
let a:closure.save = function("s:SavePosition")
let a:closure.restore = function("s:RestorePosition")

return vimclojure#util#WithSaved(a:closure)
endfunction

function! s:SaveRegister(reg)
return [a:reg, getreg(a:reg, 1), getregtype(a:reg)]
endfunction

function! s:SaveRegisters() dict
return map([self._register, "", "/", "-",
\ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
\ "s:SaveRegister(v:val)")
endfunction

function! s:RestoreRegisters(registers) dict
for register in a:registers
call call(function("setreg"), register)
endfor
endfunction

function! vimclojure#util#WithSavedRegister(reg, closure)
let a:closure._register = a:reg
let a:closure.save = function("s:SaveRegisters")
let a:closure.restore = function("s:RestoreRegisters")

function a:closure.save() dict
return [getreg(self._register, 1), getregtype(self._register)]
endfunction
return vimclojure#util#WithSaved(a:closure)
endfunction

function a:closure.restore(value) dict
call call(function("setreg"), [self._register] + a:value)
endfunction
function! s:SaveOption() dict
return eval("&" . self._option)
endfunction

return vimclojure#util#WithSaved(a:closure)
function! s:RestoreOption(value) dict
execute "let &" . self._option . " = a:value"
endfunction

function! vimclojure#util#WithSavedOption(option, closure)
let a:closure._option = a:option

function a:closure.save() dict
return eval("&" . self._option)
endfunction

function a:closure.restore(value) dict
execute "let &" . self._option . " = a:value"
endfunction
let a:closure.save = function("s:SaveOption")
let a:closure.restore = function("s:RestoreOption")

return vimclojure#util#WithSaved(a:closure)
endfunction

function! vimclojure#util#Yank(r, how)
let closure = {'reg': a:r, 'yank': a:how}
function! s:DoYank() dict
silent execute self.yank
return getreg(self.reg)
endfunction

function closure.f() dict
silent execute self.yank
return getreg(self.reg)
endfunction
function! vimclojure#util#Yank(r, how)
let closure = {
\ 'reg': a:r,
\ 'yank': a:how,
\ 'f': function("s:DoYank")
\ }

return vimclojure#util#WithSavedRegister(a:r, closure)
endfunction
Expand Down
27 changes: 15 additions & 12 deletions ftplugin/clojure.vim
Original file line number Diff line number Diff line change
Expand Up @@ -59,22 +59,25 @@ for ns in [ "clojure.core", "clojure.inspector", "clojure.java.browse",
endfor

" Define toplevel folding if desired.
function! ClojureGetFoldingLevel(lineno)
let closure = { 'lineno' : a:lineno }
function! ClojureGetFoldingLevelWorker() dict
execute self.lineno

function closure.f() dict
execute self.lineno
if vimclojure#util#SynIdName() =~ 'clojureParen\d' && vimclojure#util#Yank('l', 'normal! "lyl') == '('
return 1
endif

if vimclojure#util#SynIdName() =~ 'clojureParen\d' && vimclojure#util#Yank('l', 'normal! "lyl') == '('
return 1
endif
if searchpairpos('(', '', ')', 'bWr', 'vimclojure#util#SynIdName() !~ "clojureParen\\d"') != [0, 0]
return 1
endif

if searchpairpos('(', '', ')', 'bWr', 'vimclojure#util#SynIdName() !~ "clojureParen\\d"') != [0, 0]
return 1
endif
return 0
endfunction

return 0
endfunction
function! ClojureGetFoldingLevel(lineno)
let closure = {
\ 'lineno' : a:lineno,
\ 'f' : function("ClojureGetFoldingLevelWorker")
\ }

return vimclojure#WithSavedPosition(closure)
endfunction
Expand Down
Loading

0 comments on commit d449753

Please sign in to comment.