Ejemplo n.º 1
0
        public override int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
        {
            // Check for commit character.
            var typedChar = char.MinValue;

            if (pguidCmdGroup == CommandGroup && CommandIds.Contains(nCmdID))
            {
                if (nCmdID == (uint)VSConstants.VSStd2KCmdID.TYPECHAR)
                {
                    typedChar = (char)(ushort)Marshal.GetObjectForNativeVariant(pvaIn);
                }

                var isCommit = nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN ||
                               nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB;

                var isCompletion = isCommit ||
                                   char.IsWhiteSpace(typedChar) ||
                                   (char.IsPunctuation(typedChar) && typedChar != '_');

                if (isCompletion && _completionModelManager.Commit())
                {
                    if (isCommit)
                    {
                        return(VSConstants.S_OK); // Don't add commit char to buffer.
                    }
                }
            }

            // Pass command to next command target.
            var result = NextCommandTarget.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);

            if (result == VSConstants.S_OK && pguidCmdGroup == CommandGroup && CommandIds.Contains(nCmdID))
            {
                var isTrigger = typedChar != char.MinValue && (char.IsLetterOrDigit(typedChar) || typedChar == '.');
                _completionModelManager.HandleTextInput(isTrigger);
            }

            return(result);
        }