From 97758acc1676b5eae73da31a8a2db287d83fb55c Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Tue, 21 Oct 2014 15:16:58 -0400 Subject: [PATCH] Fix sending interrupt commands after SIGINT Via @benmoss. Closes #182. --- autoload/fireplace/nrepl.vim | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/autoload/fireplace/nrepl.vim b/autoload/fireplace/nrepl.vim index 2406dc8..d7b5ee6 100644 --- a/autoload/fireplace/nrepl.vim +++ b/autoload/fireplace/nrepl.vim @@ -147,11 +147,14 @@ function! s:nrepl_eval(expr, ...) dict abort endif try let response = self.process(msg) - catch /^Vim:Interrupt$/ - if has_key(msg, 'session') - call self.message({'op': 'interrupt', 'session': msg.session, 'interrupt-id': msg.id}, 'ignore') + finally + if !exists('response') + let session = get(msg, 'session', self.session) + if !empty(session) + call self.message({'op': 'interrupt', 'session': session, 'interrupt-id': msg.id}, 'ignore') + endif + throw 'Clojure: Interrupt' endif - throw 'Clojure: Interrupt' endtry if has_key(response, 'ns') && !has_key(options, 'ns') let self.ns = response.ns @@ -175,7 +178,12 @@ function! s:extract_last_stacktrace(nrepl, session) abort endif endif let format_st = '(symbol (str "\n\b" (apply str (interleave (repeat "\n") (map str (.getStackTrace *e)))) "\n\b\n"))' - let stacktrace = split(get(split(a:nrepl.process({'op': 'eval', 'code': '['.format_st.' *3 *2 *1]', 'ns': 'user', 'session': a:session}).value[0], "\n\b\n"), 1, ""), "\n") + let response = a:nrepl.process({'op': 'eval', 'code': '['.format_st.' *3 *2 *1]', 'ns': 'user', 'session': a:session}) + try + let stacktrace = split(get(split(response.value[0], "\n\b\n"), 1, ""), "\n") + catch + throw string(response) + endtry call a:nrepl.message({'op': 'eval', 'code': '(*1 1)', 'ns': 'user', 'session': a:session}) call a:nrepl.message({'op': 'eval', 'code': '(*2 2)', 'ns': 'user', 'session': a:session}) call a:nrepl.message({'op': 'eval', 'code': '(*3 3)', 'ns': 'user', 'session': a:session})