mirror of
https://github.com/qvacua/vimr.git
synced 2024-09-11 17:15:34 +03:00
Compare commits
22 Commits
b99eee443d
...
c6850b6684
Author | SHA1 | Date | |
---|---|---|---|
|
c6850b6684 | ||
|
b0462732f3 | ||
|
cb991443a1 | ||
|
301e97895b | ||
|
c77e91119f | ||
|
c9256454b2 | ||
|
eb5a45d6b3 | ||
|
91aa42b070 | ||
|
6fdb62d7ff | ||
|
55bacdcfe7 | ||
|
35527bc52e | ||
|
4c3d968a0c | ||
|
51aa73aaa8 | ||
|
424ea64182 | ||
|
6431c1d603 | ||
|
54f95ec4dd | ||
|
60ed0f7aa6 | ||
|
4dc97452c2 | ||
|
cb3e3595bf | ||
|
b248c89ec3 | ||
|
0f6c793eb9 | ||
|
7ac3480380 |
@ -23,6 +23,11 @@ public final class FifoCache<Key: Hashable, Value> {
|
||||
}
|
||||
|
||||
public func valueForKey(_ key: Key) -> Value? { self.storage[key] }
|
||||
|
||||
public func clear() {
|
||||
self.keys = Array(repeating: nil, count: count)
|
||||
self.storage.removeAll(keepingCapacity: true)
|
||||
}
|
||||
|
||||
private let count: Int
|
||||
private var keys: [Key?]
|
||||
|
2
Neovim
2
Neovim
@ -1 +1 @@
|
||||
Subproject commit d772f697a281ce9c58bf933997b87c7f27428a60
|
||||
Subproject commit 8744ee8783a8597f9fce4a573ae05aca2f412120
|
@ -18,7 +18,9 @@ final class AttributesRunDrawer {
|
||||
didSet { self.updateFontMetrics() }
|
||||
}
|
||||
|
||||
var usesLigatures: Bool
|
||||
var usesLigatures: Bool {
|
||||
didSet { self.typesetter.clearCache() }
|
||||
}
|
||||
|
||||
private(set) var cellSize: CGSize = .zero
|
||||
private(set) var baselineOffset: CGFloat = 0
|
||||
@ -150,7 +152,13 @@ final class AttributesRunDrawer {
|
||||
}
|
||||
|
||||
private func fontGlyphRuns(from attrsRun: AttributesRun, offset: CGPoint) -> [FontGlyphRun] {
|
||||
let font = FontUtils.font(adding: attrsRun.attrs.fontTrait, to: self.font)
|
||||
// We do the check here despite the fact FontUtils.font(adding:to:) does it
|
||||
// since empty trait is the most frequent case
|
||||
let font = if attrsRun.attrs.fontTrait.isEmpty {
|
||||
self.font
|
||||
} else {
|
||||
FontUtils.font(adding: attrsRun.attrs.fontTrait, to: self.font)
|
||||
}
|
||||
|
||||
if self.usesLigatures {
|
||||
return self.typesetter.fontGlyphRunsWithLigatures(
|
||||
@ -181,5 +189,7 @@ final class AttributesRunDrawer {
|
||||
self.descent = CTFontGetDescent(self.font)
|
||||
self.underlinePosition = CTFontGetUnderlinePosition(self.font)
|
||||
self.underlineThickness = CTFontGetUnderlineThickness(self.font)
|
||||
|
||||
self.typesetter.clearCache()
|
||||
}
|
||||
}
|
||||
|
@ -66,16 +66,18 @@ enum FontUtils {
|
||||
if trait.isEmpty { return font }
|
||||
|
||||
let sizedFontTrait = SizedFontTrait(trait: trait, size: font.pointSize)
|
||||
|
||||
if let cachedFont = fontCache.valueForKey(sizedFontTrait) { return cachedFont }
|
||||
if nilFontCache.valueForKey(sizedFontTrait) != nil { return font }
|
||||
|
||||
var ctFontTrait: CTFontSymbolicTraits = []
|
||||
if trait.contains(.bold) { ctFontTrait.insert(.boldTrait) }
|
||||
|
||||
if trait.contains(.italic) { ctFontTrait.insert(.italicTrait) }
|
||||
|
||||
guard let ctFont = CTFontCreateCopyWithSymbolicTraits(font, 0.0, nil, ctFontTrait, ctFontTrait)
|
||||
else { return font }
|
||||
guard let ctFont = CTFontCreateCopyWithSymbolicTraits(font, 0, nil, ctFontTrait, ctFontTrait)
|
||||
else {
|
||||
nilFontCache.set(0, forKey: sizedFontTrait)
|
||||
return font
|
||||
}
|
||||
|
||||
fontCache.set(ctFont, forKey: sizedFontTrait)
|
||||
return ctFont
|
||||
@ -113,6 +115,7 @@ enum FontUtils {
|
||||
}
|
||||
}
|
||||
|
||||
private let fontCache = FifoCache<SizedFontTrait, NSFont>(count: 100)
|
||||
private let fontCache = FifoCache<SizedFontTrait, NSFont>(count: 50)
|
||||
private let nilFontCache = FifoCache<SizedFontTrait, Int>(count: 50)
|
||||
private let fontHeightCache = FifoCache<NSFont, CGFloat>(count: 100)
|
||||
private let cellSizeWithDefaultLinespacingCache = FifoCache<NSFont, CGSize>(count: 100)
|
||||
|
@ -2,132 +2,130 @@
|
||||
// See bin/generate_autocmds.py
|
||||
|
||||
enum NvimAutoCommandEvent: String {
|
||||
|
||||
case bufadd = "bufadd"
|
||||
case bufdelete = "bufdelete"
|
||||
case bufenter = "bufenter"
|
||||
case buffilepost = "buffilepost"
|
||||
case buffilepre = "buffilepre"
|
||||
case bufhidden = "bufhidden"
|
||||
case bufleave = "bufleave"
|
||||
case bufmodifiedset = "bufmodifiedset"
|
||||
case bufnew = "bufnew"
|
||||
case bufnewfile = "bufnewfile"
|
||||
case bufreadcmd = "bufreadcmd"
|
||||
case bufreadpost = "bufreadpost"
|
||||
case bufreadpre = "bufreadpre"
|
||||
case bufunload = "bufunload"
|
||||
case bufwinenter = "bufwinenter"
|
||||
case bufwinleave = "bufwinleave"
|
||||
case bufwipeout = "bufwipeout"
|
||||
case bufwritecmd = "bufwritecmd"
|
||||
case bufwritepost = "bufwritepost"
|
||||
case bufwritepre = "bufwritepre"
|
||||
case chaninfo = "chaninfo"
|
||||
case chanopen = "chanopen"
|
||||
case cmdundefined = "cmdundefined"
|
||||
case cmdwinenter = "cmdwinenter"
|
||||
case cmdwinleave = "cmdwinleave"
|
||||
case cmdlinechanged = "cmdlinechanged"
|
||||
case cmdlineenter = "cmdlineenter"
|
||||
case cmdlineleave = "cmdlineleave"
|
||||
case colorscheme = "colorscheme"
|
||||
case colorschemepre = "colorschemepre"
|
||||
case completechanged = "completechanged"
|
||||
case completedone = "completedone"
|
||||
case completedonepre = "completedonepre"
|
||||
case cursorhold = "cursorhold"
|
||||
case cursorholdi = "cursorholdi"
|
||||
case cursormoved = "cursormoved"
|
||||
case cursormovedi = "cursormovedi"
|
||||
case diagnosticchanged = "diagnosticchanged"
|
||||
case diffupdated = "diffupdated"
|
||||
case dirchanged = "dirchanged"
|
||||
case dirchangedpre = "dirchangedpre"
|
||||
case encodingchanged = "encodingchanged"
|
||||
case exitpre = "exitpre"
|
||||
case fileappendcmd = "fileappendcmd"
|
||||
case fileappendpost = "fileappendpost"
|
||||
case fileappendpre = "fileappendpre"
|
||||
case filechangedro = "filechangedro"
|
||||
case filechangedshell = "filechangedshell"
|
||||
case filechangedshellpost = "filechangedshellpost"
|
||||
case filereadcmd = "filereadcmd"
|
||||
case filereadpost = "filereadpost"
|
||||
case filereadpre = "filereadpre"
|
||||
case filetype = "filetype"
|
||||
case filewritecmd = "filewritecmd"
|
||||
case filewritepost = "filewritepost"
|
||||
case filewritepre = "filewritepre"
|
||||
case filterreadpost = "filterreadpost"
|
||||
case filterreadpre = "filterreadpre"
|
||||
case filterwritepost = "filterwritepost"
|
||||
case filterwritepre = "filterwritepre"
|
||||
case focusgained = "focusgained"
|
||||
case focuslost = "focuslost"
|
||||
case funcundefined = "funcundefined"
|
||||
case guienter = "guienter"
|
||||
case guifailed = "guifailed"
|
||||
case insertchange = "insertchange"
|
||||
case insertcharpre = "insertcharpre"
|
||||
case insertenter = "insertenter"
|
||||
case insertleave = "insertleave"
|
||||
case insertleavepre = "insertleavepre"
|
||||
case lspattach = "lspattach"
|
||||
case lspdetach = "lspdetach"
|
||||
case lsptokenupdate = "lsptokenupdate"
|
||||
case menupopup = "menupopup"
|
||||
case modechanged = "modechanged"
|
||||
case optionset = "optionset"
|
||||
case quickfixcmdpost = "quickfixcmdpost"
|
||||
case quickfixcmdpre = "quickfixcmdpre"
|
||||
case quitpre = "quitpre"
|
||||
case recordingenter = "recordingenter"
|
||||
case recordingleave = "recordingleave"
|
||||
case remotereply = "remotereply"
|
||||
case searchwrapped = "searchwrapped"
|
||||
case sessionloadpost = "sessionloadpost"
|
||||
case shellcmdpost = "shellcmdpost"
|
||||
case shellfilterpost = "shellfilterpost"
|
||||
case signal = "signal"
|
||||
case sourcecmd = "sourcecmd"
|
||||
case sourcepost = "sourcepost"
|
||||
case sourcepre = "sourcepre"
|
||||
case spellfilemissing = "spellfilemissing"
|
||||
case stdinreadpost = "stdinreadpost"
|
||||
case stdinreadpre = "stdinreadpre"
|
||||
case swapexists = "swapexists"
|
||||
case syntax = "syntax"
|
||||
case tabclosed = "tabclosed"
|
||||
case tabenter = "tabenter"
|
||||
case tableave = "tableave"
|
||||
case tabnew = "tabnew"
|
||||
case tabnewentered = "tabnewentered"
|
||||
case termchanged = "termchanged"
|
||||
case termclose = "termclose"
|
||||
case termenter = "termenter"
|
||||
case termleave = "termleave"
|
||||
case termopen = "termopen"
|
||||
case termresponse = "termresponse"
|
||||
case textchanged = "textchanged"
|
||||
case textchangedi = "textchangedi"
|
||||
case textchangedp = "textchangedp"
|
||||
case textchangedt = "textchangedt"
|
||||
case textyankpost = "textyankpost"
|
||||
case uienter = "uienter"
|
||||
case uileave = "uileave"
|
||||
case user = "user"
|
||||
case vimenter = "vimenter"
|
||||
case vimleave = "vimleave"
|
||||
case vimleavepre = "vimleavepre"
|
||||
case vimresized = "vimresized"
|
||||
case vimresume = "vimresume"
|
||||
case vimsuspend = "vimsuspend"
|
||||
case winclosed = "winclosed"
|
||||
case winenter = "winenter"
|
||||
case winleave = "winleave"
|
||||
case winnew = "winnew"
|
||||
case winresized = "winresized"
|
||||
case winscrolled = "winscrolled"
|
||||
case bufadd
|
||||
case bufdelete
|
||||
case bufenter
|
||||
case buffilepost
|
||||
case buffilepre
|
||||
case bufhidden
|
||||
case bufleave
|
||||
case bufmodifiedset
|
||||
case bufnew
|
||||
case bufnewfile
|
||||
case bufreadcmd
|
||||
case bufreadpost
|
||||
case bufreadpre
|
||||
case bufunload
|
||||
case bufwinenter
|
||||
case bufwinleave
|
||||
case bufwipeout
|
||||
case bufwritecmd
|
||||
case bufwritepost
|
||||
case bufwritepre
|
||||
case chaninfo
|
||||
case chanopen
|
||||
case cmdundefined
|
||||
case cmdwinenter
|
||||
case cmdwinleave
|
||||
case cmdlinechanged
|
||||
case cmdlineenter
|
||||
case cmdlineleave
|
||||
case colorscheme
|
||||
case colorschemepre
|
||||
case completechanged
|
||||
case completedone
|
||||
case completedonepre
|
||||
case cursorhold
|
||||
case cursorholdi
|
||||
case cursormoved
|
||||
case cursormovedi
|
||||
case diagnosticchanged
|
||||
case diffupdated
|
||||
case dirchanged
|
||||
case dirchangedpre
|
||||
case encodingchanged
|
||||
case exitpre
|
||||
case fileappendcmd
|
||||
case fileappendpost
|
||||
case fileappendpre
|
||||
case filechangedro
|
||||
case filechangedshell
|
||||
case filechangedshellpost
|
||||
case filereadcmd
|
||||
case filereadpost
|
||||
case filereadpre
|
||||
case filetype
|
||||
case filewritecmd
|
||||
case filewritepost
|
||||
case filewritepre
|
||||
case filterreadpost
|
||||
case filterreadpre
|
||||
case filterwritepost
|
||||
case filterwritepre
|
||||
case focusgained
|
||||
case focuslost
|
||||
case funcundefined
|
||||
case guienter
|
||||
case guifailed
|
||||
case insertchange
|
||||
case insertcharpre
|
||||
case insertenter
|
||||
case insertleave
|
||||
case insertleavepre
|
||||
case lspattach
|
||||
case lspdetach
|
||||
case lsptokenupdate
|
||||
case menupopup
|
||||
case modechanged
|
||||
case optionset
|
||||
case quickfixcmdpost
|
||||
case quickfixcmdpre
|
||||
case quitpre
|
||||
case recordingenter
|
||||
case recordingleave
|
||||
case remotereply
|
||||
case searchwrapped
|
||||
case sessionloadpost
|
||||
case shellcmdpost
|
||||
case shellfilterpost
|
||||
case signal
|
||||
case sourcecmd
|
||||
case sourcepost
|
||||
case sourcepre
|
||||
case spellfilemissing
|
||||
case stdinreadpost
|
||||
case stdinreadpre
|
||||
case swapexists
|
||||
case syntax
|
||||
case tabclosed
|
||||
case tabenter
|
||||
case tableave
|
||||
case tabnew
|
||||
case tabnewentered
|
||||
case termchanged
|
||||
case termclose
|
||||
case termenter
|
||||
case termleave
|
||||
case termopen
|
||||
case termresponse
|
||||
case textchanged
|
||||
case textchangedi
|
||||
case textchangedp
|
||||
case textchangedt
|
||||
case textyankpost
|
||||
case uienter
|
||||
case uileave
|
||||
case user
|
||||
case vimenter
|
||||
case vimleave
|
||||
case vimleavepre
|
||||
case vimresized
|
||||
case vimresume
|
||||
case vimsuspend
|
||||
case winclosed
|
||||
case winenter
|
||||
case winleave
|
||||
case winnew
|
||||
case winresized
|
||||
case winscrolled
|
||||
}
|
||||
|
||||
|
@ -2,24 +2,22 @@
|
||||
// See bin/generate_cursor_shape.py
|
||||
|
||||
public enum CursorModeShape: String {
|
||||
|
||||
case normal = "normal"
|
||||
case visual = "visual"
|
||||
case insert = "insert"
|
||||
case replace = "replace"
|
||||
case cmdlineNormal = "cmdlineNormal"
|
||||
case cmdlineInsert = "cmdlineInsert"
|
||||
case cmdlineReplace = "cmdlineReplace"
|
||||
case operatorPending = "operatorPending"
|
||||
case visualExclusive = "visualExclusive"
|
||||
case onCmdline = "onCmdline"
|
||||
case onStatusLine = "onStatusLine"
|
||||
case draggingStatusLine = "draggingStatusLine"
|
||||
case onVerticalSepLine = "onVerticalSepLine"
|
||||
case draggingVerticalSepLine = "draggingVerticalSepLine"
|
||||
case more = "more"
|
||||
case moreLastLine = "moreLastLine"
|
||||
case showingMatchingParen = "showingMatchingParen"
|
||||
case count = "count"
|
||||
case normal
|
||||
case visual
|
||||
case insert
|
||||
case replace
|
||||
case cmdlineNormal
|
||||
case cmdlineInsert
|
||||
case cmdlineReplace
|
||||
case operatorPending
|
||||
case visualExclusive
|
||||
case onCmdline
|
||||
case onStatusLine
|
||||
case draggingStatusLine
|
||||
case onVerticalSepLine
|
||||
case draggingVerticalSepLine
|
||||
case more
|
||||
case moreLastLine
|
||||
case showingMatchingParen
|
||||
case count
|
||||
}
|
||||
|
||||
|
@ -387,9 +387,7 @@ public final class NvimView: NSView, NSUserInterfaceValidations, NSTextInputClie
|
||||
)
|
||||
}
|
||||
)
|
||||
.andThen(
|
||||
self.api.sendResponse(msgid: msgid, error: .nil, result: .nil)
|
||||
)
|
||||
.andThen(self.api.sendResponse(.nilResponse(msgid)))
|
||||
.andThen(
|
||||
{
|
||||
let ginitPath = FileManager.default.homeDirectoryForCurrentUser
|
||||
|
@ -8,6 +8,10 @@ import Commons
|
||||
import os
|
||||
|
||||
final class Typesetter {
|
||||
func clearCache() {
|
||||
self.ctRunsCache.clear()
|
||||
}
|
||||
|
||||
func fontGlyphRunsWithLigatures(
|
||||
nvimUtf16Cells: [[Unicode.UTF16.CodeUnit]],
|
||||
startColumn: Int,
|
||||
@ -141,8 +145,7 @@ final class Typesetter {
|
||||
}
|
||||
|
||||
private func ctRuns(from utf16Chars: [Unicode.UTF16.CodeUnit], font: NSFont) -> [CTRun] {
|
||||
if let ctRunsAndFont = self.ctRunsCache.valueForKey(utf16Chars),
|
||||
font == ctRunsAndFont.font { return ctRunsAndFont.ctRuns }
|
||||
if let ctRunsAndFont = self.ctRunsCache.valueForKey(utf16Chars) { return ctRunsAndFont }
|
||||
|
||||
let attrStr = NSAttributedString(
|
||||
string: String(utf16CodeUnits: utf16Chars, count: utf16Chars.count),
|
||||
@ -152,7 +155,7 @@ final class Typesetter {
|
||||
let ctLine = CTLineCreateWithAttributedString(attrStr)
|
||||
guard let ctRuns = CTLineGetGlyphRuns(ctLine) as? [CTRun] else { return [] }
|
||||
|
||||
self.ctRunsCache.set(CtRunsAndFont(ctRuns: ctRuns, font: font), forKey: utf16Chars)
|
||||
self.ctRunsCache.set(ctRuns, forKey: utf16Chars)
|
||||
|
||||
return ctRuns
|
||||
}
|
||||
@ -270,15 +273,10 @@ final class Typesetter {
|
||||
}
|
||||
}
|
||||
|
||||
private let ctRunsCache = FifoCache<[Unicode.UTF16.CodeUnit], CtRunsAndFont>(count: 5000)
|
||||
private let ctRunsCache = FifoCache<[Unicode.UTF16.CodeUnit], [CTRun]>(count: 5000)
|
||||
|
||||
private let log = OSLog(subsystem: Defs.loggerSubsystem, category: Defs.LoggerCategory.view)
|
||||
|
||||
private struct CtRunsAndFont {
|
||||
var ctRuns: [CTRun]
|
||||
var font: NSFont
|
||||
}
|
||||
|
||||
private struct NvimUtf16CellsRun {
|
||||
var startColumn: Int
|
||||
var nvimUtf16Cells: [[Unicode.UTF16.CodeUnit]]
|
||||
|
@ -16,7 +16,7 @@ class Document: NSDocument, NSWindowDelegate {
|
||||
override init() {
|
||||
super.init()
|
||||
|
||||
self.nvimView.font = NSFont(name: "Fira Code", size: 13)
|
||||
self.nvimView.font = NSFont(name: "Iosevka", size: 13)
|
||||
?? NSFont.userFixedPitchFont(ofSize: 13)!
|
||||
self.nvimView.usesLigatures = true
|
||||
self.nvimView.usesLiveResize = true
|
||||
|
@ -53,8 +53,8 @@ public final class RxNeovimApi {
|
||||
}
|
||||
}
|
||||
|
||||
public func sendResponse(msgid: UInt32, error: Value, result: Value) -> Completable {
|
||||
self.msgpackRpc.response(msgid: msgid, error: error, result: result)
|
||||
public func sendResponse(_ response: RxMsgpackRpc.Response) -> Completable {
|
||||
self.msgpackRpc.response(msgid: response.msgid, error: response.error, result: response.result)
|
||||
}
|
||||
|
||||
public init() {}
|
||||
|
@ -25,6 +25,10 @@ public final class RxMsgpackRpc {
|
||||
}
|
||||
|
||||
public struct Response {
|
||||
public static func nilResponse(_ msgid: UInt32) -> Self {
|
||||
return .init(msgid: msgid, error: .nil, result: .nil)
|
||||
}
|
||||
|
||||
public let msgid: UInt32
|
||||
public let error: Value
|
||||
public let result: Value
|
||||
@ -154,10 +158,7 @@ public final class RxMsgpackRpc {
|
||||
]
|
||||
)
|
||||
|
||||
if expectsReturnValue {
|
||||
// In streamQueue since we want to sync' access self.singles only in that queue.
|
||||
self?.queue.async { self?.singles[msgid] = single }
|
||||
}
|
||||
if expectsReturnValue { self?.singles[msgid] = single }
|
||||
|
||||
do {
|
||||
try self?.inPipe?.fileHandleForWriting.write(contentsOf: packed)
|
||||
@ -174,7 +175,7 @@ public final class RxMsgpackRpc {
|
||||
}
|
||||
|
||||
if !expectsReturnValue {
|
||||
single(.success(Response(msgid: msgid, error: .nil, result: .nil)))
|
||||
single(.success(.nilResponse(msgid)))
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,12 +204,12 @@ public final class RxMsgpackRpc {
|
||||
// Publish events only in streamQueue
|
||||
private let streamSubject = PublishSubject<Message>()
|
||||
|
||||
private func nilResponse(with msgid: UInt32) -> Response {
|
||||
Response(msgid: msgid, error: .nil, result: .nil)
|
||||
}
|
||||
|
||||
private func cleanUp() {
|
||||
self.queue.async { [weak self] in
|
||||
if self?.closed == true {
|
||||
self?.log.info("RxMsgpackRpc already closed")
|
||||
return
|
||||
}
|
||||
self?.closed = true
|
||||
|
||||
self?.inPipe = nil
|
||||
@ -216,11 +217,7 @@ public final class RxMsgpackRpc {
|
||||
self?.errorPipe = nil
|
||||
|
||||
self?.streamSubject.onCompleted()
|
||||
self?.singles.forEach { msgid, single in single(.success(.init(
|
||||
msgid: msgid,
|
||||
error: .nil,
|
||||
result: .nil
|
||||
))) }
|
||||
self?.singles.forEach { msgid, single in single(.success(.nilResponse(msgid))) }
|
||||
|
||||
self?.log.info("RxMsgpackRpc closed")
|
||||
}
|
||||
@ -233,8 +230,7 @@ public final class RxMsgpackRpc {
|
||||
while true {
|
||||
// If we do not use autoreleasepool here, the memory usage keeps going up
|
||||
autoreleasepool {
|
||||
guard let buffer = self?.outPipe?.fileHandleForReading.availableData,
|
||||
buffer.count > 0
|
||||
guard let buffer = self?.outPipe?.fileHandleForReading.availableData, buffer.count > 0
|
||||
else {
|
||||
bufferCount = 0
|
||||
return
|
||||
|
@ -15,9 +15,7 @@ private extension PrimitiveSequenceType {
|
||||
}
|
||||
|
||||
private func delayingCompletable() -> Completable {
|
||||
Single.just(0)
|
||||
.delay(.milliseconds(10), scheduler: MainScheduler.instance)
|
||||
.asCompletable()
|
||||
Completable.empty().delay(.milliseconds(10), scheduler: MainScheduler.instance)
|
||||
}
|
||||
|
||||
/// No real test, just a sample code to see that it works with Neovim
|
||||
|
@ -14,9 +14,7 @@ private extension PrimitiveSequenceType {
|
||||
}
|
||||
|
||||
private func delayingCompletable() -> Completable {
|
||||
Single.just(0)
|
||||
.delay(.milliseconds(10), scheduler: MainScheduler.instance)
|
||||
.asCompletable()
|
||||
Completable.empty().delay(.milliseconds(10), scheduler: MainScheduler.instance)
|
||||
}
|
||||
|
||||
/// No real test, just a sample code to see that it works with Neovim
|
||||
|
@ -113,8 +113,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/sparkle-project/Sparkle",
|
||||
"state" : {
|
||||
"revision" : "1f07f4096e52f19b5e7abaa697b7fc592b7ff57c",
|
||||
"version" : "2.5.1"
|
||||
"revision" : "47d3d90aee3c52b6f61d04ceae426e607df62347",
|
||||
"version" : "2.5.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1125,7 +1125,7 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 20231223.144003;
|
||||
CURRENT_PROJECT_VERSION = 20240102.233758;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_MODULE_VERIFIER = YES;
|
||||
@ -1189,7 +1189,7 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 20231223.144003;
|
||||
CURRENT_PROJECT_VERSION = 20240102.233758;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_MODULE_VERIFIER = YES;
|
||||
@ -1221,7 +1221,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 20231223.144003;
|
||||
CURRENT_PROJECT_VERSION = 20240102.233758;
|
||||
DEFINES_MODULE = YES;
|
||||
IBC_MODULE = VimR;
|
||||
INFOPLIST_FILE = VimR/Info.plist;
|
||||
@ -1245,7 +1245,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 20231223.144003;
|
||||
CURRENT_PROJECT_VERSION = 20240102.233758;
|
||||
DEFINES_MODULE = YES;
|
||||
IBC_MODULE = VimR;
|
||||
INFOPLIST_FILE = VimR/Info.plist;
|
||||
@ -1387,7 +1387,7 @@
|
||||
repositoryURL = "https://github.com/sparkle-project/Sparkle";
|
||||
requirement = {
|
||||
kind = exactVersion;
|
||||
version = 2.5.1;
|
||||
version = 2.5.2;
|
||||
};
|
||||
};
|
||||
4BADD55C283ABD0200C6B16D /* XCRemoteSwiftPackageReference "swift-collections" */ = {
|
||||
|
@ -1224,7 +1224,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.45.5</string>
|
||||
<string>0.46.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@ -1241,7 +1241,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>20231223.144003</string>
|
||||
<string>20240102.233758</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.productivity</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
@ -15,10 +15,10 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.45.5</string>
|
||||
<string>0.46.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>20231223.144003</string>
|
||||
<string>20240102.233758</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
18
appcast.xml
18
appcast.xml
@ -6,23 +6,23 @@
|
||||
<description>Most recent changes with links to updates for VimR.</description>
|
||||
<language>en</language>
|
||||
<item>
|
||||
<title>v0.45.5-20231223.144003</title>
|
||||
<title>v0.46.0-20240102.233758</title>
|
||||
<link>https://twitter.com/vimrefined</link>
|
||||
<sparkle:version>20231223.144003</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.45.5</sparkle:shortVersionString>
|
||||
<sparkle:version>20240102.233758</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.46.0</sparkle:shortVersionString>
|
||||
<description><![CDATA[
|
||||
<ul>
|
||||
<li>Bugfix: When there are modified buffers, VimR hangs when closing the window (or <code>:quit</code>ting Neovim)</li>
|
||||
<li>Fix a memory leak</li>
|
||||
<li>Neovim 0.9.5 😀</li>
|
||||
<li>Improve rendering performance slightly.</li>
|
||||
</ul>
|
||||
]]></description>
|
||||
<releaseNotesLink>
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.45.5-20231223.144003
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.46.0-20240102.233758
|
||||
</releaseNotesLink>
|
||||
<pubDate>2023-12-23T14:45:17.568035</pubDate>
|
||||
<pubDate>2024-01-02T23:43:20.636385</pubDate>
|
||||
<minimumSystemVersion>12.0</minimumSystemVersion>
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.45.5-20231223.144003/VimR-v0.45.5.tar.bz2"
|
||||
sparkle:edSignature="fGeIdX5rr51NRGTC0GGRJsa30gTC57odBSNDHa7G3XvidmvYgRj1RYKxOPtWbZ5oTf5WOGXb4CiA7H+UGVbNAA==" length="16988784"
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.46.0-20240102.233758/VimR-v0.46.0.tar.bz2"
|
||||
sparkle:edSignature="ABotIuoHD4YB9TbN6Ejh0BD/uqxkl1b1MS7sPBFZuf/sZN1fTn1CggY2CyvQnCz3oI3icG/FKpHR7YWxpobxDA==" length="17024638"
|
||||
type="application/octet-stream"/>
|
||||
</item>
|
||||
</channel>
|
||||
|
@ -6,23 +6,23 @@
|
||||
<description>Most recent changes with links to updates for VimR.</description>
|
||||
<language>en</language>
|
||||
<item>
|
||||
<title>v0.45.5-20231223.144003</title>
|
||||
<title>v0.46.0-20240102.233758</title>
|
||||
<link>https://twitter.com/vimrefined</link>
|
||||
<sparkle:version>20231223.144003</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.45.5</sparkle:shortVersionString>
|
||||
<sparkle:version>20240102.233758</sparkle:version>
|
||||
<sparkle:shortVersionString>v0.46.0</sparkle:shortVersionString>
|
||||
<description><![CDATA[
|
||||
<ul>
|
||||
<li>Bugfix: When there are modified buffers, VimR hangs when closing the window (or <code>:quit</code>ting Neovim)</li>
|
||||
<li>Fix a memory leak</li>
|
||||
<li>Neovim 0.9.5 😀</li>
|
||||
<li>Improve rendering performance slightly.</li>
|
||||
</ul>
|
||||
]]></description>
|
||||
<releaseNotesLink>
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.45.5-20231223.144003
|
||||
https://github.com/qvacua/vimr/releases/tag/v0.46.0-20240102.233758
|
||||
</releaseNotesLink>
|
||||
<pubDate>2023-12-23T14:45:17.568035</pubDate>
|
||||
<pubDate>2024-01-02T23:43:20.636385</pubDate>
|
||||
<minimumSystemVersion>12.0</minimumSystemVersion>
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.45.5-20231223.144003/VimR-v0.45.5.tar.bz2"
|
||||
sparkle:edSignature="fGeIdX5rr51NRGTC0GGRJsa30gTC57odBSNDHa7G3XvidmvYgRj1RYKxOPtWbZ5oTf5WOGXb4CiA7H+UGVbNAA==" length="16988784"
|
||||
<enclosure url="https://github.com/qvacua/vimr/releases/download/v0.46.0-20240102.233758/VimR-v0.46.0.tar.bz2"
|
||||
sparkle:edSignature="ABotIuoHD4YB9TbN6Ejh0BD/uqxkl1b1MS7sPBFZuf/sZN1fTn1CggY2CyvQnCz3oI3icG/FKpHR7YWxpobxDA==" length="17024638"
|
||||
type="application/octet-stream"/>
|
||||
</item>
|
||||
</channel>
|
||||
|
@ -10,7 +10,7 @@ upload_artifact() {
|
||||
readonly GH_TOKEN
|
||||
|
||||
echo "### Uploading artifact"
|
||||
gh release upload "neovim-nightly" "${vimr_artifact_path}"
|
||||
gh release upload "neovim-nightly" "${vimr_artifact_path}" --clobber
|
||||
echo "### Uploaded artifact"
|
||||
}
|
||||
|
||||
|
@ -90,10 +90,6 @@ create_gh_release() {
|
||||
}
|
||||
|
||||
upload_artifact() {
|
||||
local -x GH_TOKEN
|
||||
GH_TOKEN=$(cat ~/.local/secrets/github.qvacua.release.token)
|
||||
readonly GH_TOKEN
|
||||
|
||||
echo "### Uploading artifact"
|
||||
gh release upload "${tag}" "${vimr_artifact_path}"
|
||||
echo "### Uploaded artifact"
|
||||
@ -133,6 +129,10 @@ main() {
|
||||
exit 0
|
||||
fi
|
||||
|
||||
local -x GH_TOKEN
|
||||
GH_TOKEN=$(cat ~/.local/secrets/github.qvacua.release.token)
|
||||
readonly GH_TOKEN
|
||||
|
||||
create_gh_release
|
||||
|
||||
if [[ "${upload}" == true ]]; then
|
||||
|
@ -25,7 +25,7 @@ def swift_autocmds(version: str, template_string: str) -> str:
|
||||
|
||||
return template.substitute(
|
||||
event_cases="\n".join(
|
||||
[f" case {event[0].lower()} = \"{event[0].lower()}\"" for event in autocmds]
|
||||
[f" case {event[0].lower()}" for event in autocmds]
|
||||
),
|
||||
version=version
|
||||
)
|
||||
|
@ -45,7 +45,7 @@ def are_shapes_same() -> bool:
|
||||
def swift_shapes() -> str:
|
||||
with io.open(SWIFT_TEMPLATE_FILE, "r") as template_file:
|
||||
template = Template(template_file.read())
|
||||
cases = "\n".join([f" case {v[1]} = \"{v[1]}\"" for (k, v) in SHAPE_NAMES.items()])
|
||||
cases = "\n".join([f" case {v[1]}" for (k, v) in SHAPE_NAMES.items()])
|
||||
return template.substitute(
|
||||
cursor_shapes=cases,
|
||||
version=version
|
||||
|
@ -30,6 +30,8 @@ main() {
|
||||
pushd Neovim
|
||||
version=${nvim_version} ../bin/generate_autocmds.py > "../NvimView/Sources/NvimView/NvimAutoCommandEvent.generated.swift"
|
||||
version=${nvim_version} ../bin/generate_cursor_shape.py > "../NvimView/Sources/NvimView/NvimCursorModeShape.generated.swift"
|
||||
swiftformat "../NvimView/Sources/NvimView/NvimAutoCommandEvent.generated.swift"
|
||||
swiftformat "../NvimView/Sources/NvimView/NvimCursorModeShape.generated.swift"
|
||||
popd > /dev/null
|
||||
|
||||
popd > /dev/null
|
||||
|
@ -1,6 +1,14 @@
|
||||
# Next
|
||||
|
||||
* ...
|
||||
* Dependencies updates:
|
||||
- sparkle-project/Sparkle@2.5.2
|
||||
|
||||
|
||||
# v0.46.0-20240102.233758
|
||||
|
||||
* Neovim 0.9.5 😀
|
||||
* Improve rendering performance slightly.
|
||||
|
||||
# v0.45.5-20231223.144003
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user