Пример #1
0
        public ShellSchemeEditor(IShellScheme current)
        {
            InitializeComponent();
            InitializeText();

            _deleteCharBox.Items.AddRange(new string[] { "BackSpace", "Delete" });

            _schemeCollection = TerminalUIPlugin.Instance.TerminalEmulatorPlugin.ShellSchemeCollection;
            _tags             = new List <ItemTag>();
            _removing         = new List <ItemTag>();

            _current = null;
            int index         = 0;
            int current_index = 0;

            _blockUIEvent = true;
            foreach (IShellScheme ss in _schemeCollection.Items)
            {
                ItemTag tag = new ItemTag(ss.Clone(), ss);
                _tags.Add(tag);
                _schemeComboBox.Items.Add(ss.Name);
                if (current == ss)
                {
                    current_index = index;
                }
                index++;
            }
            _blockUIEvent = false;

            //これで初期化
            _schemeComboBox.SelectedIndex = current_index;
        }
Пример #2
0
        private void TryParseMultiLineCommand()
        {
            GLine        current = _terminal.GetDocument().CurrentLine;
            GLine        command_start_candidate = current;
            IShellScheme scheme = GetTerminalSettings().ShellScheme;

            //ここちょっと落ち着かないので複数行はやめておく。
            //たとえば、
            //  > user *****
            //  > Password:
            //みたいなやりとりをすると、原理的に複数行コマンドなのかは区別が付かない。全行の右のほうまでテキストが埋まっていることで判断するくらいだが、100%ではない
            int limit = 1;

            while (command_start_candidate != null && limit > 0)
            {
                string prompt;
                string command;
                if (_terminal.PromptRecognizer.DeterminePromptLine(command_start_candidate, current.ID, current.DisplayLength, out prompt, out command))
                {
                    if (command.Length > 0)
                    {
                        _context.UpdateCommandList(command);
                    }
                }
                command_start_candidate = command_start_candidate.PrevLine;

                limit--;
            }
        }
Пример #3
0
        public void Load()
        {
            _data.Clear();
            IPreferenceFolder[] folders = _preferenceFolderArray.Folders;
            foreach (IPreferenceFolder content in folders)
            {
                GenericShellScheme ss = new GenericShellScheme(
                    _preferenceFolderArray.ConvertItem(content, _namePreference).AsString().Value,
                    _preferenceFolderArray.ConvertItem(content, _promptPreference).AsString().Value);
                string bs = _preferenceFolderArray.ConvertItem(content, _backspacePreference).AsString().Value;
                if (bs == "7F")
                {
                    ss.BackSpaceChar = ss.BackSpaceChar = (char)0x7F; //TODO パースが手抜き
                }
                ss.SetCommandList(_preferenceFolderArray.ConvertItem(content, _commandListPreference).AsString().Value);
                _data.Add(ss);
            }

            _defaultScheme = FindShellScheme(DEFAULT_SCHEME_NAME) as GenericShellScheme;

            if (_defaultScheme == null)
            {
                _defaultScheme = new GenericShellScheme(DEFAULT_SCHEME_NAME, GenericShellScheme.DEFAULT_PROMPT_REGEX); //なければこれで
                _data.Add(_defaultScheme);
            }
        }
Пример #4
0
        //append_charは、インテリセンス起動元が文字入力であるときその文字、Ctrl+.などの直接起動であるとき\0
        private void PopupMain(char append_char)
        {
            IShellScheme  ss  = GetTerminalSettings().ShellScheme;
            StringBuilder buf = new StringBuilder();

            buf.Append(_currentCommand);
            if (append_char != '\0')
            {
                buf.Append(append_char);
            }

            string line = buf.ToString();

            string[] args = ss.ParseCommandInput(line);
            //(一旦廃止)日本語が入っているとCaretColumnで探すとアウトになる。根本的に直すにはコマンドパーサがGLineの内部を知っていないといけない
            //int cc = _terminal.GetDocument().CaretColumn;
            IntelliSenseMode mode = line.Length == 0 || ss.IsDelimiter(line[line.Length - 1]) ? IntelliSenseMode.ArgComplement : IntelliSenseMode.CharComplement;

            _context.Init(_terminal, ss, args, mode, append_char);
            if (!_context.IsEmpty)
            {
                if (_intelliSenseWindow == null)
                {
                    _intelliSenseWindow = new IntelliSenseWindow(); //遅延作成
                }
                _intelliSenseWindow.Popup(_context);
            }
        }
Пример #5
0
        private void OnOK(object sender, EventArgs args)
        {
            try {
                TypedHashtable <IShellScheme, IShellScheme> table = new TypedHashtable <IShellScheme, IShellScheme>();
                List <IShellScheme> newscheme  = new List <IShellScheme>();
                IShellScheme        newdefault = null;
                foreach (ItemTag tag in _tags)
                {
                    if (tag.Original != null)
                    {
                        table.Add(tag.Original, tag.ShellScheme);
                    }
                    newscheme.Add(tag.ShellScheme);
                    if (tag.ShellScheme.IsGeneric)
                    {
                        newdefault = tag.ShellScheme;
                    }
                }

                foreach (ItemTag tag in _removing)
                {
                    table.Add(tag.Original, newdefault);
                }

                _schemeCollection.UpdateAll(newscheme.ToArray(), table);
            }
            catch (Exception ex) {
                RuntimeUtil.ReportException(ex);
            }
        }
Пример #6
0
        public ShellSchemeEditor(IShellScheme current)
        {
            InitializeComponent();
            InitializeText();

            _deleteCharBox.Items.AddRange(new string[] { "BackSpace", "Delete" });

            _schemeCollection = TerminalUIPlugin.Instance.TerminalEmulatorPlugin.ShellSchemeCollection;
            _tags = new List<ItemTag>();
            _removing = new List<ItemTag>();

            _current = null;
            int index = 0;
            int current_index = 0;
            _blockUIEvent = true;
            foreach (IShellScheme ss in _schemeCollection.Items) {
                ItemTag tag = new ItemTag(ss.Clone(), ss);
                _tags.Add(tag);
                _schemeComboBox.Items.Add(ss.Name);
                if (current == ss)
                    current_index = index;
                index++;
            }
            _blockUIEvent = false;

            //これで初期化
            _schemeComboBox.SelectedIndex = current_index;
        }
Пример #7
0
        public void Init(AbstractTerminal terminal, IShellScheme scheme, string[] current_input, IntelliSenseMode mode, char append_char)
        {
            _ownerControl = terminal.TerminalHost.TerminalControl;
            Debug.Assert(_ownerControl != null);
            TerminalDocument doc = terminal.GetDocument();

            _commandStartPoint = new Point(doc.CaretColumn + (append_char == '\0' ? 0 : 1), doc.CurrentLineNumber - doc.TopLineNumber);
            Debug.WriteLineIf(DebugOpt.IntelliSense, String.Format("IS CtxInit M={0} CaretC={1}", mode.ToString(), doc.CaretColumn));
            _scheme           = scheme;
            _currentInput     = current_input;
            _intelliSenseMode = mode;
            Debug.Assert(_currentInput != null);

            _charQueue.LockedInit(append_char);

            _buffer.Remove(0, _buffer.Length);
            if (_intelliSenseMode == IntelliSenseMode.CharComplement)
            {
                string last_arg = current_input[current_input.Length - 1];
                _buffer.Append(last_arg);
                _commandStartPoint.X -= last_arg.Length;
            }

            BuildCandidates();
        }
Пример #8
0
        //IShellSchemeDynamicChangeListener
        public void OnShellSchemeCollectionChanged(IShellScheme[] values, Poderosa.Util.Collections.TypedHashtable <IShellScheme, IShellScheme> table)
        {
            if (_shellScheme == null)
            {
                return;
            }

            IShellScheme ns = table[_shellScheme];

            Debug.Assert(ns != null);
            BeginUpdate();
            _shellScheme     = ns;
            _shellSchemeName = ns.Name;
            EndUpdate(); //これで通知が出る。例えばShellScheme選択コンボボックス。
        }
Пример #9
0
            public override void OnChange(ICommandTarget target, int selectedIndex, object selectedItem)
            {
                ListItem <IShellScheme> item = selectedItem as ListItem <IShellScheme>;

                if (item != null)
                {
                    IShellScheme scheme = item.Value;

                    ITerminalControlHost session = TerminalCommandTarget.AsOpenTerminal(target);
                    ITerminalSettings    ts      = session.TerminalSettings;
                    ts.BeginUpdate();
                    ts.ShellScheme = scheme;
                    ts.EndUpdate();
                }
            }
Пример #10
0
        public void UpdateAll(IShellScheme[] values, TypedHashtable <IShellScheme, IShellScheme> table)
        {
            _data.Clear();
            foreach (IShellScheme ss in values)
            {
                _data.Add(ss);
                if (ss.IsGeneric)
                {
                    _defaultScheme = ss;
                }
            }

            //変更通知 これは_dataの更新後でないと、ハンドラから再検索等きたときに困る
            foreach (IShellSchemeDynamicChangeListener l in _listeners)
            {
                l.OnShellSchemeCollectionChanged(values, table);
            }
        }
Пример #11
0
 //Listener以外を持ってくる
 public virtual void Import(ITerminalSettings src) {
     _encoding = src.Encoding;
     _terminalType = src.TerminalType;
     _localecho = src.LocalEcho;
     _lineFeedRule = src.LineFeedRule;
     _transmitnl = src.TransmitNL;
     _caption = src.Caption;
     _icon = src.Icon;
     TerminalSettings src_r = (TerminalSettings)src;
     _shellSchemeName = src_r._shellSchemeName; //ちょっとインチキ
     if (src_r._shellScheme != null) {
         _shellScheme = src_r._shellScheme;
         TerminalEmulatorPlugin.Instance.ShellSchemeCollection.AddDynamicChangeListener(this);
     }
     _enabledCharTriggerIntelliSense = src.EnabledCharTriggerIntelliSense;
     _renderProfile = src.RenderProfile == null ? null : (RenderProfile)src.RenderProfile.Clone();
     _multiLogSettings = src.LogSettings == null ? null : (IMultiLogSettings)_multiLogSettings.Clone();
 }
Пример #12
0
        public CommandResult InternalExecute(ICommandTarget target, params IAdaptable[] args)
        {
            IShellScheme ss = (IShellScheme)args[0].GetAdapter(typeof(IShellScheme));

            Debug.Assert(ss != null);

            ITerminalControlHost ts = TerminalCommandTarget.AsOpenTerminal(target);

            if (ts == null)
            {
                return(CommandResult.Failed);
            }
            ITerminalSettings settings = ts.TerminalSettings;

            settings.BeginUpdate();
            settings.ShellScheme = ss;
            settings.EndUpdate();
            return(CommandResult.Succeeded);
        }
Пример #13
0
        //UIの調整
        private void SelectScheme(ItemTag tag)
        {
            _current = tag;
            IShellScheme ss = tag.ShellScheme;

            _blockUIEvent = true;
            StringResource sr = TerminalUIPlugin.Instance.Strings;

            _deleteSchemeButton.Enabled = !ss.IsGeneric;
            _currentSchemeGroup.Text    = String.Format(sr.GetString("Form.ShellSchemeEditor._currentSchemeGroup"), ss.Name);
            _nameBox.Enabled            = !ss.IsGeneric;
            _nameBox.Text   = ss.Name;
            _promptBox.Text = ss.PromptExpression;
            _deleteCharBox.SelectedIndex = ss.BackSpaceChar == (char)0x7F ? 1 : 0;
            _alphabeticalSort.Checked    = false;
            InitCommandListBox();

            _blockUIEvent = false;
            _deleteCommandsButton.Enabled = false;
        }
Пример #14
0
        //Listener以外を持ってくる
        public virtual void Import(ITerminalSettings src)
        {
            _encoding     = src.Encoding;
            _terminalType = src.TerminalType;
            _localecho    = src.LocalEcho;
            _lineFeedRule = src.LineFeedRule;
            _transmitnl   = src.TransmitNL;
            _caption      = src.Caption;
            _icon         = src.Icon;
            TerminalSettings src_r = (TerminalSettings)src;

            _shellSchemeName = src_r._shellSchemeName; //ちょっとインチキ
            if (src_r._shellScheme != null)
            {
                _shellScheme = src_r._shellScheme;
                TerminalEmulatorPlugin.Instance.ShellSchemeCollection.AddDynamicChangeListener(this);
            }
            _enabledCharTriggerIntelliSense = src.EnabledCharTriggerIntelliSense;
            _renderProfile    = src.RenderProfile == null ? null : (RenderProfile)src.RenderProfile.Clone();
            _multiLogSettings = src.LogSettings == null ? null : (IMultiLogSettings)_multiLogSettings.Clone();
        }
Пример #15
0
        //IShellSchemeDynamicChangeListener
        public void OnShellSchemeCollectionChanged(IShellScheme[] values, Poderosa.Util.Collections.TypedHashtable<IShellScheme, IShellScheme> table)
        {
            if (_shellScheme == null)
                return;

            IShellScheme ns = table[_shellScheme];
            Debug.Assert(ns != null);
            BeginUpdate();
            _shellScheme = ns;
            _shellSchemeName = ns.Name;
            EndUpdate(); //����Œʒm���o��B�Ⴆ��ShellScheme�I��R���{�{�b�N�X�B
        }
Пример #16
0
 public SchemeMenuItem(IShellScheme scheme)
 {
     _scheme = scheme;
 }
Пример #17
0
 public ItemTag(IShellScheme scheme, IShellScheme original)
 {
     _original = original;
     _scheme = scheme;
 }
Пример #18
0
 public void SetShellSchemeName(string value)
 {
     _shellSchemeName = value;
     _shellScheme     = null;
 }
Пример #19
0
 public void SetShellSchemeName(string value)
 {
     _shellSchemeName = value;
     _shellScheme = null;
 }
Пример #20
0
        //IShellSchemeDynamicChangeListener
        public void OnShellSchemeCollectionChanged(IShellScheme[] values, Poderosa.Util.Collections.TypedHashtable<IShellScheme, IShellScheme> table)
        {
            if (_shellScheme == null)
                return;

            IShellScheme ns = table[_shellScheme];
            Debug.Assert(ns != null);
            BeginUpdate();
            _shellScheme = ns;
            _shellSchemeName = ns.Name;
            EndUpdate(); //これで通知が出る。例えばShellScheme選択コンボボックス。
        }
Пример #21
0
 public int IndexOf(IShellScheme ss) {
     return _data.IndexOf(ss);
 }
Пример #22
0
        public void Load() {
            _data.Clear();
            IPreferenceFolder[] folders = _preferenceFolderArray.Folders;
            foreach (IPreferenceFolder content in folders) {
                GenericShellScheme ss = new GenericShellScheme(
                    _preferenceFolderArray.ConvertItem(content, _namePreference).AsString().Value,
                    _preferenceFolderArray.ConvertItem(content, _promptPreference).AsString().Value);
                string bs = _preferenceFolderArray.ConvertItem(content, _backspacePreference).AsString().Value;
                if (bs == "7F")
                    ss.BackSpaceChar = ss.BackSpaceChar = (char)0x7F; //TODO パースが手抜き
                ss.SetCommandList(_preferenceFolderArray.ConvertItem(content, _commandListPreference).AsString().Value);
                _data.Add(ss);
            }

            _defaultScheme = FindShellScheme(DEFAULT_SCHEME_NAME) as GenericShellScheme;

            if (_defaultScheme == null) {
                _defaultScheme = new GenericShellScheme(DEFAULT_SCHEME_NAME, GenericShellScheme.DEFAULT_PROMPT_REGEX); //なければこれで
                _data.Add(_defaultScheme);
            }
        }
Пример #23
0
        public void UpdateAll(IShellScheme[] values, TypedHashtable<IShellScheme, IShellScheme> table) {
            _data.Clear();
            foreach (IShellScheme ss in values) {
                _data.Add(ss);
                if (ss.IsGeneric)
                    _defaultScheme = ss;
            }

            //変更通知 これは_dataの更新後でないと、ハンドラから再検索等きたときに困る
            foreach (IShellSchemeDynamicChangeListener l in _listeners)
                l.OnShellSchemeCollectionChanged(values, table);

        }
Пример #24
0
 internal void InitForTest()
 {
     _defaultScheme = new GenericShellScheme(DEFAULT_SCHEME_NAME, GenericShellScheme.DEFAULT_PROMPT_REGEX);
     _data.Add(_defaultScheme);
 }
Пример #25
0
 public int IndexOf(IShellScheme ss)
 {
     return(_data.IndexOf(ss));
 }
Пример #26
0
        public void UpdateAll(IShellScheme[] values, TypedHashtable<IShellScheme, IShellScheme> table)
        {
            _data.Clear();
            foreach (IShellScheme ss in values) {
                _data.Add(ss);
                if (ss.IsGeneric)
                    _defaultScheme = ss;
            }

            //�ύX�ʒm �����_data�̍X�V��łȂ��ƁA�n���h������Č����������Ƃ��ɍ���
            foreach (IShellSchemeDynamicChangeListener l in _listeners)
                l.OnShellSchemeCollectionChanged(values, table);
        }
Пример #27
0
 public ItemTag(IShellScheme scheme, IShellScheme original)
 {
     _original = original;
     _scheme   = scheme;
 }
Пример #28
0
 public SchemeMenuItem(IShellScheme scheme)
 {
     _scheme = scheme;
 }