blob: 7b1c889d6d77cf6ab5cea0f33f1f98009b419a09 [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š54f70cf2023-09-27 18:58:15 +02005" Version: 1.0.0
6" Last Change: 2023-09-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š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
Josef Litoš54f70cf2023-09-27 18:58:15 +020046syn match i3ConfigKeyword /^hide_edge_borders --i3 \w*$/ contains=i3ConfigEdgeKeyword,i3ConfigShParam
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010047
Josef Litoš54f70cf2023-09-27 18:58:15 +020048syn keyword i3ConfigBarOpts swaybar_command gaps height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained
49syn keyword i3ConfigBarOptVals overlay contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020050
51syn keyword i3ConfigExecActionKeyword swaymsg contained
52
53" Sway-only options
54" Xwayland
55syn keyword swayConfigXOpt enable disable force contained
Josef Litoš54f70cf2023-09-27 18:58:15 +020056syn match i3ConfigKeyword /^xwayland \w*$/ contains=swayConfigXOpt
57
58" Inhibit idle
59syn keyword swayConfigInhibitKeyword inhibit_idle contained
60syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained
61syn match i3ConfigAction /inhibit_idle \w*/ contained contains=swayConfigInhibitKeyword,swayConfigInhibitOpts
Josef Litoš8b2457a2023-09-12 20:24:47 +020062
63" Bindswitch
64syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\)/ contained
65syn keyword swayConfigBindswitchType lid tablet contained
66syn keyword swayConfigBindswitchState toggle contained
67syn match swayConfigBindswitch /\(lid\|tablet\):\(on\|off\|toggle\) / contained contains=swayConfigBindswitchType,i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean
68syn 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
69
70" Bindgesture
71syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained
72syn keyword swayConfigBindgestureType hold swipe pinch contained
73syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained
74syn 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
75syn 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
76
Josef Litoš54f70cf2023-09-27 18:58:15 +020077" Tiling drag threshold
78syn match i3ConfigKeyword /^tiling_drag_threshold \d\+$/ contains=i3ConfigNumber
79
Josef Litoš8b2457a2023-09-12 20:24:47 +020080" Titlebar commands
81syn match i3ConfigKeyword /^titlebar_border_thickness \(\d\+\|\$\S\+\)$/ contains=i3ConfigNumber,i3ConfigVariable
82syn match i3ConfigKeyword /^titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contains=i3ConfigNumber,i3ConfigVariable
83
84syn match swayConfigDeviceOps /[*,:;]/ contained
85
Josef Litoš8b2457a2023-09-12 20:24:47 +020086" Input devices
Bram Moolenaarb59ae592022-11-23 23:46:31 +000087syn keyword swayConfigInputKeyword input contained
Josef Litoš54f70cf2023-09-27 18:58:15 +020088syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained
89syn match swayConfigInputTypePair /\<type:\w\+\>/ contained contains=i3ConfigColonOperator,swayConfigInputType
90syn region swayConfigInputStart start=/^input / end=/\s/ contained contains=swayConfigInputKeyword,swayConfigInputTypePair,i3ConfigString keepend extend
Josef Litoš8b2457a2023-09-12 20:24:47 +020091syn 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 +020092syn 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
93syn match swayConfigXkbOptsPairVal /:[0-9a-z_-]\+/ contained contains=i3ConfigColonOperator
94syn match swayConfigXkbOptsPair /[a-z]\+:[0-9a-z_-]\+/ contained contains=swayConfigXkbOptsPairVal
95syn match swayConfigInputXkbOpts /xkb_options \([a-z]\+:[0-9a-z_-]\+,\?\)\+/ contained contains=swayConfigXkbOptsPair,swayConfigDeviceOps
96syn region i3ConfigAction start=/input/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps keepend transparent
97syn region i3ConfigInput start=/^input/ skip=/\\$/ end=/$/ contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps keepend
98syn region i3ConfigInput start=/^input .* {/ end=/}$/ contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend
Bram Moolenaarb59ae592022-11-23 23:46:31 +000099
Josef Litoš8b2457a2023-09-12 20:24:47 +0200100" Seat
Bram Moolenaar10e8ff92023-06-10 21:40:39 +0100101syn keyword swayConfigSeatKeyword seat contained
Josef Litoš8b2457a2023-09-12 20:24:47 +0200102syn keyword swayConfigSeatOpts attach cursor fallback hide_cursor idle_inhibit idle_wake keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained
103syn match swayConfigSeatOptVals /when-typing/ contained
104syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained
Josef Litoš54f70cf2023-09-27 18:58:15 +0200105syn region i3ConfigAction start=/seat/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,swayConfigInputType keepend transparent
106syn region swayConfigSeat start=/seat/ skip=/\\$/ end=/$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,swayConfigInputType keepend
107syn region swayConfigSeat start=/seat .* {$/ end=/}$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,i3ConfigParen,swayConfigInputType keepend extend
108
109" Output monitors
110syn keyword swayConfigOutputKeyword output contained
111syn 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
112syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none normal flipped fill stretch fit center tile solid_color clockwise anticlockwise toggle contained
113syn match swayConfigOutputOptVals /--custom\|flipped-\(90\|180\|270\)/ contained
114syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained
115syn match swayConfigOutputMode / [0-9]\+x[0-9]\+\(@[0-9.]\+Hz\)\?/ contained contains=swayConfigOutputFPS
116syn region i3ConfigAction start=/output/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend transparent
117syn region swayConfigOutput start=/^output/ skip=/\\$/ end=/$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend
118syn 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 +0100119
Josef Litoš8b2457a2023-09-12 20:24:47 +0200120" Define the highlighting.
Josef Litoš54f70cf2023-09-27 18:58:15 +0200121hi def link swayConfigFloatingModifierOpts i3ConfigOption
122hi def link swayConfigBindKeyword i3ConfigBindKeyword
123hi def link swayConfigXOpt i3ConfigOption
124hi def link swayConfigInhibitKeyword i3ConfigCommand
125hi def link swayConfigInhibitOpts i3ConfigOption
126hi def link swayConfigBindswitchArgument i3ConfigBindArgument
127hi def link swayConfigBindswitchType i3ConfigMoveType
128hi def link swayConfigBindswitchState i3ConfigMoveDir
129hi def link swayConfigBindgestureArgument i3ConfigBindArgument
130hi def link swayConfigBindgestureType i3ConfigMoveType
131hi def link swayConfigBindgestureDir i3ConfigMoveDir
132hi def link swayConfigDeviceOps i3ConfigOperator
133hi def link swayConfigInputKeyword i3ConfigCommand
134hi def link swayConfigInputType i3ConfigMoveType
135hi def link swayConfigInputTypePair i3ConfigMoveDir
136hi def link swayConfigInputOptVals i3ConfigShParam
137hi def link swayConfigInputOpts i3ConfigOption
138hi def link swayConfigXkbOptsPairVal i3ConfigString
139hi def link swayConfigXkbOptsPair i3ConfigShParam
140hi def link swayConfigInputXkbOpts i3ConfigOption
141hi def link swayConfigSeatKeyword i3ConfigCommand
142hi def link swayConfigSeatOptVals swayConfigInputOptVals
143hi def link swayConfigSeatOpts swayConfigInputOpts
144hi def link swayConfigOutputKeyword i3ConfigCommand
145hi def link swayConfigOutputOptVals swayConfigInputOptVals
146hi def link swayConfigOutputOpts swayConfigInputOpts
147hi def link swayConfigOutputFPS Constant
148hi def link swayConfigOutputMode i3ConfigNumber
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100149
150let b:current_syntax = "swayconfig"