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