blob: 94b9a913fcf18c6faa2e457512b96927a353c13c [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šb1ffc522024-05-24 17:31:36 +02005" Version: 1.2.4
CismonXf10db252024-10-17 21:44:35 +02006" Last Change: 2024 Oct 17
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
Josef Litoš679f5ab2024-05-13 22:03:42 +020019" before i3 load to give i3ConfigKeyword lower priority
20syn cluster i3ConfigCommand contains=i3ConfigCommand,i3ConfigAction,i3ConfigActionKeyword,@i3ConfigValue,i3ConfigColor,i3ConfigKeyword
21
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010022runtime! syntax/i3config.vim
23
Josef Litošdd83b632024-04-15 19:38:04 +020024" Sway extensions to i3
Josef Litošdd83b632024-04-15 19:38:04 +020025syn keyword i3ConfigActionKeyword opacity urgent shortcuts_inhibitor splitv splith splitt contained contained skipwhite nextgroup=i3ConfigOption
26syn keyword i3ConfigOption set plus minus allow deny csd v h t contained contained skipwhite nextgroup=i3ConfigOption,@i3ConfigValue
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010027
Josef Litoš54f70cf2023-09-27 18:58:15 +020028syn keyword i3ConfigConditionProp app_id pid shell contained
29
30syn keyword i3ConfigWorkspaceDir prev_on_output next_on_output contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010031
CismonXf10db252024-10-17 21:44:35 +020032syn match i3ConfigBindArgument /--\(locked\|to-code\|no-repeat\|input-device=[^ '"]*\|no-warn\|inhibited\) / contained contains=i3ConfigShOper,@i3ConfigStrVar nextgroup=i3ConfigBindArgument,i3ConfigBindCombo
Josef Litošdd83b632024-04-15 19:38:04 +020033syn region i3ConfigBindArgument start=/--input-device=['"]/ end=/\s/ contained contains=@i3ConfigIdent,i3ConfigShOper,i3ConfigString nextgroup=i3ConfigBindArgument,i3ConfigBindCombo
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010034
Josef Litošdd83b632024-04-15 19:38:04 +020035syn region i3ConfigBindCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigComment fold keepend extend
36" hack for blocks with start outside parsing range
Josef Litošb1ffc522024-05-24 17:31:36 +020037syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\([$A-Z][$0-9A-Za-z_+]\+\|[a-z]\) [a-z[]/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigParen keepend extend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010038
Josef Litoš679f5ab2024-05-13 22:03:42 +020039syn region i3ConfigExec start=/ {$/ end=/^\s*}$/ contained contains=i3ConfigExecAction,@i3ConfigSh,i3ConfigComment fold keepend extend
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010040
James Eapen22ac9412024-05-23 20:47:49 +020041syn keyword swayConfigFloatingModifierOpts normal inverse none contained
Josef Litošb1ffc522024-05-24 17:31:36 +020042syn match i3ConfigKeyword /floating_modifier \(none\|[$A-Z][0-9A-Za-z]\+ \(normal\|inverse\)\)$/ contained contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010043
Josef Litošdd83b632024-04-15 19:38:04 +020044syn match swayConfigI3Param /--i3/ contains=i3ConfigShParam skipwhite nextgroup=i3ConfigEdgeOpts
45syn keyword i3ConfigKeyword hide_edge_borders contained skipwhite nextgroup=swayConfigI3Param,i3ConfigEdgeOpts
James Eapen46d67d22023-12-29 11:51:40 -050046
Josef Litošdd83b632024-04-15 19:38:04 +020047syn keyword i3ConfigBarOpts swaybar_command contained skipwhite nextgroup=@i3ConfigSh
48syn region i3ConfigBarOpts matchgroup=i3ConfigBarOpts start=/gaps/ end=/$/ contained contains=@i3ConfigNumVar
49syn 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 +020050syn keyword i3ConfigBarOptVals overlay contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020051
52syn keyword i3ConfigExecActionKeyword swaymsg contained
53
54" Sway-only options
55" Xwayland
56syn keyword swayConfigXOpt enable disable force contained
Josef Litošdd83b632024-04-15 19:38:04 +020057syn keyword i3ConfigKeyword xwayland contained skipwhite nextgroup=swayConfigXOpt
Josef Litoš54f70cf2023-09-27 18:58:15 +020058
59" Inhibit idle
Josef Litoš54f70cf2023-09-27 18:58:15 +020060syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained
Josef Litošdd83b632024-04-15 19:38:04 +020061syn keyword i3ConfigActionKeyword inhibit_idle contained skipwhite nextgroup=swayConfigInhibitOpts
Josef Litoš8b2457a2023-09-12 20:24:47 +020062
63" Bindswitch
Josef Litošdd83b632024-04-15 19:38:04 +020064syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\) / contained nextgroup=swayConfigBindswitchArgument,swayConfigBindswitchType
65syn keyword swayConfigBindswitchType lid tablet contained nextgroup=swayConfigBindswitchCombo
Josef Litoš8b2457a2023-09-12 20:24:47 +020066syn keyword swayConfigBindswitchState toggle contained
Josef Litošdd83b632024-04-15 19:38:04 +020067syn match swayConfigBindswitchCombo /:\(on\|off\|toggle\) / contained contains=i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean nextgroup=i3ConfigBind
68syn region swayConfigBindswitchType matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigComment fold keepend extend
69syn keyword i3ConfigBindKeyword bindswitch contained skipwhite nextgroup=swayConfigBindswitchArgument,swayConfigBindswitchType
70" hack for blocks with start outside parsing range
71syn region swayConfigBlockOrphan start=/^\s\+\(lid\|tablet\):/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigParen keepend extend
Josef Litoš8b2457a2023-09-12 20:24:47 +020072
73" Bindgesture
Josef Litošb1ffc522024-05-24 17:31:36 +020074syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9A-Za-z_/-]\+\|no-warn\) / contained nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo
Josef Litoš8b2457a2023-09-12 20:24:47 +020075syn keyword swayConfigBindgestureType hold swipe pinch contained
76syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained
Josef Litošdd83b632024-04-15 19:38:04 +020077syn 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
78syn region swayConfigBindgestureCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=swayConfigBindgestureArgument,swayConfigBindgestureCombo,i3ConfigComment fold keepend extend
79syn keyword i3ConfigBindKeyword bindgesture contained skipwhite nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo
80" hack for blocks with start outside parsing range
81syn 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 +020082
Josef Litoš54f70cf2023-09-27 18:58:15 +020083" Tiling drag threshold
Josef Litoš8b2457a2023-09-12 20:24:47 +020084" Titlebar commands
Josef Litošdd83b632024-04-15 19:38:04 +020085syn keyword i3ConfigKeyword tiling_drag_threshold titlebar_border_thickness contained skipwhite nextgroup=@i3ConfigNumVar
Josef Litoš679f5ab2024-05-13 22:03:42 +020086syn match i3ConfigKeyword /titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contained contains=@i3ConfigNumVar
Josef Litoš8b2457a2023-09-12 20:24:47 +020087
Josef Litošdd83b632024-04-15 19:38:04 +020088syn match swayConfigDeviceOper /[*:;!]/ contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020089
Josef Litoš8b2457a2023-09-12 20:24:47 +020090" Input devices
Josef Litošdd83b632024-04-15 19:38:04 +020091syn 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
92syn 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
93syn match swayConfigDeviceOper /,/ contained nextgroup=swayConfigXkbOptsPair,swayConfigXkbLayout
94syn match swayConfigXkbLayout /[a-z]\+/ contained nextgroup=swayConfigDeviceOper
95syn keyword swayConfigInputOpts xkb_layout contained skipwhite nextgroup=swayConfigXkbLayout
96syn match swayConfigXkbOptsPairVal /[0-9a-z_-]\+/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigDeviceOper,swayConfigInputOpts
97syn match swayConfigXkbOptsPair /[a-z]\+:/ contained contains=i3ConfigColonOperator nextgroup=swayConfigXkbOptsPairVal
98syn keyword swayConfigInputOpts xkb_options contained skipwhite nextgroup=swayConfigXkbOptsPair
99
100syn region swayConfigInput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigInputOpts,@i3ConfigValue keepend
Josef Litoš679f5ab2024-05-13 22:03:42 +0200101syn region swayConfigInput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigInputOpts,@i3ConfigValue,i3ConfigComment keepend extend
Josef Litošdd83b632024-04-15 19:38:04 +0200102syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained nextgroup=swayConfigInput
103syn match swayConfigInputIdent /type:!\?/ contained contains=swayConfigDeviceOper nextgroup=swayConfigInputType
104syn match swayConfigInputIdent /[^t '"]\S*/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput
105syn region swayConfigInputIdent start=/['"]/ end=/\ze/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput
106syn keyword i3ConfigKeyword input contained skipwhite nextgroup=swayConfigInputIdent
Bram Moolenaarb59ae592022-11-23 23:46:31 +0000107
Josef Litoš8b2457a2023-09-12 20:24:47 +0200108" Seat
Josef Litošdd83b632024-04-15 19:38:04 +0200109syn keyword swayConfigSeatOpts cursor fallback hide_cursor keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained skipwhite nextgroup=swayConfigSeatOptVals,@i3ConfigValue
110syn match swayConfigInputTypeSeq / \w\+/ contained contains=swayConfigInputType nextgroup=swayConfigInputTypeSeq,swayConfigSeatOpts
111syn keyword swayConfigSeatOpts idle_inhibit idle_wake contained nextgroup=swayConfigInputTypeSeq
112syn keyword swayConfigSeatOpts attach contained skipwhite nextgroup=swayConfigSeatIdent
113syn match swayConfigSeatOptVals /when-typing/ contained skipwhite nextgroup=swayConfigSeatOptVals
114syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained skipwhite nextgroup=swayConfigSeatOpts
115syn region swayConfigSeat start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigSeatOpts,@i3ConfigValue keepend
Josef Litoš679f5ab2024-05-13 22:03:42 +0200116syn region swayConfigSeat matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigSeatOpts,@i3ConfigValue,i3ConfigComment keepend extend
Josef Litošdd83b632024-04-15 19:38:04 +0200117syn match swayConfigSeatIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigSeat
118syn keyword i3ConfigKeyword seat contained skipwhite nextgroup=swayConfigSeatIdent
Josef Litoš54f70cf2023-09-27 18:58:15 +0200119
120" Output monitors
Josef Litošdd83b632024-04-15 19:38:04 +0200121syn 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
122syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none clockwise anticlockwise toggle contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue
123syn keyword swayConfigOutputBgVals solid_color fill stretch fit center tile contained skipwhite nextgroup=@i3ConfigColVar
124syn match swayConfigOutputBg /[#$]\S\+ solid_color/ contained contains=@i3ConfigColVar,swayConfigOutputBgVals
125syn match swayConfigOutputBg /[^b# '"]\S*/ contained contains=i3ConfigShOper skipwhite nextgroup=swayConfigOutputBgVals
126syn region swayConfigOutputBg start=/['"]/ end=/\ze/ contained contains=@i3ConfigIdent skipwhite nextgroup=swayConfigOutputBgVals
127syn keyword swayConfigOutputOpts bg background contained skipwhite nextgroup=swayConfigOutputBg
128syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained skipwhite nextgroup=swayConfigOutputOpts
129syn match swayConfigOutputMode /\(--custom \)\?[0-9]\+x[0-9]\+/ contained contains=i3ConfigShParam skipwhite nextgroup=swayConfigOutputFPS,swayConfigOutputOpts
130syn match swayConfigOutputOptVals /\(flipped-\)\?\(90\|180\|270\)\|flipped\|normal/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigOutputOptsVals
131syn region swayConfigOutput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigOutputOpts,@i3ConfigValue keepend
Josef Litoš679f5ab2024-05-13 22:03:42 +0200132syn region swayConfigOutput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigOutputOpts,@i3ConfigValue,i3ConfigComment keepend extend
Josef Litošdd83b632024-04-15 19:38:04 +0200133syn match swayConfigOutputIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigOutput
134syn keyword i3ConfigKeyword output contained skipwhite nextgroup=swayConfigOutputIdent
Bram Moolenaar10e8ff92023-06-10 21:40:39 +0100135
Josef Litoš8b2457a2023-09-12 20:24:47 +0200136" Define the highlighting.
Josef Litoš54f70cf2023-09-27 18:58:15 +0200137hi def link swayConfigFloatingModifierOpts i3ConfigOption
Josef Litoš54f70cf2023-09-27 18:58:15 +0200138hi def link swayConfigXOpt i3ConfigOption
Josef Litoš54f70cf2023-09-27 18:58:15 +0200139hi def link swayConfigInhibitOpts i3ConfigOption
140hi def link swayConfigBindswitchArgument i3ConfigBindArgument
141hi def link swayConfigBindswitchType i3ConfigMoveType
142hi def link swayConfigBindswitchState i3ConfigMoveDir
143hi def link swayConfigBindgestureArgument i3ConfigBindArgument
144hi def link swayConfigBindgestureType i3ConfigMoveType
145hi def link swayConfigBindgestureDir i3ConfigMoveDir
Josef Litošdd83b632024-04-15 19:38:04 +0200146hi def link swayConfigDeviceOper i3ConfigOperator
Josef Litoš54f70cf2023-09-27 18:58:15 +0200147hi def link swayConfigInputType i3ConfigMoveType
Josef Litošdd83b632024-04-15 19:38:04 +0200148hi def link swayConfigInputIdent i3ConfigMoveDir
Josef Litoš54f70cf2023-09-27 18:58:15 +0200149hi def link swayConfigInputOptVals i3ConfigShParam
150hi def link swayConfigInputOpts i3ConfigOption
Josef Litošdd83b632024-04-15 19:38:04 +0200151hi def link swayConfigXkbOptsPairVal i3ConfigParamLine
Josef Litoš54f70cf2023-09-27 18:58:15 +0200152hi def link swayConfigXkbOptsPair i3ConfigShParam
Josef Litošdd83b632024-04-15 19:38:04 +0200153hi def link swayConfigXkbLayout i3ConfigParamLine
Josef Litoš54f70cf2023-09-27 18:58:15 +0200154hi def link swayConfigSeatOptVals swayConfigInputOptVals
155hi def link swayConfigSeatOpts swayConfigInputOpts
Josef Litoš54f70cf2023-09-27 18:58:15 +0200156hi def link swayConfigOutputOptVals swayConfigInputOptVals
Josef Litošdd83b632024-04-15 19:38:04 +0200157hi def link swayConfigOutputBgVals swayConfigInputOptVals
Josef Litoš54f70cf2023-09-27 18:58:15 +0200158hi def link swayConfigOutputOpts swayConfigInputOpts
159hi def link swayConfigOutputFPS Constant
160hi def link swayConfigOutputMode i3ConfigNumber
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100161
162let b:current_syntax = "swayconfig"