blob: ff1b78399bf8dce6d273b2e4b70acb962839939c [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Fvwm{1,2} configuration file
3" Maintainer: Haakon Riiser <hakonrk@fys.uio.no>
4" Last Change: 2002 Jun 2
5"
6" Thanks to David Necas (Yeti) for adding Fvwm 2.4 support.
7
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11 syn clear
12elseif exists("b:current_syntax")
13 finish
14endif
15
16" Fvwm configuration files are case insensitive
17syn case ignore
18
19" Identifiers in Fvwm can contain most characters, so we only
20" include the most common ones here.
21if version >= 600
22 setlocal iskeyword=_,-,+,.,a-z,A-Z,48-57
23else
24 set iskeyword=_,-,+,.,a-z,A-Z,48-57
25endif
26
27" Read system colors from the color database (rgb.txt)
28if exists("rgb_file")
29 " We don't want any hit-return prompts, so we make sure that
30 " &shortmess is set to `O'
31 let __fvwm_oldshm = &shortmess
32 set shortmess=O
33
34 " And we set &report to a huge number, so that no hit-return prompts
35 " will be given
36 let __fvwm_oldreport = &report
37 set report=10000
38
39 " Append the color database to the fvwm configuration, and read the
40 " colors from this buffer
41 let __fvwm_i = line("$") + 1
42 exe "$r" rgb_file
43 let __fvwm_lastline = line("$")
44 while __fvwm_i <= __fvwm_lastline
45 let __fvwm_s = matchstr(getline(__fvwm_i), '^\s*\d\+\s\+\d\+\s\+\d\+\s\+\h.*$')
46 if __fvwm_s != ""
47 exe "syn keyword fvwmColors ".substitute(__fvwm_s, '^\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\h.*\)$', '\1', "")
48 endif
49 let __fvwm_i = __fvwm_i + 1
50 endwhile
51
52 " Remove the appended data
53 undo
54
55 " Goto first line again
56 1
57
58 " and restore the old values of the variables
59 let &shortmess = __fvwm_oldshm
60 let &report = __fvwm_oldreport
61 unlet __fvwm_i __fvwm_s __fvwm_lastline __fvwm_oldshm __fvwm_oldreport
62endif
63" done reading colors
64
65syn match fvwmWhitespace "\s\+" contained
66syn match fvwmEnvVar "\$\w\+"
67syn match fvwmModConf "^\s*\*\a\+" contains=fvwmWhitespace
68syn match fvwmString '".\{-}"'
69syn match fvwmRGBValue "#\x\{3}"
70syn match fvwmRGBValue "#\x\{6}"
71syn match fvwmRGBValue "#\x\{9}"
72syn match fvwmRGBValue "#\x\{12}"
73syn match fvwmRGBValue "rgb:\x\{1,4}/\x\{1,4}/\x\{1,4}"
74syn match fvwmPath "\<IconPath\s.*$"lc=8 contains=fvwmEnvVar
75syn match fvwmPath "\<ModulePath\s.*$"lc=10 contains=fvwmEnvVar
76syn match fvwmPath "\<PixmapPath\s.*$"lc=10 contains=fvwmEnvVar
77syn match fvwmModule "\<Module\s\+\w\+"he=s+6
78syn match fvwmKey "\<Key\s\+\w\+"he=s+3
79syn keyword fvwmExec Exec
80syn match fvwmComment "^#.*$"
81
82if (exists("b:fvwm_version") && b:fvwm_version == 1) || (exists("use_fvwm_1") && use_fvwm_1)
83 syn match fvwmEnvVar "\$(\w\+)"
84 syn region fvwmStyle matchgroup=fvwmFunction start="^\s*Style\>"hs=e-5 end="$" oneline keepend contains=fvwmString,fvwmKeyword,fvwmWhiteSpace
85
86 syn keyword fvwmFunction AppsBackingStore AutoRaise BackingStore
87 syn keyword fvwmFunction Beep BoundaryWidth ButtonStyle
88 syn keyword fvwmFunction CenterOnCirculate CirculateDown
89 syn keyword fvwmFunction CirculateHit CirculateSkip
90 syn keyword fvwmFunction CirculateSkipIcons CirculateUp
91 syn keyword fvwmFunction ClickTime ClickToFocus Close Cursor
92 syn keyword fvwmFunction CursorMove DecorateTransients Delete
93 syn keyword fvwmFunction Desk DeskTopScale DeskTopSize Destroy
94 syn keyword fvwmFunction DontMoveOff EdgeResistance EdgeScroll
95 syn keyword fvwmFunction EndFunction EndMenu EndPopup Focus
96 syn keyword fvwmFunction Font Function GotoPage HiBackColor
97 syn keyword fvwmFunction HiForeColor Icon IconBox IconFont
98 syn keyword fvwmFunction Iconify IconPath Key Lenience Lower
99 syn keyword fvwmFunction Maximize MenuBackColor MenuForeColor
100 syn keyword fvwmFunction MenuStippleColor Module ModulePath Mouse
101 syn keyword fvwmFunction Move MWMBorders MWMButtons MWMDecorHints
102 syn keyword fvwmFunction MWMFunctionHints MWMHintOverride MWMMenus
103 syn keyword fvwmFunction NoBorder NoBoundaryWidth Nop NoPPosition
104 syn keyword fvwmFunction NoTitle OpaqueMove OpaqueResize Pager
105 syn keyword fvwmFunction PagerBackColor PagerFont PagerForeColor
106 syn keyword fvwmFunction PagingDefault PixmapPath Popup Quit Raise
107 syn keyword fvwmFunction RaiseLower RandomPlacement Refresh Resize
108 syn keyword fvwmFunction Restart SaveUnders Scroll SloppyFocus
109 syn keyword fvwmFunction SmartPlacement StartsOnDesk StaysOnTop
110 syn keyword fvwmFunction StdBackColor StdForeColor Stick Sticky
111 syn keyword fvwmFunction StickyBackColor StickyForeColor
112 syn keyword fvwmFunction StickyIcons StubbornIconPlacement
113 syn keyword fvwmFunction StubbornIcons StubbornPlacement
114 syn keyword fvwmFunction SuppressIcons Title TogglePage Wait Warp
115 syn keyword fvwmFunction WindowFont WindowList WindowListSkip
116 syn keyword fvwmFunction WindowsDesk WindowShade XORvalue
117
118 " These keywords are only used after the "Style" command. To avoid
119 " name collision with several commands, they are contained.
120 syn keyword fvwmKeyword BackColor BorderWidth BoundaryWidth contained
121 syn keyword fvwmKeyword Button CirculateHit CirculateSkip Color contained
122 syn keyword fvwmKeyword DoubleClick ForeColor Handles HandleWidth contained
123 syn keyword fvwmKeyword Icon IconTitle NoBorder NoBoundaryWidth contained
124 syn keyword fvwmKeyword NoButton NoHandles NoIcon NoIconTitle contained
125 syn keyword fvwmKeyword NoTitle Slippery StartIconic StartNormal contained
126 syn keyword fvwmKeyword StartsAnyWhere StartsOnDesk StaysOnTop contained
127 syn keyword fvwmKeyword StaysPut Sticky Title WindowListHit contained
128 syn keyword fvwmKeyword WindowListSkip contained
129elseif (exists("b:fvwm_version") && b:fvwm_version == 2) || (exists("use_fvwm_2") && use_fvwm_2)
130 syn match fvwmEnvVar "\${\w\+}"
131 syn match fvwmEnvVar "\$\[[^]]\+\]"
132 syn match fvwmEnvVar "\$[$0-9*]"
133 syn match fvwmDef '^\s*+\s*".\{-}"' contains=fvwmMenuString,fvwmWhitespace
134 syn match fvwmIcon '%.\{-}%' contained
135 syn match fvwmIcon '\*.\{-}\*' contained
136 syn match fvwmMenuString '".\{-}"' contains=fvwmIcon,fvwmShortcutKey contained
137 syn match fvwmShortcutKey "&." contained
138 syn match fvwmModule "\<KillModule\s\+\w\+"he=s+10 contains=fvwmModuleName
139 syn match fvwmModule "\<SendToModule\s\+\w\+"he=s+12 contains=fvwmModuleName
140 syn match fvwmModule "\<DestroyModuleConfig\s\+\w\+"he=s+19 contains=fvwmModuleName
141
142 syn keyword fvwmFunction AddButtonStyle AddTitleStyle AddToDecor AddToFunc
143 syn keyword fvwmFunction AddToMenu AnimatedMove Beep BorderStyle BugOpts
144 syn keyword fvwmFunction BusyCursor ButtonState ButtonStyle ChangeDecor
145 syn keyword fvwmFunction ChangeMenuStyle ClickTime Close ColorLimit
146 syn keyword fvwmFunction ColormapFocus CopyMenuStyle Current CursorMove
147 syn keyword fvwmFunction CursorStyle DefaultColors DefaultColorset
148 syn keyword fvwmFunction DefaultFont DefaultIcon DefaultLayers Delete Desk
149 syn keyword fvwmFunction DeskTopSize Destroy DestroyDecor DestroyFunc
150 syn keyword fvwmFunction DestroyMenu DestroyMenuStyle Direction Echo
151 syn keyword fvwmFunction EdgeResistance EdgeScroll EdgeThickness Emulate
152 syn keyword fvwmFunction EscapeFunc Exec ExecUseShell ExitFunction
153 syn keyword fvwmFunction FakeClick FlipFocus Focus Function GlobalOpts
154 syn keyword fvwmFunction GnomeButton GotoDesk GotoDeskAndPage GotoPage
155 syn keyword fvwmFunction HideGeometryWindow HilightColor HilightColorset
156 syn keyword fvwmFunction IconFont IconPath Iconify IgnoreModifiers
157 syn keyword fvwmFunction ImagePath Key Layer Lower Maximize Menu MenuStyle
158 syn keyword fvwmFunction ModulePath ModuleSynchronous ModuleTimeout
159 syn keyword fvwmFunction Mouse Move MoveThreshold MoveToDesk MoveToPage
160 syn keyword fvwmFunction MoveToScreen Next None Nop OpaqueMoveSize
161 syn keyword fvwmFunction PipeRead PixmapPath PlaceAgain PointerKey
162 syn keyword fvwmFunction Popup Prev Quit QuitScreen QuitSession Raise
163 syn keyword fvwmFunction RaiseLower Read Recapture RecaptureWindow
164 syn keyword fvwmFunction Refresh RefreshWindow Resize ResizeMove
165 syn keyword fvwmFunction Restart SaveQuitSession SaveSession Scroll
166 syn keyword fvwmFunction SetAnimation SetEnv SetMenuDelay SetMenuStyle
167 syn keyword fvwmFunction Silent SnapAttraction SnapGrid Stick Stroke
168 syn keyword fvwmFunction StrokeFunc Style Title TitleStyle UnsetEnv
169 syn keyword fvwmFunction UpdateDecor UpdateStyles Wait WarpToWindow
170 syn keyword fvwmFunction WindowFont WindowId WindowList WindowShade
171 syn keyword fvwmFunction WindowShadeAnimate WindowsDesk Xinerama
172 syn keyword fvwmFunction XineramaPrimaryScreen XineramaSls XineramaSlsSize
173 syn keyword fvwmFunction XorPixmap XorValue
174
175 syn keyword fvwmKeyword Active ActiveColorset ActiveDown
176 syn keyword fvwmKeyword ActiveFore ActiveForeOff ActivePlacement
177 syn keyword fvwmKeyword ActivePlacementHonorsStartsOnPage
178 syn keyword fvwmKeyword ActivePlacementIgnoresStartsOnPage ActiveUp All
179 syn keyword fvwmKeyword AllowRestack Alphabetic Anim Animated Animation
180 syn keyword fvwmKeyword AnimationOff AutomaticHotkeys AutomaticHotkeysOff
181 syn keyword fvwmKeyword BGradient BackColor Background BackingStore
182 syn keyword fvwmKeyword BackingStoreOff BorderColorset BorderWidth
183 syn keyword fvwmKeyword Bottom Button Button0 Button1 Button2 Button3
184 syn keyword fvwmKeyword Button4 Button5 Button6 Button7 Button8
185 syn keyword fvwmKeyword Button9 CGradient CaptureHonorsStartsOnPage
186 syn keyword fvwmKeyword CaptureIgnoresStartsOnPage CascadePlacement
187 syn keyword fvwmKeyword Centered CirculateHit CirculateHitIcon
188 syn keyword fvwmKeyword CirculateHitShaded CirculateSkip
189 syn keyword fvwmKeyword CirculateSkipIcon CirculateSkipShaded Clear
190 syn keyword fvwmKeyword ClickToFocus ClickToFocusDoesntPassClick
191 syn keyword fvwmKeyword ClickToFocusDoesntRaise ClickToFocusPassesClick
192 syn keyword fvwmKeyword ClickToFocusPassesClickOff ClickToFocusRaises
193 syn keyword fvwmKeyword ClickToFocusRaisesOff Color Colorset Context
194 syn keyword fvwmKeyword CurrentDesk CurrentPage CurrentPageAnyDesk
195 syn keyword fvwmKeyword DGradient DecorateTransient Default
196 syn keyword fvwmKeyword DepressableBorder Desk DontLowerTransient
197 syn keyword fvwmKeyword DontRaiseTransient DontStackTransientParent
198 syn keyword fvwmKeyword DoubleClickTime Down DumbPlacement DynamicMenu
199 syn keyword fvwmKeyword DynamicPopDownAction DynamicPopUpAction
200 syn keyword fvwmKeyword East Expect FVWM FirmBorder Fixed
201 syn keyword fvwmKeyword FixedPosition Flat FlickeringMoveWorkaround
202 syn keyword fvwmKeyword FlickeringQtDialogsWorkaround FocusFollowsMouse
203 syn keyword fvwmKeyword FollowsFocus FollowsMouse Font ForeColor
204 syn keyword fvwmKeyword Foreground Function Fvwm FvwmBorder
205 syn keyword fvwmKeyword FvwmButtons GNOMEIgnoreHints GNOMEUseHints
206 syn keyword fvwmKeyword GrabFocus GrabFocusOff GrabFocusTransient
207 syn keyword fvwmKeyword GrabFocusTransientOff Greyed GreyedColorset
208 syn keyword fvwmKeyword HGradient HandleWidth Handles Height
209 syn keyword fvwmKeyword HiddenHandles Hilight3DOff Hilight3DThick
210 syn keyword fvwmKeyword Hilight3DThickness Hilight3DThin HilightBack
211 syn keyword fvwmKeyword HilightBackOff HilightBorderColorset
212 syn keyword fvwmKeyword HilightColorset HilightFore HintOverride
213 syn keyword fvwmKeyword HoldSubmenus Icon IconBox IconFill IconFont
214 syn keyword fvwmKeyword IconGrid IconOverride IconTitle Iconic
215 syn keyword fvwmKeyword IconifyWindowGroups IconifyWindowGroupsOff
216 syn keyword fvwmKeyword Icons IgnoreRestack Inactive Interior Item
217 syn keyword fvwmKeyword ItemFormat KeepWindowGroupsOnDesk Layer Left
218 syn keyword fvwmKeyword LeftJustified Lenience LowerTransient MWM
219 syn keyword fvwmKeyword MWMBorder MWMButtons MWMDecor MWMDecorMax
220 syn keyword fvwmKeyword MWMDecorMenu MWMDecorMin MWMFunctions
221 syn keyword fvwmKeyword ManualPlacement ManualPlacementHonorsStartsOnPage
222 syn keyword fvwmKeyword ManualPlacementIgnoresStartsOnPage MaxWindowSize
223 syn keyword fvwmKeyword Maximized Menu MenuColorset MenuFace
224 syn keyword fvwmKeyword MinOverlapPercentPlacement MinOverlapPlacement
225 syn keyword fvwmKeyword MiniIcon MixedVisualWorkaround ModalityIsEvil
226 syn keyword fvwmKeyword ModuleSynchronous Mouse MouseFocus
227 syn keyword fvwmKeyword MouseFocusClickDoesntRaise MouseFocusClickRaises
228 syn keyword fvwmKeyword MouseFocusClickRaisesOff Move Mwm MwmBorder
229 syn keyword fvwmKeyword MwmButtons MwmDecor MwmFunctions NakedTransient
230 syn keyword fvwmKeyword Never NeverFocus NoActiveIconOverride NoButton
231 syn keyword fvwmKeyword NoDecorHint NoDeskSort NoFuncHint NoGeometry
232 syn keyword fvwmKeyword NoGeometryWithInfo NoHandles NoHotkeys NoIcon
233 syn keyword fvwmKeyword NoIconOverride NoIconPosition NoIconTitle
234 syn keyword fvwmKeyword NoIcons NoInset NoLenience NoNormal
235 syn keyword fvwmKeyword NoOLDecor NoOnBottom NoOnTop NoOverride
236 syn keyword fvwmKeyword NoPPosition NoResizeOverride NoSticky
237 syn keyword fvwmKeyword NoStipledTitles NoTitle NoTransientPPosition
238 syn keyword fvwmKeyword NoTransientUSPosition NoUSPosition
239 syn keyword fvwmKeyword NoWarp Normal North Northeast Northwest
240 syn keyword fvwmKeyword NotAlphabetic OLDecor OnBottom OnTop Once
241 syn keyword fvwmKeyword OnlyIcons OnlyListSkip OnlyNormal OnlyOnBottom
242 syn keyword fvwmKeyword OnlyOnTop OnlySticky Opacity ParentalRelativity
243 syn keyword fvwmKeyword Pixmap PopdownDelayed PopdownDelay PopupDelay
244 syn keyword fvwmKeyword PopupAsRootMenu PopupAsSubmenu PopdownImmediately
245 syn keyword fvwmKeyword PopupDelayed PopupImmediately PopupOffset
246 syn keyword fvwmKeyword Quiet RGradient RaiseOverNativeWindows
247 syn keyword fvwmKeyword RaiseOverUnmanaged RaiseTransient
248 syn keyword fvwmKeyword Raised Read RecaptureHonorsStartsOnPage
249 syn keyword fvwmKeyword RecaptureIgnoresStartsOnPage Rectangle
250 syn keyword fvwmKeyword RemoveSubmenus Reset Resize ResizeHintOverride
251 syn keyword fvwmKeyword ResizeOpaque ResizeOutline ReverseOrder
252 syn keyword fvwmKeyword Right RightJustified Root SGradient SameType
253 syn keyword fvwmKeyword SaveUnder SaveUnderOff ScatterWindowGroups
254 syn keyword fvwmKeyword Screen SelectInPlace SelectOnRelease
255 syn keyword fvwmKeyword SelectWarp SeparatorsLong SeparatorsShort
256 syn keyword fvwmKeyword ShowMapping SideColor SidePic Simple
257 syn keyword fvwmKeyword SkipMapping Slippery SlipperyIcon SloppyFocus
258 syn keyword fvwmKeyword SmartPlacement SmartPlacementIsNormal
259 syn keyword fvwmKeyword SmartPlacementIsReallySmart Solid South
260 syn keyword fvwmKeyword Southeast Southwest StackTransientParent
261 syn keyword fvwmKeyword StartIconic StartNormal StartsAnyWhere
262 syn keyword fvwmKeyword StartsLowered StartsOnDesk StartsOnPage
263 syn keyword fvwmKeyword StartsOnPageIgnoresTransients
264 syn keyword fvwmKeyword StartsOnPageIncludesTransients StartsOnScreen
265 syn keyword fvwmKeyword StartsRaised StaysOnBottom StaysOnTop StaysPut
266 syn keyword fvwmKeyword Sticky StickyIcon StipledTitles StippledTitle
267 syn keyword fvwmKeyword StippledTitleOff SubmenusLeft SubmenusRight Sunk
268 syn keyword fvwmKeyword This TileCascadePlacement TileManualPlacement
269 syn keyword fvwmKeyword TiledPixmap Timeout Title TitleAtBottom
270 syn keyword fvwmKeyword TitleAtTop TitleUnderlines0 TitleUnderlines1
271 syn keyword fvwmKeyword TitleUnderlines2 TitleWarp TitleWarpOff Top
272 syn keyword fvwmKeyword Transient TrianglesRelief TrianglesSolid
273 syn keyword fvwmKeyword Up UseBorderStyle UseDecor UseIconName
274 syn keyword fvwmKeyword UseIconPosition UseListSkip UsePPosition
275 syn keyword fvwmKeyword UseStyle UseTitleStyle UseTransientPPosition
276 syn keyword fvwmKeyword UseTransientUSPosition UseUSPosition VGradient
277 syn keyword fvwmKeyword VariablePosition Vector VerticalItemSpacing
278 syn keyword fvwmKeyword VerticalTitleSpacing WIN Wait Warp WarpTitle
279 syn keyword fvwmKeyword West Win Window WindowListHit WindowListSkip
280 syn keyword fvwmKeyword WindowShadeScrolls WindowShadeShrinks
281 syn keyword fvwmKeyword WindowShadeSteps Windows XineramaRoot YGradient
282 syn keyword fvwmKeyword bottomright default pointer prev quiet
283 syn keyword fvwmKeyword True False Toggle
284
285 syn keyword fvwmConditionName AcceptsFocus CurrentDesk CurrentGlobalPage
286 syn keyword fvwmConditionName CurrentGlobalPageAnyDesk CurrentPage
287 syn keyword fvwmConditionName CurrentPageAnyDesk CurrentScreen Iconic Layer
288 syn keyword fvwmConditionName Maximized PlacedByButton3 PlacedByFvwm Raised
289 syn keyword fvwmConditionName Shaded Sticky Transient Visible
290
291 syn keyword fvwmContextName BOTTOM BOTTOM_EDGE BOTTOM_LEFT BOTTOM_RIGHT
292 syn keyword fvwmContextName DEFAULT DESTROY LEFT LEFT_EDGE MENU MOVE
293 syn keyword fvwmContextName RESIZE RIGHT RIGHT_EDGE ROOT SELECT STROKE SYS
294 syn keyword fvwmContextName TITLE TOP TOP_EDGE TOP_LEFT TOP_RIGHT WAIT
295 syn keyword fvwmContextName POSITION
296
297 syn keyword fvwmFunctionName contained FvwmAnimate FvwmAudio FvwmAuto
298 syn keyword fvwmFunctionName contained FvwmBacker FvwmBanner FvwmButtons
299 syn keyword fvwmFunctionName contained FvwmCascade FvwmCommandS
300 syn keyword fvwmFunctionName contained FvwmConsole FvwmConsoleC FvwmCpp
301 syn keyword fvwmFunctionName contained FvwmDebug FvwmDragWell FvwmEvent
302 syn keyword fvwmFunctionName contained FvwmForm FvwmGtk FvwmIconBox
303 syn keyword fvwmFunctionName contained FvwmIconMan FvwmIdent FvwmM4
304 syn keyword fvwmFunctionName contained FvwmPager FvwmRearrange FvwmSave
305 syn keyword fvwmFunctionName contained FvwmSaveDesk FvwmScript FvwmScroll
306 syn keyword fvwmFunctionName contained FvwmTalk FvwmTaskBar FvwmTheme
307 syn keyword fvwmFunctionName contained FvwmTile FvwmWharf FvwmWinList
308
309 syn keyword fvwmFunctionName StartFunction InitFunction RestartFunction
310 syn keyword fvwmFunctionName ExitFunction SessionInitFunction
311 syn keyword fvwmFunctionName SessionRestartFunction SessionExitFunction
312 syn keyword fvwmFunctionName MissingSubmenuFunction
313endif
314
315if version >= 508 || !exists("did_fvwm_syntax_inits")
316 if version < 508
317 let did_fvwm_syntax_inits = 1
318 command -nargs=+ HiLink hi link <args>
319 else
320 command -nargs=+ HiLink hi def link <args>
321 endif
322
323 HiLink fvwmComment Comment
324 HiLink fvwmEnvVar Macro
325 HiLink fvwmExec Function
326 HiLink fvwmFunction Function
327 HiLink fvwmFunctionName Special
328 HiLink fvwmContextName Function
329 HiLink fvwmConditionName Function
330 HiLink fvwmIcon Comment
331 HiLink fvwmKey Function
332 HiLink fvwmKeyword Keyword
333 HiLink fvwmMenuString String
334 HiLink fvwmModConf Macro
335 HiLink fvwmModule Function
336 HiLink fvwmModuleName Special
337 HiLink fvwmRGBValue Type
338 HiLink fvwmShortcutKey SpecialChar
339 HiLink fvwmString String
340
341 if exists("rgb_file")
342 HiLink fvwmColors Type
343 endif
344
345 delcommand HiLink
346endif
347
348let b:current_syntax = "fvwm"
349" vim: sts=4 sw=4 ts=8