1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-09-11 17:15:34 +03:00

Compare commits

...

22 Commits

Author SHA1 Message Date
Tae Won Ha
c6850b6684
Update sparkle 2024-01-09 18:34:02 +01:00
Tae Won Ha
b0462732f3
Update appcast 2024-01-02 23:43:20 +01:00
Tae Won Ha
cb991443a1
Bump version to v0.46.0-20240102.233758 2024-01-02 23:37:58 +01:00
Tae Won Ha
301e97895b
Use GH_TOKEN for all gh actions 2024-01-02 23:37:45 +01:00
Tae Won Ha
c77e91119f
Bump version to v0.46.0-20240102.233603 2024-01-02 23:36:03 +01:00
Tae Won Ha
c9256454b2
Bump version to v0.46.0-20240102.231450 2024-01-02 23:14:50 +01:00
Tae Won Ha
eb5a45d6b3
Bump version to v0.46.0-20240102.230837 2024-01-02 23:08:37 +01:00
Tae Won Ha
91aa42b070
Bump version to v0.46.0-20240102.225530 2024-01-02 22:55:31 +01:00
Tae Won Ha
6fdb62d7ff
Update release notes 2024-01-02 22:54:28 +01:00
Tae Won Ha
55bacdcfe7
Update neovim to v0.9.5 2024-01-02 22:44:56 +01:00
Tae Won Ha
35527bc52e
Do not include font check for CTRuns when typesetting.
We have to clear the cache when changing the font (and other parameters
which may affect the typesetting).
2023-12-27 21:50:10 +01:00
Tae Won Ha
4c3d968a0c
Refactor slightly 2023-12-24 22:12:37 +01:00
Tae Won Ha
51aa73aaa8
Refactor slightly 2023-12-24 22:05:23 +01:00
Tae Won Ha
424ea64182
Revert "Use uninitialized array initializer"
This reverts commit 60ed0f7aa6.
2023-12-24 20:35:40 +01:00
Tae Won Ha
6431c1d603
Add comment 2023-12-24 20:28:16 +01:00
Tae Won Ha
54f95ec4dd
Cache information about non existent font 2023-12-24 20:19:48 +01:00
Tae Won Ha
60ed0f7aa6
Use uninitialized array initializer 2023-12-24 19:20:17 +01:00
Tae Won Ha
4dc97452c2
Check whether already closed before cleaning up 2023-12-23 23:04:55 +01:00
Tae Won Ha
cb3e3595bf
Remove nested async call 2023-12-23 22:50:51 +01:00
Tae Won Ha
b248c89ec3
Refactor slightly 2023-12-23 22:47:30 +01:00
Tae Won Ha
0f6c793eb9
Refactor slightly 2023-12-23 22:46:44 +01:00
Tae Won Ha
7ac3480380
Replace when uploading 2023-12-23 21:47:28 +01:00
25 changed files with 241 additions and 229 deletions

View File

@ -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

@ -1 +1 @@
Subproject commit d772f697a281ce9c58bf933997b87c7f27428a60
Subproject commit 8744ee8783a8597f9fce4a573ae05aca2f412120

View File

@ -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()
}
}

View File

@ -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)

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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]]

View File

@ -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

View File

@ -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() {}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"
}
},
{

View File

@ -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" */ = {

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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"
}

View File

@ -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

View File

@ -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
)

View File

@ -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

View File

@ -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

View File

@ -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