mirror of
https://github.com/qvacua/vimr.git
synced 2024-09-11 17:15:34 +03:00
Compare commits
11 Commits
fd842a2500
...
ef0b105056
Author | SHA1 | Date | |
---|---|---|---|
|
ef0b105056 | ||
|
8d953fa0a0 | ||
|
e22bd2d755 | ||
|
fd63e8dace | ||
|
5aa941e6cb | ||
|
ab3efd4a44 | ||
|
79862b02e5 | ||
|
dc99ead2ef | ||
|
aabd13c6ef | ||
|
36a18ed474 | ||
|
071369cdc3 |
@ -70,7 +70,7 @@ final class AttributesRunDrawer {
|
||||
|
||||
context.setFillColor(ColorUtils.cgColorIgnoringAlpha(run.attrs.effectiveForeground))
|
||||
|
||||
fontGlyphRuns.forEach { run in
|
||||
for run in fontGlyphRuns {
|
||||
CTFontDrawGlyphs(run.font, run.glyphs, run.positions, run.glyphs.count, context)
|
||||
}
|
||||
|
||||
@ -189,7 +189,7 @@ final class AttributesRunDrawer {
|
||||
self.descent = CTFontGetDescent(self.font)
|
||||
self.underlinePosition = CTFontGetUnderlinePosition(self.font)
|
||||
self.underlineThickness = CTFontGetUnderlineThickness(self.font)
|
||||
|
||||
|
||||
self.typesetter.clearCache()
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +168,8 @@ public extension NvimView {
|
||||
.map { tabs in tabs.map(\.windows).flatMap { $0 } }
|
||||
.flatMapCompletable { [weak self] wins -> Completable in
|
||||
if let win = wins.first(where: { $0.buffer == buffer }) {
|
||||
guard let completable = self?.api.nvimSetCurrentWin(window: RxNeovimApi.Window(win.handle))
|
||||
guard let completable = self?.api
|
||||
.nvimSetCurrentWin(window: RxNeovimApi.Window(win.handle))
|
||||
else {
|
||||
throw RxNeovimApi.Error.exception(message: "Could not set current win")
|
||||
}
|
||||
|
@ -8,18 +8,13 @@ import Cocoa
|
||||
extension NvimView {
|
||||
override public func viewDidMoveToWindow() { self.window?.colorSpace = colorSpace }
|
||||
|
||||
override public func draw(_ dirtyUnionRect: NSRect) {
|
||||
override public func draw(_: NSRect) {
|
||||
guard self.ugrid.hasData else { return }
|
||||
|
||||
guard let context = NSGraphicsContext.current?.cgContext else { return }
|
||||
context.saveGState()
|
||||
defer { context.restoreGState() }
|
||||
|
||||
if self.inLiveResize || self.currentlyResizing, !self.usesLiveResize {
|
||||
self.drawResizeInfo(in: context, with: dirtyUnionRect)
|
||||
return
|
||||
}
|
||||
|
||||
if self.isCurrentlyPinching {
|
||||
self.drawPinchImage(in: context)
|
||||
return
|
||||
@ -145,37 +140,6 @@ extension NvimView {
|
||||
context.restoreGState()
|
||||
}
|
||||
|
||||
private func drawResizeInfo(
|
||||
in context: CGContext, with dirtyUnionRect: CGRect
|
||||
) {
|
||||
context.setFillColor(self.theme.background.cgColor)
|
||||
context.fill(dirtyUnionRect)
|
||||
|
||||
let boundsSize = self.bounds.size
|
||||
|
||||
let emojiSize = self.currentEmoji.size(withAttributes: emojiAttrs)
|
||||
let emojiX = (boundsSize.width - emojiSize.width) / 2
|
||||
let emojiY = (boundsSize.height - emojiSize.height) / 2
|
||||
|
||||
let discreteSize = self.discreteSize(size: boundsSize)
|
||||
let displayStr = "\(discreteSize.width) × \(discreteSize.height)"
|
||||
let infoStr = "(You can turn on live resizing feature in the Advanced preferences)"
|
||||
|
||||
var (sizeAttrs, infoAttrs) = (resizeTextAttrs, infoTextAttrs)
|
||||
sizeAttrs[.foregroundColor] = self.theme.foreground
|
||||
infoAttrs[.foregroundColor] = self.theme.foreground
|
||||
|
||||
let size = displayStr.size(withAttributes: sizeAttrs)
|
||||
let (x, y) = ((boundsSize.width - size.width) / 2, emojiY - size.height)
|
||||
|
||||
let infoSize = infoStr.size(withAttributes: infoAttrs)
|
||||
let (infoX, infoY) = ((boundsSize.width - infoSize.width) / 2, y - size.height - 5)
|
||||
|
||||
self.currentEmoji.draw(at: CGPoint(x: emojiX, y: emojiY), withAttributes: emojiAttrs)
|
||||
displayStr.draw(at: CGPoint(x: x, y: y), withAttributes: sizeAttrs)
|
||||
infoStr.draw(at: CGPoint(x: infoX, y: infoY), withAttributes: infoAttrs)
|
||||
}
|
||||
|
||||
private func drawPinchImage(in context: CGContext) {
|
||||
context.interpolationQuality = .none
|
||||
|
||||
|
@ -22,16 +22,6 @@ extension NvimView {
|
||||
return
|
||||
}
|
||||
|
||||
if self.usesLiveResize {
|
||||
self.resizeNeoVimUi(to: newSize)
|
||||
return
|
||||
}
|
||||
|
||||
if self.inLiveResize || self.currentlyResizing { return }
|
||||
|
||||
// There can be cases where the frame is resized not by live resizing,
|
||||
// eg when the window is resized by window management tools.
|
||||
// Thus, we make sure that the resize call is made when this happens.
|
||||
self.resizeNeoVimUi(to: newSize)
|
||||
}
|
||||
|
||||
@ -48,8 +38,6 @@ extension NvimView {
|
||||
}
|
||||
|
||||
func resizeNeoVimUi(to size: CGSize) {
|
||||
self.currentEmoji = self.randomEmoji()
|
||||
|
||||
let discreteSize = self.discreteSize(size: size)
|
||||
if discreteSize == self.ugrid.size {
|
||||
self.markForRenderWholeView()
|
||||
|
@ -101,10 +101,10 @@ public extension NvimView {
|
||||
public var visualBackground = NSColor.selectedContentBackgroundColor
|
||||
|
||||
public var directoryForeground = NSColor.textColor
|
||||
|
||||
|
||||
public var tabForeground = NSColor.textColor
|
||||
public var tabBackground = NSColor.textBackgroundColor
|
||||
|
||||
|
||||
public init() {}
|
||||
|
||||
public init(_ values: [Int]) {
|
||||
@ -121,8 +121,8 @@ public extension NvimView {
|
||||
self.directoryForeground = values[4] < 0
|
||||
? Theme.default.directoryForeground
|
||||
: color(values[4])
|
||||
self.tabBackground = values[5] < 0 ? Theme.default.background : color(values[5])
|
||||
self.tabForeground = values[6] < 0 ? Theme.default.foreground : color(values[6])
|
||||
self.tabBackground = values[5] < 0 ? Theme.default.background : color(values[5])
|
||||
self.tabForeground = values[6] < 0 ? Theme.default.foreground : color(values[6])
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
|
@ -360,7 +360,9 @@ extension NvimView {
|
||||
}
|
||||
|
||||
private func flush() {
|
||||
for region in self.regionsToFlush { self.markForRender(region: region) }
|
||||
for region in self.regionsToFlush {
|
||||
self.markForRender(region: region)
|
||||
}
|
||||
self.regionsToFlush.removeAll(keepingCapacity: true)
|
||||
}
|
||||
|
||||
|
@ -70,8 +70,6 @@ public final class NvimView: NSView, NSUserInterfaceValidations, NSTextInputClie
|
||||
|
||||
public internal(set) var theme = Theme.default
|
||||
|
||||
public var usesLiveResize = false
|
||||
|
||||
public var usesLigatures = false {
|
||||
didSet {
|
||||
self.drawer.usesLigatures = self.usesLigatures
|
||||
@ -312,7 +310,6 @@ public final class NvimView: NSView, NSUserInterfaceValidations, NSTextInputClie
|
||||
var pinchBitmap: NSBitmapImageRep?
|
||||
|
||||
var currentlyResizing = false
|
||||
var currentEmoji = "😎"
|
||||
|
||||
var _font = NvimView.defaultFont
|
||||
var _cwd = URL(fileURLWithPath: NSHomeDirectory())
|
||||
|
@ -11,7 +11,7 @@ final class Typesetter {
|
||||
func clearCache() {
|
||||
self.ctRunsCache.clear()
|
||||
}
|
||||
|
||||
|
||||
func fontGlyphRunsWithLigatures(
|
||||
nvimUtf16Cells: [[Unicode.UTF16.CodeUnit]],
|
||||
startColumn: Int,
|
||||
@ -264,7 +264,9 @@ final class Typesetter {
|
||||
let element = pointer[k]
|
||||
if element.isEmpty { continue }
|
||||
|
||||
for j in 0..<element.count { resultPtr[i + j] = element[j] }
|
||||
for j in 0..<element.count {
|
||||
resultPtr[i + j] = element[j]
|
||||
}
|
||||
|
||||
i = i + element.count
|
||||
}
|
||||
|
@ -416,10 +416,10 @@ if __name__ == '__main__':
|
||||
nvim_path = os.environ['NVIM_PATH'] if 'NVIM_PATH' in os.environ else 'nvim'
|
||||
|
||||
nvim_output = subprocess.run([nvim_path, '--api-info'], stdout=subprocess.PIPE)
|
||||
api = msgpack.unpackb(nvim_output.stdout)
|
||||
api = msgpack.unpackb(nvim_output.stdout, raw=False)
|
||||
|
||||
version = parse_version(api['version'])
|
||||
functions = api['functions'] #[f for f in api['functions'] if 'deprecated_since' not in f]
|
||||
functions = api['functions']
|
||||
body = '\n'.join([parse_function(f) for f in functions])
|
||||
|
||||
result = extension_template.substitute(
|
||||
|
@ -1126,7 +1126,7 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 20240528.171603;
|
||||
CURRENT_PROJECT_VERSION = 20240531.221846;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_MODULE_VERIFIER = YES;
|
||||
@ -1192,7 +1192,7 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 20240528.171603;
|
||||
CURRENT_PROJECT_VERSION = 20240531.221846;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_MODULE_VERIFIER = YES;
|
||||
@ -1225,7 +1225,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 20240528.171603;
|
||||
CURRENT_PROJECT_VERSION = 20240531.221846;
|
||||
DEFINES_MODULE = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
IBC_MODULE = VimR;
|
||||
@ -1250,7 +1250,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 20240528.171603;
|
||||
CURRENT_PROJECT_VERSION = 20240531.221846;
|
||||
DEFINES_MODULE = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
IBC_MODULE = VimR;
|
||||
|
@ -13,10 +13,6 @@ final class AdvancedPrefReducer: ReducerType {
|
||||
var state = pair.state
|
||||
|
||||
switch pair.action {
|
||||
case let .setUseLiveResize(value):
|
||||
state.mainWindowTemplate.useLiveResize = value
|
||||
state.mainWindows.keys.forEach { state.mainWindows[$0]?.useLiveResize = value }
|
||||
|
||||
case let .setUseInteractiveZsh(value):
|
||||
state.mainWindowTemplate.useInteractiveZsh = value
|
||||
|
||||
|
@ -13,7 +13,6 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
enum Action {
|
||||
case setUseInteractiveZsh(Bool)
|
||||
case setUseSnapshotUpdate(Bool)
|
||||
case setUseLiveResize(Bool)
|
||||
case setNvimBinary(String)
|
||||
}
|
||||
|
||||
@ -30,7 +29,6 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
|
||||
self.useInteractiveZsh = state.mainWindowTemplate.useInteractiveZsh
|
||||
self.useSnapshotUpdate = state.useSnapshotUpdate
|
||||
self.useLiveResize = state.mainWindowTemplate.useLiveResize
|
||||
self.nvimBinary = state.mainWindowTemplate.nvimBinary
|
||||
|
||||
super.init(frame: .zero)
|
||||
@ -44,12 +42,10 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
if self.useInteractiveZsh != state.mainWindowTemplate.useInteractiveZsh
|
||||
|| self.nvimBinary != state.mainWindowTemplate.nvimBinary
|
||||
|| self.useSnapshotUpdate != state.useSnapshotUpdate
|
||||
|| self.useLiveResize != state.mainWindowTemplate.useLiveResize
|
||||
{
|
||||
self.useInteractiveZsh = state.mainWindowTemplate.useInteractiveZsh
|
||||
self.nvimBinary = state.mainWindowTemplate.nvimBinary
|
||||
self.useSnapshotUpdate = state.useSnapshotUpdate
|
||||
self.useLiveResize = state.mainWindowTemplate.useLiveResize
|
||||
|
||||
self.updateViews()
|
||||
}
|
||||
@ -62,12 +58,10 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
|
||||
private var useInteractiveZsh: Bool
|
||||
private var useSnapshotUpdate: Bool
|
||||
private var useLiveResize: Bool
|
||||
private var nvimBinary: String = ""
|
||||
|
||||
private let useInteractiveZshCheckbox = NSButton(forAutoLayout: ())
|
||||
private let useSnapshotUpdateCheckbox = NSButton(forAutoLayout: ())
|
||||
private let useLiveResizeCheckbox = NSButton(forAutoLayout: ())
|
||||
private let nvimBinaryField = NSTextField(forAutoLayout: ())
|
||||
|
||||
@available(*, unavailable)
|
||||
@ -82,7 +76,6 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
private func updateViews() {
|
||||
self.useSnapshotUpdateCheckbox.boolState = self.useSnapshotUpdate
|
||||
self.useInteractiveZshCheckbox.boolState = self.useInteractiveZsh
|
||||
self.useLiveResizeCheckbox.boolState = self.useLiveResize
|
||||
self.nvimBinaryField.stringValue = self.nvimBinary
|
||||
}
|
||||
|
||||
@ -115,18 +108,6 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
of VimR in no time!
|
||||
"""#)
|
||||
|
||||
let useLiveResize = self.useLiveResizeCheckbox
|
||||
self.configureCheckbox(
|
||||
button: useLiveResize,
|
||||
title: "Use Live Window Resizing",
|
||||
action: #selector(AdvancedPref.useLiveResizeAction(_:))
|
||||
)
|
||||
|
||||
let useLiveResizeInfo = self.infoTextField(markdown: #"""
|
||||
The Live Resizing is yet experimental. You may experience some issues.\
|
||||
If you do, please report them at [GitHub](https://github.com/qvacua/vimr/issues).
|
||||
"""#)
|
||||
|
||||
let nvimBinaryTitle = self.titleTextField(title: "NeoVim Binary:")
|
||||
let nvimBinaryField = self.nvimBinaryField
|
||||
|
||||
@ -136,8 +117,6 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
self.addSubview(useSnapshotUpdateInfo)
|
||||
self.addSubview(useInteractiveZsh)
|
||||
self.addSubview(useInteractiveZshInfo)
|
||||
self.addSubview(useLiveResize)
|
||||
self.addSubview(useLiveResizeInfo)
|
||||
self.addSubview(nvimBinaryTitle)
|
||||
self.addSubview(nvimBinaryField)
|
||||
|
||||
@ -145,30 +124,24 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
paneTitle.autoPinEdge(toSuperviewEdge: .left, withInset: 18)
|
||||
paneTitle.autoPinEdge(toSuperviewEdge: .right, withInset: 18, relation: .greaterThanOrEqual)
|
||||
|
||||
useLiveResize.autoPinEdge(.top, to: .bottom, of: paneTitle, withOffset: 18)
|
||||
useLiveResize.autoPinEdge(toSuperviewEdge: .left, withInset: 18)
|
||||
|
||||
useLiveResizeInfo.autoPinEdge(.top, to: .bottom, of: useLiveResize, withOffset: 5)
|
||||
useLiveResizeInfo.autoPinEdge(.left, to: .left, of: useLiveResize)
|
||||
|
||||
useSnapshotUpdate.autoPinEdge(.top, to: .bottom, of: useLiveResizeInfo, withOffset: 18)
|
||||
useSnapshotUpdate.autoPinEdge(.left, to: .left, of: useLiveResize, withOffset: 5)
|
||||
useSnapshotUpdate.autoPinEdge(.top, to: .bottom, of: paneTitle, withOffset: 18)
|
||||
useSnapshotUpdate.autoPinEdge(.left, to: .left, of: paneTitle)
|
||||
|
||||
useSnapshotUpdateInfo.autoPinEdge(.top, to: .bottom, of: useSnapshotUpdate, withOffset: 5)
|
||||
useSnapshotUpdateInfo.autoPinEdge(.left, to: .left, of: useSnapshotUpdate)
|
||||
|
||||
useInteractiveZsh.autoPinEdge(.top, to: .bottom, of: useSnapshotUpdateInfo, withOffset: 18)
|
||||
useInteractiveZsh.autoPinEdge(.left, to: .left, of: useLiveResize, withOffset: 5)
|
||||
useInteractiveZsh.autoPinEdge(.left, to: .left, of: useSnapshotUpdate)
|
||||
|
||||
useInteractiveZshInfo.autoPinEdge(.top, to: .bottom, of: useInteractiveZsh, withOffset: 5)
|
||||
useInteractiveZshInfo.autoPinEdge(.left, to: .left, of: useInteractiveZsh)
|
||||
|
||||
nvimBinaryTitle.autoPinEdge(.top, to: .bottom, of: useInteractiveZshInfo, withOffset: 18)
|
||||
nvimBinaryTitle.autoPinEdge(.left, to: .left, of: useLiveResize, withOffset: 5)
|
||||
nvimBinaryTitle.autoPinEdge(.left, to: .left, of: useSnapshotUpdate)
|
||||
// nvimBinaryTitle.autoAlignAxis(.baseline, toSameAxisOf: nvimBinaryField)
|
||||
|
||||
nvimBinaryField.autoPinEdge(.top, to: .bottom, of: useInteractiveZshInfo, withOffset: 18)
|
||||
nvimBinaryField.autoPinEdge(.left, to: .right, of: nvimBinaryTitle, withOffset: 5)
|
||||
nvimBinaryField.autoPinEdge(.left, to: .right, of: nvimBinaryTitle)
|
||||
nvimBinaryField.autoPinEdge(toSuperviewEdge: .right, withInset: 18)
|
||||
nvimBinaryField.autoSetDimension(.height, toSize: 20, relation: .greaterThanOrEqual)
|
||||
NotificationCenter.default.addObserver(
|
||||
@ -182,10 +155,6 @@ final class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
||||
// MARK: - Actions
|
||||
|
||||
extension AdvancedPref {
|
||||
@objc func useLiveResizeAction(_ sender: NSButton) {
|
||||
self.emit(.setUseLiveResize(sender.boolState))
|
||||
}
|
||||
|
||||
@objc func useInteractiveZshAction(_ sender: NSButton) {
|
||||
self.emit(.setUseInteractiveZsh(sender.boolState))
|
||||
}
|
||||
|
@ -350,9 +350,9 @@ extension AppDelegate {
|
||||
self.emit(.openInKeyWindow(config: config))
|
||||
|
||||
case .separateWindows:
|
||||
urls.forEach {
|
||||
for url in urls {
|
||||
let config = OpenConfig(
|
||||
urls: [$0],
|
||||
urls: [url],
|
||||
cwd: cwd,
|
||||
cliPipePath: pipePath,
|
||||
nvimArgs: nil,
|
||||
|
@ -110,7 +110,7 @@ final class Context: ReduxContext {
|
||||
}
|
||||
|
||||
private func cleanUpAppState() {
|
||||
self.state.mainWindows.keys.forEach { uuid in
|
||||
for uuid in self.state.mainWindows.keys {
|
||||
self.state.mainWindows[uuid]?.cwdToSet = nil
|
||||
self.state.mainWindows[uuid]?.currentBufferToSet = nil
|
||||
self.state.mainWindows[uuid]?.viewToBeFocused = nil
|
||||
|
@ -129,7 +129,7 @@ final class FuzzySearchService {
|
||||
let foldersToScan = try context.fetch(req)
|
||||
// We use the ID of objects since we reset in scanScore(), which resets all properties of
|
||||
// foldersToScan after first folderToScan.
|
||||
foldersToScan.forEach { folder in
|
||||
for folder in foldersToScan {
|
||||
self.scanScore(
|
||||
matcher: matcher,
|
||||
folderId: folder.objectID,
|
||||
@ -331,7 +331,9 @@ final class FuzzySearchService {
|
||||
return
|
||||
}
|
||||
|
||||
for child in folder.children ?? [] { ctx.delete(child) }
|
||||
for child in folder.children ?? [] {
|
||||
ctx.delete(child)
|
||||
}
|
||||
|
||||
folder.needsScanChildren = true
|
||||
self.log.trace("Marked \(folder.url!) for scanning")
|
||||
|
@ -1224,7 +1224,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.47.1</string>
|
||||
<string>0.47.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@ -1241,7 +1241,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>20240528.171603</string>
|
||||
<string>20240531.221846</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.productivity</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
@ -176,9 +176,9 @@ final class MainWindow: NSObject,
|
||||
|
||||
self.usesTheme = state.appearance.usesTheme
|
||||
|
||||
state.orderedTools.forEach { toolId in
|
||||
for toolId in state.orderedTools {
|
||||
guard let tool = tools[toolId] else {
|
||||
return
|
||||
continue
|
||||
}
|
||||
|
||||
self.workspace.append(
|
||||
@ -187,7 +187,7 @@ final class MainWindow: NSObject,
|
||||
)
|
||||
}
|
||||
|
||||
self.tools.forEach { toolId, toolContainer in
|
||||
for (toolId, toolContainer) in self.tools {
|
||||
if state.tools[toolId]?.open == true {
|
||||
toolContainer.toggle()
|
||||
}
|
||||
@ -207,7 +207,6 @@ final class MainWindow: NSObject,
|
||||
|
||||
self.addViews(withTopInset: 0)
|
||||
|
||||
self.neoVimView.usesLiveResize = state.useLiveResize
|
||||
self.neoVimView.delegate = self
|
||||
self.updateNeoVimAppearance()
|
||||
|
||||
@ -428,10 +427,6 @@ final class MainWindow: NSObject,
|
||||
self.neoVimView.isLeftOptionMeta = state.isLeftOptionMeta
|
||||
self.neoVimView.isRightOptionMeta = state.isRightOptionMeta
|
||||
|
||||
if self.neoVimView.usesLiveResize != state.useLiveResize {
|
||||
self.neoVimView.usesLiveResize = state.useLiveResize
|
||||
}
|
||||
|
||||
if self.defaultFont != state.appearance.font
|
||||
|| self.linespacing != state.appearance.linespacing
|
||||
|| self.characterspacing != state.appearance.characterspacing
|
||||
@ -482,9 +477,9 @@ final class MainWindow: NSObject,
|
||||
|
||||
tabsTheme.selectedForegroundColor = self.theme.highlightForeground
|
||||
tabsTheme.selectedBackgroundColor = self.theme.highlightBackground
|
||||
|
||||
tabsTheme.tabBackgroundColor = self.theme.tabBackground;
|
||||
tabsTheme.tabForegroundColor = self.theme.tabForeground;
|
||||
|
||||
tabsTheme.tabBackgroundColor = self.theme.tabBackground
|
||||
tabsTheme.tabForegroundColor = self.theme.tabForeground
|
||||
|
||||
tabsTheme.tabSelectedIndicatorColor = self.theme.highlightForeground
|
||||
|
||||
|
@ -53,7 +53,7 @@ final class MainWindowReducer: ReducerType {
|
||||
|
||||
case let .setToolsState(tools):
|
||||
state.orderedTools = []
|
||||
tools.forEach { toolPair in
|
||||
for toolPair in tools {
|
||||
let toolId = toolPair.0
|
||||
let tool = toolPair.1
|
||||
|
||||
|
@ -202,17 +202,17 @@ final class OpenQuicklyWindow: NSObject,
|
||||
let newUrls = urlsToMonitor.subtracting(currentUrls)
|
||||
let obsoleteUrls = currentUrls.subtracting(urlsToMonitor)
|
||||
|
||||
newUrls.forEach { url in
|
||||
for url in newUrls {
|
||||
self.log.info("Adding \(url) and its service.")
|
||||
guard let service = try? FuzzySearchService(root: url) else {
|
||||
self.log.error("Could not create FileService for \(url)")
|
||||
return
|
||||
continue
|
||||
}
|
||||
|
||||
self.searchServicePerRootUrl[url] = service
|
||||
}
|
||||
|
||||
obsoleteUrls.forEach { url in
|
||||
for url in obsoleteUrls {
|
||||
self.log.info("Removing \(url) and its service.")
|
||||
self.searchServicePerRootUrl.removeValue(forKey: url)
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class PrefWindow: NSObject,
|
||||
weak var shortcutService: ShortcutService? {
|
||||
didSet {
|
||||
let shortcutsPref = self.panes.first { pane in pane is ShortcutsPref } as? ShortcutsPref
|
||||
shortcutsPref?.shortcutService = shortcutService
|
||||
shortcutsPref?.shortcutService = self.shortcutService
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ final class ShortcutsPref: PrefPane,
|
||||
return
|
||||
}
|
||||
|
||||
legacyDefaultShortcuts.forEach { id in
|
||||
for id in legacyDefaultShortcuts {
|
||||
let shortcut: Shortcut? = if let dict = self.shortcutsUserDefaults?
|
||||
.value(forKey: id) as? [String: Any]
|
||||
{
|
||||
@ -121,7 +121,7 @@ final class ShortcutsPref: PrefPane,
|
||||
|
||||
private func initShortcutUserDefaults() {
|
||||
let transformer = ShortcutValueTransformer.shared
|
||||
defaultShortcuts.forEach { id, shortcut in
|
||||
for (id, shortcut) in defaultShortcuts {
|
||||
if self.shortcutsUserDefaults?.value(forKey: id) == nil {
|
||||
let shortcutData = transformer.reverseTransformedValue(shortcut) as? NSData
|
||||
self.shortcutsUserDefaults?.set(shortcutData, forKey: id)
|
||||
|
@ -304,8 +304,6 @@ extension MainWindow {
|
||||
|
||||
var fileBrowserShowHidden = false
|
||||
|
||||
var useLiveResize = false
|
||||
|
||||
var isTemporarySession = false
|
||||
|
||||
var customMarkdownProcessor = ""
|
||||
@ -381,10 +379,7 @@ extension MainWindow {
|
||||
)
|
||||
self.nvimBinary = try container.decodeIfPresent(String.self, forKey: .nvimBinary) ?? State
|
||||
.default.nvimBinary
|
||||
self.useLiveResize = try container.decode(
|
||||
forKey: .useLiveResize,
|
||||
default: State.default.useLiveResize
|
||||
)
|
||||
|
||||
if let frameRawValue = try container.decodeIfPresent(String.self, forKey: .frame) {
|
||||
self.frame = NSRectFromString(frameRawValue)
|
||||
} else {
|
||||
@ -436,7 +431,7 @@ extension MainWindow {
|
||||
return (tool, value)
|
||||
}
|
||||
let missingTools = MainWindow.Tools.all.subtracting(self.tools.keys)
|
||||
missingTools.forEach { missingTool in
|
||||
for missingTool in missingTools {
|
||||
self.tools[missingTool] = MainWindow.State.defaultTools[missingTool]!
|
||||
}
|
||||
|
||||
@ -457,7 +452,6 @@ extension MainWindow {
|
||||
try container.encode(self.isAllToolsVisible, forKey: .allToolsVisible)
|
||||
try container.encode(self.isToolButtonsVisible, forKey: .toolButtonsVisible)
|
||||
try container.encode(NSStringFromRect(self.frame), forKey: .frame)
|
||||
try container.encode(self.useLiveResize, forKey: .useLiveResize)
|
||||
try container.encode(self.customMarkdownProcessor, forKey: .customMarkdownProcessor)
|
||||
try container.encode(self.isLeftOptionMeta, forKey: .isLeftOptionMeta)
|
||||
try container.encode(self.isRightOptionMeta, forKey: .isRightOptionMeta)
|
||||
|
@ -45,8 +45,8 @@ struct Theme: CustomStringConvertible {
|
||||
var highlightBackground = NSColor.selectedContentBackgroundColor
|
||||
|
||||
var directoryForeground = NSColor.textColor
|
||||
|
||||
var tabForeground = NSColor.selectedMenuItemTextColor
|
||||
|
||||
var tabForeground = NSColor.selectedMenuItemTextColor
|
||||
var tabBackground = NSColor.selectedContentBackgroundColor
|
||||
|
||||
var cssColor = NSColor(hex: "24292e")!
|
||||
@ -80,10 +80,10 @@ struct Theme: CustomStringConvertible {
|
||||
self.highlightBackground = nvimTheme.visualBackground
|
||||
|
||||
self.directoryForeground = nvimTheme.directoryForeground
|
||||
|
||||
self.tabBackground = nvimTheme.tabBackground
|
||||
self.tabForeground = nvimTheme.tabForeground
|
||||
|
||||
|
||||
self.tabBackground = nvimTheme.tabBackground
|
||||
self.tabForeground = nvimTheme.tabForeground
|
||||
|
||||
self.updateCssColors(additionalColorDict)
|
||||
}
|
||||
|
||||
|
@ -15,10 +15,10 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.47.1</string>
|
||||
<string>0.47.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>20240528.171603</string>
|
||||
<string>20240531.221846</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
20
appcast.xml
20
appcast.xml
@ -6,25 +6,27 @@
|
||||
<description>Most recent changes with links to updates for VimR.</description>
|
||||
<language>en</language>
|
||||
<item>
|
||||
<title>v0.47.1-20240528.171603</title>
|
||||
<title>v0.47.2-20240531.221846</title>
|
||||
<link>https://twitter.com/vimrefined</link>
|
||||
<sparkle:version>20240528.171603</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.47.1</sparkle:shortVersionString>
|
||||
<sparkle:version>20240531.221846</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.47.2</sparkle:shortVersionString>
|
||||
<description><![CDATA[
|
||||
<ul>
|
||||
<li>Neovim 0.10.0 😀<ul>
|
||||
<li>0.47.0 did not contain the generated API methods for Neovim 0.10.0...</li>
|
||||
<li>Always use live resizing</li>
|
||||
<li>Dependencies updates:<ul>
|
||||
<li>sparkle-project/Sparkle@2.7.2</li>
|
||||
<li>ReactiveX/RxSwift@6.7.1</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
]]></description>
|
||||
<releaseNotesLink>
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.47.1-20240528.171603
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.47.2-20240531.221846
|
||||
</releaseNotesLink>
|
||||
<pubDate>2024-05-28T17:19:47.931984</pubDate>
|
||||
<pubDate>2024-05-31T22:25:28.381821</pubDate>
|
||||
<minimumSystemVersion>12.0</minimumSystemVersion>
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.47.1-20240528.171603/VimR-v0.47.1.tar.bz2"
|
||||
sparkle:edSignature="iTLOhPvCHlMTpFMVo77oCiUT8EYKdbUyMeV15xWVUjnc/tB62utjmM7mQvBcUhERbKZWKp7fGPR6frNdvXNNBQ==" length="19379938"
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.47.2-20240531.221846/VimR-v0.47.2.tar.bz2"
|
||||
sparkle:edSignature="sYb/KT0vh65Q4DlTe9hKmWu8bGeINujGEjF0Ozsl6MQlwt3wjKJkSZjif/stJE9vHDfr8ggDxhxCvWgt47aoBQ==" length="19388603"
|
||||
type="application/octet-stream"/>
|
||||
</item>
|
||||
</channel>
|
||||
|
@ -6,25 +6,27 @@
|
||||
<description>Most recent changes with links to updates for VimR.</description>
|
||||
<language>en</language>
|
||||
<item>
|
||||
<title>v0.47.1-20240528.171603</title>
|
||||
<title>v0.47.2-20240531.221846</title>
|
||||
<link>https://twitter.com/vimrefined</link>
|
||||
<sparkle:version>20240528.171603</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.47.1</sparkle:shortVersionString>
|
||||
<sparkle:version>20240531.221846</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.47.2</sparkle:shortVersionString>
|
||||
<description><![CDATA[
|
||||
<ul>
|
||||
<li>Neovim 0.10.0 😀<ul>
|
||||
<li>0.47.0 did not contain the generated API methods for Neovim 0.10.0...</li>
|
||||
<li>Always use live resizing</li>
|
||||
<li>Dependencies updates:<ul>
|
||||
<li>sparkle-project/Sparkle@2.7.2</li>
|
||||
<li>ReactiveX/RxSwift@6.7.1</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
]]></description>
|
||||
<releaseNotesLink>
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.47.1-20240528.171603
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.47.2-20240531.221846
|
||||
</releaseNotesLink>
|
||||
<pubDate>2024-05-28T17:19:47.931984</pubDate>
|
||||
<pubDate>2024-05-31T22:25:28.381821</pubDate>
|
||||
<minimumSystemVersion>12.0</minimumSystemVersion>
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.47.1-20240528.171603/VimR-v0.47.1.tar.bz2"
|
||||
sparkle:edSignature="iTLOhPvCHlMTpFMVo77oCiUT8EYKdbUyMeV15xWVUjnc/tB62utjmM7mQvBcUhERbKZWKp7fGPR6frNdvXNNBQ==" length="19379938"
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.47.2-20240531.221846/VimR-v0.47.2.tar.bz2"
|
||||
sparkle:edSignature="sYb/KT0vh65Q4DlTe9hKmWu8bGeINujGEjF0Ozsl6MQlwt3wjKJkSZjif/stJE9vHDfr8ggDxhxCvWgt47aoBQ==" length="19388603"
|
||||
type="application/octet-stream"/>
|
||||
</item>
|
||||
</channel>
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
readonly clean=${clean:?"true or false"}
|
||||
clean=${clean:?"true or false"}
|
||||
readonly use_committed_nvim=${use_committed_nvim:?"If true, checkout the committed version of nvim, otherwise use the workspace."}
|
||||
|
||||
main() {
|
||||
|
@ -1,5 +1,6 @@
|
||||
# Next
|
||||
|
||||
* Always use live resizing
|
||||
* Dependencies updates:
|
||||
- sparkle-project/Sparkle@2.7.2
|
||||
- ReactiveX/RxSwift@6.7.1
|
||||
|
Loading…
Reference in New Issue
Block a user