blob: 290e8cc1ac3433d6b9173110ef5780e0a930f3dd [file] [log] [blame]
Bram Moolenaar2ecbe532022-07-29 21:36:21 +01001" Vim syntax file
2" Language: sway window manager config
Josef Litoš8b2457a2023-09-12 20:24:47 +02003" Original Author: Josef Litos
Bram Moolenaar2ecbe532022-07-29 21:36:21 +01004" Maintainer: James Eapen <james.eapen@vai.org>
Josef Litoš8b2457a2023-09-12 20:24:47 +02005" Version: 0.2.2
6" Reference version (JosefLitos/i3config.vim): 1.8.1
7" Last Change: 2023-09-12
Bram Moolenaar2ecbe532022-07-29 21:36:21 +01008
9" References:
10" http://i3wm.org/docs/userguide.html#configuring
11" https://github.com/swaywm/sway/blob/b69d637f7a34e239e48a4267ae94a5e7087b5834/sway/sway.5.scd
12" http://vimdoc.sourceforge.net/htmldoc/syntax.html
13"
14"
15" Quit when a syntax file was already loaded
16if exists("b:current_syntax")
17 finish
18endif
19
20runtime! syntax/i3config.vim
21
Josef Litoš8b2457a2023-09-12 20:24:47 +020022" i3 extensions
23syn match i3ConfigSet /^\s*set \$\w\+ .*$/ contains=i3ConfigVariable,i3ConfigSetKeyword,i3ConfigColor,i3ConfigString,i3ConfigNoStartupId,i3ConfigNumber,swayConfigOutputCommand,i3ConfigShCommand,i3ConfigShDelim,i3ConfigShParam,i3ConfigShOper
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010024
Josef Litoš8b2457a2023-09-12 20:24:47 +020025syn keyword i3ConfigActionKeyword opacity contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010026
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010027syn keyword swayConfigBindKeyword bindswitch bindgesture contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020028syn match i3ConfigBindArgument /--\(locked\|to-code\|no-repeat\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained
29syn 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 +010030
Josef Litoš8b2457a2023-09-12 20:24:47 +020031syn match swayConfigBindBlockHeader /^\s*bind\(sym\|code\) .*{$/ contained contains=i3ConfigBindKeyword,i3ConfigBindArgument,i3ConfigParen
32syn match swayConfigBindBlockCombo /^\s\+\(--[a-z-]\+ \)*[$a-zA-Z0-9_+]\+ [a-z[]\@=/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo
33syn 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
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010034
Josef Litoš8b2457a2023-09-12 20:24:47 +020035syn keyword i3ConfigClientOpts focused_tab_title contained
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010036
Josef Litoš8b2457a2023-09-12 20:24:47 +020037syn 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 +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š8b2457a2023-09-12 20:24:47 +020042syn match i3ConfigEdge /^hide_edge_borders\( --i3\)\? \(none\|vertical\|horizontal\|both\|smart\|smart_no_gaps\)\s\?$/ contains=i3ConfigEdgeKeyword,i3ConfigShParam
Bram Moolenaar2ecbe532022-07-29 21:36:21 +010043
Josef Litoš8b2457a2023-09-12 20:24:47 +020044syn keyword i3ConfigBarBlockKeyword swaybar_command gaps height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained
45
46syn keyword i3ConfigExecActionKeyword swaymsg contained
47
48" Sway-only options
49" Xwayland
50syn keyword swayConfigXOpt enable disable force contained
51syn match i3ConfigKeyword /^xwayland .*$/ contains=swayConfigXOpt
52
53" Bindswitch
54syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\)/ contained
55syn keyword swayConfigBindswitchType lid tablet contained
56syn keyword swayConfigBindswitchState toggle contained
57syn match swayConfigBindswitch /\(lid\|tablet\):\(on\|off\|toggle\) / contained contains=swayConfigBindswitchType,i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean
58syn 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
59
60" Bindgesture
61syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained
62syn keyword swayConfigBindgestureType hold swipe pinch contained
63syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained
64syn 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
65syn 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
66
67" Titlebar commands
68syn match i3ConfigKeyword /^titlebar_border_thickness \(\d\+\|\$\S\+\)$/ contains=i3ConfigNumber,i3ConfigVariable
69syn match i3ConfigKeyword /^titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contains=i3ConfigNumber,i3ConfigVariable
70
71syn match swayConfigDeviceOps /[*,:;]/ contained
72
73" Output monitors
74syn keyword swayConfigOutputKeyword output contained
75syn 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
76syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none normal flipped fill stretch fit center tile solid_color clockwise anticlockwise toggle contained
77syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained
78syn match swayConfigOutputMode / [0-9]\+x[0-9]\+\(@[0-9.]\+Hz\)\?/ contained contains=swayConfigOutputFPS,i3ConfigNumber
79syn region i3ConfigAction start=/output/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend
80syn region swayConfigOutput start=/^output/ skip=/\\$/ end=/$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend
81syn region swayConfigOutput start=/^output .* {$/ end=/}$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend
82
83" Input devices
Bram Moolenaarb59ae592022-11-23 23:46:31 +000084syn keyword swayConfigInputKeyword input contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020085syn 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
86syn keyword swayConfigInputOptVals absolute relative adaptive flat none button_areas clickfinger toggle two_finger edge on_button_down lrm lmr contained
87syn match swayConfigColonPairVal /:[0-9a-z_-]\+/ contained contains=i3ConfigColonOperator
88syn match swayConfigColonPair /[a-z]\+:[0-9a-z_-]\+/ contained contains=swayConfigColonPairVal
89syn match swayConfigInputXkbOpts /xkb_options \([a-z]\+:[0-9a-z_-]\+,\?\)\+/ contained contains=swayConfigColonPair,swayConfigDeviceOps
90syn region i3ConfigAction start=/input/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigInputKeyword,swayConfigColonPair,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigBoolean,swayConfigDeviceOps keepend
91syn region i3ConfigInput start=/^input/ skip=/\\$/ end=/$/ contains=swayConfigInputKeyword,swayConfigColonPair,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigBoolean,swayConfigDeviceOps keepend
92syn region i3ConfigInput start=/^input .* {/ end=/}$/ contains=swayConfigInputKeyword,swayConfigColonPair,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend
Bram Moolenaarb59ae592022-11-23 23:46:31 +000093
Josef Litoš8b2457a2023-09-12 20:24:47 +020094" Seat
Bram Moolenaar10e8ff92023-06-10 21:40:39 +010095syn keyword swayConfigSeatKeyword seat contained
Josef Litoš8b2457a2023-09-12 20:24:47 +020096syn keyword swayConfigSeatOpts attach cursor fallback hide_cursor idle_inhibit idle_wake keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained
97syn match swayConfigSeatOptVals /when-typing/ contained
98syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained
99syn region i3ConfigAction start=/seat/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps keepend
100syn region swayConfigSeat start=/seat/ skip=/\\$/ end=/$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps keepend
101syn region swayConfigSeat start=/seat .* {$/ end=/}$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,i3ConfigParen keepend extend
Bram Moolenaar10e8ff92023-06-10 21:40:39 +0100102
Josef Litoš8b2457a2023-09-12 20:24:47 +0200103" Define the highlighting.
104hi def link swayConfigFloatingModifierOpts i3ConfigOption
105hi def link swayConfigBindKeyword i3ConfigBindKeyword
106hi def link swayConfigXOpt i3ConfigOption
107hi def link swayConfigBindswitchArgument i3ConfigBindArgument
108hi def link swayConfigBindswitchType i3ConfigMoveType
109hi def link swayConfigBindswitchState i3ConfigMoveDir
110hi def link swayConfigBindgestureArgument i3ConfigBindArgument
111hi def link swayConfigBindgestureType i3ConfigMoveType
112hi def link swayConfigBindgestureDir i3ConfigMoveDir
113hi def link swayConfigDeviceOps i3ConfigOperator
114hi def link swayConfigOutputKeyword i3ConfigCommand
115hi def link swayConfigOutputOptVals i3ConfigOption
116hi def link swayConfigOutputOpts i3ConfigOption
117hi def link swayConfigOutputFPS Constant
118hi def link swayConfigInputKeyword i3ConfigCommand
119hi def link swayConfigInputOptVals i3ConfigShParam
120hi def link swayConfigInputOpts i3ConfigOption
121hi def link swayConfigInputXkbOpts i3ConfigOption
122hi def link swayConfigColonPairVal i3ConfigString
123hi def link swayConfigColonPair i3ConfigShParam
124hi def link swayConfigSeatKeyword i3ConfigCommand
125hi def link swayConfigSeatOptVals i3ConfigOption
126hi def link swayConfigSeatOpts i3ConfigOption
Bram Moolenaar2ecbe532022-07-29 21:36:21 +0100127
128let b:current_syntax = "swayconfig"