neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

desktop.vim (9384B)


      1 " Vim syntax file
      2 " Language: XDG desktop entry
      3 " Filenames: *.desktop, *.directory
      4 " Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com )
      5 " Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
      6 " Last Change: 2022 Sep 22
      7 " Version Info: desktop.vim 1.5
      8 " References:
      9 " - https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.5.html (2020-04-27)
     10 " - https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-0.11.html (2006-02-07)
     11 
     12 " quit when a syntax file was already loaded
     13 if exists("b:current_syntax")
     14  finish
     15 endif
     16 
     17 let s:cpo_save = &cpo
     18 set cpo&vim
     19 syn case match
     20 
     21 " Variable {{{1
     22 " This syntax file can be used to all *nix configuration files similar to dos
     23 " ini format (eg. .xawtv, .radio, kde rc files) - this is default mode.
     24 " By default strict following of freedesktop.org standard is enforced.
     25 " To highlight nonstandard extensions that does not begin with X-, set
     26 "   let g:desktop_enable_nonstd = v:true
     27 " Note that this may cause wrong highlight.
     28 " To highlight KDE-reserved features, set
     29 "   let g:desktop_enable_kde = v:true
     30 " g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied
     31 
     32 if exists("g:desktop_enable_nonstd") && g:desktop_enable_nonstd
     33  let s:desktop_enable_nonstd = v:true
     34 else
     35  let s:desktop_enable_nonstd = v:false
     36 endif
     37 
     38 if exists("g:desktop_enable_kde") && g:desktop_enable_kde || s:desktop_enable_nonstd
     39  let s:desktop_enable_kde = v:true
     40 else
     41  let s:desktop_enable_kde = v:false
     42 endif
     43 
     44 " Comment {{{1
     45 syn match dtComment /^#.*$/
     46 
     47 " Error {{{1
     48 syn match dtError /\%(^\s.*\|\s\+$\)/
     49 
     50 " Group Header {{{1
     51 " ASCII printable characters except for brackets [ (0x5B) and ] (0x5D)
     52 syn match dtGroup /^\[[\x20-\x5A\x5C\x5E-\x7E]\+\]$/
     53 
     54 " Entries {{{1
     55 syn match dtDelim /=/ contained
     56 " lang_territory.codeset@modifier
     57 syn match dtLocaleSuffix
     58      \ /\[\%(C\|POSIX\|[a-z]\{2,4}\%(_[A-Z0-9]\{2,3}\)\?\)\%(\.[A-Za-z0-9_-]\+\)\?\%(@[A-Za-z]\+\)\?\]\ze\s*=/
     59      \ contained
     60 
     61 " Boolean Value {{{2
     62 syn match   dtBoolean
     63      \ /^\%(DBusActivatable\|Hidden\|NoDisplay\|PrefersNonDefaultGPU\|SingleMainWindow\|StartupNotify\|Terminal\)\s*=\s*\%(true\|false\)/
     64      \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent
     65 syn keyword dtBooleanKey
     66      \ DBusActivatable Hidden NoDisplay PrefersNonDefaultGPU SingleMainWindow StartupNotify Terminal
     67      \ contained nextgroup=dtDelim
     68 
     69 if s:desktop_enable_kde
     70  syn match   dtBoolean
     71        \ /^ReadOnly\s*=\s*\%(true\|false\)/
     72        \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent
     73  syn keyword dtBooleanKey
     74        \ ReadOnly
     75        \ contained nextgroup=dtDelim
     76 endif
     77 syn keyword dtBooleanValue true false contained
     78 
     79 " Numeric Value {{{2
     80 " icon theme
     81 syn match   dtNumeric /^\%(MaxSize\|MinSize\|Size\|Threshold\)\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal
     82 syn keyword dtNumericKey
     83      \ MaxSize MinSize Size Threshold
     84      \ contained nextgroup=dtDelim
     85 
     86 if s:desktop_enable_kde
     87  syn match   dtNumeric /^InitialPreference\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal
     88  syn keyword dtNumericKey
     89        \ InitialPreference
     90        \ contained nextgroup=dtDelim
     91 endif
     92 
     93 syn match   dtNumericDecimal /\<\d\+$/ contained
     94 
     95 " String Value {{{2
     96 syn match   dtString
     97      \ /^\%(Actions\|Implements\|MimeType\|NotShowIn\|OnlyShowIn\|Path\|StartupWMClass\|URL\)\s*=.*\S/
     98      \ contains=dtStringKey,dtDelim transparent
     99 syn keyword dtStringKey
    100      \ Actions Implements MimeType NotShowIn OnlyShowIn Path StartupWMClass URL Version
    101      \ contained nextgroup=dtDelim
    102 
    103 " icon theme
    104 syn match   dtString
    105      \ /^\%(Context\|Directories\|Example\|Inherits\)\s*=.*\S/
    106      \ contains=dtStringKey,dtDelim transparent
    107 syn keyword dtStringKey
    108      \ Context Directories Example Inherits
    109      \ contained nextgroup=dtDelim
    110 
    111 if s:desktop_enable_kde
    112  syn match   dtString
    113        \ /^\%(Dev\|DocPath\|FSType\|MountPoint\|ServiceTypes\)\s*=.*\S/
    114        \ contains=dtStringKey,dtDelim transparent
    115  syn keyword dtStringKey
    116        \ Dev DocPath FSType MountPoint ServiceTypes
    117        \ contained nextgroup=dtDelim
    118 endif
    119 
    120 " Categories {{{3
    121 " https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry
    122 syn match   dtCategories /^Categories\s*=.\+\S/ contains=dtCategoriesKey,dtDelim,dtCategoriesValue transparent
    123 syn keyword dtCategoriesKey
    124      \ Categories
    125      \ contained nextgroup=dtDelim
    126 
    127 " Main Categories
    128 syn keyword dtCategoriesValue
    129      \ Audio AudioVideo Development Education Game Graphics Network Office
    130      \ Settings System Utility Video
    131      \ contained
    132 
    133 " Additional Categories
    134 syn keyword dtCategoriesValue
    135      \ BoardGame Chat Clock Geoscience Presentation 2DGraphics 3DGraphics
    136      \ Accessibility ActionGame AdventureGame Amusement ArcadeGame Archiving
    137      \ Art ArtificialIntelligence Astronomy AudioVideoEditing Biology
    138      \ BlocksGame BoardGame Building Calculator Calendar CardGame Chart Chat
    139      \ Chemistry Clock Compression ComputerScience ConsoleOnly Construction
    140      \ ContactManagement Core DataVisualization Database Debugger
    141      \ DesktopSettings Dialup Dictionary DiscBurning Documentation Economy
    142      \ Electricity Electronics Email Emulator Engineering FileManager
    143      \ FileTools FileTransfer Filesystem Finance FlowChart GNOME GTK
    144      \ GUIDesigner Geography Geology Geoscience HamRadio HardwareSettings
    145      \ History IDE IRCClient ImageProcessing InstantMessaging Java KDE
    146      \ KidsGame Languages Literature LogicGame Math MedicalSoftware Midi
    147      \ Mixer Monitor Motif Music News NumericalAnalysis OCR P2P PDA
    148      \ PackageManager ParallelComputing Photography Physics Player
    149      \ Presentation Printing Profiling ProjectManagement Publishing Qt
    150      \ RasterGraphics Recorder RemoteAccess RevisionControl Robotics
    151      \ RolePlaying Scanning Science Security Sequencer Simulation Sports
    152      \ SportsGame Spreadsheet StrategyGame TV Telephony TelephonyTools
    153      \ TerminalEmulator TextEditor TextTools Translation Tuner VectorGraphics
    154      \ VideoConference Viewer WebBrowser WebDevelopment WordProcessor
    155      \ contained
    156 
    157 " Reserved Category
    158 syn keyword dtCategoriesValue
    159      \ Applet Screensaver Shell TrayIcon
    160      \ contained
    161 
    162 " Exec/TryExec {{{3
    163 syn match   dtExec /^\%(Exec\|TryExec\)\s*=.\+\S/ contains=dtExecKey,dtDelim,dtExecParam transparent
    164 syn keyword dtExecKey
    165      \ Exec TryExec
    166      \ contained nextgroup=dtDelim
    167 " code for file(s), URL(s), etc
    168 syn match   dtExecParam  /\s\zs%[fFuUick]\ze\%(\W\|$\)/ contained
    169 
    170 " Type {{{3
    171 syn match   dtType /^Type\s*=\s*\S\+/ contains=dtTypeKey,dtDelim,dtTypeValue transparent
    172 syn keyword dtTypeKey
    173      \ Type
    174      \ contained nextgroup=dtDelim
    175 syn keyword dtTypeValue
    176      \ Application Directory Link
    177      \ contained
    178 
    179 if s:desktop_enable_kde
    180  syn keyword dtTypeValue
    181        \ FSDevice Service ServiceType
    182        \ contained
    183 endif
    184 
    185 
    186 " Version {{{3
    187 syn match   dtVersion /^Version\s*=\s*\S\+/ contains=dtVersionKey,dtDelim,dtVersionValue transparent
    188 syn keyword dtVersionKey
    189      \ Version
    190      \ contained nextgroup=dtDelim
    191 syn match   dtVersionValue /[0-9]\+\%(\.[0-9]\+\)\{1,2}$/ contained
    192 
    193 " Localestring Value {{{2
    194 syn match   dtLocalestring
    195      \ /^\%(Comment\|GenericName\|Keywords\|Name\)\%(\[.\{-}\]\)\?\s*=.*\S/
    196      \ contains=dtLocalestringKey,dtLocaleSuffix,dtDelim transparent
    197 syn keyword dtLocalestringKey
    198      \ Comment GenericName Keywords Name
    199      \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite
    200 
    201 " Iconstring Value {{{2
    202 syn match   dtIconstring
    203      \ /^Icon\s*=.*\S/
    204      \ contains=dtIconstringKey,dtDelim transparent
    205 syn keyword dtIconstringKey
    206      \ Icon
    207      \ contained nextgroup=dtDelim skipwhite
    208 
    209 if s:desktop_enable_kde
    210  syn match   dtIconstring
    211        \ /^UnmountIcon\>\%(\[.\{-}\]\)\?\s*=.*\S/
    212        \ contains=dtIconstringKey,dtLocaleSuffix,dtDelim transparent
    213  syn keyword dtIconstringKey
    214        \ UnmountIcon
    215        \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite
    216 endif
    217 
    218 " X-Extension {{{2
    219 syn match   dtXExtension    /^X-[0-9A-Za-z-]*\%(\[.\{-}\]\)\?\s*=.*\S/
    220      \ contains=dtXExtensionKey,dtLocaleSuffix,dtDelim transparent
    221 syn match   dtXExtensionKey /^X-[0-9A-Za-z-]*/ contained nextgroup=dtLocaleSuffix,dtDelim
    222 
    223 " non standard {{{2
    224 if s:desktop_enable_nonstd
    225  syn match dtNonStdLabel    /^[0-9A-Za-z-]\+\%(\[.\{-}\]\)\?\s*=.*\S/
    226        \ contains=dtNonStdLabelKey,dtLocaleSuffix,dtDelim transparent
    227  syn match dtNonStdLabelKey /^[0-9A-Za-z-]\+/ contained nextgroup=dtLocaleSuffix,dtDelim
    228 endif
    229 
    230 " Highlight {{{1
    231 hi def link dtComment		Comment
    232 hi def link dtError		Error
    233 
    234 hi def link dtGroup		Special
    235 
    236 hi def link dtDelim		Delimiter
    237 hi def link dtLocaleSuffix	Identifier
    238 
    239 hi def link dtBooleanKey	Type
    240 hi def link dtBooleanValue	Boolean
    241 
    242 hi def link dtNumericKey	Type
    243 hi def link dtNumericDecimal	Number
    244 
    245 hi def link dtStringKey		Type
    246 hi def link dtCategoriesKey	Type
    247 hi def link dtCategoriesValue	Constant
    248 hi def link dtExecKey		Type
    249 hi def link dtExecParam		Special
    250 hi def link dtTypeKey		Type
    251 hi def link dtTypeValue		Constant
    252 hi def link dtVersionKey	Type
    253 hi def link dtVersionValue	Constant
    254 
    255 hi def link dtLocalestringKey	Type
    256 
    257 hi def link dtIconStringKey	Type
    258 
    259 hi def link dtXExtensionKey	Type
    260 
    261 hi def link dtNonStdLabelKey	Type
    262 
    263 " Clean Up {{{1
    264 let b:current_syntax = "desktop"
    265 let &cpo = s:cpo_save
    266 
    267 " vim:ts=8:sw=2:fdm=marker