diff --git a/MongoView/Views/JavaScriptEditorView.swift b/MongoView/Views/JavaScriptEditorView.swift index b662cbe..14fba4c 100644 --- a/MongoView/Views/JavaScriptEditorView.swift +++ b/MongoView/Views/JavaScriptEditorView.swift @@ -7,12 +7,13 @@ // import AppKit +import Combine class JavaScriptEditorView: NSTextView { var highlighter = JavaScriptHighlighter() private var isRehighlighting = false - + override var string: String { get { super.string @@ -23,6 +24,9 @@ class JavaScriptEditorView: NSTextView { rehighlight() } } + + private let rehighlightSubject = PassthroughSubject() + private var debouncedRehighlightCancellable: AnyCancellable! func rehighlight() { isRehighlighting = true @@ -34,6 +38,13 @@ class JavaScriptEditorView: NSTextView { super.awakeFromNib() textStorage!.delegate = self + + typingAttributes = [ + .font: NSFont.monospacedSystemFont(ofSize: 13, weight: .regular), + .foregroundColor: NSColor.textColor + ] + + debouncedRehighlightCancellable = rehighlightSubject.throttle(for: .milliseconds(40), scheduler: RunLoop.main, latest: false).sink(receiveValue: rehighlight) } override func shouldChangeText(in affectedCharRange: NSRange, replacementString: String?) -> Bool { @@ -117,6 +128,6 @@ extension JavaScriptEditorView: NSTextStorageDelegate { } } - rehighlight() + rehighlightSubject.send() } }