view runtime/syntax/readline.vim @ 33674:021e5bb88513 v9.0.2074

patch 9.0.2074: Completion menu may be wrong Commit: https://github.com/vim/vim/commit/daef8c74375141974d61b85199b383017644978c Author: Christian Brabandt <cb@256bit.org> Date: Fri Oct 27 19:16:26 2023 +0200 patch 9.0.2074: Completion menu may be wrong Problem: Completion menu may be wrong Solution: Check for the original direction of the completion menu, add more tests, make it work with 'noselect' completion: move in right direction when filling completion_info() When moving through the insert completion menu and switching directions, we need to make sure we start at the correct position in the list and move correctly forward/backwards through it, so that we do not skip entries and the selected item points to the correct entry in the list of completion entries generated by the completion_info() function. The general case is this: 1) CTRL-X CTRL-N, we will traverse the list starting from compl_first_match and then go forwards (using the cp->next pointer) through the list (skipping the very first entry, which has the CP_ORIGINAL_TEXT flag set (since that is the empty/non-selected entry 2) CTRL-X CTRL-P, we will traverse the list starting from compl_first_match (which now points to the last entry). The previous entry will have the CP_ORIGINAL_TEXT flag set, so we need to start traversing the list from the second prev pointer. There are in fact 2 special cases after starting the completion menu with CTRL-X: 3) CTRL-N and then going backwards by pressing CTRL-P again. compl_first_match will point to the same entry as in step 1 above, but since compl_dir_foward() has been switched by pressing CTRL-P to backwards we need to pretend to be in still in case 1 and still traverse the list in forward direction using the cp_next pointer 4) CTRL-P and then going forwards by pressing CTRL-N again. compl_first_match will point to the same entry as in step 2 above, but since compl_dir_foward() has been switched by pressing CTRL-N to forwards we need to pretend to be in still in case 2 and still traverse the list in backward direction using the cp_prev pointer For the 'noselect' case however, this is slightly different again. When going backwards, we only need to go one cp_prev pointer back. And resting of the direction works again slightly different. So we need to take the noselect option into account when deciding in which direction to iterate through the list of matches. related: #13402 related: #12971 closes: #13408 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Fri, 27 Oct 2023 19:30:05 +0200
parents 2f7e67dd088c
children
line wrap: on
line source

" Vim syntax file
" Language:             readline(3) configuration file
" Maintainer:           Daniel Moch <daniel@danielmoch.com>
" Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
" Latest Revision:      2018-07-26
"                       Add new functions for Readline 7 / Bash 4.4
"                       (credit: Github user bewuethr)

if exists('b:current_syntax')
  finish
endif

let s:cpo_save = &cpo
set cpo&vim

setlocal iskeyword+=-

syn match   readlineKey         contained
                              \ '\S'
                              \ nextgroup=readlineKeyTerminator

syn match   readlineBegin       display '^'
                              \ nextgroup=readlineComment,
                              \           readlineConditional,
                              \           readlineInclude,
                              \           readlineKeyName,
                              \           readlineKey,
                              \           readlineKeySeq,
                              \           readlineKeyword
                              \ skipwhite

syn region  readlineComment     contained display oneline
                                \ start='#'
                                \ end='$'
                                \ contains=readlineTodo,
                                \          @Spell

syn keyword readlineTodo        contained
                              \ TODO
                              \ FIXME
                              \ XXX
                              \ NOTE

syn match   readlineConditional contained
                              \ '$if\>'
                              \ nextgroup=readlineTest,
                              \           readlineTestApp
                              \ skipwhite

syn keyword readlineTest        contained
                              \ mode
                              \ nextgroup=readlineTestModeEq

syn match   readlineTestModeEq  contained
                              \ '='
                              \ nextgroup=readlineEditingMode

syn keyword readlineTest        contained
                              \ term
                              \ nextgroup=readlineTestTermEq

syn match   readlineTestTermEq  contained
                              \ '='
                              \ nextgroup=readlineTestTerm

syn match   readlineTestTerm    contained
                              \ '\S\+'

syn match   readlineTestApp     contained
                              \ '\S\+'

syn match   readlineConditional contained display
                              \ '$\%(else\|endif\)\>'

syn match   readlineInclude     contained display
                              \ '$include\>'
                              \ nextgroup=readlinePath

syn match   readlinePath        contained display
                              \ '.\+'

syn case ignore
syn match   readlineKeyName     contained display
                              \ nextgroup=readlineKeySeparator,
                              \           readlineKeyTerminator
                              \ '\%(Control\|Del\|Esc\|Escape\|LFD\|Meta\|Newline\|Ret\|Return\|Rubout\|Space\|Spc\|Tab\)'
syn case match

syn match   readlineKeySeparator  contained
                                \ '-'
                                \ nextgroup=readlineKeyName,
                                \           readlineKey

syn match   readlineKeyTerminator contained
                                \ ':'
                                \ nextgroup=readlineFunction
                                \ skipwhite

syn region  readlineKeySeq     contained display oneline
                              \ start=+"+
                              \ skip=+\\\\\|\\"+
                              \ end=+"+
                              \ contains=readlineKeyEscape
                              \ nextgroup=readlineKeyTerminator

syn match   readlineKeyEscape   contained display
                              \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{2}\)+

syn keyword readlineKeyword     contained
                              \ set
                              \ nextgroup=readlineVariable
                              \ skipwhite

syn keyword readlineVariable    contained
                              \ nextgroup=readlineBellStyle
                              \ skipwhite
                              \ bell-style

syn keyword readlineVariable    contained
                              \ nextgroup=readlineBoolean
                              \ skipwhite
                              \ bind-tty-special-chars
                              \ blink-matching-paren
                              \ colored-completion-prefix
                              \ colored-stats
                              \ completion-ignore-case
                              \ completion-map-case
                              \ convert-meta
                              \ disable-completion
                              \ echo-control-characters
                              \ enable-bracketed-paste
                              \ enable-keypad
                              \ enable-meta-key
                              \ expand-tilde
                              \ history-preserve-point
                              \ horizontal-scroll-mode
                              \ input-meta
                              \ meta-flag
                              \ mark-directories
                              \ mark-modified-lines
                              \ mark-symlinked-directories
                              \ match-hidden-files
                              \ menu-complete-display-prefix
                              \ output-meta
                              \ page-completions
                              \ print-completions-horizontally
                              \ revert-all-at-newline
                              \ show-all-if-ambiguous
                              \ show-all-if-unmodified
                              \ show-mode-in-prompt
                              \ skip-completed-text
                              \ visible-stats

syn keyword readlineVariable    contained
                              \ nextgroup=readlineString
                              \ skipwhite
                              \ comment-begin
                              \ isearch-terminators
                              \ vi-cmd-mode-string
                              \ vi-ins-mode-string
                              \ emacs-mode-string

syn keyword readlineVariable    contained
                              \ nextgroup=readlineNumber
                              \ skipwhite
                              \ completion-display-width
                              \ completion-prefix-display-length
                              \ completion-query-items
                              \ history-size
                              \ keyseq-timeout

syn keyword readlineVariable    contained
                              \ nextgroup=readlineEditingMode
                              \ skipwhite
                              \ editing-mode

syn keyword readlineVariable    contained
                              \ nextgroup=readlineKeymap
                              \ skipwhite
                              \ keymap

syn keyword readlineBellStyle   contained
                              \ audible
                              \ visible
                              \ none

syn case ignore
syn keyword readlineBoolean     contained
                              \ on
                              \ off
syn case match

syn region  readlineString      contained display oneline
                              \ matchgroup=readlineStringDelimiter
                              \ start=+"+
                              \ skip=+\\\\\|\\"+
                              \ end=+"+

syn match   readlineNumber      contained display
                              \ '[+-]\d\+\>'

syn keyword readlineEditingMode contained
                              \ emacs
                              \ vi

syn match   readlineKeymap      contained display
                              \ 'emacs\%(-\%(standard\|meta\|ctlx\)\)\=\|vi\%(-\%(move\|command\|insert\)\)\='

syn keyword readlineFunction    contained
                              \ beginning-of-line
                              \ end-of-line
                              \ forward-char
                              \ backward-char
                              \ forward-word
                              \ backward-word
                              \ clear-screen
                              \ redraw-current-line
                              \
                              \ accept-line
                              \ previous-history
                              \ next-history
                              \ beginning-of-history
                              \ end-of-history
                              \ reverse-search-history
                              \ forward-search-history
                              \ non-incremental-reverse-search-history
                              \ non-incremental-forward-search-history
                              \ history-search-forward
                              \ history-search-backward
                              \ yank-nth-arg
                              \ yank-last-arg
                              \
                              \ delete-char
                              \ backward-delete-char
                              \ forward-backward-delete-char
                              \ quoted-insert
                              \ tab-insert
                              \ self-insert
                              \ transpose-chars
                              \ transpose-words
                              \ upcase-word
                              \ downcase-word
                              \ capitalize-word
                              \ overwrite-mode
                              \
                              \ kill-line
                              \ backward-kill-line
                              \ unix-line-discard
                              \ kill-whole-line
                              \ kill-word
                              \ backward-kill-word
                              \ unix-word-rubout
                              \ unix-filename-rubout
                              \ delete-horizontal-space
                              \ kill-region
                              \ copy-region-as-kill
                              \ copy-backward-word
                              \ copy-forward-word
                              \ yank
                              \ yank-pop
                              \
                              \ digit-argument
                              \ universal-argument
                              \
                              \ complete
                              \ possible-completions
                              \ insert-completions
                              \ menu-complete
                              \ menu-complete-backward
                              \ delete-char-or-list
                              \
                              \ start-kbd-macro
                              \ end-kbd-macro
                              \ call-last-kbd-macro
                              \ print-last-kbd-macro
                              \
                              \ re-read-init-file
                              \ abort
                              \ do-uppercase-version
                              \ prefix-meta
                              \ undo
                              \ revert-line
                              \ tilde-expand
                              \ set-mark
                              \ exchange-point-and-mark
                              \ character-search
                              \ character-search-backward
                              \ skip-csi-sequence
                              \ insert-comment
                              \ dump-functions
                              \ dump-variables
                              \ dump-macros
                              \ emacs-editing-mode
                              \ vi-editing-mode
                              \
                              \ vi-eof-maybe
                              \ vi-movement-mode
                              \ vi-undo
                              \ vi-match
                              \ vi-tilde-expand
                              \ vi-complete
                              \ vi-char-search
                              \ vi-redo
                              \ vi-search
                              \ vi-arg-digit
                              \ vi-append-eol
                              \ vi-prev-word
                              \ vi-change-to
                              \ vi-delete-to
                              \ vi-end-word
                              \ vi-char-search
                              \ vi-fetch-history
                              \ vi-insert-beg
                              \ vi-search-again
                              \ vi-put
                              \ vi-replace
                              \ vi-subst
                              \ vi-char-search
                              \ vi-next-word
                              \ vi-yank-to
                              \ vi-first-print
                              \ vi-yank-arg
                              \ vi-goto-mark
                              \ vi-append-mode
                              \ vi-prev-word
                              \ vi-change-to
                              \ vi-delete-to
                              \ vi-end-word
                              \ vi-char-search
                              \ vi-insert-mode
                              \ vi-set-mark
                              \ vi-search-again
                              \ vi-put
                              \ vi-change-char
                              \ vi-subst
                              \ vi-char-search
                              \ vi-undo
                              \ vi-next-word
                              \ vi-delete
                              \ vi-yank-to
                              \ vi-column
                              \ vi-change-case

if exists("readline_has_bash")
  syn keyword readlineFunction  contained
                              \ shell-forward-word
                              \ shell-backward-word
                              \ shell-expand-line
                              \ history-expand-line
                              \ magic-space
                              \ alias-expand-line
                              \ history-and-alias-expand-line
                              \ insert-last-argument
                              \ operate-and-get-next
                              \ forward-backward-delete-char
                              \ shell-kill-word
                              \ shell-backward-kill-word
                              \ delete-char-or-list
                              \ complete-filename
                              \ possible-filename-completions
                              \ complete-username
                              \ possible-username-completions
                              \ complete-variable
                              \ possible-variable-completions
                              \ complete-hostname
                              \ possible-hostname-completions
                              \ complete-command
                              \ possible-command-completions
                              \ dynamic-complete-history
                              \ dabbrev-expand
                              \ complete-into-braces
                              \ glob-expand-word
                              \ glob-list-expansions
                              \ display-shell-version
                              \ glob-complete-word
                              \ edit-and-execute-command
endif

hi def link readlineKey           readlineKeySeq
hi def link readlineComment       Comment
hi def link readlineTodo          Todo
hi def link readlineConditional   Conditional
hi def link readlineTest          Type
hi def link readlineDelimiter     Delimiter
hi def link readlineTestModeEq    readlineEq
hi def link readlineTestTermEq    readlineEq
hi def link readlineTestTerm      readlineString
hi def link readlineTestAppEq     readlineEq
hi def link readlineTestApp       readlineString
hi def link readlineInclude       Include
hi def link readlinePath          String
hi def link readlineKeyName       SpecialChar
hi def link readlineKeySeparator  readlineKeySeq
hi def link readlineKeyTerminator readlineDelimiter
hi def link readlineKeySeq        String
hi def link readlineKeyEscape     SpecialChar
hi def link readlineKeyword       Keyword
hi def link readlineVariable      Identifier
hi def link readlineBellStyle     Constant
hi def link readlineBoolean       Boolean
hi def link readlineString        String
hi def link readlineStringDelimiter readlineString
hi def link readlineNumber        Number
hi def link readlineEditingMode   Constant
hi def link readlineKeymap        Constant
hi def link readlineFunction      Function

let b:current_syntax = 'readline'

let &cpo = s:cpo_save
unlet s:cpo_save