summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/zle_keymap.c')
-rw-r--r--Src/Zle/zle_keymap.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c
index f28dec775..7e5fd02ee 100644
--- a/Src/Zle/zle_keymap.c
+++ b/Src/Zle/zle_keymap.c
@@ -169,8 +169,7 @@ freekeymapnamnode(HashNode hn)
KeymapName kmn = (KeymapName) hn;
zsfree(kmn->nam);
- if(!--kmn->keymap->rc)
- deletekeymap(kmn->keymap);
+ unrefkeymap(kmn->keymap);
zfree(kmn, sizeof(*kmn));
}
@@ -355,8 +354,7 @@ linkkeymap(Keymap km, char *name, int imm)
return 1;
if(n->keymap == km)
return 0;
- if(!--n->keymap->rc)
- deletekeymap(n->keymap);
+ unrefkeymap(n->keymap);
n->keymap = km;
} else {
n = makekeymapnamnode(km);
@@ -364,10 +362,23 @@ linkkeymap(Keymap km, char *name, int imm)
n->flags |= KMN_IMMORTAL;
keymapnamtab->addnode(keymapnamtab, ztrdup(name), n);
}
- km->rc++;
+ refkeymap(km);
return 0;
}
+/**/
+void refkeymap(Keymap km)
+{
+ km->rc++;
+}
+
+/**/
+void unrefkeymap(Keymap km)
+{
+ if (!--km->rc)
+ deletekeymap(km);
+}
+
/* Select a keymap as the current ZLE keymap. Can optionally fall back *
* on the guaranteed safe keymap if it fails. */