Skip to content

Commit

Permalink
Changed to use a dedicated register for playing macros directly by na…
Browse files Browse the repository at this point in the history
…me so that the default macro register doesnt get clobbered (issue #8)
  • Loading branch information
svermeulen committed May 23, 2020
1 parent c8e7a0c commit 2ba4334
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions autoload/macrobatics.vim
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

let s:defaultMacroReg = get(g:, 'Mac_DefaultRegister', 'm')
let s:playByNameMacroReg = get(g:, 'Mac_PlayByNameRegister', 'n')
let s:maxItems = get(g:, 'Mac_MaxItems', 10)
let s:saveHistoryToShada = get(g:, 'Mac_SavePersistently', 0)
let s:displayMacroMaxWidth = get(g:, 'Mac_DisplayMacroMaxWidth', 80)
Expand Down Expand Up @@ -129,7 +130,6 @@ endfunction

function s:paramValueSink(reg, value)
call s:assert(len(a:reg) == 1, "Expected register value for macro parameter")
call s:assert(a:reg != s:defaultMacroReg, "Macro parameter register cannot be the same as the macro register")
call setreg(a:reg, a:value)
call s:queuedMacroNext()
endfunction
Expand All @@ -139,9 +139,9 @@ function s:queuedMacroNext()
call s:assert(!(info is v:null))

if len(info.paramInputQueue) == 0
call s:updateMacroRegisterForNamedMacro(info.macroName)
call s:updateMacroRegisterForNamedMacro(info.macroName, info.destinationRegister)
if (info.autoplay)
call macrobatics#play(s:defaultMacroReg, info.playCount)
call macrobatics#play(info.destinationRegister, info.playCount)
endif
return
endif
Expand All @@ -157,6 +157,7 @@ function s:queuedMacroNext()
call s:echo("Cancelled macro '%s'", info.macroName)
return
endif
call s:assert(paramReg != info.destinationRegister, "Macro parameter register cannot be the same as the macro register")
call s:paramValueSink(paramReg, paramValue)
else
call s:assert(type(paramInfo) == v:t_dict,
Expand Down Expand Up @@ -192,10 +193,10 @@ endfunction

function! macrobatics#playNamedMacro(name, ...)
let playCount = a:0 ? a:1 : 1
call s:processNamedMacro(a:name, 1, playCount)
call s:processNamedMacro(a:name, 1, s:playByNameMacroReg, playCount)
endfunction

function! s:updateMacroRegisterForNamedMacro(name)
function! s:updateMacroRegisterForNamedMacro(name, destinationRegister)
let macroDir = s:findNamedMacroDir(a:name)
let filePath = s:constructMacroPath(macroDir, a:name)
let cache = s:getMacroCacheForDir(macroDir)
Expand All @@ -212,22 +213,26 @@ function! s:updateMacroRegisterForNamedMacro(name)
let macInfo.data = s:loadNamedMacroData(filePath)
endif
endif
call macrobatics#setCurrent(macInfo.data)
call setreg(a:destinationRegister, macInfo.data)
if a:destinationRegister == s:defaultMacroReg
call s:addToHistory(macInfo.data)
endif
endfunction

function! s:processNamedMacro(macroName, autoplay, cnt)
function! s:processNamedMacro(macroName, autoplay, destinationRegister, cnt)
let s:queuedMacroInfo = {
\ 'macroName': a:macroName,
\ 'autoplay': a:autoplay,
\ 'playCount': a:cnt,
\ 'destinationRegister': a:destinationRegister,
\ 'paramInputQueue': items(s:getMacroParametersInfo(a:macroName)),
\ }

call s:queuedMacroNext()
endfunction

function! macrobatics#selectNamedMacro(name)
call s:processNamedMacro(a:name, 0, 0)
call s:processNamedMacro(a:name, 0, s:defaultMacroReg, 0)
endfunction

function! macrobatics#onVimEnter()
Expand Down

0 comments on commit 2ba4334

Please sign in to comment.