Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 1 | " Vim syntax file |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 2 | " Language: sway config file |
| 3 | " Original Author: Josef Litos (JosefLitos/i3config.vim) |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 4 | " Maintainer: James Eapen <james.eapen@vai.org> |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 5 | " Version: 1.0.0 |
| 6 | " Last Change: 2023-09-14 |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 7 | |
| 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 |
| 15 | if exists("b:current_syntax") |
| 16 | finish |
| 17 | endif |
| 18 | |
| 19 | runtime! syntax/i3config.vim |
| 20 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 21 | " i3 extensions |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 22 | syn keyword i3ConfigActionKeyword opacity urgent shortcuts_inhibitor splitv splith splitt contained |
| 23 | syn keyword i3ConfigOption set plus minus allow deny csd v h t contained |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 24 | |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 25 | syn keyword i3ConfigConditionProp app_id pid shell contained |
| 26 | |
| 27 | syn keyword i3ConfigWorkspaceDir prev_on_output next_on_output contained |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 28 | |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 29 | syn keyword swayConfigBindKeyword bindswitch bindgesture contained |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 30 | syn match i3ConfigBindArgument /--\(locked\|to-code\|no-repeat\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained |
| 31 | syn 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 Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 32 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 33 | syn match swayConfigBindBlockHeader /^\s*bind\(sym\|code\) .*{$/ contained contains=i3ConfigBindKeyword,i3ConfigBindArgument,i3ConfigParen |
| 34 | syn match swayConfigBindBlockCombo /^\s\+\(--[a-z-]\+ \)*[$a-zA-Z0-9_+]\+ [a-z[]\@=/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo |
| 35 | syn 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š | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 36 | " fix for extra long bindsym blocks that would be parsed incorrectly when scrolling up |
| 37 | syn region i3ConfigBlockOrphan start=/^\s\+\S/ skip=/^\s\|^$/ end=/^}\?/ contains=swayConfigBindBlockCombo,i3ConfigCriteria,i3ConfigAction,i3ConfigSeparator,i3ConfigActionKeyword,i3ConfigOption,i3ConfigString,i3ConfigNumber,i3ConfigVariable,i3ConfigBoolean,i3ConfigComment,i3ConfigParen keepend extend |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 38 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 39 | syn keyword i3ConfigClientOpts focused_tab_title contained |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 40 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 41 | syn region swayConfigExecBlock start=/exec\(_always\)\? {/ end=/^}$/ contains=i3ConfigExecKeyword,i3ConfigExecAlwaysKeyword,i3ConfigShCommand,i3ConfigShDelim,i3ConfigShOper,i3ConfigShParam,i3ConfigNumber,i3ConfigString,i3ConfigVariable,i3ConfigComment fold keepend extend |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 42 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 43 | syn keyword swayConfigFloatingModifierOpts normal inverse contained |
| 44 | syn match i3ConfigKeyword /^floating_modifier [$a-zA-Z0-9+]\+ \(normal\|inverse\)$/ contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 45 | |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 46 | syn match i3ConfigKeyword /^hide_edge_borders --i3 \w*$/ contains=i3ConfigEdgeKeyword,i3ConfigShParam |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 47 | |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 48 | syn keyword i3ConfigBarOpts swaybar_command gaps height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained |
| 49 | syn keyword i3ConfigBarOptVals overlay contained |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 50 | |
| 51 | syn keyword i3ConfigExecActionKeyword swaymsg contained |
| 52 | |
| 53 | " Sway-only options |
| 54 | " Xwayland |
| 55 | syn keyword swayConfigXOpt enable disable force contained |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 56 | syn match i3ConfigKeyword /^xwayland \w*$/ contains=swayConfigXOpt |
| 57 | |
| 58 | " Inhibit idle |
| 59 | syn keyword swayConfigInhibitKeyword inhibit_idle contained |
| 60 | syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained |
| 61 | syn match i3ConfigAction /inhibit_idle \w*/ contained contains=swayConfigInhibitKeyword,swayConfigInhibitOpts |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 62 | |
| 63 | " Bindswitch |
| 64 | syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\)/ contained |
| 65 | syn keyword swayConfigBindswitchType lid tablet contained |
| 66 | syn keyword swayConfigBindswitchState toggle contained |
| 67 | syn match swayConfigBindswitch /\(lid\|tablet\):\(on\|off\|toggle\) / contained contains=swayConfigBindswitchType,i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean |
| 68 | syn 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 |
| 71 | syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\)/ contained |
| 72 | syn keyword swayConfigBindgestureType hold swipe pinch contained |
| 73 | syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained |
| 74 | syn 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 |
| 75 | syn 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š | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 77 | " Tiling drag threshold |
| 78 | syn match i3ConfigKeyword /^tiling_drag_threshold \d\+$/ contains=i3ConfigNumber |
| 79 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 80 | " Titlebar commands |
| 81 | syn match i3ConfigKeyword /^titlebar_border_thickness \(\d\+\|\$\S\+\)$/ contains=i3ConfigNumber,i3ConfigVariable |
| 82 | syn match i3ConfigKeyword /^titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contains=i3ConfigNumber,i3ConfigVariable |
| 83 | |
| 84 | syn match swayConfigDeviceOps /[*,:;]/ contained |
| 85 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 86 | " Input devices |
Bram Moolenaar | b59ae59 | 2022-11-23 23:46:31 +0000 | [diff] [blame] | 87 | syn keyword swayConfigInputKeyword input contained |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 88 | syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained |
| 89 | syn match swayConfigInputTypePair /\<type:\w\+\>/ contained contains=i3ConfigColonOperator,swayConfigInputType |
| 90 | syn region swayConfigInputStart start=/^input / end=/\s/ contained contains=swayConfigInputKeyword,swayConfigInputTypePair,i3ConfigString keepend extend |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 91 | syn 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š | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 92 | syn 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 |
| 93 | syn match swayConfigXkbOptsPairVal /:[0-9a-z_-]\+/ contained contains=i3ConfigColonOperator |
| 94 | syn match swayConfigXkbOptsPair /[a-z]\+:[0-9a-z_-]\+/ contained contains=swayConfigXkbOptsPairVal |
| 95 | syn match swayConfigInputXkbOpts /xkb_options \([a-z]\+:[0-9a-z_-]\+,\?\)\+/ contained contains=swayConfigXkbOptsPair,swayConfigDeviceOps |
| 96 | syn region i3ConfigAction start=/input/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps keepend transparent |
| 97 | syn region i3ConfigInput start=/^input/ skip=/\\$/ end=/$/ contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps keepend |
| 98 | syn region i3ConfigInput start=/^input .* {/ end=/}$/ contains=swayConfigInputStart,swayConfigInputXkbOpts,swayConfigInputOpts,swayConfigInputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend |
Bram Moolenaar | b59ae59 | 2022-11-23 23:46:31 +0000 | [diff] [blame] | 99 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 100 | " Seat |
Bram Moolenaar | 10e8ff9 | 2023-06-10 21:40:39 +0100 | [diff] [blame] | 101 | syn keyword swayConfigSeatKeyword seat contained |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 102 | syn keyword swayConfigSeatOpts attach cursor fallback hide_cursor idle_inhibit idle_wake keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained |
| 103 | syn match swayConfigSeatOptVals /when-typing/ contained |
| 104 | syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 105 | syn region i3ConfigAction start=/seat/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,swayConfigInputType keepend transparent |
| 106 | syn region swayConfigSeat start=/seat/ skip=/\\$/ end=/$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,swayConfigInputType keepend |
| 107 | syn region swayConfigSeat start=/seat .* {$/ end=/}$/ contains=swayConfigSeatKeyword,i3ConfigString,i3ConfigNumber,i3ConfigBoolean,swayConfigSeatOptVals,swayConfigSeatOpts,swayConfigDeviceOps,i3ConfigParen,swayConfigInputType keepend extend |
| 108 | |
| 109 | " Output monitors |
| 110 | syn keyword swayConfigOutputKeyword output contained |
| 111 | syn 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 |
| 112 | syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none normal flipped fill stretch fit center tile solid_color clockwise anticlockwise toggle contained |
| 113 | syn match swayConfigOutputOptVals /--custom\|flipped-\(90\|180\|270\)/ contained |
| 114 | syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained |
| 115 | syn match swayConfigOutputMode / [0-9]\+x[0-9]\+\(@[0-9.]\+Hz\)\?/ contained contains=swayConfigOutputFPS |
| 116 | syn region i3ConfigAction start=/output/ skip=/\\$/ end=/\([,;]\|$\)/ contained contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend transparent |
| 117 | syn region swayConfigOutput start=/^output/ skip=/\\$/ end=/$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps keepend |
| 118 | syn region swayConfigOutput start=/^output .* {$/ end=/}$/ contains=swayConfigOutputKeyword,swayConfigOutputMode,swayConfigOutputOpts,swayConfigOutputOptVals,i3ConfigVariable,i3ConfigNumber,i3ConfigString,i3ConfigColor,i3ConfigBoolean,swayConfigDeviceOps,i3ConfigParen keepend extend |
Bram Moolenaar | 10e8ff9 | 2023-06-10 21:40:39 +0100 | [diff] [blame] | 119 | |
Josef Litoš | 8b2457a | 2023-09-12 20:24:47 +0200 | [diff] [blame] | 120 | " Define the highlighting. |
Josef Litoš | 54f70cf | 2023-09-27 18:58:15 +0200 | [diff] [blame] | 121 | hi def link swayConfigFloatingModifierOpts i3ConfigOption |
| 122 | hi def link swayConfigBindKeyword i3ConfigBindKeyword |
| 123 | hi def link swayConfigXOpt i3ConfigOption |
| 124 | hi def link swayConfigInhibitKeyword i3ConfigCommand |
| 125 | hi def link swayConfigInhibitOpts i3ConfigOption |
| 126 | hi def link swayConfigBindswitchArgument i3ConfigBindArgument |
| 127 | hi def link swayConfigBindswitchType i3ConfigMoveType |
| 128 | hi def link swayConfigBindswitchState i3ConfigMoveDir |
| 129 | hi def link swayConfigBindgestureArgument i3ConfigBindArgument |
| 130 | hi def link swayConfigBindgestureType i3ConfigMoveType |
| 131 | hi def link swayConfigBindgestureDir i3ConfigMoveDir |
| 132 | hi def link swayConfigDeviceOps i3ConfigOperator |
| 133 | hi def link swayConfigInputKeyword i3ConfigCommand |
| 134 | hi def link swayConfigInputType i3ConfigMoveType |
| 135 | hi def link swayConfigInputTypePair i3ConfigMoveDir |
| 136 | hi def link swayConfigInputOptVals i3ConfigShParam |
| 137 | hi def link swayConfigInputOpts i3ConfigOption |
| 138 | hi def link swayConfigXkbOptsPairVal i3ConfigString |
| 139 | hi def link swayConfigXkbOptsPair i3ConfigShParam |
| 140 | hi def link swayConfigInputXkbOpts i3ConfigOption |
| 141 | hi def link swayConfigSeatKeyword i3ConfigCommand |
| 142 | hi def link swayConfigSeatOptVals swayConfigInputOptVals |
| 143 | hi def link swayConfigSeatOpts swayConfigInputOpts |
| 144 | hi def link swayConfigOutputKeyword i3ConfigCommand |
| 145 | hi def link swayConfigOutputOptVals swayConfigInputOptVals |
| 146 | hi def link swayConfigOutputOpts swayConfigInputOpts |
| 147 | hi def link swayConfigOutputFPS Constant |
| 148 | hi def link swayConfigOutputMode i3ConfigNumber |
Bram Moolenaar | 2ecbe53 | 2022-07-29 21:36:21 +0100 | [diff] [blame] | 149 | |
| 150 | let b:current_syntax = "swayconfig" |