Hi, Bram,

I started this patch as it seemed a while ago some aspects it may be helpful 
for 
MacVim. Recently I have dug it up and further revised it, as I was coming 
across 
some other troubles using --remote-expr when Vim is running in different modes. 
It 
extends the mode() function to return a more full set of modes.

The one bearing most comment is the one for when a shell is running (:shell in 
the 
GUI). I'm not entirely convinced having this as a separate 'mode' is really the 
best thing. Hoewver, the alternative would be somehow delaying a server's 
processing and reply to --remote-expr et al. and I suspect this is pretty 
non-trivial. Having mode() return something different is a good step even if it 
isn't the final one, I think.

Would you be able to include this?

Ben.




--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index fc6aa5d..3160e9b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -3848,6 +3848,7 @@ mkdir({name} [, {path} [, {prot}]])
 							*mode()*
 mode()		Return a string that indicates the current mode:
 			n	Normal
+			o	Operator-pending
 			v	Visual by character
 			V	Visual by line
 			CTRL-V	Visual blockwise
@@ -3857,9 +3858,14 @@ mode()		Return a string that indicates the current mode:
 			i	Insert
 			R	Replace
 			c	Command-line
+			C	Vim Ex mode |gQ|
+			Q	Normal Ex mode |Q|
 			r	Hit-enter prompt
-		This is useful in the 'statusline' option.  In most other
-		places it always returns "c" or "n".
+			?	A |:confirm| query of some sort
+			!	Shell or external command is executing
+		This is useful in the 'statusline' option or when used
+		with |remote_expr()| In most other places it always returns
+		"c" or "n".
 
 nextnonblank({lnum})					*nextnonblank()*
 		Return the line number of the first line at or below {lnum}
diff --git a/src/eval.c b/src/eval.c
index 9e2999b..956e3f0 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -12862,8 +12862,12 @@ f_mode(argvars, rettv)
     }
     else
 #endif
-	if (State == HITRETURN || State == ASKMORE || State == SETWSIZE)
+    if (State == HITRETURN || State == ASKMORE || State == SETWSIZE)
 	buf[0] = 'r';
+    else if (State == CONFIRM)
+	buf[0] = '?';
+    else if (State == EXTERNCMD)
+	buf[0] = '!';
     else if (State & INSERT)
     {
 	if (State & REPLACE_FLAG)
@@ -12872,7 +12876,16 @@ f_mode(argvars, rettv)
 	    buf[0] = 'i';
     }
     else if (State & CMDLINE)
-	buf[0] = 'c';
+    {
+	if (exmode_active)
+	    buf[0] = 'C';
+	else
+	    buf[0] = 'c';
+    }
+    else if (exmode_active)
+	buf[0] = 'Q';
+    else if (finish_op)
+	buf[0] = 'o';
     else
 	buf[0] = 'n';
 

Raspunde prin e-mail lui