Skip to content

Commit 1337237

Browse files
committed
Merge pull request #75 from Chronial/fix-63
Rewrite keymap restoring to use :mkexrc (fix #63)
2 parents 716d7d9 + b43c614 commit 1337237

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

plugin/python/vdebug/util.py

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import vdebug.log
33
import vim
44
import re
5+
import os
56
import urllib
67

78
class Keymapper:
@@ -25,24 +26,37 @@ def close_key(self):
2526
def map(self):
2627
if self.is_mapped:
2728
return
29+
self._store_old_map()
2830
for func in self.keymaps:
29-
key = self.keymaps[func]
3031
if func not in self.exclude:
31-
vim.command("redir @z | silent noremap %s%s | redir END" %(self.leader,key))
32-
self.__save_map_output( vim.eval("@z").strip() )
32+
key = self.keymaps[func]
3333
map_cmd = "noremap %s%s :python debugger.%s()<cr>" %\
3434
(self.leader,key,func)
3535
vim.command(map_cmd)
3636
self.is_mapped = True
3737

38-
def __save_map_output(self,output):
39-
if output.startswith('No mapping'):
40-
return False
41-
else:
42-
vdebug.log.Log("Storing existing key mapping, '%s' " % output,\
43-
vdebug.log.Logger.DEBUG)
44-
self.existing.append(output)
45-
return True
38+
def _store_old_map(self):
39+
vim.command('let tempfile=tempname()')
40+
tempfile = vim.eval("tempfile")
41+
vim.command('mkexrc! %s' % (tempfile))
42+
regex = re.compile(r'^([nvxsoilc]|)(nore)?map!?')
43+
split_regex = re.compile(r'\s+')
44+
keys = set(v for (k,v) in self.keymaps.items() if k not in self.exclude)
45+
special = set(["<buffer>", "<silent>", "<special>", "<script>", "<expr>", "<unique>"])
46+
for line in open(tempfile, 'r'):
47+
if not regex.match(line):
48+
continue
49+
parts = split_regex.split(line)[1:]
50+
for p in parts:
51+
if p in special:
52+
continue
53+
elif p in keys:
54+
vdebug.log.Log("Storing existing key mapping, '%s' " % line,
55+
vdebug.log.Logger.DEBUG)
56+
self.existing.append(line)
57+
else:
58+
break
59+
os.remove(tempfile)
4660

4761
def unmap(self):
4862
if self.is_mapped:
@@ -55,18 +69,7 @@ def unmap(self):
5569
for mapping in self.existing:
5670
vdebug.log.Log("Remapping key with '%s' " % mapping,\
5771
vdebug.log.Logger.DEBUG)
58-
regex = re.compile(r'\s+')
59-
parts = regex.split(mapping)
60-
mapcmd = 'noremap'
61-
if len(parts)>2:
62-
modeRegex = re.compile(r'^[nvsxoilc!]$')
63-
if modeRegex.match(parts[0]):
64-
mapping = ' '.join(parts[1:])
65-
if parts[0]=='!':
66-
mapcmd = 'noremap!'
67-
else:
68-
mapcmd = '%snoremap' % parts[0]
69-
vim.command("%s %s" % (mapcmd,mapping))
72+
vim.command(mapping)
7073

7174
class FilePath:
7275
is_win = False

0 commit comments

Comments
 (0)