blob: caef244ce56e14cb1775d17b9e093130ec1ec4fb [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 Moolenaar2ecbe532022-07-29 21:36:21 +010020" Error
21syn match i3ConfigError /.*/
22
Bram Moolenaar0e6adf82021-12-16 14:41:10 +000023" Todo
24syn keyword i3ConfigTodo TODO FIXME XXX contained
25
26" Comment
27" Comments are started with a # and can only be used at the beginning of a line
28syn match i3ConfigComment /^\s*#.*$/ contains=i3ConfigTodo
29
30" Font
31" A FreeType font description is composed by:
32" a font family, a style, a weight, a variant, a stretch and a size.
33syn match i3ConfigFontSeparator /,/ contained
34syn match i3ConfigFontSeparator /:/ contained
35syn keyword i3ConfigFontKeyword font contained
36syn match i3ConfigFontNamespace /\w\+:/ contained contains=i3ConfigFontSeparator
37syn match i3ConfigFontContent /-\?\w\+\(-\+\|\s\+\|,\)/ contained contains=i3ConfigFontNamespace,i3ConfigFontSeparator,i3ConfigFontKeyword
38syn match i3ConfigFontSize /\s\=\d\+\(px\)\?\s\?$/ contained
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
42syn match i3ConfigFont /^\s*font\s\+\(\(.*\\\_.*\)\|\(.*[^\\]\+$\)\)/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
43
44" variables
45syn match i3ConfigString /\(['"]\)\(.\{-}\)\1/ contained
46syn match i3ConfigColor /#\w\{6}/ contained
47syn match i3ConfigVariableModifier /+/ contained
48syn match i3ConfigVariableAndModifier /+\w\+/ contained contains=i3ConfigVariableModifier
49syn match i3ConfigVariable /\$\w\+\(\(-\w\+\)\+\)\?\(\s\|+\)\?/ contains=i3ConfigVariableModifier,i3ConfigVariableAndModifier
50syn keyword i3ConfigInitializeKeyword set contained
51syn match i3ConfigInitialize /^\s*set\s\+.*$/ contains=i3ConfigVariable,i3ConfigInitializeKeyword,i3ConfigColor,i3ConfigString
52
Bram Moolenaard899e512022-05-07 21:54:03 +010053" Include
54syn keyword i3ConfigIncludeKeyword include contained
55syn match i3ConfigInclude /^\s*include\s\+.*$/ contains=i3ConfigIncludeKeyword,i3ConfigString,i3ConfigVariable
56
Bram Moolenaar0e6adf82021-12-16 14:41:10 +000057" Gaps
58syn keyword i3ConfigGapStyleKeyword inner outer horizontal vertical top right bottom left current all set plus minus toggle up down contained
59syn 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
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010060syn keyword i3ConfigSmartGapKeyword on inverse_outer off contained
61syn match i3ConfigSmartGap /^\s*smart_gaps\s\+\(on\|inverse_outer\|off\)\s\?$/ contains=i3ConfigSmartGapKeyword
Bram Moolenaar0e6adf82021-12-16 14:41:10 +000062syn keyword i3ConfigSmartBorderKeyword on no_gaps contained
63syn match i3ConfigSmartBorder /^\s*smart_borders\s\+\(on\|no_gaps\)\s\?$/ contains=i3ConfigSmartBorderKeyword
64
65" Keyboard bindings
66syn keyword i3ConfigAction toggle fullscreen restart key import kill shrink grow contained
67syn keyword i3ConfigAction focus move grow height width split layout resize restore reload mute unmute exit mode workspace container to contained
68syn match i3ConfigModifier /\w\++\w\+\(\(+\w\+\)\+\)\?/ contained contains=i3ConfigVariableModifier
69syn match i3ConfigNumber /\s\d\+/ contained
70syn match i3ConfigUnit /\sp\(pt\|x\)/ contained
71syn match i3ConfigUnitOr /\sor/ contained
72syn keyword i3ConfigBindKeyword bindsym bindcode exec gaps border contained
73syn match i3ConfigBindArgument /--\w\+\(\(-\w\+\)\+\)\?\s/ contained
74syn match i3ConfigBind /^\s*\(bindsym\|bindcode\)\s\+.*$/ contains=i3ConfigVariable,i3ConfigBindKeyword,i3ConfigVariableAndModifier,i3ConfigNumber,i3ConfigUnit,i3ConfigUnitOr,i3ConfigBindArgument,i3ConfigModifier,i3ConfigAction,i3ConfigString,i3ConfigGapStyleKeyword,i3ConfigBorderStyleKeyword
75
76" Floating
77syn keyword i3ConfigSizeSpecial x contained
78syn match i3ConfigNegativeSize /-/ contained
79syn match i3ConfigSize /-\?\d\+\s\?x\s\?-\?\d\+/ contained contains=i3ConfigSizeSpecial,i3ConfigNumber,i3ConfigNegativeSize
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010080syn match i3ConfigFloatingModifier /^\s*floating_modifier\s\+\$\w\+\d\?/ contains=i3ConfigVariable
Bram Moolenaar0e6adf82021-12-16 14:41:10 +000081syn match i3ConfigFloating /^\s*floating_\(maximum\|minimum\)_size\s\+-\?\d\+\s\?x\s\?-\?\d\+/ contains=i3ConfigSize
82
83" Orientation
84syn keyword i3ConfigOrientationKeyword vertical horizontal auto contained
85syn match i3ConfigOrientation /^\s*default_orientation\s\+\(vertical\|horizontal\|auto\)\s\?$/ contains=i3ConfigOrientationKeyword
86
87" Layout
88syn keyword i3ConfigLayoutKeyword default stacking tabbed contained
89syn match i3ConfigLayout /^\s*workspace_layout\s\+\(default\|stacking\|tabbed\)\s\?$/ contains=i3ConfigLayoutKeyword
90
91" Border style
92syn keyword i3ConfigBorderStyleKeyword none normal pixel contained
93syn 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
94
95" Hide borders and edges
96syn keyword i3ConfigEdgeKeyword none vertical horizontal both smart smart_no_gaps contained
97syn match i3ConfigEdge /^\s*hide_edge_borders\s\+\(none\|vertical\|horizontal\|both\|smart\|smart_no_gaps\)\s\?$/ contains=i3ConfigEdgeKeyword
98
99" Arbitrary commands for specific windows (for_window)
100syn keyword i3ConfigCommandKeyword for_window contained
101syn region i3ConfigWindowStringSpecial start=+"+ skip=+\\"+ end=+"+ contained contains=i3ConfigString
102syn region i3ConfigWindowCommandSpecial start="\[" end="\]" contained contains=i3ConfigWindowStringSpacial,i3ConfigString
103syn match i3ConfigArbitraryCommand /^\s*for_window\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigCommandKeyword,i3ConfigBorderStyleKeyword,i3ConfigLayoutKeyword,i3ConfigOrientationKeyword,Size,i3ConfigNumber
104
105" Disable focus open opening
106syn keyword i3ConfigNoFocusKeyword no_focus contained
107syn match i3ConfigDisableFocus /^\s*no_focus\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigNoFocusKeyword
108
109" Move client to specific workspace automatically
110syn keyword i3ConfigAssignKeyword assign contained
111syn match i3ConfigAssignSpecial /→/ contained
112syn match i3ConfigAssign /^\s*assign\s\+.*$/ contains=i3ConfigAssignKeyword,i3ConfigWindowCommandSpecial,i3ConfigAssignSpecial
113
114" X resources
115syn keyword i3ConfigResourceKeyword set_from_resource contained
116syn match i3ConfigResource /^\s*set_from_resource\s\+.*$/ contains=i3ConfigResourceKeyword,i3ConfigWindowCommandSpecial,i3ConfigColor,i3ConfigVariable
117
118" Auto start applications
119syn keyword i3ConfigExecKeyword exec exec_always contained
120syn match i3ConfigNoStartupId /--no-startup-id/ contained " We are not using i3ConfigBindArgument as only no-startup-id is supported here
121syn match i3ConfigExec /^\s*exec\(_always\)\?\s\+.*$/ contains=i3ConfigExecKeyword,i3ConfigNoStartupId,i3ConfigString
122
123" Automatically putting workspaces on specific screens
124syn keyword i3ConfigWorkspaceKeyword workspace contained
125syn keyword i3ConfigOutput output contained
126syn match i3ConfigWorkspace /^\s*workspace\s\+.*$/ contains=i3ConfigWorkspaceKeyword,i3ConfigNumber,i3ConfigString,i3ConfigOutput
127
128" Changing colors
129syn keyword i3ConfigClientColorKeyword client focused focused_inactive unfocused urgent placeholder background contained
130syn match i3ConfigClientColor /^\s*client.\w\+\s\+.*$/ contains=i3ConfigClientColorKeyword,i3ConfigColor,i3ConfigVariable
131
132syn keyword i3ConfigTitleAlignKeyword left center right contained
133syn match i3ConfigTitleAlign /^\s*title_align\s\+.*$/ contains=i3ConfigTitleAlignKeyword
134
135" Interprocess communication
136syn match i3ConfigInterprocessKeyword /ipc-socket/ contained
137syn match i3ConfigInterprocess /^\s*ipc-socket\s\+.*$/ contains=i3ConfigInterprocessKeyword
138
139" Mouse warping
140syn keyword i3ConfigMouseWarpingKeyword mouse_warping contained
141syn keyword i3ConfigMouseWarpingType output none contained
142syn match i3ConfigMouseWarping /^\s*mouse_warping\s\+\(output\|none\)\s\?$/ contains=i3ConfigMouseWarpingKeyword,i3ConfigMouseWarpingType
143
144" Focus follows mouse
145syn keyword i3ConfigFocusFollowsMouseKeyword focus_follows_mouse contained
146syn keyword i3ConfigFocusFollowsMouseType yes no contained
147syn match i3ConfigFocusFollowsMouse /^\s*focus_follows_mouse\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusFollowsMouseKeyword,i3ConfigFocusFollowsMouseType
148
149" Popups during fullscreen mode
150syn keyword i3ConfigPopupOnFullscreenKeyword popup_during_fullscreen contained
151syn keyword i3ConfigPopuponFullscreenType smart ignore leave_fullscreen contained
152syn match i3ConfigPopupOnFullscreen /^\s*popup_during_fullscreen\s\+\w\+\s\?$/ contains=i3ConfigPopupOnFullscreenKeyword,i3ConfigPopupOnFullscreenType
153
154" Focus wrapping
155syn keyword i3ConfigFocusWrappingKeyword force_focus_wrapping focus_wrapping contained
156syn keyword i3ConfigFocusWrappingType yes no contained
157syn match i3ConfigFocusWrapping /^\s*\(force_\)\?focus_wrapping\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigFocusWrappingKeyword
158
159" Forcing Xinerama
160syn keyword i3ConfigForceXineramaKeyword force_xinerama contained
161syn match i3ConfigForceXinerama /^\s*force_xinerama\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigForceXineramaKeyword
162
163" Automatic back-and-forth when switching to the current workspace
164syn keyword i3ConfigAutomaticSwitchKeyword workspace_auto_back_and_forth contained
165syn match i3ConfigAutomaticSwitch /^\s*workspace_auto_back_and_forth\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigAutomaticSwitchKeyword
166
167" Delay urgency hint
168syn keyword i3ConfigTimeUnit ms contained
169syn keyword i3ConfigDelayUrgencyKeyword force_display_urgency_hint contained
170syn match i3ConfigDelayUrgency /^\s*force_display_urgency_hint\s\+\d\+\s\+ms\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDelayUrgencyKeyword,i3ConfigNumber,i3ConfigTimeUnit
171
172" Focus on window activation
173syn keyword i3ConfigFocusOnActivationKeyword focus_on_window_activation contained
174syn keyword i3ConfigFocusOnActivationType smart urgent focus none contained
175syn match i3ConfigFocusOnActivation /^\s*focus_on_window_activation\s\+\(smart\|urgent\|focus\|none\)\s\?$/ contains=i3ConfigFocusOnActivationKeyword,i3ConfigFocusOnActivationType
176
177" Automatic back-and-forth when switching to the current workspace
178syn keyword i3ConfigDrawingMarksKeyword show_marks contained
179syn match i3ConfigDrawingMarks /^\s*show_marks\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDrawingMarksKeyword
180
181" Group mode/bar
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000182syn 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 +0100183syn 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 +0000184
185" Line continuation
186syn region i3ConfigLineCont start=/^.*\\$/ end=/^.*$/ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
187
188" Define the highlighting.
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100189hi def link i3ConfigError Error
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000190hi def link i3ConfigTodo Todo
191hi def link i3ConfigComment Comment
192hi def link i3ConfigFontContent Type
193hi def link i3ConfigFocusOnActivationType Type
194hi def link i3ConfigPopupOnFullscreenType Type
195hi def link i3ConfigOrientationKeyword Type
196hi def link i3ConfigMouseWarpingType Type
197hi def link i3ConfigFocusFollowsMouseType Type
198hi def link i3ConfigGapStyleKeyword Type
199hi def link i3ConfigTitleAlignKeyword Type
200hi def link i3ConfigSmartGapKeyword Type
201hi def link i3ConfigSmartBorderKeyword Type
202hi def link i3ConfigLayoutKeyword Type
203hi def link i3ConfigBorderStyleKeyword Type
204hi def link i3ConfigEdgeKeyword Type
205hi def link i3ConfigAction Type
206hi def link i3ConfigCommand Type
207hi def link i3ConfigOutput Type
208hi def link i3ConfigWindowCommandSpecial Type
209hi def link i3ConfigFocusWrappingType Type
210hi def link i3ConfigUnitOr Type
211hi def link i3ConfigFontSize Constant
212hi def link i3ConfigColor Constant
213hi def link i3ConfigNumber Constant
214hi def link i3ConfigUnit Constant
215hi def link i3ConfigVariableAndModifier Constant
216hi def link i3ConfigTimeUnit Constant
217hi def link i3ConfigModifier Constant
218hi def link i3ConfigString Constant
219hi def link i3ConfigNegativeSize Constant
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100220hi def link i3ConfigInclude Constant
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000221hi def link i3ConfigFontSeparator Special
222hi def link i3ConfigVariableModifier Special
223hi def link i3ConfigSizeSpecial Special
224hi def link i3ConfigWindowSpecial Special
225hi def link i3ConfigAssignSpecial Special
226hi def link i3ConfigFontNamespace PreProc
227hi def link i3ConfigBindArgument PreProc
228hi def link i3ConfigNoStartupId PreProc
Bram Moolenaard899e512022-05-07 21:54:03 +0100229hi def link i3ConfigIncludeKeyword Identifier
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000230hi def link i3ConfigFontKeyword Identifier
231hi def link i3ConfigBindKeyword Identifier
232hi def link i3ConfigOrientation Identifier
233hi def link i3ConfigGapStyle Identifier
234hi def link i3ConfigTitleAlign Identifier
235hi def link i3ConfigSmartGap Identifier
236hi def link i3ConfigSmartBorder Identifier
237hi def link i3ConfigLayout Identifier
238hi def link i3ConfigBorderStyle Identifier
239hi def link i3ConfigEdge Identifier
240hi def link i3ConfigFloating Identifier
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100241hi def link i3ConfigFloatingModifier Identifier
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000242hi def link i3ConfigCommandKeyword Identifier
243hi def link i3ConfigNoFocusKeyword Identifier
244hi def link i3ConfigInitializeKeyword Identifier
245hi def link i3ConfigAssignKeyword Identifier
246hi def link i3ConfigResourceKeyword Identifier
247hi def link i3ConfigExecKeyword Identifier
248hi def link i3ConfigWorkspaceKeyword Identifier
249hi def link i3ConfigClientColorKeyword Identifier
250hi def link i3ConfigInterprocessKeyword Identifier
251hi def link i3ConfigMouseWarpingKeyword Identifier
252hi def link i3ConfigFocusFollowsMouseKeyword Identifier
253hi def link i3ConfigPopupOnFullscreenKeyword Identifier
254hi def link i3ConfigFocusWrappingKeyword Identifier
255hi def link i3ConfigForceXineramaKeyword Identifier
256hi def link i3ConfigAutomaticSwitchKeyword Identifier
257hi def link i3ConfigDelayUrgencyKeyword Identifier
258hi def link i3ConfigFocusOnActivationKeyword Identifier
259hi def link i3ConfigDrawingMarksKeyword Identifier
260hi def link i3ConfigBlockKeyword Identifier
261hi def link i3ConfigVariable Statement
262hi def link i3ConfigArbitraryCommand Type
263
264let b:current_syntax = "i3config"