blob: a2f50e50b846e5a170e4eb81714804a4dbe0b425 [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 Moolenaarfd31be22022-01-16 14:46:06 +00006" Last Change: 2022 Jan 15
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
20" Error
21syn match i3ConfigError /.*/
22
23" 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
53" Gaps
54syn keyword i3ConfigGapStyleKeyword inner outer horizontal vertical top right bottom left current all set plus minus toggle up down contained
55syn 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
56syn keyword i3ConfigSmartGapKeyword on inverse_outer contained
57syn match i3ConfigSmartGap /^\s*smart_gaps\s\+\(on\|inverse_outer\)\s\?$/ contains=i3ConfigSmartGapKeyword
58syn keyword i3ConfigSmartBorderKeyword on no_gaps contained
59syn match i3ConfigSmartBorder /^\s*smart_borders\s\+\(on\|no_gaps\)\s\?$/ contains=i3ConfigSmartBorderKeyword
60
61" Keyboard bindings
62syn keyword i3ConfigAction toggle fullscreen restart key import kill shrink grow contained
63syn keyword i3ConfigAction focus move grow height width split layout resize restore reload mute unmute exit mode workspace container to contained
64syn match i3ConfigModifier /\w\++\w\+\(\(+\w\+\)\+\)\?/ contained contains=i3ConfigVariableModifier
65syn match i3ConfigNumber /\s\d\+/ contained
66syn match i3ConfigUnit /\sp\(pt\|x\)/ contained
67syn match i3ConfigUnitOr /\sor/ contained
68syn keyword i3ConfigBindKeyword bindsym bindcode exec gaps border contained
69syn match i3ConfigBindArgument /--\w\+\(\(-\w\+\)\+\)\?\s/ contained
70syn match i3ConfigBind /^\s*\(bindsym\|bindcode\)\s\+.*$/ contains=i3ConfigVariable,i3ConfigBindKeyword,i3ConfigVariableAndModifier,i3ConfigNumber,i3ConfigUnit,i3ConfigUnitOr,i3ConfigBindArgument,i3ConfigModifier,i3ConfigAction,i3ConfigString,i3ConfigGapStyleKeyword,i3ConfigBorderStyleKeyword
71
72" Floating
73syn keyword i3ConfigSizeSpecial x contained
74syn match i3ConfigNegativeSize /-/ contained
75syn match i3ConfigSize /-\?\d\+\s\?x\s\?-\?\d\+/ contained contains=i3ConfigSizeSpecial,i3ConfigNumber,i3ConfigNegativeSize
76syn match i3ConfigFloating /^\s*floating_modifier\s\+\$\w\+\d\?/ contains=i3ConfigVariable
77syn match i3ConfigFloating /^\s*floating_\(maximum\|minimum\)_size\s\+-\?\d\+\s\?x\s\?-\?\d\+/ contains=i3ConfigSize
78
79" Orientation
80syn keyword i3ConfigOrientationKeyword vertical horizontal auto contained
81syn match i3ConfigOrientation /^\s*default_orientation\s\+\(vertical\|horizontal\|auto\)\s\?$/ contains=i3ConfigOrientationKeyword
82
83" Layout
84syn keyword i3ConfigLayoutKeyword default stacking tabbed contained
85syn match i3ConfigLayout /^\s*workspace_layout\s\+\(default\|stacking\|tabbed\)\s\?$/ contains=i3ConfigLayoutKeyword
86
87" Border style
88syn keyword i3ConfigBorderStyleKeyword none normal pixel contained
89syn 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
90
91" Hide borders and edges
92syn keyword i3ConfigEdgeKeyword none vertical horizontal both smart smart_no_gaps contained
93syn match i3ConfigEdge /^\s*hide_edge_borders\s\+\(none\|vertical\|horizontal\|both\|smart\|smart_no_gaps\)\s\?$/ contains=i3ConfigEdgeKeyword
94
95" Arbitrary commands for specific windows (for_window)
96syn keyword i3ConfigCommandKeyword for_window contained
97syn region i3ConfigWindowStringSpecial start=+"+ skip=+\\"+ end=+"+ contained contains=i3ConfigString
98syn region i3ConfigWindowCommandSpecial start="\[" end="\]" contained contains=i3ConfigWindowStringSpacial,i3ConfigString
99syn match i3ConfigArbitraryCommand /^\s*for_window\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigCommandKeyword,i3ConfigBorderStyleKeyword,i3ConfigLayoutKeyword,i3ConfigOrientationKeyword,Size,i3ConfigNumber
100
101" Disable focus open opening
102syn keyword i3ConfigNoFocusKeyword no_focus contained
103syn match i3ConfigDisableFocus /^\s*no_focus\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigNoFocusKeyword
104
105" Move client to specific workspace automatically
106syn keyword i3ConfigAssignKeyword assign contained
107syn match i3ConfigAssignSpecial /→/ contained
108syn match i3ConfigAssign /^\s*assign\s\+.*$/ contains=i3ConfigAssignKeyword,i3ConfigWindowCommandSpecial,i3ConfigAssignSpecial
109
110" X resources
111syn keyword i3ConfigResourceKeyword set_from_resource contained
112syn match i3ConfigResource /^\s*set_from_resource\s\+.*$/ contains=i3ConfigResourceKeyword,i3ConfigWindowCommandSpecial,i3ConfigColor,i3ConfigVariable
113
114" Auto start applications
115syn keyword i3ConfigExecKeyword exec exec_always contained
116syn match i3ConfigNoStartupId /--no-startup-id/ contained " We are not using i3ConfigBindArgument as only no-startup-id is supported here
117syn match i3ConfigExec /^\s*exec\(_always\)\?\s\+.*$/ contains=i3ConfigExecKeyword,i3ConfigNoStartupId,i3ConfigString
118
119" Automatically putting workspaces on specific screens
120syn keyword i3ConfigWorkspaceKeyword workspace contained
121syn keyword i3ConfigOutput output contained
122syn match i3ConfigWorkspace /^\s*workspace\s\+.*$/ contains=i3ConfigWorkspaceKeyword,i3ConfigNumber,i3ConfigString,i3ConfigOutput
123
124" Changing colors
125syn keyword i3ConfigClientColorKeyword client focused focused_inactive unfocused urgent placeholder background contained
126syn match i3ConfigClientColor /^\s*client.\w\+\s\+.*$/ contains=i3ConfigClientColorKeyword,i3ConfigColor,i3ConfigVariable
127
128syn keyword i3ConfigTitleAlignKeyword left center right contained
129syn match i3ConfigTitleAlign /^\s*title_align\s\+.*$/ contains=i3ConfigTitleAlignKeyword
130
131" Interprocess communication
132syn match i3ConfigInterprocessKeyword /ipc-socket/ contained
133syn match i3ConfigInterprocess /^\s*ipc-socket\s\+.*$/ contains=i3ConfigInterprocessKeyword
134
135" Mouse warping
136syn keyword i3ConfigMouseWarpingKeyword mouse_warping contained
137syn keyword i3ConfigMouseWarpingType output none contained
138syn match i3ConfigMouseWarping /^\s*mouse_warping\s\+\(output\|none\)\s\?$/ contains=i3ConfigMouseWarpingKeyword,i3ConfigMouseWarpingType
139
140" Focus follows mouse
141syn keyword i3ConfigFocusFollowsMouseKeyword focus_follows_mouse contained
142syn keyword i3ConfigFocusFollowsMouseType yes no contained
143syn match i3ConfigFocusFollowsMouse /^\s*focus_follows_mouse\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusFollowsMouseKeyword,i3ConfigFocusFollowsMouseType
144
145" Popups during fullscreen mode
146syn keyword i3ConfigPopupOnFullscreenKeyword popup_during_fullscreen contained
147syn keyword i3ConfigPopuponFullscreenType smart ignore leave_fullscreen contained
148syn match i3ConfigPopupOnFullscreen /^\s*popup_during_fullscreen\s\+\w\+\s\?$/ contains=i3ConfigPopupOnFullscreenKeyword,i3ConfigPopupOnFullscreenType
149
150" Focus wrapping
151syn keyword i3ConfigFocusWrappingKeyword force_focus_wrapping focus_wrapping contained
152syn keyword i3ConfigFocusWrappingType yes no contained
153syn match i3ConfigFocusWrapping /^\s*\(force_\)\?focus_wrapping\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigFocusWrappingKeyword
154
155" Forcing Xinerama
156syn keyword i3ConfigForceXineramaKeyword force_xinerama contained
157syn match i3ConfigForceXinerama /^\s*force_xinerama\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigForceXineramaKeyword
158
159" Automatic back-and-forth when switching to the current workspace
160syn keyword i3ConfigAutomaticSwitchKeyword workspace_auto_back_and_forth contained
161syn match i3ConfigAutomaticSwitch /^\s*workspace_auto_back_and_forth\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigAutomaticSwitchKeyword
162
163" Delay urgency hint
164syn keyword i3ConfigTimeUnit ms contained
165syn keyword i3ConfigDelayUrgencyKeyword force_display_urgency_hint contained
166syn match i3ConfigDelayUrgency /^\s*force_display_urgency_hint\s\+\d\+\s\+ms\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDelayUrgencyKeyword,i3ConfigNumber,i3ConfigTimeUnit
167
168" Focus on window activation
169syn keyword i3ConfigFocusOnActivationKeyword focus_on_window_activation contained
170syn keyword i3ConfigFocusOnActivationType smart urgent focus none contained
171syn match i3ConfigFocusOnActivation /^\s*focus_on_window_activation\s\+\(smart\|urgent\|focus\|none\)\s\?$/ contains=i3ConfigFocusOnActivationKeyword,i3ConfigFocusOnActivationType
172
173" Automatic back-and-forth when switching to the current workspace
174syn keyword i3ConfigDrawingMarksKeyword show_marks contained
175syn match i3ConfigDrawingMarks /^\s*show_marks\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDrawingMarksKeyword
176
177" Group mode/bar
Bram Moolenaarfd31be22022-01-16 14:46:06 +0000178syn 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 Moolenaar0e6adf82021-12-16 14:41:10 +0000179syn region i3ConfigBlock start=+.*s\?{$+ end=+^}$+ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
180
181" Line continuation
182syn region i3ConfigLineCont start=/^.*\\$/ end=/^.*$/ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
183
184" Define the highlighting.
185hi def link i3ConfigError Error
186hi 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
224hi def link i3ConfigFontKeyword Identifier
225hi def link i3ConfigBindKeyword Identifier
226hi def link i3ConfigOrientation Identifier
227hi def link i3ConfigGapStyle Identifier
228hi def link i3ConfigTitleAlign Identifier
229hi def link i3ConfigSmartGap Identifier
230hi def link i3ConfigSmartBorder Identifier
231hi def link i3ConfigLayout Identifier
232hi def link i3ConfigBorderStyle Identifier
233hi def link i3ConfigEdge Identifier
234hi def link i3ConfigFloating Identifier
235hi def link i3ConfigCommandKeyword Identifier
236hi def link i3ConfigNoFocusKeyword Identifier
237hi def link i3ConfigInitializeKeyword Identifier
238hi def link i3ConfigAssignKeyword Identifier
239hi def link i3ConfigResourceKeyword Identifier
240hi def link i3ConfigExecKeyword Identifier
241hi def link i3ConfigWorkspaceKeyword Identifier
242hi def link i3ConfigClientColorKeyword Identifier
243hi def link i3ConfigInterprocessKeyword Identifier
244hi def link i3ConfigMouseWarpingKeyword Identifier
245hi def link i3ConfigFocusFollowsMouseKeyword Identifier
246hi def link i3ConfigPopupOnFullscreenKeyword Identifier
247hi def link i3ConfigFocusWrappingKeyword Identifier
248hi def link i3ConfigForceXineramaKeyword Identifier
249hi def link i3ConfigAutomaticSwitchKeyword Identifier
250hi def link i3ConfigDelayUrgencyKeyword Identifier
251hi def link i3ConfigFocusOnActivationKeyword Identifier
252hi def link i3ConfigDrawingMarksKeyword Identifier
253hi def link i3ConfigBlockKeyword Identifier
254hi def link i3ConfigVariable Statement
255hi def link i3ConfigArbitraryCommand Type
256
257let b:current_syntax = "i3config"