i3config.vim 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. " Vim syntax file
  2. " Language: i3 config file
  3. " Original Author: Mohamed Boughaba <mohamed dot bgb at gmail dot com>
  4. " Maintainer: Quentin Hibon (github user hiqua)
  5. " Version: 0.4
  6. " Last Change: 2022 Jan 15
  7. " References:
  8. " http://i3wm.org/docs/userguide.html#configuring
  9. " http://vimdoc.sourceforge.net/htmldoc/syntax.html
  10. "
  11. "
  12. " Quit when a syntax file was already loaded
  13. if exists("b:current_syntax")
  14. finish
  15. endif
  16. scriptencoding utf-8
  17. " Error
  18. syn match i3ConfigError /.*/
  19. " Todo
  20. syn keyword i3ConfigTodo TODO FIXME XXX contained
  21. " Comment
  22. " Comments are started with a # and can only be used at the beginning of a line
  23. syn match i3ConfigComment /^\s*#.*$/ contains=i3ConfigTodo
  24. " Font
  25. " A FreeType font description is composed by:
  26. " a font family, a style, a weight, a variant, a stretch and a size.
  27. syn match i3ConfigFontSeparator /,/ contained
  28. syn match i3ConfigFontSeparator /:/ contained
  29. syn keyword i3ConfigFontKeyword font contained
  30. syn match i3ConfigFontNamespace /\w\+:/ contained contains=i3ConfigFontSeparator
  31. syn match i3ConfigFontContent /-\?\w\+\(-\+\|\s\+\|,\)/ contained contains=i3ConfigFontNamespace,i3ConfigFontSeparator,i3ConfigFontKeyword
  32. syn match i3ConfigFontSize /\s\=\d\+\(px\)\?\s\?$/ contained
  33. syn match i3ConfigFont /^\s*font\s\+.*$/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
  34. syn match i3ConfigFont /^\s*font\s\+.*\(\\\_.*\)\?$/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
  35. syn match i3ConfigFont /^\s*font\s\+.*\(\\\_.*\)\?[^\\]\+$/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
  36. syn match i3ConfigFont /^\s*font\s\+\(\(.*\\\_.*\)\|\(.*[^\\]\+$\)\)/ contains=i3ConfigFontContent,i3ConfigFontSeparator,i3ConfigFontSize,i3ConfigFontNamespace
  37. " variables
  38. syn match i3ConfigString /\(['"]\)\(.\{-}\)\1/ contained
  39. syn match i3ConfigColor /#\w\{6}/ contained
  40. syn match i3ConfigVariableModifier /+/ contained
  41. syn match i3ConfigVariableAndModifier /+\w\+/ contained contains=i3ConfigVariableModifier
  42. syn match i3ConfigVariable /\$\w\+\(\(-\w\+\)\+\)\?\(\s\|+\)\?/ contains=i3ConfigVariableModifier,i3ConfigVariableAndModifier
  43. syn keyword i3ConfigInitializeKeyword set contained
  44. syn match i3ConfigInitialize /^\s*set\s\+.*$/ contains=i3ConfigVariable,i3ConfigInitializeKeyword,i3ConfigColor,i3ConfigString
  45. " Gaps
  46. syn keyword i3ConfigGapStyleKeyword inner outer horizontal vertical top right bottom left current all set plus minus toggle up down contained
  47. syn match i3ConfigGapStyle /^\s*\(gaps\)\s\+\(inner\|outer\|horizontal\|vertical\|left\|top\|right\|bottom\)\(\s\+\(current\|all\)\)\?\(\s\+\(set\|plus\|minus\|toggle\)\)\?\(\s\+\(-\?\d\+\|\$.*\)\)$/ contains=i3ConfigGapStyleKeyword,i3ConfigNumber,i3ConfigVariable
  48. syn keyword i3ConfigSmartGapKeyword on inverse_outer contained
  49. syn match i3ConfigSmartGap /^\s*smart_gaps\s\+\(on\|inverse_outer\)\s\?$/ contains=i3ConfigSmartGapKeyword
  50. syn keyword i3ConfigSmartBorderKeyword on no_gaps contained
  51. syn match i3ConfigSmartBorder /^\s*smart_borders\s\+\(on\|no_gaps\)\s\?$/ contains=i3ConfigSmartBorderKeyword
  52. " Keyboard bindings
  53. syn keyword i3ConfigAction toggle fullscreen restart key import kill shrink grow contained
  54. syn keyword i3ConfigAction focus move grow height width split layout resize restore reload mute unmute exit mode workspace container to contained
  55. syn match i3ConfigModifier /\w\++\w\+\(\(+\w\+\)\+\)\?/ contained contains=i3ConfigVariableModifier
  56. syn match i3ConfigNumber /\s\d\+/ contained
  57. syn match i3ConfigUnit /\sp\(pt\|x\)/ contained
  58. syn match i3ConfigUnitOr /\sor/ contained
  59. syn keyword i3ConfigBindKeyword bindsym bindcode exec gaps border contained
  60. syn match i3ConfigBindArgument /--\w\+\(\(-\w\+\)\+\)\?\s/ contained
  61. syn match i3ConfigBind /^\s*\(bindsym\|bindcode\)\s\+.*$/ contains=i3ConfigVariable,i3ConfigBindKeyword,i3ConfigVariableAndModifier,i3ConfigNumber,i3ConfigUnit,i3ConfigUnitOr,i3ConfigBindArgument,i3ConfigModifier,i3ConfigAction,i3ConfigString,i3ConfigGapStyleKeyword,i3ConfigBorderStyleKeyword
  62. " Floating
  63. syn keyword i3ConfigSizeSpecial x contained
  64. syn match i3ConfigNegativeSize /-/ contained
  65. syn match i3ConfigSize /-\?\d\+\s\?x\s\?-\?\d\+/ contained contains=i3ConfigSizeSpecial,i3ConfigNumber,i3ConfigNegativeSize
  66. syn match i3ConfigFloating /^\s*floating_modifier\s\+\$\w\+\d\?/ contains=i3ConfigVariable
  67. syn match i3ConfigFloating /^\s*floating_\(maximum\|minimum\)_size\s\+-\?\d\+\s\?x\s\?-\?\d\+/ contains=i3ConfigSize
  68. " Orientation
  69. syn keyword i3ConfigOrientationKeyword vertical horizontal auto contained
  70. syn match i3ConfigOrientation /^\s*default_orientation\s\+\(vertical\|horizontal\|auto\)\s\?$/ contains=i3ConfigOrientationKeyword
  71. " Layout
  72. syn keyword i3ConfigLayoutKeyword default stacking tabbed contained
  73. syn match i3ConfigLayout /^\s*workspace_layout\s\+\(default\|stacking\|tabbed\)\s\?$/ contains=i3ConfigLayoutKeyword
  74. " Border style
  75. syn keyword i3ConfigBorderStyleKeyword none normal pixel contained
  76. syn match i3ConfigBorderStyle /^\s*\(new_window\|new_float\|default_border\|default_floating_border\)\s\+\(none\|\(normal\|pixel\)\(\s\+\d\+\)\?\(\s\+\$\w\+\(\(-\w\+\)\+\)\?\(\s\|+\)\?\)\?\)\s\?$/ contains=i3ConfigBorderStyleKeyword,i3ConfigNumber,i3ConfigVariable
  77. " Hide borders and edges
  78. syn keyword i3ConfigEdgeKeyword none vertical horizontal both smart smart_no_gaps contained
  79. syn match i3ConfigEdge /^\s*hide_edge_borders\s\+\(none\|vertical\|horizontal\|both\|smart\|smart_no_gaps\)\s\?$/ contains=i3ConfigEdgeKeyword
  80. " Arbitrary commands for specific windows (for_window)
  81. syn keyword i3ConfigCommandKeyword for_window contained
  82. syn region i3ConfigWindowStringSpecial start=+"+ skip=+\\"+ end=+"+ contained contains=i3ConfigString
  83. syn region i3ConfigWindowCommandSpecial start="\[" end="\]" contained contains=i3ConfigWindowStringSpacial,i3ConfigString
  84. syn match i3ConfigArbitraryCommand /^\s*for_window\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigCommandKeyword,i3ConfigBorderStyleKeyword,i3ConfigLayoutKeyword,i3ConfigOrientationKeyword,Size,i3ConfigNumber
  85. " Disable focus open opening
  86. syn keyword i3ConfigNoFocusKeyword no_focus contained
  87. syn match i3ConfigDisableFocus /^\s*no_focus\s\+.*$/ contains=i3ConfigWindowCommandSpecial,i3ConfigNoFocusKeyword
  88. " Move client to specific workspace automatically
  89. syn keyword i3ConfigAssignKeyword assign contained
  90. syn match i3ConfigAssignSpecial /→/ contained
  91. syn match i3ConfigAssign /^\s*assign\s\+.*$/ contains=i3ConfigAssignKeyword,i3ConfigWindowCommandSpecial,i3ConfigAssignSpecial
  92. " X resources
  93. syn keyword i3ConfigResourceKeyword set_from_resource contained
  94. syn match i3ConfigResource /^\s*set_from_resource\s\+.*$/ contains=i3ConfigResourceKeyword,i3ConfigWindowCommandSpecial,i3ConfigColor,i3ConfigVariable
  95. " Auto start applications
  96. syn keyword i3ConfigExecKeyword exec exec_always contained
  97. syn match i3ConfigNoStartupId /--no-startup-id/ contained " We are not using i3ConfigBindArgument as only no-startup-id is supported here
  98. syn match i3ConfigExec /^\s*exec\(_always\)\?\s\+.*$/ contains=i3ConfigExecKeyword,i3ConfigNoStartupId,i3ConfigString
  99. " Automatically putting workspaces on specific screens
  100. syn keyword i3ConfigWorkspaceKeyword workspace contained
  101. syn keyword i3ConfigOutput output contained
  102. syn match i3ConfigWorkspace /^\s*workspace\s\+.*$/ contains=i3ConfigWorkspaceKeyword,i3ConfigNumber,i3ConfigString,i3ConfigOutput
  103. " Changing colors
  104. syn keyword i3ConfigClientColorKeyword client focused focused_inactive unfocused urgent placeholder background contained
  105. syn match i3ConfigClientColor /^\s*client.\w\+\s\+.*$/ contains=i3ConfigClientColorKeyword,i3ConfigColor,i3ConfigVariable
  106. syn keyword i3ConfigTitleAlignKeyword left center right contained
  107. syn match i3ConfigTitleAlign /^\s*title_align\s\+.*$/ contains=i3ConfigTitleAlignKeyword
  108. " Interprocess communication
  109. syn match i3ConfigInterprocessKeyword /ipc-socket/ contained
  110. syn match i3ConfigInterprocess /^\s*ipc-socket\s\+.*$/ contains=i3ConfigInterprocessKeyword
  111. " Mouse warping
  112. syn keyword i3ConfigMouseWarpingKeyword mouse_warping contained
  113. syn keyword i3ConfigMouseWarpingType output none contained
  114. syn match i3ConfigMouseWarping /^\s*mouse_warping\s\+\(output\|none\)\s\?$/ contains=i3ConfigMouseWarpingKeyword,i3ConfigMouseWarpingType
  115. " Focus follows mouse
  116. syn keyword i3ConfigFocusFollowsMouseKeyword focus_follows_mouse contained
  117. syn keyword i3ConfigFocusFollowsMouseType yes no contained
  118. syn match i3ConfigFocusFollowsMouse /^\s*focus_follows_mouse\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusFollowsMouseKeyword,i3ConfigFocusFollowsMouseType
  119. " Popups during fullscreen mode
  120. syn keyword i3ConfigPopupOnFullscreenKeyword popup_during_fullscreen contained
  121. syn keyword i3ConfigPopuponFullscreenType smart ignore leave_fullscreen contained
  122. syn match i3ConfigPopupOnFullscreen /^\s*popup_during_fullscreen\s\+\w\+\s\?$/ contains=i3ConfigPopupOnFullscreenKeyword,i3ConfigPopupOnFullscreenType
  123. " Focus wrapping
  124. syn keyword i3ConfigFocusWrappingKeyword force_focus_wrapping focus_wrapping contained
  125. syn keyword i3ConfigFocusWrappingType yes no contained
  126. syn match i3ConfigFocusWrapping /^\s*\(force_\)\?focus_wrapping\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigFocusWrappingKeyword
  127. " Forcing Xinerama
  128. syn keyword i3ConfigForceXineramaKeyword force_xinerama contained
  129. syn match i3ConfigForceXinerama /^\s*force_xinerama\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigForceXineramaKeyword
  130. " Automatic back-and-forth when switching to the current workspace
  131. syn keyword i3ConfigAutomaticSwitchKeyword workspace_auto_back_and_forth contained
  132. syn match i3ConfigAutomaticSwitch /^\s*workspace_auto_back_and_forth\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigAutomaticSwitchKeyword
  133. " Delay urgency hint
  134. syn keyword i3ConfigTimeUnit ms contained
  135. syn keyword i3ConfigDelayUrgencyKeyword force_display_urgency_hint contained
  136. syn match i3ConfigDelayUrgency /^\s*force_display_urgency_hint\s\+\d\+\s\+ms\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDelayUrgencyKeyword,i3ConfigNumber,i3ConfigTimeUnit
  137. " Focus on window activation
  138. syn keyword i3ConfigFocusOnActivationKeyword focus_on_window_activation contained
  139. syn keyword i3ConfigFocusOnActivationType smart urgent focus none contained
  140. syn match i3ConfigFocusOnActivation /^\s*focus_on_window_activation\s\+\(smart\|urgent\|focus\|none\)\s\?$/ contains=i3ConfigFocusOnActivationKeyword,i3ConfigFocusOnActivationType
  141. " Automatic back-and-forth when switching to the current workspace
  142. syn keyword i3ConfigDrawingMarksKeyword show_marks contained
  143. syn match i3ConfigDrawingMarks /^\s*show_marks\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDrawingMarksKeyword
  144. " Group mode/bar
  145. syn keyword i3ConfigBlockKeyword mode bar colors i3bar_command status_command position exec mode hidden_state modifier id position output background statusline tray_output tray_padding separator separator_symbol workspace_min_width workspace_buttons strip_workspace_numbers binding_mode_indicator focused_workspace active_workspace inactive_workspace urgent_workspace binding_mode contained
  146. syn region i3ConfigBlock start=+.*s\?{$+ end=+^}$+ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
  147. " Line continuation
  148. syn region i3ConfigLineCont start=/^.*\\$/ end=/^.*$/ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
  149. " Define the highlighting.
  150. hi def link i3ConfigError Error
  151. hi def link i3ConfigTodo Todo
  152. hi def link i3ConfigComment Comment
  153. hi def link i3ConfigFontContent Type
  154. hi def link i3ConfigFocusOnActivationType Type
  155. hi def link i3ConfigPopupOnFullscreenType Type
  156. hi def link i3ConfigOrientationKeyword Type
  157. hi def link i3ConfigMouseWarpingType Type
  158. hi def link i3ConfigFocusFollowsMouseType Type
  159. hi def link i3ConfigGapStyleKeyword Type
  160. hi def link i3ConfigTitleAlignKeyword Type
  161. hi def link i3ConfigSmartGapKeyword Type
  162. hi def link i3ConfigSmartBorderKeyword Type
  163. hi def link i3ConfigLayoutKeyword Type
  164. hi def link i3ConfigBorderStyleKeyword Type
  165. hi def link i3ConfigEdgeKeyword Type
  166. hi def link i3ConfigAction Type
  167. hi def link i3ConfigCommand Type
  168. hi def link i3ConfigOutput Type
  169. hi def link i3ConfigWindowCommandSpecial Type
  170. hi def link i3ConfigFocusWrappingType Type
  171. hi def link i3ConfigUnitOr Type
  172. hi def link i3ConfigFontSize Constant
  173. hi def link i3ConfigColor Constant
  174. hi def link i3ConfigNumber Constant
  175. hi def link i3ConfigUnit Constant
  176. hi def link i3ConfigVariableAndModifier Constant
  177. hi def link i3ConfigTimeUnit Constant
  178. hi def link i3ConfigModifier Constant
  179. hi def link i3ConfigString Constant
  180. hi def link i3ConfigNegativeSize Constant
  181. hi def link i3ConfigFontSeparator Special
  182. hi def link i3ConfigVariableModifier Special
  183. hi def link i3ConfigSizeSpecial Special
  184. hi def link i3ConfigWindowSpecial Special
  185. hi def link i3ConfigAssignSpecial Special
  186. hi def link i3ConfigFontNamespace PreProc
  187. hi def link i3ConfigBindArgument PreProc
  188. hi def link i3ConfigNoStartupId PreProc
  189. hi def link i3ConfigFontKeyword Identifier
  190. hi def link i3ConfigBindKeyword Identifier
  191. hi def link i3ConfigOrientation Identifier
  192. hi def link i3ConfigGapStyle Identifier
  193. hi def link i3ConfigTitleAlign Identifier
  194. hi def link i3ConfigSmartGap Identifier
  195. hi def link i3ConfigSmartBorder Identifier
  196. hi def link i3ConfigLayout Identifier
  197. hi def link i3ConfigBorderStyle Identifier
  198. hi def link i3ConfigEdge Identifier
  199. hi def link i3ConfigFloating Identifier
  200. hi def link i3ConfigCommandKeyword Identifier
  201. hi def link i3ConfigNoFocusKeyword Identifier
  202. hi def link i3ConfigInitializeKeyword Identifier
  203. hi def link i3ConfigAssignKeyword Identifier
  204. hi def link i3ConfigResourceKeyword Identifier
  205. hi def link i3ConfigExecKeyword Identifier
  206. hi def link i3ConfigWorkspaceKeyword Identifier
  207. hi def link i3ConfigClientColorKeyword Identifier
  208. hi def link i3ConfigInterprocessKeyword Identifier
  209. hi def link i3ConfigMouseWarpingKeyword Identifier
  210. hi def link i3ConfigFocusFollowsMouseKeyword Identifier
  211. hi def link i3ConfigPopupOnFullscreenKeyword Identifier
  212. hi def link i3ConfigFocusWrappingKeyword Identifier
  213. hi def link i3ConfigForceXineramaKeyword Identifier
  214. hi def link i3ConfigAutomaticSwitchKeyword Identifier
  215. hi def link i3ConfigDelayUrgencyKeyword Identifier
  216. hi def link i3ConfigFocusOnActivationKeyword Identifier
  217. hi def link i3ConfigDrawingMarksKeyword Identifier
  218. hi def link i3ConfigBlockKeyword Identifier
  219. hi def link i3ConfigVariable Statement
  220. hi def link i3ConfigArbitraryCommand Type
  221. let b:current_syntax = "i3config"