Mercurial > vim
view runtime/syntax/mp.vim @ 33399:95db67c7b754 v9.0.1958
patch 9.0.1958: cannot complete option values
Commit: https://github.com/vim/vim/commit/900894b09a95398dfc75599e9f0aa2ea25723384
Author: Yee Cheng Chin <ychin.git@gmail.com>
Date: Fri Sep 29 20:42:32 2023 +0200
patch 9.0.1958: cannot complete option values
Problem: cannot complete option values
Solution: Add completion functions for several options
Add cmdline tab-completion for setting string options
Add tab-completion for setting string options on the cmdline using
`:set=` (along with `:set+=` and `:set-=`).
The existing tab completion for setting options currently only works
when nothing is typed yet, and it only fills in with the existing value,
e.g. when the user does `:set diffopt=<Tab>` it will be completed to
`set diffopt=internal,filler,closeoff` and nothing else. This isn't too
useful as a user usually wants auto-complete to suggest all the possible
values, such as 'iblank', or 'algorithm:patience'.
For set= and set+=, this adds a new optional callback function for each
option that can be invoked when doing completion. This allows for each
option to have control over how completion works. For example, in
'diffopt', it will suggest the default enumeration, but if `algorithm:`
is selected, it will further suggest different algorithm types like
'meyers' and 'patience'. When using set=, the existing option value will
be filled in as the first choice to preserve the existing behavior. When
using set+= this won't happen as it doesn't make sense.
For flag list options (e.g. 'mouse' and 'guioptions'), completion will
take into account existing typed values (and in the case of set+=, the
existing option value) to make sure it doesn't suggest duplicates.
For set-=, there is a new `ExpandSettingSubtract` function which will
handle flag list and comma-separated options smartly, by only suggesting
values that currently exist in the option.
Note that Vim has some existing code that adds special handling for
'filetype', 'syntax', and misc dir options like 'backupdir'. This change
preserves them as they already work, instead of converting to the new
callback API for each option.
closes: #13182
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 29 Sep 2023 20:45:04 +0200 |
parents | 2acb87ee55fc |
children |
line wrap: on
line source
vim9script # Vim syntax file # Language: MetaPost # Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> # Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com> # Latest Revision: 2022 Aug 12 if exists("b:current_syntax") finish endif # Deprecation warnings: to be removed eventually if exists("g:plain_mp_macros") echomsg "[mp] g:plain_mp_macros is deprecated: use g:mp_plain_macros instead." endif if exists("mfplain_mp_macros") echomsg "[mp] g:mfplain_mp_macros is deprecated: use g:mp_mfplain_macros instead." endif if exists("other_mp_macros") echomsg "[mp] g:other_mp_macros is deprecated: use g:mp_other_macros instead." endif # Store the current values of METAFONT global options const mf_plain_macros = get(g:, "mf_plain_macros", get(g:, "plain_mf_macros", -1)) const mf_plain_modes = get(g:, "mf_plain_modes", get(g:, "plain_mf_modes", -1)) const mf_other_macros = get(g:, "mf_other_macros", get(g:, "other_mf_macros", -1)) g:mf_plain_macros = 0 # plain.mf has no special meaning for MetaPost g:mf_plain_modes = 0 # No METAFONT modes g:mf_other_macros = 0 # cmbase.mf, logo.mf, ... neither # Read the METAFONT syntax to start with runtime! syntax/mf.vim unlet b:current_syntax # Necessary for syn include below # Restore the value of existing global variables if mf_plain_macros == -1 unlet g:mf_plain_macros else g:plain_mf_macros = mf_plain_macros endif if mf_plain_modes == -1 unlet g:mf_plain_modes else g:mf_plain_modes = mf_plain_modes endif if mf_other_macros == -1 unlet g:mf_other_macros else g:mf_other_macros = mf_other_macros endif # Use TeX highlighting inside verbatimtex/btex... etex syn include @MPTeX syntax/tex.vim unlet b:current_syntax # These are defined as keywords rather than using matchgroup # in order to make them available to syntaxcomplete. syn keyword mpTeXdelim btex etex verbatimtex contained syn region mpTeXinsert matchgroup=mpTeXdelim start=/\<verbatimtex\>\|\<btex\>/ end=/\<etex\>/ keepend contains=@MPTeX,mpTeXdelim # iskeyword must be set after the syn include above, because tex.vim sets `syn # iskeyword`. Note that keywords do not contain numbers (numbers are # subscripts) syntax iskeyword @,_ # MetaPost primitives not found in METAFONT syn keyword mpBoolExp bounded clipped filled stroked textual arclength syn keyword mpNumExp arctime blackpart bluepart colormodel cyanpart syn keyword mpNumExp fontsize greenpart greypart magentapart redpart syn keyword mpPairExp yellowpart llcorner lrcorner ulcorner urcorner syn keyword mpPathExp envelope pathpart syn keyword mpPenExp penpart syn keyword mpPicExp dashpart glyph infont syn keyword mpStringExp fontpart readfrom textpart syn keyword mpType cmykcolor color rgbcolor # Other MetaPost primitives listed in the manual syn keyword mpPrimitive mpxbreak within # Internal quantities not found in METAFONT # (Table 6 in MetaPost: A User's Manual) syn keyword mpInternal defaultcolormodel hour minute linecap linejoin syn keyword mpInternal miterlimit mpprocset mpversion numberprecision syn keyword mpInternal numbersystem outputfilename outputformat syn keyword mpInternal outputformatoptions outputtemplate prologues syn keyword mpInternal restoreclipcolor tracinglostchars troffmode syn keyword mpInternal truecorners # List of commands not found in METAFONT (from MetaPost: A User's Manual) syn keyword mpCommand clip closefrom dashed filenametemplate fontmapfile syn keyword mpCommand fontmapline setbounds withcmykcolor withcolor syn keyword mpCommand withgreyscale withoutcolor withpostscript syn keyword mpCommand withprescript withrgbcolor write # METAFONT internal variables not found in MetaPost syn keyword notDefined autorounding chardx chardy fillin granularity syn keyword notDefined proofing smoothing tracingedges tracingpens syn keyword notDefined turningcheck xoffset yoffset # Suffix defined only in METAFONT: syn keyword notDefined nodot # Other not implemented primitives (see MetaPost: A User's Manual, §C.1) syn keyword notDefined cull display openwindow numspecial totalweight syn keyword notDefined withweight # Keywords defined by plain.mp if get(g:, "mp_plain_macros", get(g:, "plain_mp_macros", 1)) || get(b:, "mp_metafun", get(g:, "mp_metafun", 0)) syn keyword mpDef beginfig clear_pen_memory clearit clearpen clearpen syn keyword mpDef clearxy colorpart cutdraw downto draw drawarrow syn keyword mpDef drawdblarrow drawdot drawoptions endfig erase syn keyword mpDef exitunless fill filldraw flex gobble hide interact syn keyword mpDef label loggingall makelabel numtok penstroke pickup syn keyword mpDef range reflectedabout rotatedaround shipit syn keyword mpDef stop superellipse takepower tracingall tracingnone syn keyword mpDef undraw undrawdot unfill unfilldraw upto syn match mpDef "???" syn keyword mpVardef arrowhead bbox bot buildcycle byte ceiling center syn keyword mpVardef counterclockwise decr dir direction directionpoint syn keyword mpVardef dotlabel dotlabels image incr interpath inverse syn keyword mpVardef labels lft magstep max min penlabels penpos round syn keyword mpVardef rt savepen solve tensepath thelabel top unitvector syn keyword mpVardef whatever z syn keyword mpPrimaryDef div dotprod gobbled mod syn keyword mpSecondaryDef intersectionpoint syn keyword mpTertiaryDef cutafter cutbefore softjoin thru syn keyword mpNewInternal ahangle ahlength bboxmargin beveled butt defaultpen syn keyword mpNewInternal defaultscale dotlabeldiam eps epsilon infinity syn keyword mpNewInternal join_radius labeloffset mitered pen_bot pen_lft syn keyword mpNewInternal pen_rt pen_top rounded squared tolerance # Predefined constants syn keyword mpConstant EOF background base_name base_version black syn keyword mpConstant blankpicture blue ditto down evenly fullcircle syn keyword mpConstant green halfcircle identity left origin penrazor syn keyword mpConstant penspeck pensquare quartercircle red right syn keyword mpConstant unitsquare up white withdots # Other predefined variables syn keyword mpVariable currentpen currentpen_path currentpicture cuttings syn keyword mpVariable defaultfont extra_beginfig extra_endfig syn keyword mpVariable laboff labxf labyf laboff labxf labyf syn match mpVariable /\.\%(lft\|rt\|bot\|top\|ulft\|urt\|llft\|lrt\)\>/ # let statements: syn keyword mpnumExp abs syn keyword mpDef rotatedabout syn keyword mpCommand bye relax # on and off are not technically keywords, but it is nice to highlight them # inside dashpattern(). syn keyword mpOnOff off on contained syn keyword mpDash dashpattern contained syn region mpDashPattern start="dashpattern\s*" end=")"he=e-1 contains=mfNumeric,mfLength,mpOnOff,mpDash endif # Keywords defined by mfplain.mp if get(g:, "mp_mfplain_macros", get(g:, "mfplain_mp_macros", 0)) syn keyword mpDef beginchar capsule_def change_width syn keyword mpDef define_blacker_pixels define_corrected_pixels syn keyword mpDef define_good_x_pixels define_good_y_pixels syn keyword mpDef define_horizontal_corrected_pixels define_pixels syn keyword mpDef define_whole_blacker_pixels define_whole_pixels syn keyword mpDef define_whole_vertical_blacker_pixels syn keyword mpDef define_whole_vertical_pixels endchar syn keyword mpDef font_coding_scheme font_extra_space font_identifier syn keyword mpDef font_normal_shrink font_normal_space syn keyword mpDef font_normal_stretch font_quad font_size font_slant syn keyword mpDef font_x_height italcorr labelfont lowres_fix makebox syn keyword mpDef makegrid maketicks mode_def mode_setup proofrule syn keyword mpDef smode syn keyword mpVardef hround proofrulethickness vround syn keyword mpNewInternal blacker o_correction syn keyword mpVariable extra_beginchar extra_endchar extra_setup rulepen # plus some no-ops, also from mfplain.mp syn keyword mpDef cull cullit gfcorners imagerules nodisplays syn keyword mpDef notransforms openit proofoffset screenchars syn keyword mpDef screenrule screenstrokes showit syn keyword mpVardef grayfont slantfont titlefont syn keyword mpVariable currenttransform syn keyword mpConstant unitpixel # These are not listed in the MetaPost manual, and some are ignored by # MetaPost, but are nonetheless defined in mfplain.mp syn keyword mpDef killtext syn match mpVardef "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>" syn keyword mpVariable aspect_ratio localfont mag mode mode_name syn keyword mpVariable proofcolor syn keyword mpConstant lowres proof smoke syn keyword mpNewInternal autorounding bp_per_pixel granularity syn keyword mpNewInternal number_of_modes proofing smoothing turningcheck endif # Keywords defined by all base macro packages: # - (r)boxes.mp # - format.mp # - graph.mp # - marith.mp # - sarith.mp # - string.mp # - TEX.mp if get(g:, "mp_other_macros", get(g:, "other_mp_macros", 1)) # boxes and rboxes syn keyword mpDef boxjoin drawboxed drawboxes drawunboxed syn keyword mpNewInternal circmargin defaultdx defaultdy rbox_radius syn keyword mpVardef boxit bpath circleit fixpos fixsize generic_declare syn keyword mpVardef generic_redeclare generisize pic rboxit str_prefix # format syn keyword mpVardef Mformat format init_numbers roundd syn keyword mpVariable Fe_base Fe_plus syn keyword mpConstant Ten_to # graph syn keyword mpDef Gfor Gxyscale OUT auto begingraph endgraph gdata syn keyword mpDef gdraw gdrawarrow gdrawdblarrow gfill plot syn keyword mpVardef augment autogrid frame gdotlabel glabel grid itick syn keyword mpVardef otick syn keyword mpVardef Mreadpath setcoords setrange syn keyword mpNewInternal Gmarks Gminlog Gpaths linear log syn keyword mpVariable Autoform Gemarks Glmarks Gumarks syn keyword mpConstant Gtemplate syn match mpVariable /Gmargin\.\%(low\|high\)/ # marith syn keyword mpVardef Mabs Meform Mexp Mexp_str Mlog Mlog_Str Mlog_str syn keyword mpPrimaryDef Mdiv Mmul syn keyword mpSecondaryDef Madd Msub syn keyword mpTertiaryDef Mleq syn keyword mpNewInternal Mten Mzero # sarith syn keyword mpVardef Sabs Scvnum syn keyword mpPrimaryDef Sdiv Smul syn keyword mpSecondaryDef Sadd Ssub syn keyword mpTertiaryDef Sleq Sneq # string syn keyword mpVardef cspan isdigit loptok # TEX syn keyword mpVardef TEX TEXPOST TEXPRE endif if get(b:, "mp_metafun", get(g:, "mp_metafun", 0)) # MetaFun additions to MetaPost base file syn keyword mpConstant cyan magenta yellow syn keyword mpConstant penspec syn keyword mpNumExp graypart greycolor graycolor # Highlight TeX keywords (for MetaPost embedded in ConTeXt documents) syn match mpTeXKeyword '\\[a-zA-Z@]\+' syn keyword mpPrimitive runscript runtime! syntax/shared/context-data-metafun.vim hi def link metafunCommands Statement hi def link metafunInternals Identifier endif # Define the default highlighting hi def link mpTeXdelim mpPrimitive hi def link mpBoolExp mfBoolExp hi def link mpNumExp mfNumExp hi def link mpPairExp mfPairExp hi def link mpPathExp mfPathExp hi def link mpPenExp mfPenExp hi def link mpPicExp mfPicExp hi def link mpStringExp mfStringExp hi def link mpInternal mfInternal hi def link mpCommand mfCommand hi def link mpType mfType hi def link mpPrimitive mfPrimitive hi def link mpDef mfDef hi def link mpVardef mpDef hi def link mpPrimaryDef mpDef hi def link mpSecondaryDef mpDef hi def link mpTertiaryDef mpDef hi def link mpNewInternal mpInternal hi def link mpVariable mfVariable hi def link mpConstant mfConstant hi def link mpOnOff mpPrimitive hi def link mpDash mpPrimitive hi def link mpTeXKeyword Identifier b:current_syntax = "mp" # vim: sw=2 fdm=marker