-
Notifications
You must be signed in to change notification settings - Fork 689
/
Copy pathvim.zig
116 lines (109 loc) · 3.09 KB
/
vim.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const std = @import("std");
const Config = @import("Config.zig");
/// This is the associated Vim file as named by the variable.
pub const syntax = comptimeGenSyntax();
pub const ftdetect =
\\" Vim filetype detect file
\\" Language: Ghostty config file
\\" Maintainer: Ghostty <https://github.com/ghostty-org/ghostty>
\\"
\\" THIS FILE IS AUTO-GENERATED
\\
\\au BufRead,BufNewFile */ghostty/config,*/ghostty/themes/* set ft=ghostty
\\
;
pub const ftplugin =
\\" Vim filetype plugin file
\\" Language: Ghostty config file
\\" Maintainer: Ghostty <https://github.com/ghostty-org/ghostty>
\\"
\\" THIS FILE IS AUTO-GENERATED
\\
\\if exists('b:did_ftplugin')
\\ finish
\\endif
\\let b:did_ftplugin = 1
\\
\\setlocal commentstring=#\ %s
\\setlocal iskeyword+=-
\\
\\" Use syntax keywords for completion
\\setlocal omnifunc=syntaxcomplete#Complete
\\
\\let b:undo_ftplugin = 'setl cms< isk< ofu<'
\\
\\if !exists('current_compiler')
\\ compiler ghostty
\\ let b:undo_ftplugin .= " makeprg< errorformat<"
\\endif
\\
;
pub const compiler =
\\" Vim compiler file
\\" Language: Ghostty config file
\\" Maintainer: Ghostty <https://github.com/ghostty-org/ghostty>
\\"
\\" THIS FILE IS AUTO-GENERATED
\\
\\if exists("current_compiler")
\\ finish
\\endif
\\let current_compiler = "ghostty"
\\
\\CompilerSet makeprg=ghostty\ +validate-config\ --config-file=%:S
\\CompilerSet errorformat=%f:%l:%m,%m
\\
;
/// Generates the syntax file at comptime.
fn comptimeGenSyntax() []const u8 {
comptime {
var counting_writer = std.io.countingWriter(std.io.null_writer);
try writeSyntax(&counting_writer.writer());
var buf: [counting_writer.bytes_written]u8 = undefined;
var stream = std.io.fixedBufferStream(&buf);
try writeSyntax(stream.writer());
const final = buf;
return final[0..stream.getWritten().len];
}
}
/// Writes the syntax file to the given writer.
fn writeSyntax(writer: anytype) !void {
try writer.writeAll(
\\" Vim syntax file
\\" Language: Ghostty config file
\\" Maintainer: Ghostty <https://github.com/ghostty-org/ghostty>
\\"
\\" THIS FILE IS AUTO-GENERATED
\\
\\if exists('b:current_syntax')
\\ finish
\\endif
\\
\\let b:current_syntax = 'ghostty'
\\
\\let s:cpo_save = &cpo
\\set cpo&vim
\\
\\syn keyword ghosttyConfigKeyword
);
const config_fields = @typeInfo(Config).Struct.fields;
inline for (config_fields) |field| {
if (field.name[0] == '_') continue;
try writer.print("\n\t\\ {s}", .{field.name});
}
try writer.writeAll(
\\
\\
\\syn match ghosttyConfigComment /^\s*#.*/ contains=@Spell
\\
\\hi def link ghosttyConfigComment Comment
\\hi def link ghosttyConfigKeyword Keyword
\\
\\let &cpo = s:cpo_save
\\unlet s:cpo_save
\\
);
}
test {
_ = syntax;
}