public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped) { var returnValues = new List <ICompletionData>(); if (!PreSelection.StartsWith("\"")) { return(returnValues.ToArray()); } var baseDir = ""; var preSelection = PreSelection.Substring(1); var lastSlash = preSelection.LastIndexOfAny(new[] { '/', '\\' }); if (lastSlash >= 0) { baseDir = preSelection.Substring(0, lastSlash + 1); preSelection = lastSlash < preSelection.Length ? preSelection.Substring(lastSlash + 1) : ""; } var searchedDirectories = new List <string>(); foreach (var originalDirectory in _directories) { try { var directory = new DirectoryInfo(Path.Combine(originalDirectory.FullName, baseDir)); if (!directory.Exists) { continue; } if (searchedDirectories.Contains(directory.FullName)) { continue; } searchedDirectories.Add(directory.FullName); foreach (var subDirectory in directory.GetDirectories().Where(dir => dir.Name.StartsWith(preSelection, StringComparison.InvariantCultureIgnoreCase))) { returnValues.Add(new DirectoryData(subDirectory.Name, _reOpen)); } foreach (var file in directory.GetFiles().Where(file => file.Name.StartsWith(preSelection, StringComparison.InvariantCultureIgnoreCase))) { returnValues.Add(new FileData(file.Name)); } } catch { // Directory is an invalid name, user doesn't have access, etc. continue; } } return(returnValues.ToArray()); }
public override bool InsertAction(ICompletionData data, TextArea textArea, int insertionOffset, char key) { var preOffset = PreSelection.LastIndexOfAny(new[] { '\\', '/', '"' }); if (preOffset < 0) { return(false); } textArea.Caret.Position = textArea.Document.OffsetToPosition(insertionOffset); textArea.InsertString(PreSelection.Substring(0, preOffset + 1)); return(data.InsertAction(textArea, key)); }