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; }
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--; } }
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); } }
//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); } }
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); } }
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; }
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(); }
//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選択コンボボックス。 }
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(); } }
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); } }
//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(); }
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); }
//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; }
//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 }
public SchemeMenuItem(IShellScheme scheme) { _scheme = scheme; }
public ItemTag(IShellScheme scheme, IShellScheme original) { _original = original; _scheme = scheme; }
public void SetShellSchemeName(string value) { _shellSchemeName = value; _shellScheme = null; }
//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選択コンボボックス。 }
public int IndexOf(IShellScheme ss) { return _data.IndexOf(ss); }
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); } }
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); }
internal void InitForTest() { _defaultScheme = new GenericShellScheme(DEFAULT_SCHEME_NAME, GenericShellScheme.DEFAULT_PROMPT_REGEX); _data.Add(_defaultScheme); }
public int IndexOf(IShellScheme ss) { return(_data.IndexOf(ss)); }
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); }