Skip to content

Commit 3306da6

Browse files
committed
custom binary option wiring
1 parent d7411b7 commit 3306da6

File tree

5 files changed

+56
-4
lines changed

5 files changed

+56
-4
lines changed

VimR/VimR/AdvancedPrefReducer.swift

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ final class AdvancedPrefReducer: ReducerType {
2626

2727
case let .setUseSnapshotUpdate(value):
2828
state.useSnapshotUpdate = value
29+
30+
case let .setNvimBinary(value):
31+
state.mainWindowTemplate.nvimBinary = value
2932
}
3033

3134
return (state, pair.action, true)

VimR/VimR/AdvencedPref.swift

+36
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
1515
case setUseSnapshotUpdate(Bool)
1616
case setUseLiveResize(Bool)
1717
case setDrawsParallel(Bool)
18+
case setNvimBinary(String)
1819
}
1920

2021
override var displayName: String {
@@ -32,6 +33,7 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
3233
self.useSnapshotUpdate = state.useSnapshotUpdate
3334
self.useLiveResize = state.mainWindowTemplate.useLiveResize
3435
self.drawsParallel = state.mainWindowTemplate.drawsParallel
36+
self.nvimBinary = state.mainWindowTemplate.nvimBinary
3537

3638
super.init(frame: .zero)
3739

@@ -42,11 +44,13 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
4244
.observe(on: MainScheduler.instance)
4345
.subscribe(onNext: { state in
4446
if self.useInteractiveZsh != state.mainWindowTemplate.useInteractiveZsh
47+
|| self.nvimBinary != state.mainWindowTemplate.nvimBinary
4548
|| self.useSnapshotUpdate != state.useSnapshotUpdate
4649
|| self.useLiveResize != state.mainWindowTemplate.useLiveResize
4750
|| self.drawsParallel != state.mainWindowTemplate.drawsParallel
4851
{
4952
self.useInteractiveZsh = state.mainWindowTemplate.useInteractiveZsh
53+
self.nvimBinary = state.mainWindowTemplate.nvimBinary
5054
self.useSnapshotUpdate = state.useSnapshotUpdate
5155
self.useLiveResize = state.mainWindowTemplate.useLiveResize
5256
self.drawsParallel = state.mainWindowTemplate.drawsParallel
@@ -64,22 +68,29 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
6468
private var useSnapshotUpdate: Bool
6569
private var useLiveResize: Bool
6670
private var drawsParallel: Bool
71+
private var nvimBinary: String
6772

6873
private let useInteractiveZshCheckbox = NSButton(forAutoLayout: ())
6974
private let useSnapshotUpdateCheckbox = NSButton(forAutoLayout: ())
7075
private let useLiveResizeCheckbox = NSButton(forAutoLayout: ())
7176
private let drawsParallelCheckbox = NSButton(forAutoLayout: ())
77+
private let nvimBinaryField = NSTextView(forAutoLayout: ())
7278

7379
@available(*, unavailable)
7480
required init?(coder _: NSCoder) {
7581
fatalError("init(coder:) has not been implemented")
7682
}
7783

84+
override func windowWillClose() {
85+
self.nvimBinaryFieldAction()
86+
}
87+
7888
private func updateViews() {
7989
self.useSnapshotUpdateCheckbox.boolState = self.useSnapshotUpdate
8090
self.useInteractiveZshCheckbox.boolState = self.useInteractiveZsh
8191
self.useLiveResizeCheckbox.boolState = self.useLiveResize
8292
self.drawsParallelCheckbox.boolState = self.drawsParallel
93+
self.nvimBinaryField.string = self.nvimBinary
8394
}
8495

8596
private func addViews() {
@@ -136,6 +147,9 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
136147
when scrolling very fast.
137148
"""#)
138149

150+
let nvimBinaryTitle = self.titleTextField(title: "NeoVim Binary:")
151+
let nvimBinaryField = self.nvimBinaryField
152+
139153
self.addSubview(paneTitle)
140154

141155
self.addSubview(useSnapshotUpdate)
@@ -146,6 +160,8 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
146160
self.addSubview(useLiveResizeInfo)
147161
self.addSubview(drawsParallelBox)
148162
self.addSubview(drawsParallelInfo)
163+
self.addSubview(nvimBinaryTitle)
164+
self.addSubview(nvimBinaryField)
149165

150166
paneTitle.autoPinEdge(toSuperviewEdge: .top, withInset: 18)
151167
paneTitle.autoPinEdge(toSuperviewEdge: .left, withInset: 18)
@@ -174,6 +190,21 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
174190

175191
useInteractiveZshInfo.autoPinEdge(.top, to: .bottom, of: useInteractiveZsh, withOffset: 5)
176192
useInteractiveZshInfo.autoPinEdge(.left, to: .left, of: useInteractiveZsh)
193+
194+
nvimBinaryTitle.autoPinEdge(.top, to: .bottom, of: useInteractiveZshInfo, withOffset: 18)
195+
nvimBinaryTitle.autoPinEdge(.left, to: .left, of: useLiveResize, withOffset: 5)
196+
//nvimBinaryTitle.autoAlignAxis(.baseline, toSameAxisOf: nvimBinaryField)
197+
198+
nvimBinaryField.autoPinEdge(.top, to: .bottom, of: useInteractiveZshInfo, withOffset: 18)
199+
nvimBinaryField.autoPinEdge(.left, to: .right, of: nvimBinaryTitle, withOffset: 5)
200+
nvimBinaryField.autoPinEdge(toSuperviewEdge: .right, withInset: 18)
201+
nvimBinaryField.autoSetDimension(.height, toSize: 20, relation: .greaterThanOrEqual)
202+
NotificationCenter.default.addObserver(
203+
forName: NSControl.textDidEndEditingNotification,
204+
object: nvimBinaryField,
205+
queue: nil
206+
) { [weak self] _ in self?.nvimBinaryFieldAction() }
207+
177208
}
178209
}
179210

@@ -195,4 +226,9 @@ extension AdvancedPref {
195226
@objc func useSnapshotUpdateChannelAction(_ sender: NSButton) {
196227
self.emit(.setUseSnapshotUpdate(sender.boolState))
197228
}
229+
230+
func nvimBinaryFieldAction() {
231+
let newNvimBinary = self.nvimBinaryField.string
232+
self.emit(.setNvimBinary(newNvimBinary))
233+
}
198234
}

VimR/VimR/MainWindow.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ final class MainWindow: NSObject,
8686
usesCustomTabBar: state.appearance.usesCustomTab,
8787
useInteractiveZsh: state.useInteractiveZsh,
8888
cwd: state.cwd,
89+
nvimBinary: state.nvimBinary,
8990
nvimArgs: state.nvimArgs,
9091
envDict: state.envDict,
9192
sourceFiles: sourceFileUrls
@@ -259,7 +260,7 @@ final class MainWindow: NSObject,
259260
private var usesTheme = true
260261
private var lastThemeMark = Token()
261262

262-
private let log = OSLog(
263+
internal let log = OSLog(
263264
subsystem: Defs.loggerSubsystem,
264265
category: Defs.LoggerCategory.ui
265266
)

VimR/VimR/PrefMiddleware.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ final class PrefMiddleware: MiddlewareType {
1111
typealias StateType = AppState
1212
typealias ActionType = AnyAction
1313

14-
static let compatibleVersion = "168"
14+
static let compatibleVersion = "169"
1515

1616
let mainWindow = MainWindowMiddleware()
1717

@@ -20,6 +20,7 @@ final class PrefMiddleware: MiddlewareType {
2020
do {
2121
let dictionary: [String: Any] = try dictEncoder.encode(appState)
2222
defaults.set(dictionary, forKey: PrefMiddleware.compatibleVersion)
23+
defaults.synchronize()
2324
} catch {
2425
self.log.error("AppState could not converted to Dictionary: \(error)")
2526
}
@@ -59,6 +60,7 @@ final class PrefMiddleware: MiddlewareType {
5960
do {
6061
let dictionary: [String: Any] = try dictEncoder.encode(result.state)
6162
defaults.set(dictionary, forKey: PrefMiddleware.compatibleVersion)
63+
defaults.synchronize()
6264
} catch {
6365
self.log.error("AppState could not converted to Dictionary: \(error)")
6466
}
@@ -86,6 +88,7 @@ final class PrefMiddleware: MiddlewareType {
8688
do {
8789
let dictionary: [String: Any] = try dictEncoder.encode(result.state)
8890
defaults.set(dictionary, forKey: PrefMiddleware.compatibleVersion)
91+
defaults.synchronize()
8992
} catch {
9093
self.log.error("AppState could not converted to Dictionary: \(error)")
9194
}

VimR/VimR/States.swift

+11-2
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,9 @@ struct AppearanceState: Codable {
263263

264264
extension MainWindow {
265265
struct State: Codable {
266-
static let `default` = State(isAllToolsVisible: true, isToolButtonsVisible: true)
266+
static let `default` = State(isAllToolsVisible: true,
267+
isToolButtonsVisible: true,
268+
nvimBinary: "")
267269

268270
static let defaultTools: [MainWindow.Tools: WorkspaceToolState] = [
269271
.fileBrowser: WorkspaceToolState(location: .left, dimension: 200, open: true),
@@ -315,6 +317,7 @@ extension MainWindow {
315317

316318
var appearance = AppearanceState.default
317319
var useInteractiveZsh = false
320+
var nvimBinary: String = ""
318321
var nvimArgs: [String]?
319322
var cliPipePath: String?
320323
var envDict: [String: String]?
@@ -324,15 +327,17 @@ extension MainWindow {
324327
var isLeftOptionMeta = false
325328
var isRightOptionMeta = false
326329

330+
327331
// to be cleaned
328332
var urlsToOpen = [URL: OpenMode]()
329333
var currentBufferToSet: NvimView.Buffer?
330334
var cwdToSet: URL?
331335
var viewToBeFocused: FocusableView? = FocusableView.neoVimView
332336

333-
init(isAllToolsVisible: Bool, isToolButtonsVisible: Bool) {
337+
init(isAllToolsVisible: Bool, isToolButtonsVisible: Bool, nvimBinary: String) {
334338
self.isAllToolsVisible = isAllToolsVisible
335339
self.isToolButtonsVisible = isToolButtonsVisible
340+
self.nvimBinary = nvimBinary
336341
}
337342

338343
enum CodingKeys: String, CodingKey {
@@ -346,6 +351,8 @@ extension MainWindow {
346351
case isRightOptionMeta = "is-right-option-meta"
347352

348353
case useInteractiveZsh = "use-interactive-zsh"
354+
case nvimBinary = "nvim-binary"
355+
349356
case useLiveResize = "use-live-resize"
350357
case drawsParallel = "draws-parallel"
351358
case isShowHidden = "is-show-hidden"
@@ -370,6 +377,7 @@ extension MainWindow {
370377
forKey: .useInteractiveZsh,
371378
default: State.default.useInteractiveZsh
372379
)
380+
self.nvimBinary = try container.decodeIfPresent(String.self, forKey: .nvimBinary) ?? State.default.nvimBinary
373381
self.useLiveResize = try container.decode(
374382
forKey: .useLiveResize,
375383
default: State.default.useLiveResize
@@ -450,6 +458,7 @@ extension MainWindow {
450458
try container.encode(self.isLeftOptionMeta, forKey: .isLeftOptionMeta)
451459
try container.encode(self.isRightOptionMeta, forKey: .isRightOptionMeta)
452460
try container.encode(self.useInteractiveZsh, forKey: .useInteractiveZsh)
461+
try container.encode(self.nvimBinary, forKey: .nvimBinary)
453462
try container.encode(self.fileBrowserShowHidden, forKey: .isShowHidden)
454463

455464
// See [1]

0 commit comments

Comments
 (0)