summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/desktop.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-14 17:29:55 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-14 17:29:55 +0200
commit65e0d77a66b7e50beb562ad554ace46c32ef8f0f (patch)
tree3755acc8d00557462fbb2b5970422fd2600acc12 /runtime/syntax/desktop.vim
parent8e20f75e58f4879308b0011b468ef928a3f93085 (diff)
Update runtime files
Diffstat (limited to 'runtime/syntax/desktop.vim')
-rw-r--r--runtime/syntax/desktop.vim306
1 files changed, 233 insertions, 73 deletions
diff --git a/runtime/syntax/desktop.vim b/runtime/syntax/desktop.vim
index 915107887a..2c1102238d 100644
--- a/runtime/syntax/desktop.vim
+++ b/runtime/syntax/desktop.vim
@@ -1,107 +1,267 @@
" Vim syntax file
-" Language: .desktop, .directory files
-" according to freedesktop.org specification 0.9.4
-" http://pdx.freedesktop.org/Standards/desktop-entry-spec/desktop-entry-spec-0.9.4.html
-" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change: 2016 Apr 02
-" (added "Keywords")
-" Version Info: desktop.vim 0.9.4-1.2
+" 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: 2020-06-11
+" 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
+ 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. But
-" you can also enforce strict following of freedesktop.org standard for
-" .desktop and .directory files . Set (eg. in vimrc)
-" let enforce_freedesktop_standard = 1
-" and nonstandard extensions not following X- notation will not be highlighted.
-if exists("enforce_freedesktop_standard")
- let b:enforce_freedesktop_standard = 1
+" 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 b:enforce_freedesktop_standard = 0
+ let s:desktop_enable_nonstd = v:false
endif
-" case on
-syn case match
+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 /^#.*$/
-" General
-if b:enforce_freedesktop_standard == 0
- syn match dtNotStLabel "^.\{-}=\@=" nextgroup=dtDelim
+" 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\|StartupNotify\|Terminal\)\s*=\s*\%(true\|false\)/
+ \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent
+syn keyword dtBooleanKey
+ \ DBusActivatable Hidden NoDisplay PrefersNonDefaultGPU 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
-syn match dtGroup /^\s*\[.*\]/
-syn match dtComment /^\s*#.*$/
-syn match dtDelim /=/ 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
-" Locale
-syn match dtLocale /^\s*\<\(Name\|GenericName\|Comment\|SwallowTitle\|Icon\|UnmountIcon\)\>.*/ contains=dtLocaleKey,dtLocaleName,dtDelim transparent
-syn keyword dtLocaleKey Name GenericName Comment SwallowTitle Icon UnmountIcon nextgroup=dtLocaleName containedin=dtLocale
-syn match dtLocaleName /\(\[.\{-}\]\s*=\@=\|\)/ nextgroup=dtDelim containedin=dtLocale contained
+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
-" Numeric
-syn match dtNumeric /^\s*\<Version\>/ contains=dtNumericKey,dtDelim
-syn keyword dtNumericKey Version nextgroup=dtDelim containedin=dtNumeric 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
-" Boolean
-syn match dtBoolean /^\s*\<\(StartupNotify\|ReadOnly\|Terminal\|Hidden\|NoDisplay\)\>.*/ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent
-syn keyword dtBooleanKey StartupNotify ReadOnly Terminal Hidden NoDisplay nextgroup=dtDelim containedin=dtBoolean contained
-syn keyword dtBooleanValue true false containedin=dtBoolean contained
+" 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
-" String
-syn match dtString /^\s*\<\(Encoding\|Icon\|Path\|Actions\|FSType\|MountPoint\|UnmountIcon\|URL\|Keywords\|Categories\|OnlyShowIn\|NotShowIn\|StartupWMClass\|FilePattern\|MimeType\)\>.*/ contains=dtStringKey,dtDelim transparent
-syn keyword dtStringKey Type Encoding TryExec Exec Path Actions FSType MountPoint URL Keywords Categories OnlyShowIn NotShowIn StartupWMClass FilePattern MimeType nextgroup=dtDelim containedin=dtString contained
+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
-" Exec
-syn match dtExec /^\s*\<\(Exec\|TryExec\|SwallowExec\)\>.*/ contains=dtExecKey,dtDelim,dtExecParam transparent
-syn keyword dtExecKey Exec TryExec SwallowExec nextgroup=dtDelim containedin=dtExec contained
-syn match dtExecParam /%[fFuUnNdDickv]/ containedin=dtExec contained
+" 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
-" Type
-syn match dtType /^\s*\<Type\>.*/ contains=dtTypeKey,dtDelim,dtTypeValue transparent
-syn keyword dtTypeKey Type nextgroup=dtDelim containedin=dtType contained
-syn keyword dtTypeValue Application Link FSDevice Directory containedin=dtType contained
+" Main Categories
+syn keyword dtCategoriesValue
+ \ Audio AudioVideo Development Education Game Graphics Network Office
+ \ Settings System Utility Video
+ \ contained
-" X-Addition
-syn match dtXAdd /^\s*X-.*/ contains=dtXAddKey,dtDelim transparent
-syn match dtXAddKey /^\s*X-.\{-}\s*=\@=/ nextgroup=dtDelim containedin=dtXAdd contains=dtXLocale 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
-" Locale for X-Addition
-syn match dtXLocale /\[.\{-}\]\s*=\@=/ containedin=dtXAddKey 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
-" Locale for all
-syn match dtALocale /\[.\{-}\]\s*=\@=/ containedin=ALL
+" Highlight {{{1
+hi def link dtComment Comment
+hi def link dtError Error
+hi def link dtGroup Special
-" Define the default highlighting.
-" Only when an item doesn't have highlighting yet
+hi def link dtDelim Delimiter
+hi def link dtLocaleSuffix Identifier
-hi def link dtGroup Special
-hi def link dtComment Comment
-hi def link dtDelim String
+hi def link dtBooleanKey Type
+hi def link dtBooleanValue Boolean
-hi def link dtLocaleKey Type
-hi def link dtLocaleName Identifier
-hi def link dtXLocale Identifier
-hi def link dtALocale Identifier
+hi def link dtNumericKey Type
+hi def link dtNumericDecimal Number
-hi def link dtNumericKey Type
+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 dtBooleanKey Type
-hi def link dtBooleanValue Constant
+hi def link dtLocalestringKey Type
-hi def link dtStringKey Type
+hi def link dtIconStringKey Type
-hi def link dtExecKey Type
-hi def link dtExecParam Special
-hi def link dtTypeKey Type
-hi def link dtTypeValue Constant
-hi def link dtNotStLabel Type
-hi def link dtXAddKey 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
+" vim:ts=8:sw=2:fdm=marker