aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/state.c
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-04-28 20:37:52 +0200
committerGitHub <noreply@github.com>2017-04-28 20:37:52 +0200
commit129f107c0c26fbf371bcf165ec20eb13356bfb8e (patch)
tree864bf25c65c6cfcd4e17c0ebd04afdad1342c268 /src/nvim/state.c
parent7044aa6e8256844bc1bd23eb61d4a41ca6d418d0 (diff)
parent8f59d1483934f91011b755406251136c406e77f6 (diff)
downloadrneovim-129f107c0c26fbf371bcf165ec20eb13356bfb8e.tar.gz
rneovim-129f107c0c26fbf371bcf165ec20eb13356bfb8e.tar.bz2
rneovim-129f107c0c26fbf371bcf165ec20eb13356bfb8e.zip
Merge #6247 'api: nvim_get_mode()'
Diffstat (limited to 'src/nvim/state.c')
-rw-r--r--src/nvim/state.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/nvim/state.c b/src/nvim/state.c
index 210708c3f4..be6aa21664 100644
--- a/src/nvim/state.c
+++ b/src/nvim/state.c
@@ -98,3 +98,52 @@ int get_real_state(void)
return State;
}
+/// @returns[allocated] mode string
+char *get_mode(void)
+{
+ char *buf = xcalloc(3, sizeof(char));
+
+ if (VIsual_active) {
+ if (VIsual_select) {
+ buf[0] = (char)(VIsual_mode + 's' - 'v');
+ } else {
+ buf[0] = (char)VIsual_mode;
+ }
+ } else if (State == HITRETURN || State == ASKMORE || State == SETWSIZE
+ || State == CONFIRM) {
+ buf[0] = 'r';
+ if (State == ASKMORE) {
+ buf[1] = 'm';
+ } else if (State == CONFIRM) {
+ buf[1] = '?';
+ }
+ } else if (State == EXTERNCMD) {
+ buf[0] = '!';
+ } else if (State & INSERT) {
+ if (State & VREPLACE_FLAG) {
+ buf[0] = 'R';
+ buf[1] = 'v';
+ } else if (State & REPLACE_FLAG) {
+ buf[0] = 'R';
+ } else {
+ buf[0] = 'i';
+ }
+ } else if (State & CMDLINE) {
+ buf[0] = 'c';
+ if (exmode_active) {
+ buf[1] = 'v';
+ }
+ } else if (exmode_active) {
+ buf[0] = 'c';
+ buf[1] = 'e';
+ } else if (State & TERM_FOCUS) {
+ buf[0] = 't';
+ } else {
+ buf[0] = 'n';
+ if (finish_op) {
+ buf[1] = 'o';
+ }
+ }
+
+ return buf;
+}