blob: a8b663714080de654e4e0b2f6793905c1d68c888 [file] [log] [blame]
Bram Moolenaar0e6adf82021-12-16 14:41:10 +00001" Vim syntax file
2" Language: i3 config file
3" Maintainer: Mohamed Boughaba <mohamed dot bgb at gmail dot com>
4" Version: 0.4
5" Last Change: 2021 Dec 14
6
7" References:
8" http://i3wm.org/docs/userguide.html#configuring
9" http://vimdoc.sourceforge.net/htmldoc/syntax.html
10"
11"
12" Quit when a syntax file was already loaded
13if exists("b:current_syntax")
14 finish
15endif
16
17scriptencoding utf-8
18
19" Error
20syn match i3ConfigError /.*/
21
22" Todo
23syn keyword i3ConfigTodo TODO FIXME XXX contained
24
25" Comment
26" Comments are started with a # and can only be used at the beginning of a line
27syn match i3ConfigComment /^\s*#.*$/ contains=i3ConfigTodo
28
29" Font
30" A FreeType font description is composed by:
31" a font family, a style, a weight, a variant, a stretch and a size.
32syn match i3ConfigFontSeparator /,/ contained
33syn match i3ConfigFontSeparator /:/ contained
34syn keyword i3ConfigFontKeyword font contained
35syn match i3ConfigFontNamespace /\w\+:/ contained contains=i3ConfigFontSeparator
36syn match i3ConfigFontContent /-\?\w\+\(-\+\|\s\+\|,\)/ contained contains=i3ConfigFontNamespace,i3ConfigFontSeparator,i3ConfigFontKeyword
37syn match i3ConfigFontSize /\s\=\d\+\(px\)\?\s\?$/ contained
38syn match i3ConfigFont /^\s*font\s\+.*$/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
39syn match i3ConfigFont /^\s*font\s\+.*\(\\\_.*\)\?$/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
40syn match i3ConfigFont /^\s*font\s\+.*\(\\\_.*\)\?[^\\]\+$/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
41syn match i3ConfigFont /^\s*font\s\+\(\(.*\\\_.*\)\|\(.*[^\\]\+$\)\)/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
42
43" variables
44syn match i3ConfigString /\(['"]\)\(.\{-}\)\1/ contained
45syn match i3ConfigColor /#\w\{6}/ contained
46syn match i3ConfigVariableModifier /+/ contained
47syn match i3ConfigVariableAndModifier /+\w\+/ contained contains=i3ConfigVariableModifier
48syn match i3ConfigVariable /\$\w\+\(\(-\w\+\)\+\)\?\(\s\|+\)\?/ contains=i3ConfigVariableModifier,i3ConfigVariableAndModifier
49syn keyword i3ConfigInitializeKeyword set contained
50syn match i3ConfigInitialize /^\s*set\s\+.*$/ contains=i3ConfigVariable,i3ConfigInitializeKeyword,i3ConfigColor,i3ConfigString
51
52" Gaps
53syn keyword i3ConfigGapStyleKeyword inner outer horizontal vertical top right bottom left current all set plus minus toggle up down contained
54syn match i3ConfigGapStyle /^\s*\(gaps\)\s\+\(inner\|outer\|horizontal\|vertical\|left\|top\|right\|bottom\)\(\s\+\(current\|all\)\)\?\(\s\+\(set\|plus\|minus\|toggle\)\)\?\(\s\+\(-\?\d\+\|\$.*\)\)$/ contains=i3ConfigGapStyleKeyword,i3ConfigNumber,i3ConfigVariable
55syn keyword i3ConfigSmartGapKeyword on inverse_outer contained
56syn match i3ConfigSmartGap /^\s*smart_gaps\s\+\(on\|inverse_outer\)\s\?$/ contains=i3ConfigSmartGapKeyword
57syn keyword i3ConfigSmartBorderKeyword on no_gaps contained
58syn match i3ConfigSmartBorder /^\s*smart_borders\s\+\(on\|no_gaps\)\s\?$/ contains=i3ConfigSmartBorderKeyword
59
60" Keyboard bindings
61syn keyword i3ConfigAction toggle fullscreen restart key import kill shrink grow contained
62syn keyword i3ConfigAction focus move grow height width split layout resize restore reload mute unmute exit mode workspace container to contained
63syn match i3ConfigModifier /\w\++\w\+\(\(+\w\+\)\+\)\?/ contained contains=i3ConfigVariableModifier
64syn match i3ConfigNumber /\s\d\+/ contained
65syn match i3ConfigUnit /\sp\(pt\|x\)/ contained
66syn match i3ConfigUnitOr /\sor/ contained
67syn keyword i3ConfigBindKeyword bindsym bindcode exec gaps border contained
68syn match i3ConfigBindArgument /--\w\+\(\(-\w\+\)\+\)\?\s/ contained
69syn match i3ConfigBind /^\s*\(bindsym\|bindcode\)\s\+.*$/ contains=i3ConfigVariable,i3ConfigBindKeyword,i3ConfigVariableAndModifier,i3ConfigNumber,i3ConfigUnit,i3ConfigUnitOr,i3ConfigBindArgument,i3ConfigModifier,i3ConfigAction,i3ConfigString,i3ConfigGapStyleKeyword,i3ConfigBorderStyleKeyword
70
71" Floating
72syn keyword i3ConfigSizeSpecial x contained
73syn match i3ConfigNegativeSize /-/ contained
74syn match i3ConfigSize /-\?\d\+\s\?x\s\?-\?\d\+/ contained contains=i3ConfigSizeSpecial,i3ConfigNumber,i3ConfigNegativeSize
75syn match i3ConfigFloating /^\s*floating_modifier\s\+\$\w\+\d\?/ contains=i3ConfigVariable
76syn match i3ConfigFloating /^\s*floating_\(maximum\|minimum\)_size\s\+-\?\d\+\s\?x\s\?-\?\d\+/ contains=i3ConfigSize
77
78" Orientation
79syn keyword i3ConfigOrientationKeyword vertical horizontal auto contained
80syn match i3ConfigOrientation /^\s*default_orientation\s\+\(vertical\|horizontal\|auto\)\s\?$/ contains=i3ConfigOrientationKeyword
81
82" Layout
83syn keyword i3ConfigLayoutKeyword default stacking tabbed contained
84syn match i3ConfigLayout /^\s*workspace_layout\s\+\(default\|stacking\|tabbed\)\s\?$/ contains=i3ConfigLayoutKeyword
85
86" Border style
87syn keyword i3ConfigBorderStyleKeyword none normal pixel contained
88syn match i3ConfigBorderStyle /^\s*\(new_window\|new_float\|default_border\|default_floating_border\)\s\+\(none\|\(normal\|pixel\)\(\s\+\d\+\)\?\(\s\+\$\w\+\(\(-\w\+\)\+\)\?\(\s\|+\)\?\)\?\)\s\?$/ contains=i3ConfigBorderStyleKeyword,i3ConfigNumber,i3ConfigVariable
89
90" Hide borders and edges
91syn keyword i3ConfigEdgeKeyword none vertical horizontal both smart smart_no_gaps contained
92syn match i3ConfigEdge /^\s*hide_edge_borders\s\+\(none\|vertical\|horizontal\|both\|smart\|smart_no_gaps\)\s\?$/ contains=i3ConfigEdgeKeyword
93
94" Arbitrary commands for specific windows (for_window)
95syn keyword i3ConfigCommandKeyword for_window contained
96syn region i3ConfigWindowStringSpecial start=+"+ skip=+\\"+ end=+"+ contained contains=i3ConfigString
97syn region i3ConfigWindowCommandSpecial start="\[" end="\]" contained contains=i3ConfigWindowStringSpacial,i3ConfigString
98syn match i3ConfigArbitraryCommand /^\s*for_window\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigCommandKeyword,i3ConfigBorderStyleKeyword,i3ConfigLayoutKeyword,i3ConfigOrientationKeyword,Size,i3ConfigNumber
99
100" Disable focus open opening
101syn keyword i3ConfigNoFocusKeyword no_focus contained
102syn match i3ConfigDisableFocus /^\s*no_focus\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigNoFocusKeyword
103
104" Move client to specific workspace automatically
105syn keyword i3ConfigAssignKeyword assign contained
106syn match i3ConfigAssignSpecial /→/ contained
107syn match i3ConfigAssign /^\s*assign\s\+.*$/ contains=i3ConfigAssignKeyword,i3ConfigWindowCommandSpecial,i3ConfigAssignSpecial
108
109" X resources
110syn keyword i3ConfigResourceKeyword set_from_resource contained
111syn match i3ConfigResource /^\s*set_from_resource\s\+.*$/ contains=i3ConfigResourceKeyword,i3ConfigWindowCommandSpecial,i3ConfigColor,i3ConfigVariable
112
113" Auto start applications
114syn keyword i3ConfigExecKeyword exec exec_always contained
115syn match i3ConfigNoStartupId /--no-startup-id/ contained " We are not using i3ConfigBindArgument as only no-startup-id is supported here
116syn match i3ConfigExec /^\s*exec\(_always\)\?\s\+.*$/ contains=i3ConfigExecKeyword,i3ConfigNoStartupId,i3ConfigString
117
118" Automatically putting workspaces on specific screens
119syn keyword i3ConfigWorkspaceKeyword workspace contained
120syn keyword i3ConfigOutput output contained
121syn match i3ConfigWorkspace /^\s*workspace\s\+.*$/ contains=i3ConfigWorkspaceKeyword,i3ConfigNumber,i3ConfigString,i3ConfigOutput
122
123" Changing colors
124syn keyword i3ConfigClientColorKeyword client focused focused_inactive unfocused urgent placeholder background contained
125syn match i3ConfigClientColor /^\s*client.\w\+\s\+.*$/ contains=i3ConfigClientColorKeyword,i3ConfigColor,i3ConfigVariable
126
127syn keyword i3ConfigTitleAlignKeyword left center right contained
128syn match i3ConfigTitleAlign /^\s*title_align\s\+.*$/ contains=i3ConfigTitleAlignKeyword
129
130" Interprocess communication
131syn match i3ConfigInterprocessKeyword /ipc-socket/ contained
132syn match i3ConfigInterprocess /^\s*ipc-socket\s\+.*$/ contains=i3ConfigInterprocessKeyword
133
134" Mouse warping
135syn keyword i3ConfigMouseWarpingKeyword mouse_warping contained
136syn keyword i3ConfigMouseWarpingType output none contained
137syn match i3ConfigMouseWarping /^\s*mouse_warping\s\+\(output\|none\)\s\?$/ contains=i3ConfigMouseWarpingKeyword,i3ConfigMouseWarpingType
138
139" Focus follows mouse
140syn keyword i3ConfigFocusFollowsMouseKeyword focus_follows_mouse contained
141syn keyword i3ConfigFocusFollowsMouseType yes no contained
142syn match i3ConfigFocusFollowsMouse /^\s*focus_follows_mouse\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusFollowsMouseKeyword,i3ConfigFocusFollowsMouseType
143
144" Popups during fullscreen mode
145syn keyword i3ConfigPopupOnFullscreenKeyword popup_during_fullscreen contained
146syn keyword i3ConfigPopuponFullscreenType smart ignore leave_fullscreen contained
147syn match i3ConfigPopupOnFullscreen /^\s*popup_during_fullscreen\s\+\w\+\s\?$/ contains=i3ConfigPopupOnFullscreenKeyword,i3ConfigPopupOnFullscreenType
148
149" Focus wrapping
150syn keyword i3ConfigFocusWrappingKeyword force_focus_wrapping focus_wrapping contained
151syn keyword i3ConfigFocusWrappingType yes no contained
152syn match i3ConfigFocusWrapping /^\s*\(force_\)\?focus_wrapping\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigFocusWrappingKeyword
153
154" Forcing Xinerama
155syn keyword i3ConfigForceXineramaKeyword force_xinerama contained
156syn match i3ConfigForceXinerama /^\s*force_xinerama\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigForceXineramaKeyword
157
158" Automatic back-and-forth when switching to the current workspace
159syn keyword i3ConfigAutomaticSwitchKeyword workspace_auto_back_and_forth contained
160syn match i3ConfigAutomaticSwitch /^\s*workspace_auto_back_and_forth\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigAutomaticSwitchKeyword
161
162" Delay urgency hint
163syn keyword i3ConfigTimeUnit ms contained
164syn keyword i3ConfigDelayUrgencyKeyword force_display_urgency_hint contained
165syn match i3ConfigDelayUrgency /^\s*force_display_urgency_hint\s\+\d\+\s\+ms\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDelayUrgencyKeyword,i3ConfigNumber,i3ConfigTimeUnit
166
167" Focus on window activation
168syn keyword i3ConfigFocusOnActivationKeyword focus_on_window_activation contained
169syn keyword i3ConfigFocusOnActivationType smart urgent focus none contained
170syn match i3ConfigFocusOnActivation /^\s*focus_on_window_activation\s\+\(smart\|urgent\|focus\|none\)\s\?$/ contains=i3ConfigFocusOnActivationKeyword,i3ConfigFocusOnActivationType
171
172" Automatic back-and-forth when switching to the current workspace
173syn keyword i3ConfigDrawingMarksKeyword show_marks contained
174syn match i3ConfigDrawingMarks /^\s*show_marks\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDrawingMarksKeyword
175
176" Group mode/bar
177syn keyword i3ConfigBlockKeyword mode bar colors i3bar_command status_command position exec mode hidden_state modifier id position output background statusline tray_output tray_padding separator separator_symbol workspace_buttons strip_workspace_numbers binding_mode_indicator focused_workspace active_workspace inactive_workspace urgent_workspace binding_mode contained
178syn region i3ConfigBlock start=+.*s\?{$+ end=+^}$+ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
179
180" Line continuation
181syn region i3ConfigLineCont start=/^.*\\$/ end=/^.*$/ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
182
183" Define the highlighting.
184hi def link i3ConfigError Error
185hi def link i3ConfigTodo Todo
186hi def link i3ConfigComment Comment
187hi def link i3ConfigFontContent Type
188hi def link i3ConfigFocusOnActivationType Type
189hi def link i3ConfigPopupOnFullscreenType Type
190hi def link i3ConfigOrientationKeyword Type
191hi def link i3ConfigMouseWarpingType Type
192hi def link i3ConfigFocusFollowsMouseType Type
193hi def link i3ConfigGapStyleKeyword Type
194hi def link i3ConfigTitleAlignKeyword Type
195hi def link i3ConfigSmartGapKeyword Type
196hi def link i3ConfigSmartBorderKeyword Type
197hi def link i3ConfigLayoutKeyword Type
198hi def link i3ConfigBorderStyleKeyword Type
199hi def link i3ConfigEdgeKeyword Type
200hi def link i3ConfigAction Type
201hi def link i3ConfigCommand Type
202hi def link i3ConfigOutput Type
203hi def link i3ConfigWindowCommandSpecial Type
204hi def link i3ConfigFocusWrappingType Type
205hi def link i3ConfigUnitOr Type
206hi def link i3ConfigFontSize Constant
207hi def link i3ConfigColor Constant
208hi def link i3ConfigNumber Constant
209hi def link i3ConfigUnit Constant
210hi def link i3ConfigVariableAndModifier Constant
211hi def link i3ConfigTimeUnit Constant
212hi def link i3ConfigModifier Constant
213hi def link i3ConfigString Constant
214hi def link i3ConfigNegativeSize Constant
215hi def link i3ConfigFontSeparator Special
216hi def link i3ConfigVariableModifier Special
217hi def link i3ConfigSizeSpecial Special
218hi def link i3ConfigWindowSpecial Special
219hi def link i3ConfigAssignSpecial Special
220hi def link i3ConfigFontNamespace PreProc
221hi def link i3ConfigBindArgument PreProc
222hi def link i3ConfigNoStartupId PreProc
223hi def link i3ConfigFontKeyword Identifier
224hi def link i3ConfigBindKeyword Identifier
225hi def link i3ConfigOrientation Identifier
226hi def link i3ConfigGapStyle Identifier
227hi def link i3ConfigTitleAlign Identifier
228hi def link i3ConfigSmartGap Identifier
229hi def link i3ConfigSmartBorder Identifier
230hi def link i3ConfigLayout Identifier
231hi def link i3ConfigBorderStyle Identifier
232hi def link i3ConfigEdge Identifier
233hi def link i3ConfigFloating Identifier
234hi def link i3ConfigCommandKeyword Identifier
235hi def link i3ConfigNoFocusKeyword Identifier
236hi def link i3ConfigInitializeKeyword Identifier
237hi def link i3ConfigAssignKeyword Identifier
238hi def link i3ConfigResourceKeyword Identifier
239hi def link i3ConfigExecKeyword Identifier
240hi def link i3ConfigWorkspaceKeyword Identifier
241hi def link i3ConfigClientColorKeyword Identifier
242hi def link i3ConfigInterprocessKeyword Identifier
243hi def link i3ConfigMouseWarpingKeyword Identifier
244hi def link i3ConfigFocusFollowsMouseKeyword Identifier
245hi def link i3ConfigPopupOnFullscreenKeyword Identifier
246hi def link i3ConfigFocusWrappingKeyword Identifier
247hi def link i3ConfigForceXineramaKeyword Identifier
248hi def link i3ConfigAutomaticSwitchKeyword Identifier
249hi def link i3ConfigDelayUrgencyKeyword Identifier
250hi def link i3ConfigFocusOnActivationKeyword Identifier
251hi def link i3ConfigDrawingMarksKeyword Identifier
252hi def link i3ConfigBlockKeyword Identifier
253hi def link i3ConfigVariable Statement
254hi def link i3ConfigArbitraryCommand Type
255
256let b:current_syntax = "i3config"