blob: 69fe26d370e66906f67e584a26d1d20dc45e7af7 [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>
James Eapen46d67d22023-12-29 11:51:40 -05005" Version: 1.0.2
6" Last Change: 2023-12-28
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š8b2457a2023-09-12 20:24:47 +020021" i3 extensions
Josef Litoš54f70cf2023-09-27 18:58:15 +020022syn keyword i3ConfigActionKeyword opacity urgent shortcuts_inhibitor splitv splith splitt contained
23syn keyword i3ConfigOption set plus minus allow deny csd v h t contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010024
Josef Litoš54f70cf2023-09-27 18:58:15 +020025syn keyword i3ConfigConditionProp app_id pid shell contained
26
27syn keyword i3ConfigWorkspaceDir prev_on_output next_on_output contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010028
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010029syn keyword swayConfigBindKeyword bindswitch bindgesture contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020030syn match i3ConfigBindArgument /--\(locked\|to-code\|no-repeat\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained
31syn region i3ConfigBind start=/^\s*bind\(switch\|gesture\) / skip=/\\$/ end=/$/ contains=swayConfigBindKeyword,swayConfigBindswitch,swayConfigBindswitchArgument,swayConfigBindgesture,swayConfigBindgestureArgument,i3ConfigCriteria,i3ConfigAction,i3ConfigSeparator,i3ConfigActionKeyword,i3ConfigOption,i3ConfigString,i3ConfigNumber,i3ConfigVariable,i3ConfigBoolean keepend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010032
Josef Litoš8b2457a2023-09-12 20:24:47 +020033syn match swayConfigBindBlockHeader /^\s*bind\(sym\|code\) .*{$/ contained contains=i3ConfigBindKeyword,i3ConfigBindArgument,i3ConfigParen
34syn match swayConfigBindBlockCombo /^\s\+\(--[a-z-]\+ \)*[$a-zA-Z0-9_+]\+ [a-z[]\@=/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo
35syn region i3ConfigBind start=/^\s*bind\(sym\|code\) .*{$/ end=/^\s*}$/ contains=swayConfigBindBlockHeader,swayConfigBindBlockCombo,i3ConfigCriteria,i3ConfigAction,i3ConfigSeparator,i3ConfigActionKeyword,i3ConfigOption,i3ConfigString,i3ConfigNumber,i3ConfigVariable,i3ConfigBoolean,i3ConfigComment,i3ConfigParen fold keepend extend
Josef Litoš54f70cf2023-09-27 18:58:15 +020036" fix for extra long bindsym blocks that would be parsed incorrectly when scrolling up
37syn region i3ConfigBlockOrphan start=/^\s\+\S/ skip=/^\s\|^$/ end=/^}\?/ contains=swayConfigBindBlockCombo,i3ConfigCriteria,i3ConfigAction,i3ConfigSeparator,i3ConfigActionKeyword,i3ConfigOption,i3ConfigString,i3ConfigNumber,i3ConfigVariable,i3ConfigBoolean,i3ConfigComment,i3ConfigParen keepend extend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010038
Josef Litoš8b2457a2023-09-12 20:24:47 +020039syn keyword i3ConfigClientOpts focused_tab_title contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010040
Josef Litoš8b2457a2023-09-12 20:24:47 +020041syn region swayConfigExecBlock start=/exec\(_always\)\? {/ end=/^}$/ contains=i3ConfigExecKeyword,i3ConfigExecAlwaysKeyword,i3ConfigShCommand,i3ConfigShDelim,i3ConfigShOper,i3ConfigShParam,i3ConfigNumber,i3ConfigString,i3ConfigVariable,i3ConfigComment fold keepend extend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010042
Josef Litoš8b2457a2023-09-12 20:24:47 +020043syn keyword swayConfigFloatingModifierOpts normal inverse contained
44syn match i3ConfigKeyword /^floating_modifier [$a-zA-Z0-9+]\+ \(normal\|inverse\)$/ contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010045
James Eapen46d67d22023-12-29 11:51:40 -050046syn keyword swayConfigSmartGapsOpts toggle contained
47syn match i3ConfigKeyword /^smart_gaps toggle$/ contains=i3ConfigSmartGapOpts,i3ConfigBoolean,swayConfigSmartGapsOpts
48
49syn keyword swayConfigFocusFollowsMouseOpts always contained
50syn match i3ConfigKeyword /^focus_follows_mouse always$/ contains=i3ConfigBoolean,swayConfigFocusFollowsMouseOpts
51
Josef Litoš54f70cf2023-09-27 18:58:15 +020052syn match i3ConfigKeyword /^hide_edge_borders --i3 \w*$/ contains=i3ConfigEdgeKeyword,i3ConfigShParam
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010053
Josef Litoš54f70cf2023-09-27 18:58:15 +020054syn keyword i3ConfigBarOpts swaybar_command gaps height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained
55syn keyword i3ConfigBarOptVals overlay contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020056
57syn keyword i3ConfigExecActionKeyword swaymsg contained
58
59" Sway-only options
60" Xwayland
61syn keyword swayConfigXOpt enable disable force contained
Josef Litoš54f70cf2023-09-27 18:58:15 +020062syn match i3ConfigKeyword /^xwayland \w*$/ contains=swayConfigXOpt
63
64" Inhibit idle
65syn keyword swayConfigInhibitKeyword inhibit_idle contained
66syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained
67syn match i3ConfigAction /inhibit_idle \w*/ contained contains=swayConfigInhibitKeyword,swayConfigInhibitOpts
Josef Litoš8b2457a2023-09-12 20:24:47 +020068
69" Bindswitch
70syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\)/ contained
71syn keyword swayConfigBindswitchType lid tablet contained
72syn keyword swayConfigBindswitchState toggle contained
73syn match swayConfigBindswitch /\(lid\|tablet\):\(on\|off\|toggle\) / contained contains=swayConfigBindswitchType,i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean
74syn region i3ConfigBind start=/^\s*bindswitch\s\+.*{$/ end=/^\s*}$/ contains=swayConfigBindKeyword,swayConfigBindswitch,swayConfigBindswitchArgument,i3ConfigNumber,i3ConfigVariable,i3ConfigAction,i3ConfigActionKeyword,i3ConfigOption,i3ConfigSeparator,i3ConfigString,i3ConfigCriteria,swayConfigOutputCommand,i3ConfigBoolean,i3ConfigComment,i3ConfigParen fold keepend extend
75
76" Bindgesture
77syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained
78syn keyword swayConfigBindgestureType hold swipe pinch contained
79syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained
80syn match swayConfigBindgesture /\(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
81syn region i3ConfigBind start=/^\s*bindgesture\s\+.*{$/ end=/^\s*}$/ contains=swayConfigBindKeyword,swayConfigBindgesture,swayConfigBindgestureArgument,i3ConfigCriteria,i3ConfigAction,i3ConfigSeparator,i3ConfigActionKeyword,i3ConfigOption,i3ConfigString,i3ConfigNumber,i3ConfigVariable,i3ConfigBoolean,i3ConfigParen fold keepend extend
82
Josef Litoš54f70cf2023-09-27 18:58:15 +020083" Tiling drag threshold
84syn match i3ConfigKeyword /^tiling_drag_threshold \d\+$/ contains=i3ConfigNumber
85
Josef Litoš8b2457a2023-09-12 20:24:47 +020086" Titlebar commands
87syn match i3ConfigKeyword /^titlebar_border_thickness \(\d\+\|\$\S\+\)$/ contains=i3ConfigNumber,i3ConfigVariable
88syn match i3ConfigKeyword /^titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contains=i3ConfigNumber,i3ConfigVariable
89
90syn match swayConfigDeviceOps /[*,:;]/ contained
91
Josef Litoš8b2457a2023-09-12 20:24:47 +020092" Input devices
Bram Moolenaarb59ae592022-11-23 23:46:31 +000093syn keyword swayConfigInputKeyword input contained
Josef Litoš54f70cf2023-09-27 18:58:15 +020094syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained
95syn match swayConfigInputTypePair /\<type:\w\+\>/ contained contains=i3ConfigColonOperator,swayConfigInputType
96syn region swayConfigInputStart start=/^input / end=/\s/ contained contains=swayConfigInputKeyword,swayConfigInputTypePair,i3ConfigString keepend extend
Josef Litoš8b2457a2023-09-12 20:24:47 +020097syn keyword swayConfigInputOpts xkb_layout 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
Josef Litoš54f70cf2023-09-27 18:58:15 +020098syn 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 contained
99syn match swayConfigXkbOptsPairVal /:[0-9a-z_-]\+/ contained contains=i3ConfigColonOperator
100syn match swayConfigXkbOptsPair /[a-z]\+:[0-9a-z_-]\+/ contained contains=swayConfigXkbOptsPairVal
101syn match swayConfigInputXkbOpts /xkb_options \([a-z]\+:[0-9a-z_-]\+,\?\)\+/ contained contains=swayConfigXkbOptsPair,swayConfigDeviceOps
102syn region i3ConfigAction start=/input/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps keepend transparent
103syn region i3ConfigInput start=/^input/ skip=/\\$/ end=/$/ contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps keepend
104syn region i3ConfigInput start=/^input .* {/ end=/}$/ contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend
Bram Moolenaarb59ae592022-11-23 23:46:31 +0000105
Josef Litoš8b2457a2023-09-12 20:24:47 +0200106" Seat
Bram Moolenaar10e8ff92023-06-10 21:40:39 +0100107syn keyword swayConfigSeatKeyword seat contained
Josef Litoš8b2457a2023-09-12 20:24:47 +0200108syn keyword swayConfigSeatOpts attach cursor fallback hide_cursor idle_inhibit idle_wake keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained
109syn match swayConfigSeatOptVals /when-typing/ contained
110syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained
Josef Litoš54f70cf2023-09-27 18:58:15 +0200111syn region i3ConfigAction start=/seat/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,swayConfigInputType keepend transparent
112syn region swayConfigSeat start=/seat/ skip=/\\$/ end=/$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,swayConfigInputType keepend
113syn region swayConfigSeat start=/seat .* {$/ end=/}$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,i3ConfigParen,swayConfigInputType keepend extend
114
115" Output monitors
116syn keyword swayConfigOutputKeyword output contained
117syn keyword swayConfigOutputOpts mode resolution res modeline position pos scale scale_filter subpixel background bg transform disable enable power dpms max_render_time adaptive_sync render_bit_depth contained
118syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none normal flipped fill stretch fit center tile solid_color clockwise anticlockwise toggle contained
119syn match swayConfigOutputOptVals /--custom\|flipped-\(90\|180\|270\)/ contained
120syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained
121syn match swayConfigOutputMode / [0-9]\+x[0-9]\+\(@[0-9.]\+Hz\)\?/ contained contains=swayConfigOutputFPS
122syn region i3ConfigAction start=/output/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend transparent
123syn region swayConfigOutput start=/^output/ skip=/\\$/ end=/$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend
124syn region swayConfigOutput start=/^output .* {$/ end=/}$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend
Bram Moolenaar10e8ff92023-06-10 21:40:39 +0100125
Josef Litoš8b2457a2023-09-12 20:24:47 +0200126" Define the highlighting.
James Eapen46d67d22023-12-29 11:51:40 -0500127hi def link swayConfigSmartGapsOpts i3ConfigOption
Josef Litoš54f70cf2023-09-27 18:58:15 +0200128hi def link swayConfigFloatingModifierOpts i3ConfigOption
James Eapen46d67d22023-12-29 11:51:40 -0500129hi def link swayConfigFocusFollowsMouseOpts i3ConfigOption
Josef Litoš54f70cf2023-09-27 18:58:15 +0200130hi def link swayConfigBindKeyword i3ConfigBindKeyword
131hi def link swayConfigXOpt i3ConfigOption
132hi def link swayConfigInhibitKeyword i3ConfigCommand
133hi def link swayConfigInhibitOpts i3ConfigOption
134hi def link swayConfigBindswitchArgument i3ConfigBindArgument
135hi def link swayConfigBindswitchType i3ConfigMoveType
136hi def link swayConfigBindswitchState i3ConfigMoveDir
137hi def link swayConfigBindgestureArgument i3ConfigBindArgument
138hi def link swayConfigBindgestureType i3ConfigMoveType
139hi def link swayConfigBindgestureDir i3ConfigMoveDir
140hi def link swayConfigDeviceOps i3ConfigOperator
141hi def link swayConfigInputKeyword i3ConfigCommand
142hi def link swayConfigInputType i3ConfigMoveType
143hi def link swayConfigInputTypePair i3ConfigMoveDir
144hi def link swayConfigInputOptVals i3ConfigShParam
145hi def link swayConfigInputOpts i3ConfigOption
146hi def link swayConfigXkbOptsPairVal i3ConfigString
147hi def link swayConfigXkbOptsPair i3ConfigShParam
148hi def link swayConfigInputXkbOpts i3ConfigOption
149hi def link swayConfigSeatKeyword i3ConfigCommand
150hi def link swayConfigSeatOptVals swayConfigInputOptVals
151hi def link swayConfigSeatOpts swayConfigInputOpts
152hi def link swayConfigOutputKeyword i3ConfigCommand
153hi def link swayConfigOutputOptVals swayConfigInputOptVals
154hi def link swayConfigOutputOpts swayConfigInputOpts
155hi def link swayConfigOutputFPS Constant
156hi def link swayConfigOutputMode i3ConfigNumber
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100157
158let b:current_syntax = "swayconfig"