Showing preview only (5,210K chars total). Download the full file or copy to clipboard to get everything.
Repository: onivim/oni
Branch: master
Commit: 17ceaa453119
Files: 800
Total size: 4.8 MB
Directory structure:
gitextract_k5a77194/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ └── config.yml
├── .gitignore
├── .gitmodules
├── .npmignore
├── .nvmrc
├── .oni/
│ ├── config.js
│ └── templates/
│ └── UnitTestTemplate.ts.template
├── .prettierignore
├── .prettierrc
├── .travis.yml
├── .vscode/
│ └── launch.json
├── .yarnrc
├── @types/
│ ├── color-normalize/
│ │ └── index.d.ts
│ └── font-manager/
│ └── index.d.ts
├── ACCOUNTING.md
├── BACKERS.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── appveyor.yml
├── browser/
│ ├── src/
│ │ ├── App.ts
│ │ ├── CSS.ts
│ │ ├── Constants.ts
│ │ ├── Editor/
│ │ │ ├── BufferHighlights.ts
│ │ │ ├── BufferManager.ts
│ │ │ ├── Editor.ts
│ │ │ ├── NeovimEditor/
│ │ │ │ ├── BufferLayerManager.ts
│ │ │ │ ├── CompletionMenu.ts
│ │ │ │ ├── Definition.ts
│ │ │ │ ├── FileDropHandler.tsx
│ │ │ │ ├── HoverRenderer.tsx
│ │ │ │ ├── NeovimActiveWindow.tsx
│ │ │ │ ├── NeovimBufferLayersView.tsx
│ │ │ │ ├── NeovimEditor.tsx
│ │ │ │ ├── NeovimEditorActions.ts
│ │ │ │ ├── NeovimEditorCommands.ts
│ │ │ │ ├── NeovimEditorLoadingOverlay.tsx
│ │ │ │ ├── NeovimEditorReducer.ts
│ │ │ │ ├── NeovimEditorSelectors.ts
│ │ │ │ ├── NeovimEditorStore.ts
│ │ │ │ ├── NeovimInput.tsx
│ │ │ │ ├── NeovimPopupMenu.tsx
│ │ │ │ ├── NeovimRenderer.tsx
│ │ │ │ ├── NeovimSurface.tsx
│ │ │ │ ├── Rename.tsx
│ │ │ │ ├── Symbols.ts
│ │ │ │ ├── ToolTipsProvider.ts
│ │ │ │ ├── WelcomeBufferLayer.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── markdown.ts
│ │ │ └── OniEditor/
│ │ │ ├── ColorHighlightLayer.tsx
│ │ │ ├── ImageBufferLayer.tsx
│ │ │ ├── IndentGuideBufferLayer.tsx
│ │ │ ├── OniEditor.tsx
│ │ │ ├── containers/
│ │ │ │ ├── BufferScrollBarContainer.ts
│ │ │ │ ├── DefinitionContainer.ts
│ │ │ │ └── ErrorsContainer.ts
│ │ │ └── index.ts
│ │ ├── Font.ts
│ │ ├── Grid.ts
│ │ ├── Input/
│ │ │ ├── KeyBindings.ts
│ │ │ ├── KeyParser.ts
│ │ │ ├── Keyboard/
│ │ │ │ ├── KeyboardLayout.ts
│ │ │ │ ├── KeyboardResolver.ts
│ │ │ │ ├── Resolvers.ts
│ │ │ │ └── index.ts
│ │ │ ├── KeyboardInput.tsx
│ │ │ └── Mouse.ts
│ │ ├── Performance.ts
│ │ ├── PeriodicJobs.ts
│ │ ├── PersistentStore.ts
│ │ ├── Platform.ts
│ │ ├── Plugins/
│ │ │ ├── AnonymousPlugin.ts
│ │ │ ├── Api/
│ │ │ │ ├── Capabilities.ts
│ │ │ │ ├── LanguageClient/
│ │ │ │ │ ├── LanguageClientHelpers.ts
│ │ │ │ │ └── LanguageClientLogger.ts
│ │ │ │ ├── Oni.ts
│ │ │ │ ├── Process.ts
│ │ │ │ ├── Services.ts
│ │ │ │ ├── Ui.ts
│ │ │ │ └── shell-env.d.ts
│ │ │ ├── PackageMetadataParser.ts
│ │ │ ├── Plugin.ts
│ │ │ ├── PluginConfigurationSynchronizer.ts
│ │ │ ├── PluginInstaller.ts
│ │ │ ├── PluginManager.ts
│ │ │ └── PluginSidebarPane.tsx
│ │ ├── Redux/
│ │ │ ├── LoggingMiddleware.ts
│ │ │ ├── RequestAnimationFrameNotifyBatcher.ts
│ │ │ ├── createStore.ts
│ │ │ └── index.ts
│ │ ├── Renderer/
│ │ │ ├── CanvasRenderer.ts
│ │ │ ├── INeovimRenderer.ts
│ │ │ ├── Span.ts
│ │ │ ├── WebGLRenderer/
│ │ │ │ ├── SolidRenderer.ts
│ │ │ │ ├── TextRenderer/
│ │ │ │ │ ├── GlyphAtlas/
│ │ │ │ │ │ ├── GlyphAtlas.ts
│ │ │ │ │ │ ├── IRasterizedGlyph.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── ICellGroup.ts
│ │ │ │ │ ├── LigatureGrouper/
│ │ │ │ │ │ ├── ILigatureGrouper.ts
│ │ │ │ │ │ ├── NoopLigatureGrouper.ts
│ │ │ │ │ │ ├── OpenTypeLigatureGrouper.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── TextRenderer.ts
│ │ │ │ │ ├── groupCells.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── WebGLRenderer.ts
│ │ │ │ ├── WebGLUtilities.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── normalizeColor.ts
│ │ │ └── index.ts
│ │ ├── Services/
│ │ │ ├── AutoClosingPairs.ts
│ │ │ ├── AutoUpdate.ts
│ │ │ ├── Automation.ts
│ │ │ ├── Bookmarks/
│ │ │ │ ├── BookmarksPane.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Browser/
│ │ │ │ ├── AddressBarView.tsx
│ │ │ │ ├── BrowserButtonView.tsx
│ │ │ │ ├── BrowserView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── BrowserWindowConfigurationSynchronizer.ts
│ │ │ ├── Colors.ts
│ │ │ ├── CommandManager.ts
│ │ │ ├── Commands/
│ │ │ │ ├── GlobalCommands.ts
│ │ │ │ └── index.ts
│ │ │ ├── Completion/
│ │ │ │ ├── Completion.ts
│ │ │ │ ├── CompletionProviders.ts
│ │ │ │ ├── CompletionSelectors.ts
│ │ │ │ ├── CompletionState.ts
│ │ │ │ ├── CompletionStore.ts
│ │ │ │ ├── CompletionUtility.ts
│ │ │ │ ├── CompletionsRequestor.ts
│ │ │ │ └── index.ts
│ │ │ ├── Configuration/
│ │ │ │ ├── Configuration.ts
│ │ │ │ ├── ConfigurationCommands.ts
│ │ │ │ ├── ConfigurationEditor.ts
│ │ │ │ ├── DefaultConfiguration.ts
│ │ │ │ ├── DeprecatedConfigurationValues.ts
│ │ │ │ ├── FileConfigurationProvider.ts
│ │ │ │ ├── IConfigurationValues.ts
│ │ │ │ ├── PersistentSettings.ts
│ │ │ │ ├── ReasonConfiguration.ts
│ │ │ │ ├── UserConfiguration.ts
│ │ │ │ └── index.ts
│ │ │ ├── ContextMenu/
│ │ │ │ ├── ContextMenu.tsx
│ │ │ │ ├── ContextMenuComponent.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Debug.ts
│ │ │ ├── Diagnostics/
│ │ │ │ ├── index.ts
│ │ │ │ └── navigateErrors.ts
│ │ │ ├── DragAndDrop.tsx
│ │ │ ├── EditorManager.ts
│ │ │ ├── Explorer/
│ │ │ │ ├── ExplorerFileSystem.ts
│ │ │ │ ├── ExplorerSelectors.ts
│ │ │ │ ├── ExplorerSplit.tsx
│ │ │ │ ├── ExplorerStore.ts
│ │ │ │ ├── ExplorerView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── FileIcon.tsx
│ │ │ ├── FileMappings.ts
│ │ │ ├── FileSystemWatcher/
│ │ │ │ └── index.ts
│ │ │ ├── FocusManager.ts
│ │ │ ├── IconThemes/
│ │ │ │ ├── IconThemeLoader.ts
│ │ │ │ ├── Icons.ts
│ │ │ │ ├── StyleWriter.ts
│ │ │ │ └── index.ts
│ │ │ ├── InputManager.ts
│ │ │ ├── KeyDisplayer/
│ │ │ │ ├── KeyDisplayer.tsx
│ │ │ │ ├── KeyDisplayerStore.ts
│ │ │ │ ├── KeyDisplayerView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Language/
│ │ │ │ ├── CodeAction.ts
│ │ │ │ ├── DefinitionRequestor.ts
│ │ │ │ ├── Edits.ts
│ │ │ │ ├── FindAllReferences.ts
│ │ │ │ ├── Formatting.ts
│ │ │ │ ├── HoverRequestor.ts
│ │ │ │ ├── LanguageClient.ts
│ │ │ │ ├── LanguageClientProcess.ts
│ │ │ │ ├── LanguageClientStatusBar.tsx
│ │ │ │ ├── LanguageClientTypes.ts
│ │ │ │ ├── LanguageConfiguration.ts
│ │ │ │ ├── LanguageEditorIntegration.ts
│ │ │ │ ├── LanguageManager.ts
│ │ │ │ ├── LanguageStore.ts
│ │ │ │ ├── PromiseQueue.ts
│ │ │ │ ├── RenameView.tsx
│ │ │ │ ├── ServerCapabilities.ts
│ │ │ │ ├── SignatureHelp.ts
│ │ │ │ ├── SignatureHelpView.tsx
│ │ │ │ ├── Workspace.ts
│ │ │ │ ├── addInsertModeLanguageFunctionality.ts
│ │ │ │ └── index.ts
│ │ │ ├── Learning/
│ │ │ │ ├── Achievements/
│ │ │ │ │ ├── AchievementNotificationRenderer.tsx
│ │ │ │ │ ├── AchievementsBufferLayer.tsx
│ │ │ │ │ ├── AchievementsManager.ts
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── LearningPane.tsx
│ │ │ │ ├── Tutorial/
│ │ │ │ │ ├── CompletionView.tsx
│ │ │ │ │ ├── GameplayBufferLayer.tsx
│ │ │ │ │ ├── GoalView.tsx
│ │ │ │ │ ├── ITutorial.ts
│ │ │ │ │ ├── Notes.tsx
│ │ │ │ │ ├── Stages/
│ │ │ │ │ │ ├── CompositeStage.tsx
│ │ │ │ │ │ ├── CorrectLineStage.tsx
│ │ │ │ │ │ ├── DeleteCharactersStage.tsx
│ │ │ │ │ │ ├── FadeInLineStage.tsx
│ │ │ │ │ │ ├── InitializeBufferStage.tsx
│ │ │ │ │ │ ├── MoveToGoalStage.tsx
│ │ │ │ │ │ ├── SetBufferStage.tsx
│ │ │ │ │ │ ├── SetCursorPositionStage.tsx
│ │ │ │ │ │ ├── WaitForModeStage.tsx
│ │ │ │ │ │ ├── WaitForRegisterStage.tsx
│ │ │ │ │ │ ├── WaitForStateStage.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── TutorialBufferLayer.tsx
│ │ │ │ │ ├── TutorialGameplayManager.ts
│ │ │ │ │ ├── TutorialManager.ts
│ │ │ │ │ ├── Tutorials/
│ │ │ │ │ │ ├── BasicMovementTutorial.tsx
│ │ │ │ │ │ ├── BeginningsAndEndingsTutorial.tsx
│ │ │ │ │ │ ├── ChangeOperatorTutorial.tsx
│ │ │ │ │ │ ├── CopyPasteTutorial.tsx
│ │ │ │ │ │ ├── DeleteCharacterTutorial.tsx
│ │ │ │ │ │ ├── DeleteOperatorTutorial.tsx
│ │ │ │ │ │ ├── DotCommandTutorial.tsx
│ │ │ │ │ │ ├── InlineFindingTutorial.tsx
│ │ │ │ │ │ ├── InsertAndUndoTutorial.tsx
│ │ │ │ │ │ ├── SearchInBufferTutorial.tsx
│ │ │ │ │ │ ├── SwitchModeTutorial.tsx
│ │ │ │ │ │ ├── TargetsVimPluginTutorial.tsx
│ │ │ │ │ │ ├── TextObjectsTutorial.tsx
│ │ │ │ │ │ ├── VerticalMovementTutorial.tsx
│ │ │ │ │ │ ├── VisualModeTutorial.tsx
│ │ │ │ │ │ ├── WordMotionTutorial.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── Menu/
│ │ │ │ ├── Filter/
│ │ │ │ │ ├── FuseFilter.ts
│ │ │ │ │ ├── NoFilter.ts
│ │ │ │ │ ├── RegExFilter.ts
│ │ │ │ │ ├── Utils.ts
│ │ │ │ │ ├── VSCodeFilter.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Menu.less
│ │ │ │ ├── Menu.ts
│ │ │ │ ├── MenuActionCreators.ts
│ │ │ │ ├── MenuActions.ts
│ │ │ │ ├── MenuComponent.tsx
│ │ │ │ ├── MenuReducer.ts
│ │ │ │ ├── MenuState.ts
│ │ │ │ ├── PinnedIconView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Metadata.ts
│ │ │ ├── MultiProcess.ts
│ │ │ ├── Notifications/
│ │ │ │ ├── Notification.ts
│ │ │ │ ├── NotificationStore.ts
│ │ │ │ ├── Notifications.ts
│ │ │ │ ├── NotificationsView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Overlay.ts
│ │ │ ├── Particles/
│ │ │ │ ├── ParticleSystem.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Preview/
│ │ │ │ ├── PreviewBufferLayer.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Recorder.ts
│ │ │ ├── Search/
│ │ │ │ ├── FinderProcess.ts
│ │ │ │ ├── RipGrep.ts
│ │ │ │ ├── Scorer/
│ │ │ │ │ ├── CharCode.ts
│ │ │ │ │ ├── Comparers.ts
│ │ │ │ │ ├── OniQuickOpenScorer.ts
│ │ │ │ │ ├── QuickOpenScorer.ts
│ │ │ │ │ ├── Utilities.ts
│ │ │ │ │ ├── filters.ts
│ │ │ │ │ └── strings.ts
│ │ │ │ ├── SearchPaneView.tsx
│ │ │ │ ├── SearchProvider.ts
│ │ │ │ ├── SearchResultsSpinnerView.tsx
│ │ │ │ ├── SearchTextBox.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Sessions/
│ │ │ │ ├── SessionManager.ts
│ │ │ │ ├── Sessions.tsx
│ │ │ │ ├── SessionsPane.tsx
│ │ │ │ ├── SessionsStore.ts
│ │ │ │ └── index.ts
│ │ │ ├── Sidebar/
│ │ │ │ ├── SidebarContentSplit.tsx
│ │ │ │ ├── SidebarSplit.tsx
│ │ │ │ ├── SidebarStore.ts
│ │ │ │ ├── SidebarView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Sneak/
│ │ │ │ ├── Sneak.tsx
│ │ │ │ ├── SneakStore.ts
│ │ │ │ ├── SneakView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Snippets/
│ │ │ │ ├── OniSnippet.ts
│ │ │ │ ├── SnippetBufferLayer.tsx
│ │ │ │ ├── SnippetCompletionProvider.ts
│ │ │ │ ├── SnippetManager.ts
│ │ │ │ ├── SnippetProvider.ts
│ │ │ │ ├── SnippetSession.ts
│ │ │ │ ├── SnippetVariableResolver.ts
│ │ │ │ ├── UserSnippetProvider.ts
│ │ │ │ └── index.ts
│ │ │ ├── StatusBar.ts
│ │ │ ├── SyntaxHighlighting/
│ │ │ │ ├── Definitions.ts
│ │ │ │ ├── GrammarLoader.ts
│ │ │ │ ├── ISyntaxHighlighter.ts
│ │ │ │ ├── SyntaxHighlightReconciler.ts
│ │ │ │ ├── SyntaxHighlightSelectors.ts
│ │ │ │ ├── SyntaxHighlighting.ts
│ │ │ │ ├── SyntaxHighlightingPeriodicJob.ts
│ │ │ │ ├── SyntaxHighlightingReducer.ts
│ │ │ │ ├── SyntaxHighlightingStore.ts
│ │ │ │ ├── TokenGenerator.tsx
│ │ │ │ ├── TokenScorer.ts
│ │ │ │ ├── TokenThemeProvider.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Tasks.ts
│ │ │ ├── Terminal.ts
│ │ │ ├── Themes/
│ │ │ │ ├── ThemeLoader.ts
│ │ │ │ ├── ThemeManager.ts
│ │ │ │ ├── ThemePicker.ts
│ │ │ │ └── index.ts
│ │ │ ├── TokenColors.ts
│ │ │ ├── TypingPredictionManager.ts
│ │ │ ├── UnhandledErrorMonitor.ts
│ │ │ ├── VersionControl/
│ │ │ │ ├── VersionControlBlameLayer.tsx
│ │ │ │ ├── VersionControlManager.tsx
│ │ │ │ ├── VersionControlPane.tsx
│ │ │ │ ├── VersionControlProvider.ts
│ │ │ │ ├── VersionControlStore.ts
│ │ │ │ ├── VersionControlView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── VimConfigurationSynchronizer.ts
│ │ │ ├── WindowManager/
│ │ │ │ ├── LinearSplitProvider.ts
│ │ │ │ ├── RelationalSplitNavigator.ts
│ │ │ │ ├── SingleSplitProvider.ts
│ │ │ │ ├── WindowDock.ts
│ │ │ │ ├── WindowManager.ts
│ │ │ │ ├── WindowManagerStore.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── layoutFromSplitInfo.ts
│ │ │ └── Workspace/
│ │ │ ├── Workspace.ts
│ │ │ ├── WorkspaceCommands.ts
│ │ │ ├── WorkspaceConfiguration.ts
│ │ │ ├── find-up.d.ts
│ │ │ └── index.ts
│ │ ├── UI/
│ │ │ ├── Icon.tsx
│ │ │ ├── Shell/
│ │ │ │ ├── OverlayView.tsx
│ │ │ │ ├── Shell.tsx
│ │ │ │ ├── ShellActionCreators.ts
│ │ │ │ ├── ShellActions.ts
│ │ │ │ ├── ShellReducer.ts
│ │ │ │ ├── ShellState.ts
│ │ │ │ ├── ShellView.tsx
│ │ │ │ └── index.ts
│ │ │ └── components/
│ │ │ ├── Arrow.less
│ │ │ ├── Arrow.tsx
│ │ │ ├── Background.tsx
│ │ │ ├── BufferLayerHeader.tsx
│ │ │ ├── BufferScrollBar.tsx
│ │ │ ├── Caret.tsx
│ │ │ ├── CodeActions.tsx
│ │ │ ├── CommandLine.tsx
│ │ │ ├── Cursor.tsx
│ │ │ ├── CursorLine.tsx
│ │ │ ├── CursorPositioner.tsx
│ │ │ ├── Definition.tsx
│ │ │ ├── Error.tsx
│ │ │ ├── ErrorInfo.tsx
│ │ │ ├── ExternalMenus.tsx
│ │ │ ├── FlipCard.tsx
│ │ │ ├── HighlightText.tsx
│ │ │ ├── InstallHelp.less
│ │ │ ├── InstallHelp.tsx
│ │ │ ├── KeyBindingInfo.tsx
│ │ │ ├── LightweightText.tsx
│ │ │ ├── Loading.tsx
│ │ │ ├── LoadingSpinner.tsx
│ │ │ ├── Octicon.tsx
│ │ │ ├── PureComponentWithDisposeTracking.tsx
│ │ │ ├── QuickInfo.tsx
│ │ │ ├── QuickInfoContainer.tsx
│ │ │ ├── RedErrorScreen.tsx
│ │ │ ├── SectionTitle.tsx
│ │ │ ├── SidebarButton.tsx
│ │ │ ├── SidebarEmptyPaneView.tsx
│ │ │ ├── SidebarItemView.tsx
│ │ │ ├── Sneakable.tsx
│ │ │ ├── StatusBar.tsx
│ │ │ ├── StatusResize.tsx
│ │ │ ├── Tabs.tsx
│ │ │ ├── Text.tsx
│ │ │ ├── ToolTip.tsx
│ │ │ ├── VersionControl/
│ │ │ │ ├── Branch.tsx
│ │ │ │ ├── CommitMessage.tsx
│ │ │ │ ├── Commits.tsx
│ │ │ │ ├── File.tsx
│ │ │ │ ├── Help.tsx
│ │ │ │ ├── Staged.tsx
│ │ │ │ └── Status.tsx
│ │ │ ├── VimNavigator.tsx
│ │ │ ├── Visible.tsx
│ │ │ ├── WildMenu.tsx
│ │ │ ├── WindowSplitHost.tsx
│ │ │ ├── WindowSplits.tsx
│ │ │ ├── WindowTitle.tsx
│ │ │ ├── WithWidth.tsx
│ │ │ ├── animations.ts
│ │ │ ├── common.less
│ │ │ └── common.ts
│ │ ├── Utility.ts
│ │ ├── index.tsx
│ │ ├── neovim/
│ │ │ ├── CommandContext.ts
│ │ │ ├── EventContext.ts
│ │ │ ├── MsgPack.ts
│ │ │ ├── NeovimAutoCommands.ts
│ │ │ ├── NeovimBufferUpdateManager.ts
│ │ │ ├── NeovimInstance.ts
│ │ │ ├── NeovimMarks.ts
│ │ │ ├── NeovimProcessSpawner.ts
│ │ │ ├── NeovimTokenColorSynchronizer.ts
│ │ │ ├── NeovimWindowManager.ts
│ │ │ ├── QuickFix.ts
│ │ │ ├── Screen.ts
│ │ │ ├── ScreenWithPredictions.ts
│ │ │ ├── Session.ts
│ │ │ ├── SharedNeovimInstance.ts
│ │ │ ├── VimHighlights.ts
│ │ │ ├── actions.ts
│ │ │ └── index.ts
│ │ ├── neovim-client.d.ts
│ │ ├── overlay.less
│ │ ├── startEditors.ts
│ │ ├── sudo-prompt.d.ts
│ │ └── units-css.d.ts
│ ├── test/
│ │ ├── AppTests.ts
│ │ ├── Editor/
│ │ │ └── NeovimEditor/
│ │ │ ├── BufferStateTests.ts
│ │ │ ├── NeovimEditorReducerTests.ts
│ │ │ └── SymbolsTests.ts
│ │ ├── GridTests.ts
│ │ ├── Input/
│ │ │ ├── InputManagerTests.ts
│ │ │ ├── KeyParserTests.ts
│ │ │ └── Keyboard/
│ │ │ └── ResolverTests.ts
│ │ ├── MarkdownTests.ts
│ │ ├── Mocks/
│ │ │ ├── MockBuffer.ts
│ │ │ ├── MockPersistentStore.ts
│ │ │ ├── MockPluginManager.ts
│ │ │ ├── MockThemeLoader.ts
│ │ │ ├── index.ts
│ │ │ ├── neovim/
│ │ │ │ └── MockNeovimInstance.ts
│ │ │ └── neovim.ts
│ │ ├── Plugins/
│ │ │ └── Api/
│ │ │ └── ProcessTests.ts
│ │ ├── Renderer/
│ │ │ └── SpanTests.ts
│ │ ├── Services/
│ │ │ ├── AutoClosingPairsTests.ts
│ │ │ ├── Completion/
│ │ │ │ ├── CompletionProvidersTests.ts
│ │ │ │ ├── CompletionSelectorsTests.ts
│ │ │ │ ├── CompletionStoreTests.ts
│ │ │ │ ├── CompletionTests.ts
│ │ │ │ ├── CompletionUtilityTests.ts
│ │ │ │ └── CompletionsRequestorTests.ts
│ │ │ ├── Configuration/
│ │ │ │ ├── ConfigurationTests.ts
│ │ │ │ └── FileConfigurationProviderTests.ts
│ │ │ ├── Explorer/
│ │ │ │ ├── ExplorerFileSystemTests.ts
│ │ │ │ ├── ExplorerSelectorsTests.ts
│ │ │ │ └── ExplorerStoreTests.ts
│ │ │ ├── FileMappingsTests.ts
│ │ │ ├── Language/
│ │ │ │ ├── EditTests.ts
│ │ │ │ ├── LanguageEditorIntegrationTests.ts
│ │ │ │ └── LanguageManagerTests.ts
│ │ │ ├── Learning/
│ │ │ │ ├── Achievements/
│ │ │ │ │ └── AchievementsManagerTests.ts
│ │ │ │ └── Tutorial/
│ │ │ │ ├── TutorialGameplayManagerTests.ts
│ │ │ │ └── TutorialManagerTests.ts
│ │ │ ├── Menu/
│ │ │ │ └── MenuReducerTests.ts
│ │ │ ├── Notifications/
│ │ │ │ └── NotificationStoreTests.ts
│ │ │ ├── QuickOpen/
│ │ │ │ ├── FinderProcessTests.ts
│ │ │ │ ├── RegExFilterTests.ts
│ │ │ │ └── VSCodeFilterTests.ts
│ │ │ ├── Sneak/
│ │ │ │ └── SneakStoreTests.ts
│ │ │ ├── Snippets/
│ │ │ │ ├── OniSnippetTests.ts
│ │ │ │ ├── SnippetCompletionProviderTests.ts
│ │ │ │ ├── SnippetProviderTests.ts
│ │ │ │ ├── SnippetSessionTests.ts
│ │ │ │ └── SnippetVariableResolverTests.ts
│ │ │ ├── SyntaxHighlighting/
│ │ │ │ ├── SyntaxHighlightingReconcilerTests.ts
│ │ │ │ └── SyntaxHighlightingReducerTests.ts
│ │ │ ├── TokenColorsTests.ts
│ │ │ ├── TypingPredictionManagerTests.ts
│ │ │ ├── WindowManager/
│ │ │ │ ├── LinearSplitProviderTests.ts
│ │ │ │ ├── RelationalSplitNavigatorTests.ts.ts
│ │ │ │ ├── WindowManagerTests.ts
│ │ │ │ └── layoutFromSplitInfoTests.ts
│ │ │ └── Workspace/
│ │ │ └── WorkspaceConfigurationTests.ts
│ │ ├── Tabs/
│ │ │ └── TabsTest.tsx
│ │ ├── TestHelpers.ts
│ │ ├── UtilityTests.ts
│ │ └── neovim/
│ │ ├── NeovimBufferUpdateManagerTests.ts
│ │ ├── NeovimMarksTests.ts
│ │ ├── NeovimTokenColorSynchronizerTests.ts
│ │ └── ScreenWithPredictionsTest.ts
│ ├── testCoverageReporter.js
│ ├── testHelpers.js
│ ├── tsconfig.json
│ ├── tsconfig.test.json
│ ├── webpack.debug.config.js
│ ├── webpack.development.config.js
│ └── webpack.production.config.js
├── build/
│ ├── BuildSetupTemplate.js
│ ├── CopyIcons.js
│ ├── icon.icns
│ ├── script/
│ │ ├── CheckBinariesForBuild.js
│ │ ├── UploadDistributionBuildsToAzure.js
│ │ ├── appveyor-test.ps1
│ │ ├── install-reason.sh
│ │ ├── travis-build.sh
│ │ ├── travis-pack.sh
│ │ └── travis-test.sh
│ └── setup.template.iss
├── cli/
│ ├── linux/
│ │ └── oni.sh
│ ├── mac/
│ │ └── oni.sh
│ ├── src/
│ │ ├── cli.ts
│ │ └── cli_args.ts
│ ├── tsconfig.json
│ └── win/
│ └── oni.cmd
├── codecov.yml
├── configuration/
│ └── config.default.js
├── extensions/
│ ├── README.md
│ ├── clojure/
│ │ └── syntaxes/
│ │ └── clojure.tmLanguage.json
│ ├── csharp/
│ │ └── syntaxes/
│ │ └── csharp.tmLanguage.json
│ ├── css/
│ │ └── syntaxes/
│ │ └── css.tmLanguage.json
│ ├── elixir/
│ │ └── syntaxes/
│ │ ├── eex.tmLanguage.json
│ │ ├── elixir.tmLanguage.json
│ │ └── html(eex).tmLanguage.json
│ ├── go/
│ │ ├── README.md
│ │ └── syntaxes/
│ │ └── go.json
│ ├── html/
│ │ ├── package.json
│ │ └── snippets/
│ │ └── html.json
│ ├── images/
│ │ └── package.json
│ ├── java/
│ │ └── syntaxes/
│ │ └── Java.tmLanguage.json
│ ├── javascript/
│ │ ├── package.json
│ │ ├── snippets/
│ │ │ └── javascript.json
│ │ └── syntaxes/
│ │ ├── JavaScript.tmLanguage.json
│ │ └── JavaScriptReact.tmLanguage.json
│ ├── less/
│ │ └── syntaxes/
│ │ └── less.tmLanguage.json
│ ├── lua/
│ │ └── syntaxes/
│ │ └── lua.tmLanguage.json
│ ├── markdown/
│ │ └── syntaxes/
│ │ └── markdown.tmLanguage.json
│ ├── objective-c/
│ │ └── syntaxes/
│ │ ├── objective-c++.tmLanguage.json
│ │ └── objective-c.tmLanguage.json
│ ├── oni-plugin-markdown-preview/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.tsx
│ │ └── tsconfig.json
│ ├── oni-plugin-prettier/
│ │ ├── .eslintrc.json
│ │ ├── index.js
│ │ ├── package.json
│ │ └── requirePackage.js
│ ├── oni-plugin-quickopen/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── BookmarksSearch.ts
│ │ │ ├── QuickOpen.ts
│ │ │ ├── QuickOpenItem.ts
│ │ │ └── index.tsx
│ │ └── tsconfig.json
│ ├── php/
│ │ └── syntaxes/
│ │ ├── html.tmLanguage.json
│ │ └── php.tmLanguage.json
│ ├── python/
│ │ └── syntaxes/
│ │ └── python.tmLanguage.json
│ ├── reason/
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── snippets/
│ │ │ └── reason.json
│ │ └── syntaxes/
│ │ └── reason.json
│ ├── ruby/
│ │ └── syntaxes/
│ │ └── ruby.tmLanguage.json
│ ├── rust/
│ │ └── syntaxes/
│ │ └── rust.tmLanguage.json
│ ├── scss/
│ │ └── syntaxes/
│ │ └── scss.json
│ ├── shell/
│ │ └── syntaxes/
│ │ └── shell.tmLanguage.json
│ ├── swift/
│ │ └── syntaxes/
│ │ └── swift.tmLanguage.json
│ ├── theme-dracula/
│ │ ├── colors/
│ │ │ ├── dracula.json
│ │ │ └── dracula.vim
│ │ └── package.json
│ ├── theme-gruvbox/
│ │ ├── colors/
│ │ │ ├── gruvbox.vim
│ │ │ ├── gruvbox_dark.json
│ │ │ └── gruvbox_light.json
│ │ └── package.json
│ ├── theme-hybrid/
│ │ ├── colors/
│ │ │ ├── hybrid.vim
│ │ │ ├── hybrid_dark.json
│ │ │ └── hybrid_light.json
│ │ └── package.json
│ ├── theme-icons-seti/
│ │ ├── README.md
│ │ ├── icons/
│ │ │ └── seti-icon-theme.json
│ │ ├── package.json
│ │ └── thirdpartynotices.txt
│ ├── theme-nord/
│ │ ├── README.md
│ │ ├── colors/
│ │ │ ├── nord.json
│ │ │ └── nord.vim
│ │ └── package.json
│ ├── theme-onedark/
│ │ ├── colors/
│ │ │ ├── onedark.json
│ │ │ └── onedark.vim
│ │ └── package.json
│ ├── theme-solarized/
│ │ ├── colors/
│ │ │ ├── solarized8.vim
│ │ │ ├── solarized8_dark.json
│ │ │ └── solarized8_light.json
│ │ └── package.json
│ ├── typescript/
│ │ ├── package.json
│ │ ├── snippets/
│ │ │ └── typescript.json
│ │ └── syntaxes/
│ │ ├── TypeScript.tmLanguage.json
│ │ └── TypeScriptReact.tmLanguage.json
│ └── vue/
│ └── syntaxes/
│ └── vue.json
├── font-awesome/
│ ├── css/
│ │ └── font-awesome.css
│ └── fonts/
│ └── FontAwesome.otf
├── index.dev.html
├── index.html
├── jest.config.js
├── main/
│ ├── src/
│ │ ├── Log.ts
│ │ ├── ProcessLifecycle.ts
│ │ ├── WindowManager.ts
│ │ ├── installDevTools.ts
│ │ ├── main.ts
│ │ └── menu.ts
│ ├── test/
│ │ └── WindowManagerTests.ts
│ ├── tsconfig.json
│ └── tsconfig.test.json
├── package.json
├── preload.js
├── scripts/
│ ├── dev_webpack_loader.js
│ └── webm2gif.sh
├── test/
│ ├── CiTests.ts
│ ├── Demo.ts
│ ├── Manual.md
│ ├── ci/
│ │ ├── Api.Buffer.AddLayer.tsx
│ │ ├── Api.Overlays.AddRemoveTest.tsx
│ │ ├── Assert.ts
│ │ ├── AutoClosingPairsTest.ts
│ │ ├── AutoCompletionTest-CSS.ts
│ │ ├── AutoCompletionTest-HTML.ts
│ │ ├── AutoCompletionTest-Reason.ts
│ │ ├── AutoCompletionTest-TypeScript.ts
│ │ ├── Browser.LocationTest.ts
│ │ ├── ColorHighlight.BufferLayerTest.ts
│ │ ├── Common.ts
│ │ ├── Configuration.JavaScriptEditorTest.ts
│ │ ├── Configuration.TypeScriptEditor.CompletionTest.ts
│ │ ├── Configuration.TypeScriptEditor.NewConfigurationTest.ts
│ │ ├── Editor.BufferModifiedState.ts
│ │ ├── Editor.BuffersCursorTest.ts
│ │ ├── Editor.CloseTabWithTabModesTabsTest.ts
│ │ ├── Editor.ExternalCommandLineTest.ts
│ │ ├── Editor.NextPreviousErrorTest.ts
│ │ ├── Editor.OpenFile.PathWithSpacesTest.ts
│ │ ├── Editor.ScrollEventTest.ts
│ │ ├── Editor.TabModifiedState.ts
│ │ ├── Explorer.LocateBufferTest.ts
│ │ ├── IndentGuide.BufferLayerTest.tsx
│ │ ├── LargeFileTest.ts
│ │ ├── LargePasteTest.ts
│ │ ├── MarkdownPreviewTest.tsx
│ │ ├── Neovim.CallOniCommands.ts
│ │ ├── Neovim.InvalidInitVimHandlingTest.ts
│ │ ├── NoInstalledNeovim.config.js
│ │ ├── NoInstalledNeovim.ts
│ │ ├── OSX.WindowTitleTest.ts
│ │ ├── PaintPerformanceTest.config.js
│ │ ├── PaintPerformanceTest.ts
│ │ ├── PrettierPluginTest.ts
│ │ ├── QuickOpenTest.ts
│ │ ├── Regression.1251.NoAdditionalProcessesOnStartup.ts
│ │ ├── Regression.1295.UnfocusedWindowTest.ts
│ │ ├── Regression.1296.SettingColorsTest.ts
│ │ ├── Regression.1799.MacroApplicationTest.ts
│ │ ├── Regression.1819.AutoReadCheckTimeTest.ts
│ │ ├── Regression.2047.VerifyCanvasIsIntegerSize.ts
│ │ ├── Sidebar.ToggleSplitTest.ts
│ │ ├── Snippets.BasicInsertTest.ts
│ │ ├── StatusBar-Mode.ts
│ │ ├── TabBarSneakTest.ts
│ │ ├── TextmateHighlighting.DebugScopesTest.ts
│ │ ├── TextmateHighlighting.ScopesOnEnterTest.ts
│ │ ├── TextmateHighlighting.TokenColorOverrideTest.ts
│ │ ├── Theming.LightAndDarkColorsTest.ts
│ │ ├── Welcome.BufferLayerTest.ts
│ │ ├── WindowManager.ErrorBoundary.tsx
│ │ ├── Workspace.ConfigurationTest.ts
│ │ └── initVimPromptNotificationTest.ts
│ ├── collateral/
│ │ └── 1799_test.csv
│ ├── common/
│ │ ├── Oni.ts
│ │ ├── ensureProcessNotRunning.ts
│ │ ├── index.ts
│ │ └── runInProcTest.ts
│ ├── demo/
│ │ ├── DemoCommon.ts
│ │ ├── HeroDemo.ts
│ │ └── HeroScreenshot.ts
│ ├── setup/
│ │ └── WindowsInstallerTests.ts
│ └── tsconfig.json
├── tslint.json
├── ui-tests/
│ ├── BrowserView.test.tsx
│ ├── BufferManager.test.ts
│ ├── BufferScrollBar.test.tsx
│ ├── CommandLine.test.tsx
│ ├── ContextMenuComponent.test.tsx
│ ├── ErrorInfo.test.tsx
│ ├── ExplorerSplit.test.tsx
│ ├── ExplorerView.test.tsx
│ ├── ExternalMenus.test.tsx
│ ├── HighlightText.test.tsx
│ ├── NeovimBufferLayersView.test.tsx
│ ├── NodeView.test.tsx
│ ├── NotificationView.test.tsx
│ ├── QuickInfo.test.tsx
│ ├── SessionManager.test.tsx
│ ├── Sessions.test.tsx
│ ├── SidebarStore.test.ts
│ ├── Tabs.test.tsx
│ ├── Text.test.tsx
│ ├── TokenScorer.test.ts
│ ├── TokenThemeProvider.test.tsx
│ ├── VersionControl/
│ │ ├── Help.test.tsx
│ │ ├── VersionControlCommits.test.tsx
│ │ ├── VersionControlComponents.test.tsx
│ │ ├── VersionControlManager.test.tsx
│ │ ├── VersionControlPane.test.tsx
│ │ ├── VersionControlSectionTitle.test.tsx
│ │ ├── VersionControlStore.test.ts
│ │ ├── VersionControlView.test.tsx
│ │ └── __snapshots__/
│ │ ├── VersionControlComponents.test.tsx.snap
│ │ ├── VersionControlSectionTitle.test.tsx.snap
│ │ └── VersionControlView.test.tsx.snap
│ ├── VersionControlBlameLayer.test.tsx
│ ├── VimNavigator.test.tsx
│ ├── WelcomeCommandsView.test.tsx
│ ├── WelcomeView.test.tsx
│ ├── WindowTitleView.test.tsx
│ ├── __snapshots__/
│ │ ├── BrowserView.test.tsx.snap
│ │ ├── BufferScrollBar.test.tsx.snap
│ │ ├── CommandLine.test.tsx.snap
│ │ ├── ErrorInfo.test.tsx.snap
│ │ ├── ExternalMenus.test.tsx.snap
│ │ ├── NodeView.test.tsx.snap
│ │ ├── NotificationView.test.tsx.snap
│ │ ├── QuickInfo.test.tsx.snap
│ │ ├── Tabs.test.tsx.snap
│ │ ├── Text.test.tsx.snap
│ │ ├── WelcomeCommandsView.test.tsx.snap
│ │ ├── WelcomeView.test.tsx.snap
│ │ └── WindowTitleView.test.tsx.snap
│ ├── enzyme-adapter-react-16.d.ts
│ ├── jestsetup.ts
│ ├── mocks/
│ │ ├── CommandManager.ts
│ │ ├── Configuration.ts
│ │ ├── EditorManager.ts
│ │ ├── MenuManager.ts
│ │ ├── Notifications.ts
│ │ ├── Oni.ts
│ │ ├── PersistentSettings.ts
│ │ ├── SharedNeovimInstance.ts
│ │ ├── Sidebar.ts
│ │ ├── Statusbar.ts
│ │ ├── UserConfiguration.ts
│ │ ├── Utility.ts
│ │ ├── Workspace.ts
│ │ ├── electronMock.ts
│ │ └── keyboardLayout.ts
│ ├── tsconfig.react.json
│ └── welcomeLayer.test.tsx
├── vim/
│ ├── core/
│ │ ├── colors/
│ │ │ └── Monokai.vim
│ │ ├── oni-core-interop/
│ │ │ ├── plugin/
│ │ │ │ └── init.vim
│ │ │ └── readme.md
│ │ ├── oni-core-statusbar/
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ ├── oni-plugin-buffers/
│ │ │ ├── index.js
│ │ │ ├── jsconfig.json
│ │ │ └── package.json
│ │ ├── oni-plugin-git/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.tsx
│ │ │ │ └── vcs.ts
│ │ │ └── tsconfig.json
│ │ ├── oni-plugin-reasonml/
│ │ │ ├── ftdetect/
│ │ │ │ └── reason.vim
│ │ │ ├── indent/
│ │ │ │ └── reason.vim
│ │ │ └── syntax/
│ │ │ └── reason.vim
│ │ └── oni-plugin-typescript/
│ │ ├── .gitignore
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── CodeActions.ts
│ │ │ ├── Completion.ts
│ │ │ ├── Definition.ts
│ │ │ ├── FindAllReferences.ts
│ │ │ ├── Formatting.ts
│ │ │ ├── LightweightLanguageClient.ts
│ │ │ ├── QuickInfo.ts
│ │ │ ├── Rename.ts
│ │ │ ├── SignatureHelp.ts
│ │ │ ├── Symbols.ts
│ │ │ ├── TypeScriptConfigurationEditor.ts
│ │ │ ├── TypeScriptServerHost.ts
│ │ │ ├── Types.ts
│ │ │ ├── Utility.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.test.json
│ ├── default/
│ │ └── bundle/
│ │ └── oni-vim-defaults/
│ │ └── plugin/
│ │ └── init.vim
│ └── noop.vim
└── webview_preload/
├── src/
│ └── index.ts
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Declare text files that will always have LF line endings on checking
oni eol=lf
# Ignore the yarn library from Linguist, for the Github Language Stats.
lib/yarn/* linguist-vendored=true
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!-- Want this issue prioritized? Please consider supporting the project and becoming an insider!
👉 https://www.onivim.io/Insiders -->
**Oni Version:**
**Neovim Version (Linux only):**
**Operating System:**
**Issue:**
**Expected behavior:**
**Actual behavior:**
**Steps to reproduce:**
================================================
FILE: .github/config.yml
================================================
# Comment to be posted to on first time issues
newIssueWelcomeComment: >
Hello and welcome to the Oni repository! Thanks for opening your first issue here. To help us out, please make sure to include as much detail as possible - including screenshots and logs, if possible.
backers:
- 78856
- 1359421
- 4650931
- 13532591
- 5097613
- 22454918
- 347552
- 977348
- 28748
- 2835826
- 515720
- 124171
- 230476
- 10102132
- 10038688
- 817509
- 163128
- 4762
- 933251
- 3974037
- 141159
- 10263
- 3117205
- 5697723
- 6803419
- 1718128
- 2042893
- 14060883
- 244396
- 8832878
- 5127194
- 1764368
- 468548
- 2318955
- 28788713
- 1491574
- 6972449
- 20133970
- 5804765
- 360703
- 120710
- 4607311
- 7727602
- 9206426
- 119977
- 14045559
- 284789
- 2899448
- 2766423
================================================
FILE: .gitignore
================================================
# Yarn
yarn.lock
.DS_Store
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Python
.mypy_cache
# Local app data
$LOCALAPPDATA
# Output
lib
lib_test
dist
s3_dist
### https://raw.github.com/github/gitignore/2b3b1f428fb84dc4ba3ad2307ec44af3c5799848/Node.gitignore
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
build/*.ico
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# npm package-lock files
package-lock.json
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
### https://raw.github.com/github/gitignore/2b3b1f428fb84dc4ba3ad2307ec44af3c5799848/Global/Linux.gitignore
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### https://raw.github.com/github/gitignore/2b3b1f428fb84dc4ba3ad2307ec44af3c5799848/Global/macOS.gitignore
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### https://raw.github.com/github/gitignore/2b3b1f428fb84dc4ba3ad2307ec44af3c5799848/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# OCaml / Reason
.merlin
yarn.lock
# Webpack stats file
stats.json
# User Notes
.notes
================================================
FILE: .gitmodules
================================================
[submodule "vim/default/bundle/targets.vim"]
path = vim/default/bundle/targets.vim
url = https://github.com/wellle/targets.vim
[submodule "vim/default/bundle/vim-commentary"]
path = vim/default/bundle/vim-commentary
url = https://github.com/tpope/vim-commentary
[submodule "vim/default/bundle/vim-unimpaired"]
path = vim/default/bundle/vim-unimpaired
url = https://github.com/tpope/vim-unimpaired
[submodule "vim/default/bundle/vim-surround"]
path = vim/default/bundle/vim-surround
url = https://github.com/tpope/vim-surround.git
[submodule "vim/core/typescript-vim"]
path = vim/core/typescript-vim
url = https://github.com/leafgarland/typescript-vim
================================================
FILE: .npmignore
================================================
# Empty .npmignore to allow for including .gitignore'd built files
================================================
FILE: .nvmrc
================================================
9
================================================
FILE: .oni/config.js
================================================
// For more information on customizing Oni,
// check out our wiki page:
// https://github.com/onivim/oni/wiki/Configuration
const activate = oni => {
console.log("Oni config activated")
}
const deactivate = () => {
console.log("Oni config deactivated")
}
module.exports = {
activate,
deactivate,
"workspace.testFileMappings": [
{
sourceFolder: "browser/src",
mappedFolder: "browser/test",
mappedFileName: "${fileName}Tests.ts",
templateFilePath: ".oni/templates/UnitTestTemplate.ts.template",
},
],
}
================================================
FILE: .oni/templates/UnitTestTemplate.ts.template
================================================
/**
* ${TM_FILENAME_BASE}.ts
*/
import * as assert from "assert"
describe("${TM_FILENAME_BASE}", () => {
it("${1:tests}", async () => {
${2:assert.ok(false, "fail")}
${0}
})
})
================================================
FILE: .prettierignore
================================================
package.json
vim/core/oni-plugin-typescript/package.json
lib/yarn/*
================================================
FILE: .prettierrc
================================================
{
"printWidth": 100,
"semi": false,
"singleQuote": false,
"tabWidth": 4,
"trailingComma": "all"
}
================================================
FILE: .travis.yml
================================================
sudo: required
dist: trusty
language: node_js
branches:
only:
- master
- /^release.*/
cache:
directories:
- .oni_build_cache
matrix:
include:
- os: linux
sudo: required
dist: trusty
node_js: 8
- os: osx # OSX 10.12
node_js: 8
- os: osx # OSX 10.11
node_js: 8
osx_image: xcode8
allow_failures:
- osx_image: xcode8
addons:
apt:
packages:
- libxkbfile-dev
- libgnome-keyring-dev
- icnsutils
- graphicsmagick
- xz-utils
- rpm
- bsdtar
before_install:
- |
# Get the files modified in this commit, and check there is
# actual code changes made. If there isn't, stop the build.
MODIFIED_FILES=$(git diff --name-only $TRAVIS_COMMIT_RANGE)
if ! echo ${MODIFIED_FILES} | grep -qvE '(\.md$)/'; then
echo "Only documents were updated, stopping..."
exit
fi
install:
- npm install -g yarn@1.9.4
# Remove problematic version of yarn
- rm -rf ~/.yarn/bin
- yarn --version
- which yarn
- yarn install
script:
- npm run check-cached-binaries
- ./build/script/install-reason.sh
- ./build/script/travis-build.sh
- travis_wait ./build/script/travis-pack.sh
- ./build/script/travis-test.sh
deploy:
- provider: s3
access_key_id: AKIAIYMATI2CEFTHPBOQ
secret_access_key:
secure: S4f/aczEABGAMKk2tmVSkoGx+T2TLPmz5z6x6RKaM+eDmAaVSAELlIj1eAz6Tu2lv3jz+cpyAIISZNC/phORsJWwzbSZHVycLrMG0N3fDTqKFxu1fl6L3b3exRe9SiKXug73ZvHfktzd/XfRcgZKop4qgrwGiM57m0ZuZb/j1LkgjytTuvNAUxXbA84I8LZs/NhY17XuXq+KPlGElIHy3UFoGqQ8pBnTypkIU5rQTsoeAxXLBE8JAFfz+nBGZ7dx6OMbQcKX5jKh/gR3vk+4aTgV8gNE2Zp24ErjSqF2zly/gP9nE2DpfR7jqpZVHnb/v+OEjRDS80tLhPo8Dbibzwt2ZZNADpYBjSGtphwAmq4DCvJ7ORExOB5+O3wmXKQGdItyBTS7sW44n6BTyv87WxWuCaSDQ9QaO9PrbJdN5YGEYeRxSTM7Mn0t72IILkfFCUeSg6fl6tFs9iWIj5zltbxH1GQsRpA8j1Idg4O+894KnQABtw/YKh6rrdeYS9y/100qAjtV6qYyiP2IdPqMWGuasOiz87q3CQ8Ejd7uhiTjAaINVqos+0k04Yf5+rT4MqkeXnYFzjXuXcqDlpq6yJIZv3aD+PMSlZi2WmTYnPJXQFndHo/x9FhEh90UF9WdO5S27ySRSo8XQT4DyL3ToPkqz8y0slNmaNqiqMouQAU=
bucket: oni-media
local-dir: dist/media
acl: public_read
region: us-west-2
skip_cleanup: true
on:
condition: $TRAVIS_OS_NAME = osx
repo: onivim/oni
- provider: releases
api_key:
secure: qB2KX7c9gRf9HDNetUVJOSa1Lo81QJiukOChOEzGUkYzD/et/2uNgzl0AQX0jB6aOYNwtZAxTd/ON3TTbEWh90o+R1PmQUgQCZ8xIFjOwnQmuHFp4hHoOWNI/ahmQ3W5UD+gmkV5YTRDMfuNnRjraDcQ5R6744Gii4zHGBwnJQsKVh65rxChHfkAJ1WEoX0lUbEM9Veyof4W+xLEgf45eDNvG3fz2y11D2qcvJNckVdvaYIWFwVrefcmofnQvLoWhs8gs6tLBKxaieZ4DcKH+Q5ux+t2VT8LYOR6gkCzuBgUbGUB+AlfCrNR2T7H3LLONIbUMB8/3sF0+oojj9tXPoagHzmwL2gnE7esLxIXc90LbAMpzLwMDvOgA8YEIsgKKtM92BqMK3Pv2clDv+Wmu8Al/QOU8v4Zj5dF09pqa8VM95xPx8t5Harrz+AN6HhZtzoqceooCBtJaGDb5jRdIjWtg4LkJN82mMuNAcbTLUotWp9UxJyqiS+WLrF4cIjPBoq9AAay8XnqLJHpjLGq2Mfp8i9qRFJPr7m2a1WozUUL5/s8Fb7oVOm6rYodXP3ZrdF+0OFMMKoaMfxOg2IhKRIk+S6XYp64i8J4lOFJ0W0dg0ap+f3PsWTYaA7YQ+/SMSv0zsZdrprT80i/Mx5F5HjiljX6GDmanZCdEG1b2a8=
file_glob: true
file:
- dist/*.dmg
- dist/*.zip
skip_cleanup: true
on:
condition: $TRAVIS_OS_NAME = osx
tags: true
repo: onivim/oni
- provider: releases
api_key:
secure: qB2KX7c9gRf9HDNetUVJOSa1Lo81QJiukOChOEzGUkYzD/et/2uNgzl0AQX0jB6aOYNwtZAxTd/ON3TTbEWh90o+R1PmQUgQCZ8xIFjOwnQmuHFp4hHoOWNI/ahmQ3W5UD+gmkV5YTRDMfuNnRjraDcQ5R6744Gii4zHGBwnJQsKVh65rxChHfkAJ1WEoX0lUbEM9Veyof4W+xLEgf45eDNvG3fz2y11D2qcvJNckVdvaYIWFwVrefcmofnQvLoWhs8gs6tLBKxaieZ4DcKH+Q5ux+t2VT8LYOR6gkCzuBgUbGUB+AlfCrNR2T7H3LLONIbUMB8/3sF0+oojj9tXPoagHzmwL2gnE7esLxIXc90LbAMpzLwMDvOgA8YEIsgKKtM92BqMK3Pv2clDv+Wmu8Al/QOU8v4Zj5dF09pqa8VM95xPx8t5Harrz+AN6HhZtzoqceooCBtJaGDb5jRdIjWtg4LkJN82mMuNAcbTLUotWp9UxJyqiS+WLrF4cIjPBoq9AAay8XnqLJHpjLGq2Mfp8i9qRFJPr7m2a1WozUUL5/s8Fb7oVOm6rYodXP3ZrdF+0OFMMKoaMfxOg2IhKRIk+S6XYp64i8J4lOFJ0W0dg0ap+f3PsWTYaA7YQ+/SMSv0zsZdrprT80i/Mx5F5HjiljX6GDmanZCdEG1b2a8=
file_glob: true
file:
- dist/*.deb
- dist/*.rpm
- dist/*.tar.gz
skip_cleanup: true
on:
condition: $TRAVIS_OS_NAME = linux
tags: true
repo: onivim/oni
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
// Debug files that configure Electron (main.js, Menu.js, etc.)
"name": "Oni Main Process",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "${workspaceRoot}/lib/main/src/main.js",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
},
"runtimeArgs": ["--enable-logging"],
"console": "internalConsole"
},
{
// Debug typescript files
// (must run `npm run build-debug` first to generate bundle.js.map)
"name": "Oni Application",
"type": "chrome", // <-- requires Extension "Debugger for Chrome"
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
},
"runtimeArgs": ["--enable-logging", "${workspaceRoot}/lib/main/src/main.js"],
"webRoot": "${workspaceRoot}",
"sourceMaps": true,
"sourceMapPathOverrides": {
"webpack:///./*": "${webRoot}/*"
}
}
]
}
================================================
FILE: .yarnrc
================================================
--add.ignore-engines true
================================================
FILE: @types/color-normalize/index.d.ts
================================================
type ColorInput =
| string
| Int8Array
| Int16Array
| Int32Array
| Uint8Array
| Uint16Array
| Uint32Array
| Float32Array
| Float64Array
| Array
| Uint8ClampedArray
declare function colorNormalize(color: ColorInput, type: "float"): float[]
declare function colorNormalize(color: ColorInput, type: "array"): float[]
declare function colorNormalize(color: ColorInput, type: "int8"): Int8Array
declare function colorNormalize(color: ColorInput, type: "int16"): Int8Array
declare function colorNormalize(color: ColorInput, type: "int32"): Int8Array
declare function colorNormalize(color: ColorInput, type: "uint"): Uint8Array
declare function colorNormalize(color: ColorInput, type: "uint8"): Uint8Array
declare function colorNormalize(color: ColorInput, type: "uint16"): Uint8Array
declare function colorNormalize(color: ColorInput, type: "uint32"): Uint8Array
declare function colorNormalize(color: ColorInput, type: "float32"): Float32Array
declare function colorNormalize(color: ColorInput, type: "float64"): Float64Array
declare function colorNormalize(color: ColorInput, type: "uint_clamped"): Uint8ClampedArray
declare function colorNormalize(color: ColorInput, type: "uint8_clamped"): Uint8ClampedArray
declare function colorNormalize(color: ColorInput): float[]
declare module "color-normalize" {
export default colorNormalize
}
================================================
FILE: @types/font-manager/index.d.ts
================================================
type FontWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
type FontWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
interface QueryFontDescriptor {
postscriptName?: string
family?: string
style?: string
weight?: FontWeight
width?: FontWidth
italic?: boolean
monospace?: boolean
}
interface ResultFontDescriptor {
path: string
postscriptName: string
family: string
style: string
weight: FontWeight
width: FontWidth
italic: boolean
monospace: boolean
}
interface FontManager {
getAvailableFonts: (callback: (availableFonts: ResultFontDescriptor[]) => void) => void
getAvailableFontsSync: () => ResultFontDescriptor[]
findFonts: (
fontDescriptor: QueryFontDescriptor,
callback: (foundFonts: ResultFontDescriptor[]) => void,
) => void
findFontsSync: (fontDescriptor: QueryFontDescriptor) => ResultFontDescriptor[]
findFont: (
fontDescriptor: QueryFontDescriptor,
callback: (foundFont: ResultFontDescriptor | null) => void,
) => void
findFontSync: (fontDescriptor: QueryFontDescriptor) => ResultFontDescriptor | null
substituteFont: (
postscriptName: string,
text: string,
callback: (replacement: ResultFontDescriptor[]) => void,
) => void
substituteFontSync: (postscriptName: string, text: string) => ResultFontDescriptor[]
}
declare module "font-manager" {
declare const fontManager: FontManager
export default fontManager
}
================================================
FILE: ACCOUNTING.md
================================================
# ONI
## Accounting
This file will contain a monthly report including:
* Incoming contributions
* How the contributions are distributed, in accordance with the project's goals
The initial plan for allocation is as follows:
* 10% - Vim - Contribute to Bram's charity of choice
* 20% - Neovim Development
* 35% - Paid to contributors via bounties
* 35% - Paid to maintainer
Your contributions help keep this project alive!
### March 2017
IN-PROGRESS
================================================
FILE: BACKERS.md
================================================
# Sponsors & Backers
Oni is an MIT-licensed open-source project. It's an independent project without the backing of a large company, and the ongoing development is made possible by our backers.
Thanks you to all our backers for making Oni possible!
## VIP Backers via BountySource
* @jordwalke
* @mhartington
* @MikaAK
* @emolitor
## VIP Backers via Patreon
* @mikl
* Tom Boland
* Simon Smith
* [JavaScript.Ninja](https://www.patreon.com/search?q=javascript.ninja)
* Mika Kalathil
* Franky Chung
* Jackie McGhee
## Backers via BountySource
* @adambard
* @akin_so
* @ayohan
* @badosu
* @josemarluedke
* @napcode
* @robtrac
* @rrichardson
* @sbuljac
* @parkerault
* @city41
* @nithesh
* @erandac
* @appelgriebsch
* Mateusz Wieloch
## Backers via PayPal
* @mchalkley
* @am2605
* Nathan Ensmenger
* Cesar Avitia
## Backers via OpenCollective
* Tal Amuyal
* Akinola Sowemimo
* Martijn Arts
* Amadeus Folego
* Kiyoshi Murata
* @Himura2la
* Frederick Gnodtke
## Backers via Patreon
* @bennettrogers
* @muream
* Johnnie Hård
* @robin-pham
* Ryan Campbell
* Balint Fulop
* Quasar Jarosz
* Channing Conger
* Clinton Bloodworth
* Lex Song
* Paul Baumgart
* Kaiden Sin
* Troy Vitullo
* Leo Critchley
* Patrick Massot
* Jerome Pellois
* Wesley Moore
* Kim Fiedler
* Nicolaus Hepler
* Nick Price
* Domenico Maisano
* Daniel Polanco
* Eric Hall
* Dimas Cyriaco
* Carlos Coves Prieto
* Bryan Germann
* James Herdman
* Wayan Jimmy
* Alex
* Phil Plückthun
* Norikazu Hayashi
* Paul Anderson
* Thomas Frick
* LinuxLefty
* Leon Bogaert
* Jorrit Siebelink
* Zac Sims
* Doug Beney
* Aditya Gudimella
* Michal Hantl
* Lennaert Meijvogel
* Jonas Strømsodd
* Trevor Barton
* Tercio de Melo
* Jon Plotner
* Patrick Ball
* Grégory Reinbold
* Antti Holvikari
* Christopher Auer
* Daniel Falk
* David Froger
* Dominic Saadi
* Gianni Chiappetta
* Jake Swanson
* James Herdman
* Jannis Kaiser
* Kosuke Hamada
* Lance
* Marius Gripsgard
* Matti Klock
* Selwyn
* Saito Nakamura
* artalar
* Jeff Hertzler
* Drew Lazzeri
* Bob Gunion
* Daniel Blanco
* Philip Larson
* Josemar Luedke
* Mateusz Wieloch
* Marc Agbanchenou
* Andrew Myers
* Corey T Kump
* Claudia Hardman
* Krakonos
* sschwarzer
* Andrew Cobby
* Imobach González Sosa
* Devin
* Antonio de Jesus Ochoa Solano
* Parker Ault
* Rauan Mayemir
* Matt Rockwell
* Anatoly
* Kino
* Andrey Popp
* James Atkinson
* Yohan Lee
* Sime Buljac
* Brian Recchia
* Brandon Ubben
* Devin
* sschwarzer
* Logan Call
* Adam Recvlohe
* Shawn MacIntyre
* Alexandre Mounton-Brady
* Todd Epple
* Jacob Mischka
* Javier Chavarri
* David Izquierdo
* Richou Degenne
* Tyler Compton
* Marcos Ojeda
* Daniel Martinez
* Anthony Mittaz
* Yohanes Bandung
* Jaap Frölich
* Aaron Franks
* Adam Howard
* Jeff See
* آرين دانشور
* Alpha Shuro
* Sundeep Malladi
* Sylvan
* Vitezslav Homolka
* Jens Aronsson
* Benjie Gillam
* Christophe Riolo
* Jih-Chi Lee
* Paul Naranja
* Krisztián Szegi
* Karlin Fox
* Wayne Maurer
* Ragnar Hardarson
* Andrew Herron
* TxH
* Richard Feldman
* ELLIOTCABLE
* Alexey Alekhin
* Gal Schlezinger
* Michael Jackson
* Tim Gebauer
* David Gregory
* Tony André Haugen
* Matthieu Tabuteau
* Rich Dean
* Dmytro Gladkyi
* Brett Eisenberg
* Oswaldo Caballero
* Goku
* Sawyer Bergeron
* Igor Matuszewski
* Visate
* Edward Vetter-Drake
* Steven Volocyk
* Danny Martini
* Mitchell Hanberg
<a href="https://opencollective.com/oni/tiers/backer/0/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/0/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/1/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/1/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/2/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/2/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/3/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/3/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/4/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/4/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/5/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/5/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/6/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/6/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/7/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/7/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/8/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/8/avatar.png"></a>
<a href="https://opencollective.com/oni/tiers/backer/9/website" target="_blank"><img src="https://opencollective.com/oni/tiers/backer/9/avatar.png"></a>
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at admin@onivim.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
# Contribute
## Introduction
First, thank you for considering contributing to oni! It's people like you that make the open source community such a great community! 😊
We welcome any type of contribution, not only code. You can help with
* **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
* **Marketing**: writing blog posts, howto's, printing stickers, ...
* **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
* **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
* **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/oni).
## Your First Contribution
Working on your first Pull Request? You can learn how from this _free_ series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
## Submitting code
Any code change should be submitted as a pull request. The description should explain what the code does and give steps to execute it. The pull request should also contain tests. We welcome and appreciate pull requests!
## Code review guidelines
* Keep PRs **small and scoped**. The bigger the pull request, the longer it will take to review and merge. Break down large pull requests into smaller incremental chunks - this will help catch issues earlier and be easier on both you and the maintainer.
* Following from the previous bullet point, **do not include unrelated changes in a PR**. It can be tempting to include extra styling changes or additional functionality, but these should be added as separate PRs.
* Think of each PR as **improving the quality of the codebase**. Codebases tend towards entropy and disorder unless actively managed - make sure that your change moves the quality needle in the right direction. This can take a variety of forms, including adding test coverage, reducing coupling, etc. _As we are a small team moving fast, we cannot afford to accumulate technical debt._
* If there is ambiguity in terms of design, architecture, or implementation, it's best to get **feedback before implementing**, to save both you and the maintainer time. If you're not sure, feel free to ask!
* For your first few PRs, **don't try and change the world** - pick some small issues and get familiar with the codebase. Then, work your way up to bigger issues - this will set you up for success.
PRs require approval from one other person, either a maintainer or a contributor. Keep in mind that when you approve code, you are accountable for it, too! Reviewers are the gatekeepers of quality and ensuring adherence to the guidelines above.
## Financial contributions
We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/oni).
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
### Bounties
The primary allotment of our [open collective](https://opencollective.com/oni) budget is dedicated to bounties. Developing features and fixing bugs is a lot of work, and those go directly to the developers doing this work via bounties. It is the role of the _maintainer_ to set bounties and clear completion criteria. Issues that have a bounty associated with them will have a `bounty` label as well as an amount, ie, `bounty-50` means a $50 bounty.
* Guidelines:
* The fix for the bug/feature/issue _MUST_ be complete and _MUST_ be covered by tests to be eligible for a bounty.
* Any associated documentation relevant to the bug/feature _MUST_ be updated.
* If you begin working on an issue with an associated bounty, open a PR with "WIP" and the bug number in the title, as well as reference the issue #. This is important to reduce duplicate work.
#### Claiming a bounty
* Upon completion of an issue with an associated bounty, bounties are payable by [Submitting an Expense](https://opencollective.com/oni/expenses/new) on our [OpenCollective](https://opencollective.com/oni). Note that OpenCollective requires a PDF or Photo of an expense form for an expense claim to be accepted - more information, including an example expense form can be found [here](https://opencollective.com/faq#expense). Check out our [expenses](https://opencollective.com/oni/expenses#) page for an example.
* A collaborator will approve the expense once we have verified it meets the criteria outlined above (complete fix, covered by tests, associated documentation updated)
If you questions about the guidelines, please don't hesitate to contact the maintainer.
## Roles
There are various roles and responsibilities in managing an open-source project. Users that are active and have a positive impact on the project and community will be recognized and have the option of assuming additional responsibilities.
* **Maintainer** - A maintainer communicates goals and drives the vision for the project. The maintainer is responsible for breaking down hurdles and supporting contributors. In addition, the maintainer triages issues, produces releases, assigns bounties, and establishes completion criteria. Today, there is one maintainer, but that isn't a strict requirement.
* **Collaborator** - A collaborator is an established member of the project that is recognized for their impact and contributions. They can triage and close issues, approve PRs from other contributors / collaborators, and can approve expenses on our [open collective](https://opencollective.com/oni)
* **Contributor** - A contributor is a developer that has submitted a successful PR for the project.
### Becoming a collaborator
A collaborator is a contributor who has been recognized for the impact they've had on the project, over a sustained period of time. In general, this means the following:
* **Supporting the community** - helping others in issues and chat, supporting new developers, creating a positive and supportive environment.
* **Technical impact** - involvement in a core technical piece of the editor, or a broad impact on the ecosystem.
* **Positive and collaborative mindset** - creating good vibes, willingness to give and receive constructive feedback, being a team player.
## Questions
If you have any questions, create an [issue](issue) (protip: do a quick search first to see if someone else didn't ask the same question before!).
You can also reach us at hello@oni.opencollective.com.
## Credits
### Contributors
Thank you to all the people who have already contributed to oni!
<a href="graphs/contributors"><img src="https://opencollective.com/oni/contributors.svg?width=890" /></a>
### Backers
Thank you to all our backers! [[Become a backer](https://opencollective.com/oni#backer)]
<a href="https://opencollective.com/oni#backers" target="_blank"><img src="https://opencollective.com/oni/backers.svg?width=890"></a>
### Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/oni#sponsor))
<a href="https://opencollective.com/oni/sponsor/0/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/1/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/2/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/3/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/4/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/5/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/6/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/7/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/8/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/oni/sponsor/9/website" target="_blank"><img src="https://opencollective.com/oni/sponsor/9/avatar.svg"></a>
<!-- This `CONTRIBUTING.md` is based on @nayafia's template https://github.com/nayafia/contributing-template -->
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2016
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
---
__NOTE:__ This repository is unmaintained - we are focusing on [Onivim 2](https://github.com/onivim/oni2) and [libvim](https://github.com/onivim/libvim).
---
<p align="center">
<img src="./assets/oni-header.png" alt="Logo">
<h3 align="center">Modern Modal Editing</h3>
</p>
<p align="center">
<a href="https://travis-ci.org/onivim/oni">
<img src="https://travis-ci.org/onivim/oni.svg?branch=master" alt="Build Status">
</a>
<a href="https://ci.appveyor.com/project/oni/oni">
<img src="https://ci.appveyor.com/api/projects/status/s13bs7ail9ihkpnm?svg=true" alt="Build Status">
</a>
<a href="https://codecov.io/gh/onivim/oni">
<img src="https://codecov.io/gh/onivim/oni/branch/master/graph/badge.svg" alt="codecov">
</a>
</p>
<p align="center">
<a href="https://discord.gg/7maEAxV">
<img src="https://img.shields.io/discord/417774914645262338.svg" alt="Join the chat on discord!">
</a>
<a href="https://github.com/onivim/oni/releases">
<img src="https://img.shields.io/github/downloads/onivim/oni/total.svg" alt="Total Downloads">
</a>
</p>
## Introduction
Oni is a new kind of editor, focused on maximizing productivity - combining _modal editing_ with features you expect in modern editors. Oni is built with [neovim](https://github.com/neovim/neovim), and inspired by [VSCode](https://github.com/Microsoft/vscode), [Atom](https://atom.io/), [LightTable](http://lighttable.com/), and [Emacs](https://www.gnu.org/software/emacs/)
The vision of Oni is to build an editor that allows you to go from _thought to code_ as easily as possible - bringing together the raw editing power of Vim, the feature capabilities of Atom/VSCode, and a powerful and intuitive extensibility model - wrapped up in a beautiful package.
<p align="center">
<img src="https://user-images.githubusercontent.com/13532591/36127305-9c7b6b80-1011-11e8-85dd-0345788c0b56.png"/>
</p>
Check out [Releases](https://github.com/onivim/oni/releases) for the latest binaries, or [Build Oni](https://github.com/onivim/oni/wiki/Development) from source. Consider making a donation via [OpenCollective](https://opencollective.com/oni) [BountySource](https://salt.bountysource.com/teams/oni) if you find this project useful!
## Features
Oni brings several IDE-like integrations to neovim:
* [Embedded Browser](https://github.com/onivim/oni/wiki/Features#embedded-browser)
* [Quick Info](https://github.com/onivim/oni/wiki/Features#quick-info)
* [Code Completion](https://github.com/onivim/oni/wiki/Features#code-completion)
* [Syntax / Compilation Errors](https://github.com/onivim/oni/wiki/Features#syntax--compilation-errors)
* [Fuzzy Finding](https://github.com/onivim/oni/wiki/Features#fuzzy-finder)
* [Status Bar](https://github.com/onivim/oni/wiki/Features#status-bar)
* [Interactive Tutorial](https://github.com/onivim/oni/wiki/Features#interactive-tutorial)
And more coming - check out our [Roadmap](https://github.com/onivim/oni/wiki/Roadmap)
Oni is cross-platform and supports Windows, Mac, and Linux.
> If you're a Vim power user, and don't need all these features, check out our [minimal configuration](https://github.com/onivim/oni/wiki/How-To:-Minimal-Oni-Configuration).
## Installation
We have installation guides for each platform:
* [Windows](https://github.com/onivim/oni/wiki/Installation-Guide#windows)
* [Mac](https://github.com/onivim/oni/wiki/Installation-Guide#mac)
* [Linux](https://github.com/onivim/oni/wiki/Installation-Guide#linux)
The latest binaries are available on our [Releases](https://github.com/onivim/oni/releases) page, and if you'd prefer to build from source, check out our [Development](https://github.com/onivim/oni/wiki/Development) guide.
## Goals
The goal of this project is to provide both the full-fledged Vim experience, with no compromises, while pushing forward to enable new productivity scenarios.
* **Modern UX** - The Vim experience should not be compromised by terminal limitations.
* **Rich plugin development** - using JavaScript, instead of VimL.
* **Cross-platform support** - across Windows, OS X, and Linux.
* **Batteries included** - rich features are available out of the box - minimal setup needed to be productive.
* **Performance** - no compromises, Vim is fast, and Oni should be fast too.
* **Ease Learning Curve** - without sacrificing the Vim experience.
Vim is an incredible tool for manipulating _text_ at the speed of thought. With a composable, modal command language, it is no wonder that Vim usage is still prevalent today.
However, going from thought to _code_ has some different challenges than going from thought to _text_. Code editors today provide several benefits that help to reduce **cognitive load** when writing code, and that benefit is tremendously important - not only in terms of pure coding efficiency and productivity, but also in making the process of writing code enjoyable and fun.
The goal of this project is to give an editor that gives the best of both worlds - the power, speed, and flexibility of using Vim for manipulating text, as well as the rich tooling that comes with an IDE. We want to make coding as efficient, fast, and fun as we can!
## Documentation
* Check out the [Wiki](https://github.com/onivim/oni/wiki) for documentation on how to use and modify Oni.
* [FAQ](https://github.com/onivim/oni/wiki/FAQ)
* [Roadmap](https://github.com/onivim/oni/wiki/Roadmap)
## Available Plugins
Some available plugins created by Oni users are listed below (if you'd like to add your
plugin to this list please create a PR updating this **README** with the details).
* [Oni Touchbar Plugin](https://github.com/jordan-arenstein/oni-plugin-touchbar) - by [jordan-arenstein](https://github.com/jordan-arenstein?tab=overview&from=2018-07-01&to=2018-07-31)
* [quickFind](https://github.com/marene/quickFind) - by [marene](https://github.com/marene)
* Themes
* [Night Owl](https://github.com/Akin909/oni-theme-night-owl)
## Contributing
There many ways to get involved & contribute to Oni:
* Thumbs up existing [issues](https://github.com/onivim/oni/issues) if they impact you.
* [Create an issue](https://github.com/onivim/oni/issues) for bugs or new features.
* Review and update our [documentation](https://github.com/onivim/oni/wiki).
* Try out the latest [released build](https://github.com/onivim/oni/releases).
* Help us [develop](https://github.com/onivim/oni/wiki/Development):
* Review [PRs](https://github.com/onivim/oni/pulls)
* Submit a bug fix or feature
* Add test cases
* Create a blog post or YouTube video
* Follow us on [Twitter](https://twitter.com/oni_vim)
## Acknowledgements
Oni is an independent project and is made possible by the support of some exceptional people. Big thanks to the following people for helping to realize this project:
* the [neovim team](https://neovim.io/), especially [justinmk](https://github.com/justinmk) and [tarruda](https://github.com/tarruda) - Oni would not be possible without their vision
* [jordwalke](https://github.com/jordwalke) for his generous support, inspiration, and ideas. And React ;)
* [keforbes](https://github.com/keforbes) for helping to get this project off the ground
* [Akin909](https://github.com/Akin909) for his extensive contributions
* [CrossR](https://github.com/CrossR) for polishing features and configurations
* [Cryza](https://github.com/Cryza) for the webgl renderer
* [tillarnold](https://github.com/tillarnold) for giving us the `oni` npm package name
* [mhartington](https://github.com/mhartington) for his generous support
* [badosu](https://github.com/badosu) for his support, contributions, and managing the AUR releases
* All our current monthly [sponsors](https://salt.bountysource.com/teams/oni/supporters) and [backers](BACKERS.md)
* All of our [contributors](https://github.com/onivim/oni/graphs/contributors) - thanks for helping to improve this project!
Several other great neovim front-end UIs [here](https://github.com/neovim/neovim/wiki/Related-projects) served as a reference, especially [NyaoVim](https://github.com/rhysd/NyaoVim) and [VimR](https://github.com/qvacua/vimr). I encourage you to check those out!
Thank you!
## Contributors
This project exists thanks to all the people who have [contributed](CONTRIBUTING.md):
<a href="https://github.com/onivim/oni/graphs/contributors"><img src="https://opencollective.com/oni/contributors.svg?width=890" /></a>
## License
MIT License. Copyright (c) Bryan Phelps
Windows and OSX have a bundled version of Neovim, which is covered under [Neovim's license](https://github.com/neovim/neovim/blob/master/LICENSE)
### Bundled Plugins
Bundled plugins have their own license terms. These include:
* [typescript-vim](https://github.com/leafgarland/typescript-vim) (`oni/vim/core/typescript.vim`)
* [targets.vim](https://github.com/wellle/targets.vim) (`oni/vim/default/bundle/targets.vim`)
* [vim-commentary](https://github.com/tpope/vim-commentary) (`oni/vim/default/bundle/vim-commentary`)
* [vim-unimpaired](https://github.com/tpope/vim-unimpaired) (`oni/vim/default/bundle/vim-unimpaired`)
* [vim-surround](https://github.com/tpope/vim-surround) (`oni/vim/default/bundle/vim-surround`)
* [vim-reasonml](https://github.com/reasonml-editor/vim-reason) (`.vim` files in `oni/vim/core/oni-plugin-reasonml`)
================================================
FILE: appveyor.yml
================================================
# Test against the latest version of this Node.js version
environment:
nodejs_version: "8"
os: unstable
branches:
only:
- master
- /^release.*/
# Skip CI build if the changes match these rules exactly.
# Ie, if the BACKERS.md file is changed, we don't need to build.
skip_commits:
files:
- "**/*.md"
cache:
- .oni_build_cache -> package.json
platform:
- x86
- x64
# Install scripts. (runs after repo cloning)
install:
# Ensure the Git Submoduldes have been pulled down too
- git submodule update --init --recursive
# Get the latest stable version of Node.js or io.js
- ps: Install-Product node $env:nodejs_version
# Workaround https://github.com/npm/npm/issues/18380
- npm install -g yarn
- node --version
- npm --version
# install modules
- yarn install
- yarn run check-cached-binaries
# Post-install test scripts.
test_script:
- powershell build/script/appveyor-test.ps1
# Don't actually build.
build: off
================================================
FILE: browser/src/App.ts
================================================
/**
* App.ts
*
* Entry point for the Oni application - managing the overall lifecycle
*/
import { ipcRenderer, remote } from "electron"
import * as fs from "fs"
import * as minimist from "minimist"
import * as path from "path"
import { IDisposable } from "oni-types"
import * as Log from "oni-core-logging"
import * as Performance from "./Performance"
import * as Utility from "./Utility"
import { IConfigurationValues } from "./Services/Configuration/IConfigurationValues"
const editorManagerPromise = import("./Services/EditorManager")
const sharedNeovimInstancePromise = import("./neovim/SharedNeovimInstance")
export type QuitHook = () => Promise<void>
let _quitHooks: QuitHook[] = []
const _initializePromise: Utility.ICompletablePromise<void> = Utility.createCompletablePromise<
void
>()
export const registerQuitHook = (quitHook: QuitHook): IDisposable => {
_quitHooks.push(quitHook)
const dispose = () => {
_quitHooks = _quitHooks.filter(qh => qh !== quitHook)
}
return {
dispose,
}
}
export const quit = async (): Promise<void> => {
Log.info(`[App::quit] called with ${_quitHooks.length} quitHooks`)
const promises = _quitHooks.map(async qh => {
Log.info("[App.quit] Waiting for quit hook...")
await qh()
Log.info("[App.quit] Quit hook completed successfully")
})
await Promise.all([promises])
// On mac we should quit the application when the user press Cmd + Q
if (process.platform === "darwin") {
Log.info("[App::quit] quitting app")
remote.app.quit()
}
Log.info("[App::quit] completed")
}
export const waitForStart = (): Promise<void> => {
return _initializePromise.promise
}
export const start = async (args: string[]): Promise<void> => {
Performance.startMeasure("Oni.Start")
const UnhandledErrorMonitor = await import("./Services/UnhandledErrorMonitor")
UnhandledErrorMonitor.activate()
const Shell = await import("./UI/Shell")
Shell.activate()
const configurationPromise = import("./Services/Configuration")
const configurationCommandsPromise = import("./Services/Configuration/ConfigurationCommands")
const debugPromise = import("./Services/Debug")
const pluginManagerPromise = import("./Plugins/PluginManager")
const themesPromise = import("./Services/Themes")
const iconThemesPromise = import("./Services/IconThemes")
const sessionManagerPromise = import("./Services/Sessions")
const sidebarPromise = import("./Services/Sidebar")
const overlayPromise = import("./Services/Overlay")
const statusBarPromise = import("./Services/StatusBar")
const startEditorsPromise = import("./startEditors")
const menuPromise = import("./Services/Menu")
const browserWindowConfigurationSynchronizerPromise = import("./Services/BrowserWindowConfigurationSynchronizer")
const colorsPromise = import("./Services/Colors")
const tokenColorsPromise = import("./Services/TokenColors")
const diagnosticsPromise = import("./Services/Diagnostics")
const globalCommandsPromise = import("./Services/Commands/GlobalCommands")
const inputManagerPromise = import("./Services/InputManager")
const languageManagerPromise = import("./Services/Language")
const vcsManagerPromise = import("./Services/VersionControl")
const notificationsPromise = import("./Services/Notifications")
const snippetPromise = import("./Services/Snippets")
const keyDisplayerPromise = import("./Services/KeyDisplayer")
const taksPromise = import("./Services/Tasks")
const terminalPromise = import("./Services/Terminal")
const workspacePromise = import("./Services/Workspace")
const workspaceCommandsPromise = import("./Services/Workspace/WorkspaceCommands")
const windowManagerPromise = import("./Services/WindowManager")
const multiProcessPromise = import("./Services/MultiProcess")
const themePickerPromise = import("./Services/Themes/ThemePicker")
const cssPromise = import("./CSS")
const completionProvidersPromise = import("./Services/Completion/CompletionProviders")
const parsedArgs = minimist(args, { string: "_" })
const currentWorkingDirectory = process.cwd()
const normalizedFiles = parsedArgs._.map(
arg => (path.isAbsolute(arg) ? arg : path.join(currentWorkingDirectory, arg)),
)
const filesToOpen = normalizedFiles.filter(f => {
if (fs.existsSync(f)) {
return fs.statSync(f).isFile()
} else {
return true
}
})
const foldersToOpen = normalizedFiles.filter(
f => fs.existsSync(f) && fs.statSync(f).isDirectory(),
)
Log.info("Files to open: " + JSON.stringify(filesToOpen))
Log.info("Folders to open: " + JSON.stringify(foldersToOpen))
let workspaceToLoad = null
// If a folder has been specified, we'll change directory to it
if (foldersToOpen.length > 0) {
workspaceToLoad = foldersToOpen[0]
} else if (filesToOpen.length > 0) {
workspaceToLoad = path.dirname(filesToOpen[0])
}
// Helper for debugging:
Performance.startMeasure("Oni.Start.Config")
const { configuration } = await configurationPromise
const initialConfigParsingErrors = configuration.getErrors()
if (initialConfigParsingErrors && initialConfigParsingErrors.length > 0) {
initialConfigParsingErrors.forEach((err: Error) => Log.error(err))
}
const configChange = (newConfigValues: Partial<IConfigurationValues>) => {
let prop: keyof IConfigurationValues
for (prop in newConfigValues) {
if (newConfigValues[prop]) {
Shell.Actions.setConfigValue(prop, newConfigValues[prop])
}
}
}
configuration.start()
configChange(configuration.getValues()) // initialize values
configuration.onConfigurationChanged.subscribe(configChange)
Performance.endMeasure("Oni.Start.Config")
const PluginManager = await pluginManagerPromise
PluginManager.activate(configuration)
const pluginManager = PluginManager.getInstance()
const developmentPlugin = parsedArgs["plugin-develop"]
let developmentPluginError: { title: string; errorText: string }
if (typeof developmentPlugin === "string") {
Log.info("Registering development plugin: " + developmentPlugin)
if (fs.existsSync(developmentPlugin)) {
pluginManager.addDevelopmentPlugin(developmentPlugin)
} else {
developmentPluginError = {
title: "Error parsing arguments",
errorText: "Could not find plugin: " + developmentPlugin,
}
Log.warn(developmentPluginError.errorText)
}
} else if (typeof developmentPlugin === "boolean") {
developmentPluginError = {
title: "Error parsing arguments",
errorText: "--plugin-develop must be followed by a plugin path",
}
Log.warn(developmentPluginError.errorText)
}
Performance.startMeasure("Oni.Start.Plugins.Discover")
pluginManager.discoverPlugins()
Performance.endMeasure("Oni.Start.Plugins.Discover")
const oniApi = pluginManager.getApi()
Performance.startMeasure("Oni.Start.Themes")
const Themes = await themesPromise
const IconThemes = await iconThemesPromise
await Promise.all([
Themes.activate(configuration, pluginManager),
IconThemes.activate(configuration, pluginManager),
])
const Colors = await colorsPromise
Colors.activate(configuration, Themes.getThemeManagerInstance())
const colors = Colors.getInstance()
Shell.initializeColors(Colors.getInstance())
Performance.endMeasure("Oni.Start.Themes")
const TokenColors = await tokenColorsPromise
TokenColors.activate(configuration, Themes.getThemeManagerInstance())
const BrowserWindowConfigurationSynchronizer = await browserWindowConfigurationSynchronizerPromise
BrowserWindowConfigurationSynchronizer.activate(configuration, Colors.getInstance())
const { editorManager } = await editorManagerPromise
const Workspace = await workspacePromise
Workspace.activate(configuration, editorManager, workspaceToLoad)
const workspace = Workspace.getInstance()
const WindowManager = await windowManagerPromise
const MultiProcess = await multiProcessPromise
MultiProcess.activate(WindowManager.windowManager)
const StatusBar = await statusBarPromise
StatusBar.activate(configuration)
const Overlay = await overlayPromise
Overlay.activate()
const overlayManager = Overlay.getInstance()
const sneakPromise = import("./Services/Sneak")
const { commandManager } = await import("./Services/CommandManager")
const Sneak = await sneakPromise
Sneak.activate(colors, commandManager, configuration, overlayManager)
const Menu = await menuPromise
Menu.activate(configuration, overlayManager)
const menuManager = Menu.getInstance()
const Notifications = await notificationsPromise
Notifications.activate(configuration, overlayManager)
const notifications = Notifications.getInstance()
if (typeof developmentPluginError !== "undefined") {
const notification = notifications.createItem()
notification.setContents(developmentPluginError.title, developmentPluginError.errorText)
notification.setLevel("error")
notification.onClick.subscribe(() =>
commandManager.executeCommand("oni.config.openConfigJs"),
)
notification.show()
}
configuration.onConfigurationError.subscribe(err => {
const notification = notifications.createItem()
notification.setContents("Error Loading Configuration", err.toString())
notification.setLevel("error")
notification.onClick.subscribe(() =>
commandManager.executeCommand("oni.config.openConfigJs"),
)
notification.show()
})
UnhandledErrorMonitor.start(configuration, Notifications.getInstance())
const Tasks = await taksPromise
Tasks.activate(menuManager)
const tasks = Tasks.getInstance()
const LanguageManager = await languageManagerPromise
LanguageManager.activate(oniApi)
const languageManager = LanguageManager.getInstance()
Performance.startMeasure("Oni.Start.Editors")
const SharedNeovimInstance = await sharedNeovimInstancePromise
const { startEditors } = await startEditorsPromise
const CSS = await cssPromise
CSS.activate()
const Snippets = await snippetPromise
Snippets.activate(commandManager, configuration)
Shell.Actions.setLoadingComplete()
const Diagnostics = await diagnosticsPromise
const diagnostics = Diagnostics.getInstance()
const CompletionProviders = await completionProvidersPromise
CompletionProviders.activate(languageManager)
const initializeAllEditors = async () => {
await startEditors(
filesToOpen,
Colors.getInstance(),
CompletionProviders.getInstance(),
configuration,
diagnostics,
languageManager,
menuManager,
overlayManager,
pluginManager,
Snippets.getInstance(),
Themes.getThemeManagerInstance(),
TokenColors.getInstance(),
workspace,
)
await SharedNeovimInstance.activate(configuration, pluginManager)
}
await Promise.race([Utility.delay(5000), initializeAllEditors()])
Performance.endMeasure("Oni.Start.Editors")
Performance.startMeasure("Oni.Start.Sidebar")
const Sidebar = await sidebarPromise
const Learning = await import("./Services/Learning")
const Explorer = await import("./Services/Explorer")
const Search = await import("./Services/Search")
Sidebar.activate(configuration, workspace)
const sidebarManager = Sidebar.getInstance()
const VCSManager = await vcsManagerPromise
VCSManager.activate(oniApi, sidebarManager, notifications)
Explorer.activate(oniApi, configuration, Sidebar.getInstance())
Learning.activate(
commandManager,
configuration,
editorManager,
overlayManager,
Sidebar.getInstance(),
WindowManager.windowManager,
)
const Sessions = await sessionManagerPromise
Sessions.activate(oniApi, sidebarManager)
Performance.endMeasure("Oni.Start.Sidebar")
const createLanguageClientsFromConfiguration =
LanguageManager.createLanguageClientsFromConfiguration
diagnostics.start(languageManager)
const Browser = await import("./Services/Browser")
Browser.activate(commandManager, configuration, editorManager)
Performance.startMeasure("Oni.Start.Activate")
const api = pluginManager.startApi()
Search.activate(api)
configuration.activate(api)
Snippets.activateProviders(
commandManager,
CompletionProviders.getInstance(),
configuration,
pluginManager,
)
createLanguageClientsFromConfiguration(configuration.getValues())
const { inputManager } = await inputManagerPromise
const autoClosingPairsPromise = import("./Services/AutoClosingPairs")
const ConfigurationCommands = await configurationCommandsPromise
ConfigurationCommands.activate(commandManager, configuration, editorManager)
const AutoClosingPairs = await autoClosingPairsPromise
AutoClosingPairs.activate(configuration, editorManager, inputManager, languageManager)
const GlobalCommands = await globalCommandsPromise
GlobalCommands.activate(commandManager, editorManager, menuManager, tasks)
const Debug = await debugPromise
Debug.activate(commandManager)
const WorkspaceCommands = await workspaceCommandsPromise
WorkspaceCommands.activateCommands(
configuration,
editorManager,
Snippets.getInstance(),
workspace,
)
const Preview = await import("./Services/Preview")
Preview.activate(commandManager, configuration, editorManager)
const KeyDisplayer = await keyDisplayerPromise
KeyDisplayer.activate(
commandManager,
configuration,
editorManager,
inputManager,
overlayManager,
)
const ThemePicker = await themePickerPromise
ThemePicker.activate(configuration, menuManager, Themes.getThemeManagerInstance())
const Bookmarks = await import("./Services/Bookmarks")
Bookmarks.activate(configuration, editorManager, Sidebar.getInstance())
const PluginsSidebarPane = await import("./Plugins/PluginSidebarPane")
PluginsSidebarPane.activate(commandManager, configuration, pluginManager, sidebarManager)
const Terminal = await terminalPromise
Terminal.activate(commandManager, configuration, editorManager)
const Particles = await import("./Services/Particles")
Particles.activate(commandManager, configuration, editorManager, overlayManager)
const PluginConfigurationSynchronizer = await import("./Plugins/PluginConfigurationSynchronizer")
PluginConfigurationSynchronizer.activate(configuration, pluginManager)
const Achievements = await import("./Services/Learning/Achievements")
const achievements = Achievements.getInstance()
if (achievements) {
Debug.registerAchievements(achievements)
Sneak.registerAchievements(achievements)
Browser.registerAchievements(achievements)
}
Performance.endMeasure("Oni.Start.Activate")
checkForUpdates()
commandManager.registerCommand({
command: "oni.quit",
name: null,
detail: null,
execute: () => quit(),
})
Performance.endMeasure("Oni.Start")
ipcRenderer.send("Oni.started", "started")
_initializePromise.resolve()
}
const checkForUpdates = async (): Promise<void> => {
const AutoUpdate = await import("./Services/AutoUpdate")
const { autoUpdater, constructFeedUrl } = AutoUpdate
const feedUrl = await constructFeedUrl("https://api.onivim.io/v1/update")
autoUpdater.onUpdateAvailable.subscribe(() => Log.info("Update available."))
autoUpdater.onUpdateNotAvailable.subscribe(() => Log.info("Update not available."))
autoUpdater.checkForUpdates(feedUrl)
}
================================================
FILE: browser/src/CSS.ts
================================================
/**
* CSS.ts
*
* Entry point for loading all of Oni's CSS
*/
export const activate = () => {
require("./UI/components/common.less") // tslint:disable-line no-var-requires
require("./overlay.less") // tslint:disable-line
require("./Services/Menu/Menu.less")
require("./UI/components/InstallHelp.less")
}
================================================
FILE: browser/src/Constants.ts
================================================
/**
* Constants.ts
*/
// Performance Constants
export namespace Delay {
export const INSTANT = 1
export const REAL_TIME = 10
export const NEAR_REAL_TIME = 50
export const NOT_REAL_TIME = 250
}
export namespace Vim {
export const MAX_VALUE = 2147483647
}
================================================
FILE: browser/src/Editor/BufferHighlights.ts
================================================
/**
* BufferHighlights.ts
*
* Helpers to manage buffer highlight state
*/
import * as SyntaxHighlighting from "./../Services/SyntaxHighlighting"
import { NeovimInstance } from "./../neovim"
// Line number to highlight src id, for clearing
export type BufferHighlightId = number
export interface IBufferHighlightsUpdater {
setHighlightsForLine(line: number, highlights: SyntaxHighlighting.HighlightInfo[]): void
clearHighlightsForLine(line: number): void
}
/**
* Helper class to efficiently update
* buffer highlights in a batch
*
* @name BufferHighlightsUpdater
* @class
*/
export class BufferHighlightsUpdater implements IBufferHighlightsUpdater {
private _calls: any[] = []
constructor(
private _bufferId: number,
private _neovimInstance: NeovimInstance,
private _highlightId: BufferHighlightId,
) {}
public async start(): Promise<void> {
if (!this._highlightId) {
this._highlightId = await this._neovimInstance.request<number>(
"nvim_buf_add_highlight",
[this._bufferId, 0, "", 0, 0, 0],
)
}
}
public setHighlightsForLine(
line: number,
highlights: SyntaxHighlighting.HighlightInfo[],
): void {
this.clearHighlightsForLine(line)
if (!highlights || !highlights.length) {
return
}
const addHighlightCalls = highlights.map(hl => {
const highlightGroup = this._neovimInstance.tokenColorSynchronizer.getHighlightGroupForTokenColor(
hl.tokenColor,
)
return [
"nvim_buf_add_highlight",
[
this._bufferId,
this._highlightId,
highlightGroup,
hl.range.start.line,
hl.range.start.character,
hl.range.end.character,
],
]
})
this._calls = this._calls.concat(addHighlightCalls)
}
public clearHighlightsForLine(line: number): void {
this._calls.push([
"nvim_buf_clear_highlight",
[this._bufferId, this._highlightId, line, line + 1],
])
}
public async apply(): Promise<BufferHighlightId> {
if (this._calls.length > 0) {
await this._neovimInstance.request<void>("nvim_call_atomic", [this._calls])
}
return this._highlightId
}
}
================================================
FILE: browser/src/Editor/BufferManager.ts
================================================
/**
* BufferManager.ts
*
* Helpers to manage buffer state
*/
import * as os from "os"
import * as types from "vscode-languageserver-types"
import { Observable } from "rxjs/Observable"
import "rxjs/add/observable/defer"
import "rxjs/add/observable/from"
import "rxjs/add/operator/concatMap"
import { Store } from "redux"
import * as detectIndent from "detect-indent"
import * as Oni from "oni-api"
import * as Log from "oni-core-logging"
import {
BufferEventContext,
EventContext,
InactiveBufferContext,
NeovimInstance,
} from "./../neovim"
import * as LanguageManager from "./../Services/Language"
import { PromiseQueue } from "./../Services/Language/PromiseQueue"
import {
BufferHighlightId,
BufferHighlightsUpdater,
IBufferHighlightsUpdater,
} from "./BufferHighlights"
import * as Actions from "./NeovimEditor/NeovimEditorActions"
import * as State from "./NeovimEditor/NeovimEditorStore"
import * as Constants from "./../Constants"
import { TokenColor } from "./../Services/TokenColors"
import { IBufferLayer } from "./NeovimEditor/BufferLayerManager"
/**
* Candidate API methods
*/
export interface IBuffer extends Oni.Buffer {
tabstop: number
shiftwidth: number
comment: ICommentFormats
setLanguage(lang: string): Promise<void>
getLayerById<T>(id: string): T
getCursorPosition(): Promise<types.Position>
handleInput(key: string): boolean
detectIndentation(): Promise<BufferIndentationInfo>
setScratchBuffer(): Promise<void>
}
type NvimError = [1, string]
interface ICommentFormats {
start: string
middle: string
end: string
defaults: string[]
}
const isStringArray = (value: NvimError | string[]): value is string[] => {
if (value && Array.isArray(value)) {
return typeof value[0] === "string"
}
return false
}
export type IndentationType = "tab" | "space"
export interface BufferIndentationInfo {
type: IndentationType
// If indentation is 'space', this is how
// many spaces are at a particular tabstop
amount: number
// String value for indentation
indent: string
}
const getStringFromTypeAndAmount = (type: IndentationType, amount: number): string => {
if (type === "tab") {
return "\t"
} else {
let str = ""
for (let i = 0; i < amount; i++) {
str += " "
}
return str
}
}
export class Buffer implements IBuffer {
private _id: string
private _filePath: string
private _language: string
private _cursor: Oni.Cursor
private _cursorOffset: number
private _version: number
private _modified: boolean
private _lineCount: number
private _tabstop: number
private _shiftwidth: number
private _comment: ICommentFormats
private _bufferHighlightId: BufferHighlightId = null
private _promiseQueue = new PromiseQueue()
public get shiftwidth(): number {
return this._shiftwidth
}
public get tabstop(): number {
return this._tabstop
}
public get comment(): ICommentFormats {
return this._comment
}
public get filePath(): string {
return this._filePath
}
public get language(): string {
return this._language
}
public get lineCount(): number {
return this._lineCount
}
public get cursor(): Oni.Cursor {
return this._cursor
}
public get cursorOffset(): number {
return this._cursorOffset
}
public get version(): number {
return this._version
}
public get modified(): boolean {
return this._modified
}
public get id(): string {
return this._id
}
constructor(
private _neovimInstance: NeovimInstance,
private _actions: typeof Actions,
private _store: Store<State.IState>,
evt: EventContext,
) {
this.updateFromEvent(evt)
}
public addLayer(layer: IBufferLayer): void {
this._actions.addBufferLayer(parseInt(this._id, 10), layer)
}
public getLayerById<T>(id: string): T | null {
return (
((this._store
.getState()
.layers[parseInt(this._id, 10)].find(layer => layer.id === id) as any) as T) || null
)
}
public removeLayer(layer: IBufferLayer): void {
this._actions.removeBufferLayer(parseInt(this._id, 10), layer)
}
/**
* convertOffsetToLineColumn
*/
public async convertOffsetToLineColumn(
cursorOffset = this._cursorOffset,
): Promise<types.Position> {
const line: number = await this._neovimInstance.callFunction("byte2line", [cursorOffset])
const countFromLine: number = await this._neovimInstance.callFunction("line2byte", [line])
const column = cursorOffset - countFromLine
return types.Position.create(line - 1, column)
}
public async getCursorPosition(): Promise<types.Position> {
const pos = await this._neovimInstance.callFunction("getpos", ["."])
const [, oneBasedLine, oneBasedColumn] = pos
return types.Position.create(oneBasedLine - 1, oneBasedColumn - 1)
}
public async getLines(start?: number, end?: number): Promise<string[]> {
if (typeof start !== "number") {
start = 0
}
if (typeof end !== "number") {
end = this._lineCount
}
if (end - start > 2500) {
Log.warn("getLines called with over 2500 lines, this may cause instability.")
}
// Neovim does not error if it is unable to get lines instead it returns an array
// of type [1, "an error message"] **on Some occasions**, we only check the first on the assumption that
// that is where the number is placed by neovim
const lines = await this._neovimInstance.request<string[]>("nvim_buf_get_lines", [
parseInt(this._id, 10),
start,
end,
false,
])
if (isStringArray(lines)) {
return lines
}
return []
}
public async setLanguage(language: string): Promise<void> {
this._language = language
await this._neovimInstance.command(`setl ft=${language}`)
}
public async setScratchBuffer(): Promise<void> {
// set the open buffer to be a readonly throw away buffer, also add scrollbind
// may need a config option
const calls = [
["nvim_command", ["setlocal buftype=nofile"]],
["nvim_command", ["setlocal bufhidden=hide"]],
["nvim_command", ["setlocal noswapfile"]],
["nvim_command", ["setlocal nobuflisted"]],
["nvim_command", ["setlocal nomodifiable"]],
]
const [result, error] = await this._neovimInstance.request<any[] | NvimError>(
"nvim_call_atomic",
[calls],
)
if (typeof result === "number" && error) {
Log.info(`Failed to set scratch buffer due to ${error}`)
}
this._modified = false
}
public async detectIndentation(): Promise<BufferIndentationInfo> {
const bufferLines = await this.getLines(0, 1024)
const ret = detectIndent(bufferLines.join("\n"))
// We were able to infer tab settings from lines, so return
if (ret.type === "tab" || ret.type === "space") {
return ret
}
// Otherwise, we'll fall back to getting vim tab settings
const isSpaces = await this._neovimInstance.request<boolean>("nvim_get_option", [
"expandtab",
])
const tabSize = await this._neovimInstance.request<number>("nvim_get_option", ["tabstop"])
const tabType = isSpaces ? "space" : "tab"
return {
amount: tabSize,
type: tabType,
indent: getStringFromTypeAndAmount(tabType, tabSize),
}
}
public async applyTextEdits(textEdits: types.TextEdit | types.TextEdit[]): Promise<void> {
const textEditsAsArray = textEdits instanceof Array ? textEdits : [textEdits]
const sortedEdits = LanguageManager.sortTextEdits(textEditsAsArray)
const deferredEdits = sortedEdits.map(te => {
return Observable.defer(async () => {
const range = te.range
Log.info("[Buffer] Applying edit")
const characterStart = range.start.character
const lineStart = range.start.line
const lineEnd = range.end.line
const characterEnd = range.end.character
const calls = []
calls.push(["nvim_command", ["silent! undojoin"]])
if (lineStart === lineEnd) {
const [lineContents] = await this.getLines(lineStart, lineStart + 1)
const beginning = lineContents.substring(0, range.start.character)
const end = lineContents.substring(range.end.character, lineContents.length)
const newLine = beginning + te.newText + end
const lines = newLine.split(os.EOL)
calls.push([
"nvim_buf_set_lines",
[parseInt(this._id, 10), lineStart, lineStart + 1, false, lines],
])
} else if (characterEnd === 0 && characterStart === 0) {
const lines = te.newText.split(os.EOL)
calls.push([
"nvim_buf_set_lines",
[parseInt(this._id, 10), lineStart, lineEnd, false, lines],
])
} else {
Log.warn("Multi-line mid character edits not currently supported")
}
await this._neovimInstance.request("nvim_call_atomic", [calls])
})
})
await Observable.from(deferredEdits)
.concatMap(de => de)
.toPromise()
}
public handleInput(key: string): boolean {
const state = this._store.getState()
const bufferLayers: IBufferLayer[] = state.layers[this._id]
if (!bufferLayers || !bufferLayers.length) {
return false
}
const layerShouldHandleInput = bufferLayers.reduce<boolean>(
(layerHandlerExists, currentLayer) => {
if (layerHandlerExists) {
return true
}
if (!currentLayer || !currentLayer.handleInput) {
return false
} else if (currentLayer.isActive && currentLayer.isActive()) {
return currentLayer.handleInput(key)
}
return false
},
false,
)
return layerShouldHandleInput
}
public async updateHighlights(
tokenColors: TokenColor[],
updateFunction: (highlightsUpdater: IBufferHighlightsUpdater) => void,
): Promise<void> {
this._promiseQueue.enqueuePromise(async () => {
const bufferId = parseInt(this._id, 10)
const bufferUpdater = new BufferHighlightsUpdater(
bufferId,
this._neovimInstance,
this._bufferHighlightId,
)
await this._neovimInstance.tokenColorSynchronizer.synchronizeTokenColors(tokenColors)
await bufferUpdater.start()
updateFunction(bufferUpdater)
this._bufferHighlightId = await bufferUpdater.apply()
})
}
public async setLines(start: number, end: number, lines: string[]): Promise<void> {
return this._neovimInstance.request<any>("nvim_buf_set_lines", [
parseInt(this._id, 10),
start,
end,
false,
lines,
])
}
public async setCursorPosition(row: number, column: number): Promise<void> {
await this._neovimInstance.eval(`setpos(".", [${this._id}, ${row + 1}, ${column + 1}, 0])`)
}
public async getSelectionRange(): Promise<types.Range | null> {
const startRange = await this._neovimInstance.callFunction("getpos", ["'<'"])
const endRange = await this._neovimInstance.callFunction("getpos", ["'>"])
const [, startLine, startColumn] = startRange
let [, endLine, endColumn] = endRange
if (startLine === 0 && startColumn === 0 && endLine === 0 && endColumn === 0) {
return null
}
if (endColumn === Constants.Vim.MAX_VALUE) {
endLine++
endColumn = 1
}
return types.Range.create(startLine - 1, startColumn - 1, endLine - 1, endColumn - 1)
}
public async getTokenAt(line: number, column: number): Promise<Oni.IToken> {
const result = await this.getLines(line, line + 1)
const tokenRegEx = LanguageManager.getInstance().getTokenRegex(this.language)
const getLastMatchingCharacter = (
lineContents: string,
character: number,
dir: number,
regex: RegExp,
) => {
while (character > 0 && character < lineContents.length) {
if (!lineContents[character].match(regex)) {
return character - dir
}
character += dir
}
return character
}
const getToken = (lineContents: string, character: number): Oni.IToken => {
if (!lineContents || !character) {
return null
}
const tokenStart = getLastMatchingCharacter(lineContents, character, -1, tokenRegEx)
const tokenEnd = getLastMatchingCharacter(lineContents, character, 1, tokenRegEx)
const range = types.Range.create(line, tokenStart, line, tokenEnd)
const tokenName = lineContents.substring(tokenStart, tokenEnd + 1)
return {
tokenName,
range,
}
}
return getToken(result[0], column)
}
public updateFromEvent(evt: EventContext): void {
this._id = evt.bufferNumber.toString()
this._filePath = evt.bufferFullPath
this._language = evt.filetype
this._version = evt.version
this._modified = evt.modified
this._lineCount = evt.bufferTotalLines
this._cursorOffset = evt.byte
this._tabstop = evt.tabstop
this._shiftwidth = evt.shiftwidth
this._comment = this.formatCommentOption(evt.comments)
this._cursor = {
line: evt.line - 1,
column: evt.column - 1,
}
}
public formatCommentOption(comments: string): ICommentFormats {
if (!comments) {
return null
}
try {
const commentsArray = comments.split(",")
const commentFormats = commentsArray.reduce<ICommentFormats>(
(acc, str) => {
const [flag, character] = str.split(":")
switch (true) {
case flag.includes("s"):
acc.start = character
return acc
case flag.includes("m"):
acc.middle = character
return acc
case flag.includes("e"):
acc.end = character
return acc
default:
acc.defaults.push(character)
return acc
}
},
{
start: null,
middle: null,
end: null,
defaults: [],
},
)
return commentFormats
} catch (e) {
Log.warn(`Error formatting neovim comment options due to ${e.message}`)
return null
}
}
}
// Helper for managing buffer state
export class BufferManager {
private _idToBuffer: { [id: string]: Buffer } = {}
private _filePathToId: { [filePath: string]: string } = {}
private _bufferList: { [id: string]: InactiveBuffer } = {}
constructor(
private _neovimInstance: NeovimInstance,
private _actions: typeof Actions,
private _store: Store<State.IState>,
) {}
public updateBufferFromEvent(evt: EventContext): Buffer {
const id = evt.bufferNumber.toString()
const currentBuffer = this.getBufferById(id)
if (evt.bufferFullPath) {
this._filePathToId[evt.bufferFullPath] = id
}
if (currentBuffer) {
currentBuffer.updateFromEvent(evt)
} else {
const buf = new Buffer(this._neovimInstance, this._actions, this._store, evt)
this._idToBuffer[id] = buf
}
return this._idToBuffer[id]
}
public populateBufferList(buffers: BufferEventContext): void {
const bufferlist = buffers.existingBuffers.reduce((list, buffer) => {
const id = `${buffer.bufferNumber}`
if (buffer.bufferFullPath) {
this._filePathToId[buffer.bufferFullPath] = id
list[id] = new InactiveBuffer(buffer)
}
return list
}, {})
const currentId = buffers.current.bufferNumber.toString()
const current = this.getBufferById(currentId)
this._bufferList = { ...bufferlist, [currentId]: current }
}
public getBufferById(id: string): Buffer {
return this._idToBuffer[id]
}
public getBuffers(): Array<Buffer | InactiveBuffer> {
return Object.values(this._bufferList)
}
}
export class InactiveBuffer implements Oni.InactiveBuffer {
private _id: string
private _filePath: string
private _language: string
private _version: number
private _modified: boolean
private _lineCount: number
public get id(): string {
return this._id
}
public get filePath(): string {
return this._filePath
}
public get language(): string {
return this._language
}
public get version(): number {
return this._version
}
public get modified(): boolean {
return this._modified
}
public get lineCount(): number {
return this._lineCount
}
constructor(inactiveBuffer: InactiveBufferContext) {
this._id = `${inactiveBuffer.bufferNumber}`
this._filePath = inactiveBuffer.bufferFullPath
this._language = inactiveBuffer.filetype
this._version = inactiveBuffer.version || null
this._modified = inactiveBuffer.modified || false
this._lineCount = null
}
}
================================================
FILE: browser/src/Editor/Editor.ts
================================================
/**
* Interface that describes an Editor -
* an editor handles rendering and input
* for a specific window.
*/
import * as Oni from "oni-api"
import { Event, IEvent } from "oni-types"
import * as types from "vscode-languageserver-types"
import { Disposable } from "./../Utility"
/**
* Base class for Editor implementations
*/
export abstract class Editor extends Disposable implements Oni.Editor {
private _currentMode: string
private _onBufferEnterEvent = new Event<Oni.EditorBufferEventArgs>()
private _onBufferLeaveEvent = new Event<Oni.EditorBufferEventArgs>()
private _onBufferChangedEvent = new Event<Oni.EditorBufferChangedEventArgs>()
private _onBufferSavedEvent = new Event<Oni.EditorBufferEventArgs>()
private _onBufferScrolledEvent = new Event<Oni.EditorBufferScrolledEventArgs>()
private _onCursorMoved = new Event<Oni.Cursor>()
private _onModeChangedEvent = new Event<Oni.Vim.Mode>()
public get mode(): string {
return this._currentMode
}
public get activeBuffer(): Oni.Buffer {
return null
}
public get onCursorMoved(): IEvent<Oni.Cursor> {
return this._onCursorMoved
}
public abstract init(filesToOpen: string[]): void
// Events
public get onModeChanged(): IEvent<Oni.Vim.Mode> {
return this._onModeChangedEvent
}
public get onBufferEnter(): IEvent<Oni.EditorBufferEventArgs> {
return this._onBufferEnterEvent
}
public get onBufferLeave(): IEvent<Oni.EditorBufferEventArgs> {
return this._onBufferLeaveEvent
}
public get onBufferChanged(): IEvent<Oni.EditorBufferChangedEventArgs> {
return this._onBufferChangedEvent
}
public get onBufferSaved(): IEvent<Oni.EditorBufferEventArgs> {
return this._onBufferSavedEvent
}
public get onBufferScrolled(): IEvent<Oni.EditorBufferScrolledEventArgs> {
return this._onBufferScrolledEvent
}
public getBuffers(): Array<Oni.Buffer | Oni.InactiveBuffer> {
return []
}
public /* virtual */ openFile(
filePath: string,
openOptions: Oni.FileOpenOptions = Oni.DefaultFileOpenOptions,
): Promise<Oni.Buffer> {
return Promise.reject("Not implemented")
}
public async blockInput(
inputFunction: (input: Oni.InputCallbackFunction) => Promise<void>,
): Promise<void> {
return Promise.reject("Not implemented")
}
public setTextOptions(options: Oni.EditorTextOptions): Promise<void> {
return Promise.reject("Not implemented")
}
public abstract render(): JSX.Element
public abstract setSelection(selectionRange: types.Range): Promise<void>
protected setMode(mode: Oni.Vim.Mode): void {
if (mode !== this._currentMode) {
this._currentMode = mode
this._onModeChangedEvent.dispatch(mode)
}
}
protected notifyCursorMoved(cursor: Oni.Cursor): void {
this._onCursorMoved.dispatch(cursor)
}
protected notifyBufferChanged(bufferChangeEvent: Oni.EditorBufferChangedEventArgs): void {
this._onBufferChangedEvent.dispatch(bufferChangeEvent)
}
protected notifyBufferEnter(bufferEvent: Oni.EditorBufferEventArgs): void {
this._onBufferEnterEvent.dispatch(bufferEvent)
}
protected notifyBufferLeave(bufferEvent: Oni.EditorBufferEventArgs): void {
this._onBufferLeaveEvent.dispatch(bufferEvent)
}
protected notifyBufferSaved(bufferEvent: Oni.EditorBufferEventArgs): void {
this._onBufferSavedEvent.dispatch(bufferEvent)
}
protected notifyBufferScrolled(bufferScrollEvent: Oni.EditorBufferScrolledEventArgs): void {
this._onBufferScrolledEvent.dispatch(bufferScrollEvent)
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/BufferLayerManager.ts
================================================
/**
* BufferLayerManager.ts
*
* BufferLayerManager tracks the lifecycle of 'buffer layers'
*/
import * as Oni from "oni-api"
export type BufferLayerFactory = (buf: Oni.Buffer) => Oni.BufferLayer
export type BufferFilter = (buf: Oni.Buffer) => boolean
export interface IBufferLayer extends Oni.BufferLayer {
handleInput?: (key: string) => boolean
isActive?: () => boolean
}
export const createBufferFilterFromLanguage = (language: string) => (buf: Oni.Buffer): boolean => {
if (!language || language === "*") {
return true
} else {
return buf.language === language
}
}
export interface BufferLayerInfo {
filter: BufferFilter
layerFactory: BufferLayerFactory
}
export class BufferLayerManager {
private _layers: BufferLayerInfo[] = []
private _buffers: Oni.Buffer[] = []
public addBufferLayer(
filterOrLanguage: BufferFilter | string,
layerFactory: BufferLayerFactory,
) {
const filter: BufferFilter =
typeof filterOrLanguage === "string"
? createBufferFilterFromLanguage(filterOrLanguage)
: filterOrLanguage
this._layers.push({
filter,
layerFactory,
})
this._buffers.forEach(buf => {
if (filter(buf)) {
buf.addLayer(layerFactory(buf))
}
})
}
public notifyBufferEnter(buf: Oni.Buffer): void {
if (this._buffers.indexOf(buf) === -1) {
this._buffers.push(buf)
this._layers.forEach(layerInfo => {
if (layerInfo.filter(buf)) {
buf.addLayer(layerInfo.layerFactory(buf))
}
})
}
}
public notifyBufferFileTypeChanged(buf: Oni.Buffer): void {
this._buffers = this._buffers.filter(b => b.id !== buf.id)
this.notifyBufferEnter(buf)
}
}
const getInstance = (() => {
const instance = new BufferLayerManager()
return () => instance
})()
export default getInstance
export const wrapReactComponentWithLayer = (
id: string,
component: JSX.Element,
): Oni.BufferLayer => {
return {
id,
render: (context: Oni.BufferLayerRenderContext) => (context.isActive ? component : null),
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/CompletionMenu.ts
================================================
/**
* CompletionMenu.ts
*
* This is the completion menu that integrates with the completion providers
* (which is primarily language server right now)
* It's really just glue between the ContextMenu and Completion store.
*/
import * as types from "vscode-languageserver-types"
import { Event, IEvent } from "oni-types"
import { getDocumentationText } from "../../Plugins/Api/LanguageClient/LanguageClientHelpers"
import { ContextMenu } from "./../../Services/ContextMenu"
import * as CompletionUtility from "./../../Services/Completion/CompletionUtility"
export class CompletionMenu {
private _onItemFocusedEvent: Event<types.CompletionItem> = new Event<types.CompletionItem>()
private _onItemSelectedEvent: Event<types.CompletionItem> = new Event<types.CompletionItem>()
public get onItemFocused(): IEvent<types.CompletionItem> {
return this._onItemFocusedEvent
}
public get onItemSelected(): IEvent<types.CompletionItem> {
return this._onItemSelectedEvent
}
constructor(private _contextMenu: ContextMenu) {
this._contextMenu.onSelectedItemChanged.subscribe(item =>
this._onItemFocusedEvent.dispatch(item.rawCompletion),
)
this._contextMenu.onItemSelected.subscribe(item =>
this._onItemSelectedEvent.dispatch(item.rawCompletion),
)
}
public show(options: types.CompletionItem[], filterText: string): void {
const menuOptions = options.map(_convertCompletionForContextMenu)
if (this._contextMenu.isOpen()) {
this._contextMenu.setItems(menuOptions)
this._contextMenu.setFilter(filterText)
} else {
this._contextMenu.show(menuOptions, filterText)
}
}
public hide(): void {
this._contextMenu.hide()
}
}
// TODO: Should this be moved to another level? Like over to the menu renderer?
// It'd be nice if this layer only cared about `types.CompletionItem` and didn't
// have to worry about presentational aspects..
const _convertCompletionForContextMenu = (completion: types.CompletionItem): any => ({
label: completion.label,
detail: completion.detail,
documentation: getCompletionDocumentation(completion),
icon: CompletionUtility.convertKindToIconName(completion.kind),
rawCompletion: completion,
})
const getCompletionDocumentation = (item: types.CompletionItem): string | null => {
if (item.documentation) {
return getDocumentationText(item.documentation)
} else if (item.data && item.data.documentation) {
return item.data.documentation
} else {
return null
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/Definition.ts
================================================
/**
* Definition.ts
*/
import { Store } from "redux"
import * as Oni from "oni-api"
import * as Helpers from "./../../Plugins/Api/LanguageClient/LanguageClientHelpers"
import * as State from "./NeovimEditorStore"
export enum OpenType {
NewTab = 0,
SplitVertical = 1,
SplitHorizontal = 2,
}
export class Definition {
constructor(private _editor: Oni.Editor, private _store: Store<State.IState>) {}
public async gotoDefinitionUnderCursor(openOptions?: Oni.FileOpenOptions): Promise<void> {
const activeDefinition = this._store.getState().definition
if (!activeDefinition) {
return
}
const { uri, range } = activeDefinition.definitionLocation
const line = range.start.line
const column = range.start.character
await this.gotoPositionInUri(uri, line, column, openOptions)
}
public async gotoPositionInUri(
uri: string,
line: number,
column: number,
openOptions?: Oni.FileOpenOptions,
): Promise<void> {
const filePath = Helpers.unwrapFileUriPath(uri)
const activeEditor = this._editor
await this._editor.openFile(filePath, openOptions)
await activeEditor.neovim.command(`cal cursor(${line + 1}, ${column + 1})`)
await activeEditor.neovim.command("norm zz")
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/FileDropHandler.tsx
================================================
import * as React from "react"
type SetRef = (elem: HTMLElement) => void
interface IFileDropHandler {
handleFiles: (files: FileList) => void
children: (args: { setRef: SetRef }) => React.ReactElement<{ setRef: SetRef }>
}
type DragTypeName = "ondragover" | "ondragleave" | "ondragenter"
/**
* Gets a target element via a callback ref and attaches a file drop event listener callback
* N.B. the element cannot be obscured as this will prevent event transmission
* @name FileDropHandler
* @function
*
* @extends {React}
*/
export default class FileDropHandler extends React.Component<IFileDropHandler> {
private _target: HTMLElement
public componentDidMount() {
this.addDropHandler()
}
public setRef = (element: HTMLElement) => {
this._target = element
}
public addDropHandler() {
if (!this._target) {
return
}
const dragTypes = ["ondragenter", "ondragover", "ondragleave"]
dragTypes.map((event: DragTypeName) => {
if (this._target[event]) {
this._target[event] = ev => {
ev.preventDefault()
ev.stopPropagation()
}
}
})
this._target.ondrop = async ev => {
const { files } = ev.dataTransfer
if (files.length) {
await this.props.handleFiles(files)
}
ev.preventDefault()
}
}
public render() {
return this.props.children({ setRef: this.setRef })
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/HoverRenderer.tsx
================================================
/**
* Hover.tsx
*/
import * as Oni from "oni-api"
import * as os from "os"
import * as React from "react"
import * as types from "vscode-languageserver-types"
import getTokens from "./../../Services/SyntaxHighlighting/TokenGenerator"
import styled, { enableMouse } from "./../../UI/components/common"
import { ErrorInfo } from "./../../UI/components/ErrorInfo"
import { QuickInfoElement } from "./../../UI/components/QuickInfo"
import QuickInfoWithTheme from "./../../UI/components/QuickInfoContainer"
import * as Helpers from "./../../Plugins/Api/LanguageClient/LanguageClientHelpers"
import { Configuration } from "./../../Services/Configuration"
import { convertMarkdown } from "./markdown"
import { IToolTipsProvider } from "./ToolTipsProvider"
const HoverToolTipId = "hover-tool-tip"
const HoverRendererContainer = styled.div`
user-select: none;
cursor: default;
${enableMouse};
`
export class HoverRenderer {
constructor(
private _editor: Oni.Editor,
private _configuration: Configuration,
private _toolTipsProvider: IToolTipsProvider,
) {}
public async showQuickInfo(
x: number,
y: number,
hover: types.Hover,
errors: types.Diagnostic[],
): Promise<void> {
const elem = await this._renderQuickInfoElement(hover, errors)
if (!elem) {
return
}
this._toolTipsProvider.showToolTip(HoverToolTipId, elem, {
position: { pixelX: x, pixelY: y },
openDirection: 1,
padding: "0px",
})
}
public hideQuickInfo(): void {
this._toolTipsProvider.hideToolTip(HoverToolTipId)
}
private async _renderQuickInfoElement(
hover: types.Hover,
errors: types.Diagnostic[],
): Promise<JSX.Element> {
const titleAndContents = await getTitleAndContents(hover)
const showDebugScope = this._configuration.getValue(
"editor.textMateHighlighting.debugScopes",
)
const errorsExist = Boolean(errors && errors.length)
const contentExists = Boolean(errorsExist || titleAndContents || showDebugScope)
return (
contentExists && (
<HoverRendererContainer>
<QuickInfoElement>
<div className="container horizontal center">
<div className="container full">
<ErrorElement
isVisible={errorsExist}
errors={errors}
hasQuickInfo={!!titleAndContents}
/>
<QuickInfoWithTheme
isVisible={!!titleAndContents}
titleAndContents={titleAndContents}
/>
{showDebugScope && this._getDebugScopesElement()}
</div>
</div>
</QuickInfoElement>
</HoverRendererContainer>
)
)
}
private _getDebugScopesElement(): JSX.Element {
const editor: any = this._editor
if (!editor || !editor.syntaxHighlighter) {
return null
}
const cursor = editor.activeBuffer.cursor
const scopeInfo = editor.syntaxHighlighter.getHighlightTokenAt(editor.activeBuffer.id, {
line: cursor.line,
character: cursor.column,
})
if (!scopeInfo || !scopeInfo.scopes) {
return null
}
const items = scopeInfo.scopes.map((si: string) => <li key={si}>{si}</li>)
return (
<div
className="quick-info-debug-scopes"
key="quickInfo.debugScopes"
style={{ margin: "16px" }}
>
<div>DEBUG: TextMate Scopes:</div>
<ul style={{ paddingBlockStart: "20px" }}>{items}</ul>
</div>
)
}
}
const html = (str: string) => ({ __html: str })
interface ErrorElementProps {
errors: types.Diagnostic[]
hasQuickInfo: boolean
isVisible: boolean
}
const ErrorElement = ({ isVisible, errors, hasQuickInfo }: ErrorElementProps) => {
return (
isVisible && (
<ErrorInfo errors={errors} hasQuickInfo={hasQuickInfo} key="quickInfo.errorInfo" />
)
)
}
const getTitleAndContents = async (result: types.Hover) => {
if (!result || !result.contents) {
return null
}
const contents = Helpers.getTextFromContents(result.contents)
if (!contents.length) {
return null
}
const [{ value: titleContent, language }, ...remaining] = contents
if (!titleContent) {
return null
}
const remainder = remaining.map(r => r.value)
const [hasRemainder] = remainder
if (!hasRemainder) {
const tokensPerLine = await getTokens({ language, line: titleContent })
return {
title: html(convertMarkdown({ markdown: titleContent, tokens: tokensPerLine })),
description: null,
}
} else {
const descriptionContent = remainder.join(os.EOL)
const tokensPerLine = await getTokens({ language, line: titleContent })
return {
title: html(convertMarkdown({ markdown: titleContent, tokens: tokensPerLine })),
description: html(
convertMarkdown({
markdown: descriptionContent,
type: "documentation",
}),
),
}
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimActiveWindow.tsx
================================================
/**
* ActiveWindow.tsx
*
* Helper component that is always sized and positioned around the currently
* active window in Neovim.
*/
import * as React from "react"
export interface IActiveWindowProps {
pixelX: number
pixelY: number
pixelWidth: number
pixelHeight: number
}
export class NeovimActiveWindow extends React.PureComponent<IActiveWindowProps, {}> {
public render(): JSX.Element {
const px = (str: number): string => `${str}px`
const style: React.CSSProperties = {
position: "absolute",
left: px(this.props.pixelX),
top: px(this.props.pixelY),
width: px(this.props.pixelWidth),
height: px(this.props.pixelHeight),
overflowY: "hidden",
overflowX: "hidden",
}
return <div style={style}>{this.props.children}</div>
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimBufferLayersView.tsx
================================================
/**
* NeovimLayersView.tsx
*
* Renders layers above vim windows
*/
import * as React from "react"
import { connect } from "react-redux"
import { createSelector } from "reselect"
import * as Oni from "oni-api"
import { NeovimActiveWindow } from "./NeovimActiveWindow"
import * as State from "./NeovimEditorStore"
import styled, { StackLayer } from "../../UI/components/common"
export interface NeovimBufferLayersViewProps {
activeWindowId: number
windows: State.IWindow[]
layers: State.Layers
fontPixelWidth: number
fontPixelHeight: number
}
const InnerLayer = styled.div`
position: absolute;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
overflow: hidden;
`
export interface LayerContextWithCursor extends Oni.BufferLayerRenderContext {
cursorLine: number
cursorColumn: number
}
export class NeovimBufferLayersView extends React.PureComponent<NeovimBufferLayersViewProps, {}> {
public render(): JSX.Element {
const containers = this.props.windows.map(windowState => {
const layers: Oni.BufferLayer[] = this.props.layers[windowState.bufferId] || []
const layerContext: LayerContextWithCursor = {
isActive: windowState.windowId === this.props.activeWindowId,
windowId: windowState.windowId,
fontPixelWidth: this.props.fontPixelWidth,
fontPixelHeight: this.props.fontPixelHeight,
bufferToScreen: windowState.bufferToScreen,
screenToPixel: windowState.screenToPixel,
bufferToPixel: windowState.bufferToPixel,
dimensions: windowState.dimensions,
visibleLines: windowState.visibleLines,
topBufferLine: windowState.topBufferLine,
bottomBufferLine: windowState.bottomBufferLine,
cursorColumn: windowState.column,
cursorLine: windowState.line,
}
const layerElements = layers.map(layer => {
return (
<InnerLayer key={`${layer.id}.${windowState.windowId}.${windowState.bufferId}`}>
{layer.render(layerContext)}
</InnerLayer>
)
})
const dimensions = getWindowPixelDimensions(windowState)
return (
<NeovimActiveWindow {...dimensions} key={windowState.windowId.toString()}>
{layerElements}
</NeovimActiveWindow>
)
})
return <StackLayer>{containers}</StackLayer>
}
}
const EmptySize = {
pixelX: -1,
pixelY: -1,
pixelWidth: 0,
pixelHeight: 0,
}
const getWindowPixelDimensions = (win: State.IWindow) => {
if (!win || !win.screenToPixel) {
return EmptySize
}
const start = win.screenToPixel({
screenX: win.dimensions.x,
screenY: win.dimensions.y,
})
const size = win.screenToPixel({
screenX: win.dimensions.width,
screenY: win.dimensions.height,
})
return {
pixelX: start.pixelX,
pixelY: start.pixelY - 1,
pixelWidth: size.pixelX,
pixelHeight: size.pixelY + 2,
}
}
const EmptyState: NeovimBufferLayersViewProps = {
activeWindowId: -1,
layers: {},
windows: [],
fontPixelHeight: -1,
fontPixelWidth: -1,
}
const getActiveVimTabPage = (state: State.IState) => state.activeVimTabPage
const getWindowState = (state: State.IState) => state.windowState
const windowSelector = createSelector(
[getActiveVimTabPage, getWindowState],
(tabPage: State.IVimTabPage, windowState: State.IWindowState) => {
const windows = tabPage.windowIds.map(windowId => {
return windowState.windows[windowId]
})
return windows.sort((a, b) => a.windowId - b.windowId)
},
)
const mapStateToProps = (state: State.IState): NeovimBufferLayersViewProps => {
if (!state.activeVimTabPage) {
return EmptyState
}
const windows = windowSelector(state)
return {
activeWindowId: state.windowState.activeWindow,
windows,
layers: state.layers,
fontPixelWidth: state.fontPixelWidth,
fontPixelHeight: state.fontPixelHeight,
}
}
export const NeovimBufferLayers = connect(mapStateToProps)(NeovimBufferLayersView)
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditor.tsx
================================================
/**
* NeovimEditor.ts
*
* Editor implementation for Neovim
*/
import * as os from "os"
import * as React from "react"
import "rxjs/add/observable/defer"
import "rxjs/add/observable/merge"
import "rxjs/add/operator/map"
import "rxjs/add/operator/mergeMap"
import { Observable } from "rxjs/Observable"
import * as types from "vscode-languageserver-types"
import { Provider } from "react-redux"
import { bindActionCreators, Store } from "redux"
import { clipboard, ipcRenderer } from "electron"
import * as Oni from "oni-api"
import * as Log from "oni-core-logging"
import { Event, IEvent } from "oni-types"
import { addDefaultUnitIfNeeded } from "./../../Font"
import {
BufferEventContext,
EventContext,
INeovimStartOptions,
NeovimInstance,
NeovimScreen,
NeovimWindowManager,
ScreenWithPredictions,
} from "./../../neovim"
import { INeovimRenderer } from "./../../Renderer"
import { PluginManager } from "./../../Plugins/PluginManager"
import { IColors } from "./../../Services/Colors"
import { commandManager } from "./../../Services/CommandManager"
import { Completion, CompletionProviders } from "./../../Services/Completion"
import { Configuration, IConfigurationValues } from "./../../Services/Configuration"
import { IDiagnosticsDataSource } from "./../../Services/Diagnostics"
import { Overlay, OverlayManager } from "./../../Services/Overlay"
import { ISession } from "./../../Services/Sessions"
import { SnippetManager } from "./../../Services/Snippets"
import { TokenColors } from "./../../Services/TokenColors"
import * as Shell from "./../../UI/Shell"
import {
addInsertModeLanguageFunctionality,
LanguageEditorIntegration,
LanguageManager,
} from "./../../Services/Language"
import {
ISyntaxHighlighter,
NullSyntaxHighlighter,
SyntaxHighlighter,
} from "./../../Services/SyntaxHighlighting"
import { MenuManager } from "./../../Services/Menu"
import { IThemeMetadata, ThemeManager } from "./../../Services/Themes"
import { TypingPredictionManager } from "./../../Services/TypingPredictionManager"
import { Workspace } from "./../../Services/Workspace"
import { Editor } from "./../Editor"
import { BufferManager } from "./../BufferManager"
import { CompletionMenu } from "./CompletionMenu"
import { HoverRenderer } from "./HoverRenderer"
import { NeovimPopupMenu } from "./NeovimPopupMenu"
import NeovimSurface from "./NeovimSurface"
import { ContextMenuManager } from "./../../Services/ContextMenu"
import { asObservable, normalizePath, sleep } from "./../../Utility"
import * as VimConfigurationSynchronizer from "./../../Services/VimConfigurationSynchronizer"
import getLayerManagerInstance from "./BufferLayerManager"
import { Definition } from "./Definition"
import * as ActionCreators from "./NeovimEditorActions"
import { NeovimEditorCommands } from "./NeovimEditorCommands"
import { createStore, IState, ITab } from "./NeovimEditorStore"
import { Rename } from "./Rename"
import { Symbols } from "./Symbols"
import { IToolTipsProvider, NeovimEditorToolTipsProvider } from "./ToolTipsProvider"
import CommandLine from "./../../UI/components/CommandLine"
import ExternalMenus from "./../../UI/components/ExternalMenus"
import WildMenu from "./../../UI/components/WildMenu"
import { CanvasRenderer, WebGLRenderer } from "../../Renderer"
import { getInstance as getNotificationsInstance } from "./../../Services/Notifications"
type NeovimError = [number, string]
export class NeovimEditor extends Editor implements Oni.Editor {
private _bufferManager: BufferManager
private _neovimInstance: NeovimInstance
private _renderer: INeovimRenderer
private _screen: NeovimScreen
private _completionMenu: CompletionMenu
private _contextMenuManager: ContextMenuManager
private _popupMenu: NeovimPopupMenu
private _errorInitializing: boolean = false
private _store: Store<IState>
private _actions: typeof ActionCreators
private _pendingAnimationFrame: boolean = false
private _onEnterEvent: Event<void> = new Event<void>()
private _modeChanged$: Observable<Oni.Vim.Mode>
private _cursorMoved$: Observable<Oni.Cursor>
private _cursorMovedI$: Observable<Oni.Cursor>
private _onScroll$: Observable<Oni.EditorBufferScrolledEventArgs>
private _hasLoaded: boolean = false
private _windowManager: NeovimWindowManager
private _currentColorScheme: string = ""
private _currentBackground: string = ""
private _isFirstRender: boolean = true
private _lastBufferId: string = null
private _typingPredictionManager: TypingPredictionManager = new TypingPredictionManager()
private _syntaxHighlighter: ISyntaxHighlighter
private _languageIntegration: LanguageEditorIntegration
private _completion: Completion
private _hoverRenderer: HoverRenderer
private _rename: Rename = null
private _symbols: Symbols = null
private _definition: Definition = null
private _toolTipsProvider: IToolTipsProvider
private _commands: NeovimEditorCommands
private _externalMenuOverlay: Overlay
private _bufferLayerManager = getLayerManagerInstance()
private _screenWithPredictions: ScreenWithPredictions
private _onShowWelcomeScreen = new Event<void>()
private _onNeovimQuit: Event<void> = new Event<void>()
private _autoFocus: boolean = true
public get onNeovimQuit(): IEvent<void> {
return this._onNeovimQuit
}
public get onShowWelcomeScreen() {
return this._onShowWelcomeScreen
}
public get /* override */ activeBuffer(): Oni.Buffer {
return this._bufferManager.getBufferById(this._lastBufferId)
}
// Capabilities
public get neovim(): Oni.NeovimEditorCapability {
return this._neovimInstance
}
public get bufferLayers() {
return this._bufferLayerManager
}
/**
* Gets whether or not the editor should autoFocus,
* meaning, grab focus on first mount
*/
public get autoFocus(): boolean {
return this._autoFocus
}
public set autoFocus(val: boolean) {
this._autoFocus = val
}
public get syntaxHighlighter(): ISyntaxHighlighter {
return this._syntaxHighlighter
}
constructor(
private _colors: IColors,
private _completionProviders: CompletionProviders,
private _configuration: Configuration,
private _diagnostics: IDiagnosticsDataSource,
private _languageManager: LanguageManager,
private _menuManager: MenuManager,
private _overlayManager: OverlayManager,
private _pluginManager: PluginManager,
private _snippetManager: SnippetManager,
private _themeManager: ThemeManager,
private _tokenColors: TokenColors,
private _workspace: Workspace,
) {
super()
this._store = createStore()
this._actions = bindActionCreators(ActionCreators as any, this._store.dispatch)
this._toolTipsProvider = new NeovimEditorToolTipsProvider(this._actions)
this._contextMenuManager = new ContextMenuManager(this._toolTipsProvider)
this._neovimInstance = new NeovimInstance(100, 100, this._configuration)
this._bufferManager = new BufferManager(this._neovimInstance, this._actions, this._store)
this._screen = new NeovimScreen()
this._screenWithPredictions = new ScreenWithPredictions(this._screen, this._configuration)
this._hoverRenderer = new HoverRenderer(this, this._configuration, this._toolTipsProvider)
this._definition = new Definition(this, this._store)
this._symbols = new Symbols(
this,
this._definition,
this._languageManager,
this._menuManager,
)
this._diagnostics.onErrorsChanged.subscribe(() => {
const errors = this._diagnostics.getErrors()
this._actions.setErrors(errors)
})
this._externalMenuOverlay = this._overlayManager.createItem()
this._externalMenuOverlay.setContents(
<Provider store={this._store}>
<ExternalMenus>
<CommandLine />
<WildMenu />
</ExternalMenus>
</Provider>,
)
this._popupMenu = new NeovimPopupMenu(
this._neovimInstance.onShowPopupMenu,
this._neovimInstance.onHidePopupMenu,
this._neovimInstance.onSelectPopupMenu,
this.onBufferEnter,
this._toolTipsProvider,
)
const notificationManager = getNotificationsInstance()
this._neovimInstance.onMessage.subscribe(messageInfo => {
// TODO: Hook up real notifications
const notification = notificationManager.createItem()
notification.setLevel("error")
notification.setContents(messageInfo.title, messageInfo.details)
notification.onClick.subscribe(() =>
commandManager.executeCommand("oni.config.openInitVim"),
)
notification.show()
})
const initVimPath = this._neovimInstance.doesInitVimExist()
const initVimInUse = this._configuration.getValue("oni.loadInitVim")
const hasCheckedInitVim = this._configuration.getValue("_internal.hasCheckedInitVim")
if (initVimPath && !initVimInUse && !hasCheckedInitVim) {
const initVimNotification = notificationManager.createItem()
initVimNotification.setLevel("info")
initVimNotification.setContents(
"init.vim found",
`We found an init.vim file would you like Oni to use it?
This will result in Oni being reloaded`,
)
initVimNotification.setButtons([
{
title: "Yes",
callback: () => {
this._configuration.setValues(
{ "_internal.hasCheckedInitVim": true, "oni.loadInitVim": true },
true,
)
commandManager.executeCommand("oni.debug.reload")
},
},
{
title: "No",
callback: () => {
this._configuration.setValues(
{ "oni.loadInitVim": false, "_internal.hasCheckedInitVim": true },
true,
)
},
},
])
initVimNotification.show()
}
const ligaturesEnabled = this._configuration.getValue("editor.fontLigatures")
this._renderer =
this._configuration.getValue("editor.renderer") === "webgl"
? new WebGLRenderer(ligaturesEnabled)
: new CanvasRenderer()
this._rename = new Rename(
this,
this._languageManager,
this._toolTipsProvider,
this._workspace,
)
// Services
const onColorsChanged = () => {
const updatedColors = this._colors.getColors()
this._actions.setColors(updatedColors)
}
this._colors.onColorsChanged.subscribe(onColorsChanged)
onColorsChanged()
this.trackDisposable(
this._tokenColors.onTokenColorsChanged.subscribe(() => {
if (this._neovimInstance.isInitialized) {
this._syntaxHighlighter.notifyColorschemeRedraw(`${this.activeBuffer.id}`)
}
}),
)
// Overlays
// TODO: Replace `OverlayManagement` concept and associated window management code with
// explicit window management: #362
this._windowManager = new NeovimWindowManager(this._neovimInstance)
this.trackDisposable(
this._neovimInstance.onCommandLineShow.subscribe(showCommandLineInfo => {
this._actions.showCommandLine(
showCommandLineInfo.content,
showCommandLineInfo.pos,
showCommandLineInfo.firstc,
showCommandLineInfo.prompt,
showCommandLineInfo.indent,
showCommandLineInfo.level,
)
this._externalMenuOverlay.show()
}),
)
this.trackDisposable(
this._neovimInstance.onWildMenuShow.subscribe(wildMenuInfo => {
this._actions.showWildMenu(wildMenuInfo)
}),
)
this.trackDisposable(
this._neovimInstance.onWildMenuSelect.subscribe(wildMenuInfo => {
this._actions.wildMenuSelect(wildMenuInfo)
}),
)
this.trackDisposable(
this._neovimInstance.onWildMenuHide.subscribe(() => {
this._actions.hideWildMenu()
}),
)
this.trackDisposable(
this._neovimInstance.onCommandLineHide.subscribe(() => {
this._actions.hideCommandLine()
this._externalMenuOverlay.hide()
}),
)
this.trackDisposable(
this._neovimInstance.onCommandLineSetCursorPosition.subscribe(commandLinePos => {
this._actions.setCommandLinePosition(commandLinePos)
}),
)
this.trackDisposable(
this._windowManager.onWindowStateChanged.subscribe(tabPageState => {
if (!tabPageState) {
return
}
const filteredTabState = tabPageState.inactiveWindows.filter(w => !!w)
const inactiveIds = filteredTabState.map(w => w.windowNumber)
this._actions.setActiveVimTabPage(tabPageState.tabId, [
tabPageState.activeWindow.windowNumber,
...inactiveIds,
])
const { activeWindow } = tabPageState
if (activeWindow) {
this._actions.setWindowState(
activeWindow.windowNumber,
activeWindow.bufferId,
activeWindow.bufferFullPath,
activeWindow.column,
activeWindow.line,
activeWindow.bottomBufferLine,
activeWindow.topBufferLine,
activeWindow.dimensions,
activeWindow.bufferToScreen,
activeWindow.visibleLines,
)
}
filteredTabState.map(w => {
this._actions.setInactiveWindowState(w.windowNumber, w.dimensions)
})
}),
)
this.trackDisposable(
this._neovimInstance.onYank.subscribe(yankInfo => {
if (this._configuration.getValue("editor.clipboard.enabled")) {
const isYankAndAllowed =
yankInfo.operator === "y" &&
this._configuration.getValue("editor.clipboard.synchronizeYank")
const isDeleteAndAllowed =
yankInfo.operator === "d" &&
this._configuration.getValue("editor.clipboard.synchronizeDelete")
const isAllowed = isYankAndAllowed || isDeleteAndAllowed
if (isAllowed) {
const content = yankInfo.regcontents.join(os.EOL)
const postfix = yankInfo.regtype === "V" ? os.EOL : ""
clipboard.writeText(content + postfix)
}
}
}),
)
this.trackDisposable(
this._neovimInstance.onTitleChanged.subscribe(newTitle => {
const title = newTitle.replace(" - NVIM", " - ONI")
Shell.Actions.setWindowTitle(title)
}),
)
this.trackDisposable(
this._neovimInstance.onLeave.subscribe(() => {
this._onNeovimQuit.dispatch()
}),
)
this.trackDisposable(
this._neovimInstance.onOniCommand.subscribe(context => {
const commandToExecute = context.command
const commandArgs = context.args
commandManager.executeCommand(commandToExecute, commandArgs)
}),
)
// TODO: Refactor to event and track disposable
this.trackDisposable(
this._neovimInstance.onVimEvent.subscribe(evt => {
if (evt.eventName !== "VimLeave") {
this._updateWindow(evt.eventContext)
this._bufferManager.updateBufferFromEvent(evt.eventContext)
}
}),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onBufDelete.subscribe((evt: BufferEventContext) =>
this._onBufDelete(evt),
),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onBufUnload.subscribe((evt: BufferEventContext) =>
this._onBufUnload(evt),
),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onBufEnter.subscribe((evt: BufferEventContext) =>
this._onBufEnter(evt),
),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onBufWinEnter.subscribe((evt: BufferEventContext) =>
this._onBufEnter(evt),
),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onFileTypeChanged.subscribe((evt: EventContext) =>
this._onFileTypeChanged(evt),
),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onBufWipeout.subscribe((evt: BufferEventContext) =>
this._onBufWipeout(evt),
),
)
this.trackDisposable(
this._neovimInstance.autoCommands.onBufWritePost.subscribe((evt: EventContext) =>
this._onBufWritePost(evt),
),
)
this.trackDisposable(
this._neovimInstance.onColorsChanged.subscribe(() => {
this._onColorsChanged()
}),
)
this.trackDisposable(
this._neovimInstance.onError.subscribe(err => {
this._errorInitializing = true
this._actions.setNeovimError(true)
}),
)
// These functions are mirrors of each other if vim changes dir then oni responds
// and if oni initiates the dir change then we inform vim
// NOTE: the gates to check that the dirs being passed aren't already set prevent
// an infinite loop!!
this.trackDisposable(
this._neovimInstance.onDirectoryChanged.subscribe(async newDirectory => {
if (newDirectory !== this._workspace.activeWorkspace) {
await this._workspace.changeDirectory(newDirectory)
}
}),
)
this.trackDisposable(
this._workspace.onDirectoryChanged.subscribe(async newDirectory => {
if (newDirectory !== this._neovimInstance.currentVimDirectory) {
await this._neovimInstance.chdir(newDirectory)
}
}),
)
// TODO: Add first class event for this
this._neovimInstance.on("action", (action: any) => {
this._renderer.onAction(action)
this._screen.dispatch(action)
this._scheduleRender()
})
this._typingPredictionManager.onPredictionsChanged.subscribe(predictions => {
this._screenWithPredictions.updatePredictions(predictions, this._screen.cursorRow)
this._renderImmediate()
})
this.trackDisposable(
this._neovimInstance.onRedrawComplete.subscribe(() => {
const isCursorInCommandRow = this._screen.cursorRow === this._screen.height - 1
const isCommandLineMode = this.mode && this.mode.indexOf("cmdline") === 0
// In some cases, during redraw, Neovim will actually set the cursor position
// to the command line when rendering. This can happen when 'echo'ing or
// when a popumenu is enabled, and text is writing.
//
// We should ignore those cases, and only set the cursor in the command row
// when we're actually in command line mode. See #1265 for more context.
if (!isCursorInCommandRow || (isCursorInCommandRow && isCommandLineMode)) {
this._actions.setCursorPosition(this._screen)
this._typingPredictionManager.setCursorPosition(this._screen)
}
}),
)
// TODO: Add first class event for this
this._neovimInstance.on("tabline-update", async (currentTabId: number, tabs: ITab[]) => {
const atomicCalls = tabs.map((tab: ITab) => {
return ["nvim_call_function", ["tabpagebuflist", [tab.id]]]
})
const response = await this._neovimInstance.request("nvim_call_atomic", [atomicCalls])
tabs.map((tab: ITab, index: number) => {
tab.buffersInTab = response[0][index] instanceof Array ? response[0][index] : []
})
this._actions.setTabs(currentTabId, tabs)
})
// TODO: Does any disposal need to happen for the observables?
this._cursorMoved$ = asObservable(this._neovimInstance.autoCommands.onCursorMoved).map(
(evt): Oni.Cursor => ({
line: evt.line - 1,
column: evt.column - 1,
}),
)
this._cursorMovedI$ = asObservable(this._neovimInstance.autoCommands.onCursorMovedI).map(
(evt): Oni.Cursor => ({
line: evt.line - 1,
column: evt.column - 1,
}),
)
Observable.merge(this._cursorMoved$, this._cursorMovedI$).subscribe(cursorMoved => {
this.notifyCursorMoved(cursorMoved)
})
this._modeChanged$ = asObservable(this._neovimInstance.onModeChanged)
this._onScroll$ = asObservable(this._neovimInstance.onScroll)
this.trackDisposable(
this._neovimInstance.onModeChanged.subscribe(newMode => this._onModeChanged(newMode)),
)
this.trackDisposable(
this._neovimInstance.onBufferUpdate.subscribe(update => {
const buffer = this._bufferManager.updateBufferFromEvent(update.eventContext)
const bufferUpdate = {
context: update.eventContext,
buffer,
contentChanges: update.contentChanges,
}
this.notifyBufferChanged(bufferUpdate)
this._actions.bufferUpdate(
parseInt(bufferUpdate.buffer.id, 10),
bufferUpdate.buffer.modified,
bufferUpdate.buffer.lineCount,
)
this._syntaxHighlighter.notifyBufferUpdate(bufferUpdate)
}),
)
this.trackDisposable(
this._neovimInstance.onScroll.subscribe((args: EventContext) => {
const convertedArgs: Oni.EditorBufferScrolledEventArgs = {
bufferTotalLines: args.bufferTotalLines,
windowTopLine: args.windowTopLine,
windowBottomLine: args.windowBottomLine,
}
this.notifyBufferScrolled(convertedArgs)
}),
)
addInsertModeLanguageFunctionality(
this._cursorMovedI$,
this._modeChanged$,
this._onScroll$,
this._toolTipsProvider,
)
const textMateHighlightingEnabled = this._configuration.getValue(
"editor.textMateHighlighting.enabled",
)
this._syntaxHighlighter = textMateHighlightingEnabled
? new SyntaxHighlighter(this, this._tokenColors)
: new NullSyntaxHighlighter()
this._completion = new Completion(
this,
this._configuration,
this._completionProviders,
this._languageManager,
this._snippetManager,
this._syntaxHighlighter,
)
this._completionMenu = new CompletionMenu(this._contextMenuManager.create())
this.trackDisposable(
this._completion.onShowCompletionItems.subscribe(completions => {
this._completionMenu.show(completions.filteredCompletions, completions.base)
}),
)
this.trackDisposable(
this._completion.onHideCompletionItems.subscribe(completions => {
this._completionMenu.hide()
}),
)
this.trackDisposable(
this._completionMenu.onItemFocused.subscribe(item => {
this._completion.resolveItem(item)
}),
)
this.trackDisposable(
this._completionMenu.onItemSelected.subscribe(item => {
this._completion.commitItem(item)
}),
)
this._languageIntegration = new LanguageEditorIntegration(
this,
this._configuration,
this._languageManager,
)
this.trackDisposable(
this._languageIntegration.onShowHover.subscribe(async hover => {
const { cursorPixelX, cursorPixelY } = this._store.getState()
await this._hoverRenderer.showQuickInfo(
cursorPixelX,
cursorPixelY,
hover.hover,
hover.errors,
)
}),
)
this.trackDisposable(
this._languageIntegration.onHideHover.subscribe(() => {
this._hoverRenderer.hideQuickInfo()
}),
)
this.trackDisposable(
this._languageIntegration.onShowDefinition.subscribe(definition => {
this._actions.setDefinition(definition.token, definition.location)
}),
)
this.trackDisposable(
this._languageIntegration.onHideDefinition.subscribe(definition => {
this._actions.hideDefinition()
}),
)
this._commands = new NeovimEditorCommands(
commandManager,
this._contextMenuManager,
this._definition,
this._languageIntegration,
this._neovimInstance,
this._rename,
this._symbols,
)
this._renderImmediate()
this._onConfigChanged(this._configuration.getValues())
this.trackDisposable(
this._configuration.onConfigurationChanged.subscribe(
(newValues: Partial<IConfigurationValues>) => this._onConfigChanged(newValues),
),
)
// TODO: Factor these out to a place that isn't dependent on a single editor instance
ipcRenderer.on("open-files", (_evt: any, files: string[]) => {
this.openFiles(files)
})
ipcRenderer.on("open-file", (_evt: any, path: string) => {
this._neovimInstance.command(`:e! ${path}`)
})
}
public async blockInput(
inputFunction: (inputCallback: Oni.InputCallbackFunction) => Promise<void>,
): Promise<void> {
return this._neovimInstance.blockInput(inputFunction)
}
public async checkMapping(
key: string,
mode: "n" | "v" | "i",
): Promise<{ key: string; mapping: string }> {
return this._neovimInstance.checkUserMapping({ key, mode })
}
public dispose(): void {
super.dispose()
if (this._neovimInstance) {
this._neovimInstance.dispose()
this._neovimInstance = null
}
if (this._syntaxHighlighter) {
this._syntaxHighlighter.dispose()
this._syntaxHighlighter = null
}
if (this._languageIntegration) {
this._languageIntegration.dispose()
this._languageIntegration = null
}
if (this._completion) {
this._completion.dispose()
this._completion = null
}
if (this._externalMenuOverlay) {
this._externalMenuOverlay.hide()
this._externalMenuOverlay = null
}
if (this._popupMenu) {
this._popupMenu.dispose()
this._popupMenu = null
}
if (this._windowManager) {
this._windowManager.dispose()
this._windowManager = null
}
}
public enter(): void {
Log.info("[NeovimEditor::enter]")
this._onEnterEvent.dispatch()
this._actions.setHasFocus(true)
this._commands.activate()
this._neovimInstance.autoCommands.executeAutoCommand("FocusGained")
this.checkAutoRead()
if (this.activeBuffer) {
this.notifyBufferEnter(this.activeBuffer)
}
}
public checkAutoRead(): void {
// If the user has autoread enabled, we should run ":checktime" on
// focus, as this is needed to get the file to auto-update.
// https://github.com/neovim/neovim/issues/1936
if (
this._neovimInstance.isInitialized &&
this._configuration.getValue("vim.setting.autoread")
) {
this._neovimInstance.command(":checktime")
}
}
public leave(): void {
Log.info("[NeovimEditor::leave]")
this._actions.setHasFocus(false)
this._commands.deactivate()
this._neovimInstance.autoCommands.executeAutoCommand("FocusLost")
}
public async createWelcomeBuffer() {
const buf = await this.openFile("WELCOME")
await buf.setScratchBuffer()
return buf
}
public async clearSelection(): Promise<void> {
await this._neovimInstance.input("<esc>")
await this._neovimInstance.input("a")
}
public async setSelection(range: types.Range): Promise<void> {
await this._neovimInstance.input("<esc>")
// Clear out any pending block selection
// Without this, if there was a line-wise visual selection,
// range selection would not work correctly.
const atomicCallsVisualMode = [
[
"nvim_call_function",
["setpos", [".", [0, range.start.line + 1, range.start.character + 1]]],
],
["nvim_command", ["normal! v"]],
[
"nvim_call_function",
["setpos", [".", [0, range.end.line + 1, range.end.character + 1]]],
],
]
await this._neovimInstance.request("nvim_call_atomic", [atomicCallsVisualMode])
await this._neovimInstance.input("<esc>")
// Re-select the selection and switch to 'select' mode so that typing
// overwrites the selection
const atomicCalls = [
[
"nvim_call_function",
["setpos", ["'<", [0, range.start.line + 1, range.start.character + 1]]],
],
[
"nvim_call_function",
["setpos", ["'>", [0, range.end.line + 1, range.end.character + 1]]],
],
// ["nvim_command", ["normal! v"]],
["nvim_command", ["set selectmode=cmd"]],
["nvim_command", ["normal! gv"]],
["nvim_command", ["set selectmode="]],
]
await this._neovimInstance.request("nvim_call_atomic", [atomicCalls])
}
public async setTextOptions(textOptions: Oni.EditorTextOptions): Promise<void> {
const { insertSpacesForTab, tabSize } = textOptions
if (insertSpacesForTab) {
await this._neovimInstance.command("set expandtab")
} else {
await this._neovimInstance.command("set noexpandtab")
}
await this._neovimInstance.command(
`set tabstop=${tabSize} shiftwidth=${tabSize} softtabstop=${tabSize}`,
)
}
// "v:this_session" |this_session-variable| - is a variable nvim sets to the path of
// the current session file when one is loaded we use it here to check the current session
// if it in oni's session dir then this is updated
public async getCurrentSession(): Promise<string | void> {
const result = await this._neovimInstance.request<string | NeovimError>("nvim_get_vvar", [
"this_session",
])
if (Array.isArray(result)) {
return this._handleNeovimError(result)
}
return result
}
public async persistSession(session: ISession) {
const result = await this._neovimInstance.command(`mksession! ${session.file}`)
return this._handleNeovimError(result)
}
public async restoreSession(session: ISession) {
await this._neovimInstance.closeAllBuffers()
const result = await this._neovimInstance.command(`source ${session.file}`)
return this._handleNeovimError(result)
}
public async openFile(
file: string,
openOptions: Oni.FileOpenOptions = Oni.DefaultFileOpenOptions,
): Promise<Oni.Buffer> {
const tabsMode = this._configuration.getValue("tabs.mode") === "tabs"
const cmd = new Proxy(
{
[Oni.FileOpenMode.NewTab]: "tabnew!",
[Oni.FileOpenMode.HorizontalSplit]: "sp!",
[Oni.FileOpenMode.VerticalSplit]: "vsp!",
[Oni.FileOpenMode.Edit]: tabsMode ? "tab drop" : "e!",
[Oni.FileOpenMode.ExistingTab]: "e!",
},
{
get: (target: { [cmd: string]: string }, name: string) =>
name in target ? target[name] : "e!",
},
)
await this._neovimInstance.command(
`:${cmd[openOptions.openMode]} ${this._escapeSpaces(file)}`,
)
return this.activeBuffer
}
public openFiles = async (
files: string[],
openOptions: Oni.FileOpenOptions = Oni.DefaultFileOpenOptions,
): Promise<Oni.Buffer> => {
if (!files) {
return this.activeBuffer
}
// Open the first file in the current buffer if there is no file there,
// otherwise use the passed option.
// Respects the users config and uses "tab drop" for Tab users, and "e!"
// otherwise.
if (this.activeBuffer.filePath === "") {
await this.openFile(files[0], { openMode: Oni.FileOpenMode.Edit })
} else {
await this.openFile(files[0], openOptions)
}
for (let i = 1; i < files.length; i++) {
await this.openFile(files[i], openOptions)
}
return this.activeBuffer
}
public async newFile(filePath: string): Promise<Oni.Buffer> {
await this._neovimInstance.command(":vsp " + filePath)
const context = await this._neovimInstance.getContext()
const buffer = this._bufferManager.updateBufferFromEvent(context)
return buffer
}
public executeCommand(command: string): void {
commandManager.executeCommand(command, null)
}
public _onFilesDropped = async (files: FileList) => {
if (files.length) {
const normalisedPaths = Array.from(files).map(f => normalizePath(f.path))
await this.openFiles(normalisedPaths, { openMode: Oni.FileOpenMode.Edit })
}
}
public async init(
filesToOpen: string[],
startOptions?: Partial<INeovimStartOptions>,
): Promise<void> {
Log.info("[NeovimEditor::init] Called with filesToOpen: " + filesToOpen)
const defaultOptions: INeovimStartOptions = {
runtimePaths: this._pluginManager.getAllRuntimePaths(),
transport: this._configuration.getValue("experimental.neovim.transport"),
neovimPath: this._configuration.getValue("debug.neovimPath"),
loadInitVim: this._configuration.getValue("oni.loadInitVim"),
useDefaultConfig: this._configuration.getValue("oni.useDefaultConfig"),
}
const combinedOptions = {
...defaultOptions,
...startOptions,
}
await this._neovimInstance.start(combinedOptions)
if (this._errorInitializing) {
return
}
VimConfigurationSynchronizer.synchronizeConfiguration(
this._neovimInstance,
this._configuration.getValues(),
)
this._themeManager.onThemeChanged.subscribe(() => {
const newTheme = this._themeManager.activeTheme
if (
newTheme.baseVimTheme &&
(newTheme.baseVimTheme !== this._currentColorScheme ||
newTheme.baseVimBackground !== this._currentBackground)
) {
this.setColorSchemeFromTheme(newTheme)
}
})
if (this._themeManager.activeTheme && this._themeManager.activeTheme.baseVimTheme) {
await this.setColorSchemeFromTheme(this._themeManager.activeTheme)
}
if (filesToOpen && filesToOpen.length > 0) {
await this.openFiles(filesToOpen, { openMode: Oni.FileOpenMode.Edit })
} else {
if (this._configuration.getValue("experimental.welcome.enabled")) {
this._onShowWelcomeScreen.dispatch()
}
}
this._actions.setLoadingComplete()
this._hasLoaded = true
this._isFirstRender = true
this._scheduleRender()
}
public async setColorSchemeFromTheme(theme: IThemeMetadata): Promise<void> {
if (
(theme.baseVimBackground === "dark" || theme.baseVimBackground === "light") &&
theme.baseVimBackground !== this._currentBackground
) {
await this._neovimInstance.command(":set background=" + theme.baseVimBackground)
this._currentBackground = theme.baseVimBackground
}
await this._neovimInstance.command(":color " + theme.baseVimTheme)
}
public getBuffers(): Array<Oni.Buffer | Oni.InactiveBuffer> {
return this._bufferManager.getBuffers()
}
public async bufferDelete(bufferId: string = this.activeBuffer.id): Promise<void> {
// FIXME: currently this command forces a bufEnter event by navigating away
// from the closed buffer which is currently the only means of updating Oni
// post a BufDelete event
await this._neovimInstance.command(`bd ${bufferId}`)
if (bufferId === "%" || bufferId === this.activeBuffer.id) {
await this._neovimInstance.command(`bnext`)
} else {
await this._neovimInstance.command(`bnext`)
await this._neovimInstance.command(`bprev`)
}
}
public render(): JSX.Element {
const onBufferClose = (bufferId: number) => {
this._neovimInstance.command(`bw! ${bufferId}`)
}
const onBufferSelect = (bufferId: number) => {
this._neovimInstance.command(`buf ${bufferId}`)
}
const onTabClose = (tabId: number) => {
this._neovimInstance.command(`tabclose ${tabId}`)
}
const onTabSelect = (tabId: number) => {
this._neovimInstance.command(`tabn ${tabId}`)
}
const onKeyDown = (key: string) => {
this.input(key)
}
return (
<Provider store={this._store}>
<NeovimSurface
onFileDrop={this._onFilesDropped}
renderer={this._renderer}
autoFocus={this._autoFocus}
typingPrediction={this._typingPredictionManager}
neovimInstance={this._neovimInstance}
screen={this._screen}
onActivate={this._onEnterEvent}
onKeyDown={onKeyDown}
onBufferClose={onBufferClose}
onBufferSelect={onBufferSelect}
onBounceStart={() => this._onBounceStart()}
onBounceEnd={() => this._onBounceEnd()}
onImeStart={() => this._onImeStart()}
onImeEnd={() => this._onImeEnd()}
onTabClose={onTabClose}
onTabSelect={onTabSelect}
/>
</Provider>
)
}
public async input(key: string): Promise<void> {
if (this._configuration.getValue("debug.fakeLag.neovimInput")) {
await sleep(this._configuration.getValue("debug.fakeLag.neovimInput"))
}
// Check if any of the buffer layers can handle the input...
const buf = this.activeBuffer
const layerInputHandler = buf && buf.handleInput(key)
if (layerInputHandler) {
return
}
await this._neovimInstance.input(key)
}
public async quit(): Promise<void> {
if (this._windowManager) {
this._windowManager.dispose()
this._windowManager = null
}
return this._neovimInstance.quit()
}
private _onBounceStart(): void {
this._actions.setCursorScale(1.1)
}
private _onBounceEnd(): void {
this._actions.setCursorScale(1.0)
}
private _onModeChanged(newMode: string): void {
// 'Bounce' the cursor for show match
if (newMode === "showmatch") {
this._actions.setCursorScale(0.9)
}
this._typingPredictionManager.clearAllPredictions()
if (newMode === "insert" && this._configuration.getValue("editor.typingPrediction")) {
this._typingPredictionManager.enable()
} else {
this._typingPredictionManager.disable()
}
this._actions.setMode(newMode)
this.setMode(newMode as Oni.Vim.Mode)
}
private _updateWindow(currentBuffer: EventContext) {
this._actions.setWindowCursor(
currentBuffer.windowNumber,
currentBuffer.line - 1,
currentBuffer.column - 1,
)
// Convert to 0-based positions
this._syntaxHighlighter.notifyViewportChanged(
currentBuffer.bufferNumber.toString(),
currentBuffer.windowTopLine - 1,
currentBuffer.windowBottomLine - 1,
)
}
private _onFileTypeChanged(evt: EventContext): void {
const buf = this._bufferManager.updateBufferFromEvent(evt)
this._bufferLayerManager.notifyBufferFileTypeChanged(buf)
}
private async _onBufEnter(evt: BufferEventContext): Promise<void> {
const buf = this._bufferManager.updateBufferFromEvent(evt.current)
this._bufferManager.populateBufferList(evt)
this._workspace.autoDetectWorkspace(buf.filePath)
const lastBuffer = this.activeBuffer
if (lastBuffer && lastBuffer.filePath !== buf.filePath) {
this.notifyBufferLeave({
filePath: lastBuffer.filePath,
language: lastBuffer.language,
})
}
this._lastBufferId = evt.current.bufferNumber.toString()
this.notifyBufferEnter(buf)
this._bufferLayerManager.notifyBufferEnter(buf)
// Existing buffers contains a duplicate current buffer object which should be filtered out
// and current buffer sent instead. Finally Filter out falsy viml values.
const existingBuffersWithoutCurrent = evt.existingBuffers.filter(
b => b.bufferNumber !== evt.current.bufferNumber,
)
const buffers = [evt.current, ...existingBuffersWithoutCurrent].filter(b => !!b)
this._actions.bufferEnter(buffers)
}
private _escapeSpaces(str: string): string {
return str.split(" ").join("\\ ")
}
private _onImeStart(): void {
this._actions.setImeActive(true)
}
private _onImeEnd(): void {
this._actions.setImeActive(false)
}
private async _onBufWritePost(evt: EventContext): Promise<void> {
// After we save we aren't modified... but we can pass it in just to be safe
this._actions.bufferSave(evt.bufferNumber, evt.modified, evt.version)
this.notifyBufferSaved({
filePath: evt.bufferFullPath,
language: evt.filetype,
})
}
private async _onBufUnload(evt: BufferEventContext): Promise<void> {
this._bufferManager.populateBufferList(evt)
this._neovimInstance.getBufferIds().then(ids => this._actions.setCurrentBuffers(ids))
}
private async _onBufDelete(evt: BufferEventContext): Promise<void> {
this._bufferManager.populateBufferList(evt)
this._neovimInstance.getBufferIds().then(ids => this._actions.setCurrentBuffers(ids))
}
private async _onBufWipeout(evt: BufferEventContext): Promise<void> {
this._bufferManager.populateBufferList(evt)
this._neovimInstance.getBufferIds().then(ids => this._actions.setCurrentBuffers(ids))
}
private _onConfigChanged(newValues: Partial<IConfigurationValues>): void {
const fontFamily = this._configuration.getValue("editor.fontFamily")
const fontSize = addDefaultUnitIfNeeded(this._configuration.getValue("editor.fontSize"))
const fontWeight = this._configuration.getValue("editor.fontWeight")
const linePadding = this._configuration.getValue("editor.linePadding")
this._actions.setFont(fontFamily, fontSize, fontWeight)
this._neovimInstance.setFont(fontFamily, fontSize, fontWeight, linePadding)
Object.keys(newValues).forEach(key => {
const value = newValues[key]
this._actions.setConfigValue(key, value)
})
if (this._hasLoaded) {
VimConfigurationSynchronizer.synchronizeConfiguration(this._neovimInstance, newValues)
}
this._isFirstRender = true
this._scheduleRender()
}
private async _onColorsChanged(): Promise<void> {
const newColorScheme = await this._neovimInstance.eval<string>("g:colors_name")
const { bufferNumber } = await this._neovimInstance.getContext()
this._syntaxHighlighter.notifyColorschemeRedraw(`${bufferNumber}`)
// In error cases, the neovim API layer returns an array
if (typeof newColorScheme !== "string") {
return
}
this._currentColorScheme = newColorScheme
const backgroundColor = this._screen.backgroundColor
const foregroundColor = this._screen.foregroundColor
Log.info(
`[NeovimEditor] Colors changed: ${newColorScheme} - background: ${backgroundColor} foreground: ${foregroundColor}`,
)
this._themeManager.notifyVimThemeChanged(newColorScheme, backgroundColor, foregroundColor)
const tokenColors = await this._neovimInstance.getTokenColors()
this._tokenColors.setDefaultTokenColors(tokenColors)
// Flip first render to force a full redraw
this._isFirstRender = true
this._scheduleRender()
}
private _scheduleRender(): void {
if (this._pendingAnimationFrame) {
return
}
this._pendingAnimationFrame = true
window.requestAnimationFrame(() => this._renderImmediate())
}
private _renderImmediate(): void {
this._pendingAnimationFrame = false
if (this._hasLoaded) {
if (this._isFirstRender) {
this._isFirstRender = false
this._renderer.redrawAll(this._screenWithPredictions as any)
} else {
this._renderer.draw(this._screenWithPredictions as any)
}
}
}
private _handleNeovimError(result: NeovimError | void): void {
if (!result) {
return null
}
// the first value of the error response is a 0
if (Array.isArray(result) && !result[0]) {
const [, error] = result
Log.warn(error)
throw new Error(error)
}
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditorActions.ts
================================================
/**
* ActionCreators.ts
*
* Action Creators are relatively simple - they are just a function that returns an `Action`
*
* For information on Action Creators, check out this link:
* http://redux.js.org/docs/basics/Actions.html
*/
import * as types from "vscode-languageserver-types"
import * as Oni from "oni-api"
import * as State from "./NeovimEditorStore"
import { EventContext, InactiveBufferContext, IScreen } from "./../../neovim"
import { normalizePath } from "./../../Utility"
import { IConfigurationValues } from "./../../Services/Configuration"
import { Errors } from "./../../Services/Diagnostics"
import { IThemeColors } from "./../../Services/Themes"
import { IBufferLayer } from "./../NeovimEditor/BufferLayerManager"
export type DispatchFunction = (action: any) => void
export type GetStateFunction = () => State.IState
export interface ISetHasFocusAction {
type: "SET_HAS_FOCUS"
payload: {
hasFocus: boolean
}
}
export interface ISetLoadingCompleteAction {
type: "SET_LOADING_COMPLETE"
}
export interface ISetColorsAction {
type: "SET_COLORS"
payload: {
colors: IThemeColors
}
}
export interface IAddBufferLayerAction {
type: "ADD_BUFFER_LAYER"
payload: {
bufferId: number
layer: IBufferLayer
}
}
export interface IRemoveBufferLayerAction {
type: "REMOVE_BUFFER_LAYER"
payload: {
bufferId: number
layer: IBufferLayer
}
}
export interface ISetViewportAction {
type: "SET_VIEWPORT"
payload: {
width: number
height: number
}
}
export interface ISetCommandLinePosition {
type: "SET_COMMAND_LINE_POSITION"
payload: {
position: number
level: number
}
}
export interface IHideCommandLineAction {
type: "HIDE_COMMAND_LINE"
}
export interface IShowCommandLineAction {
type: "SHOW_COMMAND_LINE"
payload: {
content: Array<[any, string]>
position: number
firstchar: string
prompt: string
indent: number
level: number
}
}
export interface IWildMenuSelectedAction {
type: "WILDMENU_SELECTED"
payload: {
selected: number
}
}
export interface IShowWildMenuAction {
type: "SHOW_WILDMENU"
payload: {
options: string[]
}
}
export interface IHideWildMenuAction {
type: "HIDE_WILDMENU"
}
export interface ISetNeovimErrorAction {
type: "SET_NEOVIM_ERROR"
payload: {
neovimError: boolean
}
}
export interface ISetCursorScaleAction {
type: "SET_CURSOR_SCALE"
payload: {
cursorScale: number
}
}
export interface ISetCurrentBuffersAction {
type: "SET_CURRENT_BUFFERS"
payload: {
bufferIds: number[]
}
}
export interface ISetImeActive {
type: "SET_IME_ACTIVE"
payload: {
imeActive: boolean
}
}
export interface ISetFont {
type: "SET_FONT"
payload: {
fontFamily: string
fontSize: string
fontWeight: string
}
}
export interface IBufferEnterAction {
type: "BUFFER_ENTER"
payload: {
buffers: State.IBuffer[]
}
}
export interface IShowToolTipAction {
type: "SHOW_TOOL_TIP"
payload: {
id: string
element: JSX.Element
options?: Oni.ToolTip.ToolTipOptions
}
}
export interface IHideToolTipAction {
type: "HIDE_TOOL_TIP"
payload: {
id: string
}
}
export interface IBufferUpdateAction {
type: "BUFFER_UPDATE"
payload: {
id: number
modified: boolean
version: number
totalLines: number
}
}
export interface IBufferSaveAction {
type: "BUFFER_SAVE"
payload: {
id: number
modified: boolean
version: number
}
}
export interface ISetTabs {
type: "SET_TABS"
payload: {
selectedTabId: number
tabs: State.ITab[]
}
}
export interface ISetActiveVimTabPage {
type: "SET_ACTIVE_VIM_TAB_PAGE"
payload: {
id: number
windowIds: number[]
}
}
export interface ISetWindowCursor {
type: "SET_WINDOW_CURSOR"
payload: {
windowId: number
line: number
column: number
}
}
export interface ISetWindowState {
type: "SET_WINDOW_STATE"
payload: {
windowId: number
bufferId: number
file: string
column: number
line: number
dimensions: Oni.Shapes.Rectangle
bufferToScreen: Oni.Coordinates.BufferToScreen
screenToPixel: Oni.Coordinates.ScreenToPixel
bufferToPixel: Oni.Coordinates.BufferToPixel
topBufferLine: number
bottomBufferLine: number
visibleLines: string[]
}
}
export interface ISetInactiveWindowState {
type: "SET_INACTIVE_WINDOW_STATE"
payload: {
windowId: number
dimensions: Oni.Shapes.Rectangle
}
}
export interface ISetErrorsAction {
type: "SET_ERRORS"
payload: {
errors: Errors
}
}
export interface ISetCursorPositionAction {
type: "SET_CURSOR_POSITION"
payload: {
pixelX: number
pixelY: number
fontPixelWidth: number
fontPixelHeight: number
cursorCharacter: string
cursorPixelWidth: number
}
}
export interface ISetModeAction {
type: "SET_MODE"
payload: {
mode: string
}
}
export interface IShowDefinitionAction {
type: "SHOW_DEFINITION"
payload: {
token: Oni.IToken
definitionLocation: types.Location
}
}
export interface IHideDefinitionAction {
type: "HIDE_DEFINITION"
}
export interface ISetConfigurationValue<K extends keyof IConfigurationValues> {
type: "SET_CONFIGURATION_VALUE"
payload: {
key: K
value: IConfigurationValues[K]
}
}
export type Action<K extends keyof IConfigurationValues> = SimpleAction | ActionWithGeneric<K>
export type SimpleAction =
| IAddBufferLayerAction
| IRemoveBufferLayerAction
| IBufferEnterAction
| IBufferSaveAction
| IBufferUpdateAction
| ISetColorsAction
| ISetCursorPositionAction
| ISetImeActive
| ISetFont
| IHideToolTipAction
| IShowToolTipAction
| IHideDefinitionAction
| IShowDefinitionAction
| ISetModeAction
| ISetCursorScaleAction
| ISetErrorsAction
| ISetCurrentBuffersAction
| ISetHasFocusAction
| ISetNeovimErrorAction
| ISetTabs
| ISetActiveVimTabPage
| ISetLoadingCompleteAction
| ISetViewportAction
| ISetWindowCursor
| ISetWindowState
| ISetInactiveWindowState
| IShowCommandLineAction
| IHideCommandLineAction
| ISetCommandLinePosition
| IHideWildMenuAction
| IShowWildMenuAction
| IWildMenuSelectedAction
export type ActionWithGeneric<K extends keyof IConfigurationValues> = ISetConfigurationValue<K>
export const setHasFocus = (hasFocus: boolean) => {
return {
type: "SET_HAS_FOCUS",
payload: {
hasFocus,
},
}
}
export const setLoadingComplete = () => {
return {
type: "SET_LOADING_COMPLETE",
}
}
export const setColors = (colors: IThemeColors) => ({
type: "SET_COLORS",
payload: {
colors,
},
})
export const setCommandLinePosition = ({
pos: position,
level,
}: {
pos: number
level: number
}) => ({
type: "SET_COMMAND_LINE_POSITION",
payload: {
position,
level,
},
})
export const hideCommandLine = () => ({
type: "HIDE_COMMAND_LINE",
})
export const showCommandLine = (
content: Array<[any, string]>,
pos: number,
firstchar: string,
prompt: string,
indent: number,
level: number,
) => ({
type: "SHOW_COMMAND_LINE",
payload: {
content,
position: pos,
firstchar,
prompt,
indent,
level,
},
})
export const showWildMenu = (payload: { options: string[] }) => ({
type: "SHOW_WILDMENU",
payload,
})
export const wildMenuSelect = (payload: { selected: number }) => ({
type: "WILDMENU_SELECTED",
payload,
})
export const hideWildMenu = () => ({
type: "HIDE_WILDMENU",
})
export const setNeovimError = (neovimError: boolean) => ({
type: "SET_NEOVIM_ERROR",
payload: {
neovimError,
},
})
export const setViewport = (width: number, height: number) => ({
type: "SET_VIEWPORT",
payload: {
width,
height,
},
})
export const setCursorScale = (cursorScale: number) => ({
type: "SET_CURSOR_SCALE",
payload: {
cursorScale,
},
})
const formatBuffers = (buffer: InactiveBufferContext & EventContext) => {
return {
id: buffer.bufferNumber,
file: buffer.bufferFullPath ? normalizePath(buffer.bufferFullPath) : "",
totalLines: buffer.bufferTotalLines ? buffer.bufferTotalLines : null,
language: buffer.filetype,
hidden: buffer.hidden,
listed: buffer.listed,
modified: buffer.modified,
}
}
export const addBufferLayer = (
bufferId: number,
layer: Oni.BufferLayer,
): IAddBufferLayerAction => ({
type: "ADD_BUFFER_LAYER",
payload: {
bufferId,
layer,
},
})
export const removeBufferLayer = (
bufferId: number,
layer: Oni.BufferLayer,
): IRemoveBufferLayerAction => ({
type: "REMOVE_BUFFER_LAYER",
payload: {
bufferId,
layer,
},
})
export const bufferEnter = (buffers: Array<InactiveBufferContext | EventContext>) => ({
type: "BUFFER_ENTER",
payload: {
buffers: buffers.map(formatBuffers),
},
})
export const bufferUpdate = (id: number, modified: boolean, totalLines: number) => ({
type: "BUFFER_UPDATE",
payload: {
id,
modified,
totalLines,
},
})
export const bufferSave = (id: number, modified: boolean, version: number) => ({
type: "BUFFER_SAVE",
payload: {
id,
modified,
version,
},
})
export const setCurrentBuffers = (bufferIds: number[]) => ({
type: "SET_CURRENT_BUFFERS",
payload: {
bufferIds,
},
})
export const setImeActive = (imeActive: boolean) => ({
type: "SET_IME_ACTIVE",
payload: {
imeActive,
},
})
export const setFont = (fontFamily: string, fontSize: string, fontWeight: string) => ({
type: "SET_FONT",
payload: {
fontFamily,
fontSize,
fontWeight,
},
})
export const setTabs = (selectedTabId: number, tabs: State.ITab[]): ISetTabs => ({
type: "SET_TABS",
payload: {
selectedTabId,
tabs,
},
})
export const setWindowCursor = (windowId: number, line: number, column: number) => ({
type: "SET_WINDOW_CURSOR",
payload: {
windowId,
line,
column,
},
})
export const setWindowState = (
windowId: number,
bufferId: number,
file: string,
column: number,
line: number,
bottomBufferLine: number,
topBufferLine: number,
dimensions: Oni.Shapes.Rectangle,
bufferToScreen: Oni.Coordinates.BufferToScreen,
visibleLines: string[],
) => (dispatch: DispatchFunction, getState: GetStateFunction) => {
const { fontPixelWidth, fontPixelHeight } = getState()
const screenToPixel = (screenSpace: Oni.Coordinates.ScreenSpacePoint) => {
if (
!screenSpace ||
typeof screenSpace.screenX !== "number" ||
typeof screenSpace.screenY !== "number"
) {
return {
pixelX: NaN,
pixelY: NaN,
}
}
return {
pixelX: screenSpace.screenX * fontPixelWidth,
pixelY: screenSpace.screenY * fontPixelHeight,
}
}
const bufferToPixel = (position: types.Position): Oni.Coordinates.PixelSpacePoint => {
const screenPosition = bufferToScreen(position)
if (!screenPosition) {
return null
}
return screenToPixel(screenPosition)
}
dispatch({
type: "SET_WINDOW_STATE",
payload: {
windowId,
bufferId,
file: normalizePath(file),
column,
dimensions,
line,
bufferToScreen,
screenToPixel,
bufferToPixel,
bottomBufferLine,
topBufferLine,
visibleLines,
},
})
}
export const setInactiveWindowState = (
windowId: number,
dimensions: Oni.Shapes.Rectangle,
): ISetInactiveWindowState => ({
type: "SET_INACTIVE_WINDOW_STATE",
payload: {
windowId,
dimensions,
},
})
export const showToolTip = (
id: string,
element: JSX.Element,
options?: Oni.ToolTip.ToolTipOptions,
) => ({
type: "SHOW_TOOL_TIP",
payload: {
id,
element,
options,
},
})
export const hideToolTip = (id: string) => ({
type: "HIDE_TOOL_TIP",
payload: {
id,
},
})
export const setErrors = (errors: Errors) => ({
type: "SET_ERRORS",
payload: {
errors,
},
})
export const setCursorPosition = (screen: IScreen) => (dispatch: DispatchFunction) => {
const cell = screen.getCell(screen.cursorColumn, screen.cursorRow)
dispatch(
_setCursorPosition(
screen.cursorColumn * screen.fontWidthInPixels,
screen.cursorRow * screen.fontHeightInPixels,
screen.fontWidthInPixels,
screen.fontHeightInPixels,
cell.character,
cell.characterWidth * screen.fontWidthInPixels,
),
)
}
export const setMode = (mode: string) => ({
type: "SET_MODE",
payload: { mode },
})
export const setDefinition = (
token: Oni.IToken,
definitionLocation: types.Location,
): IShowDefinitionAction => ({
type: "SHOW_DEFINITION",
payload: {
token,
definitionLocation,
},
})
export const hideDefinition = () => ({
type: "HIDE_DEFINITION",
})
export const setCursorLineOpacity = (opacity: number) => ({
type: "SET_CURSOR_LINE_OPACITY",
payload: {
opacity,
},
})
export const setCursorColumnOpacity = (opacity: number) => ({
type: "SET_CURSOR_COLUMN_OPACITY",
payload: {
opacity,
},
})
export const setActiveVimTabPage = (tabId: number, windowIds: number[]): ISetActiveVimTabPage => ({
type: "SET_ACTIVE_VIM_TAB_PAGE",
payload: {
id: tabId,
windowIds,
},
})
export function setConfigValue<K extends keyof IConfigurationValues>(
k: K,
v: IConfigurationValues[K],
): ISetConfigurationValue<K> {
return {
type: "SET_CONFIGURATION_VALUE",
payload: {
key: k,
value: v,
},
}
}
const _setCursorPosition = (
cursorPixelX: any,
cursorPixelY: any,
fontPixelWidth: any,
fontPixelHeight: any,
cursorCharacter: string,
cursorPixelWidth: number,
) => ({
type: "SET_CURSOR_POSITION",
payload: {
pixelX: cursorPixelX,
pixelY: cursorPixelY,
fontPixelWidth,
fontPixelHeight,
cursorCharacter,
cursorPixelWidth,
},
})
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditorCommands.ts
================================================
/**
* NeovimEditorCommands
*
* Contextual commands for NeovimEditor
*
*/
import * as os from "os"
import { clipboard } from "electron"
import * as Oni from "oni-api"
import { NeovimInstance } from "./../../neovim"
import { CallbackCommand, CommandManager } from "./../../Services/CommandManager"
import { ContextMenuManager } from "./../../Services/ContextMenu"
import { editorManager } from "./../../Services/EditorManager"
import { findAllReferences, format, LanguageEditorIntegration } from "./../../Services/Language"
import { replaceAll } from "./../../Utility"
import { Definition } from "./Definition"
import { Rename } from "./Rename"
import { Symbols } from "./Symbols"
export class NeovimEditorCommands {
private _lastCommands: CallbackCommand[] = []
constructor(
private _commandManager: CommandManager,
private _contextMenuManager: ContextMenuManager,
private _definition: Definition,
private _languageEditorIntegration: LanguageEditorIntegration,
private _neovimInstance: NeovimInstance,
private _rename: Rename,
private _symbols: Symbols,
) {}
public activate(): void {
const isContextMenuOpen = () => this._contextMenuManager.isMenuOpen()
/**
* Higher-order function for commands dealing with completion
* - checks that the completion menu is open
*/
const contextMenuCommand = (innerCommand: Oni.Commands.CommandCallback) => {
return () => {
if (this._contextMenuManager.isMenuOpen()) {
return innerCommand()
}
return false
}
}
const selectContextMenuItem = contextMenuCommand(() => {
this._contextMenuManager.selectMenuItem()
})
const nextContextMenuItem = contextMenuCommand(() => {
this._contextMenuManager.nextMenuItem()
})
const closeContextMenu = contextMenuCommand(() => {
this._contextMenuManager.closeActiveMenu()
})
const previousContextMenuItem = contextMenuCommand(() => {
this._contextMenuManager.previousMenuItem()
})
const pasteContents = async (neovimInstance: NeovimInstance) => {
const textToPaste = clipboard.readText()
const replacements = { "'": "''" }
replacements[os.EOL] = "\n"
const sanitizedTextLines = replaceAll(textToPaste, replacements)
await neovimInstance.command('let b:oniclipboard=@"')
await neovimInstance.command(`let @"='${sanitizedTextLines}'`)
if (
editorManager.activeEditor.mode === "insert" ||
editorManager.activeEditor.mode === "cmdline_normal"
) {
await neovimInstance.command("set paste")
await neovimInstance.input('<c-r>"')
await neovimInstance.command("set nopaste")
} else {
await neovimInstance.command("normal! p")
}
await neovimInstance.command('let @"=b:oniclipboard')
await neovimInstance.command("unlet b:oniclipboard")
}
const commands = [
new CallbackCommand(
"contextMenu.select",
null,
null,
selectContextMenuItem,
isContextMenuOpen,
),
new CallbackCommand(
"contextMenu.next",
null,
null,
nextContextMenuItem,
isContextMenuOpen,
),
new CallbackCommand(
"contextMenu.previous",
null,
null,
previousContextMenuItem,
isContextMenuOpen,
),
new CallbackCommand(
"contextMenu.close",
null,
null,
closeContextMenu,
isContextMenuOpen,
),
new CallbackCommand(
"editor.clipboard.paste",
"Clipboard: Paste",
"Paste clipboard contents into active text",
() => pasteContents(this._neovimInstance),
),
new CallbackCommand(
"editor.clipboard.yank",
"Clipboard: Yank",
"Yank contents to clipboard",
() => this._neovimInstance.command('normal! "+y'),
),
new CallbackCommand(
"editor.clipboard.cut",
"Clipboard: Cut",
"Cut contents to clipboard",
() => this._neovimInstance.command('normal! "+x'),
),
new CallbackCommand("oni.editor.findAllReferences", null, null, () =>
findAllReferences(),
),
new CallbackCommand(
"language.findAllReferences",
"Find All References",
"Find all references using a language service",
() => findAllReferences(),
),
new CallbackCommand("language.format", null, null, () => format()),
// TODO: Deprecate
new CallbackCommand("oni.editor.gotoDefinition", null, null, () =>
this._definition.gotoDefinitionUnderCursor(),
),
new CallbackCommand(
"language.gotoDefinition",
"Goto Definition",
"Goto definition using a language service",
() => this._definition.gotoDefinitionUnderCursor(),
),
new CallbackCommand("language.gotoDefinition.openVertical", null, null, () =>
this._definition.gotoDefinitionUnderCursor({
openMode: Oni.FileOpenMode.VerticalSplit,
}),
),
new CallbackCommand("language.gotoDefinition.openHorizontal", null, null, () =>
this._definition.gotoDefinitionUnderCursor({
openMode: Oni.FileOpenMode.HorizontalSplit,
}),
),
new CallbackCommand("language.gotoDefinition.openNewTab", null, null, () =>
this._definition.gotoDefinitionUnderCursor({ openMode: Oni.FileOpenMode.NewTab }),
),
new CallbackCommand("language.gotoDefinition.openEdit", null, null, () =>
this._definition.gotoDefinitionUnderCursor({ openMode: Oni.FileOpenMode.Edit }),
),
new CallbackCommand("language.gotoDefinition.openExistingTab", null, null, () =>
this._definition.gotoDefinitionUnderCursor({
openMode: Oni.FileOpenMode.ExistingTab,
}),
),
new CallbackCommand("editor.rename", "Rename", "Rename an item", () =>
this._rename.startRename(),
),
new CallbackCommand("editor.quickInfo.show", null, null, () =>
this._languageEditorIntegration.showHover(),
),
new CallbackCommand("language.symbols.document", null, null, () =>
this._symbols.openDocumentSymbolsMenu(),
),
new CallbackCommand("language.symbols.workspace", null, null, () =>
this._symbols.openWorkspaceSymbolsMenu(),
),
new CallbackCommand(
"oni.config.openInitVim",
"Configuration: Edit Neovim Config",
"Edit configuration file ('init.vim') for Neovim",
() => this._neovimInstance.openInitVim(),
),
]
this._lastCommands = commands
commands.forEach(c => this._commandManager.registerCommand(c))
}
public deactivate(): void {
this._lastCommands.forEach(c => this._commandManager.unregisterCommand(c.command))
this._lastCommands = []
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditorLoadingOverlay.tsx
================================================
/**
* NeovimEditorLoadingOverlay
*
* Overlay shown over the editor window while initializing (loading Neovim)
*/
import * as React from "react"
import { connect } from "react-redux"
import * as State from "./NeovimEditorStore"
import styled from "styled-components"
import { withProps } from "./../../UI/components/common"
const LoadingSpinnerWrapper = withProps<{}>(styled.div)`
background-color: ${props => props.theme["editor.background"]};
color: ${props => props.theme["editor.foreground"]};
display: flex;
justify-content: center;
align-items: center;
opacity: 1;
transition: opacity 0.15s ease-in;
&.loaded {
opacity: 0;
pointer-events: none;
}
`
export const NeovimEditorLoadingOverlayView = (props: { visible: boolean }): JSX.Element => {
const className = props.visible ? "stack layer" : " stack layer loaded"
return <LoadingSpinnerWrapper className={className} />
}
export const mapStateToProps = (state: State.IState): { visible: boolean } => {
return { visible: !state.isLoaded }
}
export const NeovimEditorLoadingOverlay = connect(mapStateToProps)(NeovimEditorLoadingOverlayView)
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditorReducer.ts
================================================
/**
* Reducer.ts
*
* Top-level reducer for UI state transforms
*/
import * as State from "./NeovimEditorStore"
import * as Actions from "./NeovimEditorActions"
import { IConfigurationValues } from "./../../Services/Configuration"
import { Errors } from "./../../Services/Diagnostics"
import * as pick from "lodash/pick"
export function reducer<K extends keyof IConfigurationValues>(
s: State.IState,
a: Actions.Action<K>,
): State.IState {
if (!s) {
return s
}
switch (a.type) {
case "SET_HAS_FOCUS":
return {
...s,
hasFocus: a.payload.hasFocus,
}
case "SET_COLORS":
return {
...s,
colors: a.payload.colors,
}
case "SET_LOADING_COMPLETE":
return {
...s,
isLoaded: true,
}
case "SET_NEOVIM_ERROR":
return {
...s,
neovimError: a.payload.neovimError,
}
case "SET_VIEWPORT":
return {
...s,
viewport: viewportReducer(s.viewport, a),
}
case "SET_CURSOR_SCALE":
return {
...s,
cursorScale: a.payload.cursorScale,
}
case "SET_ACTIVE_VIM_TAB_PAGE":
return {
...s,
activeVimTabPage: a.payload,
}
case "SET_CURSOR_POSITION":
return {
...s,
cursorPixelX: a.payload.pixelX,
cursorPixelY: a.payload.pixelY,
fontPixelWidth: a.payload.fontPixelWidth,
fontPixelHeight: a.payload.fontPixelHeight,
cursorCharacter: a.payload.cursorCharacter,
cursorPixelWidth: a.payload.cursorPixelWidth,
}
case "SET_IME_ACTIVE":
return {
...s,
imeActive: a.payload.imeActive,
}
case "SET_FONT":
return {
...s,
fontFamily: a.payload.fontFamily,
fontSize: a.payload.fontSize,
fontWeight: a.payload.fontWeight,
}
case "SET_MODE":
return { ...s, ...{ mode: a.payload.mode } }
case "SET_CONFIGURATION_VALUE":
const obj: Partial<IConfigurationValues> = {}
obj[a.payload.key] = a.payload.value
const newConfig = { ...s.configuration, ...obj }
return {
...s,
configuration: newConfig,
}
case "SHOW_WILDMENU":
return {
...s,
wildmenu: {
...s.wildmenu,
visible: true,
options: a.payload.options,
},
}
case "WILDMENU_SELECTED":
return {
...s,
wildmenu: {
...s.wildmenu,
selected: a.payload.selected,
},
}
case "HIDE_WILDMENU":
return {
...s,
wildmenu: {
...s.wildmenu,
visible: false,
},
}
case "SHOW_COMMAND_LINE":
// Array<[any, string]>
const [[, content]] = a.payload.content
return {
...s,
commandLine: {
content,
visible: true,
position: a.payload.position,
firstchar: a.payload.firstchar,
prompt: a.payload.prompt,
indent: a.payload.indent,
level: a.payload.level,
},
}
case "HIDE_COMMAND_LINE":
return {
...s,
commandLine: {
visible: false,
content: null,
firstchar: "",
position: null,
prompt: "",
indent: null,
level: null,
},
}
case "SET_COMMAND_LINE_POSITION":
return {
...s,
commandLine: {
...s.commandLine,
position: a.payload.position,
level: a.payload.level,
},
}
default:
return {
...s,
buffers: buffersReducer(s.buffers, a),
definition: definitionReducer(s.definition, a),
layers: layersReducer(s.layers, a),
tabState: tabStateReducer(s.tabState, a),
errors: errorsReducer(s.errors, a),
toolTips: toolTipsReducer(s.toolTips, a),
windowState: windowStateReducer(s.windowState, a),
}
}
}
export const layersReducer = (s: State.Layers, a: Actions.SimpleAction) => {
switch (a.type) {
case "ADD_BUFFER_LAYER": {
const currentLayers = s[a.payload.bufferId] || []
if (currentLayers.find(layer => layer.id === a.payload.layer.id)) {
return s
}
return {
...s,
[a.payload.bufferId]: [...currentLayers, a.payload.layer],
}
}
case "REMOVE_BUFFER_LAYER": {
const currentLayers = s[a.payload.bufferId] || []
return {
...s,
[a.payload.bufferId]: currentLayers.filter(l => l !== a.payload.layer),
}
}
default:
return s
}
}
export const definitionReducer = (s: State.IDefinition, a: Actions.SimpleAction) => {
switch (a.type) {
case "SHOW_DEFINITION":
const { definitionLocation, token } = a.payload
return {
definitionLocation,
token,
}
case "HIDE_DEFINITION":
return null
default:
return s
}
}
export const viewportReducer = (s: State.IViewport, a: Actions.ISetViewportAction) => {
const { width, height } = a.payload
switch (a.type) {
case "SET_VIEWPORT":
return {
...s,
width,
height,
}
default:
return s
}
}
export const tabStateReducer = (s: State.ITabState, a: Actions.SimpleAction): State.ITabState => {
switch (a.type) {
case "SET_TABS":
return {
...s,
...a.payload,
}
default:
return s
}
}
export const buffersReducer = (
s: State.IBufferState,
a: Actions.SimpleAction,
): State.IBufferState => {
let byId = s.byId
let allIds = s.allIds
const emptyBuffer = (id: number): State.IBuffer => ({
id,
file: null,
modified: false,
hidden: true,
listed: false,
totalLines: 0,
})
switch (a.type) {
case "BUFFER_ENTER":
byId = a.payload.buffers.reduce((buffersById, buffer) => {
buffersById[buffer.id] = {
...buffer,
}
return byId
}, byId)
const bufIds = a.payload.buffers.map(b => b.id)
allIds = [...new Set(bufIds)]
return {
activeBufferId: a.payload.buffers[0].id,
byId,
allIds,
}
case "BUFFER_SAVE":
const currentItem = s.byId[a.payload.id] || emptyBuffer(a.payload.id)
byId = {
...s.byId,
[a.payload.id]: {
...currentItem,
id: a.payload.id,
modified: a.payload.modified,
lastSaveVersion: a.payload.version,
},
}
return {
...s,
byId,
}
case "BUFFER_UPDATE":
const currentItem3 = s.byId[a.payload.id] || emptyBuffer(a.payload.id)
// If the last save version hasn't been set, this means it is the first update,
// and should clamp to the incoming version
const lastSaveVersion = currentItem3.lastSaveVersion || a.payload.version
byId = {
...s.byId,
[a.payload.id]: {
...currentItem3,
id: a.payload.id,
modified: a.payload.modified,
totalLines: a.payload.totalLines,
lastSaveVersion,
},
}
return {
...s,
byId,
}
case "SET_CURRENT_BUFFERS":
allIds = s.allIds.filter(id => a.payload.bufferIds.indexOf(id) >= 0)
let activeBufferId = s.activeBufferId
if (a.payload.bufferIds.indexOf(activeBufferId) === -1) {
activeBufferId = null
}
const newById: any = pick(s.byId, a.payload.bufferIds)
return {
activeBufferId,
byId: newById,
allIds,
}
default:
return s
}
}
export const errorsReducer = (s: Errors, a: Actions.SimpleAction) => {
switch (a.type) {
case "SET_ERRORS":
return {
...a.payload.errors,
}
default:
return s
}
}
export const toolTipsReducer = (s: State.ToolTips, a: Actions.SimpleAction): State.ToolTips => {
switch (a.type) {
case "SHOW_TOOL_TIP":
const existingItem = s[a.payload.id] || {}
const newItem = {
...existingItem,
...a.payload,
}
return {
...s,
[a.payload.id]: newItem,
}
case "HIDE_TOOL_TIP":
return {
...s,
[a.payload.id]: null,
}
default:
return s
}
}
export const windowStateReducer = (
s: State.IWindowState,
a: Actions.SimpleAction,
): State.IWindowState => {
let currentWindow
switch (a.type) {
case "SET_WINDOW_CURSOR":
currentWindow = s.windows[a.payload.windowId] || null
return {
activeWindow: a.payload.windowId,
windows: {
...s.windows,
[a.payload.windowId]: {
...currentWindow,
column: a.payload.column,
line: a.payload.line,
},
},
}
case "SET_INACTIVE_WINDOW_STATE":
currentWindow = s.windows[a.payload.windowId] || null
return {
...s,
windows: {
...s.windows,
[a.payload.windowId]: {
...currentWindow,
windowId: a.payload.windowId,
column: -1,
line: -1,
topBufferLine: -1,
bottomBufferLine: -1,
dimensions: a.payload.dimensions,
},
},
}
case "SET_WINDOW_STATE":
currentWindow = s.windows[a.payload.windowId] || null
return {
activeWindow: a.payload.windowId,
windows: {
...s.windows,
[a.payload.windowId]: {
...currentWindow,
file: a.payload.file,
bufferId: a.payload.bufferId,
windowId: a.payload.windowId,
column: a.payload.column,
line: a.payload.line,
bufferToScreen: a.payload.bufferToScreen,
screenToPixel: a.payload.screenToPixel,
bufferToPixel: a.payload.bufferToPixel,
dimensions: a.payload.dimensions,
topBufferLine: a.payload.topBufferLine,
bottomBufferLine: a.payload.bottomBufferLine,
visibleLines: a.payload.visibleLines,
},
},
}
default:
return s
}
}
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditorSelectors.ts
================================================
/**
* Selectors.ts
*
* Selectors are basically helper methods for operating on the State
* See Redux documents here fore more info:
* http://redux.js.org/docs/recipes/ComputingDerivedData.html
*/
import * as types from "vscode-languageserver-types"
import * as Oni from "oni-api"
import { createSelector } from "reselect"
import { getAllErrorsForFile } from "./../../Services/Diagnostics"
import * as Utility from "./../../Utility"
import * as State from "./NeovimEditorStore"
export const EmptyArray: any[] = []
const getWindows = (state: State.IState) => state.windowState
export const getActiveWindow = createSelector([getWindows], windowState => {
if (windowState.activeWindow === null) {
return null
}
const activeWindow = windowState.activeWindow
return windowState.windows[activeWindow]
})
const emptyRectangle: Oni.Shapes.Rectangle = {
x: 0,
y: 0,
width: 0,
height: 0,
}
export const getFontPixelWidthHeight = (state: State.IState) => ({
fontPixelWidth: state.fontPixelWidth,
fontPixelHeight: state.fontPixelHeight,
})
export const getActiveWindowScreenDimensions = createSelector([getActiveWindow], win => {
if (!win || !win.dimensions) {
return emptyRectangle
}
return win.dimensions
})
export const getActiveWindowPixelDimensions = createSelector(
[getActiveWindowScreenDimensions, getFontPixelWidthHeight],
(dimensions, fontSize) => {
const pixelDimensions = {
x: dimensions.x * fontSize.fontPixelWidth,
y: dimensions.y * fontSize.fontPixelHeight,
width: dimensions.width * fontSize.fontPixelWidth,
height: dimensions.height * fontSize.fontPixelHeight,
}
return pixelDimensions
},
)
export const getErrors = (state: State.IState) => state.errors
export const getErrorsForActiveFile = createSelector(
[getActiveWindow, getErrors],
(win, errors) => {
const errorsForFile: types.Diagnostic[] =
win && win.file
? getAllErrorsForFile(win.file, errors)
: (EmptyArray as types.Diagnostic[])
return errorsForFile
},
)
export const getErrorsForPosition = createSelector(
[getActiveWindow, getErrorsForActiveFile],
(win, errors) => {
if (!win) {
return EmptyArray
}
const { line, column } = win
return errors.filter(diag => Utility.isInRange(line, column, diag.range))
},
)
const getBufferState = (state: State.IState) => state.buffers
export const getAllBuffers = createSelector([getBufferState], buffers =>
buffers.allIds.map(id => buffers.byId[id]).filter(buf => buf.listed),
)
export const getBufferMetadata = createSelector([getAllBuffers], buffers =>
buffers.map(b => ({
id: b.id,
file: b.file,
modified: b.modified,
})),
)
export const getActiveBuffer = createSelector([getActiveWindow, getAllBuffers], (win, buffers) => {
if (!win || !win.file) {
return null
}
const buf = buffers.find(b => b.file === win.file)
return buf || null
})
export const getActiveBufferId = createSelector(
[getActiveBuffer],
buf => (buf === null ? null : buf.id),
)
================================================
FILE: browser/src/Editor/NeovimEditor/NeovimEditorStore.ts
================================================
/**
* State.ts
*
* This file describes the Redux state of the app
*/
import * as types from "vscode-languageserver-types"
import * as Oni from "oni-api"
import { Store } from "redux"
import thunk from "redux-thunk"
import { IConfigurationValues } from "./../../Services/Configuration"
import { DefaultThemeColors, IThemeColors } from "./../../Services/Themes"
import { createStore as createReduxStore } from "./../../Redux"
import { IBufferLayer } from "./../NeovimEditor/BufferLayerManager"
export interface Layers {
[id: number]: IBufferLayer[]
}
export interface Buffers {
[filePath: string]: IBuffer
}
export interface Errors {
[file: string]: { [key: string]: types.Diagnostic[] }
}
export interface ToolTips {
[id: string]: IToolTip
}
import { reducer } from "./NeovimEditorReducer"
/**
* Viewport encompasses the actual 'app' height
*/
export interface IViewport {
width: number
height: number
}
export interface IToolTip {
id: string
options?: Oni.ToolTip.ToolTipOptions
element: JSX.Element
}
export interface IState {
// Editor
cursorScale: number
cursorPixelX: number
cursorPixelY: number
cursorPixelWidth: number
cursorCharacter: string
fontPixelWidth: number
fontPixelHeight: number
fontFamily: string
fontSize: string
fontWeight: string
hasFocus: boolean
mode: string
definition: null | IDefinition
cursorLineOpacity: number
cursorColumnOpacity: number
configuration: IConfigurationValues
imeActive: boolean
isLoaded: boolean
viewport: IViewport
colors: IThemeColors
toolTips: ToolTips
neovimError: boolean
/**
* Tabs refer to the Vi
gitextract_k5a77194/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ └── config.yml
├── .gitignore
├── .gitmodules
├── .npmignore
├── .nvmrc
├── .oni/
│ ├── config.js
│ └── templates/
│ └── UnitTestTemplate.ts.template
├── .prettierignore
├── .prettierrc
├── .travis.yml
├── .vscode/
│ └── launch.json
├── .yarnrc
├── @types/
│ ├── color-normalize/
│ │ └── index.d.ts
│ └── font-manager/
│ └── index.d.ts
├── ACCOUNTING.md
├── BACKERS.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── appveyor.yml
├── browser/
│ ├── src/
│ │ ├── App.ts
│ │ ├── CSS.ts
│ │ ├── Constants.ts
│ │ ├── Editor/
│ │ │ ├── BufferHighlights.ts
│ │ │ ├── BufferManager.ts
│ │ │ ├── Editor.ts
│ │ │ ├── NeovimEditor/
│ │ │ │ ├── BufferLayerManager.ts
│ │ │ │ ├── CompletionMenu.ts
│ │ │ │ ├── Definition.ts
│ │ │ │ ├── FileDropHandler.tsx
│ │ │ │ ├── HoverRenderer.tsx
│ │ │ │ ├── NeovimActiveWindow.tsx
│ │ │ │ ├── NeovimBufferLayersView.tsx
│ │ │ │ ├── NeovimEditor.tsx
│ │ │ │ ├── NeovimEditorActions.ts
│ │ │ │ ├── NeovimEditorCommands.ts
│ │ │ │ ├── NeovimEditorLoadingOverlay.tsx
│ │ │ │ ├── NeovimEditorReducer.ts
│ │ │ │ ├── NeovimEditorSelectors.ts
│ │ │ │ ├── NeovimEditorStore.ts
│ │ │ │ ├── NeovimInput.tsx
│ │ │ │ ├── NeovimPopupMenu.tsx
│ │ │ │ ├── NeovimRenderer.tsx
│ │ │ │ ├── NeovimSurface.tsx
│ │ │ │ ├── Rename.tsx
│ │ │ │ ├── Symbols.ts
│ │ │ │ ├── ToolTipsProvider.ts
│ │ │ │ ├── WelcomeBufferLayer.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── markdown.ts
│ │ │ └── OniEditor/
│ │ │ ├── ColorHighlightLayer.tsx
│ │ │ ├── ImageBufferLayer.tsx
│ │ │ ├── IndentGuideBufferLayer.tsx
│ │ │ ├── OniEditor.tsx
│ │ │ ├── containers/
│ │ │ │ ├── BufferScrollBarContainer.ts
│ │ │ │ ├── DefinitionContainer.ts
│ │ │ │ └── ErrorsContainer.ts
│ │ │ └── index.ts
│ │ ├── Font.ts
│ │ ├── Grid.ts
│ │ ├── Input/
│ │ │ ├── KeyBindings.ts
│ │ │ ├── KeyParser.ts
│ │ │ ├── Keyboard/
│ │ │ │ ├── KeyboardLayout.ts
│ │ │ │ ├── KeyboardResolver.ts
│ │ │ │ ├── Resolvers.ts
│ │ │ │ └── index.ts
│ │ │ ├── KeyboardInput.tsx
│ │ │ └── Mouse.ts
│ │ ├── Performance.ts
│ │ ├── PeriodicJobs.ts
│ │ ├── PersistentStore.ts
│ │ ├── Platform.ts
│ │ ├── Plugins/
│ │ │ ├── AnonymousPlugin.ts
│ │ │ ├── Api/
│ │ │ │ ├── Capabilities.ts
│ │ │ │ ├── LanguageClient/
│ │ │ │ │ ├── LanguageClientHelpers.ts
│ │ │ │ │ └── LanguageClientLogger.ts
│ │ │ │ ├── Oni.ts
│ │ │ │ ├── Process.ts
│ │ │ │ ├── Services.ts
│ │ │ │ ├── Ui.ts
│ │ │ │ └── shell-env.d.ts
│ │ │ ├── PackageMetadataParser.ts
│ │ │ ├── Plugin.ts
│ │ │ ├── PluginConfigurationSynchronizer.ts
│ │ │ ├── PluginInstaller.ts
│ │ │ ├── PluginManager.ts
│ │ │ └── PluginSidebarPane.tsx
│ │ ├── Redux/
│ │ │ ├── LoggingMiddleware.ts
│ │ │ ├── RequestAnimationFrameNotifyBatcher.ts
│ │ │ ├── createStore.ts
│ │ │ └── index.ts
│ │ ├── Renderer/
│ │ │ ├── CanvasRenderer.ts
│ │ │ ├── INeovimRenderer.ts
│ │ │ ├── Span.ts
│ │ │ ├── WebGLRenderer/
│ │ │ │ ├── SolidRenderer.ts
│ │ │ │ ├── TextRenderer/
│ │ │ │ │ ├── GlyphAtlas/
│ │ │ │ │ │ ├── GlyphAtlas.ts
│ │ │ │ │ │ ├── IRasterizedGlyph.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── ICellGroup.ts
│ │ │ │ │ ├── LigatureGrouper/
│ │ │ │ │ │ ├── ILigatureGrouper.ts
│ │ │ │ │ │ ├── NoopLigatureGrouper.ts
│ │ │ │ │ │ ├── OpenTypeLigatureGrouper.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── TextRenderer.ts
│ │ │ │ │ ├── groupCells.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── WebGLRenderer.ts
│ │ │ │ ├── WebGLUtilities.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── normalizeColor.ts
│ │ │ └── index.ts
│ │ ├── Services/
│ │ │ ├── AutoClosingPairs.ts
│ │ │ ├── AutoUpdate.ts
│ │ │ ├── Automation.ts
│ │ │ ├── Bookmarks/
│ │ │ │ ├── BookmarksPane.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Browser/
│ │ │ │ ├── AddressBarView.tsx
│ │ │ │ ├── BrowserButtonView.tsx
│ │ │ │ ├── BrowserView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── BrowserWindowConfigurationSynchronizer.ts
│ │ │ ├── Colors.ts
│ │ │ ├── CommandManager.ts
│ │ │ ├── Commands/
│ │ │ │ ├── GlobalCommands.ts
│ │ │ │ └── index.ts
│ │ │ ├── Completion/
│ │ │ │ ├── Completion.ts
│ │ │ │ ├── CompletionProviders.ts
│ │ │ │ ├── CompletionSelectors.ts
│ │ │ │ ├── CompletionState.ts
│ │ │ │ ├── CompletionStore.ts
│ │ │ │ ├── CompletionUtility.ts
│ │ │ │ ├── CompletionsRequestor.ts
│ │ │ │ └── index.ts
│ │ │ ├── Configuration/
│ │ │ │ ├── Configuration.ts
│ │ │ │ ├── ConfigurationCommands.ts
│ │ │ │ ├── ConfigurationEditor.ts
│ │ │ │ ├── DefaultConfiguration.ts
│ │ │ │ ├── DeprecatedConfigurationValues.ts
│ │ │ │ ├── FileConfigurationProvider.ts
│ │ │ │ ├── IConfigurationValues.ts
│ │ │ │ ├── PersistentSettings.ts
│ │ │ │ ├── ReasonConfiguration.ts
│ │ │ │ ├── UserConfiguration.ts
│ │ │ │ └── index.ts
│ │ │ ├── ContextMenu/
│ │ │ │ ├── ContextMenu.tsx
│ │ │ │ ├── ContextMenuComponent.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Debug.ts
│ │ │ ├── Diagnostics/
│ │ │ │ ├── index.ts
│ │ │ │ └── navigateErrors.ts
│ │ │ ├── DragAndDrop.tsx
│ │ │ ├── EditorManager.ts
│ │ │ ├── Explorer/
│ │ │ │ ├── ExplorerFileSystem.ts
│ │ │ │ ├── ExplorerSelectors.ts
│ │ │ │ ├── ExplorerSplit.tsx
│ │ │ │ ├── ExplorerStore.ts
│ │ │ │ ├── ExplorerView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── FileIcon.tsx
│ │ │ ├── FileMappings.ts
│ │ │ ├── FileSystemWatcher/
│ │ │ │ └── index.ts
│ │ │ ├── FocusManager.ts
│ │ │ ├── IconThemes/
│ │ │ │ ├── IconThemeLoader.ts
│ │ │ │ ├── Icons.ts
│ │ │ │ ├── StyleWriter.ts
│ │ │ │ └── index.ts
│ │ │ ├── InputManager.ts
│ │ │ ├── KeyDisplayer/
│ │ │ │ ├── KeyDisplayer.tsx
│ │ │ │ ├── KeyDisplayerStore.ts
│ │ │ │ ├── KeyDisplayerView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Language/
│ │ │ │ ├── CodeAction.ts
│ │ │ │ ├── DefinitionRequestor.ts
│ │ │ │ ├── Edits.ts
│ │ │ │ ├── FindAllReferences.ts
│ │ │ │ ├── Formatting.ts
│ │ │ │ ├── HoverRequestor.ts
│ │ │ │ ├── LanguageClient.ts
│ │ │ │ ├── LanguageClientProcess.ts
│ │ │ │ ├── LanguageClientStatusBar.tsx
│ │ │ │ ├── LanguageClientTypes.ts
│ │ │ │ ├── LanguageConfiguration.ts
│ │ │ │ ├── LanguageEditorIntegration.ts
│ │ │ │ ├── LanguageManager.ts
│ │ │ │ ├── LanguageStore.ts
│ │ │ │ ├── PromiseQueue.ts
│ │ │ │ ├── RenameView.tsx
│ │ │ │ ├── ServerCapabilities.ts
│ │ │ │ ├── SignatureHelp.ts
│ │ │ │ ├── SignatureHelpView.tsx
│ │ │ │ ├── Workspace.ts
│ │ │ │ ├── addInsertModeLanguageFunctionality.ts
│ │ │ │ └── index.ts
│ │ │ ├── Learning/
│ │ │ │ ├── Achievements/
│ │ │ │ │ ├── AchievementNotificationRenderer.tsx
│ │ │ │ │ ├── AchievementsBufferLayer.tsx
│ │ │ │ │ ├── AchievementsManager.ts
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── LearningPane.tsx
│ │ │ │ ├── Tutorial/
│ │ │ │ │ ├── CompletionView.tsx
│ │ │ │ │ ├── GameplayBufferLayer.tsx
│ │ │ │ │ ├── GoalView.tsx
│ │ │ │ │ ├── ITutorial.ts
│ │ │ │ │ ├── Notes.tsx
│ │ │ │ │ ├── Stages/
│ │ │ │ │ │ ├── CompositeStage.tsx
│ │ │ │ │ │ ├── CorrectLineStage.tsx
│ │ │ │ │ │ ├── DeleteCharactersStage.tsx
│ │ │ │ │ │ ├── FadeInLineStage.tsx
│ │ │ │ │ │ ├── InitializeBufferStage.tsx
│ │ │ │ │ │ ├── MoveToGoalStage.tsx
│ │ │ │ │ │ ├── SetBufferStage.tsx
│ │ │ │ │ │ ├── SetCursorPositionStage.tsx
│ │ │ │ │ │ ├── WaitForModeStage.tsx
│ │ │ │ │ │ ├── WaitForRegisterStage.tsx
│ │ │ │ │ │ ├── WaitForStateStage.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── TutorialBufferLayer.tsx
│ │ │ │ │ ├── TutorialGameplayManager.ts
│ │ │ │ │ ├── TutorialManager.ts
│ │ │ │ │ ├── Tutorials/
│ │ │ │ │ │ ├── BasicMovementTutorial.tsx
│ │ │ │ │ │ ├── BeginningsAndEndingsTutorial.tsx
│ │ │ │ │ │ ├── ChangeOperatorTutorial.tsx
│ │ │ │ │ │ ├── CopyPasteTutorial.tsx
│ │ │ │ │ │ ├── DeleteCharacterTutorial.tsx
│ │ │ │ │ │ ├── DeleteOperatorTutorial.tsx
│ │ │ │ │ │ ├── DotCommandTutorial.tsx
│ │ │ │ │ │ ├── InlineFindingTutorial.tsx
│ │ │ │ │ │ ├── InsertAndUndoTutorial.tsx
│ │ │ │ │ │ ├── SearchInBufferTutorial.tsx
│ │ │ │ │ │ ├── SwitchModeTutorial.tsx
│ │ │ │ │ │ ├── TargetsVimPluginTutorial.tsx
│ │ │ │ │ │ ├── TextObjectsTutorial.tsx
│ │ │ │ │ │ ├── VerticalMovementTutorial.tsx
│ │ │ │ │ │ ├── VisualModeTutorial.tsx
│ │ │ │ │ │ ├── WordMotionTutorial.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── Menu/
│ │ │ │ ├── Filter/
│ │ │ │ │ ├── FuseFilter.ts
│ │ │ │ │ ├── NoFilter.ts
│ │ │ │ │ ├── RegExFilter.ts
│ │ │ │ │ ├── Utils.ts
│ │ │ │ │ ├── VSCodeFilter.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Menu.less
│ │ │ │ ├── Menu.ts
│ │ │ │ ├── MenuActionCreators.ts
│ │ │ │ ├── MenuActions.ts
│ │ │ │ ├── MenuComponent.tsx
│ │ │ │ ├── MenuReducer.ts
│ │ │ │ ├── MenuState.ts
│ │ │ │ ├── PinnedIconView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Metadata.ts
│ │ │ ├── MultiProcess.ts
│ │ │ ├── Notifications/
│ │ │ │ ├── Notification.ts
│ │ │ │ ├── NotificationStore.ts
│ │ │ │ ├── Notifications.ts
│ │ │ │ ├── NotificationsView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Overlay.ts
│ │ │ ├── Particles/
│ │ │ │ ├── ParticleSystem.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Preview/
│ │ │ │ ├── PreviewBufferLayer.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Recorder.ts
│ │ │ ├── Search/
│ │ │ │ ├── FinderProcess.ts
│ │ │ │ ├── RipGrep.ts
│ │ │ │ ├── Scorer/
│ │ │ │ │ ├── CharCode.ts
│ │ │ │ │ ├── Comparers.ts
│ │ │ │ │ ├── OniQuickOpenScorer.ts
│ │ │ │ │ ├── QuickOpenScorer.ts
│ │ │ │ │ ├── Utilities.ts
│ │ │ │ │ ├── filters.ts
│ │ │ │ │ └── strings.ts
│ │ │ │ ├── SearchPaneView.tsx
│ │ │ │ ├── SearchProvider.ts
│ │ │ │ ├── SearchResultsSpinnerView.tsx
│ │ │ │ ├── SearchTextBox.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Sessions/
│ │ │ │ ├── SessionManager.ts
│ │ │ │ ├── Sessions.tsx
│ │ │ │ ├── SessionsPane.tsx
│ │ │ │ ├── SessionsStore.ts
│ │ │ │ └── index.ts
│ │ │ ├── Sidebar/
│ │ │ │ ├── SidebarContentSplit.tsx
│ │ │ │ ├── SidebarSplit.tsx
│ │ │ │ ├── SidebarStore.ts
│ │ │ │ ├── SidebarView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Sneak/
│ │ │ │ ├── Sneak.tsx
│ │ │ │ ├── SneakStore.ts
│ │ │ │ ├── SneakView.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Snippets/
│ │ │ │ ├── OniSnippet.ts
│ │ │ │ ├── SnippetBufferLayer.tsx
│ │ │ │ ├── SnippetCompletionProvider.ts
│ │ │ │ ├── SnippetManager.ts
│ │ │ │ ├── SnippetProvider.ts
│ │ │ │ ├── SnippetSession.ts
│ │ │ │ ├── SnippetVariableResolver.ts
│ │ │ │ ├── UserSnippetProvider.ts
│ │ │ │ └── index.ts
│ │ │ ├── StatusBar.ts
│ │ │ ├── SyntaxHighlighting/
│ │ │ │ ├── Definitions.ts
│ │ │ │ ├── GrammarLoader.ts
│ │ │ │ ├── ISyntaxHighlighter.ts
│ │ │ │ ├── SyntaxHighlightReconciler.ts
│ │ │ │ ├── SyntaxHighlightSelectors.ts
│ │ │ │ ├── SyntaxHighlighting.ts
│ │ │ │ ├── SyntaxHighlightingPeriodicJob.ts
│ │ │ │ ├── SyntaxHighlightingReducer.ts
│ │ │ │ ├── SyntaxHighlightingStore.ts
│ │ │ │ ├── TokenGenerator.tsx
│ │ │ │ ├── TokenScorer.ts
│ │ │ │ ├── TokenThemeProvider.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Tasks.ts
│ │ │ ├── Terminal.ts
│ │ │ ├── Themes/
│ │ │ │ ├── ThemeLoader.ts
│ │ │ │ ├── ThemeManager.ts
│ │ │ │ ├── ThemePicker.ts
│ │ │ │ └── index.ts
│ │ │ ├── TokenColors.ts
│ │ │ ├── TypingPredictionManager.ts
│ │ │ ├── UnhandledErrorMonitor.ts
│ │ │ ├── VersionControl/
│ │ │ │ ├── VersionControlBlameLayer.tsx
│ │ │ │ ├── VersionControlManager.tsx
│ │ │ │ ├── VersionControlPane.tsx
│ │ │ │ ├── VersionControlProvider.ts
│ │ │ │ ├── VersionControlStore.ts
│ │ │ │ ├── VersionControlView.tsx
│ │ │ │ └── index.ts
│ │ │ ├── VimConfigurationSynchronizer.ts
│ │ │ ├── WindowManager/
│ │ │ │ ├── LinearSplitProvider.ts
│ │ │ │ ├── RelationalSplitNavigator.ts
│ │ │ │ ├── SingleSplitProvider.ts
│ │ │ │ ├── WindowDock.ts
│ │ │ │ ├── WindowManager.ts
│ │ │ │ ├── WindowManagerStore.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── layoutFromSplitInfo.ts
│ │ │ └── Workspace/
│ │ │ ├── Workspace.ts
│ │ │ ├── WorkspaceCommands.ts
│ │ │ ├── WorkspaceConfiguration.ts
│ │ │ ├── find-up.d.ts
│ │ │ └── index.ts
│ │ ├── UI/
│ │ │ ├── Icon.tsx
│ │ │ ├── Shell/
│ │ │ │ ├── OverlayView.tsx
│ │ │ │ ├── Shell.tsx
│ │ │ │ ├── ShellActionCreators.ts
│ │ │ │ ├── ShellActions.ts
│ │ │ │ ├── ShellReducer.ts
│ │ │ │ ├── ShellState.ts
│ │ │ │ ├── ShellView.tsx
│ │ │ │ └── index.ts
│ │ │ └── components/
│ │ │ ├── Arrow.less
│ │ │ ├── Arrow.tsx
│ │ │ ├── Background.tsx
│ │ │ ├── BufferLayerHeader.tsx
│ │ │ ├── BufferScrollBar.tsx
│ │ │ ├── Caret.tsx
│ │ │ ├── CodeActions.tsx
│ │ │ ├── CommandLine.tsx
│ │ │ ├── Cursor.tsx
│ │ │ ├── CursorLine.tsx
│ │ │ ├── CursorPositioner.tsx
│ │ │ ├── Definition.tsx
│ │ │ ├── Error.tsx
│ │ │ ├── ErrorInfo.tsx
│ │ │ ├── ExternalMenus.tsx
│ │ │ ├── FlipCard.tsx
│ │ │ ├── HighlightText.tsx
│ │ │ ├── InstallHelp.less
│ │ │ ├── InstallHelp.tsx
│ │ │ ├── KeyBindingInfo.tsx
│ │ │ ├── LightweightText.tsx
│ │ │ ├── Loading.tsx
│ │ │ ├── LoadingSpinner.tsx
│ │ │ ├── Octicon.tsx
│ │ │ ├── PureComponentWithDisposeTracking.tsx
│ │ │ ├── QuickInfo.tsx
│ │ │ ├── QuickInfoContainer.tsx
│ │ │ ├── RedErrorScreen.tsx
│ │ │ ├── SectionTitle.tsx
│ │ │ ├── SidebarButton.tsx
│ │ │ ├── SidebarEmptyPaneView.tsx
│ │ │ ├── SidebarItemView.tsx
│ │ │ ├── Sneakable.tsx
│ │ │ ├── StatusBar.tsx
│ │ │ ├── StatusResize.tsx
│ │ │ ├── Tabs.tsx
│ │ │ ├── Text.tsx
│ │ │ ├── ToolTip.tsx
│ │ │ ├── VersionControl/
│ │ │ │ ├── Branch.tsx
│ │ │ │ ├── CommitMessage.tsx
│ │ │ │ ├── Commits.tsx
│ │ │ │ ├── File.tsx
│ │ │ │ ├── Help.tsx
│ │ │ │ ├── Staged.tsx
│ │ │ │ └── Status.tsx
│ │ │ ├── VimNavigator.tsx
│ │ │ ├── Visible.tsx
│ │ │ ├── WildMenu.tsx
│ │ │ ├── WindowSplitHost.tsx
│ │ │ ├── WindowSplits.tsx
│ │ │ ├── WindowTitle.tsx
│ │ │ ├── WithWidth.tsx
│ │ │ ├── animations.ts
│ │ │ ├── common.less
│ │ │ └── common.ts
│ │ ├── Utility.ts
│ │ ├── index.tsx
│ │ ├── neovim/
│ │ │ ├── CommandContext.ts
│ │ │ ├── EventContext.ts
│ │ │ ├── MsgPack.ts
│ │ │ ├── NeovimAutoCommands.ts
│ │ │ ├── NeovimBufferUpdateManager.ts
│ │ │ ├── NeovimInstance.ts
│ │ │ ├── NeovimMarks.ts
│ │ │ ├── NeovimProcessSpawner.ts
│ │ │ ├── NeovimTokenColorSynchronizer.ts
│ │ │ ├── NeovimWindowManager.ts
│ │ │ ├── QuickFix.ts
│ │ │ ├── Screen.ts
│ │ │ ├── ScreenWithPredictions.ts
│ │ │ ├── Session.ts
│ │ │ ├── SharedNeovimInstance.ts
│ │ │ ├── VimHighlights.ts
│ │ │ ├── actions.ts
│ │ │ └── index.ts
│ │ ├── neovim-client.d.ts
│ │ ├── overlay.less
│ │ ├── startEditors.ts
│ │ ├── sudo-prompt.d.ts
│ │ └── units-css.d.ts
│ ├── test/
│ │ ├── AppTests.ts
│ │ ├── Editor/
│ │ │ └── NeovimEditor/
│ │ │ ├── BufferStateTests.ts
│ │ │ ├── NeovimEditorReducerTests.ts
│ │ │ └── SymbolsTests.ts
│ │ ├── GridTests.ts
│ │ ├── Input/
│ │ │ ├── InputManagerTests.ts
│ │ │ ├── KeyParserTests.ts
│ │ │ └── Keyboard/
│ │ │ └── ResolverTests.ts
│ │ ├── MarkdownTests.ts
│ │ ├── Mocks/
│ │ │ ├── MockBuffer.ts
│ │ │ ├── MockPersistentStore.ts
│ │ │ ├── MockPluginManager.ts
│ │ │ ├── MockThemeLoader.ts
│ │ │ ├── index.ts
│ │ │ ├── neovim/
│ │ │ │ └── MockNeovimInstance.ts
│ │ │ └── neovim.ts
│ │ ├── Plugins/
│ │ │ └── Api/
│ │ │ └── ProcessTests.ts
│ │ ├── Renderer/
│ │ │ └── SpanTests.ts
│ │ ├── Services/
│ │ │ ├── AutoClosingPairsTests.ts
│ │ │ ├── Completion/
│ │ │ │ ├── CompletionProvidersTests.ts
│ │ │ │ ├── CompletionSelectorsTests.ts
│ │ │ │ ├── CompletionStoreTests.ts
│ │ │ │ ├── CompletionTests.ts
│ │ │ │ ├── CompletionUtilityTests.ts
│ │ │ │ └── CompletionsRequestorTests.ts
│ │ │ ├── Configuration/
│ │ │ │ ├── ConfigurationTests.ts
│ │ │ │ └── FileConfigurationProviderTests.ts
│ │ │ ├── Explorer/
│ │ │ │ ├── ExplorerFileSystemTests.ts
│ │ │ │ ├── ExplorerSelectorsTests.ts
│ │ │ │ └── ExplorerStoreTests.ts
│ │ │ ├── FileMappingsTests.ts
│ │ │ ├── Language/
│ │ │ │ ├── EditTests.ts
│ │ │ │ ├── LanguageEditorIntegrationTests.ts
│ │ │ │ └── LanguageManagerTests.ts
│ │ │ ├── Learning/
│ │ │ │ ├── Achievements/
│ │ │ │ │ └── AchievementsManagerTests.ts
│ │ │ │ └── Tutorial/
│ │ │ │ ├── TutorialGameplayManagerTests.ts
│ │ │ │ └── TutorialManagerTests.ts
│ │ │ ├── Menu/
│ │ │ │ └── MenuReducerTests.ts
│ │ │ ├── Notifications/
│ │ │ │ └── NotificationStoreTests.ts
│ │ │ ├── QuickOpen/
│ │ │ │ ├── FinderProcessTests.ts
│ │ │ │ ├── RegExFilterTests.ts
│ │ │ │ └── VSCodeFilterTests.ts
│ │ │ ├── Sneak/
│ │ │ │ └── SneakStoreTests.ts
│ │ │ ├── Snippets/
│ │ │ │ ├── OniSnippetTests.ts
│ │ │ │ ├── SnippetCompletionProviderTests.ts
│ │ │ │ ├── SnippetProviderTests.ts
│ │ │ │ ├── SnippetSessionTests.ts
│ │ │ │ └── SnippetVariableResolverTests.ts
│ │ │ ├── SyntaxHighlighting/
│ │ │ │ ├── SyntaxHighlightingReconcilerTests.ts
│ │ │ │ └── SyntaxHighlightingReducerTests.ts
│ │ │ ├── TokenColorsTests.ts
│ │ │ ├── TypingPredictionManagerTests.ts
│ │ │ ├── WindowManager/
│ │ │ │ ├── LinearSplitProviderTests.ts
│ │ │ │ ├── RelationalSplitNavigatorTests.ts.ts
│ │ │ │ ├── WindowManagerTests.ts
│ │ │ │ └── layoutFromSplitInfoTests.ts
│ │ │ └── Workspace/
│ │ │ └── WorkspaceConfigurationTests.ts
│ │ ├── Tabs/
│ │ │ └── TabsTest.tsx
│ │ ├── TestHelpers.ts
│ │ ├── UtilityTests.ts
│ │ └── neovim/
│ │ ├── NeovimBufferUpdateManagerTests.ts
│ │ ├── NeovimMarksTests.ts
│ │ ├── NeovimTokenColorSynchronizerTests.ts
│ │ └── ScreenWithPredictionsTest.ts
│ ├── testCoverageReporter.js
│ ├── testHelpers.js
│ ├── tsconfig.json
│ ├── tsconfig.test.json
│ ├── webpack.debug.config.js
│ ├── webpack.development.config.js
│ └── webpack.production.config.js
├── build/
│ ├── BuildSetupTemplate.js
│ ├── CopyIcons.js
│ ├── icon.icns
│ ├── script/
│ │ ├── CheckBinariesForBuild.js
│ │ ├── UploadDistributionBuildsToAzure.js
│ │ ├── appveyor-test.ps1
│ │ ├── install-reason.sh
│ │ ├── travis-build.sh
│ │ ├── travis-pack.sh
│ │ └── travis-test.sh
│ └── setup.template.iss
├── cli/
│ ├── linux/
│ │ └── oni.sh
│ ├── mac/
│ │ └── oni.sh
│ ├── src/
│ │ ├── cli.ts
│ │ └── cli_args.ts
│ ├── tsconfig.json
│ └── win/
│ └── oni.cmd
├── codecov.yml
├── configuration/
│ └── config.default.js
├── extensions/
│ ├── README.md
│ ├── clojure/
│ │ └── syntaxes/
│ │ └── clojure.tmLanguage.json
│ ├── csharp/
│ │ └── syntaxes/
│ │ └── csharp.tmLanguage.json
│ ├── css/
│ │ └── syntaxes/
│ │ └── css.tmLanguage.json
│ ├── elixir/
│ │ └── syntaxes/
│ │ ├── eex.tmLanguage.json
│ │ ├── elixir.tmLanguage.json
│ │ └── html(eex).tmLanguage.json
│ ├── go/
│ │ ├── README.md
│ │ └── syntaxes/
│ │ └── go.json
│ ├── html/
│ │ ├── package.json
│ │ └── snippets/
│ │ └── html.json
│ ├── images/
│ │ └── package.json
│ ├── java/
│ │ └── syntaxes/
│ │ └── Java.tmLanguage.json
│ ├── javascript/
│ │ ├── package.json
│ │ ├── snippets/
│ │ │ └── javascript.json
│ │ └── syntaxes/
│ │ ├── JavaScript.tmLanguage.json
│ │ └── JavaScriptReact.tmLanguage.json
│ ├── less/
│ │ └── syntaxes/
│ │ └── less.tmLanguage.json
│ ├── lua/
│ │ └── syntaxes/
│ │ └── lua.tmLanguage.json
│ ├── markdown/
│ │ └── syntaxes/
│ │ └── markdown.tmLanguage.json
│ ├── objective-c/
│ │ └── syntaxes/
│ │ ├── objective-c++.tmLanguage.json
│ │ └── objective-c.tmLanguage.json
│ ├── oni-plugin-markdown-preview/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.tsx
│ │ └── tsconfig.json
│ ├── oni-plugin-prettier/
│ │ ├── .eslintrc.json
│ │ ├── index.js
│ │ ├── package.json
│ │ └── requirePackage.js
│ ├── oni-plugin-quickopen/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── BookmarksSearch.ts
│ │ │ ├── QuickOpen.ts
│ │ │ ├── QuickOpenItem.ts
│ │ │ └── index.tsx
│ │ └── tsconfig.json
│ ├── php/
│ │ └── syntaxes/
│ │ ├── html.tmLanguage.json
│ │ └── php.tmLanguage.json
│ ├── python/
│ │ └── syntaxes/
│ │ └── python.tmLanguage.json
│ ├── reason/
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── snippets/
│ │ │ └── reason.json
│ │ └── syntaxes/
│ │ └── reason.json
│ ├── ruby/
│ │ └── syntaxes/
│ │ └── ruby.tmLanguage.json
│ ├── rust/
│ │ └── syntaxes/
│ │ └── rust.tmLanguage.json
│ ├── scss/
│ │ └── syntaxes/
│ │ └── scss.json
│ ├── shell/
│ │ └── syntaxes/
│ │ └── shell.tmLanguage.json
│ ├── swift/
│ │ └── syntaxes/
│ │ └── swift.tmLanguage.json
│ ├── theme-dracula/
│ │ ├── colors/
│ │ │ ├── dracula.json
│ │ │ └── dracula.vim
│ │ └── package.json
│ ├── theme-gruvbox/
│ │ ├── colors/
│ │ │ ├── gruvbox.vim
│ │ │ ├── gruvbox_dark.json
│ │ │ └── gruvbox_light.json
│ │ └── package.json
│ ├── theme-hybrid/
│ │ ├── colors/
│ │ │ ├── hybrid.vim
│ │ │ ├── hybrid_dark.json
│ │ │ └── hybrid_light.json
│ │ └── package.json
│ ├── theme-icons-seti/
│ │ ├── README.md
│ │ ├── icons/
│ │ │ └── seti-icon-theme.json
│ │ ├── package.json
│ │ └── thirdpartynotices.txt
│ ├── theme-nord/
│ │ ├── README.md
│ │ ├── colors/
│ │ │ ├── nord.json
│ │ │ └── nord.vim
│ │ └── package.json
│ ├── theme-onedark/
│ │ ├── colors/
│ │ │ ├── onedark.json
│ │ │ └── onedark.vim
│ │ └── package.json
│ ├── theme-solarized/
│ │ ├── colors/
│ │ │ ├── solarized8.vim
│ │ │ ├── solarized8_dark.json
│ │ │ └── solarized8_light.json
│ │ └── package.json
│ ├── typescript/
│ │ ├── package.json
│ │ ├── snippets/
│ │ │ └── typescript.json
│ │ └── syntaxes/
│ │ ├── TypeScript.tmLanguage.json
│ │ └── TypeScriptReact.tmLanguage.json
│ └── vue/
│ └── syntaxes/
│ └── vue.json
├── font-awesome/
│ ├── css/
│ │ └── font-awesome.css
│ └── fonts/
│ └── FontAwesome.otf
├── index.dev.html
├── index.html
├── jest.config.js
├── main/
│ ├── src/
│ │ ├── Log.ts
│ │ ├── ProcessLifecycle.ts
│ │ ├── WindowManager.ts
│ │ ├── installDevTools.ts
│ │ ├── main.ts
│ │ └── menu.ts
│ ├── test/
│ │ └── WindowManagerTests.ts
│ ├── tsconfig.json
│ └── tsconfig.test.json
├── package.json
├── preload.js
├── scripts/
│ ├── dev_webpack_loader.js
│ └── webm2gif.sh
├── test/
│ ├── CiTests.ts
│ ├── Demo.ts
│ ├── Manual.md
│ ├── ci/
│ │ ├── Api.Buffer.AddLayer.tsx
│ │ ├── Api.Overlays.AddRemoveTest.tsx
│ │ ├── Assert.ts
│ │ ├── AutoClosingPairsTest.ts
│ │ ├── AutoCompletionTest-CSS.ts
│ │ ├── AutoCompletionTest-HTML.ts
│ │ ├── AutoCompletionTest-Reason.ts
│ │ ├── AutoCompletionTest-TypeScript.ts
│ │ ├── Browser.LocationTest.ts
│ │ ├── ColorHighlight.BufferLayerTest.ts
│ │ ├── Common.ts
│ │ ├── Configuration.JavaScriptEditorTest.ts
│ │ ├── Configuration.TypeScriptEditor.CompletionTest.ts
│ │ ├── Configuration.TypeScriptEditor.NewConfigurationTest.ts
│ │ ├── Editor.BufferModifiedState.ts
│ │ ├── Editor.BuffersCursorTest.ts
│ │ ├── Editor.CloseTabWithTabModesTabsTest.ts
│ │ ├── Editor.ExternalCommandLineTest.ts
│ │ ├── Editor.NextPreviousErrorTest.ts
│ │ ├── Editor.OpenFile.PathWithSpacesTest.ts
│ │ ├── Editor.ScrollEventTest.ts
│ │ ├── Editor.TabModifiedState.ts
│ │ ├── Explorer.LocateBufferTest.ts
│ │ ├── IndentGuide.BufferLayerTest.tsx
│ │ ├── LargeFileTest.ts
│ │ ├── LargePasteTest.ts
│ │ ├── MarkdownPreviewTest.tsx
│ │ ├── Neovim.CallOniCommands.ts
│ │ ├── Neovim.InvalidInitVimHandlingTest.ts
│ │ ├── NoInstalledNeovim.config.js
│ │ ├── NoInstalledNeovim.ts
│ │ ├── OSX.WindowTitleTest.ts
│ │ ├── PaintPerformanceTest.config.js
│ │ ├── PaintPerformanceTest.ts
│ │ ├── PrettierPluginTest.ts
│ │ ├── QuickOpenTest.ts
│ │ ├── Regression.1251.NoAdditionalProcessesOnStartup.ts
│ │ ├── Regression.1295.UnfocusedWindowTest.ts
│ │ ├── Regression.1296.SettingColorsTest.ts
│ │ ├── Regression.1799.MacroApplicationTest.ts
│ │ ├── Regression.1819.AutoReadCheckTimeTest.ts
│ │ ├── Regression.2047.VerifyCanvasIsIntegerSize.ts
│ │ ├── Sidebar.ToggleSplitTest.ts
│ │ ├── Snippets.BasicInsertTest.ts
│ │ ├── StatusBar-Mode.ts
│ │ ├── TabBarSneakTest.ts
│ │ ├── TextmateHighlighting.DebugScopesTest.ts
│ │ ├── TextmateHighlighting.ScopesOnEnterTest.ts
│ │ ├── TextmateHighlighting.TokenColorOverrideTest.ts
│ │ ├── Theming.LightAndDarkColorsTest.ts
│ │ ├── Welcome.BufferLayerTest.ts
│ │ ├── WindowManager.ErrorBoundary.tsx
│ │ ├── Workspace.ConfigurationTest.ts
│ │ └── initVimPromptNotificationTest.ts
│ ├── collateral/
│ │ └── 1799_test.csv
│ ├── common/
│ │ ├── Oni.ts
│ │ ├── ensureProcessNotRunning.ts
│ │ ├── index.ts
│ │ └── runInProcTest.ts
│ ├── demo/
│ │ ├── DemoCommon.ts
│ │ ├── HeroDemo.ts
│ │ └── HeroScreenshot.ts
│ ├── setup/
│ │ └── WindowsInstallerTests.ts
│ └── tsconfig.json
├── tslint.json
├── ui-tests/
│ ├── BrowserView.test.tsx
│ ├── BufferManager.test.ts
│ ├── BufferScrollBar.test.tsx
│ ├── CommandLine.test.tsx
│ ├── ContextMenuComponent.test.tsx
│ ├── ErrorInfo.test.tsx
│ ├── ExplorerSplit.test.tsx
│ ├── ExplorerView.test.tsx
│ ├── ExternalMenus.test.tsx
│ ├── HighlightText.test.tsx
│ ├── NeovimBufferLayersView.test.tsx
│ ├── NodeView.test.tsx
│ ├── NotificationView.test.tsx
│ ├── QuickInfo.test.tsx
│ ├── SessionManager.test.tsx
│ ├── Sessions.test.tsx
│ ├── SidebarStore.test.ts
│ ├── Tabs.test.tsx
│ ├── Text.test.tsx
│ ├── TokenScorer.test.ts
│ ├── TokenThemeProvider.test.tsx
│ ├── VersionControl/
│ │ ├── Help.test.tsx
│ │ ├── VersionControlCommits.test.tsx
│ │ ├── VersionControlComponents.test.tsx
│ │ ├── VersionControlManager.test.tsx
│ │ ├── VersionControlPane.test.tsx
│ │ ├── VersionControlSectionTitle.test.tsx
│ │ ├── VersionControlStore.test.ts
│ │ ├── VersionControlView.test.tsx
│ │ └── __snapshots__/
│ │ ├── VersionControlComponents.test.tsx.snap
│ │ ├── VersionControlSectionTitle.test.tsx.snap
│ │ └── VersionControlView.test.tsx.snap
│ ├── VersionControlBlameLayer.test.tsx
│ ├── VimNavigator.test.tsx
│ ├── WelcomeCommandsView.test.tsx
│ ├── WelcomeView.test.tsx
│ ├── WindowTitleView.test.tsx
│ ├── __snapshots__/
│ │ ├── BrowserView.test.tsx.snap
│ │ ├── BufferScrollBar.test.tsx.snap
│ │ ├── CommandLine.test.tsx.snap
│ │ ├── ErrorInfo.test.tsx.snap
│ │ ├── ExternalMenus.test.tsx.snap
│ │ ├── NodeView.test.tsx.snap
│ │ ├── NotificationView.test.tsx.snap
│ │ ├── QuickInfo.test.tsx.snap
│ │ ├── Tabs.test.tsx.snap
│ │ ├── Text.test.tsx.snap
│ │ ├── WelcomeCommandsView.test.tsx.snap
│ │ ├── WelcomeView.test.tsx.snap
│ │ └── WindowTitleView.test.tsx.snap
│ ├── enzyme-adapter-react-16.d.ts
│ ├── jestsetup.ts
│ ├── mocks/
│ │ ├── CommandManager.ts
│ │ ├── Configuration.ts
│ │ ├── EditorManager.ts
│ │ ├── MenuManager.ts
│ │ ├── Notifications.ts
│ │ ├── Oni.ts
│ │ ├── PersistentSettings.ts
│ │ ├── SharedNeovimInstance.ts
│ │ ├── Sidebar.ts
│ │ ├── Statusbar.ts
│ │ ├── UserConfiguration.ts
│ │ ├── Utility.ts
│ │ ├── Workspace.ts
│ │ ├── electronMock.ts
│ │ └── keyboardLayout.ts
│ ├── tsconfig.react.json
│ └── welcomeLayer.test.tsx
├── vim/
│ ├── core/
│ │ ├── colors/
│ │ │ └── Monokai.vim
│ │ ├── oni-core-interop/
│ │ │ ├── plugin/
│ │ │ │ └── init.vim
│ │ │ └── readme.md
│ │ ├── oni-core-statusbar/
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ ├── oni-plugin-buffers/
│ │ │ ├── index.js
│ │ │ ├── jsconfig.json
│ │ │ └── package.json
│ │ ├── oni-plugin-git/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.tsx
│ │ │ │ └── vcs.ts
│ │ │ └── tsconfig.json
│ │ ├── oni-plugin-reasonml/
│ │ │ ├── ftdetect/
│ │ │ │ └── reason.vim
│ │ │ ├── indent/
│ │ │ │ └── reason.vim
│ │ │ └── syntax/
│ │ │ └── reason.vim
│ │ └── oni-plugin-typescript/
│ │ ├── .gitignore
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── CodeActions.ts
│ │ │ ├── Completion.ts
│ │ │ ├── Definition.ts
│ │ │ ├── FindAllReferences.ts
│ │ │ ├── Formatting.ts
│ │ │ ├── LightweightLanguageClient.ts
│ │ │ ├── QuickInfo.ts
│ │ │ ├── Rename.ts
│ │ │ ├── SignatureHelp.ts
│ │ │ ├── Symbols.ts
│ │ │ ├── TypeScriptConfigurationEditor.ts
│ │ │ ├── TypeScriptServerHost.ts
│ │ │ ├── Types.ts
│ │ │ ├── Utility.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.test.json
│ ├── default/
│ │ └── bundle/
│ │ └── oni-vim-defaults/
│ │ └── plugin/
│ │ └── init.vim
│ └── noop.vim
└── webview_preload/
├── src/
│ └── index.ts
└── tsconfig.json
Showing preview only (289K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3407 symbols across 390 files)
FILE: @types/color-normalize/index.d.ts
type ColorInput (line 1) | type ColorInput =
FILE: @types/font-manager/index.d.ts
type FontWeight (line 1) | type FontWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
type FontWidth (line 2) | type FontWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
type QueryFontDescriptor (line 4) | interface QueryFontDescriptor {
type ResultFontDescriptor (line 14) | interface ResultFontDescriptor {
type FontManager (line 25) | interface FontManager {
FILE: browser/src/App.ts
type QuitHook (line 23) | type QuitHook = () => Promise<void>
FILE: browser/src/Editor/BufferHighlights.ts
type BufferHighlightId (line 12) | type BufferHighlightId = number
type IBufferHighlightsUpdater (line 14) | interface IBufferHighlightsUpdater {
class BufferHighlightsUpdater (line 26) | class BufferHighlightsUpdater implements IBufferHighlightsUpdater {
method constructor (line 29) | constructor(
method start (line 35) | public async start(): Promise<void> {
method setHighlightsForLine (line 44) | public setHighlightsForLine(
method clearHighlightsForLine (line 74) | public clearHighlightsForLine(line: number): void {
method apply (line 81) | public async apply(): Promise<BufferHighlightId> {
FILE: browser/src/Editor/BufferManager.ts
type IBuffer (line 49) | interface IBuffer extends Oni.Buffer {
type NvimError (line 63) | type NvimError = [1, string]
type ICommentFormats (line 65) | interface ICommentFormats {
type IndentationType (line 79) | type IndentationType = "tab" | "space"
type BufferIndentationInfo (line 81) | interface BufferIndentationInfo {
class Buffer (line 104) | class Buffer implements IBuffer {
method shiftwidth (line 121) | public get shiftwidth(): number {
method tabstop (line 125) | public get tabstop(): number {
method comment (line 129) | public get comment(): ICommentFormats {
method filePath (line 133) | public get filePath(): string {
method language (line 137) | public get language(): string {
method lineCount (line 141) | public get lineCount(): number {
method cursor (line 145) | public get cursor(): Oni.Cursor {
method cursorOffset (line 149) | public get cursorOffset(): number {
method version (line 153) | public get version(): number {
method modified (line 157) | public get modified(): boolean {
method id (line 161) | public get id(): string {
method constructor (line 165) | constructor(
method addLayer (line 174) | public addLayer(layer: IBufferLayer): void {
method getLayerById (line 178) | public getLayerById<T>(id: string): T | null {
method removeLayer (line 186) | public removeLayer(layer: IBufferLayer): void {
method convertOffsetToLineColumn (line 193) | public async convertOffsetToLineColumn(
method getCursorPosition (line 202) | public async getCursorPosition(): Promise<types.Position> {
method getLines (line 208) | public async getLines(start?: number, end?: number): Promise<string[]> {
method setLanguage (line 237) | public async setLanguage(language: string): Promise<void> {
method setScratchBuffer (line 242) | public async setScratchBuffer(): Promise<void> {
method detectIndentation (line 264) | public async detectIndentation(): Promise<BufferIndentationInfo> {
method applyTextEdits (line 288) | public async applyTextEdits(textEdits: types.TextEdit | types.TextEdit...
method handleInput (line 338) | public handleInput(key: string): boolean {
method updateHighlights (line 365) | public async updateHighlights(
method setLines (line 385) | public async setLines(start: number, end: number, lines: string[]): Pr...
method setCursorPosition (line 395) | public async setCursorPosition(row: number, column: number): Promise<v...
method getSelectionRange (line 399) | public async getSelectionRange(): Promise<types.Range | null> {
method getTokenAt (line 418) | public async getTokenAt(line: number, column: number): Promise<Oni.ITo...
method updateFromEvent (line 460) | public updateFromEvent(evt: EventContext): void {
method formatCommentOption (line 478) | public formatCommentOption(comments: string): ICommentFormats {
class BufferManager (line 519) | class BufferManager {
method constructor (line 524) | constructor(
method updateBufferFromEvent (line 530) | public updateBufferFromEvent(evt: EventContext): Buffer {
method populateBufferList (line 548) | public populateBufferList(buffers: BufferEventContext): void {
method getBufferById (line 562) | public getBufferById(id: string): Buffer {
method getBuffers (line 566) | public getBuffers(): Array<Buffer | InactiveBuffer> {
class InactiveBuffer (line 571) | class InactiveBuffer implements Oni.InactiveBuffer {
method id (line 579) | public get id(): string {
method filePath (line 583) | public get filePath(): string {
method language (line 586) | public get language(): string {
method version (line 589) | public get version(): number {
method modified (line 592) | public get modified(): boolean {
method lineCount (line 595) | public get lineCount(): number {
method constructor (line 599) | constructor(inactiveBuffer: InactiveBufferContext) {
FILE: browser/src/Editor/Editor.ts
method mode (line 27) | public get mode(): string {
method activeBuffer (line 31) | public get activeBuffer(): Oni.Buffer {
method onCursorMoved (line 35) | public get onCursorMoved(): IEvent<Oni.Cursor> {
method onModeChanged (line 43) | public get onModeChanged(): IEvent<Oni.Vim.Mode> {
method onBufferEnter (line 47) | public get onBufferEnter(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferLeave (line 51) | public get onBufferLeave(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferChanged (line 55) | public get onBufferChanged(): IEvent<Oni.EditorBufferChangedEventArgs> {
method onBufferSaved (line 59) | public get onBufferSaved(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferScrolled (line 63) | public get onBufferScrolled(): IEvent<Oni.EditorBufferScrolledEventArgs> {
method getBuffers (line 67) | public getBuffers(): Array<Oni.Buffer | Oni.InactiveBuffer> {
method openFile (line 71) | public /* virtual */ openFile(
method blockInput (line 78) | public async blockInput(
method setTextOptions (line 84) | public setTextOptions(options: Oni.EditorTextOptions): Promise<void> {
method setMode (line 92) | protected setMode(mode: Oni.Vim.Mode): void {
method notifyCursorMoved (line 99) | protected notifyCursorMoved(cursor: Oni.Cursor): void {
method notifyBufferChanged (line 103) | protected notifyBufferChanged(bufferChangeEvent: Oni.EditorBufferChanged...
method notifyBufferEnter (line 107) | protected notifyBufferEnter(bufferEvent: Oni.EditorBufferEventArgs): void {
method notifyBufferLeave (line 111) | protected notifyBufferLeave(bufferEvent: Oni.EditorBufferEventArgs): void {
method notifyBufferSaved (line 115) | protected notifyBufferSaved(bufferEvent: Oni.EditorBufferEventArgs): void {
method notifyBufferScrolled (line 119) | protected notifyBufferScrolled(bufferScrollEvent: Oni.EditorBufferScroll...
FILE: browser/src/Editor/NeovimEditor/BufferLayerManager.ts
type BufferLayerFactory (line 9) | type BufferLayerFactory = (buf: Oni.Buffer) => Oni.BufferLayer
type BufferFilter (line 10) | type BufferFilter = (buf: Oni.Buffer) => boolean
type IBufferLayer (line 12) | interface IBufferLayer extends Oni.BufferLayer {
type BufferLayerInfo (line 25) | interface BufferLayerInfo {
class BufferLayerManager (line 30) | class BufferLayerManager {
method addBufferLayer (line 34) | public addBufferLayer(
method notifyBufferEnter (line 55) | public notifyBufferEnter(buf: Oni.Buffer): void {
method notifyBufferFileTypeChanged (line 67) | public notifyBufferFileTypeChanged(buf: Oni.Buffer): void {
FILE: browser/src/Editor/NeovimEditor/CompletionMenu.ts
class CompletionMenu (line 19) | class CompletionMenu {
method onItemFocused (line 23) | public get onItemFocused(): IEvent<types.CompletionItem> {
method onItemSelected (line 27) | public get onItemSelected(): IEvent<types.CompletionItem> {
method constructor (line 31) | constructor(private _contextMenu: ContextMenu) {
method show (line 40) | public show(options: types.CompletionItem[], filterText: string): void {
method hide (line 51) | public hide(): void {
FILE: browser/src/Editor/NeovimEditor/Definition.ts
type OpenType (line 13) | enum OpenType {
class Definition (line 19) | class Definition {
method constructor (line 20) | constructor(private _editor: Oni.Editor, private _store: Store<State.I...
method gotoDefinitionUnderCursor (line 22) | public async gotoDefinitionUnderCursor(openOptions?: Oni.FileOpenOptio...
method gotoPositionInUri (line 37) | public async gotoPositionInUri(
FILE: browser/src/Editor/NeovimEditor/FileDropHandler.tsx
type SetRef (line 3) | type SetRef = (elem: HTMLElement) => void
type IFileDropHandler (line 5) | interface IFileDropHandler {
type DragTypeName (line 10) | type DragTypeName = "ondragover" | "ondragleave" | "ondragenter"
class FileDropHandler (line 20) | class FileDropHandler extends React.Component<IFileDropHandler> {
method componentDidMount (line 23) | public componentDidMount() {
method addDropHandler (line 31) | public addDropHandler() {
method render (line 57) | public render() {
FILE: browser/src/Editor/NeovimEditor/HoverRenderer.tsx
class HoverRenderer (line 31) | class HoverRenderer {
method constructor (line 32) | constructor(
method showQuickInfo (line 38) | public async showQuickInfo(
method hideQuickInfo (line 57) | public hideQuickInfo(): void {
method _renderQuickInfoElement (line 61) | private async _renderQuickInfoElement(
method _getDebugScopesElement (line 97) | private _getDebugScopesElement(): JSX.Element {
type ErrorElementProps (line 130) | interface ErrorElementProps {
FILE: browser/src/Editor/NeovimEditor/NeovimActiveWindow.tsx
type IActiveWindowProps (line 10) | interface IActiveWindowProps {
class NeovimActiveWindow (line 17) | class NeovimActiveWindow extends React.PureComponent<IActiveWindowProps,...
method render (line 18) | public render(): JSX.Element {
FILE: browser/src/Editor/NeovimEditor/NeovimBufferLayersView.tsx
type NeovimBufferLayersViewProps (line 19) | interface NeovimBufferLayersViewProps {
type LayerContextWithCursor (line 36) | interface LayerContextWithCursor extends Oni.BufferLayerRenderContext {
class NeovimBufferLayersView (line 41) | class NeovimBufferLayersView extends React.PureComponent<NeovimBufferLay...
method render (line 42) | public render(): JSX.Element {
FILE: browser/src/Editor/NeovimEditor/NeovimEditor.tsx
type NeovimError (line 100) | type NeovimError = [number, string]
class NeovimEditor (line 102) | class NeovimEditor extends Editor implements Oni.Editor {
method onNeovimQuit (line 153) | public get onNeovimQuit(): IEvent<void> {
method onShowWelcomeScreen (line 157) | public get onShowWelcomeScreen() {
method activeBuffer (line 161) | public get /* override */ activeBuffer(): Oni.Buffer {
method neovim (line 166) | public get neovim(): Oni.NeovimEditorCapability {
method bufferLayers (line 170) | public get bufferLayers() {
method autoFocus (line 178) | public get autoFocus(): boolean {
method autoFocus (line 181) | public set autoFocus(val: boolean) {
method syntaxHighlighter (line 185) | public get syntaxHighlighter(): ISyntaxHighlighter {
method constructor (line 189) | constructor(
method blockInput (line 757) | public async blockInput(
method checkMapping (line 763) | public async checkMapping(
method dispose (line 770) | public dispose(): void {
method enter (line 809) | public enter(): void {
method checkAutoRead (line 823) | public checkAutoRead(): void {
method leave (line 835) | public leave(): void {
method createWelcomeBuffer (line 842) | public async createWelcomeBuffer() {
method clearSelection (line 848) | public async clearSelection(): Promise<void> {
method setSelection (line 853) | public async setSelection(range: types.Range): Promise<void> {
method setTextOptions (line 893) | public async setTextOptions(textOptions: Oni.EditorTextOptions): Promi...
method getCurrentSession (line 909) | public async getCurrentSession(): Promise<string | void> {
method persistSession (line 920) | public async persistSession(session: ISession) {
method restoreSession (line 925) | public async restoreSession(session: ISession) {
method openFile (line 931) | public async openFile(
method newFile (line 981) | public async newFile(filePath: string): Promise<Oni.Buffer> {
method executeCommand (line 988) | public executeCommand(command: string): void {
method init (line 999) | public async init(
method setColorSchemeFromTheme (line 1059) | public async setColorSchemeFromTheme(theme: IThemeMetadata): Promise<v...
method getBuffers (line 1071) | public getBuffers(): Array<Oni.Buffer | Oni.InactiveBuffer> {
method bufferDelete (line 1075) | public async bufferDelete(bufferId: string = this.activeBuffer.id): Pr...
method render (line 1088) | public render(): JSX.Element {
method input (line 1133) | public async input(key: string): Promise<void> {
method quit (line 1149) | public async quit(): Promise<void> {
method _onBounceStart (line 1158) | private _onBounceStart(): void {
method _onBounceEnd (line 1162) | private _onBounceEnd(): void {
method _onModeChanged (line 1166) | private _onModeChanged(newMode: string): void {
method _updateWindow (line 1184) | private _updateWindow(currentBuffer: EventContext) {
method _onFileTypeChanged (line 1198) | private _onFileTypeChanged(evt: EventContext): void {
method _onBufEnter (line 1203) | private async _onBufEnter(evt: BufferEventContext): Promise<void> {
method _escapeSpaces (line 1229) | private _escapeSpaces(str: string): string {
method _onImeStart (line 1233) | private _onImeStart(): void {
method _onImeEnd (line 1237) | private _onImeEnd(): void {
method _onBufWritePost (line 1241) | private async _onBufWritePost(evt: EventContext): Promise<void> {
method _onBufUnload (line 1251) | private async _onBufUnload(evt: BufferEventContext): Promise<void> {
method _onBufDelete (line 1256) | private async _onBufDelete(evt: BufferEventContext): Promise<void> {
method _onBufWipeout (line 1261) | private async _onBufWipeout(evt: BufferEventContext): Promise<void> {
method _onConfigChanged (line 1266) | private _onConfigChanged(newValues: Partial<IConfigurationValues>): vo...
method _onColorsChanged (line 1289) | private async _onColorsChanged(): Promise<void> {
method _scheduleRender (line 1317) | private _scheduleRender(): void {
method _renderImmediate (line 1326) | private _renderImmediate(): void {
method _handleNeovimError (line 1339) | private _handleNeovimError(result: NeovimError | void): void {
FILE: browser/src/Editor/NeovimEditor/NeovimEditorActions.ts
type DispatchFunction (line 25) | type DispatchFunction = (action: any) => void
type GetStateFunction (line 26) | type GetStateFunction = () => State.IState
type ISetHasFocusAction (line 28) | interface ISetHasFocusAction {
type ISetLoadingCompleteAction (line 35) | interface ISetLoadingCompleteAction {
type ISetColorsAction (line 39) | interface ISetColorsAction {
type IAddBufferLayerAction (line 46) | interface IAddBufferLayerAction {
type IRemoveBufferLayerAction (line 54) | interface IRemoveBufferLayerAction {
type ISetViewportAction (line 62) | interface ISetViewportAction {
type ISetCommandLinePosition (line 70) | interface ISetCommandLinePosition {
type IHideCommandLineAction (line 78) | interface IHideCommandLineAction {
type IShowCommandLineAction (line 82) | interface IShowCommandLineAction {
type IWildMenuSelectedAction (line 94) | interface IWildMenuSelectedAction {
type IShowWildMenuAction (line 101) | interface IShowWildMenuAction {
type IHideWildMenuAction (line 108) | interface IHideWildMenuAction {
type ISetNeovimErrorAction (line 112) | interface ISetNeovimErrorAction {
type ISetCursorScaleAction (line 119) | interface ISetCursorScaleAction {
type ISetCurrentBuffersAction (line 126) | interface ISetCurrentBuffersAction {
type ISetImeActive (line 133) | interface ISetImeActive {
type ISetFont (line 140) | interface ISetFont {
type IBufferEnterAction (line 149) | interface IBufferEnterAction {
type IShowToolTipAction (line 156) | interface IShowToolTipAction {
type IHideToolTipAction (line 165) | interface IHideToolTipAction {
type IBufferUpdateAction (line 172) | interface IBufferUpdateAction {
type IBufferSaveAction (line 182) | interface IBufferSaveAction {
type ISetTabs (line 191) | interface ISetTabs {
type ISetActiveVimTabPage (line 199) | interface ISetActiveVimTabPage {
type ISetWindowCursor (line 207) | interface ISetWindowCursor {
type ISetWindowState (line 216) | interface ISetWindowState {
type ISetInactiveWindowState (line 237) | interface ISetInactiveWindowState {
type ISetErrorsAction (line 245) | interface ISetErrorsAction {
type ISetCursorPositionAction (line 252) | interface ISetCursorPositionAction {
type ISetModeAction (line 264) | interface ISetModeAction {
type IShowDefinitionAction (line 271) | interface IShowDefinitionAction {
type IHideDefinitionAction (line 279) | interface IHideDefinitionAction {
type ISetConfigurationValue (line 283) | interface ISetConfigurationValue<K extends keyof IConfigurationValues> {
type Action (line 291) | type Action<K extends keyof IConfigurationValues> = SimpleAction | Actio...
type SimpleAction (line 293) | type SimpleAction =
type ActionWithGeneric (line 327) | type ActionWithGeneric<K extends keyof IConfigurationValues> = ISetConfi...
function setConfigValue (line 679) | function setConfigValue<K extends keyof IConfigurationValues>(
FILE: browser/src/Editor/NeovimEditor/NeovimEditorCommands.ts
class NeovimEditorCommands (line 23) | class NeovimEditorCommands {
method constructor (line 26) | constructor(
method activate (line 36) | public activate(): void {
method deactivate (line 210) | public deactivate(): void {
FILE: browser/src/Editor/NeovimEditor/NeovimEditorReducer.ts
function reducer (line 16) | function reducer<K extends keyof IConfigurationValues>(
FILE: browser/src/Editor/NeovimEditor/NeovimEditorStore.ts
type Layers (line 21) | interface Layers {
type Buffers (line 24) | interface Buffers {
type Errors (line 27) | interface Errors {
type ToolTips (line 30) | interface ToolTips {
type IViewport (line 39) | interface IViewport {
type IToolTip (line 44) | interface IToolTip {
type IState (line 50) | interface IState {
type IWildMenu (line 95) | interface IWildMenu {
type ICommandLine (line 101) | interface ICommandLine {
type IDefinition (line 111) | interface IDefinition {
type IBufferState (line 116) | interface IBufferState {
type IBuffer (line 122) | interface IBuffer {
type ITab (line 133) | interface ITab {
type ITabState (line 139) | interface ITabState {
type IVimTabPage (line 144) | interface IVimTabPage {
type IWindowState (line 149) | interface IWindowState {
type IWindow (line 154) | interface IWindow {
function readConf (line 172) | function readConf<K extends keyof IConfigurationValues>(
FILE: browser/src/Editor/NeovimEditor/NeovimInput.tsx
type INeovimInputProps (line 18) | interface INeovimInputProps {
class NeovimInput (line 32) | class NeovimInput extends React.PureComponent<INeovimInputProps, {}> {
method componentDidMount (line 36) | public componentDidMount(): void {
method render (line 46) | public render(): JSX.Element {
FILE: browser/src/Editor/NeovimEditor/NeovimPopupMenu.tsx
class NeovimPopupMenu (line 28) | class NeovimPopupMenu {
method constructor (line 31) | constructor(
method dispose (line 59) | public dispose(): void {
method _renderCompletionMenu (line 64) | private _renderCompletionMenu(selectedIndex: number): void {
FILE: browser/src/Editor/NeovimEditor/NeovimRenderer.tsx
type INeovimRendererProps (line 12) | interface INeovimRendererProps {
class NeovimRenderer (line 18) | class NeovimRenderer extends React.PureComponent<INeovimRendererProps, {...
method componentDidMount (line 23) | public componentDidMount(): void {
method componentWillUnmount (line 42) | public componentWillUnmount(): void {
method render (line 55) | public render(): JSX.Element {
method _onResize (line 59) | private _onResize(): void {
FILE: browser/src/Editor/NeovimEditor/NeovimSurface.tsx
type INeovimSurfaceProps (line 30) | interface INeovimSurfaceProps {
class NeovimSurface (line 52) | class NeovimSurface extends React.Component<INeovimSurfaceProps> {
method componentDidMount (line 56) | public componentDidMount(): void {
method render (line 69) | public render(): JSX.Element {
FILE: browser/src/Editor/NeovimEditor/Rename.tsx
class Rename (line 19) | class Rename {
method constructor (line 22) | constructor(
method startRename (line 29) | public async startRename(): Promise<void> {
method commitRename (line 62) | public commitRename(newValue: string): void {
method cancelRename (line 68) | public cancelRename(): void {
method closeToolTip (line 73) | public closeToolTip(): void {
method doRename (line 79) | public async doRename(newName: string): Promise<void> {
FILE: browser/src/Editor/NeovimEditor/Symbols.ts
class Symbols (line 21) | class Symbols {
method constructor (line 22) | constructor(
method openWorkspaceSymbolsMenu (line 29) | public async openWorkspaceSymbolsMenu() {
method openDocumentSymbolsMenu (line 81) | public async openDocumentSymbolsMenu(): Promise<void> {
method _getDetailFromSymbol (line 119) | private _getDetailFromSymbol(si: types.SymbolInformation): string {
method _symbolInfoToMenuItem (line 129) | private _symbolInfoToMenuItem(si: types.SymbolInformation): Oni.Menu.M...
method _convertSymbolKindToIconName (line 137) | private _convertSymbolKindToIconName(symbolKind: types.SymbolKind): st...
method _requestSymbols (line 169) | private async _requestSymbols(
FILE: browser/src/Editor/NeovimEditor/ToolTipsProvider.ts
type IToolTipsProvider (line 5) | interface IToolTipsProvider {
class NeovimEditorToolTipsProvider (line 10) | class NeovimEditorToolTipsProvider implements IToolTipsProvider {
method constructor (line 11) | constructor(private _actions: typeof Actions) {}
method showToolTip (line 13) | public showToolTip(
method hideToolTip (line 21) | public hideToolTip(id: string): void {
FILE: browser/src/Editor/NeovimEditor/WelcomeBufferLayer.tsx
type IColumnProps (line 62) | interface IColumnProps {
type WelcomeButtonWrapperProps (line 151) | interface WelcomeButtonWrapperProps {
type WelcomeButtonProps (line 251) | interface WelcomeButtonProps {
type IChromeDiv (line 259) | interface IChromeDiv extends HTMLButtonElement {
class WelcomeButton (line 263) | class WelcomeButton extends React.PureComponent<WelcomeButtonProps> {
method componentDidUpdate (line 266) | public componentDidUpdate(prevProps: WelcomeButtonProps) {
method render (line 272) | public render() {
type WelcomeHeaderState (line 287) | interface WelcomeHeaderState {
type OniWithActiveSection (line 291) | interface OniWithActiveSection extends Oni.Plugin.Api {
type ExecuteCommand (line 296) | type ExecuteCommand = <T>(command: string, args?: T) => void
type IWelcomeInputEvent (line 298) | interface IWelcomeInputEvent {
type ICommandMetadata (line 304) | interface ICommandMetadata {
type IWelcomeCommandsDictionary (line 309) | interface IWelcomeCommandsDictionary {
class WelcomeBufferLayer (line 321) | class WelcomeBufferLayer implements Oni.BufferLayer {
method constructor (line 324) | constructor(private _oni: OniWithActiveSection) {}
method id (line 380) | public get id() {
method friendlyName (line 384) | public get friendlyName() {
method isActive (line 388) | public isActive(): boolean {
method handleInput (line 393) | public handleInput(key: string) {
method getProps (line 416) | public getProps() {
method render (line 430) | public render(context: Oni.BufferLayerRenderContext) {
type WelcomeViewProps (line 447) | interface WelcomeViewProps {
type WelcomeViewState (line 459) | interface WelcomeViewState {
class WelcomeView (line 465) | class WelcomeView extends React.PureComponent<WelcomeViewProps, WelcomeV...
method componentDidMount (line 474) | public async componentDidMount() {
method getCurrentCommand (line 500) | public getCurrentCommand(selectedId: string): ICommandMetadata {
method getNextIndex (line 506) | public getNextIndex(
method componentDidUpdate (line 532) | public componentDidUpdate() {
method render (line 538) | public render() {
type IWelcomeCommandsViewProps (line 588) | interface IWelcomeCommandsViewProps extends Partial<WelcomeViewProps> {
FILE: browser/src/Editor/NeovimEditor/markdown.ts
type IRendererArgs (line 10) | interface IRendererArgs {
type Symbols (line 17) | interface Symbols {
function escapeRegExp (line 44) | function escapeRegExp(str: string) {
type TextElement (line 50) | type TextElement = "code" | "pre" | "p" | "span"
type WrapTokenArgs (line 63) | interface WrapTokenArgs {
function wrapTokens (line 68) | function wrapTokens({ tokens, element, text }: WrapTokenArgs): string {
function renderWithClasses (line 102) | function renderWithClasses({
type IConversionArgs (line 142) | interface IConversionArgs {
FILE: browser/src/Editor/OniEditor/ColorHighlightLayer.tsx
type IBackground (line 9) | interface IBackground {
type IHighlight (line 16) | interface IHighlight {
type IState (line 47) | interface IState {
type IProps (line 51) | type IProps = IHighlight & IBackground
class Highlight (line 53) | class Highlight extends React.PureComponent<IProps, IState> {
method componentDidCatch (line 58) | public componentDidCatch(error: Error) {
method render (line 62) | public render() {
class ColorHighlightLayer (line 86) | class ColorHighlightLayer implements Oni.BufferLayer {
method constructor (line 252) | constructor(private _config: Oni.Configuration) {
method id (line 260) | public get id() {
method friendlyName (line 264) | public get friendlyName() {
method _constructRegex (line 275) | private _constructRegex() {
FILE: browser/src/Editor/OniEditor/ImageBufferLayer.tsx
class ImageBufferLayer (line 16) | class ImageBufferLayer implements Oni.BufferLayer {
method constructor (line 17) | constructor(private _buffer: Oni.Buffer) {}
method id (line 18) | public get id(): string {
method friendlyName (line 22) | public get friendlyName(): string {
method render (line 26) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
type IImageLayerViewProps (line 31) | interface IImageLayerViewProps {
type IImageLayerViewState (line 35) | interface IImageLayerViewState {
class ImageLayerView (line 63) | class ImageLayerView extends React.PureComponent<
method constructor (line 67) | constructor(props: IImageLayerViewProps) {
method componentDidMount (line 75) | public componentDidMount(): void {
method render (line 86) | public render(): JSX.Element {
FILE: browser/src/Editor/OniEditor/IndentGuideBufferLayer.tsx
type IWrappedLine (line 12) | interface IWrappedLine {
type IProps (line 18) | interface IProps {
type ConfigOptions (line 25) | interface ConfigOptions {
type LinePropsWithLevels (line 30) | interface LinePropsWithLevels extends IndentLinesProps {
type IndentLinesProps (line 34) | interface IndentLinesProps {
type IndentLayerArgs (line 57) | interface IndentLayerArgs {
class IndentGuideBufferLayer (line 62) | class IndentGuideBufferLayer implements Oni.BufferLayer {
method constructor (line 71) | constructor({ buffer, configuration }: IndentLayerArgs) {
method id (line 76) | get id() {
method friendlyName (line 80) | get friendlyName() {
method _determineIfShouldSkip (line 116) | private _determineIfShouldSkip(props: LinePropsWithLevels, options: Co...
method _calculateLeftPosition (line 127) | private _calculateLeftPosition(props: LinePropsWithLevels) {
method _getWrappedLines (line 137) | private _getWrappedLines(context: Oni.BufferLayerRenderContext): IWrap...
method _regulariseIndentation (line 163) | private _regulariseIndentation(indentation: detectIndent.IndentInfo) {
FILE: browser/src/Editor/OniEditor/OniEditor.tsx
class OniEditor (line 67) | class OniEditor extends Utility.Disposable implements Oni.Editor {
method mode (line 70) | public get mode(): string {
method onCursorMoved (line 74) | public get onCursorMoved(): IEvent<Oni.Cursor> {
method onModeChanged (line 78) | public get onModeChanged(): IEvent<Oni.Vim.Mode> {
method onBufferEnter (line 82) | public get onBufferEnter(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferLeave (line 86) | public get onBufferLeave(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferChanged (line 90) | public get onBufferChanged(): IEvent<Oni.EditorBufferChangedEventArgs> {
method onBufferSaved (line 94) | public get onBufferSaved(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferScrolled (line 98) | public get onBufferScrolled(): IEvent<Oni.EditorBufferScrolledEventArg...
method activeBuffer (line 102) | public get /* override */ activeBuffer(): Oni.Buffer {
method onQuit (line 106) | public get onQuit(): IEvent<void> {
method neovim (line 111) | public get neovim(): Oni.NeovimEditorCapability {
method syntaxHighlighter (line 115) | public get syntaxHighlighter(): ISyntaxHighlighter {
method constructor (line 119) | constructor(
method dispose (line 216) | public dispose(): void {
method enter (line 225) | public enter(): void {
method leave (line 256) | public leave(): void {
method openFile (line 268) | public async openFile(
method newFile (line 288) | public async newFile(filePath: string): Promise<Oni.Buffer> {
method clearSelection (line 292) | public async clearSelection(): Promise<void> {
method setSelection (line 296) | public async setSelection(range: types.Range): Promise<void> {
method setTextOptions (line 300) | public async setTextOptions(textOptions: Oni.EditorTextOptions): Promi...
method blockInput (line 304) | public async blockInput(
method executeCommand (line 310) | public executeCommand(command: string): void {
method restoreSession (line 314) | public restoreSession(sessionDetails: ISession) {
method getCurrentSession (line 318) | public getCurrentSession() {
method persistSession (line 322) | public persistSession(sessionDetails: ISession) {
method getBuffers (line 326) | public getBuffers(): Array<Oni.Buffer | Oni.InactiveBuffer> {
method bufferDelete (line 330) | public async bufferDelete(bufferId: string = this.activeBuffer.id): Pr...
method init (line 334) | public async init(filesToOpen: string[]): Promise<void> {
method input (line 340) | public async input(key: string): Promise<void> {
method render (line 344) | public render(): JSX.Element {
method quit (line 348) | public async quit(): Promise<void> {
method _split (line 352) | private async _split(direction: SplitDirection): Promise<OniEditor> {
FILE: browser/src/Font.ts
type IFontMeasurement (line 4) | interface IFontMeasurement {
function measureFont (line 9) | function measureFont(
function addDefaultUnitIfNeeded (line 47) | function addDefaultUnitIfNeeded(fontSize: string) {
function isStyleAvailable (line 52) | function isStyleAvailable(fontName: string, style: string, fontSize = "1...
FILE: browser/src/Grid.ts
class Grid (line 1) | class Grid<T> {
method width (line 7) | public get width(): number {
method height (line 11) | public get height(): number {
method getCell (line 15) | public getCell(x: number, y: number): null | T {
method setCell (line 31) | public setCell(x: number, y: number, val: T | null) {
method clear (line 46) | public clear(): void {
method shiftRows (line 52) | public shiftRows(rowsToShift: number): void {
method setRegionFromGrid (line 80) | public setRegionFromGrid(grid: Grid<T>, xPosition: number, yPosition: ...
method setRegion (line 89) | public setRegion(
method cloneRegion (line 104) | public cloneRegion(x: number, y: number, width: number, height: number...
FILE: browser/src/Input/KeyBindings.ts
type ISidebar (line 12) | interface ISidebar {
FILE: browser/src/Input/KeyParser.ts
type IKey (line 8) | interface IKey {
type IKeyChord (line 16) | interface IKeyChord {
FILE: browser/src/Input/Keyboard/KeyboardLayout.ts
type IKeyMap (line 6) | interface IKeyMap {
type IKeyInfo (line 10) | interface IKeyInfo {
class KeyboardLayoutManager (line 34) | class KeyboardLayoutManager {
method onKeyMapChanged (line 42) | public get onKeyMapChanged(): IEvent<void> {
method getCurrentKeyMap (line 46) | public getCurrentKeyMap(): IKeyMap {
FILE: browser/src/Input/Keyboard/KeyboardResolver.ts
class KeyboardResolver (line 11) | class KeyboardResolver {
method addResolver (line 14) | public addResolver(resolver: KeyResolver): IDisposable {
method resolveKeyEvent (line 25) | public resolveKeyEvent(evt: KeyboardEvent): string | null {
FILE: browser/src/Input/Keyboard/Resolvers.ts
type KeyResolver (line 11) | type KeyResolver = (evt: KeyboardEvent, previousResolution: string | nul...
FILE: browser/src/Input/KeyboardInput.tsx
type IKeyboardInputViewProps (line 22) | interface IKeyboardInputViewProps extends IKeyboardInputProps {
type IKeyboardInputViewState (line 32) | interface IKeyboardInputViewState {
type IKeyboardInputProps (line 46) | interface IKeyboardInputProps {
class KeyboardInputView (line 66) | class KeyboardInputView extends React.PureComponent<
method constructor (line 73) | constructor(props: IKeyboardInputViewProps) {
method focus (line 82) | public focus() {
method componentDidMount (line 86) | public componentDidMount(): void {
method componentWillUnmount (line 100) | public componentWillUnmount(): void {
method render (line 104) | public render(): JSX.Element {
method _onKeyUp (line 161) | private _onKeyUp(evt: React.KeyboardEvent<HTMLInputElement>) {
method _onKeyDown (line 167) | private _onKeyDown(evt: React.KeyboardEvent<HTMLInputElement>) {
method _onCompositionStart (line 203) | private _onCompositionStart(evt: React.CompositionEvent<HTMLInputEleme...
method _onCompositionUpdate (line 217) | private _onCompositionUpdate(evt: React.CompositionEvent<HTMLInputElem...
method _onCompositionEnd (line 231) | private _onCompositionEnd(evt: React.CompositionEvent<HTMLInputElement...
method _onInput (line 241) | private _onInput(evt: React.FormEvent<HTMLInputElement>) {
method _commit (line 249) | private _commit(val: string): void {
method _removeExistingDisposables (line 259) | private _removeExistingDisposables(): void {
FILE: browser/src/Input/Mouse.ts
constant SCROLL_THRESHOLD_IN_PIXELS (line 5) | const SCROLL_THRESHOLD_IN_PIXELS = 10
class Mouse (line 9) | class Mouse extends EventEmitter {
method constructor (line 13) | constructor(private _editorElement: HTMLDivElement, private _screen: I...
method _normalizeScrollDeltaToPixels (line 68) | private _normalizeScrollDeltaToPixels(delta: number, deltaMode: number...
method _convertEventToPosition (line 81) | private _convertEventToPosition(evt: MouseEvent): { line: number; colu...
method _scrollDeltaIsSignificant (line 91) | private _scrollDeltaIsSignificant(): boolean {
FILE: browser/src/Performance.ts
function mark (line 4) | function mark(markerName: string): void {
FILE: browser/src/PeriodicJobs.ts
type IPeriodicJob (line 7) | interface IPeriodicJob {
class PeriodicJobManager (line 13) | class PeriodicJobManager {
method startJob (line 17) | public startJob(job: IPeriodicJob) {
method _scheduleJobs (line 23) | private _scheduleJobs(): void {
method _executePendingJobs (line 45) | private _executePendingJobs(): boolean {
FILE: browser/src/PersistentStore.ts
type IPersistentStore (line 15) | interface IPersistentStore<T> {
type IPersistedValueWithMetadata (line 30) | interface IPersistedValueWithMetadata<T> {
class PersistentStore (line 35) | class PersistentStore<T> implements IPersistentStore<T> {
method constructor (line 38) | constructor(
method get (line 63) | public async get(): Promise<T> {
method set (line 67) | public async set(val: T): Promise<void> {
method has (line 76) | public has(key: string) {
method delete (line 80) | public async delete(key: string) {
FILE: browser/src/Plugins/AnonymousPlugin.ts
class AnonymousPlugin (line 12) | class AnonymousPlugin {
method oni (line 15) | public get oni(): OniApi.Plugin.Api {
method constructor (line 19) | constructor() {
FILE: browser/src/Plugins/Api/Capabilities.ts
type IContributions (line 7) | interface IContributions {
type ICommandContribution (line 23) | interface ICommandContribution {
type IIconThemeContribution (line 29) | interface IIconThemeContribution {
type ILanguageContribution (line 35) | interface ILanguageContribution {
type ISnippetContribution (line 40) | interface ISnippetContribution {
type IThemeContribution (line 45) | interface IThemeContribution {
type IPluginMetadata (line 50) | interface IPluginMetadata {
FILE: browser/src/Plugins/Api/LanguageClient/LanguageClientHelpers.ts
type CompletionOptions (line 19) | interface CompletionOptions {
type ServerCapabilities (line 34) | interface ServerCapabilities {
type IMarkedStringResult (line 127) | interface IMarkedStringResult {
function isMarkupContent (line 155) | function isMarkupContent(input: any): input is types.MarkupContent {
FILE: browser/src/Plugins/Api/LanguageClient/LanguageClientLogger.ts
class LanguageClientLogger (line 9) | class LanguageClientLogger {
method error (line 10) | public error(message: string): void {
method warn (line 14) | public warn(message: string): void {
method info (line 18) | public info(message: string): void {
method log (line 22) | public log(message: string): void {
FILE: browser/src/Plugins/Api/Oni.ts
class Dependencies (line 50) | class Dependencies {
method React (line 51) | public get React(): any {
class Oni (line 63) | class Oni implements OniApi.Plugin.Api {
method achievements (line 68) | public get achievements(): any /* TODO: Promote to API */ {
method automation (line 72) | public get automation(): OniApi.Automation.Api {
method colors (line 76) | public get colors(): Colors /* TODO: Promote to API */ {
method commands (line 80) | public get commands(): OniApi.Commands.Api {
method contextMenu (line 84) | public get contextMenu(): any {
method log (line 88) | public get log(): OniApi.Log {
method plugins (line 92) | public get plugins(): any {
method recorder (line 96) | public get recorder(): any {
method completions (line 100) | public get completions(): any {
method configuration (line 104) | public get configuration(): OniApi.Configuration {
method diagnostics (line 108) | public get diagnostics(): OniApi.Plugin.Diagnostics.Api {
method dependencies (line 112) | public get dependencies(): Dependencies {
method editors (line 116) | public get editors(): OniApi.EditorManager {
method input (line 120) | public get input(): OniApi.Input.InputManager {
method language (line 124) | public get language(): any {
method menu (line 128) | public get menu(): any /* TODO */ {
method filter (line 132) | public get filter(): OniApi.Menu.IMenuFilters {
method notifications (line 136) | public get notifications(): OniApi.Notifications.Api {
method overlays (line 140) | public get overlays(): OniApi.Overlays.Api {
method process (line 144) | public get process(): OniApi.Process {
method sidebar (line 148) | public get sidebar(): any {
method sneak (line 152) | public get sneak(): any {
method snippets (line 156) | public get snippets(): OniApi.Snippets.SnippetManager {
method statusBar (line 160) | public get statusBar(): OniApi.StatusBar {
method tokenColors (line 164) | public get tokenColors(): any {
method ui (line 168) | public get ui(): Ui {
method sessions (line 172) | public get sessions(): SessionManager {
method services (line 176) | public get services(): Services {
method tutorials (line 180) | public get tutorials(): any /* todo */ {
method windows (line 184) | public get windows(): OniApi.IWindowManager {
method workspace (line 188) | public get workspace(): OniApi.Workspace.Api {
method helpers (line 192) | public get helpers() {
method search (line 196) | public get search(): OniApi.Search.ISearch {
method constructor (line 200) | constructor() {
method getActiveSection (line 206) | public getActiveSection() {
method populateQuickFix (line 225) | public populateQuickFix(entries: OniApi.QuickFixEntry[]): void {
method execNodeScript (line 231) | public async execNodeScript(
method spawnNodeScript (line 247) | public async spawnNodeScript(
FILE: browser/src/Plugins/Api/Process.ts
type IShellEnvironmentFetcher (line 9) | interface IShellEnvironmentFetcher {
type IShellEnv (line 13) | interface IShellEnv {
class ShellEnvironmentFetcher (line 19) | class ShellEnvironmentFetcher implements IShellEnvironmentFetcher {
method constructor (line 23) | constructor() {
method getEnvironmentVariables (line 28) | public async getEnvironmentVariables(): Promise<NodeJS.ProcessEnv> {
class Process (line 48) | class Process implements Oni.Process {
method constructor (line 52) | constructor(
FILE: browser/src/Plugins/Api/Services.ts
class Services (line 3) | class Services {
method vcs (line 4) | public get vcs(): VersionControlManager {
FILE: browser/src/Plugins/Api/Ui.ts
class Ui (line 7) | class Ui implements Oni.Ui.IUi {
method constructor (line 8) | constructor(private _react: any) {}
method createIcon (line 10) | public createIcon(props: IconProps): any {
method getIconClassForFile (line 14) | public getIconClassForFile(filename: string, language?: string): string {
method getFileIcon (line 19) | public getFileIcon(fileName: string): any {
method iconSize (line 23) | public get iconSize(): any {
FILE: browser/src/Plugins/Plugin.ts
class Plugin (line 11) | class Plugin {
method id (line 17) | public get id(): string {
method instance (line 21) | public get instance(): any {
method metadata (line 25) | public get metadata(): Capabilities.IPluginMetadata {
method source (line 29) | public get source(): string {
method name (line 33) | public get name(): string | null {
method constructor (line 38) | constructor(private _pluginRootDirectory: string, private _source: str...
method activate (line 48) | public activate(): void {
FILE: browser/src/Plugins/PluginInstaller.ts
type PluginIdentifier (line 29) | type PluginIdentifier = string
type IPluginInstallerOperationEvent (line 31) | interface IPluginInstallerOperationEvent {
type IPluginInstaller (line 37) | interface IPluginInstaller {
class YarnPluginInstaller (line 46) | class YarnPluginInstaller implements IPluginInstaller {
method onOperationStarted (line 51) | public get onOperationStarted(): IEvent<IPluginInstallerOperationEvent> {
method onOperationCompleted (line 55) | public get onOperationCompleted(): IEvent<IPluginInstallerOperationEve...
method onOperationError (line 59) | public get onOperationError(): IEvent<IPluginInstallerOperationEvent> {
method constructor (line 63) | constructor(private _fileSystem: IFileSystem = OniFileSystem) {}
method install (line 65) | public async install(identifier: string): Promise<void> {
method uninstall (line 84) | public async uninstall(identifier: string): Promise<void> {
method _ensurePackageJsonIsCreated (line 102) | private async _ensurePackageJsonIsCreated(): Promise<void> {
method _runYarnCommand (line 125) | private async _runYarnCommand(command: string, args: string[]): Promis...
method _getPackageJsonFile (line 149) | private _getPackageJsonFile(): string {
method _getPluginsFolder (line 153) | private _getPluginsFolder(): string {
method _getYarnPath (line 157) | private _getYarnPath(): string {
FILE: browser/src/Plugins/PluginManager.ts
class PluginManager (line 21) | class PluginManager implements Oni.IPluginManager {
method pluginsAllLoaded (line 29) | public get pluginsAllLoaded(): IEvent<void> {
method plugins (line 35) | public get plugins(): Plugin[] {
method installer (line 39) | public get installer(): IPluginInstaller {
method constructor (line 43) | constructor(private _config: Configuration) {}
method addDevelopmentPlugin (line 45) | public addDevelopmentPlugin(pluginPath: string): void {
method discoverPlugins (line 49) | public discoverPlugins(): void {
method startApi (line 84) | public startApi(): Oni.Plugin.Api {
method getApi (line 95) | public getApi(): Oni.Plugin.Api {
method getAllRuntimePaths (line 99) | public getAllRuntimePaths(): string[] {
method loaded (line 108) | public get loaded(): boolean {
method getPlugin (line 112) | public getPlugin(name: string): any {
method getAllContributionsOfType (line 121) | public getAllContributionsOfType<T>(selector: (capabilities: IContribu...
method _createPlugin (line 130) | private _createPlugin(pluginRootDirectory: string, source: string): Pl...
method _getAllPluginPaths (line 134) | private _getAllPluginPaths(rootPluginPaths: string[]): string[] {
function getDirectories (line 153) | function getDirectories(rootPath: string): string[] {
FILE: browser/src/Plugins/PluginSidebarPane.tsx
type PluginSidebarItemViewProps (line 50) | interface PluginSidebarItemViewProps {
class PluginSidebarItemView (line 54) | class PluginSidebarItemView extends React.PureComponent<PluginSidebarIte...
method render (line 55) | public render(): JSX.Element {
class PluginsSidebarPane (line 72) | class PluginsSidebarPane implements SidebarPane {
method id (line 76) | public get id(): string {
method title (line 80) | public get title(): string {
method constructor (line 84) | constructor(private _pluginManager: PluginManager) {}
method enter (line 86) | public enter(): void {
method leave (line 90) | public leave(): void {
method render (line 94) | public render(): JSX.Element {
type IPluginsSidebarPaneViewProps (line 105) | interface IPluginsSidebarPaneViewProps {
type IPluginsSidebarPaneViewState (line 112) | interface IPluginsSidebarPaneViewState {
class PluginsSidebarPaneView (line 119) | class PluginsSidebarPaneView extends React.PureComponent<
method constructor (line 125) | constructor(props: IPluginsSidebarPaneViewProps) {
method componentDidMount (line 136) | public componentDidMount(): void {
method componentWillUnmount (line 145) | public componentWillUnmount(): void {
method render (line 149) | public render(): JSX.Element {
method _onSelect (line 232) | private _onSelect(id: string): void {
method _toggleDefaultPluginsExpanded (line 243) | private _toggleDefaultPluginsExpanded(): void {
method _toggleUserPluginsExpanded (line 249) | private _toggleUserPluginsExpanded(): void {
method _clearExistingSubscriptions (line 255) | private _clearExistingSubscriptions(): void {
FILE: browser/src/Renderer/CanvasRenderer.ts
type IRenderState (line 9) | interface IRenderState {
class CanvasRenderer (line 49) | class CanvasRenderer implements INeovimRenderer {
method start (line 63) | public start(element: HTMLDivElement): void {
method onAction (line 69) | public onAction(_action: any): void {
method redrawAll (line 73) | public redrawAll(screenInfo: MinimalScreenForRendering): void {
method draw (line 102) | public draw(screenInfo: MinimalScreenForRendering): void {
method _draw (line 123) | public _draw(screenInfo: MinimalScreenForRendering, modifiedCells: IPo...
method _renderSpan (line 189) | private _renderSpan(span: ISpan, y: number, screenInfo: MinimalScreenF...
method _getNextRenderState (line 222) | private _getNextRenderState(
method _isNewState (line 268) | private _isNewState(oldState: IRenderState, newState: IRenderState) {
method _renderText (line 272) | private _renderText(state: IRenderState, screenInfo: MinimalScreenForR...
method _setContext (line 349) | private _setContext(): void {
FILE: browser/src/Renderer/INeovimRenderer.ts
type IPosition (line 3) | interface IPosition {
type INeovimRenderer (line 8) | interface INeovimRenderer {
FILE: browser/src/Renderer/Span.ts
type ISpan (line 3) | interface ISpan {
type IPosition (line 8) | interface IPosition {
type RowMap (line 13) | interface RowMap {
function getSpansToEdit (line 17) | function getSpansToEdit(grid: Grid<ISpan>, cells: IPosition[]): RowMap {
function collapseSpanMap (line 44) | function collapseSpanMap(currentSpanMap: RowMap): RowMap {
function collapseSpans (line 53) | function collapseSpans(spans: ISpan[] | undefined): ISpan[] {
function flattenSpansToArray (line 62) | function flattenSpansToArray(spans: ISpan[]): any[] {
function expandArrayToSpans (line 94) | function expandArrayToSpans(array: any[]): ISpan[] {
FILE: browser/src/Renderer/WebGLRenderer/SolidRenderer.ts
class SolidRenderer (line 51) | class SolidRenderer {
method constructor (line 60) | constructor(private _gl: WebGL2RenderingContext, private _devicePixelR...
method draw (line 68) | public draw(
method _createBuffers (line 91) | private _createBuffers() {
method _createVertexArrayObject (line 97) | private _createVertexArrayObject() {
method _recreateSolidInstancesArrayIfRequired (line 150) | private _recreateSolidInstancesArrayIfRequired(cellCount: number) {
method _populateSolidInstances (line 157) | private _populateSolidInstances(
method _drawSolidInstances (line 201) | private _drawSolidInstances(
method _updateSolidInstance (line 215) | private _updateSolidInstance(
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/GlyphAtlas/GlyphAtlas.ts
type IGlyphAtlasOptions (line 6) | interface IGlyphAtlasOptions {
class WebGLTextureSpaceExceededError (line 19) | class WebGLTextureSpaceExceededError extends Error {}
class GlyphAtlas (line 21) | class GlyphAtlas {
method constructor (line 30) | constructor(private _gl: WebGL2RenderingContext, private _options: IGl...
method getRasterizedGlyph (line 79) | public getRasterizedGlyph(
method uploadTexture (line 94) | public uploadTexture() {
method _rasterizeGlyph (line 114) | private _rasterizeGlyph(
method _switchToNextLayer (line 172) | private _switchToNextLayer() {
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/GlyphAtlas/IRasterizedGlyph.ts
type IRasterizedGlyph (line 1) | interface IRasterizedGlyph {
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/ICellGroup.ts
type ICellGroup (line 1) | interface ICellGroup {
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/ILigatureGrouper.ts
type ILigatureGrouper (line 1) | interface ILigatureGrouper {
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/NoopLigatureGrouper.ts
class NoopLigatureGrouper (line 3) | class NoopLigatureGrouper implements ILigatureGrouper {
method getLigatureGroups (line 4) | public getLigatureGroups(characters: string[]) {
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/OpenTypeLigatureGrouper.ts
class OpenTypeLigatureGrouper (line 10) | class OpenTypeLigatureGrouper implements ILigatureGrouper {
method constructor (line 15) | constructor(private _fontFamily: string) {}
method getLigatureGroups (line 17) | public getLigatureGroups(characters: string[]) {
FILE: browser/src/Renderer/WebGLRenderer/TextRenderer/TextRenderer.ts
class TextRenderer (line 92) | class TextRenderer {
method constructor (line 110) | constructor(
method prefillAtlasWithCommonGlyphs (line 153) | public prefillAtlasWithCommonGlyphs() {
method draw (line 166) | public draw(
method _createBuffers (line 189) | private _createBuffers() {
method _createVertexArrayObject (line 195) | private _createVertexArrayObject() {
method _recreateGlyphInstancesArrayIfRequired (line 281) | private _recreateGlyphInstancesArrayIfRequired(cellCount: number) {
method _populateGlyphInstances (line 288) | private _populateGlyphInstances(
method _drawGlyphInstances (line 344) | private _drawGlyphInstances(
method _updateGlyphInstance (line 383) | private _updateGlyphInstance(
FILE: browser/src/Renderer/WebGLRenderer/WebGLRenderer.ts
class WebGLRenderer (line 13) | class WebGLRenderer implements INeovimRenderer {
method constructor (line 24) | public constructor(private _ligaturesEnabled: boolean) {}
method start (line 26) | public start(editorElement: HTMLElement): void {
method redrawAll (line 36) | public redrawAll(screenInfo: MinimalScreenForRendering): void {
method draw (line 57) | public draw(screenInfo: MinimalScreenForRendering): void {
method onAction (line 61) | public onAction(action: any): void {
method _updateCanvasDimensions (line 65) | private _updateCanvasDimensions() {
method _createNewRendererIfRequired (line 74) | private _createNewRendererIfRequired(screenInfo: MinimalScreenForRende...
method _clear (line 126) | private _clear(backgroundColor: string) {
method _draw (line 138) | private _draw({
function isShallowEqual (line 176) | function isShallowEqual<T>(objectA: T, objectB: T) {
FILE: browser/src/Services/AutoClosingPairs.ts
type IAutoClosingPair (line 18) | interface IAutoClosingPair {
FILE: browser/src/Services/AutoUpdate.ts
type IAutoUpdater (line 18) | interface IAutoUpdater {
class AutoUpdater (line 34) | class AutoUpdater implements IAutoUpdater {
method onUpdateNotAvailable (line 38) | public get onUpdateNotAvailable(): Observable<void> {
method onUpdateAvailable (line 41) | public get onUpdateAvailable(): Observable<void> {
method checkForUpdates (line 45) | public checkForUpdates(url: string): void {
FILE: browser/src/Services/Automation.ts
type ITestResult (line 21) | interface ITestResult {
class Automation (line 28) | class Automation implements OniApi.Automation.Api {
method sendKeys (line 29) | public sendKeys(keys: string): void {
method sendKeysV2 (line 39) | public sendKeysV2(keys: string): void {
method sleep (line 83) | public async sleep(time: number = 1000): Promise<void> {
method waitFor (line 88) | public async waitFor(condition: () => boolean, timeout: number = 10000...
method waitForEditors (line 113) | public async waitForEditors(): Promise<void> {
method runTest (line 119) | public async runTest(testPath: string): Promise<void> {
method _initializeBrowseWindow (line 145) | private _initializeBrowseWindow(): void {
method _reportWindowSize (line 153) | private _reportWindowSize(): void {
method _getOrCreateTestContainer (line 161) | private _getOrCreateTestContainer(className: string): HTMLDivElement {
method _reportResult (line 172) | private async _reportResult(passed: boolean, exception?: any): Promise...
method _createElement (line 208) | private _createElement(className: string, parentElement: HTMLElement):...
FILE: browser/src/Services/Bookmarks/BookmarksPane.tsx
class BookmarksPane (line 22) | class BookmarksPane implements SidebarPane {
method constructor (line 26) | constructor(private _bookmarksProvider: IBookmarksProvider) {}
method id (line 28) | public get id(): string {
method title (line 32) | public get title(): string {
method enter (line 36) | public enter(): void {
method leave (line 40) | public leave(): void {
method render (line 44) | public render(): JSX.Element {
type IBookmarksPaneViewProps (line 55) | interface IBookmarksPaneViewProps {
type IBookmarksPaneViewState (line 61) | interface IBookmarksPaneViewState {
class BookmarksPaneView (line 119) | class BookmarksPaneView extends React.PureComponent<
method constructor (line 125) | constructor(props: IBookmarksPaneViewProps) {
method componentDidMount (line 135) | public componentDidMount(): void {
method componentWillUnmount (line 150) | public componentWillUnmount(): void {
method render (line 154) | public render(): JSX.Element {
method _onSelected (line 224) | private _onSelected(id: string): void {
method _clearExistingSubscriptions (line 232) | private _clearExistingSubscriptions(): void {
FILE: browser/src/Services/Bookmarks/index.ts
type IBookmark (line 11) | interface IBookmark {
type IBookmarksProvider (line 19) | interface IBookmarksProvider {
class NeovimBookmarksProvider (line 33) | class NeovimBookmarksProvider implements IBookmarksProvider {
method bookmarks (line 37) | public get bookmarks(): IBookmark[] {
method onBookmarksUpdated (line 41) | public get onBookmarksUpdated(): IEvent<void> {
method constructor (line 45) | constructor(private _neovimMarks: INeovimMarks) {
method selectBookmark (line 53) | public selectBookmark(bookmark: IBookmark): void {
FILE: browser/src/Services/Browser/AddressBarView.tsx
type IAddressBarViewProps (line 39) | interface IAddressBarViewProps {
type IAddressBarViewState (line 45) | interface IAddressBarViewState {
class AddressBarView (line 49) | class AddressBarView extends React.PureComponent<
method constructor (line 53) | constructor(props: IAddressBarViewProps) {
method render (line 61) | public render(): JSX.Element {
method _renderTextInput (line 67) | private _renderTextInput(): JSX.Element {
method _renderAddressSpan (line 81) | private _renderAddressSpan(): JSX.Element {
method _setActive (line 89) | private _setActive(): void {
method _onCancel (line 95) | private _onCancel(): void {
method _onComplete (line 101) | private _onComplete(val: string): void {
FILE: browser/src/Services/Browser/BrowserButtonView.tsx
type IBrowserButtonViewProps (line 30) | interface IBrowserButtonViewProps {
FILE: browser/src/Services/Browser/BrowserView.tsx
type IBrowserViewProps (line 59) | interface IBrowserViewProps {
type IBrowserViewState (line 77) | interface IBrowserViewState {
type SneakInfoFromBrowser (line 81) | interface SneakInfoFromBrowser {
class BrowserView (line 86) | class BrowserView extends React.PureComponent<IBrowserViewProps, IBrowse...
method constructor (line 91) | constructor(props: IBrowserViewProps) {
method componentDidMount (line 99) | public componentDidMount(): void {
method _triggerSneak (line 166) | public _triggerSneak(id: string): void {
method componentWillUnmount (line 175) | public componentWillUnmount(): void {
method render (line 181) | public render(): JSX.Element {
FILE: browser/src/Services/Browser/index.tsx
class BrowserLayer (line 26) | class BrowserLayer implements Oni.BufferLayer {
method constructor (line 39) | constructor(private _url: string, private _configuration: Configuratio...
method id (line 41) | public get id(): string {
method webviewElement (line 45) | public get webviewElement(): HTMLElement {
method activeTagName (line 49) | public get activeTagName(): string {
method render (line 53) | public render(): JSX.Element {
method openDebugger (line 72) | public openDebugger(): void {
method goBack (line 76) | public goBack(): void {
method goForward (line 80) | public goForward(): void {
method reload (line 84) | public reload(): void {
method scrollUp (line 88) | public scrollUp(): void {
method scrollDown (line 92) | public scrollDown(): void {
method scrollLeft (line 96) | public scrollLeft(): void {
method scrollRight (line 100) | public scrollRight(): void {
FILE: browser/src/Services/Colors.ts
type ColorsDictionary (line 17) | interface ColorsDictionary {
type IColors (line 31) | interface IColors extends OniApi.IColors {
class Colors (line 36) | class Colors implements OniApi.IColors, IDisposable {
method onColorsChanged (line 41) | public get onColorsChanged(): IEvent<void> {
method constructor (line 45) | constructor(private _configuration: Configuration, private _themeManag...
method getColors (line 66) | public getColors(): ColorsDictionary {
method getColor (line 70) | public getColor(colorName: string): string | null {
method dispose (line 74) | public dispose(): void {
method _updateColorsFromConfig (line 81) | private _updateColorsFromConfig(): void {
method _getConfigurationNameForColor (line 106) | private _getConfigurationNameForColor(colorName: string): string {
FILE: browser/src/Services/CommandManager.ts
class CallbackCommand (line 15) | class CallbackCommand implements Oni.Commands.ICommand {
method constructor (line 19) | constructor(
class VimCommand (line 28) | class VimCommand implements Oni.Commands.ICommand {
method constructor (line 29) | constructor(
method execute (line 37) | public execute(): void {
class CommandManager (line 42) | class CommandManager implements ITaskProvider {
method clearCommands (line 45) | public clearCommands(): void {
method hasCommand (line 58) | public hasCommand(commandName: string): boolean {
method unregisterCommand (line 62) | public unregisterCommand(commandName: string): void {
method executeCommand (line 66) | public executeCommand(name: string, args?: any): boolean | void {
method getTasks (line 90) | public getTasks(): Promise<ITask[]> {
FILE: browser/src/Services/Completion/Completion.ts
type ICompletionShowEventArgs (line 23) | interface ICompletionShowEventArgs {
class Completion (line 28) | class Completion implements IDisposable {
method onShowCompletionItems (line 39) | public get onShowCompletionItems(): IEvent<ICompletionShowEventArgs> {
method onHideCompletionItems (line 43) | public get onHideCompletionItems(): IEvent<void> {
method constructor (line 47) | constructor(
method resolveItem (line 89) | public resolveItem(completionItem: types.CompletionItem): void {
method commitItem (line 96) | public commitItem(completionItem: types.CompletionItem): void {
method dispose (line 106) | public dispose(): void {
method _onStateChanged (line 118) | private _onStateChanged(newState: ICompletionState): void {
method _onCursorMoved (line 131) | private _onCursorMoved(cursor: Oni.Cursor): void {
method _onBufferEnter (line 135) | private _onBufferEnter(buffer: Oni.Buffer): void {
method _onBufferUpdate (line 144) | private _onBufferUpdate(bufferUpdate: Oni.EditorBufferChangedEventArgs...
method _onModeChanged (line 174) | private async _onModeChanged(newMode: string): Promise<void> {
FILE: browser/src/Services/Completion/CompletionProviders.ts
type ICompletionProviderInfo (line 15) | interface ICompletionProviderInfo {
type ICompletionInfoWithProvider (line 20) | interface ICompletionInfoWithProvider extends types.CompletionItem {
class CompletionProviders (line 24) | class CompletionProviders implements ICompletionsRequestor {
method registerCompletionProvider (line 27) | public registerCompletionProvider(id: string, provider: ICompletionsRe...
method getCompletions (line 34) | public async getCompletions(
method getCompletionDetails (line 63) | public async getCompletionDetails(
method _getProviderById (line 79) | private _getProviderById(id: string): ICompletionsRequestor {
FILE: browser/src/Services/Completion/CompletionState.ts
type ICompletionState (line 7) | interface ICompletionState {
type ICompletionMeetInfo (line 16) | interface ICompletionMeetInfo {
type ICompletionBufferInfo (line 34) | interface ICompletionBufferInfo {
type ILastCompletionInfo (line 46) | interface ILastCompletionInfo {
type ICompletionResults (line 58) | interface ICompletionResults {
type ICursorInfo (line 70) | interface ICursorInfo {
FILE: browser/src/Services/Completion/CompletionStore.ts
type CompletionAction (line 40) | type CompletionAction =
FILE: browser/src/Services/Completion/CompletionUtility.ts
function getCompletionStart (line 45) | function getCompletionStart(
function replacePrefixWithCompletion (line 70) | function replacePrefixWithCompletion(
type CompletionMeetResult (line 84) | interface CompletionMeetResult {
function getCompletionMeet (line 108) | function getCompletionMeet(
FILE: browser/src/Services/Completion/CompletionsRequestor.ts
type CompletionsRequestContext (line 15) | interface CompletionsRequestContext {
type ICompletionsRequestor (line 24) | interface ICompletionsRequestor {
class LanguageServiceCompletionsRequestor (line 33) | class LanguageServiceCompletionsRequestor implements ICompletionsRequest...
method constructor (line 34) | constructor(private _languageManager: LanguageManager) {}
method getCompletions (line 36) | public async getCompletions(
method getCompletionDetails (line 85) | public async getCompletionDetails(
FILE: browser/src/Services/Configuration/Configuration.ts
type IConfigurationProvider (line 21) | interface IConfigurationProvider {
type GenericConfigurationValues (line 32) | interface GenericConfigurationValues {
type ConfigurationProviderInfo (line 36) | interface ConfigurationProviderInfo {
type IConfigurationSettingValueChangedEvent (line 40) | interface IConfigurationSettingValueChangedEvent<T> {
type IConfigurationSetting (line 45) | interface IConfigurationSetting<T> extends IDisposable {
type ConfigurationSettingMergeStrategy (line 50) | type ConfigurationSettingMergeStrategy<T> = (
type IConfigurationSettingMetadata (line 55) | interface IConfigurationSettingMetadata<T> {
type IPersistedConfiguration (line 86) | interface IPersistedConfiguration {
type IConfigurationUpdateEvent (line 91) | interface IConfigurationUpdateEvent {
class Configuration (line 95) | class Configuration implements Oni.Configuration {
method editor (line 117) | public get editor(): IConfigurationEditor {
method onConfigurationError (line 122) | public get onConfigurationError(): IEvent<Error> {
method onConfigurationChanged (line 126) | public get onConfigurationChanged(): IEvent<Partial<IConfigurationValu...
method onConfigurationUpdated (line 130) | public get onConfigurationUpdated(): IEvent<IConfigurationUpdateEvent> {
method constructor (line 134) | constructor(
method start (line 141) | public start(): void {
method registerSetting (line 149) | public registerSetting<T>(
method registerEditor (line 181) | public registerEditor(id: string, editor: IConfigurationEditor): void {
method addConfigurationFile (line 185) | public addConfigurationFile(filePath: string): void {
method removeConfigurationFile (line 192) | public removeConfigurationFile(filePath: string): void {
method getErrors (line 202) | public getErrors(): Error[] {
method addConfigurationProvider (line 206) | public addConfigurationProvider(configurationProvider: IConfigurationP...
method removeConfigurationProvider (line 225) | public removeConfigurationProvider(configurationProvider: IConfigurati...
method hasValue (line 238) | public hasValue(configValue: keyof IConfigurationValues): boolean {
method setValue (line 242) | public setValue(valueName: string, value: any, persist: boolean = fals...
method setValues (line 246) | public setValues(configValues: { [configValue: string]: any }, persist...
method getValue (line 267) | public getValue<K extends keyof IConfigurationValues>(configValue: K, ...
method getValues (line 273) | public getValues(): GenericConfigurationValues {
method activate (line 277) | public activate(oni: Oni.Plugin.Api): void {
method getMetadata (line 283) | public getMetadata<T>(settingName: string): IConfigurationSettingMetad...
method _updateConfig (line 287) | private _updateConfig(): void {
method _activateIfOniObjectIsAvailable (line 311) | private _activateIfOniObjectIsAvailable(): void {
method _deactivate (line 320) | private _deactivate(): void {
method _notifyListeners (line 329) | private _notifyListeners(previousConfig?: Partial<IConfigurationValues...
method _notifySubscribers (line 356) | private _notifySubscribers(oldValues: any, newValues: any, changedKeys...
FILE: browser/src/Services/Configuration/ConfigurationEditor.ts
type IConfigurationEditor (line 36) | interface IConfigurationEditor {
class JavaScriptConfigurationEditor (line 47) | class JavaScriptConfigurationEditor {
method editConfiguration (line 48) | public async editConfiguration(configurationFilePath: string): Promise...
method transpileConfigurationToJavaScript (line 61) | public async transpileConfigurationToJavaScript(contents: string): Pro...
type IConfigurationEditInfo (line 66) | interface IConfigurationEditInfo {
class ConfigurationEditManager (line 71) | class ConfigurationEditManager {
method constructor (line 74) | constructor(private _configuration: Configuration, private _editorMana...
method editConfiguration (line 91) | public async editConfiguration(configFile: string): Promise<void> {
method _createReadonlyReferenceBuffer (line 129) | private async _createReadonlyReferenceBuffer() {
method _transpileConfiguration (line 145) | private async _transpileConfiguration(
FILE: browser/src/Services/Configuration/DeprecatedConfigurationValues.ts
type IDeprecatedConfigurationInfo (line 11) | interface IDeprecatedConfigurationInfo {
FILE: browser/src/Services/Configuration/FileConfigurationProvider.ts
constant CONFIG_UPDATE_DEBOUNCE_TIME (line 24) | const CONFIG_UPDATE_DEBOUNCE_TIME = 100 /*ms */
class FileConfigurationProvider (line 26) | class FileConfigurationProvider implements IConfigurationProvider {
method onConfigurationChanged (line 38) | public get onConfigurationChanged(): IEvent<void> {
method onConfigurationError (line 42) | public get onConfigurationError(): IEvent<Error> {
method constructor (line 46) | constructor(filePath: string) {
method getValues (line 86) | public getValues(): Partial<IConfigurationValues> {
method getLastError (line 90) | public getLastError(): Error | null {
method activate (line 94) | public activate(api: Oni.Plugin.Api): void {
method deactivate (line 109) | public deactivate(): void {
method _notifyConfigurationChanged (line 115) | private _notifyConfigurationChanged(): void {
method _notifyConfigurationError (line 119) | private _notifyConfigurationError(err: Error): void {
method _getLatestConfig (line 123) | private _getLatestConfig(): void {
FILE: browser/src/Services/Configuration/IConfigurationValues.ts
type FontSmoothingOptions (line 13) | type FontSmoothingOptions = "auto" | "antialiased" | "subpixel-antialias...
type DetectionSettings (line 14) | type DetectionSettings = "always" | "noworkspace" | "never"
type IConfigurationValues (line 16) | interface IConfigurationValues {
FILE: browser/src/Services/Configuration/PersistentSettings.ts
class PersistedConfiguration (line 25) | class PersistedConfiguration implements IPersistedConfiguration {
method getPersistedValues (line 26) | public getPersistedValues(): GenericConfigurationValues {
method setPersistedValues (line 30) | public setPersistedValues(configurationValues: GenericConfigurationVal...
FILE: browser/src/Services/ContextMenu/ContextMenu.tsx
type ContextMenuState (line 32) | type ContextMenuState = State.IMenus<types.CompletionItem, types.Complet...
class ContextMenuManager (line 34) | class ContextMenuManager {
method constructor (line 40) | constructor(private _toolTips: IToolTipsProvider) {
method create (line 45) | public create(): ContextMenu {
method isMenuOpen (line 50) | public isMenuOpen(): boolean {
method nextMenuItem (line 54) | public nextMenuItem(): void {
method previousMenuItem (line 58) | public previousMenuItem(): void {
method closeActiveMenu (line 62) | public closeActiveMenu(): void {
method selectMenuItem (line 66) | public selectMenuItem(idx?: number): void {
class ContextMenu (line 75) | class ContextMenu {
method onHide (line 83) | public get onHide(): IEvent<void> {
method onItemSelected (line 87) | public get onItemSelected(): IEvent<any> {
method onSelectedItemChanged (line 91) | public get onSelectedItemChanged(): IEvent<any> {
method onFilterTextChanged (line 95) | public get onFilterTextChanged(): IEvent<string> {
method selectedItem (line 99) | public get selectedItem() {
method constructor (line 103) | constructor(
method isOpen (line 110) | public isOpen(): boolean {
method setFilter (line 115) | public setFilter(filter: string): void {
method setLoading (line 123) | public setLoading(isLoading: boolean): void {
method setItems (line 127) | public setItems(items: Oni.Menu.MenuOption[]): void {
method show (line 137) | public show(items?: any[], filter?: string): void {
method hide (line 163) | public hide(): void {
method _onItemSelectedHandler (line 167) | private _onItemSelectedHandler(idx?: number): void {
method _getSelectedItem (line 174) | private _getSelectedItem(idx?: number) {
method _onHidden (line 186) | private _onHidden(): void {
method _getContextMenuId (line 191) | private _getContextMenuId(): string {
FILE: browser/src/Services/ContextMenu/ContextMenuComponent.tsx
type IContextMenuItem (line 23) | interface IContextMenuItem {
type IContextMenuProps (line 39) | interface IContextMenuProps {
type ISelectedProps (line 106) | interface ISelectedProps {
type IContextMenuItemProps (line 151) | interface IContextMenuItemProps extends Oni.Menu.MenuOption, ISelectedPr...
type IContextMenuDocumentationProps (line 172) | interface IContextMenuDocumentationProps {
type IState (line 180) | type IState = IMenus<types.CompletionItem, types.CompletionItem>
FILE: browser/src/Services/Diagnostics/index.ts
type IPublishDiagnosticsParams (line 18) | interface IPublishDiagnosticsParams {
type Errors (line 23) | interface Errors {
type IDiagnosticsDataSource (line 27) | interface IDiagnosticsDataSource {
class DiagnosticsDataSource (line 66) | class DiagnosticsDataSource {
method onErrorsChanged (line 70) | public get onErrorsChanged(): IEvent<void> {
method setErrors (line 74) | public setErrors(filePath: string, key: string, errors: types.Diagnost...
method getErrors (line 89) | public getErrors(): Errors {
method getErrorsForPosition (line 93) | public getErrorsForPosition(
method start (line 105) | public start(languageManager: LanguageManager): void {
FILE: browser/src/Services/DragAndDrop.tsx
type Render (line 4) | type Render<T> = (props: T) => React.ReactElement<T>
type OnDrop (line 5) | type OnDrop = (item: any) => object | void
type IsValidDrop (line 6) | type IsValidDrop = (item: any) => boolean
type IDroppeable (line 9) | interface IDroppeable {
type DroppedProps (line 24) | interface DroppedProps {
method drop (line 30) | drop(dropped: DroppedProps, monitor: DND.DropTargetMonitor) {
method canDrop (line 33) | canDrop(props: DroppedProps, monitor: DND.DropTargetMonitor) {
class Droppeable (line 49) | class Droppeable<P extends IDroppeable> extends React.Component<P> {
method render (line 50) | public render() {
type IDraggeable (line 57) | interface IDraggeable {
method beginDrag (line 65) | beginDrag(props: object) {
class Draggeable (line 88) | class Draggeable<P extends IDraggeable> extends React.Component<P> {
method render (line 89) | public render() {
type IDragDrop (line 95) | interface IDragDrop {
class DragAndDrop (line 114) | class DragAndDrop<P extends IDragDrop> extends React.Component<P> {
method render (line 115) | public render() {
FILE: browser/src/Services/EditorManager.ts
class EditorManager (line 18) | class EditorManager implements Oni.EditorManager {
method allEditors (line 26) | public get allEditors(): Oni.Editor[] {
method anyEditor (line 33) | public get anyEditor(): Oni.Editor {
method activeEditor (line 37) | public get activeEditor(): Oni.Editor {
method onActiveEditorChanged (line 41) | public get onActiveEditorChanged(): IEvent<Oni.Editor> {
method openFile (line 45) | public openFile(
method setCloseWhenNoEditors (line 52) | public setCloseWhenNoEditors(closeWhenNoEditors: boolean) {
method registerEditor (line 56) | public registerEditor(editor: Oni.Editor) {
method unregisterEditor (line 62) | public unregisterEditor(editor: Oni.Editor): void {
method setActiveEditor (line 78) | public setActiveEditor(editor: Oni.Editor) {
class AnyEditorProxy (line 96) | class AnyEditorProxy implements Oni.Editor {
method mode (line 111) | public get mode(): string {
method activeBuffer (line 119) | public get activeBuffer(): Oni.Buffer {
method init (line 128) | public init(filesToOpen: string[]): void {
method neovim (line 136) | public get neovim(): Oni.NeovimEditorCapability {
method onModeChanged (line 144) | public get onModeChanged(): IEvent<Oni.Vim.Mode> {
method onBufferChanged (line 148) | public get onBufferChanged(): IEvent<Oni.EditorBufferChangedEventArgs> {
method onBufferEnter (line 152) | public get onBufferEnter(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferLeave (line 156) | public get onBufferLeave(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferSaved (line 160) | public get onBufferSaved(): IEvent<Oni.EditorBufferEventArgs> {
method onBufferScrolled (line 164) | public get onBufferScrolled(): IEvent<Oni.EditorBufferScrolledEventArg...
method onCursorMoved (line 168) | public get onCursorMoved(): IEvent<Oni.Cursor> {
method dispose (line 172) | public dispose(): void {
method blockInput (line 176) | public async blockInput(
method openFile (line 182) | public async openFile(filePath: string, openOptions: Oni.FileOpenOptio...
method getBuffers (line 186) | public getBuffers(): Array<Oni.Buffer | Oni.InactiveBuffer> {
method setTextOptions (line 190) | public setTextOptions(options: Oni.EditorTextOptions): Promise<void> {
method render (line 194) | public render(): JSX.Element {
method setSelection (line 202) | public setSelection(selectionRange: types.Range): Promise<void> {
method setActiveEditor (line 214) | public setActiveEditor(newEditor: Oni.Editor) {
method getUnderlyingEditor (line 234) | public getUnderlyingEditor(): Oni.Editor {
FILE: browser/src/Services/Explorer/ExplorerFileSystem.ts
type IFileSystem (line 18) | interface IFileSystem {
class FileSystem (line 32) | class FileSystem implements IFileSystem {
method backupDir (line 42) | public get backupDir(): string {
method constructor (line 46) | constructor(nfs: typeof fs) {
method readdir (line 61) | public async readdir(directoryPath: string): Promise<FolderOrFile[]> {
method exists (line 86) | public exists(fullPath: string): Promise<boolean> {
method realpath (line 93) | public realpath(fullPath: string): Promise<string> {
method deleteNode (line 104) | public async deleteNode(fullPath: string): Promise<void> {
method writeFile (line 172) | public async writeFile(filepath: string) {
method mkdir (line 179) | public async mkdir(folderpath: string) {
FILE: browser/src/Services/Explorer/ExplorerSelectors.ts
type IContainerNode (line 13) | interface IContainerNode {
type IFolderNode (line 20) | interface IFolderNode {
type IFileNode (line 29) | interface IFileNode {
type ExplorerNode (line 47) | type ExplorerNode = IContainerNode | IFolderNode | IFileNode
FILE: browser/src/Services/Explorer/ExplorerSplit.tsx
type Node (line 24) | type Node = ExplorerSelectors.ExplorerNode
class ExplorerSplit (line 26) | class ExplorerSplit {
method id (line 32) | public get id(): string {
method title (line 36) | public get title(): string {
method constructor (line 40) | constructor(private _oni: Oni.Plugin.Api) {
method enter (line 65) | public enter(): void {
method leave (line 71) | public leave(): void {
method render (line 79) | public render(): JSX.Element {
method _initializeFileSystemWatcher (line 99) | private _initializeFileSystemWatcher(): void {
method _refresh (line 118) | private _refresh(): void {
method _initialiseExplorerCommands (line 122) | private _initialiseExplorerCommands(): void {
method _onSelectionChanged (line 221) | private _onSelectionChanged(id: string): void {
method _onOpenItem (line 233) | private _onOpenItem(id?: string): void {
method _getSelectedItem (line 262) | private _getSelectedItem(id: string = this._selectedId): ExplorerSelec...
method _getSelectedItemParent (line 276) | private _getSelectedItemParent(filePath: string): ExplorerSelectors.Ex...
method _toggleDirectory (line 334) | private _toggleDirectory(action: "expand" | "collapse"): void {
method _onUndoItem (line 344) | private _onUndoItem(): void {
method _onYankItem (line 353) | private _onYankItem(): void {
method _onPasteItem (line 371) | private _onPasteItem(): void {
method _onDeleteItem (line 394) | private _onDeleteItem({ persist }: { persist: boolean }): void {
FILE: browser/src/Services/Explorer/ExplorerStore.ts
type IFolderState (line 30) | interface IFolderState {
type IFileState (line 56) | interface IFileState {
type IRecentFile (line 61) | interface IRecentFile {
type FolderOrFile (line 66) | type FolderOrFile = IFolderState | IFileState
type ExpandedFolders (line 68) | interface ExpandedFolders {
type OpenedFiles (line 72) | interface OpenedFiles {
type RegisterAction (line 76) | type RegisterAction =
type IRegisterState (line 89) | interface IRegisterState {
type IExplorerState (line 105) | interface IExplorerState {
type IUndoAction (line 123) | interface IUndoAction {
type IUndoSuccessAction (line 127) | interface IUndoSuccessAction {
type IUndoFailAction (line 131) | interface IUndoFailAction {
type IYankAction (line 136) | interface IYankAction {
type IPasteAction (line 142) | interface IPasteAction {
type IDeleteAction (line 149) | interface IDeleteAction {
type IDeleteSuccessAction (line 155) | interface IDeleteSuccessAction {
type IDeleteFailAction (line 161) | interface IDeleteFailAction {
type IClearRegisterAction (line 166) | interface IClearRegisterAction {
type IExpandDirectoryAction (line 171) | interface IExpandDirectoryAction {
type IRefreshAction (line 176) | interface IRefreshAction {
type ISetRootDirectoryAction (line 180) | interface ISetRootDirectoryAction {
type ICollapseDirectory (line 185) | interface ICollapseDirectory {
type IExpandDirectoryResult (line 190) | interface IExpandDirectoryResult {
type ISelectFileAction (line 196) | interface ISelectFileAction {
type ISelectFilePendingAction (line 201) | interface ISelectFilePendingAction {
type ISelectFileSuccessAction (line 206) | interface ISelectFileSuccessAction {
type ISelectFileFailAction (line 210) | interface ISelectFileFailAction {
type IEnterAction (line 215) | interface IEnterAction {
type ILeaveAction (line 219) | interface ILeaveAction {
type IPasteFailAction (line 223) | interface IPasteFailAction {
type IClearUpdateAction (line 228) | interface IClearUpdateAction {
type ICreateNodeStartAction (line 232) | interface ICreateNodeStartAction {
type ICreateNodeCancelAction (line 237) | interface ICreateNodeCancelAction {
type ICreateNodeCommitAction (line 241) | interface ICreateNodeCommitAction {
type ICreateNodeFailAction (line 246) | interface ICreateNodeFailAction {
type ICreateNodeSuccessAction (line 251) | interface ICreateNodeSuccessAction {
type IPasteSuccessAction (line 257) | interface IPasteSuccessAction {
type IRenameStartAction (line 262) | interface IRenameStartAction {
type IRenameSuccessAction (line 268) | interface IRenameSuccessAction {
type IRenameFailAction (line 275) | interface IRenameFailAction {
type ICancelRenameAction (line 280) | interface ICancelRenameAction {
type IRenameCommitAction (line 284) | interface IRenameCommitAction {
type INotificationSentAction (line 290) | interface INotificationSentAction {
type IMovedNodes (line 295) | interface IMovedNodes {
type ExplorerAction (line 300) | type ExplorerAction =
type Updates (line 353) | type Updates =
type INotificationDetails (line 697) | interface INotificationDetails {
type MoveNotificationArgs (line 714) | interface MoveNotificationArgs {
type SendNotificationArgs (line 728) | interface SendNotificationArgs {
type RenameNotificationArgs (line 742) | interface RenameNotificationArgs {
type CreationNotificationArgs (line 763) | interface CreationNotificationArgs {
type ErrorNotificationArgs (line 778) | interface ErrorNotificationArgs {
type Dependencies (line 794) | interface Dependencies {
type ExplorerEpic (line 800) | type ExplorerEpic = Epic<ExplorerAction, IExplorerState, Dependencies>
type ICreateStore (line 1083) | interface ICreateStore {
FILE: browser/src/Services/Explorer/ExplorerView.tsx
type Node (line 29) | type Node = ExplorerSelectors.ExplorerNode
type INodeViewProps (line 31) | interface INodeViewProps {
type IMoveNode (line 61) | interface IMoveNode {
type ITransitionProps (line 91) | interface ITransitionProps {
class NodeView (line 118) | class NodeView extends React.PureComponent<INodeViewProps> {
method render (line 127) | public render() {
method getElement (line 158) | public getElement() {
type IExplorerViewContainerProps (line 249) | interface IExplorerViewContainerProps {
type IExplorerViewProps (line 262) | interface IExplorerViewProps extends IExplorerViewContainerProps {
type ISneakableNode (line 269) | interface ISneakableNode extends IExplorerViewProps {
class ExplorerView (line 298) | class ExplorerView extends React.PureComponent<IExplorerViewProps> {
method propsChanged (line 314) | public propsChanged(keys: Array<keyof IExplorerViewProps>, prevProps: ...
method componentDidUpdate (line 318) | public componentDidUpdate(prevProps: IExplorerViewProps) {
method render (line 327) | public render() {
FILE: browser/src/Services/FileIcon.tsx
type IFileIconProps (line 36) | interface IFileIconProps {
FILE: browser/src/Services/FileMappings.ts
type IFileMapping (line 9) | interface IFileMapping {
type IFileMappingResult (line 19) | interface IFileMappingResult {
FILE: browser/src/Services/FileSystemWatcher/index.ts
type Targets (line 7) | type Targets = string | string[]
type IFSOptions (line 9) | interface IFSOptions {
type IFileChangeEvent (line 14) | interface IFileChangeEvent {
type IStatsChangeEvent (line 18) | interface IStatsChangeEvent {
class FileSystemWatcher (line 23) | class FileSystemWatcher {
method constructor (line 33) | constructor({ target, options }: IFSOptions) {
method watch (line 45) | public watch(target: Targets) {
method unwatch (line 49) | public unwatch(target: Targets) {
method close (line 53) | public close() {
method _attachEventListeners (line 57) | private _attachEventListeners() {
method allWatched (line 83) | get allWatched(): chokidar.WatchedPaths {
method onChange (line 87) | get onChange(): IEvent<IFileChangeEvent> {
method onDelete (line 91) | get onDelete(): IEvent<IFileChangeEvent> {
method onDeleteDir (line 95) | get onDeleteDir(): IEvent<IFileChangeEvent> {
method onMove (line 99) | get onMove(): IEvent<IFileChangeEvent> {
method onAdd (line 103) | get onAdd(): IEvent<IFileChangeEvent> {
method onAddDir (line 107) | get onAddDir(): IEvent<IFileChangeEvent> {
FILE: browser/src/Services/FocusManager.ts
class FocusManager (line 7) | class FocusManager {
method focusedElement (line 10) | public get focusedElement(): HTMLElement | null {
method pushFocus (line 14) | public pushFocus(element: HTMLElement) {
method popFocus (line 20) | public popFocus(element: HTMLElement) {
method setFocus (line 26) | public setFocus(element: HTMLElement): void {
method enforceFocus (line 35) | public enforceFocus(): void {
FILE: browser/src/Services/IconThemes/IconThemeLoader.ts
type IIconThemeLoadResult (line 17) | interface IIconThemeLoadResult {
type IIconThemeLoader (line 22) | interface IIconThemeLoader {
class PluginIconThemeLoader (line 26) | class PluginIconThemeLoader {
method constructor (line 27) | constructor(private _pluginManager: PluginManager) {}
method loadIconTheme (line 29) | public async loadIconTheme(themeName: string): Promise<IIconThemeLoadR...
FILE: browser/src/Services/IconThemes/Icons.ts
type IIconFontSource (line 19) | interface IIconFontSource {
type IIconFont (line 24) | interface IIconFont {
type IIconDefinition (line 32) | interface IIconDefinition {
type IIconInfo (line 37) | interface IIconInfo extends IIconDefinition {
type IconDefinitions (line 44) | interface IconDefinitions {
type FileDefinitions (line 49) | interface FileDefinitions {
type FileNames (line 54) | interface FileNames {
type Language (line 59) | interface Language {
type IIconTheme (line 63) | interface IIconTheme {
class Icons (line 73) | class Icons {
method activeIconTheme (line 77) | public get activeIconTheme(): IIconTheme {
method onIconThemeChanged (line 81) | public get onIconThemeChanged(): IEvent<void> {
method constructor (line 85) | constructor(private _pluginManager: PluginManager) {}
method getIconClassForFile (line 87) | public getIconClassForFile(fileName: string, language?: string): string {
method applyIconTheme (line 135) | public async applyIconTheme(themeName: string): Promise<void> {
FILE: browser/src/Services/IconThemes/StyleWriter.ts
class StyleWriter (line 9) | class StyleWriter {
method style (line 12) | public get style(): string {
method constructor (line 16) | constructor(private _primaryClassName: string) {}
method writeFontFace (line 18) | public writeFontFace(fontFamily: string, sourceUrl: string, format: st...
method writeIcon (line 39) | public writeIcon(iconName: string, fontColor: string, fontCharacter: s...
method _append (line 52) | private _append(str: string[]): void {
FILE: browser/src/Services/InputManager.ts
type ActionFunction (line 5) | type ActionFunction = () => boolean
type ActionOrCommand (line 7) | type ActionOrCommand = string | ActionFunction
type FilterFunction (line 9) | type FilterFunction = () => boolean
type KeyBinding (line 11) | interface KeyBinding {
type KeyBindingMap (line 16) | interface KeyBindingMap {
constant MAX_DELAY_BETWEEN_KEY_CHORD (line 20) | const MAX_DELAY_BETWEEN_KEY_CHORD = 250 /* milliseconds */
constant MAX_CHORD_SIZE (line 21) | const MAX_CHORD_SIZE = 6
type KeyPressInfo (line 31) | interface KeyPressInfo {
class InputManager (line 61) | class InputManager implements Oni.Input.InputManager {
method constructor (line 66) | constructor() {
method bind (line 77) | public bind(
method unbind (line 102) | public unbind(keyChord: string | string[]) {
method unbindAll (line 112) | public unbindAll() {
method hasBinding (line 119) | public hasBinding(keyChord: string): boolean {
method resolvers (line 123) | public get resolvers(): KeyboardResolver {
method handleKey (line 149) | public handleKey(keyChord: string, time: number = new Date().getTime()...
method _handleKeyCore (line 178) | private _handleKeyCore(keyChord: string): boolean {
FILE: browser/src/Services/KeyDisplayer/KeyDisplayer.tsx
class KeyDisplayer (line 22) | class KeyDisplayer {
method constructor (line 27) | constructor(
method isActive (line 36) | public get isActive(): boolean {
method start (line 40) | public start(): void {
method end (line 73) | public end(): void {
FILE: browser/src/Services/KeyDisplayer/KeyDisplayerStore.ts
type IKeyPressInfo (line 13) | interface IKeyPressInfo {
type KeyDisplayerState (line 34) | interface KeyDisplayerState {
type KeyDisplayerAction (line 44) | type KeyDisplayerAction =
FILE: browser/src/Services/KeyDisplayer/KeyDisplayerView.tsx
type IKeyDisplayerViewProps (line 28) | interface IKeyDisplayerViewProps {
class KeyDisplayerView (line 32) | class KeyDisplayerView extends React.PureComponent<IKeyDisplayerViewProp...
method render (line 33) | public render(): JSX.Element {
FILE: browser/src/Services/KeyDisplayer/index.tsx
type IKeyPressInfo (line 13) | interface IKeyPressInfo {
FILE: browser/src/Services/Language/DefinitionRequestor.ts
type IDefinitionResult (line 16) | interface IDefinitionResult {
type IDefinitionRequestor (line 21) | interface IDefinitionRequestor {
class LanguageServiceDefinitionRequestor (line 30) | class LanguageServiceDefinitionRequestor {
method constructor (line 31) | constructor(private _languageManager: LanguageManager, private _editor...
method getDefinition (line 33) | public async getDefinition(
FILE: browser/src/Services/Language/HoverRequestor.ts
type IHoverResult (line 17) | interface IHoverResult {
type IHoverRequestor (line 22) | interface IHoverRequestor {
class LanguageServiceHoverRequestor (line 31) | class LanguageServiceHoverRequestor {
method constructor (line 32) | constructor(private _languageManager: LanguageManager) {}
method getHover (line 34) | public async getHover(
FILE: browser/src/Services/Language/LanguageClient.ts
type ILanguageClient (line 12) | interface ILanguageClient {
class LanguageClient (line 29) | class LanguageClient implements ILanguageClient {
method serverCapabilities (line 36) | public get serverCapabilities(): IServerCapabilities {
method constructor (line 40) | constructor(private _language: string, private _languageClientProcess:...
method subscribe (line 65) | public subscribe(notificationName: string, evt: Event<any>) {
method handleRequest (line 78) | public handleRequest(requestName: string, handler: (payload: any) => P...
method sendRequest (line 90) | public sendRequest<T>(
method sendNotification (line 110) | public sendNotification(
FILE: browser/src/Services/Language/LanguageClientProcess.ts
type ILanguageClientProcess (line 30) | interface ILanguageClientProcess {
type PathResolver (line 37) | type PathResolver = (filePath: string) => Promise<string>
type ServerRunOptions (line 39) | interface ServerRunOptions {
type InitializationOptions (line 58) | interface InitializationOptions {
class LanguageClientProcess (line 62) | class LanguageClientProcess {
method onConnectionChanged (line 73) | public get onConnectionChanged(): IEvent<rpc.MessageConnection> {
method serverCapabilities (line 77) | public get serverCapabilities(): IServerCapabilities {
method constructor (line 81) | constructor(
method ensureActive (line 87) | public async ensureActive(fileName: string): Promise<rpc.MessageConnec...
method _start (line 106) | private async _start(workingDirectory: string, rootPath: string): Prom...
method _end (line 234) | private _end(): void {
FILE: browser/src/Services/Language/LanguageClientStatusBar.tsx
class LanguageClientStatusBar (line 14) | class LanguageClientStatusBar {
method constructor (line 18) | constructor(private _oni: Oni.Plugin.Api) {
method show (line 22) | public show(fileType: string): void {
method setStatus (line 33) | public setStatus(status: LanguageClientState): void {
method hide (line 37) | public hide(): void {
type LanguageClientState (line 42) | enum LanguageClientState {
type StatusBarRendererProps (line 54) | interface StatusBarRendererProps {
FILE: browser/src/Services/Language/LanguageClientTypes.ts
type NotificationFunction (line 5) | type NotificationFunction = (capabilities: IServerCapabilities) => any
type NotificationFunctionWithPromise (line 6) | type NotificationFunctionWithPromise = (capabilities: IServerCapabilitie...
type NotificationValueOrThunk (line 7) | type NotificationValueOrThunk = NotificationFunction | NotificationFunct...
type RequestHandler (line 9) | type RequestHandler = (payload: any) => Promise<any>
type IResultWithPosition (line 11) | interface IResultWithPosition<T> {
FILE: browser/src/Services/Language/LanguageConfiguration.ts
type ILightweightLanguageConfiguration (line 19) | interface ILightweightLanguageConfiguration {
type ILightweightLanguageServerConfiguration (line 23) | interface ILightweightLanguageServerConfiguration {
FILE: browser/src/Services/Language/LanguageEditorIntegration.ts
class LanguageEditorIntegration (line 27) | class LanguageEditorIntegration implements OniTypes.IDisposable {
method onShowDefinition (line 41) | public get onShowDefinition(): OniTypes.IEvent<IDefinitionResult> {
method onHideDefinition (line 44) | public get onHideDefinition(): OniTypes.IEvent<void> {
method onShowHover (line 48) | public get onShowHover(): OniTypes.IEvent<IHoverResult> {
method onHideHover (line 51) | public get onHideHover(): OniTypes.IEvent<void> {
method constructor (line 55) | constructor(
method showHover (line 108) | public showHover(): void {
method dispose (line 121) | public dispose(): void {
method _onStateUpdate (line 133) | private _onStateUpdate(newState: ILanguageState): void {
FILE: browser/src/Services/Language/LanguageManager.ts
type ILanguageServerNotificationResponse (line 31) | interface ILanguageServerNotificationResponse {
class LanguageManager (line 36) | class LanguageManager {
method constructor (line 43) | constructor(private _oni: Oni.Plugin.Api) {
method getCapabilitiesForLanguage (line 147) | public getCapabilitiesForLanguage(language: string): Promise<IServerCa...
method getTokenRegex (line 157) | public getTokenRegex(language: string): RegExp {
method getSignatureHelpTriggerCharacters (line 169) | public getSignatureHelpTriggerCharacters(language: string): string[] {
method getCompletionTriggerCharacters (line 173) | public getCompletionTriggerCharacters(language: string): string[] {
method isLanguageServerAvailable (line 185) | public isLanguageServerAvailable(language: string): boolean {
method sendLanguageServerNotification (line 189) | public async sendLanguageServerNotification(
method sendLanguageServerRequest (line 206) | public async sendLanguageServerRequest(
method handleLanguageServerRequest (line 243) | public handleLanguageServerRequest(
method subscribeToLanguageServerNotification (line 261) | public subscribeToLanguageServerNotification(
method unwrapFileUriPath (line 282) | public unwrapFileUriPath(fileUri: string): string {
method wrapPathInFileUri (line 286) | public wrapPathInFileUri(filePath: string): string {
method registerLanguageClient (line 290) | public registerLanguageClient(language: string, languageClient: ILangu...
method _onBufferEnter (line 316) | private async _onBufferEnter(): Promise<void> {
method _getLanguageClient (line 380) | private _getLanguageClient(language: string): ILanguageClient {
method _hasLanguageClient (line 392) | private _hasLanguageClient(language: string): boolean {
method _setStatus (line 396) | private _setStatus(protocolMessage: string, status: LanguageClientStat...
method _simulateFakeLag (line 407) | private async _simulateFakeLag(): Promise<void> {
FILE: browser/src/Services/Language/LanguageStore.ts
type ILocation (line 21) | interface ILocation {
type ILocationBasedResult (line 28) | interface ILocationBasedResult<T> extends ILocation {
type IActiveBufferState (line 40) | interface IActiveBufferState {
type ICursorPositionState (line 50) | interface ICursorPositionState {
type HoverResult (line 60) | type HoverResult = ILocationBasedResult<IHoverResult>
type DefinitionResult (line 61) | type DefinitionResult = ILocationBasedResult<IDefinitionResult>
type ILanguageState (line 63) | interface ILanguageState {
type LanguageAction (line 79) | type LanguageAction =
FILE: browser/src/Services/Language/PromiseQueue.ts
class PromiseQueue (line 3) | class PromiseQueue {
method enqueuePromise (line 6) | public enqueuePromise<T>(
FILE: browser/src/Services/Language/RenameView.tsx
type IRenameViewProps (line 13) | interface IRenameViewProps {
class RenameView (line 29) | class RenameView extends React.PureComponent<IRenameViewProps, {}> {
method render (line 30) | public render(): JSX.Element {
FILE: browser/src/Services/Language/ServerCapabilities.ts
type CompletionOptions (line 34) | interface CompletionOptions {
type SignatureHelpOptions (line 49) | interface SignatureHelpOptions {
type CodeLensOptions (line 60) | interface CodeLensOptions {
type DocumentOnTypeFormattingOptions (line 70) | interface DocumentOnTypeFormattingOptions {
type DocumentLinkOptions (line 85) | interface DocumentLinkOptions {
type ExecuteCommandOptions (line 95) | interface ExecuteCommandOptions {
type SaveOptions (line 105) | interface SaveOptions {
type TextDocumentSyncOptions (line 112) | interface TextDocumentSyncOptions {
type IServerCapabilities (line 136) | interface IServerCapabilities {
FILE: browser/src/Services/Language/addInsertModeLanguageFunctionality.ts
type ILatestCursorAndBufferInfo (line 18) | interface ILatestCursorAndBufferInfo {
FILE: browser/src/Services/Learning/Achievements/AchievementNotificationRenderer.tsx
class AchievementNotificationRenderer (line 17) | class AchievementNotificationRenderer {
method constructor (line 20) | constructor(private _overlayManager: OverlayManager) {
method showAchievement (line 26) | public showAchievement(achievement: IAchievement): void {
type IAchievement (line 113) | interface IAchievement {
type IAchievementsViewProps (line 118) | interface IAchievementsViewProps {
type AchievementViewState (line 133) | interface AchievementViewState {
class AchievementView (line 137) | class AchievementView extends React.PureComponent<IAchievement, Achievem...
method constructor (line 138) | constructor(props: IAchievement) {
method componentDidMount (line 146) | public componentDidMount(): void {
method render (line 152) | public render(): JSX.Element {
FILE: browser/src/Services/Learning/Achievements/AchievementsBufferLayer.tsx
type ITrophyCaseViewProps (line 22) | interface ITrophyCaseViewProps {
type ITrophyCaseViewState (line 26) | interface ITrophyCaseViewState {
type ICenteredIconProps (line 89) | interface ICenteredIconProps {
class TrophyCaseView (line 159) | class TrophyCaseView extends React.PureComponent<
method constructor (line 165) | constructor(props: ITrophyCaseViewProps) {
method componentDidMount (line 173) | public componentDidMount(): void {
method componentWillUnmount (line 185) | public componentWillUnmount(): void {
method render (line 189) | public render(): JSX.Element {
method _cleanSubscriptions (line 225) | private _cleanSubscriptions(): void {
class AchievementsBufferLayer (line 231) | class AchievementsBufferLayer implements Oni.BufferLayer {
method id (line 232) | public get id(): string {
method friendlyName (line 236) | public get friendlyName(): string {
method constructor (line 240) | constructor(private _achievements: AchievementsManager) {}
method render (line 242) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Achievements/AchievementsManager.ts
type AchievementDefinition (line 13) | interface AchievementDefinition {
type AchievementGoalDefinition (line 25) | interface AchievementGoalDefinition {
type AchievementWithProgressInfo (line 31) | interface AchievementWithProgressInfo {
class AchievementsManager (line 37) | class AchievementsManager {
method enabled (line 46) | public get enabled(): boolean {
method enabled (line 50) | public set enabled(val: boolean) {
method onAchievementAccomplished (line 54) | public get onAchievementAccomplished(): IEvent<AchievementDefinition> {
method constructor (line 58) | constructor(private _persistentStore: IPersistentStore<IPersistedAchie...
method notifyGoal (line 62) | public notifyGoal(goalId: string): void {
method start (line 80) | public async start(): Promise<void> {
method getAchievements (line 91) | public getAchievements(): AchievementWithProgressInfo[] {
method clearAchievements (line 109) | public clearAchievements(): void {
method registerAchievement (line 119) | public registerAchievement(definition: AchievementDefinition): void {
method _isInitialized (line 125) | private _isInitialized(): boolean {
method _checkVictoryCondition (line 129) | private _checkVictoryCondition(definition: AchievementDefinition): void {
method _hasAchievementBeenAchieved (line 149) | private _hasAchievementBeenAchieved(achievementId: string): boolean {
method _checkIfShouldTrackAchievement (line 153) | private _checkIfShouldTrackAchievement(definition: AchievementDefiniti...
method _schedulePersist (line 170) | private _schedulePersist(): void {
type GoalCounts (line 182) | interface GoalCounts {
type IPersistedAchievementState (line 186) | interface IPersistedAchievementState {
FILE: browser/src/Services/Learning/LearningPane.tsx
class LearningPane (line 26) | class LearningPane implements SidebarPane {
method constructor (line 30) | constructor(
method id (line 35) | public get id(): string {
method title (line 39) | public get title(): string {
method enter (line 43) | public enter(): void {
method leave (line 48) | public leave(): void {
method render (line 52) | public render(): JSX.Element {
type ILearningPaneViewProps (line 65) | interface ILearningPaneViewProps {
type ILearningPaneViewState (line 74) | interface ILearningPaneViewState {
class LearningPaneView (line 138) | class LearningPaneView extends PureComponentWithDisposeTracking<
method constructor (line 142) | constructor(props: ILearningPaneViewProps) {
method componentDidMount (line 151) | public componentDidMount(): void {
method render (line 165) | public render(): JSX.Element {
method _onSelect (line 252) | private _onSelect(selectedId: string) {
FILE: browser/src/Services/Learning/Tutorial/CompletionView.tsx
type ICompletionViewProps (line 15) | interface ICompletionViewProps {
type AppearWithDelayProps (line 30) | interface AppearWithDelayProps {
FILE: browser/src/Services/Learning/Tutorial/GameplayBufferLayer.tsx
class GameplayBufferLayer (line 15) | class GameplayBufferLayer implements Oni.BufferLayer {
method id (line 16) | public get id(): string {
method friendlyName (line 20) | public get friendlyName(): string {
method constructor (line 24) | constructor(private _tutorialGameplayManager: TutorialGameplayManager) {}
method render (line 26) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
type IGameplayBufferLayerViewProps (line 36) | interface IGameplayBufferLayerViewProps {
type IGameplayBufferLayerViewState (line 41) | interface IGameplayBufferLayerViewState {
class GameplayBufferLayerView (line 46) | class GameplayBufferLayerView extends React.PureComponent<
method constructor (line 50) | constructor(props: IGameplayBufferLayerViewProps) {
method componentDidMount (line 59) | public componentDidMount(): void {
method render (line 71) | public render(): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/GoalView.tsx
type IGoalViewProps (line 15) | interface IGoalViewProps {
FILE: browser/src/Services/Learning/Tutorial/ITutorial.ts
type ITutorialContext (line 9) | interface ITutorialContext {
type ITutorialStage (line 14) | interface ITutorialStage {
type ITutorialMetadata (line 20) | interface ITutorialMetadata {
type ITutorial (line 27) | interface ITutorial {
FILE: browser/src/Services/Learning/Tutorial/Stages/CompositeStage.tsx
class CompositeStage (line 26) | class CompositeStage implements ITutorialStage {
method goalName (line 27) | public get goalName(): string {
method constructor (line 31) | constructor(private _goalName: string, private _stages: ITutorialStage...
method tickFunction (line 33) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 43) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/CorrectLineStage.tsx
type ArrowProps (line 22) | interface ArrowProps {
class CorrectLineStage (line 62) | class CorrectLineStage implements ITutorialStage {
method goalName (line 65) | public get goalName(): string {
method constructor (line 69) | constructor(
method tickFunction (line 81) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 93) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/DeleteCharactersStage.tsx
class DeleteCharactersStage (line 22) | class DeleteCharactersStage implements ITutorialStage {
method goalName (line 23) | public get goalName(): string {
method constructor (line 27) | constructor(
method tickFunction (line 34) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 39) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/FadeInLineStage.tsx
class FadeInLineStage (line 35) | class FadeInLineStage implements ITutorialStage {
method goalName (line 39) | public get goalName(): string {
method constructor (line 43) | constructor(private _goalName: string, private _line: number, private ...
method tickFunction (line 48) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 57) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/InitializeBufferStage.tsx
class InitializeBufferStage (line 11) | class InitializeBufferStage implements ITutorialStage {
method goalName (line 12) | public get goalName(): string {
method tickFunction (line 16) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 37) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/MoveToGoalStage.tsx
class MoveToGoalStage (line 76) | class MoveToGoalStage implements ITutorialStage {
method goalName (line 79) | public get goalName(): string {
method constructor (line 83) | constructor(private _goalName: string, private _line: number, private ...
method tickFunction (line 85) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 98) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/SetBufferStage.tsx
class SetBufferStage (line 7) | class SetBufferStage implements ITutorialStage {
method goalName (line 8) | public get goalName(): string {
method constructor (line 12) | constructor(private _lines: string[]) {}
method tickFunction (line 14) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 20) | public render(): JSX.Element {
class ClearBufferStage (line 25) | class ClearBufferStage extends SetBufferStage {
method constructor (line 26) | constructor() {
FILE: browser/src/Services/Learning/Tutorial/Stages/SetCursorPositionStage.tsx
class SetCursorPositionStage (line 7) | class SetCursorPositionStage implements ITutorialStage {
method goalName (line 8) | public get goalName(): string {
method constructor (line 12) | constructor(private _line: number = 0, private _column: number = 0) {}
method tickFunction (line 14) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 19) | public render(): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/WaitForModeStage.tsx
class WaitForModeStage (line 11) | class WaitForModeStage implements ITutorialStage {
method goalName (line 12) | public get goalName(): string {
method constructor (line 16) | constructor(private _goalName: string, private _mode: string) {}
method tickFunction (line 18) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 22) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/WaitForRegisterStage.tsx
class WaitForRegisterStage (line 9) | class WaitForRegisterStage implements ITutorialStage {
method goalName (line 10) | public get goalName(): string {
method constructor (line 14) | constructor(
method tickFunction (line 20) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 25) | public render(): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/Stages/WaitForStateStage.tsx
class WaitForStateStage (line 9) | class WaitForStateStage implements ITutorialStage {
method goalName (line 10) | public get goalName(): string {
method constructor (line 14) | constructor(private _goalName: string, private _lines: string[]) {}
method tickFunction (line 16) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
method render (line 36) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/TutorialBufferLayer.tsx
type IGameplayCompletionInfo (line 44) | interface IGameplayCompletionInfo {
type IGameplayStateChangedEvent (line 56) | interface IGameplayStateChangedEvent {
class GameTracker (line 62) | class GameTracker {
method start (line 66) | public start(): void {
method addKeyPress (line 71) | public addKeyPress(pressCount: number) {
method end (line 75) | public end(): IGameplayCompletionInfo {
class TutorialBufferLayer (line 84) | class TutorialBufferLayer implements Oni.BufferLayer {
method id (line 101) | public get id(): string {
method friendlyName (line 105) | public get friendlyName(): string {
method constructor (line 109) | constructor(private _tutorialManager: TutorialManager) {
method handleInput (line 198) | public handleInput(key: string): boolean {
method render (line 217) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
method startTutorial (line 229) | public async startTutorial(tutorialId: string): Promise<void> {
method stop (line 252) | public stop(): void {
method _spawnParticles (line 256) | private _spawnParticles(
type ITutorialBufferLayerViewProps (line 280) | interface ITutorialBufferLayerViewProps {
type ITutorialBufferLayerState (line 289) | interface ITutorialBufferLayerState {
type IModeStatusBarItemProps (line 373) | interface IModeStatusBarItemProps {
class TutorialBufferLayerView (line 387) | class TutorialBufferLayerView extends React.PureComponent<
method constructor (line 391) | constructor(props: ITutorialBufferLayerViewProps) {
method componentDidMount (line 410) | public componentDidMount(): void {
method componentWillUnmount (line 418) | public componentWillUnmount(): void {
method render (line 422) | public render(): JSX.Element {
FILE: browser/src/Services/Learning/Tutorial/TutorialGameplayManager.ts
type ITutorialState (line 10) | interface ITutorialState {
constant TICK_RATE (line 23) | const TICK_RATE = 50 /* 50 ms, or 20 times pers second */
class TutorialGameplayManager (line 25) | class TutorialGameplayManager {
method onStateChanged (line 37) | public get onStateChanged(): IEvent<ITutorialState> {
method onCompleted (line 41) | public get onCompleted(): IEvent<boolean> {
method onTick (line 45) | public get onTick(): IEvent<void> {
method currentState (line 49) | public get currentState(): ITutorialState {
method currentStage (line 53) | public get currentStage(): ITutorialStage {
method currentTutorial (line 57) | public get currentTutorial(): ITutorial {
method constructor (line 61) | constructor(private _editor: Oni.Editor) {}
method start (line 63) | public start(tutorial: ITutorial, buffer: Oni.Buffer): void {
method stop (line 73) | public stop(): void {
method _tick (line 80) | private async _tick(): Promise<void> {
FILE: browser/src/Services/Learning/Tutorial/TutorialManager.ts
type ITutorialPersistedState (line 16) | interface ITutorialPersistedState {
type ITutorialMetadataWithProgress (line 20) | interface ITutorialMetadataWithProgress {
type ITutorialCompletionInfo (line 25) | interface ITutorialCompletionInfo {
type IdToCompletionInfo (line 30) | interface IdToCompletionInfo {
type IPersistedTutorialState (line 34) | interface IPersistedTutorialState {
class TutorialManager (line 38) | class TutorialManager {
method onTutorialCompletedEvent (line 46) | public get onTutorialCompletedEvent(): IEvent<void> {
method onTutorialProgressChangedEvent (line 50) | public get onTutorialProgressChangedEvent(): IEvent<void> {
method constructor (line 54) | constructor(
method start (line 60) | public async start(): Promise<IPersistedTutorialState> {
method getTutorialInfo (line 72) | public getTutorialInfo(): ITutorialMetadataWithProgress[] {
method getTutorial (line 79) | public getTutorial(id: string): ITutorial {
method registerTutorial (line 83) | public registerTutorial(tutorial: ITutorial): void {
method notifyTutorialCompleted (line 87) | public async notifyTutorialCompleted(
method clearProgress (line 98) | public async clearProgress(): Promise<void> {
method getNextTutorialId (line 107) | public getNextTutorialId(currentTutorialId?: string): string {
method startTutorial (line 131) | public async startTutorial(id: string): Promise<void> {
method _getSortedTutorials (line 148) | private _getSortedTutorials(): ITutorial[] {
method _getCompletionState (line 154) | private _getCompletionState(id: string): ITutorialCompletionInfo {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/BasicMovementTutorial.tsx
class BasicMovementTutorial (line 19) | class BasicMovementTutorial implements ITutorial {
method constructor (line 22) | constructor() {
method metadata (line 39) | public get metadata(): ITutorialMetadata {
method notes (line 49) | public get notes(): JSX.Element[] {
method stages (line 53) | public get stages(): ITutorialStage[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/BeginningsAndEndingsTutorial.tsx
class BeginningsAndEndingsTutorial (line 15) | class BeginningsAndEndingsTutorial implements ITutorial {
method constructor (line 18) | constructor() {
method metadata (line 61) | public get metadata(): ITutorialMetadata {
method stages (line 71) | public get stages(): ITutorialStage[] {
method notes (line 75) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/ChangeOperatorTutorial.tsx
class ChangeOperatorTutorial (line 21) | class ChangeOperatorTutorial implements ITutorial {
method constructor (line 24) | constructor() {
method metadata (line 48) | public get metadata(): ITutorialMetadata {
method stages (line 58) | public get stages(): ITutorialStage[] {
method notes (line 62) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/CopyPasteTutorial.tsx
class CopyPasteTutorial (line 26) | class CopyPasteTutorial implements ITutorial {
method constructor (line 29) | constructor() {
method metadata (line 91) | public get metadata(): ITutorialMetadata {
method stages (line 101) | public get stages(): ITutorialStage[] {
method notes (line 105) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/DeleteCharacterTutorial.tsx
class DeleteCharacterTutorial (line 37) | class DeleteCharacterTutorial implements ITutorial {
method constructor (line 40) | constructor() {
method metadata (line 128) | public get metadata(): ITutorialMetadata {
method notes (line 138) | public get notes(): JSX.Element[] {
method stages (line 152) | public get stages(): ITutorialStage[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/DeleteOperatorTutorial.tsx
class DeleteOperatorTutorial (line 34) | class DeleteOperatorTutorial implements ITutorial {
method constructor (line 37) | constructor() {
method metadata (line 113) | public get metadata(): ITutorialMetadata {
method stages (line 123) | public get stages(): ITutorialStage[] {
method notes (line 127) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/DotCommandTutorial.tsx
class DotCommandTutorial (line 24) | class DotCommandTutorial implements ITutorial {
method constructor (line 27) | constructor() {
method metadata (line 176) | public get metadata(): ITutorialMetadata {
method stages (line 186) | public get stages(): ITutorialStage[] {
method notes (line 190) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/InlineFindingTutorial.tsx
class InlineFindingTutorial (line 20) | class InlineFindingTutorial implements ITutorial {
method constructor (line 23) | constructor() {
method metadata (line 86) | public get metadata(): ITutorialMetadata {
method notes (line 96) | public get notes(): JSX.Element[] {
method stages (line 107) | public get stages(): ITutorialStage[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/InsertAndUndoTutorial.tsx
class InsertAndUndoTutorial (line 16) | class InsertAndUndoTutorial implements ITutorial {
method constructor (line 19) | constructor() {
method metadata (line 94) | public get metadata(): ITutorialMetadata {
method stages (line 104) | public get stages(): ITutorialStage[] {
method notes (line 108) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/SearchInBufferTutorial.tsx
class SearchInBufferTutorial (line 30) | class SearchInBufferTutorial implements ITutorial {
method constructor (line 33) | constructor() {
method metadata (line 90) | public get metadata(): ITutorialMetadata {
method notes (line 100) | public get notes(): JSX.Element[] {
method stages (line 104) | public get stages(): ITutorialStage[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/SwitchModeTutorial.tsx
class SwitchModeTutorial (line 12) | class SwitchModeTutorial implements ITutorial {
method metadata (line 14) | public get metadata(): ITutorialMetadata {
method notes (line 24) | public get notes(): JSX.Element[] {
method stages (line 28) | public get stages(): ITutorialStage[] {
method constructor (line 32) | constructor() {
class WaitForTextStage (line 50) | class WaitForTextStage implements ITutorialStage {
method goalName (line 53) | public get goalName(): string {
method constructor (line 57) | constructor(private _goalName: string) {}
method tickFunction (line 59) | public async tickFunction(context: ITutorialContext): Promise<boolean> {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/TargetsVimPluginTutorial.tsx
class TargetsVimPluginTutorial (line 49) | class TargetsVimPluginTutorial implements ITutorial {
method constructor (line 52) | constructor() {
method metadata (line 157) | public get metadata(): ITutorialMetadata {
method stages (line 167) | public get stages(): ITutorialStage[] {
method notes (line 171) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/TextObjectsTutorial.tsx
class TextObjectsTutorial (line 48) | class TextObjectsTutorial implements ITutorial {
method constructor (line 51) | constructor() {
method metadata (line 207) | public get metadata(): ITutorialMetadata {
method stages (line 217) | public get stages(): ITutorialStage[] {
method notes (line 221) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/VerticalMovementTutorial.tsx
class VerticalMovementTutorial (line 10) | class VerticalMovementTutorial implements ITutorial {
method constructor (line 13) | constructor() {
method metadata (line 32) | public get metadata(): ITutorialMetadata {
method stages (line 42) | public get stages(): ITutorialStage[] {
method notes (line 46) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/VisualModeTutorial.tsx
class VisualModeTutorial (line 31) | class VisualModeTutorial implements ITutorial {
method constructor (line 34) | constructor() {
method metadata (line 85) | public get metadata(): ITutorialMetadata {
method stages (line 95) | public get stages(): ITutorialStage[] {
method notes (line 99) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Learning/Tutorial/Tutorials/WordMotionTutorial.tsx
class WordMotionTutorial (line 22) | class WordMotionTutorial implements ITutorial {
method constructor (line 25) | constructor() {
method metadata (line 91) | public get metadata(): ITutorialMetadata {
method stages (line 101) | public get stages(): ITutorialStage[] {
method notes (line 105) | public get notes(): JSX.Element[] {
FILE: browser/src/Services/Menu/Filter/FuseFilter.ts
function filter (line 8) | function filter(options: any[], searchString: string): IMenuOptionWithHi...
function convertArrayOfPairsToIndices (line 98) | function convertArrayOfPairsToIndices(pairs: number[][]): number[] {
FILE: browser/src/Services/Menu/Filter/NoFilter.ts
function convert (line 6) | function convert(entry: any /*Oni.Menu.MenuOption*/): IMenuOptionWithHig...
function filter (line 20) | function filter(options: any[], searchString: string): IMenuOptionWithHi...
FILE: browser/src/Services/Menu/Filter/RegExFilter.ts
function filter (line 14) | function filter(
function processSearchTerm (line 68) | function processSearchTerm(
function getHighlightsFromString (line 86) | function getHighlightsFromString(
FILE: browser/src/Services/Menu/Filter/VSCodeFilter.ts
function filter (line 16) | function filter(
function processSearchTerm (line 71) | function processSearchTerm(
FILE: browser/src/Services/Menu/Filter/index.ts
class Filters (line 8) | class Filters implements Oni.Menu.IMenuFilters {
method constructor (line 11) | constructor() {
method getDefault (line 20) | public getDefault(): Oni.Menu.IMenuFilter {
method getByName (line 24) | public getByName(name: string): Oni.Menu.IMenuFilter {
function getInstance (line 33) | function getInstance(owner: string): Oni.Menu.IMenuFilters {
FILE: browser/src/Services/Menu/Menu.ts
type IMenuOptionWithHighlights (line 24) | interface IMenuOptionWithHighlights extends Oni.Menu.MenuOption {
type MenuState (line 29) | type MenuState = State.IMenus<Oni.Menu.MenuOption, IMenuOptionWithHighli...
class MenuManager (line 50) | class MenuManager {
method constructor (line 54) | constructor(private _configuration: Configuration, private _overlayMan...
method create (line 66) | public create(): Menu {
method isMenuOpen (line 71) | public isMenuOpen(): boolean {
method nextMenuItem (line 75) | public nextMenuItem(): void {
method previousMenuItem (line 79) | public previousMenuItem(): void {
method closeActiveMenu (line 83) | public closeActiveMenu(): void {
method selectMenuItem (line 87) | public selectMenuItem(idx?: number): void {
method _updateConfiguration (line 95) | private _updateConfiguration(): void {
class Menu (line 107) | class Menu implements Oni.Menu.MenuInstance {
method onHide (line 114) | public get onHide(): IEvent<void> {
method onItemSelected (line 118) | public get onItemSelected(): IEvent<any> {
method onSelectedItemChanged (line 122) | public get onSelectedItemChanged(): IEvent<Oni.Menu.MenuOption> {
method onFilterTextChanged (line 126) | public get onFilterTextChanged(): IEvent<string> {
method selectedItem (line 130) | public get selectedItem() {
method constructor (line 134) | constructor(private _id: string) {}
method isOpen (line 136) | public isOpen(): boolean {
method setLoading (line 141) | public setLoading(isLoading: boolean): void {
method setItems (line 145) | public setItems(items: Oni.Menu.MenuOption[]): void {
method setFilterFunction (line 149) | public setFilterFunction(
method show (line 158) | public show(): void {
method hide (line 168) | public hide(): void {
method _onItemSelectedHandler (line 172) | private _onItemSelectedHandler(idx?: number): void {
method _getSelectedItem (line 179) | private _getSelectedItem(idx?: number) {
FILE: browser/src/Services/Menu/MenuActions.ts
type IMenuOptions (line 7) | interface IMenuOptions {
type ISetConfigurationMenuAction (line 18) | interface ISetConfigurationMenuAction {
type IShowMenuAction (line 26) | interface IShowMenuAction {
type ISetMenuItems (line 36) | interface ISetMenuItems<T> {
type ISetMenuLoading (line 44) | interface ISetMenuLoading {
type IFilterMenuAction (line 52) | interface IFilterMenuAction {
type IHideMenuAction (line 60) | interface IHideMenuAction {
type INextMenuAction (line 64) | interface INextMenuAction {
type IPreviousMenuAction (line 68) | interface IPreviousMenuAction {
type MenuAction (line 72) | type MenuAction =
FILE: browser/src/Services/Menu/MenuComponent.tsx
type IMenuProps (line 24) | interface IMenuProps {
class MenuView (line 48) | class MenuView extends React.PureComponent<IMenuProps, {}> {
method componentWillUpdate (line 52) | public componentWillUpdate(newProps: Readonly<IMenuProps>): void {
method render (line 58) | public render(): null | JSX.Element {
method _onChange (line 122) | private _onChange(evt: React.FormEvent<HTMLInputElement>) {
type IMenuItemProps (line 186) | interface IMenuItemProps {
type IMenuItemWrapperProps (line 200) | interface IMenuItemWrapperProps {
class MenuItem (line 227) | class MenuItem extends React.PureComponent<IMenuItemProps, {}> {
method render (line 228) | public render(): JSX.Element {
method getIcon (line 258) | private getIcon() {
FILE: browser/src/Services/Menu/MenuReducer.ts
function createReducer (line 11) | function createReducer<T, FilteredT extends T>() {
FILE: browser/src/Services/Menu/MenuState.ts
type IMenus (line 7) | interface IMenus<T, FilteredT> {
type IMenuConfigurationSettings (line 13) | interface IMenuConfigurationSettings {
type IMenu (line 23) | interface IMenu<T, FilteredT> {
function createDefaultState (line 44) | function createDefaultState<T, FilteredT>(): IMenus<T, FilteredT> {
FILE: browser/src/Services/Metadata.ts
type IMetadata (line 12) | interface IMetadata {
FILE: browser/src/Services/MultiProcess.ts
class MultiProcess (line 10) | class MultiProcess {
method focusPreviousInstance (line 11) | public focusPreviousInstance(): void {
method focusNextInstance (line 15) | public focusNextInstance(): void {
method moveToNextOniInstance (line 19) | public moveToNextOniInstance(direction: string): void {
method openNewWindow (line 23) | public openNewWindow(): void {
FILE: browser/src/Services/Notifications/Notification.ts
class Notification (line 13) | class Notification {
method onClick (line 23) | public get onClick(): IEvent<void> {
method onClose (line 27) | public get onClose(): IEvent<void> {
method constructor (line 31) | constructor(private _id: string, private _store: Store<INotificationsS...
method setContents (line 33) | public setContents(title: string, detail: string): void {
method setButtons (line 38) | public setButtons(buttons: INotificationButton[]) {
method setLevel (line 45) | public setLevel(level: NotificationLevel): void {
method setExpiration (line 49) | public setExpiration(expiration: number = 20000) {
method show (line 55) | public show(): void {
method hide (line 75) | public hide(): void {
FILE: browser/src/Services/Notifications/NotificationStore.ts
type NotificationLevel (line 12) | type NotificationLevel = "info" | "warn" | "error" | "success"
type INotificationButton (line 14) | interface INotificationButton {
type IdToNotification (line 19) | interface IdToNotification {
type INotificationsState (line 23) | interface INotificationsState {
type INotification (line 31) | interface INotification {
type IShowNotification (line 42) | interface IShowNotification {
type IHideNotification (line 54) | interface IHideNotification {
type NotificationAction (line 59) | type NotificationAction = IShowNotification | IHideNotification
FILE: browser/src/Services/Notifications/Notifications.ts
class Notifications (line 16) | class Notifications {
method constructor (line 21) | constructor(private _overlayManager: OverlayManager) {
method enable (line 28) | public enable(): void {
method disable (line 32) | public disable(): void {
method createItem (line 36) | public createItem(): Notification {
FILE: browser/src/Services/Notifications/NotificationsView.tsx
type NotificationsViewProps (line 24) | interface NotificationsViewProps {
class NotificationsView (line 50) | class NotificationsView extends React.PureComponent<NotificationsViewPro...
method render (line 51) | public render(): JSX.Element {
type IErrorStyles (line 73) | interface IErrorStyles {
type IButtonProps (line 215) | interface IButtonProps {
class NotificationView (line 238) | class NotificationView extends React.PureComponent<INotification, {}> {
method render (line 246) | public render(): JSX.Element {
FILE: browser/src/Services/Overlay.ts
class Overlay (line 9) | class Overlay {
method constructor (line 13) | constructor(private _id: string) {}
method show (line 15) | public show(): void {
method hide (line 20) | public hide(): void {
method setContents (line 25) | public setContents(element: any): void {
class OverlayManager (line 34) | class OverlayManager {
method createItem (line 37) | public createItem(): Overlay {
FILE: browser/src/Services/Particles/ParticleSystem.tsx
type Vector (line 16) | interface Vector {
type ParticleSystemDefinition (line 21) | interface ParticleSystemDefinition {
type Particle (line 53) | interface Particle {
class ParticleSystem (line 73) | class ParticleSystem {
method constructor (line 81) | constructor(private _overlayManager: OverlayManager) {}
method enabled (line 83) | public get enabled(): boolean {
method enabled (line 86) | public set enabled(val: boolean) {
method createParticles (line 90) | public createParticles(count: number, particleSystem: Partial<Particle...
method _start (line 130) | private _start(): void {
method _update (line 137) | private _update(): void {
method _draw (line 173) | private _draw(): void {
FILE: browser/src/Services/Preview/PreviewBufferLayer.tsx
class PreviewBufferLayer (line 31) | class PreviewBufferLayer implements Oni.BufferLayer {
method constructor (line 32) | constructor(private _editorManager: EditorManager, private _preview: P...
method id (line 34) | public get id(): string {
method render (line 38) | public render(): JSX.Element {
type IPreviewViewProps (line 43) | interface IPreviewViewProps {
type IPreviewViewState (line 48) | interface IPreviewViewState {
class PreviewView (line 55) | class PreviewView extends React.PureComponent<IPreviewViewProps, IPrevie...
method constructor (line 58) | constructor(props: any) {
method componentDidMount (line 67) | public componentDidMount(): void {
method render (line 89) | public render(): JSX.Element {
FILE: browser/src/Services/Preview/index.tsx
type PreviewContext (line 17) | interface PreviewContext {
type IPreviewer (line 22) | interface IPreviewer {
type IdToPreviewer (line 26) | interface IdToPreviewer {
type LanguageToDefaultPreviewer (line 29) | interface LanguageToDefaultPreviewer {
class NoopPreviewer (line 33) | class NoopPreviewer {
method render (line 34) | public render(previewContext: PreviewContext): JSX.Element {
class NullPreviewer (line 44) | class NullPreviewer {
method render (line 45) | public render(previewContext: PreviewContext): JSX.Element {
class Preview (line 50) | class Preview {
method constructor (line 54) | constructor(private _editorManager: EditorManager) {
method openPreviewPane (line 58) | public async openPreviewPane(
method registerDefaultPreviewer (line 66) | public registerDefaultPreviewer(language: string, previewer: IPreviewe...
method getPreviewer (line 70) | public getPreviewer(language: string): IPreviewer {
FILE: browser/src/Services/Recorder.ts
constant ONI_RECORDER_TITLE (line 22) | const ONI_RECORDER_TITLE = "oni_recorder_title"
class Recorder (line 33) | class Recorder implements Oni.Recorder {
method startRecording (line 37) | public startRecording(): void {
method isRecording (line 80) | public get isRecording(): boolean {
method stopRecording (line 84) | public async stopRecording(fileName?: string): Promise<void> {
method takeScreenshot (line 109) | public takeScreenshot(fileName?: string, scale: number = 1): void {
method _handleStream (line 128) | private _handleStream(stream: any) {
method _handleUserMediaError (line 137) | private _handleUserMediaError(err: Error) {
FILE: browser/src/Services/Search/FinderProcess.ts
class FinderProcess (line 14) | class FinderProcess {
method onData (line 24) | public get onData(): IEvent<string[]> {
method onComplete (line 28) | public get onComplete(): IEvent<void> {
method constructor (line 32) | constructor(private _command: string, private _splitCharacter: string) {}
method start (line 34) | public start(): void {
method stop (line 75) | public stop(): void {
FILE: browser/src/Services/Search/RipGrep.ts
function getCommand (line 11) | function getCommand(): string {
function getArguments (line 19) | function getArguments(excludePaths: string[], shouldShowHidden: boolean)...
FILE: browser/src/Services/Search/Scorer/CharCode.ts
type CharCode (line 14) | const enum CharCode {
FILE: browser/src/Services/Search/Scorer/Comparers.ts
function setFileNameComparer (line 13) | function setFileNameComparer(collator: Intl.Collator): void {
function compareFileNames (line 18) | function compareFileNames(one: string, other: string, caseSensitive = fa...
function noIntlCompareFileNames (line 38) | function noIntlCompareFileNames(one: string, other: string, caseSensitiv...
function compareFileExtensions (line 58) | function compareFileExtensions(one: string, other: string): number {
function noIntlCompareFileExtensions (line 86) | function noIntlCompareFileExtensions(one: string, other: string): number {
function extractNameAndExtension (line 101) | function extractNameAndExtension(str?: string): [string, string] {
function comparePathComponents (line 107) | function comparePathComponents(one: string, other: string, caseSensitive...
function comparePaths (line 120) | function comparePaths(one: string, other: string, caseSensitive = false)...
function compareAnything (line 148) | function compareAnything(one: string, other: string, lookFor: string): n...
function compareByPrefix (line 175) | function compareByPrefix(one: string, other: string, lookFor: string): n...
FILE: browser/src/Services/Search/Scorer/OniQuickOpenScorer.ts
constant NO_ITEM_SCORE (line 12) | const NO_ITEM_SCORE: IItemScore = Object.freeze({ score: 0 })
class OniAccessor (line 14) | class OniAccessor implements IItemAccessor<any> {
method getItemLabel (line 15) | public getItemLabel(result: any): string {
method getItemDescription (line 19) | public getItemDescription(result: any): string {
method getItemPath (line 23) | public getItemPath(result: any): string {
function scoreItemOni (line 28) | function scoreItemOni(
function compareItemsByScoreOni (line 49) | function compareItemsByScoreOni(
FILE: browser/src/Services/Search/Scorer/QuickOpenScorer.ts
type Score (line 15) | type Score = [number /* score */, number[] /* match positions */]
type ScorerCache (line 16) | type ScorerCache = { [key: string]: IItemScore }
constant NO_MATCH (line 18) | const NO_MATCH = 0
constant NO_SCORE (line 19) | const NO_SCORE: Score = [NO_MATCH, []]
function score (line 24) | function score(target: string, query: string, queryLower: string, fuzzy:...
function doScore (line 65) | function doScore(
function computeCharScore (line 165) | function computeCharScore(
function scoreSeparatorAtPos (line 238) | function scoreSeparatorAtPos(charCode: number): number {
type IItemScore (line 272) | interface IItemScore {
constant NO_ITEM_SCORE (line 289) | const NO_ITEM_SCORE: IItemScore = Object.freeze({ score: 0 })
type IItemAccessor (line 291) | interface IItemAccessor<T> {
constant PATH_IDENTITY_SCORE (line 308) | const PATH_IDENTITY_SCORE = 1 << 18
constant LABEL_PREFIX_SCORE (line 309) | const LABEL_PREFIX_SCORE = 1 << 17
constant LABEL_CAMELCASE_SCORE (line 310) | const LABEL_CAMELCASE_SCORE = 1 << 16
constant LABEL_SCORE_THRESHOLD (line 311) | const LABEL_SCORE_THRESHOLD = 1 << 15
type IPreparedQuery (line 313) | interface IPreparedQuery {
function prepareQuery (line 323) | function prepareQuery(original: string): IPreparedQuery {
function scoreItem (line 341) | function scoreItem<T>(
function doScoreItem (line 377) | function doScoreItem(
function compareItemsByScore (line 464) | function compareItemsByScore<T>(
function computeLabelAndDescriptionMatchDistance (line 553) | function computeLabelAndDescriptionMatchDistance<T>(
function compareByMatchLength (line 591) | function compareByMatchLength(matchesA?: IMatch[], matchesB?: IMatch[]):...
function fallbackCompare (line 618) | function fallbackCompare<T>(
FILE: browser/src/Services/Search/Scorer/Utilities.ts
function isLower (line 14) | function isLower(code: number): boolean {
function isUpper (line 18) | function isUpper(code: number): boolean {
function isNumber (line 22) | function isNumber(code: number): boolean {
function isWhitespace (line 26) | function isWhitespace(code: number): boolean {
function isAlphanumeric (line 35) | function isAlphanumeric(code: number): boolean {
function stripWildcards (line 39) | function stripWildcards(pattern: string): string {
FILE: browser/src/Services/Search/Scorer/filters.ts
type IFilter (line 9) | interface IFilter {
type IMatch (line 14) | interface IMatch {
function _matchesPrefix (line 21) | function _matchesPrefix(ignoreCase: boolean, word: string, wordToMatchAg...
function createMatches (line 40) | function createMatches(position: number[]): IMatch[] {
function nextAnchor (line 57) | function nextAnchor(camelCaseWord: string, start: number): number {
function _matchesCamelCase (line 71) | function _matchesCamelCase(word: string, camelCaseWord: string, i: numbe...
type ICamelCaseAnalysis (line 93) | interface ICamelCaseAnalysis {
function analyzeCamelCaseWord (line 102) | function analyzeCamelCaseWord(word: string): ICamelCaseAnalysis {
function isUpperCaseWord (line 134) | function isUpperCaseWord(analysis: ICamelCaseAnalysis): boolean {
function isCamelCaseWord (line 139) | function isCamelCaseWord(analysis: ICamelCaseAnalysis): boolean {
function isCamelCasePattern (line 146) | function isCamelCasePattern(word: string): boolean {
function matchesCamelCase (line 173) | function matchesCamelCase(word: string, camelCaseWord: string): IMatch[] {
function join (line 215) | function join(head: IMatch, tail: IMatch[]): IMatch[] {
FILE: browser/src/Services/Search/Scorer/strings.ts
function isLowerAsciiLetter (line 8) | function isLowerAsciiLetter(code: number): boolean {
function isUpperAsciiLetter (line 12) | function isUpperAsciiLetter(code: number): boolean {
function isAsciiLetter (line 16) | function isAsciiLetter(code: number): boolean {
function equalsIgnoreCase (line 20) | function equalsIgnoreCase(a: string, b: string): boolean {
function doEqualsIgnoreCase (line 31) | function doEqualsIgnoreCase(a: string, b: string, stopAt = a.length): bo...
function startsWithIgnoreCase (line 64) | function startsWithIgnoreCase(str: string, candidate: string): boolean {
FILE: browser/src/Services/Search/SearchPaneView.tsx
type ISearchPaneViewProps (line 26) | interface ISearchPaneViewProps {
type ISearchPaneViewState (line 36) | interface ISearchPaneViewState {
class SearchPaneView (line 45) | class SearchPaneView extends React.PureComponent<
method constructor (line 51) | constructor(props: ISearchPaneViewProps) {
method componentDidMount (line 63) | public componentDidMount(): void {
method componentWillUnmount (line 85) | public componentWillUnmount(): void {
method render (line 89) | public render(): JSX.Element {
method _cleanExistingSubscriptions (line 137) | private _cleanExistingSubscriptions(): void {
method _onChangeSearchQuery (line 150) | private _onChangeSearchQuery(val: string): void {
method _clearActiveTextbox (line 162) | private _clearActiveTextbox(): void {
method _onSelected (line 166) | private _onSelected(selectedId: string): void {
method _startSearch (line 174) | private _startSearch(val: string): void {
FILE: browser/src/Services/Search/SearchProvider.ts
class NullSearchQuery (line 10) | class NullSearchQuery implements Oni.Search.Query {
method start (line 13) | public start(): void {
method cancel (line 17) | public cancel(): void {
method onSearchResults (line 21) | public get onSearchResults(): IEvent<Oni.Search.Result> {
class Search (line 26) | class Search implements Oni.Search.ISearch {
method nullSearch (line 27) | public get nullSearch(): Oni.Search.Query {
method findInFile (line 31) | public findInFile(opts: Oni.Search.Options): Oni.Search.Query {
method findInPath (line 48) | public findInPath(opts: Oni.Search.Options): Oni.Search.Query {
function parseRipGrepLine (line 63) | function parseRipGrepLine(ripGrepResult: string): Oni.Search.ResultItem {
function parseRipGrepFilesLine (line 84) | function parseRipGrepFilesLine(line: string): Oni.Search.ResultItem {
type IParseLine (line 97) | type IParseLine = (line: string) => Oni.Search.ResultItem
class SearchQuery (line 99) | class SearchQuery implements Oni.Search.Query {
method onSearchResults (line 105) | public get onSearchResults(): IEvent<Oni.Search.Result> {
method constructor (line 109) | constructor(command: string, parseLine: IParseLine) {
method start (line 129) | public start(): void {
method cancel (line 134) | public cancel(): void {
FILE: browser/src/Services/Search/SearchResultsSpinnerView.tsx
type ISearchResultSpinnerViewProps (line 16) | interface ISearchResultSpinnerViewProps {
type ISearchResultSpinnerViewState (line 21) | interface ISearchResultSpinnerViewState {
class SearchResultSpinnerView (line 49) | class SearchResultSpinnerView extends React.PureComponent<
method constructor (line 55) | constructor(props: ISearchResultSpinnerViewProps) {
method componentDidMount (line 63) | public componentDidMount(): void {
method componentWillUnmount (line 72) | public componentWillUnmount(): void {
method render (line 76) | public render(): JSX.Element {
method _cleanExistingSubscriptions (line 86) | private _cleanExistingSubscriptions(): void {
FILE: browser/src/Services/Search/SearchTextBox.tsx
type ISearchTextBoxProps (line 13) | interface ISearchTextBoxProps {
class SearchTextBox (line 53) | class SearchTextBox extends React.PureComponent<ISearchTextBoxProps, {}> {
method render (line 54) | public render(): JSX.Element {
FILE: browser/src/Services/Search/index.tsx
class SearchPane (line 17) | class SearchPane {
method id (line 28) | public get id(): string {
method title (line 32) | public get title(): string {
method constructor (line 36) | constructor(private _onFocusEvent: IEvent<void>, private _oni: Oni.Plu...
method enter (line 46) | public enter(): void {
method leave (line 50) | public leave(): void {
method render (line 54) | public render(): JSX.Element {
method _onSearchOptionsChanged (line 79) | private _onSearchOptionsChanged(searchOpts: Oni.Search.Options): void {
method _startNewSearch (line 83) | private _startNewSearch(searchOpts: Oni.Search.Options): void {
function activate (line 115) | function activate(oni: any): any {
FILE: browser/src/Services/Sessions/SessionManager.ts
type ISession (line 11) | interface ISession {
type ISessionService (line 22) | interface ISessionService {
type UpdatedOni (line 29) | interface UpdatedOni extends Plugin.Api {
type UpdatedEditorManager (line 33) | interface UpdatedEditorManager extends EditorManager {
type UpdatedEditor (line 37) | interface UpdatedEditor extends Editor {
class SessionManager (line 50) | class SessionManager implements ISessionService {
method _sessionsDir (line 52) | private get _sessionsDir() {
method constructor (line 61) | constructor(
method allSessions (line 78) | public get allSessions() {
method sessionsDir (line 83) | public get sessionsDir() {
method updateOniSession (line 87) | public async updateOniSession(name: string, value: Partial<ISession>) {
method createOniSession (line 97) | public async createOniSession(sessionName: string) {
method getSessionFromStore (line 123) | public async getSessionFromStore(name: string) {
method _getSessionFilename (line 157) | private _getSessionFilename(name: string) {
method _setupSubscriptions (line 161) | private _setupSubscriptions() {
function init (line 171) | function init() {
FILE: browser/src/Services/Sessions/Sessions.tsx
type IStateProps (line 14) | interface IStateProps {
type ISessionActions (line 21) | interface ISessionActions {
type IConnectedProps (line 32) | interface IConnectedProps extends IStateProps, ISessionActions {}
type ISessionItem (line 34) | interface ISessionItem {
type IState (line 83) | interface IState {
type IIDs (line 88) | interface IIDs {
class Sessions (line 93) | class Sessions extends React.PureComponent<IConnectedProps, IState> {
method componentDidMount (line 104) | public async componentDidMount() {
method render (line 160) | public render() {
FILE: browser/src/Services/Sessions/SessionsPane.tsx
type SessionPaneProps (line 7) | interface SessionPaneProps {
class SessionsPane (line 18) | class SessionsPane {
method constructor (line 22) | constructor({ store, commands }: SessionPaneProps) {
method id (line 29) | get id() {
method title (line 33) | public get title() {
method enter (line 37) | public enter() {
method leave (line 41) | public leave() {
method render (line 45) | public render() {
method _setupCommands (line 62) | private _setupCommands() {
FILE: browser/src/Services/Sessions/SessionsStore.ts
type ISessionState (line 13) | interface ISessionState {
type IGenericAction (line 29) | interface IGenericAction<N, T = undefined> {
type ISessionStore (line 34) | type ISessionStore = Store<ISessionState>
type IUpdateMultipleSessions (line 36) | type IUpdateMultipleSessions = IGenericAction<"GET_ALL_SESSIONS", { sess...
type IUpdateSelection (line 37) | type IUpdateSelection = IGenericAction<"UPDATE_SELECTION", { selected: s...
type IUpdateSession (line 38) | type IUpdateSession = IGenericAction<"UPDATE_SESSION", { session: ISessi...
type IRestoreSession (line 39) | type IRestoreSession = IGenericAction<"RESTORE_SESSION", { sessionName: ...
type IPersistSession (line 40) | type IPersistSession = IGenericAction<"PERSIST_SESSION", { sessionName: ...
type IPersistSessionSuccess (line 41) | type IPersistSessionSuccess = IGenericAction<"PERSIST_SESSION_SUCCESS">
type IPersistSessionFailed (line 42) | type IPersistSessionFailed = IGenericAction<"PERSIST_SESSION_FAILED", { ...
type IRestoreSessionError (line 43) | type IRestoreSessionError = IGenericAction<"RESTORE_SESSION_ERROR", { er...
type IDeleteSession (line 44) | type IDeleteSession = IGenericAction<"DELETE_SESSION">
type IDeleteSessionSuccess (line 45) | type IDeleteSessionSuccess = IGenericAction<"DELETE_SESSION_SUCCESS">
type IDeleteSessionFailed (line 46) | type IDeleteSessionFailed = IGenericAction<"DELETE_SESSION_FAILED">
type IUpdateCurrentSession (line 47) | type IUpdateCurrentSession = IGenericAction<"UPDATE_CURRENT_SESSION">
type ISetCurrentSession (line 48) | type ISetCurrentSession = IGenericAction<"SET_CURRENT_SESSION", { sessio...
type IPopulateSessions (line 49) | type IPopulateSessions = IGenericAction<"POPULATE_SESSIONS">
type ICreateSession (line 50) | type ICreateSession = IGenericAction<"CREATE_SESSION">
type ICancelCreateSession (line 51) | type ICancelCreateSession = IGenericAction<"CANCEL_NEW_SESSION">
type IEnter (line 52) | type IEnter = IGenericAction<"ENTER">
type ILeave (line 53) | type ILeave = IGenericAction<"LEAVE">
type ISessionActions (line 55) | type ISessionActions =
type SessionEpic (line 122) | type SessionEpic = Epic<ISessionActions, ISessionState, Dependencies>
function reducer (line 232) | function reducer(state: ISessionState, action: ISessionActions) {
type Dependencies (line 284) | interface Dependencies {
FILE: browser/src/Services/Sidebar/SidebarContentSplit.tsx
class SidebarContentSplit (line 26) | class SidebarContentSplit {
method activePane (line 30) | public get activePane(): SidebarPane {
method constructor (line 36) | constructor(private _sidebarManager: SidebarManager) {}
method enter (line 38) | public enter(): void {
method leave (line 47) | public leave(): void {
method render (line 56) | public render(): JSX.Element {
type ISidebarContentViewProps (line 65) | interface ISidebarContentViewProps extends ISidebarContentContainerProps {
type ISidebarContentContainerProps (line 70) | interface ISidebarContentContainerProps {
type ISidebarContentViewState (line 75) | interface ISidebarContentViewState {
type ISidebarHeaderProps (line 99) | interface ISidebarHeaderProps {
class SidebarHeaderView (line 118) | class SidebarHeaderView extends React.PureComponent<ISidebarHeaderProps,...
method render (line 119) | public render(): JSX.Element {
class SidebarContentView (line 134) | class SidebarContentView extends React.PureComponent<
method constructor (line 140) | constructor(props: ISidebarContentViewProps) {
method componentDidMount (line 147) | public componentDidMount(): void {
method componentWillUnmount (line 164) | public componentWillUnmount(): void {
method render (line 168) | public render(): JSX.Element {
method _cleanSubscriptions (line 186) | private _cleanSubscriptions(): void {
FILE: browser/src/Services/Sidebar/SidebarSplit.tsx
class SidebarSplit (line 14) | class SidebarSplit {
method constructor (line 15) | constructor(private _sidebarManager: SidebarManager) {}
method enter (line 17) | public enter(): void {
method leave (line 22) | public leave(): void {
method render (line 27) | public render(): JSX.Element {
method _onSelectionChanged (line 35) | private _onSelectionChanged(newVal: string): void {
FILE: browser/src/Services/Sidebar/SidebarStore.ts
type ISidebarState (line 18) | interface ISidebarState {
type SidebarIcon (line 29) | type SidebarIcon = string
type ISidebarEntry (line 31) | interface ISidebarEntry {
type SidebarPane (line 39) | interface SidebarPane extends Oni.IWindowSplit {
class SidebarManager (line 47) | class SidebarManager {
method activeEntryId (line 53) | public get activeEntryId(): string {
method entries (line 57) | public get entries(): ISidebarEntry[] {
method isFocused (line 61) | get isFocused(): boolean {
method isVisible (line 65) | get isVisible(): boolean {
method store (line 69) | public get store(): Store<ISidebarState> {
method constructor (line 73) | constructor(
method increaseWidth (line 91) | public increaseWidth(): void {
method decreaseWidth (line 97) | public decreaseWidth(): void {
method setWidth (line 103) | public setWidth(width: string): void {
method setNotification (line 112) | public setNotification(id: string): void {
method setActiveEntry (line 121) | public setActiveEntry(id: string): void {
method focusContents (line 140) | public focusContents(): void {
method toggleSidebarVisibility (line 146) | public toggleSidebarVisibility(): void {
method toggleVisibilityById (line 158) | public toggleVisibilityById(id: string): void {
method enter (line 180) | public enter(): void {
method leave (line 184) | public leave(): void {
method add (line 188) | public add(icon: SidebarIcon, pane: SidebarPane): void {
method hide (line 200) | public hide(): void {
type SidebarActions (line 213) | type SidebarActions =
FILE: browser/src/Services/Sidebar/SidebarView.tsx
type ISidebarIconProps (line 19) | interface ISidebarIconProps {
class SidebarIcon (line 90) | class SidebarIcon extends React.PureComponent<ISidebarIconProps, {}> {
method render (line 91) | public render(): JSX.Element {
type ISidebarViewProps (line 106) | interface ISidebarViewProps extends ISidebarContainerProps {
type ISidebarContainerProps (line 114) | interface ISidebarContainerProps {
type ISidebarWrapperProps (line 118) | interface ISidebarWrapperProps {
class SidebarView (line 138) | class SidebarView extends React.PureComponent<ISidebarViewProps, {}> {
method render (line 139) | public render(): JSX.Element {
FILE: browser/src/Services/Sneak/Sneak.tsx
type SneakProvider (line 23) | type SneakProvider = () => Promise<ISneakInfo[]>
class Sneak (line 25) | class Sneak {
method onSneakCompleted (line 31) | public get onSneakCompleted(): IEvent<ISneakInfo> {
method constructor (line 35) | constructor(private _overlayManager: OverlayManager) {
method isActive (line 39) | public get isActive(): boolean {
method addSneakProvider (line 43) | public addSneakProvider(provider: SneakProvider): IDisposable {
method getSneakMatchingTag (line 50) | public getSneakMatchingTag(tag: string): IAugmentedSneakInfo | null {
method show (line 64) | public show(): void {
method close (line 87) | public close(): void {
method _onComplete (line 95) | private _onComplete(sneakInfo: ISneakInfo): void {
method _collectSneakRectangles (line 102) | private _collectSneakRectangles(): void {
FILE: browser/src/Services/Sneak/SneakStore.ts
type ISneakInfo (line 13) | interface ISneakInfo {
type IAugmentedSneakInfo (line 21) | interface IAugmentedSneakInfo extends ISneakInfo {
type ISneakState (line 25) | interface ISneakState {
type SneakAction (line 39) | type SneakAction =
FILE: browser/src/Services/Sneak/SneakView.tsx
type ISneakContainerProps (line 15) | interface ISneakContainerProps {
type ISneakViewProps (line 19) | interface ISneakViewProps extends ISneakContainerProps {
type ISneakViewState (line 23) | interface ISneakViewState {
class SneakView (line 29) | class SneakView extends React.PureComponent<ISneakViewProps, ISneakViewS...
method constructor (line 30) | constructor(props: ISneakViewProps) {
method render (line 38) | public render(): JSX.Element {
type ISneakItemViewProps (line 70) | interface ISneakItemViewProps {
class SneakItemView (line 91) | class SneakItemView extends React.PureComponent<ISneakItemViewProps, {}> {
method render (line 92) | public render(): JSX.Element {
FILE: browser/src/Services/Snippets/OniSnippet.ts
type VariableResolver (line 13) | type VariableResolver = Snippets.VariableResolver
type Variable (line 14) | type Variable = Snippets.Variable
type OniSnippetPlaceholder (line 16) | interface OniSnippetPlaceholder {
class OniSnippet (line 48) | class OniSnippet {
method constructor (line 53) | constructor(snippet: string, private _variableResolver?: VariableResol...
method setPlaceholder (line 57) | public setPlaceholder(index: number, newValue: string): void {
method getPlaceholderValue (line 61) | public getPlaceholderValue(index: number): string {
method getPlaceholders (line 65) | public getPlaceholders(): OniSnippetPlaceholder[] {
method getLines (line 86) | public getLines(): string[] {
method _getSnippetWithFilledPlaceholders (line 92) | private _getSnippetWithFilledPlaceholders(): Snippets.TextmateSnippet {
method _getNormalizedSnippet (line 117) | private _getNormalizedSnippet(): string {
FILE: browser/src/Services/Snippets/SnippetBufferLayer.tsx
class SnippetBufferLayer (line 20) | class SnippetBufferLayer implements Oni.BufferLayer {
method constructor (line 21) | constructor(private _buffer: Oni.Buffer, private _snippetSession: Snip...
method id (line 25) | public get id(): string {
method friendlyName (line 29) | public get friendlyName(): string {
method render (line 33) | public render(context: Oni.BufferLayerRenderContext): JSX.Element {
method dispose (line 37) | public dispose(): void {
type ISnippetBufferLayerViewProps (line 47) | interface ISnippetBufferLayerViewProps {
type ISnippetBufferLayerViewState (line 74) | interface ISnippetBufferLayerViewState {
class SnippetBufferLayerView (line 79) | class SnippetBufferLayerView extends React.PureComponent<
method constructor (line 85) | constructor(props: ISnippetBufferLayerViewProps) {
method componentDidMount (line 95) | public componentDidMount(): void {
method componentWillUnmount (line 108) | public componentWillUnmount(): void {
method render (line 112) | public render(): JSX.Element {
method _cleanup (line 196) | private _cleanup(): void {
FILE: browser/src/Services/Snippets/SnippetCompletionProvider.ts
class SnippetCompletionProvider (line 26) | class SnippetCompletionProvider implements ICompletionsRequestor {
method constructor (line 27) | constructor(private _snippetManager: SnippetManager) {}
method getCompletions (line 29) | public async getCompletions(
method getCompletionDetails (line 54) | public async getCompletionDetails(
FILE: browser/src/Services/Snippets/SnippetManager.ts
class SnippetManager (line 21) | class SnippetManager implements Oni.Snippets.SnippetManager {
method isSnippetActive (line 29) | public get isSnippetActive(): boolean {
method constructor (line 33) | constructor(private _configuration: Configuration, private _editorMana...
method getSnippetsForLanguage (line 46) | public async getSnippetsForLanguage(language: string): Promise<Oni.Sni...
method registerSnippetProvider (line 50) | public registerSnippetProvider(snippetProvider: Oni.Snippets.SnippetPr...
method insertSnippet (line 57) | public async insertSnippet(snippet: string): Promise<void> {
method nextPlaceholder (line 93) | public async nextPlaceholder(): Promise<void> {
method previousPlaceholder (line 99) | public async previousPlaceholder(): Promise<void> {
method cancel (line 105) | public async cancel(): Promise<void> {
method _cleanupAfterSession (line 119) | private _cleanupAfterSession(): void {
FILE: browser/src/Services/Snippets/SnippetProvider.ts
class CompositeSnippetProvider (line 19) | class CompositeSnippetProvider implements Oni.Snippets.SnippetProvider {
method constructor (line 22) | constructor(private _configuration: Configuration) {}
method registerProvider (line 24) | public registerProvider(provider: Oni.Snippets.SnippetProvider): void {
method getSnippets (line 28) | public async getSnippets(language: string): Promise<Oni.Snippets.Snipp...
type ISnippetPluginContribution (line 43) | interface ISnippetPluginContribution {
class PluginSnippetProvider (line 49) | class PluginSnippetProvider implements Oni.Snippets.SnippetProvider {
method constructor (line 52) | constructor(private _pluginManager: PluginManager) {}
method getSnippets (line 54) | public async getSnippets(language: string): Promise<Oni.Snippets.Snipp...
method _loadSnippetsFromFile (line 83) | private async _loadSnippetsFromFile(snippetFilePath: string): Promise<...
type KeyToSnippet (line 112) | interface KeyToSnippet {
FILE: browser/src/Services/Snippets/SnippetSession.ts
type IMirrorCursorUpdateEvent (line 66) | interface IMirrorCursorUpdateEvent {
class SnippetSession (line 91) | class SnippetSession {
method buffer (line 111) | public get buffer(): IBuffer {
method onCancel (line 115) | public get onCancel(): IEvent<void> {
method onCursorMoved (line 119) | public get onCursorMoved(): IEvent<IMirrorCursorUpdateEvent> {
method position (line 123) | public get position(): types.Position {
method lines (line 127) | public get lines(): string[] {
method constructor (line 131) | constructor(private _editor: Oni.Editor, private _snippetString: strin...
method start (line 133) | public async start(): Promise<void> {
method nextPlaceholder (line 186) | public async nextPlaceholder(): Promise<void> {
method previousPlaceholder (line 208) | public async previousPlaceholder(): Promise<void> {
method setPlaceholderValue (line 220) | public async setPlaceholderValue(index: number, val: string): Promise<...
method updateCursorPosition (line 237) | public async updateCursorPosition(): Promise<void> {
method getLatestCursors (line 292) | public getLatestCursors(): IMirrorCursorUpdateEvent {
method synchronizeUpdatedPlaceholders (line 298) | public async synchronizeUpdatedPlaceholders(): Promise<void> {
method _finish (line 334) | private _finish(): void {
method _getBoundsForPlaceholder (line 338) | private _getBoundsForPlaceholder(
method _updateSnippet (line 362) | private async _updateSnippet(): Promise<void> {
method _highlightPlaceholder (line 375) | private async _highlightPlaceholder(currentPlaceholder: OniSnippetPlac...
FILE: browser/src/Services/Snippets/SnippetVariableResolver.ts
class SnippetVariableResolver (line 13) | class SnippetVariableResolver implements VariableResolver {
method constructor (line 16) | constructor(private _buffer: Oni.Buffer) {
method resolve (line 51) | public resolve(variable: Variable): string {
FILE: browser/src/Services/Snippets/UserSnippetProvider.ts
constant GLOBAL_SNIPPET_NAME (line 20) | const GLOBAL_SNIPPET_NAME = "global_snippets"
class UserSnippetProvider (line 36) | class UserSnippetProvider implements Oni.Snippets.SnippetProvider {
method constructor (line 42) | constructor(
method getSnippets (line 61) | public async getSnippets(language: string): Promise<Oni.Snippets.Snipp...
method getUserSnippetFilePath (line 68) | public getUserSnippetFilePath(language: string): string {
method _addCommandForLanguage (line 73) | private _addCommandForLanguage(language: string): void {
method _editSnippetFile (line 87) | private async _editSnippetFile(language: string): Promise<void> {
method _startWatchingSnippetsFolderIfExists (line 106) | private _startWatchingSnippetsFolderIfExists(): void {
method _getSnippetFolder (line 125) | private _getSnippetFolder(): string {
method _getSnippetForLanguage (line 132) | private async _getSnippetForLanguage(language: string): Promise<Oni.Sn...
FILE: browser/src/Services/StatusBar.ts
type StatusBarAlignment (line 18) | enum StatusBarAlignment {
class StatusBarItem (line 23) | class StatusBarItem implements Oni.StatusBarItem {
method constructor (line 30) | constructor(
method show (line 44) | public show(): void {
method hide (line 49) | public hide(): void {
method setContents (line 54) | public setContents(element: any): void {
method dispose (line 59) | public dispose(): void {
class StatusBar (line 68) | class StatusBar implements Oni.StatusBar {
method constructor (line 71) | constructor(private _configuration: Configuration) {}
method getItem (line 73) | public getItem(globalId: string): Oni.StatusBarItem {
method createItem (line 77) | public createItem(alignment: StatusBarAlignment, globalId?: string): O...
FILE: browser/src/Services/SyntaxHighlighting/Definitions.ts
type HighlightInfo (line 5) | interface HighlightInfo {
FILE: browser/src/Services/SyntaxHighlighting/GrammarLoader.ts
type IGrammarLoader (line 7) | interface IGrammarLoader {
type ExtensionToGrammarMap (line 11) | interface ExtensionToGrammarMap {
class GrammarLoader (line 31) | class GrammarLoader implements IGrammarLoader {
method constructor (line 34) | constructor(private _registry: Registry = new Registry()) {}
method getGrammarForLanguage (line 36) | public async getGrammarForLanguage(language: string, extension: string...
FILE: browser/src/Services/SyntaxHighlighting/ISyntaxHighlighter.ts
type ISyntaxHighlighter (line 12) | interface ISyntaxHighlighter extends IDisposable {
FILE: browser/src/Services/SyntaxHighlighting/SyntaxHighlightReconciler.ts
type IBufferWithSyntaxHighlighter (line 24) | interface IBufferWithSyntaxHighlighter extends Buffer {
type IEditorWithSyntaxHighlighter (line 31) | interface IEditorWithSyntaxHighlighter extends Editor {
class SyntaxHighlightReconciler (line 44) | class SyntaxHighlightReconciler {
method constructor (line 48) | constructor(private _editor: IEditorWithSyntaxHighlighter, private _to...
method update (line 50) | public update(state: ISyntaxHighlightState) {
method _mapTokensToHighlights (line 135) | private _mapTokensToHighlights(tokens: ISyntaxHighlightTokenInfo[]): H...
method _getHighlightGroupFromScope (line 144) | private _getHighlightGroupFromScope(scopes: string[]): TokenColor {
FILE: browser/src/Services/SyntaxHighlighting/SyntaxHighlightSelectors.ts
type SyntaxHighlightRange (line 11) | interface SyntaxHighlightRange {
FILE: browser/src/Services/SyntaxHighlighting/SyntaxHighlighting.ts
class SyntaxHighlighter (line 39) | class SyntaxHighlighter implements ISyntaxHighlighter {
method constructor (line 48) | constructor(private _editor: NeovimEditor, private _tokenColors: Token...
method notifyViewportChanged (line 65) | public notifyViewportChanged(
method notifyColorschemeRedraw (line 96) | public async notifyColorschemeRedraw(bufferId: string) {
method notifyBufferUpdate (line 100) | public async notifyBufferUpdate(evt: Oni.EditorBufferChangedEventArgs)...
method getHighlightTokenAt (line 124) | public getHighlightTokenAt(
method dispose (line 144) | public dispose(): void {
class NullSyntaxHighlighter (line 156) | class NullSyntaxHighlighter implements ISyntaxHighlighter {
method notifyBufferUpdate (line 157) | public notifyBufferUpdate(evt: Oni.EditorBufferChangedEventArgs): Prom...
method getHighlightTokenAt (line 161) | public getHighlightTokenAt(
method notifyColorschemeRedraw (line 168) | public notifyColorschemeRedraw(id: string): void {
method notifyViewportChanged (line 172) | public notifyViewportChanged(
method dispose (line 180) | public dispose(): void {} // tslint:disable-line
FILE: browser/src/Services/SyntaxHighlighting/SyntaxHighlightingPeriodicJob.ts
constant SYNTAX_JOB_BUDGET (line 19) | const SYNTAX_JOB_BUDGET = 10 // Budget in milliseconds - time to allow t...
class SyntaxHighlightingPeriodicJob (line 21) | class SyntaxHighlightingPeriodicJob implements IPeriodicJob {
method constructor (line 22) | constructor(
method execute (line 30) | public execute(): boolean {
method _tokenizeFirstDirtyLine (line 68) | private _tokenizeFirstDirtyLine(
FILE: browser/src/Services/SyntaxHighlighting/SyntaxHighlightingStore.ts
type ISyntaxHighlightTokenInfo (line 24) | interface ISyntaxHighlightTokenInfo {
type ISyntaxHighlightLineInfo (line 29) | interface ISyntaxHighlightLineInfo {
type SyntaxHighlightLines (line 39) | interface SyntaxHighlightLines {
type InsertModeLineState (line 44) | interface InsertModeLineState {
type IBufferSyntaxHighlightState (line 50) | interface IBufferSyntaxHighlightState {
type ISyntaxHighlightState (line 65) | interface ISyntaxHighlightState {
type ISyntaxHighlightAction (line 75) | type ISyntaxHighlightAction =
FILE: browser/src/Services/SyntaxHighlighting/TokenGenerator.tsx
type IGrammarToken (line 8) | interface IGrammarToken {
type IHighlight (line 13) | interface IHighlight {
type IGetTokens (line 20) | interface IGetTokens {
type IGrammarPerLine (line 26) | interface IGrammarPerLine {
type IGrammarTokens (line 30) | interface IGrammarTokens {
FILE: browser/src/Services/SyntaxHighlighting/TokenScorer.ts
type TokenRanking (line 3) | interface TokenRanking {
class TokenScorer (line 14) | class TokenScorer {
method rankTokenScopes (line 46) | public rankTokenScopes(scopes: string[], themeColors: TokenColor[]): T...
method _determinePrecedence (line 99) | private _determinePrecedence(...tokens: TokenColor[]): TokenColor {
method _getMatchingToken (line 117) | private _getMatchingToken(scope: string, theme: TokenColor[]): TokenCo...
FILE: browser/src/Services/SyntaxHighlighting/TokenThemeProvider.tsx
type TokenFunc (line 107) | type TokenFunc = (theme: INewTheme) => string
type INewTheme (line 109) | interface INewTheme extends IThemeColors {
type IDefaultMap (line 115) | interface IDefaultMap {
type RenderProps (line 119) | interface RenderProps {
type IProps (line 124) | interface IProps {
type IState (line 131) | interface IState {
type IGenerateTokenArgs (line 136) | interface IGenerateTokenArgs {
type Style (line 141) | type Style = "bold" | "italic" | "foreground" | "background"
class TokenThemeProvider (line 154) | class TokenThemeProvider extends React.Component<IProps, IState> {
method componentDidMount (line 162) | public componentDidMount() {
method createThemeFromTokens (line 172) | public createThemeFromTokens(tokens: TokenColor[]) {
method generateTokens (line 191) | public generateTokens({ defaultMap = defaultsToMap, defaultTokens }: I...
method generateSingleToken (line 207) | public generateSingleToken(name: string, { settings }: TokenColor) {
method render (line 294) | public render() {
FILE: browser/src/Services/Tasks.ts
type ITask (line 22) | interface ITask {
type ITaskProvider (line 31) | interface ITaskProvider {
class Tasks (line 35) | class Tasks {
method constructor (line 40) | constructor(private _menuManager: MenuManager) {}
method registerTaskProvider (line 45) | public registerTaskProvider(taskProvider: ITaskProvider): void {
method show (line 49) | public show(): void {
method _onItemSelected (line 68) | private async _onItemSelected(selectedOption: Oni.Menu.MenuOption): Pr...
method _refreshTasks (line 91) | private async _refreshTasks(): Promise<void> {
FILE: browser/src/Services/Themes/ThemeLoader.ts
type IThemeLoader (line 14) | interface IThemeLoader {
class DefaultLoader (line 19) | class DefaultLoader implements IThemeLoader {
method getAllThemes (line 20) | public async getAllThemes(): Promise<IThemeContribution[]> {
method getThemeByName (line 24) | public async getThemeByName(name: string): Promise<IThemeMetadata> {
class PluginThemeLoader (line 29) | class PluginThemeLoader implements IThemeLoader {
method constructor (line 30) | constructor(private _pluginManager: PluginManager) {}
method getAllThemes (line 32) | public async getAllThemes(): Promise<IThemeContribution[]> {
method getThemeByName (line 50) | public async getThemeByName(name: string): Promise<IThemeMetadata> {
method _loadThemeFromFile (line 62) | private async _loadThemeFromFile(themeJsonPath: string): Promise<IThem...
FILE: browser/src/Services/Themes/ThemeManager.ts
type IThemeColors (line 18) | interface IThemeColors {
type VimBackground (line 311) | type VimBackground = "light" | "dark"
type IThemeMetadata (line 313) | interface IThemeMetadata {
class ThemeManager (line 328) | class ThemeManager {
method activeTheme (line 338) | public get activeTheme(): IThemeMetadata {
method constructor (line 342) | constructor(private _themeLoader: IThemeLoader) {}
method getAllThemes (line 344) | public async getAllThemes(): Promise<IThemeContribution[]> {
method setTheme (line 348) | public async setTheme(name: string): Promise<void> {
method notifyVimThemeChanged (line 375) | public async notifyVimThemeChanged(
method onThemeChanged (line 401) | public get onThemeChanged(): IEvent<void> {
method getColors (line 405) | public getColors(): IThemeColors {
method _updateTheme (line 409) | private _updateTheme(theme: IThemeMetadata): void {
FILE: browser/src/Services/TokenColors.ts
type TokenColor (line 14) | interface TokenColor {
type ThemeToken (line 21) | interface ThemeToken {
type TokenColorStyle (line 27) | interface TokenColorStyle {
class TokenColors (line 34) | class TokenColors implements IDisposable {
method tokenColors (line 41) | public get tokenColors(): TokenColor[] {
method onTokenColorsChanged (line 45) | public get onTokenColorsChanged(): IEvent<void> {
method constructor (line 49) | constructor(private _configuration: Configuration, private _themeManag...
method setDefaultTokenColors (line 65) | public setDefaultTokenColors(tokenColors: TokenColor[]): void {
method dispose (line 70) | public dispose(): void {
method _updateTokenColors (line 75) | private _updateTokenColors(): void {
method _convertThemeTokenScopes (line 104) | private _convertThemeTokenScopes(tokens: ThemeToken[]) {
method _mergeTokenColors (line 125) | private _mergeTokenColors(tokens: {
method _mergeSettings (line 151) | private _mergeSettings(prev: ThemeToken, next: ThemeToken) {
FILE: browser/src/Services/TypingPredictionManager.ts
type IPredictedCharacter (line 11) | interface IPredictedCharacter {
type ITypingPrediction (line 16) | interface ITypingPrediction {
class TypingPredictionManager (line 23) | class TypingPredictionManager {
method onPredictionsChanged (line 36) | public get onPredictionsChanged(): IEvent<ITypingPrediction> {
method enable (line 40) | public enable(): void {
method disable (line 44) | public disable(): void {
method setCursorPosition (line 48) | public setCursorPosition(screen: IScreen): void {
method addPrediction (line 87) | public addPrediction(character: string): void {
method clearAllPredictions (line 105) | public clearAllPredictions(): void {
method _notifyPredictionsChanged (line 111) | private _notifyPredictionsChanged(): void {
FILE: browser/src/Services/UnhandledErrorMonitor.ts
class UnhandledErrorMonitor (line 14) | class UnhandledErrorMonitor {
method onUnhandledError (line 22) | public get onUnhandledError(): IEvent<Error> {
method onUnhandledRejection (line 26) | public get onUnhandledRejection(): IEvent<string> {
method constructor (line 30) | constructor() {
method start (line 53) | public start(): void {
FILE: browser/src/Services/VersionControl/VersionControlBlameLayer.tsx
type TransitionStates (line 14) | type TransitionStates = "entering" | "entered" | "exiting"
type IBlamePosition (line 16) | interface IBlamePosition {
type ICanFit (line 22) | interface ICanFit {
type ILineDetails (line 28) | interface ILineDetails {
type IProps (line 33) | interface IProps extends LayerContextWithCursor {
type IState (line 44) | interface IState {
type IContainerProps (line 52) | interface IContainerProps {
class Blame (line 103) | class Blame extends React.PureComponent<IProps, IState> {
method getDerivedStateFromProps (line 107) | public static getDerivedStateFromProps(nextProps: IProps, prevState: I...
method componentDidMount (line 136) | public async componentDidMount() {
method componentDidUpdate (line 148) | public async componentDidUpdate(prevProps: IProps, prevState: IState) {
method componentWillUnmount (line 158) | public componentWillUnmount() {
method componentDidCatch (line 162) | public componentDidCatch(error: Error) {
method getLastEmptyLine (line 176) | public getLastEmptyLine() {
method calculatePosition (line 201) | public calculatePosition(canFit: boolean) {
method formatCommitDate (line 227) | public formatCommitDate(timestamp: string) {
method getPosition (line 231) | public getPosition(positionToRender?: Position): IBlamePosition {
method render (line 298) | public render() {
class VersionControlBlameLayer (line 323) | class VersionControlBlameLayer implements BufferLayer {
method constructor (line 324) | constructor(
method id (line 339) | get id() {
method getConfigOpts (line 353) | public getConfigOpts() {
method render (line 361) | public render(context: LayerContextWithCursor) {
method _isActive (line 383) | private _isActive() {
FILE: browser/src/Services/VersionControl/VersionControlManager.tsx
type ISendNotificationsArgs (line 14) | interface ISendNotificationsArgs {
type ISendVCSNotification (line 21) | type ISendVCSNotification = (args: ISendNotificationsArgs) => void
class VersionControlManager (line 23) | class VersionControlManager {
method constructor (line 32) | constructor(
method providers (line 38) | public get providers() {
method activeProvider (line 42) | public get activeProvider(): VersionControlProvider {
method registerProvider (line 46) | public async registerProvider(provider: VersionControlProvider): Promi...
method deactivateProvider (line 70) | public deactivateProvider(): void {
method handleProviderStatus (line 80) | public async handleProviderStatus(newProvider: VersionControlProvider)...
method getCompatibleProvider (line 104) | private async getCompatibleProvider(dir: string): Promise<VersionContr...
method _initialize (line 126) | private async _initialize() {
method _setupSubscriptions (line 164) | private _setupSubscriptions() {
method _notifyOfError (line 273) | private _notifyOfError(error: Error) {
function init (line 298) | function init() {
FILE: browser/src/Services/VersionControl/VersionControlPane.tsx
type IDsMap (line 13) | interface IDsMap {
class VersionControlPane (line 21) | class VersionControlPane {
method id (line 22) | public get id() {
method title (line 26) | public get title() {
method constructor (line 38) | constructor(
method enter (line 64) | public async enter() {
method leave (line 69) | public leave() {
method render (line 180) | public render() {
method _getCurrentCommitMessage (line 228) | private _getCurrentCommitMessage() {
method _registerCommands (line 233) | private _registerCommands() {
FILE: browser/src/Services/VersionControl/VersionControlProvider.ts
type Statuses (line 4) | enum Statuses {
type FileStatusChangedEvent (line 10) | type FileStatusChangedEvent = Array<{
type BranchChangedEvent (line 15) | type BranchChangedEvent = string
type StagedFilesChangedEvent (line 16) | type StagedFilesChangedEvent = string
type StatusResult (line 18) | interface StatusResult {
type BlameArgs (line 31) | interface BlameArgs {
type Blame (line 37) | interface Blame {
type VersionControlProvider (line 52) | interface VersionControlProvider {
type DiffResultTextFile (line 84) | interface DiffResultTextFile {
type DiffResultBinaryFile (line 92) | interface DiffResultBinaryFile {
type Diff (line 99) | interface Diff {
type Commits (line 105) | interface Commits {
type DefaultLogFields (line 119) | interface DefaultLogFields {
type ListLogSummary (line 127) | interface ListLogSummary<T = DefaultLogFields> {
type Logs (line 133) | type Logs = ListLogSummary<DefaultLogFields>
type Summary (line 134) | type Summary = StatusResult
type SupportedProviders (line 135) | type SupportedProviders = "git" | "svn"
FILE: browser/src/Services/VersionControl/VersionControlStore.ts
type PrevCommits (line 4) | interface PrevCommits extends Commits {
type ICommit (line 8) | interface ICommit {
type ProviderActions (line 15) | type ProviderActions = "commit" | "pull" | "fetch" | "stage"
type VersionControlState (line 17) | interface VersionControlState {
type IGenericAction (line 34) | interface IGenericAction<T, P = undefined> {
type ISelectAction (line 76) | type ISelectAction = IGenericAction<"SELECT", { selected: string }>
type ILoadingAction (line 77) | type ILoadingAction = IGenericAction<"LOADING", { loading: boolean; type...
type IActivateAction (line 78) | type IActivateAction = IGenericAction<"ACTIVATE">
type IDeactivateAction (line 79) | type IDeactivateAction = IGenericAction<"DEACTIVATE">
type IToggleHelpAction (line 80) | type IToggleHelpAction = IGenericAction<"TOGGLE_HELP">
type IEnterAction (line 81) | type IEnterAction = IGenericAction<"ENTER">
type ILeaveAction (line 82) | type ILeaveAction = IGenericAction<"LEAVE">
type IErrorAction (line 83) | type IErrorAction = IGenericAction<"ERROR">
type IStatusAction (line 84) | type IStatusAction = IGenericAction<"STATUS", { status: StatusResult }>
type ILogAction (line 85) | type ILogAction = IGenericAction<"LOG", { logs: Logs }>
type ICommitStartAction (line 86) | type ICommitStartAction = IGenericAction<"COMMIT_START", { files: string...
type ICommitCancelAction (line 87) | type ICommitCancelAction = IGenericAction<"COMMIT_CANCEL">
type ICommitSuccessAction (line 88) | type ICommitSuccessAction = IGenericAction<"COMMIT_SUCCESS", { commit: C...
type ICommitFailAction (line 89) | type ICommitFailAction = IGenericAction<"COMMIT_FAIL">
type IUpdateCommitMessageAction (line 90) | type IUpdateCommitMessageAction = IGenericAction<"UPDATE_COMMIT_MESSAGE"...
type IAction (line 91) | type IAction =
type IVersionControlActions (line 108) | interface IVersionControlActions {
function reducer (line 126) | function reducer(state: VersionControlState, action: IAction) {
FILE: browser/src/Services/VersionControl/VersionControlView.tsx
type IStateProps (line 25) | interface IStateProps {
type IDispatchProps (line 41) | interface IDispatchProps {
type IProps (line 47) | interface IProps {
type ConnectedProps (line 56) | type ConnectedProps = IProps & IStateProps & IDispatchProps
type State (line 58) | interface State {
class VersionControlView (line 65) | class VersionControlView extends React.Component<ConnectedProps, State> {
method componentDidMount (line 73) | public async componentDidMount() {
method componentDidCatch (line 77) | public async componentDidCatch(e: Error) {
method insertIf (line 117) | public insertIf(condition: boolean, element: string[]) {
method render (line 145) | public render() {
FILE: browser/src/Services/VimConfigurationSynchronizer.ts
type IConfigurationValues (line 12) | interface IConfigurationValues {
FILE: browser/src/Services/WindowManager/LinearSplitProvider.ts
class LinearSplitProvider (line 27) | class LinearSplitProvider implements IWindowSplitProvider {
method constructor (line 28) | constructor(
method contains (line 33) | public contains(split: IAugmentedSplitInfo): boolean {
method close (line 37) | public close(split: IAugmentedSplitInfo): boolean {
method split (line 55) | public split(
method move (line 113) | public move(split: IAugmentedSplitInfo, direction: Direction): IAugmen...
method getState (line 162) | public getState(): ISplitInfo<IAugmentedSplitInfo> {
method _canHandleMove (line 174) | private _canHandleMove(direction: Direction): boolean {
method _getProviderForSplit (line 189) | private _getProviderForSplit(split: IAugmentedSplitInfo): IWindowSplit...
FILE: browser/src/Services/WindowManager/RelationalSplitNavigator.ts
type WindowSplitRelationship (line 10) | interface WindowSplitRelationship {
class RelationalSplitNavigator (line 16) | class RelationalSplitNavigator implements IWindowSplitNavigator {
method setRelationship (line 20) | public setRelationship(
method contains (line 42) | public contains(split: IAugmentedSplitInfo): boolean {
method move (line 46) | public move(split: IAugmentedSplitInfo, direction: Direction): IAugmen...
method _getFurthestSplitInDirection (line 81) | private _getFurthestSplitInDirection(
method _getContainingSplit (line 99) | private _getContainingSplit(split: IAugmentedSplitInfo): IWindowSplitN...
method _addToProvidersIfNeeded (line 104) | private _addToProvidersIfNeeded(provider: IWindowSplitNavigator): void {
FILE: browser/src/Services/WindowManager/SingleSplitProvider.ts
class SingleSplitProvider (line 15) | class SingleSplitProvider implements IWindowSplitProvider {
method constructor (line 16) | constructor(private _split: IAugmentedSplitInfo) {}
method contains (line 18) | public contains(split: IAugmentedSplitInfo): boolean {
method move (line 22) | public move(split: IAugmentedSplitInfo, direction: Direction): IAugmen...
method split (line 30) | public split(split: IAugmentedSplitInfo, direction: SplitDirection): b...
method close (line 34) | public close(split: IAugmentedSplitInfo): boolean {
method getState (line 38) | public getState(): SplitOrLeaf<IAugmentedSplitInfo> {
FILE: browser/src/Services/WindowManager/WindowDock.ts
type DockStateGetter (line 7) | type DockStateGetter = () => IAugmentedSplitInfo[]
class WindowDockNavigator (line 9) | class WindowDockNavigator implements IWindowSplitNavigator {
method constructor (line 10) | constructor(private _stateGetter: DockStateGetter) {}
method contains (line 12) | public contains(split: IAugmentedSplitInfo): boolean {
method move (line 17) | public move(startSplit: IAugmentedSplitInfo, direction: Direction): IA...
FILE: browser/src/Services/WindowManager/WindowManager.ts
class WindowSplitHandle (line 31) | class WindowSplitHandle implements Oni.WindowSplitHandle {
method id (line 32) | public get id(): string {
method isVisible (line 36) | public get isVisible(): boolean {
method isFocused (line 40) | public get isFocused(): boolean {
method constructor (line 44) | constructor(
method hide (line 50) | public hide(): void {
method show (line 59) | public show(): void {
method focus (line 66) | public focus(): void {
method setSize (line 71) | public setSize(size: number): void {
method close (line 75) | public close(): void {
class AugmentedWindow (line 80) | class AugmentedWindow implements IAugmentedSplitInfo {
method id (line 81) | public get id(): string {
method constructor (line 85) | constructor(private _id: string, private _innerSplit: Oni.IWindowSplit...
method innerSplit (line 87) | public get innerSplit(): Oni.IWindowSplit {
method render (line 91) | public render(): JSX.Element {
method enter (line 95) | public enter(): void {
method leave (line 101) | public leave(): void {
class WindowManager (line 108) | class WindowManager {
method onUnhandledMove (line 124) | public get onUnhandledMove(): IEvent<Direction> {
method onFocusChanged (line 130) | public get onFocusChanged(): IEvent<ISplitInfo<Oni.IWindowSplit>> {
method splitRoot (line 134) | public get splitRoot(): ISplitInfo<Oni.IWindowSplit> {
method store (line 138) | public get store(): Store<WindowState> {
method activeSplitHandle (line 142) | get activeSplitHandle(): WindowSplitHandle {
method activeSplit (line 146) | private get activeSplit(): IAugmentedSplitInfo {
method constructor (line 156) | constructor() {
method createSplit (line 179) | public createSplit(
method getSplitHandle (line 221) | public getSplitHandle(split: Oni.IWindowSplit): WindowSplitHandle {
method move (line 226) | public move(direction: Direction): void {
method moveLeft (line 248) | public moveLeft(): void {
method moveRight (line 252) | public moveRight(): void {
method moveUp (line 256) | public moveUp(): void {
method moveDown (line 260) | public moveDown(): void {
method close (line 264) | public close(splitId: string) {
method swapToPreviousSplit (line 271) | public swapToPreviousSplit(splitId: string) {
method focusSplit (line 298) | public focusSplit(splitId: string): void {
method _getAugmentedWindowSplitFromSplit (line 303) | private _getAugmentedWindowSplitFromSplit(split: Oni.IWindowSplit): IA...
method _focusNewSplit (line 308) | private _focusNewSplit(newSplit: any): void {
FILE: browser/src/Services/WindowManager/WindowManagerStore.ts
type IAugmentedSplitInfo (line 14) | interface IAugmentedSplitInfo extends Oni.IWindowSplit {
type SplitOrLeaf (line 25) | type SplitOrLeaf<T> = ISplitInfo<T> | ISplitLeaf<T>
type ISplitInfo (line 27) | interface ISplitInfo<T> {
type ISplitLeaf (line 33) | interface ISplitLeaf<T> {
type WindowActions (line 38) | type WindowActions =
type DockWindows (line 61) | interface DockWindows {
type WindowState (line 72) | interface WindowState {
FILE: browser/src/Services/WindowManager/index.ts
type Direction (line 20) | type Direction = "up" | "down" | "left" | "right"
type SplitDirection (line 21) | type SplitDirection = "horizontal" | "vertical"
type IWindowSplitNavigator (line 44) | interface IWindowSplitNavigator {
type IWindowSplitProvider (line 56) | interface IWindowSplitProvider extends IWindowSplitNavigator {
FILE: browser/src/Services/WindowManager/layoutFromSplitInfo.ts
type LayoutResultInfo (line 11) | interface LayoutResultInfo {
type LayoutResult (line 16) | interface LayoutResult {
FILE: browser/src/Services/Workspace/Workspace.ts
class Workspace (line 35) | class Workspace implements Oni.Workspace.Api {
method activeWorkspace (line 43) | public get activeWorkspace(): string {
method constructor (line 47) | constructor(private _editorManager: EditorManager, private _configurat...
method onDirectoryChanged (line 58) | public get onDirectoryChanged(): IEvent<string> {
method changeDirectory (line 62) | public async changeDirectory(newDirectory: string) {
method applyEdits (line 73) | public async applyEdits(edits: types.WorkspaceEdit): Promise<void> {
method onFocusGained (line 107) | public get onFocusGained(): IEvent<Oni.Buffer> {
method onFocusLost (line 111) | public get onFocusLost(): IEvent<Oni.Buffer> {
method openFolder (line 140) | public openFolder(): void {
method autoDetectWorkspace (line 160) | public autoDetectWorkspace(filePath: string): void {
FILE: browser/src/Services/Workspace/WorkspaceConfiguration.ts
class WorkspaceConfiguration (line 19) | class WorkspaceConfiguration {
method activeWorkspaceConfiguration (line 22) | public get activeWorkspaceConfiguration(): string {
method constructor (line 26) | constructor(
method _checkWorkspaceConfiguration (line 38) | private _checkWorkspaceConfiguration(): void {
method _removePreviousWorkspaceConfiguration (line 56) | private _removePreviousWorkspaceConfiguration(): void {
method _loadWorkspaceConfiguration (line 63) | private _loadWorkspaceConfiguration(configurationPath: string): void {
FILE: browser/src/UI/Icon.tsx
type IconSize (line 11) | enum IconSize {
type IconProps (line 21) | interface IconProps {
class Icon (line 29) | class Icon extends React.PureComponent<IconProps, {}> {
method render (line 30) | public render(): JSX.Element {
method _getClassForIconSize (line 38) | private _getClassForIconSize(size: IconSize): string {
FILE: browser/src/UI/Shell/OverlayView.tsx
type IOverlaysViewProps (line 13) | interface IOverlaysViewProps {
class OverlaysView (line 17) | class OverlaysView extends React.PureComponent<IOverlaysViewProps, {}> {
method render (line 18) | public render(): JSX.Element[] {
FILE: browser/src/UI/Shell/ShellActionCreators.ts
type DispatchFunction (line 16) | type DispatchFunction = (action: any) => void
type GetStateFunction (line 17) | type GetStateFunction = () => State.IState
function setConfigValue (line 108) | function setConfigValue<K extends keyof IConfigurationValues>(
FILE: browser/src/UI/Shell/ShellActions.ts
type ISetHasFocusAction (line 15) | interface ISetHasFocusAction {
type IEnterFullScreenAction (line 22) | interface IEnterFullScreenAction {
type ILeaveFullScreenAction (line 26) | interface ILeaveFullScreenAction {
type ISetLoadingCompleteAction (line 30) | interface ISetLoadingCompleteAction {
type ISetWindowTitleAction (line 34) | interface ISetWindowTitleAction {
type ISetColorsAction (line 41) | interface ISetColorsAction {
type IStatusBarShowAction (line 48) | interface IStatusBarShowAction {
type IStatusBarHideAction (line 58) | interface IStatusBarHideAction {
type IOverlayShowAction (line 65) | interface IOverlayShowAction {
type IOverlayHideAction (line 73) | interface IOverlayHideAction {
type ISetConfigurationValue (line 80) | interface ISetConfigurationValue<K extends keyof IConfigurationValues> {
type Action (line 88) | type Action<K extends keyof IConfigurationValues> = SimpleAction | Actio...
type SimpleAction (line 90) | type SimpleAction =
type ActionWithGeneric (line 102) | type ActionWithGeneric<K extends keyof IConfigurationValues> = ISetConfi...
FILE: browser/src/UI/Shell/ShellReducer.ts
function reducer (line 12) | function reducer<K extends keyof IConfigurationValues>(
FILE: browser/src/UI/Shell/ShellState.ts
type Errors (line 14) | interface Errors {
type IViewport (line 21) | interface IViewport {
type IToolTip (line 26) | interface IToolTip {
type StatusBar (line 32) | interface StatusBar {
type Overlays (line 35) | interface Overlays {
type IState (line 39) | interface IState {
type IOverlay (line 56) | interface IOverlay {
type StatusBarAlignment (line 61) | enum StatusBarAlignment {
type IStatusBarItem (line 66) | interface IStatusBarItem {
function readConf (line 73) | function readConf<K extends keyof IConfigurationValues>(
FILE: browser/src/UI/Shell/ShellView.tsx
type IShellViewComponentProps (line 26) | interface IShellViewComponentProps {
type IShellViewState (line 33) | interface IShellViewState {
class ShellView (line 40) | class ShellView extends React.PureComponent<IShellViewComponentProps, IS...
method constructor (line 41) | constructor(props: IShellViewComponentProps) {
method render (li
Condensed preview — 800 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,440K chars).
[
{
"path": ".editorconfig",
"chars": 147,
"preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 4\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ni"
},
{
"path": ".gitattributes",
"chars": 275,
"preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Declare text files that will alw"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 292,
"preview": "<!-- Want this issue prioritized? Please consider supporting the project and becoming an insider!\n👉 https://www.onivim."
},
{
"path": ".github/config.yml",
"chars": 759,
"preview": "# Comment to be posted to on first time issues\nnewIssueWelcomeComment: >\n Hello and welcome to the Oni repository! Than"
},
{
"path": ".gitignore",
"chars": 2340,
"preview": "# Yarn\nyarn.lock\n\n.DS_Store\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grun"
},
{
"path": ".gitmodules",
"chars": 661,
"preview": "[submodule \"vim/default/bundle/targets.vim\"]\n\tpath = vim/default/bundle/targets.vim\n\turl = https://github.com/wellle/tar"
},
{
"path": ".npmignore",
"chars": 67,
"preview": "# Empty .npmignore to allow for including .gitignore'd built files\n"
},
{
"path": ".nvmrc",
"chars": 2,
"preview": "9\n"
},
{
"path": ".oni/config.js",
"chars": 592,
"preview": "// For more information on customizing Oni,\n// check out our wiki page:\n// https://github.com/onivim/oni/wiki/Configurat"
},
{
"path": ".oni/templates/UnitTestTemplate.ts.template",
"chars": 206,
"preview": "/**\n * ${TM_FILENAME_BASE}.ts\n */\n\nimport * as assert from \"assert\"\n\ndescribe(\"${TM_FILENAME_BASE}\", () => {\n it(\"${1"
},
{
"path": ".prettierignore",
"chars": 68,
"preview": "package.json\nvim/core/oni-plugin-typescript/package.json\nlib/yarn/*\n"
},
{
"path": ".prettierrc",
"chars": 108,
"preview": "{\n \"printWidth\": 100,\n \"semi\": false,\n \"singleQuote\": false,\n \"tabWidth\": 4,\n \"trailingComma\": \"all\"\n}\n"
},
{
"path": ".travis.yml",
"chars": 4093,
"preview": "sudo: required\ndist: trusty\nlanguage: node_js\n\nbranches:\n only:\n - master\n - /^release.*/\n\ncache:\n directories:\n - "
},
{
"path": ".vscode/launch.json",
"chars": 1419,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n // Debug files that configure Electron (main.js,"
},
{
"path": ".yarnrc",
"chars": 26,
"preview": "--add.ignore-engines true\n"
},
{
"path": "@types/color-normalize/index.d.ts",
"chars": 1383,
"preview": "type ColorInput =\n | string\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n "
},
{
"path": "@types/font-manager/index.d.ts",
"chars": 1503,
"preview": "type FontWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900\ntype FontWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9"
},
{
"path": "ACCOUNTING.md",
"chars": 456,
"preview": "# ONI\n\n## Accounting\n\nThis file will contain a monthly report including:\n\n* Incoming contributions\n* How the contributio"
},
{
"path": "BACKERS.md",
"chars": 5210,
"preview": "# Sponsors & Backers\n\nOni is an MIT-licensed open-source project. It's an independent project without the backing of a l"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3212,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 8948,
"preview": "# Contribute\n\n## Introduction\n\nFirst, thank you for considering contributing to oni! It's people like you that make the "
},
{
"path": "LICENSE",
"chars": 1057,
"preview": "MIT License\n\nCopyright (c) 2016 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this s"
},
{
"path": "README.md",
"chars": 9405,
"preview": "---\n__NOTE:__ This repository is unmaintained - we are focusing on [Onivim 2](https://github.com/onivim/oni2) and [libvi"
},
{
"path": "appveyor.yml",
"chars": 1013,
"preview": "# Test against the latest version of this Node.js version\nenvironment:\n nodejs_version: \"8\"\n\nos: unstable\n\nbranches:\n"
},
{
"path": "browser/src/App.ts",
"chars": 16270,
"preview": "/**\n * App.ts\n *\n * Entry point for the Oni application - managing the overall lifecycle\n */\n\nimport { ipcRenderer, remo"
},
{
"path": "browser/src/CSS.ts",
"chars": 325,
"preview": "/**\n * CSS.ts\n *\n * Entry point for loading all of Oni's CSS\n */\n\nexport const activate = () => {\n require(\"./UI/comp"
},
{
"path": "browser/src/Constants.ts",
"chars": 278,
"preview": "/**\n * Constants.ts\n */\n\n// Performance Constants\nexport namespace Delay {\n export const INSTANT = 1\n export const"
},
{
"path": "browser/src/Editor/BufferHighlights.ts",
"chars": 2472,
"preview": "/**\n * BufferHighlights.ts\n *\n * Helpers to manage buffer highlight state\n */\n\nimport * as SyntaxHighlighting from \"./.."
},
{
"path": "browser/src/Editor/BufferManager.ts",
"chars": 18789,
"preview": "/**\n * BufferManager.ts\n *\n * Helpers to manage buffer state\n */\n\nimport * as os from \"os\"\nimport * as types from \"vscod"
},
{
"path": "browser/src/Editor/Editor.ts",
"chars": 3764,
"preview": "/**\n * Interface that describes an Editor -\n * an editor handles rendering and input\n * for a specific window.\n */\n\nimpo"
},
{
"path": "browser/src/Editor/NeovimEditor/BufferLayerManager.ts",
"chars": 2283,
"preview": "/**\n * BufferLayerManager.ts\n *\n * BufferLayerManager tracks the lifecycle of 'buffer layers'\n */\n\nimport * as Oni from "
},
{
"path": "browser/src/Editor/NeovimEditor/CompletionMenu.ts",
"chars": 2638,
"preview": "/**\n * CompletionMenu.ts\n *\n * This is the completion menu that integrates with the completion providers\n * (which is pr"
},
{
"path": "browser/src/Editor/NeovimEditor/Definition.ts",
"chars": 1349,
"preview": "/**\n * Definition.ts\n */\n\nimport { Store } from \"redux\"\n\nimport * as Oni from \"oni-api\"\n\nimport * as Helpers from \"./../"
},
{
"path": "browser/src/Editor/NeovimEditor/FileDropHandler.tsx",
"chars": 1559,
"preview": "import * as React from \"react\"\n\ntype SetRef = (elem: HTMLElement) => void\n\ninterface IFileDropHandler {\n handleFiles:"
},
{
"path": "browser/src/Editor/NeovimEditor/HoverRenderer.tsx",
"chars": 5673,
"preview": "/**\n * Hover.tsx\n */\n\nimport * as Oni from \"oni-api\"\nimport * as os from \"os\"\nimport * as React from \"react\"\nimport * as"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimActiveWindow.tsx",
"chars": 873,
"preview": "/**\n * ActiveWindow.tsx\n *\n * Helper component that is always sized and positioned around the currently\n * active window"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimBufferLayersView.tsx",
"chars": 4369,
"preview": "/**\n * NeovimLayersView.tsx\n *\n * Renders layers above vim windows\n */\n\nimport * as React from \"react\"\nimport { connect "
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditor.tsx",
"chars": 48347,
"preview": "/**\n * NeovimEditor.ts\n *\n * Editor implementation for Neovim\n */\n\nimport * as os from \"os\"\nimport * as React from \"reac"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditorActions.ts",
"chars": 15093,
"preview": "/**\n * ActionCreators.ts\n *\n * Action Creators are relatively simple - they are just a function that returns an `Action`"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditorCommands.ts",
"chars": 7966,
"preview": "/**\n * NeovimEditorCommands\n *\n * Contextual commands for NeovimEditor\n *\n */\nimport * as os from \"os\"\n\nimport { clipboa"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditorLoadingOverlay.tsx",
"chars": 1172,
"preview": "/**\n * NeovimEditorLoadingOverlay\n *\n * Overlay shown over the editor window while initializing (loading Neovim)\n */\n\nim"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditorReducer.ts",
"chars": 12621,
"preview": "/**\n * Reducer.ts\n *\n * Top-level reducer for UI state transforms\n */\n\nimport * as State from \"./NeovimEditorStore\"\n\nimp"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditorSelectors.ts",
"chars": 3233,
"preview": "/**\n * Selectors.ts\n *\n * Selectors are basically helper methods for operating on the State\n * See Redux documents here "
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimEditorStore.ts",
"chars": 5022,
"preview": "/**\n * State.ts\n *\n * This file describes the Redux state of the app\n */\n\nimport * as types from \"vscode-languageserver-"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimInput.tsx",
"chars": 1897,
"preview": "/**\n * NeovimInput.tsx\n *\n * Layer responsible for handling Neovim input interactiosn\n */\n\nimport * as React from \"react"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimPopupMenu.tsx",
"chars": 2450,
"preview": "/**\n * NeovimPopupMenu.tsx\n *\n * Implementation of Neovim's popup menu\n */\n\nimport * as React from \"react\"\n\nimport * as "
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimRenderer.tsx",
"chars": 1974,
"preview": "/**\n * NeovimRenderer.tsx\n *\n * Layer responsible for invoking the INeovimRender strategy and applying to the DOM\n */\n\ni"
},
{
"path": "browser/src/Editor/NeovimEditor/NeovimSurface.tsx",
"chars": 4929,
"preview": "/**\n * NeovimSurface.tsx\n *\n * UI layer for the Neovim editor surface\n */\n\nimport * as React from \"react\"\nimport { conne"
},
{
"path": "browser/src/Editor/NeovimEditor/Rename.tsx",
"chars": 2970,
"preview": "/**\n * Rename.tsx\n */\n\nimport * as React from \"react\"\n\nimport * as Oni from \"oni-api\"\nimport * as Log from \"oni-core-log"
},
{
"path": "browser/src/Editor/NeovimEditor/Symbols.ts",
"chars": 6296,
"preview": "/**\n * CodeAction.ts\n *\n */\nimport * as _ from \"lodash\"\nimport { ErrorCodes } from \"vscode-jsonrpc/lib/messages\"\nimport "
},
{
"path": "browser/src/Editor/NeovimEditor/ToolTipsProvider.ts",
"chars": 661,
"preview": "import * as Oni from \"oni-api\"\n\nimport * as Actions from \"./NeovimEditorActions\"\n\nexport interface IToolTipsProvider {\n "
},
{
"path": "browser/src/Editor/NeovimEditor/WelcomeBufferLayer.tsx",
"chars": 20961,
"preview": "/**\n * NeovimEditor.ts\n *\n * IEditor implementation for Neovim\n */\n\nimport * as Oni from \"oni-api\"\nimport * as Log from "
},
{
"path": "browser/src/Editor/NeovimEditor/index.ts",
"chars": 31,
"preview": "export * from \"./NeovimEditor\"\n"
},
{
"path": "browser/src/Editor/NeovimEditor/markdown.ts",
"chars": 6493,
"preview": "import { unescape } from \"lodash\"\nimport * as marked from \"marked\"\n\nimport * as Log from \"oni-core-logging\"\nimport { IGr"
},
{
"path": "browser/src/Editor/OniEditor/ColorHighlightLayer.tsx",
"chars": 9591,
"preview": "import * as Color from \"color\"\nimport * as memoize from \"lodash/memoize\"\nimport * as Oni from \"oni-api\"\nimport * as Log "
},
{
"path": "browser/src/Editor/OniEditor/ImageBufferLayer.tsx",
"chars": 2294,
"preview": "/**\n * ImageBufferLayer.tsx\n */\n\nimport * as React from \"react\"\n\nimport styled from \"styled-components\"\n\n// import { inp"
},
{
"path": "browser/src/Editor/OniEditor/IndentGuideBufferLayer.tsx",
"chars": 8597,
"preview": "import * as React from \"react\"\n\nimport * as detectIndent from \"detect-indent\"\nimport * as flatten from \"lodash/flatten\"\n"
},
{
"path": "browser/src/Editor/OniEditor/OniEditor.tsx",
"chars": 12720,
"preview": "/**\n * OniEditor.ts\n *\n * Editor implementation for Oni\n *\n * Extends the capabilities of the NeovimEditor\n */\n\nimport *"
},
{
"path": "browser/src/Editor/OniEditor/containers/BufferScrollBarContainer.ts",
"chars": 2549,
"preview": "import * as types from \"vscode-languageserver-types\"\n\nimport { connect } from \"react-redux\"\nimport { createSelector } fr"
},
{
"path": "browser/src/Editor/OniEditor/containers/DefinitionContainer.ts",
"chars": 1162,
"preview": "import { connect } from \"react-redux\"\n\nimport * as types from \"vscode-languageserver-types\"\n\nimport { Definition, IDefin"
},
{
"path": "browser/src/Editor/OniEditor/containers/ErrorsContainer.ts",
"chars": 784,
"preview": "import { connect } from \"react-redux\"\n\nimport { Errors, IErrorsProps } from \"./../../../UI/components/Error\"\n\nimport * a"
},
{
"path": "browser/src/Editor/OniEditor/index.ts",
"chars": 28,
"preview": "export * from \"./OniEditor\"\n"
},
{
"path": "browser/src/Font.ts",
"chars": 1831,
"preview": "export const FallbackFonts =\n \"Consolas,Monaco,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,"
},
{
"path": "browser/src/Grid.ts",
"chars": 2850,
"preview": "export class Grid<T> {\n private _cells: any = {}\n\n private _width: number = 0\n private _height: number = 0\n\n "
},
{
"path": "browser/src/Input/KeyBindings.ts",
"chars": 7040,
"preview": "/**\n * KeyBindings.ts\n *\n * Default, out-of-the-box keybindings for Oni\n */\n\nimport * as Oni from \"oni-api\"\n\nimport * as"
},
{
"path": "browser/src/Input/KeyParser.ts",
"chars": 2737,
"preview": "/**\n * KeyParser.ts\n *\n * Simple parsing logic to take vim key bindings / chords,\n * and return a normalized object.\n */"
},
{
"path": "browser/src/Input/Keyboard/KeyboardLayout.ts",
"chars": 2184,
"preview": "import * as Log from \"oni-core-logging\"\nimport { Event, IEvent } from \"oni-types\"\n\nimport * as Platform from \"./../../Pl"
},
{
"path": "browser/src/Input/Keyboard/KeyboardResolver.ts",
"chars": 1190,
"preview": "/**\n * KeyboardResolver\n *\n * Manages set of resolvers, and adding/removing resolvers.\n */\nimport * as Log from \"oni-cor"
},
{
"path": "browser/src/Input/Keyboard/Resolvers.ts",
"chars": 5000,
"preview": "import { IKeyInfo, IKeyMap, KeyboardLayoutManager } from \"./KeyboardLayout\"\n\n/**\n * Interface describing a 'key resolver"
},
{
"path": "browser/src/Input/Keyboard/index.ts",
"chars": 61,
"preview": "export * from \"./Resolvers\"\nexport * from \"./KeyboardLayout\"\n"
},
{
"path": "browser/src/Input/KeyboardInput.tsx",
"chars": 8261,
"preview": "/**\n * KeyboardInput.tsx\n *\n * Specialized input control to handle IME & dead key cases\n * - Allows enabling / disablin"
},
{
"path": "browser/src/Input/Mouse.ts",
"chars": 3390,
"preview": "import { EventEmitter } from \"events\"\n\nimport { IScreen } from \"./../neovim\"\n\nconst SCROLL_THRESHOLD_IN_PIXELS = 10\n\n// "
},
{
"path": "browser/src/Performance.ts",
"chars": 702,
"preview": "/**\n * Thin wrapper around browser performance API\n */\nexport function mark(markerName: string): void {\n if (typeof w"
},
{
"path": "browser/src/PeriodicJobs.ts",
"chars": 2189,
"preview": "import * as Log from \"oni-core-logging\"\nimport * as Constants from \"./Constants\"\n\n// IPeriodicJob implements the interfa"
},
{
"path": "browser/src/PersistentStore.ts",
"chars": 2191,
"preview": "/**\n * Store.ts\n *\n * Abstraction for a persistent data store, that supports versioning and upgrade.\n */\n\nimport { remot"
},
{
"path": "browser/src/Platform.ts",
"chars": 1772,
"preview": "import * as fs from \"fs\"\nimport * as os from \"os\"\nimport * as path from \"path\"\n\nexport const isWindows = () => os.platfo"
},
{
"path": "browser/src/Plugins/AnonymousPlugin.ts",
"chars": 506,
"preview": "/**\n * AnonymousPlugin.ts\n *\n * Provides a globally-available, immediately-active plugin\n * Useful for testing the plugi"
},
{
"path": "browser/src/Plugins/Api/Capabilities.ts",
"chars": 1106,
"preview": "/**\n * Capabilities.ts\n *\n * Export utility types / functions for working with plugin capabilities\n */\n\nexport interface"
},
{
"path": "browser/src/Plugins/Api/LanguageClient/LanguageClientHelpers.ts",
"chars": 4247,
"preview": "/**\n * LanguageClientHelpers.ts\n */\n\nimport * as os from \"os\"\n\nimport * as types from \"vscode-languageserver-types\"\n\nimp"
},
{
"path": "browser/src/Plugins/Api/LanguageClient/LanguageClientLogger.ts",
"chars": 483,
"preview": "/**\n * LanguageClientLogger.ts\n *\n * Helper utility for handling logging from language service clients\n */\n\nimport * as "
},
{
"path": "browser/src/Plugins/Api/Oni.ts",
"chars": 7570,
"preview": "/**\n * OniApi.ts\n *\n * Implementation of OniApi's API surface\n * TODO: Gradually move over to `oni-api`\n */\n\nimport * as"
},
{
"path": "browser/src/Plugins/Api/Process.ts",
"chars": 6033,
"preview": "import * as ChildProcess from \"child_process\"\n\nimport * as Oni from \"oni-api\"\nimport * as Log from \"oni-core-logging\"\n\ni"
},
{
"path": "browser/src/Plugins/Api/Services.ts",
"chars": 193,
"preview": "import { getInstance, VersionControlManager } from \"./../../Services/VersionControl\"\n\nexport class Services {\n public"
},
{
"path": "browser/src/Plugins/Api/Ui.ts",
"chars": 729,
"preview": "import * as Oni from \"oni-api\"\n\nimport { getFileIcon } from \"../../Services/FileIcon\"\nimport { getInstance } from \"../.."
},
{
"path": "browser/src/Plugins/Api/shell-env.d.ts",
"chars": 195,
"preview": "declare module \"shell-env\" {\n export namespace shellEnv {\n export function sync(shell?: string): NodeJS.Env\n "
},
{
"path": "browser/src/Plugins/PackageMetadataParser.ts",
"chars": 2226,
"preview": "/**\n * PackageMetadataParser.ts\n *\n * Responsible for parsing and normalizing package.json for ONI plugins\n */\n\nimport *"
},
{
"path": "browser/src/Plugins/Plugin.ts",
"chars": 2489,
"preview": "import * as fs from \"fs\"\nimport * as path from \"path\"\n\nimport * as Log from \"oni-core-logging\"\n\nimport * as Capabilities"
},
{
"path": "browser/src/Plugins/PluginConfigurationSynchronizer.ts",
"chars": 1536,
"preview": "/**\n * PluginConfigurationSynchronizer.ts\n *\n * Responsible for synchronizing user's `plugin` configuration settings.\n *"
},
{
"path": "browser/src/Plugins/PluginInstaller.ts",
"chars": 5219,
"preview": "/**\n * PluginInstaller.ts\n *\n * Responsible for installing, updating, and uninstalling plugins.\n */\n\nimport * as path fr"
},
{
"path": "browser/src/Plugins/PluginManager.ts",
"chars": 4988,
"preview": "import * as fs from \"fs\"\nimport * as path from \"path\"\n\nimport * as Oni from \"oni-api\"\nimport { Event, IEvent } from \"oni"
},
{
"path": "browser/src/Plugins/PluginSidebarPane.tsx",
"chars": 8887,
"preview": "/**\n * PluginsSidebarPane.tsx\n *\n * Sidebar pane for managing plugins\n */\n\nimport * as React from \"react\"\n\nimport { Even"
},
{
"path": "browser/src/Redux/LoggingMiddleware.ts",
"chars": 406,
"preview": "/*\n * LoggingMiddleware\n *\n * Logging strategy for Redux, specific to Oni\n */\n\nimport { Store } from \"redux\"\n\nimport * a"
},
{
"path": "browser/src/Redux/RequestAnimationFrameNotifyBatcher.ts",
"chars": 616,
"preview": "/*\n * RAFNotifyBatcher\n *\n * Helper method to 'batch' dispatches to redux store\n * subscriptions, based on animation fra"
},
{
"path": "browser/src/Redux/createStore.ts",
"chars": 1350,
"preview": "/*\n * createStore\n *\n * Common utilities for creating a redux store with Oni\n *\n * Implementations some common functiona"
},
{
"path": "browser/src/Redux/index.ts",
"chars": 30,
"preview": "export * from \"./createStore\"\n"
},
{
"path": "browser/src/Renderer/CanvasRenderer.ts",
"chars": 13309,
"preview": "import { Grid } from \"./../Grid\"\nimport { ICell, MinimalScreenForRendering } from \"./../neovim\"\nimport * as Performance "
},
{
"path": "browser/src/Renderer/INeovimRenderer.ts",
"chars": 286,
"preview": "import { IScreen } from \"./../neovim\"\n\nexport interface IPosition {\n x: number\n y: number\n}\n\nexport interface INeo"
},
{
"path": "browser/src/Renderer/Span.ts",
"chars": 2872,
"preview": "import { Grid } from \"./../Grid\"\n\nexport interface ISpan {\n startX: number\n endX: number\n}\n\nexport interface IPosi"
},
{
"path": "browser/src/Renderer/WebGLRenderer/SolidRenderer.ts",
"chars": 8121,
"preview": "import { ICell } from \"../../neovim\"\nimport { normalizeColor } from \"./normalizeColor\"\nimport {\n createProgram,\n c"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/GlyphAtlas/GlyphAtlas.ts",
"chars": 8269,
"preview": "import { IRasterizedGlyph } from \"./IRasterizedGlyph\"\n\nconst backgroundColor = \"black\"\nconst foregroundColor = \"white\"\n\n"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/GlyphAtlas/IRasterizedGlyph.ts",
"chars": 224,
"preview": "export interface IRasterizedGlyph {\n width: number\n height: number\n textureLayerIndex: number\n textureWidth:"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/GlyphAtlas/index.ts",
"chars": 64,
"preview": "export * from \"./GlyphAtlas\"\nexport * from \"./IRasterizedGlyph\"\n"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/ICellGroup.ts",
"chars": 208,
"preview": "export interface ICellGroup {\n startColumnIndex: number\n characters: string[]\n foregroundColor?: string\n bac"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/ILigatureGrouper.ts",
"chars": 92,
"preview": "export interface ILigatureGrouper {\n getLigatureGroups(characters: string[]): string[]\n}\n"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/NoopLigatureGrouper.ts",
"chars": 205,
"preview": "import { ILigatureGrouper } from \"./ILigatureGrouper\"\n\nexport class NoopLigatureGrouper implements ILigatureGrouper {\n "
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/OpenTypeLigatureGrouper.ts",
"chars": 4208,
"preview": "import fontManager from \"font-manager\"\nimport * as fs from \"fs\"\nimport * as Log from \"oni-core-logging\"\nimport oniFontki"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/LigatureGrouper/index.ts",
"chars": 115,
"preview": "export * from \"./ILigatureGrouper\"\nexport * from \"./OpenTypeLigatureGrouper\"\nexport * from \"./NoopLigatureGrouper\"\n"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/TextRenderer.ts",
"chars": 14935,
"preview": "import { ICell } from \"../../../neovim\"\nimport { normalizeColor } from \"../normalizeColor\"\nimport {\n createProgram,\n "
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/groupCells.ts",
"chars": 1992,
"preview": "import { ICell } from \"../../../neovim\"\nimport { ICellGroup } from \"./ICellGroup\"\n\nexport const groupCells = (\n colum"
},
{
"path": "browser/src/Renderer/WebGLRenderer/TextRenderer/index.ts",
"chars": 31,
"preview": "export * from \"./TextRenderer\"\n"
},
{
"path": "browser/src/Renderer/WebGLRenderer/WebGLRenderer.ts",
"chars": 6273,
"preview": "import { INeovimRenderer } from \"..\"\nimport { MinimalScreenForRendering } from \"../../neovim\"\nimport { normalizeColor } "
},
{
"path": "browser/src/Renderer/WebGLRenderer/WebGLUtilities.ts",
"chars": 2032,
"preview": "export const createProgram = (\n gl: WebGL2RenderingContext,\n vertexShaderSource: string,\n fragmentShaderSource:"
},
{
"path": "browser/src/Renderer/WebGLRenderer/index.ts",
"chars": 32,
"preview": "export * from \"./WebGLRenderer\"\n"
},
{
"path": "browser/src/Renderer/WebGLRenderer/normalizeColor.ts",
"chars": 371,
"preview": "import colorNormalize from \"color-normalize\"\n\nconst cache = new Map<string, Float32Array>()\n\nexport const normalizeColor"
},
{
"path": "browser/src/Renderer/index.ts",
"chars": 99,
"preview": "export * from \"./CanvasRenderer\"\nexport * from \"./WebGLRenderer\"\nexport * from \"./INeovimRenderer\"\n"
},
{
"path": "browser/src/Services/AutoClosingPairs.ts",
"chars": 8903,
"preview": "/**\n * AutoClosingPairs\n *\n * Service to enable auto-closing pair key bindings\n */\n\nimport * as Oni from \"oni-api\"\nimpor"
},
{
"path": "browser/src/Services/AutoUpdate.ts",
"chars": 1684,
"preview": "/**\n * AutoUpdate.ts\n *\n * Provides auto-update functionality\n * - Check for update\n * - Notifies when an update is avai"
},
{
"path": "browser/src/Services/Automation.ts",
"chars": 6917,
"preview": "/**\n * Automation.ts\n *\n * Helper methods for running automated tests\n */\n\nimport { remote } from \"electron\"\n\nimport * a"
},
{
"path": "browser/src/Services/Bookmarks/BookmarksPane.tsx",
"chars": 7338,
"preview": "/**\n * BookmarksPane.tsx\n *\n * UX for rendering the bookmarks experience in the sidebar\n */\n\nimport * as React from \"rea"
},
{
"path": "browser/src/Services/Bookmarks/index.ts",
"chars": 2173,
"preview": "import { Event, IEvent } from \"oni-types\"\n\nimport { Configuration } from \"./../Configuration\"\nimport { EditorManager } f"
},
{
"path": "browser/src/Services/Browser/AddressBarView.tsx",
"chars": 2474,
"preview": "/**\n * AddressBarView.tsx\n *\n * Component to manage address bar state (whether it is focused or not)\n */\n\nimport * as Re"
},
{
"path": "browser/src/Services/Browser/BrowserButtonView.tsx",
"chars": 1007,
"preview": "/**\n * BrowserButtonView.tsx\n *\n * Component for the browser buttons on the address bar of the integrated browser\n */\n\ni"
},
{
"path": "browser/src/Services/Browser/BrowserView.tsx",
"chars": 10898,
"preview": "/**\n * oni-layer-browser/index.ts\n *\n * Entry point for browser integration plugin\n */\n\nimport * as path from \"path\"\n\nim"
},
{
"path": "browser/src/Services/Browser/index.tsx",
"chars": 10279,
"preview": "/**\n * oni-layer-browser/index.ts\n *\n * Entry point for browser integration plugin\n */\n\nimport { shell, WebviewTag } fro"
},
{
"path": "browser/src/Services/BrowserWindowConfigurationSynchronizer.ts",
"chars": 2641,
"preview": "/**\n * BrowserWindowConfigurationSynchronizer\n *\n * Takes configuration settings, and applies them to the BrowserWindow\n"
},
{
"path": "browser/src/Services/Colors.ts",
"chars": 3352,
"preview": "/**\n * Colors\n *\n * - Rationalizes colors from both the active theme and configuration\n * - The 'source of truth' for co"
},
{
"path": "browser/src/Services/CommandManager.ts",
"chars": 2964,
"preview": "/**\n * CommandManager.ts\n *\n * Manages Oni commands. These commands show up in the command palette, and are exposed to p"
},
{
"path": "browser/src/Services/Commands/GlobalCommands.ts",
"chars": 5716,
"preview": "/**\n * GlobalCommands.ts\n *\n * Built-in, general Oni commands, that are not specific\n * to an editor or service.\n */\n\nim"
},
{
"path": "browser/src/Services/Commands/index.ts",
"chars": 33,
"preview": "export * from \"./GlobalCommands\"\n"
},
{
"path": "browser/src/Services/Completion/Completion.ts",
"chars": 6250,
"preview": "/**\n * Completion.ts\n */\n\nimport * as Oni from \"oni-api\"\nimport { Event, IDisposable, IEvent } from \"oni-types\"\nimport {"
},
{
"path": "browser/src/Services/Completion/CompletionProviders.ts",
"chars": 3029,
"preview": "/**\n * CompletionProviders.ts\n */\n\nimport * as types from \"vscode-languageserver-types\"\n\nimport { LanguageManager } from"
},
{
"path": "browser/src/Services/Completion/CompletionSelectors.ts",
"chars": 4539,
"preview": "/**\n * CompletionSelectors.ts\n *\n * Selectors are functions that take a state and derive a value from it.\n */\nimport * a"
},
{
"path": "browser/src/Services/Completion/CompletionState.ts",
"chars": 1942,
"preview": "/**\n * CompletionStore.ts\n */\n\nimport * as types from \"vscode-languageserver-types\"\n\nexport interface ICompletionState {"
},
{
"path": "browser/src/Services/Completion/CompletionStore.ts",
"chars": 14786,
"preview": "/**\n * CompletionStore.ts\n */\n\nimport * as types from \"vscode-languageserver-types\"\n\nimport * as Oni from \"oni-api\"\n\nimp"
},
{
"path": "browser/src/Services/Completion/CompletionUtility.ts",
"chars": 5678,
"preview": "/**\n * CompletionUtility.ts\n *\n * Helper functions for auto completion\n */\n\nimport * as Oni from \"oni-api\"\nimport * as t"
},
{
"path": "browser/src/Services/Completion/CompletionsRequestor.ts",
"chars": 3365,
"preview": "/**\n * CompletionsRequestor.ts\n *\n * Abstraction over the action of requesting completions\n */\n\nimport * as types from \""
},
{
"path": "browser/src/Services/Completion/index.ts",
"chars": 142,
"preview": "export * from \"./Completion\"\nexport * from \"./CompletionProviders\"\nexport * from \"./CompletionsRequestor\"\nexport * from "
},
{
"path": "browser/src/Services/Configuration/Configuration.ts",
"chars": 12470,
"preview": "/**\n * Configuration.ts\n */\n\nimport { merge } from \"lodash\"\nimport * as Oni from \"oni-api\"\nimport * as Log from \"oni-cor"
},
{
"path": "browser/src/Services/Configuration/ConfigurationCommands.ts",
"chars": 1048,
"preview": "/**\n * ConfigurationCommands\n */\n\nimport { CommandManager } from \"./../CommandManager\"\nimport { EditorManager } from \"./"
},
{
"path": "browser/src/Services/Configuration/ConfigurationEditor.ts",
"chars": 6214,
"preview": "/**\n * ConfigurationEditor.ts\n */\n\nimport * as fs from \"fs\"\nimport * as Oni from \"oni-api\"\nimport * as os from \"os\"\nimpo"
},
{
"path": "browser/src/Services/Configuration/DefaultConfiguration.ts",
"chars": 15089,
"preview": "/**\n * DefaultConfiguration.ts\n *\n * Specifies Oni default settings\n */\n\nimport * as os from \"os\"\n\nimport * as Oni from "
},
{
"path": "browser/src/Services/Configuration/DeprecatedConfigurationValues.ts",
"chars": 1357,
"preview": "/**\n * DeprecatedConfigurationValues\n *\n * The purpose of this is to give users a heads up when we plan on deprecating a"
},
{
"path": "browser/src/Services/Configuration/FileConfigurationProvider.ts",
"chars": 7097,
"preview": "/**\n * FileConfigurationProvider\n *\n * Implementation of a configuration provider backed by a file\n */\n\nimport * as fs f"
},
{
"path": "browser/src/Services/Configuration/IConfigurationValues.ts",
"chars": 12937,
"preview": "/**\n * IConfigurationValues\n * - Set of configuration values that Oni relies on\n *\n * NOTE: This may not be the complete"
},
{
"path": "browser/src/Services/Configuration/PersistentSettings.ts",
"chars": 1204,
"preview": "/**\n * Persisted Settings\n *\n * Simple wrapper around 'electron-settings'\n */\n\nimport { remote } from \"electron\"\n\n// We "
},
{
"path": "browser/src/Services/Configuration/ReasonConfiguration.ts",
"chars": 1181,
"preview": "/**\n * ReasonConfiguration.ts\n *\n * Settings for ocaml / reason language server\n */\n\nimport * as path from \"path\"\n\nimpor"
},
{
"path": "browser/src/Services/Configuration/UserConfiguration.ts",
"chars": 1229,
"preview": "/**\n * UserConfiguration.ts\n *\n * Helpers and settings relating to per-user configuration\n */\n\nimport * as path from \"pa"
},
{
"path": "browser/src/Services/Configuration/index.ts",
"chars": 107,
"preview": "export * from \"./Configuration\"\nexport * from \"./IConfigurationValues\"\nexport * from \"./UserConfiguration\"\n"
},
{
"path": "browser/src/Services/ContextMenu/ContextMenu.tsx",
"chars": 5732,
"preview": "/**\n * Menu.ts\n *\n * Implements API surface area for working with the status bar\n */\n\nimport * as React from \"react\"\nimp"
},
{
"path": "browser/src/Services/ContextMenu/ContextMenuComponent.tsx",
"chars": 5660,
"preview": "/**\n * ContextMenu.tsx\n */\n\nimport * as React from \"react\"\nimport * as types from \"vscode-languageserver-types\"\n\nimport "
},
{
"path": "browser/src/Services/ContextMenu/index.ts",
"chars": 69,
"preview": "export * from \"./ContextMenu\"\nexport * from \"./ContextMenuComponent\"\n"
},
{
"path": "browser/src/Services/Debug.ts",
"chars": 1895,
"preview": "/**\n * Debug.ts\n *\n * A set of commands used for debugging\n */\n\nimport { remote } from \"electron\"\n\nimport { CommandManag"
},
{
"path": "browser/src/Services/Diagnostics/index.ts",
"chars": 3560,
"preview": "/**\n * Diagnostics/index.ts\n *\n * Integrates the `textDocument/publishDiagnostics` protocol with Oni's UI\n */\n\nimport * "
},
{
"path": "browser/src/Services/Diagnostics/navigateErrors.ts",
"chars": 2796,
"preview": "/**\n * navigateErrors.ts\n *\n * Functions to jump to previous/next diagnostic error in the active buffer\n */\nimport { isI"
},
{
"path": "browser/src/Services/DragAndDrop.tsx",
"chars": 3909,
"preview": "import * as React from \"react\"\nimport * as DND from \"react-dnd\"\n\ntype Render<T> = (props: T) => React.ReactElement<T>\nty"
},
{
"path": "browser/src/Services/EditorManager.ts",
"chars": 6981,
"preview": "/**\n * EditorManager.ts\n *\n * Responsible for managing state of the editor collection, and\n * switching between active e"
},
{
"path": "browser/src/Services/Explorer/ExplorerFileSystem.ts",
"chars": 5831,
"preview": "/**\n * ExplorerFileSystem.ts\n *\n * State management for the explorer split\n */\n\nimport * as fs from \"fs\"\nimport { ensure"
},
{
"path": "browser/src/Services/Explorer/ExplorerSelectors.ts",
"chars": 3660,
"preview": "/**\n * ExplorerSelectors.ts\n *\n * Selectors for the explorer state\n */\n\nimport * as path from \"path\"\n\nimport * as flatte"
},
{
"path": "browser/src/Services/Explorer/ExplorerSplit.tsx",
"chars": 13101,
"preview": "/**\n * ExplorerSplit.tsx\n *\n */\n\nimport * as path from \"path\"\nimport * as React from \"react\"\nimport { Provider } from \"r"
},
{
"path": "browser/src/Services/Explorer/ExplorerStore.ts",
"chars": 33143,
"preview": "/**\n * ExplorerStore.ts\n *\n * State management for the explorer split\n */\n\nimport * as capitalize from \"lodash/capitaliz"
},
{
"path": "browser/src/Services/Explorer/ExplorerView.tsx",
"chars": 16065,
"preview": "/**\n * ExplorerSplit.tsx\n *\n */\n\nimport * as React from \"react\"\nimport * as DND from \"react-dnd\"\nimport HTML5Backend fro"
},
{
"path": "browser/src/Services/Explorer/index.tsx",
"chars": 1757,
"preview": "/**\n * Explorer/index.tsx\n *\n * Entry point for explorer-related features\n */\n\nimport * as Oni from \"oni-api\"\n\nimport { "
},
{
"path": "browser/src/Services/FileIcon.tsx",
"chars": 1474,
"preview": "/**\n * Icons\n *\n * - Data source for icons present in Oni\n * - Loads icons based on the `ui.iconTheme` configuration set"
},
{
"path": "browser/src/Services/FileMappings.ts",
"chars": 3370,
"preview": "/**\n * FileMappings.ts\n *\n * Shared code / utilities for mapping files\n */\n\nimport * as path from \"path\"\n\nexport interfa"
},
{
"path": "browser/src/Services/FileSystemWatcher/index.ts",
"chars": 2646,
"preview": "import * as chokidar from \"chokidar\"\nimport { Stats } from \"fs\"\nimport { Event, IEvent } from \"oni-types\"\n\nimport * as L"
},
{
"path": "browser/src/Services/FocusManager.ts",
"chars": 1223,
"preview": "/*\n * FocusManager.ts\n */\n\nimport * as Log from \"oni-core-logging\"\n\nclass FocusManager {\n private _focusElementStack:"
},
{
"path": "browser/src/Services/IconThemes/IconThemeLoader.ts",
"chars": 2003,
"preview": "/**\n * IconThemeLoader.ts\n *\n * Class responsible for loading an icon theme\n */\n\nimport * as fs from \"fs\"\n\nimport * as L"
},
{
"path": "browser/src/Services/IconThemes/Icons.ts",
"chars": 5027,
"preview": "/**\n * Icons\n *\n * - Data source for icons present in Oni\n * - Loads icons based on the `ui.iconTheme` configuration set"
},
{
"path": "browser/src/Services/IconThemes/StyleWriter.ts",
"chars": 1590,
"preview": "/**\n * StyleWriter.ts\n *\n * Helper to generate text for an inline style element\n */\n\nimport * as os from \"os\"\n\nexport cl"
},
{
"path": "browser/src/Services/IconThemes/index.ts",
"chars": 658,
"preview": "/**\n * Icons\n *\n * - Data source for icons present in Oni\n * - Loads icons based on the `ui.iconTheme` configuration set"
},
{
"path": "browser/src/Services/InputManager.ts",
"chars": 5872,
"preview": "import * as Oni from \"oni-api\"\n\nimport { commandManager } from \"./CommandManager\"\n\nexport type ActionFunction = () => bo"
},
{
"path": "browser/src/Services/KeyDisplayer/KeyDisplayer.tsx",
"chars": 2547,
"preview": "/**\n * KeyDisplayer\n *\n * Utility for showing keys while typing\n */\n\nimport * as React from \"react\"\nimport { Provider } "
},
{
"path": "browser/src/Services/KeyDisplayer/KeyDisplayerStore.ts",
"chars": 4036,
"preview": "/**\n * KeyDisplayerStore\n *\n * State management for the KeyDisplayer\n */\n\nimport { Reducer, Store } from \"redux\"\nimport "
},
{
"path": "browser/src/Services/KeyDisplayer/KeyDisplayerView.tsx",
"chars": 1314,
"preview": "/**\n * KeyDisplayer\n *\n * Utility for showing keys while typing\n */\n\nimport * as React from \"react\"\nimport { connect } f"
},
{
"path": "browser/src/Services/KeyDisplayer/index.tsx",
"chars": 1321,
"preview": "/**\n * KeyDisplayer\n *\n * Utility for showing keys while typing\n */\n\nimport { CommandManager } from \"./../CommandManager"
},
{
"path": "browser/src/Services/Language/CodeAction.ts",
"chars": 2473,
"preview": "/**\r\n * CodeAction.ts\r\n *\r\n */\r\n\r\n// import * as os from \"os\"\r\nimport * as types from \"vscode-languageserver-types\"\r\n\r\ni"
},
{
"path": "browser/src/Services/Language/DefinitionRequestor.ts",
"chars": 2057,
"preview": "/**\n * DefinitionRequestor.ts\n *\n * Abstraction over the action of requesting a definition\n */\n\nimport * as types from \""
},
{
"path": "browser/src/Services/Language/Edits.ts",
"chars": 892,
"preview": "/**\n * Edits.ts\n *\n * Helpers to work with TextEdits and buffer manipulation\n */\n\nimport * as orderBy from \"lodash/order"
},
{
"path": "browser/src/Services/Language/FindAllReferences.ts",
"chars": 2095,
"preview": "/**\n * QuickInfo.ts\n *\n */\n\nimport * as types from \"vscode-languageserver-types\"\n\nimport { INeovimInstance } from \"./../"
},
{
"path": "browser/src/Services/Language/Formatting.ts",
"chars": 2133,
"preview": "/**\n * Rename.tsx\n */\n\nimport * as types from \"vscode-languageserver-types\"\n\nimport * as Log from \"oni-core-logging\"\n\nim"
},
{
"path": "browser/src/Services/Language/HoverRequestor.ts",
"chars": 1638,
"preview": "/**\n * HoverRequestor.ts\n *\n * Abstraction over the action of requesting a definition\n */\n\nimport * as types from \"vscod"
},
{
"path": "browser/src/Services/Language/LanguageClient.ts",
"chars": 4704,
"preview": "import * as rpc from \"vscode-jsonrpc\"\n\nimport * as Log from \"oni-core-logging\"\nimport { Event } from \"oni-types\"\n\nimport"
},
{
"path": "browser/src/Services/Language/LanguageClientProcess.ts",
"chars": 8379,
"preview": "/**\n * LanguageClientProcess.ts\n *\n * Responsible for the lifecycle of the language server process, including:\n * - Cre"
},
{
"path": "browser/src/Services/Language/LanguageClientStatusBar.tsx",
"chars": 2954,
"preview": "/**\n * LanguageClientStatusBar.tsx\n *\n * Implements status bar for Oni\n */\n\nimport * as electron from \"electron\"\nimport "
},
{
"path": "browser/src/Services/Language/LanguageClientTypes.ts",
"chars": 928,
"preview": "import * as types from \"vscode-languageserver-types\"\n\nimport { IServerCapabilities } from \"./ServerCapabilities\"\n\nexport"
},
{
"path": "browser/src/Services/Language/LanguageConfiguration.ts",
"chars": 3538,
"preview": "/**\n * LanguageConfiguration.ts\n *\n * Helper for registering language client information from config\n */\n\nimport * as Lo"
},
{
"path": "browser/src/Services/Language/LanguageEditorIntegration.ts",
"chars": 5636,
"preview": "/**\n * LanguageEditorIntegration\n *\n * Responsible for listening to editor events,\n * and hooking up the language servic"
},
{
"path": "browser/src/Services/Language/LanguageManager.ts",
"chars": 15062,
"preview": "/**\n * LanguageManager\n *\n * Service for integrating language services, like:\n * - Language server protocol\n * - Synch"
},
{
"path": "browser/src/Services/Language/LanguageStore.ts",
"chars": 10153,
"preview": "/**\n * LanguageStore.ts\n *\n * Manages state for UI-facing elements, like\n * hover & definition\n */\n\nimport \"rxjs/add/obs"
},
{
"path": "browser/src/Services/Language/PromiseQueue.ts",
"chars": 702,
"preview": "import * as Log from \"oni-core-logging\"\n\nexport class PromiseQueue {\n private _currentPromise: Promise<any> = Promise"
},
{
"path": "browser/src/Services/Language/RenameView.tsx",
"chars": 960,
"preview": "/**\n * RenameView.tsx\n *\n * Contents of the Rename tooltip\n */\n\nimport * as React from \"react\"\n\nimport styled from \"styl"
},
{
"path": "browser/src/Services/Language/ServerCapabilities.ts",
"chars": 4872,
"preview": "/*/\n * ServerCapibilities.ts\n */\n\n// Copied from:\n// https://github.com/Microsoft/language-server-protocol/blob/master/p"
},
{
"path": "browser/src/Services/Language/SignatureHelp.ts",
"chars": 3368,
"preview": "/**\n * SignatureHelp.ts\n *\n */\n\nimport { Observable } from \"rxjs/Observable\"\nimport * as types from \"vscode-languageserv"
},
{
"path": "browser/src/Services/Language/SignatureHelpView.tsx",
"chars": 2841,
"preview": "import * as React from \"react\"\n\nimport * as types from \"vscode-languageserver-types\"\n\nimport { getDocumentationText } fr"
},
{
"path": "browser/src/Services/Language/Workspace.ts",
"chars": 605,
"preview": "/**\n * Workspace.ts\n *\n * Handles workspace/ messages\n */\n\nimport * as Oni from \"oni-api\"\nimport * as types from \"vscode"
},
{
"path": "browser/src/Services/Language/addInsertModeLanguageFunctionality.ts",
"chars": 1531,
"preview": "/**\n * LanguageEditorIntegration\n *\n * Responsible for listening to editor events,\n * and hooking up the language servic"
},
{
"path": "browser/src/Services/Language/index.ts",
"chars": 503,
"preview": "export * from \"./addInsertModeLanguageFunctionality\"\nexport * from \"./CodeAction\"\nexport * from \"./DefinitionRequestor\"\n"
},
{
"path": "browser/src/Services/Learning/Achievements/AchievementNotificationRenderer.tsx",
"chars": 5440,
"preview": "/**\n * AchievementNotificationRenderer.tsx\n *\n * This renders the achievement 'pop-up' when an achievement goal is met.\n"
},
{
"path": "browser/src/Services/Learning/Achievements/AchievementsBufferLayer.tsx",
"chars": 6736,
"preview": "/**\n * AchievementsBufferLayer.tsx\n *\n * This is an implementation of a buffer layer to show the\n * achievements in a 't"
},
{
"path": "browser/src/Services/Learning/Achievements/AchievementsManager.ts",
"chars": 5884,
"preview": "/**\n * AchievementsManager.ts\n *\n * Primary API entry point for the achievements feature\n */\n\nimport { Event, IEvent } f"
}
]
// ... and 600 more files (download for full content)
About this extraction
This page contains the full source code of the onivim/oni GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 800 files (4.8 MB), approximately 1.3M tokens, and a symbol index with 3407 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.