blob: 55c52799b970e8d5a65191f17f132b185fe615a3 [file] [log] [blame]
Bram Moolenaar2ecbe532022-07-29 21:36:21 +01001" Vim syntax file
Josef Litoš54f70cf2023-09-27 18:58:15 +02002" Language: sway config file
3" Original Author: Josef Litos (JosefLitos/i3config.vim)
Bram Moolenaar2ecbe532022-07-29 21:36:21 +01004" Maintainer: James Eapen <james.eapen@vai.org>
Josef Litošdd83b632024-04-15 19:38:04 +02005" Version: 1.2.1
6" Last Change: 2024-04-14
Bram Moolenaar2ecbe532022-07-29 21:36:21 +01007
8" References:
9" http://i3wm.org/docs/userguide.html#configuring
10" https://github.com/swaywm/sway/blob/b69d637f7a34e239e48a4267ae94a5e7087b5834/sway/sway.5.scd
11" http://vimdoc.sourceforge.net/htmldoc/syntax.html
12"
13"
14" Quit when a syntax file was already loaded
15if exists("b:current_syntax")
16 finish
17endif
18
19runtime! syntax/i3config.vim
20
Josef Litošdd83b632024-04-15 19:38:04 +020021" Sway extensions to i3
22syn cluster i3ConfigCommand contains=i3ConfigCommand,i3ConfigAction,i3ConfigActionKeyword,@i3ConfigValue,i3ConfigColor,i3ConfigKeyword
23syn keyword i3ConfigActionKeyword opacity urgent shortcuts_inhibitor splitv splith splitt contained contained skipwhite nextgroup=i3ConfigOption
24syn keyword i3ConfigOption set plus minus allow deny csd v h t contained contained skipwhite nextgroup=i3ConfigOption,@i3ConfigValue
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010025
Josef Litoš54f70cf2023-09-27 18:58:15 +020026syn keyword i3ConfigConditionProp app_id pid shell contained
27
28syn keyword i3ConfigWorkspaceDir prev_on_output next_on_output contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010029
Josef Litošdd83b632024-04-15 19:38:04 +020030syn match i3ConfigBindArgument /--\(locked\|to-code\|no-repeat\|input-device=[^ '"]*\|no-warn\) / contained contains=i3ConfigShOper,@i3ConfigStrVar nextgroup=i3ConfigBindArgument,i3ConfigBindCombo
31syn region i3ConfigBindArgument start=/--input-device=['"]/ end=/\s/ contained contains=@i3ConfigIdent,i3ConfigShOper,i3ConfigString nextgroup=i3ConfigBindArgument,i3ConfigBindCombo
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010032
Josef Litošdd83b632024-04-15 19:38:04 +020033syn region i3ConfigBindCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigComment fold keepend extend
34" hack for blocks with start outside parsing range
35syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*[$a-zA-Z0-9_+]\+ [a-z[]/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigParen keepend extend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010036
Josef Litošdd83b632024-04-15 19:38:04 +020037syn region i3ConfigExec start=/ {$/ end=/^}$/ contained contains=i3ConfigExecAction,@i3ConfigSh,i3ConfigComment fold keepend extend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010038
Josef Litoš8b2457a2023-09-12 20:24:47 +020039syn keyword swayConfigFloatingModifierOpts normal inverse contained
40syn match i3ConfigKeyword /^floating_modifier [$a-zA-Z0-9+]\+ \(normal\|inverse\)$/ contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010041
Josef Litošdd83b632024-04-15 19:38:04 +020042syn match swayConfigI3Param /--i3/ contains=i3ConfigShParam skipwhite nextgroup=i3ConfigEdgeOpts
43syn keyword i3ConfigKeyword hide_edge_borders contained skipwhite nextgroup=swayConfigI3Param,i3ConfigEdgeOpts
James Eapen46d67d22023-12-29 11:51:40 -050044
Josef Litošdd83b632024-04-15 19:38:04 +020045syn keyword i3ConfigBarOpts swaybar_command contained skipwhite nextgroup=@i3ConfigSh
46syn region i3ConfigBarOpts matchgroup=i3ConfigBarOpts start=/gaps/ end=/$/ contained contains=@i3ConfigNumVar
47syn keyword i3ConfigBarOpts height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained skipwhite nextgroup=i3ConfigBarOptVals,@i3ConfigValue,i3ConfigShOper
Josef Litoš54f70cf2023-09-27 18:58:15 +020048syn keyword i3ConfigBarOptVals overlay contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020049
50syn keyword i3ConfigExecActionKeyword swaymsg contained
51
52" Sway-only options
53" Xwayland
54syn keyword swayConfigXOpt enable disable force contained
Josef Litošdd83b632024-04-15 19:38:04 +020055syn keyword i3ConfigKeyword xwayland contained skipwhite nextgroup=swayConfigXOpt
Josef Litoš54f70cf2023-09-27 18:58:15 +020056
57" Inhibit idle
Josef Litoš54f70cf2023-09-27 18:58:15 +020058syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained
Josef Litošdd83b632024-04-15 19:38:04 +020059syn keyword i3ConfigActionKeyword inhibit_idle contained skipwhite nextgroup=swayConfigInhibitOpts
Josef Litoš8b2457a2023-09-12 20:24:47 +020060
61" Bindswitch
Josef Litošdd83b632024-04-15 19:38:04 +020062syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\) / contained nextgroup=swayConfigBindswitchArgument,swayConfigBindswitchType
63syn keyword swayConfigBindswitchType lid tablet contained nextgroup=swayConfigBindswitchCombo
Josef Litoš8b2457a2023-09-12 20:24:47 +020064syn keyword swayConfigBindswitchState toggle contained
Josef Litošdd83b632024-04-15 19:38:04 +020065syn match swayConfigBindswitchCombo /:\(on\|off\|toggle\) / contained contains=i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean nextgroup=i3ConfigBind
66syn region swayConfigBindswitchType matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigComment fold keepend extend
67syn keyword i3ConfigBindKeyword bindswitch contained skipwhite nextgroup=swayConfigBindswitchArgument,swayConfigBindswitchType
68" hack for blocks with start outside parsing range
69syn region swayConfigBlockOrphan start=/^\s\+\(lid\|tablet\):/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigParen keepend extend
Josef Litoš8b2457a2023-09-12 20:24:47 +020070
71" Bindgesture
Josef Litošdd83b632024-04-15 19:38:04 +020072syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\) / contained nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo
Josef Litoš8b2457a2023-09-12 20:24:47 +020073syn keyword swayConfigBindgestureType hold swipe pinch contained
74syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained
Josef Litošdd83b632024-04-15 19:38:04 +020075syn match swayConfigBindgestureCombo /\(hold\(:[1-5]\)\?\|swipe\(:[3-5]\)\?\(:up\|:down\|:left\|:right\)\?\|pinch\(:[2-5]\)\?:\(+\?\(inward\|outward\|clockwise\|counterclockwise\|up\|down\|left\|right\)\)\+\) / contained contains=i3ConfigNumber,swayConfigBindgestureType,i3ConfigColonOperator,swayConfigBindgestureDir,i3ConfigBindModifier nextgroup=swayConfigBindgestureCombo,i3ConfigBind
76syn region swayConfigBindgestureCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=swayConfigBindgestureArgument,swayConfigBindgestureCombo,i3ConfigComment fold keepend extend
77syn keyword i3ConfigBindKeyword bindgesture contained skipwhite nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo
78" hack for blocks with start outside parsing range
79syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\(hold\|swipe\|pinch\):/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=swayConfigBindgestureArgument,swayConfigBindgestureCombo,i3ConfigParen keepend extend
Josef Litoš8b2457a2023-09-12 20:24:47 +020080
Josef Litoš54f70cf2023-09-27 18:58:15 +020081" Tiling drag threshold
Josef Litoš8b2457a2023-09-12 20:24:47 +020082" Titlebar commands
Josef Litošdd83b632024-04-15 19:38:04 +020083syn keyword i3ConfigKeyword tiling_drag_threshold titlebar_border_thickness contained skipwhite nextgroup=@i3ConfigNumVar
84syn match i3ConfigKeyword /^titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contains=@i3ConfigNumVar
Josef Litoš8b2457a2023-09-12 20:24:47 +020085
Josef Litošdd83b632024-04-15 19:38:04 +020086syn match swayConfigDeviceOper /[*:;!]/ contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020087
Josef Litoš8b2457a2023-09-12 20:24:47 +020088" Input devices
Josef Litošdd83b632024-04-15 19:38:04 +020089syn keyword swayConfigInputOpts xkb_variant xkb_rules xkb_switch_layout xkb_numlock xkb_file xkb_capslock xkb_model repeat_delay repeat_rate map_to_output map_to_region map_from_region tool_mode accel_profile dwt dwtp drag_lock drag click_method middle_emulation tap events calibration_matrix natural_scroll left_handed pointer_accel scroll_button scroll_factor scroll_method tap_button_map contained skipwhite nextgroup=swayConfigInputOptVals,@i3ConfigValue
90syn keyword swayConfigInputOptVals absolute relative adaptive flat none button_areas clickfinger toggle two_finger edge on_button_down lrm lmr next prev pen eraser brush pencil airbrush disabled_on_external_mouse disable enable contained skipwhite nextgroup=swayConfigInputOpts,@i3ConfigValue,swayConfigDeviceOper
91syn match swayConfigDeviceOper /,/ contained nextgroup=swayConfigXkbOptsPair,swayConfigXkbLayout
92syn match swayConfigXkbLayout /[a-z]\+/ contained nextgroup=swayConfigDeviceOper
93syn keyword swayConfigInputOpts xkb_layout contained skipwhite nextgroup=swayConfigXkbLayout
94syn match swayConfigXkbOptsPairVal /[0-9a-z_-]\+/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigDeviceOper,swayConfigInputOpts
95syn match swayConfigXkbOptsPair /[a-z]\+:/ contained contains=i3ConfigColonOperator nextgroup=swayConfigXkbOptsPairVal
96syn keyword swayConfigInputOpts xkb_options contained skipwhite nextgroup=swayConfigXkbOptsPair
97
98syn region swayConfigInput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigInputOpts,@i3ConfigValue keepend
99syn region swayConfigInput matchgroup=i3ConfigParen start=/ {$/ end=/^}$/ contained contains=swayConfigInputOpts,@i3ConfigValue,i3ConfigComment keepend extend
100syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained nextgroup=swayConfigInput
101syn match swayConfigInputIdent /type:!\?/ contained contains=swayConfigDeviceOper nextgroup=swayConfigInputType
102syn match swayConfigInputIdent /[^t '"]\S*/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput
103syn region swayConfigInputIdent start=/['"]/ end=/\ze/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput
104syn keyword i3ConfigKeyword input contained skipwhite nextgroup=swayConfigInputIdent
Bram Moolenaarb59ae592022-11-23 23:46:31 +0000105
Josef Litoš8b2457a2023-09-12 20:24:47 +0200106" Seat
Josef Litošdd83b632024-04-15 19:38:04 +0200107syn keyword swayConfigSeatOpts cursor fallback hide_cursor keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained skipwhite nextgroup=swayConfigSeatOptVals,@i3ConfigValue
108syn match swayConfigInputTypeSeq / \w\+/ contained contains=swayConfigInputType nextgroup=swayConfigInputTypeSeq,swayConfigSeatOpts
109syn keyword swayConfigSeatOpts idle_inhibit idle_wake contained nextgroup=swayConfigInputTypeSeq
110syn keyword swayConfigSeatOpts attach contained skipwhite nextgroup=swayConfigSeatIdent
111syn match swayConfigSeatOptVals /when-typing/ contained skipwhite nextgroup=swayConfigSeatOptVals
112syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained skipwhite nextgroup=swayConfigSeatOpts
113syn region swayConfigSeat start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigSeatOpts,@i3ConfigValue keepend
114syn region swayConfigSeat matchgroup=i3ConfigParen start=/ {$/ end=/^}$/ contained contains=swayConfigSeatOpts,@i3ConfigValue,i3ConfigComment keepend extend
115syn match swayConfigSeatIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigSeat
116syn keyword i3ConfigKeyword seat contained skipwhite nextgroup=swayConfigSeatIdent
Josef Litoš54f70cf2023-09-27 18:58:15 +0200117
118" Output monitors
Josef Litošdd83b632024-04-15 19:38:04 +0200119syn keyword swayConfigOutputOpts mode resolution res modeline position pos scale scale_filter subpixel transform disable enable power dpms max_render_time adaptive_sync render_bit_depth contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,swayConfigOutputMode
120syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none clockwise anticlockwise toggle contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue
121syn keyword swayConfigOutputBgVals solid_color fill stretch fit center tile contained skipwhite nextgroup=@i3ConfigColVar
122syn match swayConfigOutputBg /[#$]\S\+ solid_color/ contained contains=@i3ConfigColVar,swayConfigOutputBgVals
123syn match swayConfigOutputBg /[^b# '"]\S*/ contained contains=i3ConfigShOper skipwhite nextgroup=swayConfigOutputBgVals
124syn region swayConfigOutputBg start=/['"]/ end=/\ze/ contained contains=@i3ConfigIdent skipwhite nextgroup=swayConfigOutputBgVals
125syn keyword swayConfigOutputOpts bg background contained skipwhite nextgroup=swayConfigOutputBg
126syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained skipwhite nextgroup=swayConfigOutputOpts
127syn match swayConfigOutputMode /\(--custom \)\?[0-9]\+x[0-9]\+/ contained contains=i3ConfigShParam skipwhite nextgroup=swayConfigOutputFPS,swayConfigOutputOpts
128syn match swayConfigOutputOptVals /\(flipped-\)\?\(90\|180\|270\)\|flipped\|normal/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigOutputOptsVals
129syn region swayConfigOutput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigOutputOpts,@i3ConfigValue keepend
130syn region swayConfigOutput matchgroup=i3ConfigParen start=/ {$/ end=/^}$/ contained contains=swayConfigOutputOpts,@i3ConfigValue,i3ConfigComment keepend extend
131syn match swayConfigOutputIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigOutput
132syn keyword i3ConfigKeyword output contained skipwhite nextgroup=swayConfigOutputIdent
Bram Moolenaar10e8ff92023-06-10 21:40:39 +0100133
Josef Litoš8b2457a2023-09-12 20:24:47 +0200134" Define the highlighting.
Josef Litoš54f70cf2023-09-27 18:58:15 +0200135hi def link swayConfigFloatingModifierOpts i3ConfigOption
Josef Litoš54f70cf2023-09-27 18:58:15 +0200136hi def link swayConfigXOpt i3ConfigOption
Josef Litoš54f70cf2023-09-27 18:58:15 +0200137hi def link swayConfigInhibitOpts i3ConfigOption
138hi def link swayConfigBindswitchArgument i3ConfigBindArgument
139hi def link swayConfigBindswitchType i3ConfigMoveType
140hi def link swayConfigBindswitchState i3ConfigMoveDir
141hi def link swayConfigBindgestureArgument i3ConfigBindArgument
142hi def link swayConfigBindgestureType i3ConfigMoveType
143hi def link swayConfigBindgestureDir i3ConfigMoveDir
Josef Litošdd83b632024-04-15 19:38:04 +0200144hi def link swayConfigDeviceOper i3ConfigOperator
Josef Litoš54f70cf2023-09-27 18:58:15 +0200145hi def link swayConfigInputType i3ConfigMoveType
Josef Litošdd83b632024-04-15 19:38:04 +0200146hi def link swayConfigInputIdent i3ConfigMoveDir
Josef Litoš54f70cf2023-09-27 18:58:15 +0200147hi def link swayConfigInputOptVals i3ConfigShParam
148hi def link swayConfigInputOpts i3ConfigOption
Josef Litošdd83b632024-04-15 19:38:04 +0200149hi def link swayConfigXkbOptsPairVal i3ConfigParamLine
Josef Litoš54f70cf2023-09-27 18:58:15 +0200150hi def link swayConfigXkbOptsPair i3ConfigShParam
Josef Litošdd83b632024-04-15 19:38:04 +0200151hi def link swayConfigXkbLayout i3ConfigParamLine
Josef Litoš54f70cf2023-09-27 18:58:15 +0200152hi def link swayConfigSeatOptVals swayConfigInputOptVals
153hi def link swayConfigSeatOpts swayConfigInputOpts
Josef Litoš54f70cf2023-09-27 18:58:15 +0200154hi def link swayConfigOutputOptVals swayConfigInputOptVals
Josef Litošdd83b632024-04-15 19:38:04 +0200155hi def link swayConfigOutputBgVals swayConfigInputOptVals
Josef Litoš54f70cf2023-09-27 18:58:15 +0200156hi def link swayConfigOutputOpts swayConfigInputOpts
157hi def link swayConfigOutputFPS Constant
158hi def link swayConfigOutputMode i3ConfigNumber
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100159
160let b:current_syntax = "swayconfig"