From 2e9a824de7662fbf3b6f8d59e5d0cd9d43dd2777 Mon Sep 17 00:00:00 2001 From: Tae Won Ha Date: Wed, 4 Jan 2017 18:38:52 +0100 Subject: [PATCH] GH-339 Pass neovim view to the renderer to get the current line and col --- SwiftNeoVim/NeoVimView.swift | 4 ++++ VimR.xcodeproj/project.pbxproj | 4 ++++ VimR/MainWindowComponent.swift | 1 + VimR/MarkdownRenderer.swift | 8 ++++++-- VimR/NeoVimViewExtension.swift | 27 +++++++++++++++++++++++++++ VimR/PreviewComponent.swift | 6 +++++- 6 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 VimR/NeoVimViewExtension.swift diff --git a/SwiftNeoVim/NeoVimView.swift b/SwiftNeoVim/NeoVimView.swift index c8186803..5e6b05f9 100644 --- a/SwiftNeoVim/NeoVimView.swift +++ b/SwiftNeoVim/NeoVimView.swift @@ -336,6 +336,10 @@ extension NeoVimView { self.exec(command: "qa!") } + public func vimOutput(of command: String) -> String { + return self.agent.vimCommandOutput(command) ?? "" + } + fileprivate func open(_ url: URL, cmd: String) { let path = url.path let escapedFileName = self.agent.escapedFileName(path) diff --git a/VimR.xcodeproj/project.pbxproj b/VimR.xcodeproj/project.pbxproj index fe73dfbc..cf094c97 100644 --- a/VimR.xcodeproj/project.pbxproj +++ b/VimR.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 1929BD3F9E609BFADB27584B /* Scorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929B9D510177918080BE39B /* Scorer.swift */; }; 1929BD4CA2204E061A86A140 /* MatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929BC19C1BC19246AFF1621 /* MatcherTests.swift */; }; 1929BD52275A6570C666A7BA /* PreviewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929B1EC32D8A26958FB39B1 /* PreviewRenderer.swift */; }; + 1929BE27005D80C5C129BF42 /* NeoVimViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929B60F33F13D64762740E0 /* NeoVimViewExtension.swift */; }; 1929BEB90DCDAF7A2B68C886 /* ColorUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929BA6128BFDD54CA92F46E /* ColorUtils.swift */; }; 1929BEFEABA0448306CDB6D4 /* FileItemIgnorePatternTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929BBC84557C8351EC6183E /* FileItemIgnorePatternTest.swift */; }; 1929BF81A40B4154D3EA33CE /* server_ui.m in Sources */ = {isa = PBXBuildFile; fileRef = 1929B93013228985F509C8F6 /* server_ui.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; @@ -285,6 +286,7 @@ 1929B477E1E62433BC48E10B /* ArrayCommonsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayCommonsTest.swift; sourceTree = ""; }; 1929B5C3F2F1CA4113DABFFD /* CocoaCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CocoaCategories.m; sourceTree = ""; }; 1929B5D977261F1EBFA9E8F1 /* FileUtilsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtilsTest.swift; sourceTree = ""; }; + 1929B60F33F13D64762740E0 /* NeoVimViewExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NeoVimViewExtension.swift; sourceTree = ""; }; 1929B69499B2569793350CEC /* FileItemIgnorePattern.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileItemIgnorePattern.swift; sourceTree = ""; }; 1929B7CB4863F80230C32D3C /* FileItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileItem.swift; sourceTree = ""; }; 1929B8DA5AA33536F0082200 /* PreviewComponent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreviewComponent.swift; sourceTree = ""; }; @@ -730,6 +732,7 @@ 4B705B9F1DDF761C005F844B /* Tools */, 4B1AC1AF1D7F395300898F0B /* Open Quickly */, 4B238BED1D3ED55300CBDD98 /* Preferences */, + 1929B60F33F13D64762740E0 /* NeoVimViewExtension.swift */, ); name = UI; sourceTree = ""; @@ -1288,6 +1291,7 @@ 1929BA3BB94B77E9AE051FE5 /* PreviewComponent.swift in Sources */, 1929B4145AA81F006BAF3B5C /* PreviewService.swift in Sources */, 1929BD52275A6570C666A7BA /* PreviewRenderer.swift in Sources */, + 1929BE27005D80C5C129BF42 /* NeoVimViewExtension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/VimR/MainWindowComponent.swift b/VimR/MainWindowComponent.swift index 264f4c7f..2c7d17b9 100644 --- a/VimR/MainWindowComponent.swift +++ b/VimR/MainWindowComponent.swift @@ -212,6 +212,7 @@ class MainWindowComponent: WindowComponent, let previewData = previewToolData.toolData as? PreviewComponent.PrefData ?? PreviewComponent.PrefData.default let preview = PreviewComponent(source: self.sink, scrollSource: self.scrollFlow.sink, + neoVimInfoProvider: self.neoVimView, initialData: previewData) let previewConfig = WorkspaceTool.Config(title: "Preview", view: preview, diff --git a/VimR/MarkdownRenderer.swift b/VimR/MarkdownRenderer.swift index c8bc14aa..179dfa41 100644 --- a/VimR/MarkdownRenderer.swift +++ b/VimR/MarkdownRenderer.swift @@ -117,6 +117,8 @@ class MarkdownRenderer: NSObject, Flow, PreviewRenderer { fileprivate let webview: WKWebView + weak fileprivate var neoVimInfoProvider: NeoVimInfoProvider? + let identifier: String = MarkdownRenderer.identifier var prefData: StandardPrefData? { return PrefData(isForwardSearchAutomatically: self.isForwardSearchAutomatically, @@ -131,7 +133,7 @@ class MarkdownRenderer: NSObject, Flow, PreviewRenderer { let toolbar: NSView? = NSView(forAutoLayout: ()) let menuItems: [NSMenuItem]? - init(source: Observable, scrollSource: Observable, initialData: PrefData) { + init(source: Observable, scrollSource: Observable, neoVimInfoProvider: NeoVimInfoProvider, initialData: PrefData) { guard let templateUrl = Bundle.main.url(forResource: "template", withExtension: "html", subdirectory: "markdown") @@ -143,6 +145,8 @@ class MarkdownRenderer: NSObject, Flow, PreviewRenderer { preconditionFailure("ERROR Cannot load markdown template") } + self.neoVimInfoProvider = neoVimInfoProvider + self.template = template self.flow = EmbeddableComponent(source: source) @@ -314,7 +318,7 @@ extension MarkdownRenderer { } func forwardSearchAction(_: Any?) { - NSLog("\(#function)") + NSLog("\(#function) for \(self.neoVimInfoProvider?.currentLine()) x \(self.neoVimInfoProvider?.currentColumn())") } func reverseSearchAction(_: Any?) { diff --git a/VimR/NeoVimViewExtension.swift b/VimR/NeoVimViewExtension.swift new file mode 100644 index 00000000..978bf598 --- /dev/null +++ b/VimR/NeoVimViewExtension.swift @@ -0,0 +1,27 @@ +/** + * Tae Won Ha - http://taewon.de - @hataewon + * See LICENSE + */ + +import Cocoa +import SwiftNeoVim + +protocol NeoVimInfoProvider: class { + + func currentLine() -> Int + func currentColumn() -> Int +} + +extension NeoVimView: NeoVimInfoProvider { + + func currentLine() -> Int { + let output = self.vimOutput(of: "echo line('.')") + return Int(output) ?? 0 + } + + + func currentColumn() -> Int { + let output = self.vimOutput(of: "echo virtcol('.')") + return Int(output) ?? 0 + } +} diff --git a/VimR/PreviewComponent.swift b/VimR/PreviewComponent.swift index b3960343..7e1bb331 100644 --- a/VimR/PreviewComponent.swift +++ b/VimR/PreviewComponent.swift @@ -110,6 +110,8 @@ class PreviewComponent: NSView, ViewComponent, ToolDataHolder { } } + weak fileprivate var neoVimInfoProvider: NeoVimInfoProvider? + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -135,7 +137,8 @@ class PreviewComponent: NSView, ViewComponent, ToolDataHolder { return self } - init(source: Observable, scrollSource: Observable, initialData: PrefData) { + init(source: Observable, scrollSource: Observable, neoVimInfoProvider: NeoVimInfoProvider, initialData: PrefData) { + self.neoVimInfoProvider = neoVimInfoProvider self.flow = EmbeddableComponent(source: source) self.baseUrl = self.previewService.baseUrl() @@ -144,6 +147,7 @@ class PreviewComponent: NSView, ViewComponent, ToolDataHolder { self.markdownRenderer = MarkdownRenderer( source: self.flow.sink, scrollSource: scrollSource.throttle(0.5, latest: true, scheduler: MainScheduler.instance), + neoVimInfoProvider: neoVimInfoProvider, initialData: markdownData )