" Vim syntax file " Language: XDG desktop entry " Filenames: *.desktop, *.directory " Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) " Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) " Last Change: 2022 Sep 22 " Version Info: desktop.vim 1.5 " References: " - https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.5.html (2020-04-27) " - https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-0.11.html (2006-02-07) " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif let s:cpo_save = &cpo set cpo&vim syn case match " Variable {{{1 " This syntax file can be used to all *nix configuration files similar to dos " ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. " By default strict following of freedesktop.org standard is enforced. " To highlight nonstandard extensions that does not begin with X-, set " let g:desktop_enable_nonstd = v:true " Note that this may cause wrong highlight. " To highlight KDE-reserved features, set " let g:desktop_enable_kde = v:true " g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied if exists("g:desktop_enable_nonstd") && g:desktop_enable_nonstd let s:desktop_enable_nonstd = v:true else let s:desktop_enable_nonstd = v:false endif if exists("g:desktop_enable_kde") && g:desktop_enable_kde || s:desktop_enable_nonstd let s:desktop_enable_kde = v:true else let s:desktop_enable_kde = v:false endif " Comment {{{1 syn match dtComment /^#.*$/ " Error {{{1 syn match dtError /\%(^\s.*\|\s\+$\)/ " Group Header {{{1 " ASCII printable characters except for brackets [ (0x5B) and ] (0x5D) syn match dtGroup /^\[[\x20-\x5A\x5C\x5E-\x7E]\+\]$/ " Entries {{{1 syn match dtDelim /=/ contained " lang_territory.codeset@modifier syn match dtLocaleSuffix \ /\[\%(C\|POSIX\|[a-z]\{2,4}\%(_[A-Z0-9]\{2,3}\)\?\)\%(\.[A-Za-z0-9_-]\+\)\?\%(@[A-Za-z]\+\)\?\]\ze\s*=/ \ contained " Boolean Value {{{2 syn match dtBoolean \ /^\%(DBusActivatable\|Hidden\|NoDisplay\|PrefersNonDefaultGPU\|SingleMainWindow\|StartupNotify\|Terminal\)\s*=\s*\%(true\|false\)/ \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent syn keyword dtBooleanKey \ DBusActivatable Hidden NoDisplay PrefersNonDefaultGPU SingleMainWindow StartupNotify Terminal \ contained nextgroup=dtDelim if s:desktop_enable_kde syn match dtBoolean \ /^ReadOnly\s*=\s*\%(true\|false\)/ \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent syn keyword dtBooleanKey \ ReadOnly \ contained nextgroup=dtDelim endif syn keyword dtBooleanValue true false contained " Numeric Value {{{2 " icon theme syn match dtNumeric /^\%(MaxSize\|MinSize\|Size\|Threshold\)\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal syn keyword dtNumericKey \ MaxSize MinSize Size Threshold \ contained nextgroup=dtDelim if s:desktop_enable_kde syn match dtNumeric /^InitialPreference\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal syn keyword dtNumericKey \ InitialPreference \ contained nextgroup=dtDelim endif syn match dtNumericDecimal /\<\d\+$/ contained " String Value {{{2 syn match dtString \ /^\%(Actions\|Implements\|MimeType\|NotShowIn\|OnlyShowIn\|Path\|StartupWMClass\|URL\)\s*=.*\S/ \ contains=dtStringKey,dtDelim transparent syn keyword dtStringKey \ Actions Implements MimeType NotShowIn OnlyShowIn Path StartupWMClass URL Version \ contained nextgroup=dtDelim " icon theme syn match dtString \ /^\%(Context\|Directories\|Example\|Inherits\)\s*=.*\S/ \ contains=dtStringKey,dtDelim transparent syn keyword dtStringKey \ Context Directories Example Inherits \ contained nextgroup=dtDelim if s:desktop_enable_kde syn match dtString \ /^\%(Dev\|DocPath\|FSType\|MountPoint\|ServiceTypes\)\s*=.*\S/ \ contains=dtStringKey,dtDelim transparent syn keyword dtStringKey \ Dev DocPath FSType MountPoint ServiceTypes \ contained nextgroup=dtDelim endif " Categories {{{3 " https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry syn match dtCategories /^Categories\s*=.\+\S/ contains=dtCategoriesKey,dtDelim,dtCategoriesValue transparent syn keyword dtCategoriesKey \ Categories \ contained nextgroup=dtDelim " Main Categories syn keyword dtCategoriesValue \ Audio AudioVideo Development Education Game Graphics Network Office \ Settings System Utility Video \ contained " Additional Categories syn keyword dtCategoriesValue \ BoardGame Chat Clock Geoscience Presentation 2DGraphics 3DGraphics \ Accessibility ActionGame AdventureGame Amusement ArcadeGame Archiving \ Art ArtificialIntelligence Astronomy AudioVideoEditing Biology \ BlocksGame BoardGame Building Calculator Calendar CardGame Chart Chat \ Chemistry Clock Compression ComputerScience ConsoleOnly Construction \ ContactManagement Core DataVisualization Database Debugger \ DesktopSettings Dialup Dictionary DiscBurning Documentation Economy \ Electricity Electronics Email Emulator Engineering FileManager \ FileTools FileTransfer Filesystem Finance FlowChart GNOME GTK \ GUIDesigner Geography Geology Geoscience HamRadio HardwareSettings \ History IDE IRCClient ImageProcessing InstantMessaging Java KDE \ KidsGame Languages Literature LogicGame Math MedicalSoftware Midi \ Mixer Monitor Motif Music News NumericalAnalysis OCR P2P PDA \ PackageManager ParallelComputing Photography Physics Player \ Presentation Printing Profiling ProjectManagement Publishing Qt \ RasterGraphics Recorder RemoteAccess RevisionControl Robotics \ RolePlaying Scanning Science Security Sequencer Simulation Sports \ SportsGame Spreadsheet StrategyGame TV Telephony TelephonyTools \ TerminalEmulator TextEditor TextTools Translation Tuner VectorGraphics \ VideoConference Viewer WebBrowser WebDevelopment WordProcessor \ contained " Reserved Category syn keyword dtCategoriesValue \ Applet Screensaver Shell TrayIcon \ contained " Exec/TryExec {{{3 syn match dtExec /^\%(Exec\|TryExec\)\s*=.\+\S/ contains=dtExecKey,dtDelim,dtExecParam transparent syn keyword dtExecKey \ Exec TryExec \ contained nextgroup=dtDelim " code for file(s), URL(s), etc syn match dtExecParam /\s\zs%[fFuUick]\ze\%(\W\|$\)/ contained " Type {{{3 syn match dtType /^Type\s*=\s*\S\+/ contains=dtTypeKey,dtDelim,dtTypeValue transparent syn keyword dtTypeKey \ Type \ contained nextgroup=dtDelim syn keyword dtTypeValue \ Application Directory Link \ contained if s:desktop_enable_kde syn keyword dtTypeValue \ FSDevice Service ServiceType \ contained endif " Version {{{3 syn match dtVersion /^Version\s*=\s*\S\+/ contains=dtVersionKey,dtDelim,dtVersionValue transparent syn keyword dtVersionKey \ Version \ contained nextgroup=dtDelim syn match dtVersionValue /[0-9]\+\%(\.[0-9]\+\)\{1,2}$/ contained " Localestring Value {{{2 syn match dtLocalestring \ /^\%(Comment\|GenericName\|Keywords\|Name\)\%(\[.\{-}\]\)\?\s*=.*\S/ \ contains=dtLocalestringKey,dtLocaleSuffix,dtDelim transparent syn keyword dtLocalestringKey \ Comment GenericName Keywords Name \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite " Iconstring Value {{{2 syn match dtIconstring \ /^Icon\s*=.*\S/ \ contains=dtIconstringKey,dtDelim transparent syn keyword dtIconstringKey \ Icon \ contained nextgroup=dtDelim skipwhite if s:desktop_enable_kde syn match dtIconstring \ /^UnmountIcon\>\%(\[.\{-}\]\)\?\s*=.*\S/ \ contains=dtIconstringKey,dtLocaleSuffix,dtDelim transparent syn keyword dtIconstringKey \ UnmountIcon \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite endif " X-Extension {{{2 syn match dtXExtension /^X-[0-9A-Za-z-]*\%(\[.\{-}\]\)\?\s*=.*\S/ \ contains=dtXExtensionKey,dtLocaleSuffix,dtDelim transparent syn match dtXExtensionKey /^X-[0-9A-Za-z-]*/ contained nextgroup=dtLocaleSuffix,dtDelim " non standard {{{2 if s:desktop_enable_nonstd syn match dtNonStdLabel /^[0-9A-Za-z-]\+\%(\[.\{-}\]\)\?\s*=.*\S/ \ contains=dtNonStdLabelKey,dtLocaleSuffix,dtDelim transparent syn match dtNonStdLabelKey /^[0-9A-Za-z-]\+/ contained nextgroup=dtLocaleSuffix,dtDelim endif " Highlight {{{1 hi def link dtComment Comment hi def link dtError Error hi def link dtGroup Special hi def link dtDelim Delimiter hi def link dtLocaleSuffix Identifier hi def link dtBooleanKey Type hi def link dtBooleanValue Boolean hi def link dtNumericKey Type hi def link dtNumericDecimal Number hi def link dtStringKey Type hi def link dtCategoriesKey Type hi def link dtCategoriesValue Constant hi def link dtExecKey Type hi def link dtExecParam Special hi def link dtTypeKey Type hi def link dtTypeValue Constant hi def link dtVersionKey Type hi def link dtVersionValue Constant hi def link dtLocalestringKey Type hi def link dtIconStringKey Type hi def link dtXExtensionKey Type hi def link dtNonStdLabelKey Type " Clean Up {{{1 let b:current_syntax = "desktop" let &cpo = s:cpo_save " vim:ts=8:sw=2:fdm=marker