Compare commits

...

83 Commits

Author SHA1 Message Date
Bram Moolenaar
163095f088 patch 8.0.0704: problems with autocommands when opening help
Problem:    Problems with autocommands when opening help.
Solution:   Avoid using invalid "varp" value.  Allow using :wincmd if buffer
            is locked. (closes #1806, closes #1804)
2017-07-09 15:41:53 +02:00
Bram Moolenaar
faf29d7f91 patch 8.0.0703: illegal memory access with empty :doau command
Problem:    Illegal memory access with empty :doau command.
Solution:   Check the event for being out of range. (James McCoy)
2017-07-09 11:07:16 +02:00
Bram Moolenaar
c577d813b7 patch 8.0.0702: an error in a timer can make Vim unusable
Problem:    An error in a timer can make Vim unusable.
Solution:   Don't set the error flag or exception from a timer.  Stop a timer
            if it causes an error 3 out of 3 times.  Discard an exception
            caused inside a timer.
2017-07-08 22:37:34 +02:00
Bram Moolenaar
11e79bb04e patch 8.0.0701: system test failing when using X11 forwarding
Problem:    System test failing when using X11 forwarding.
Solution:   Set $XAUTHORITY before changing $HOME. (closes #1812)
            Also use a better check for the exit value.
2017-07-08 17:03:21 +02:00
Bram Moolenaar
0ea5070d79 patch 8.0.0700: segfault with QuitPre autocommand closes the window
Problem:    Segfault with QuitPre autocommand closes the window. (Marek)
Solution:   Check that the window pointer is still valid. (Christian Brabandt,
            closes #1817)
2017-07-08 14:44:50 +02:00
Bram Moolenaar
710b4a1646 patch 8.0.0699: checksum tests are not actually run
Problem:    Checksum tests are not actually run.
Solution:   Add the tests to the list. (Dominique Pelle, closes #1819)
2017-07-08 14:29:19 +02:00
Bram Moolenaar
c4f833808a patch 8.0.0698: crash on exit when using Python function in timer.
Problem:    When a timer uses ":pyeval" or another Python command and it
            happens to be triggered while exiting a Crash may happen.
            (Ricky Zhou)
Solution:   Avoid running a Python command after python_end() was called.
            Do not trigger timers while exiting.  (closes #1824)
2017-07-07 14:50:44 +02:00
Bram Moolenaar
8858498516 patch 8.0.0697: recorded key sequences may become invalid
Problem:    Recorded key sequences may become invalid.
Solution:   Add back KE_SNIFF removed in 7.4.1433. Use fixed numbers for the
            key_extra enum.
2017-07-07 13:32:14 +02:00
Bram Moolenaar
cce1cf12eb patch 8.0.0696: .inc files missing in git
Problem:    The .inc files are missing in git. (Nazri Ramliy)
Solution:   Remove the .inc line from .gitignore.
2017-07-07 13:04:16 +02:00
Bram Moolenaar
e5ae108ab8 patch 8.0.0695: missing dependencies breaks parallel make
Problem:    Missing dependencies breaks parallel make.
Solution:   Add dependencies for terminal.o.
2017-07-07 12:42:40 +02:00
Bram Moolenaar
a34293ae0a patch 8.0.0694: building in shadow directory does not work
Problem:    Building in shadow directory does not work.  Running Vim fails.
Solution:   Add the new libvterm directory.  Add missing change in command
            list.
2017-07-07 12:22:55 +02:00
Bram Moolenaar
e4f25e4a8d patch 8.0.0693: no terminal emulator support
Problem:    No terminal emulator support.  Cannot properly run commands in the
            GUI.  Cannot run a job interactively with an ssh connection.
Solution:   Very early implementation of the :terminal command.  Includes
            libvterm converted to ANSI C.  Many parts still missing.
2017-07-07 11:54:15 +02:00
Bram Moolenaar
da5116da45 patch 8.0.0692: CTRL-G with 'incsearch' and ? goes in the wrong direction
Problem:    Using CTRL-G with 'incsearch' and ? goes in the wrong direction.
            (Ramel Eshed)
Solution:   Adjust search_start. (Christian Brabandt)
2017-07-01 23:11:17 +02:00
Bram Moolenaar
a83fe75ca7 patch 8.0.0691: compiler warning without the linebreak feature
Problem:    Compiler warning without the linebreak feature.
Solution:   Add #ifdef. (John Marriott)
2017-06-29 22:33:13 +02:00
Bram Moolenaar
c2226845eb patch 8.0.0690: compiler warning on non-Unix system
Problem:    Compiler warning on non-Unix system.
Solution:   Add #ifdef. (John Marriott)
2017-06-29 22:27:24 +02:00
Bram Moolenaar
a693d0584b patch 8.0.0689: ~ character not escaped when extending search pattern
Problem:    The ~ character is not escaped when adding to the search pattern
            with CTRL-L. (Ramel Eshed)
Solution:   Escape the character. (Christian Brabandt)
2017-06-29 22:23:06 +02:00
Bram Moolenaar
9c4fefffb6 patch 8.0.0688: cannot resize the window in a FileType autocommand
Problem:    Cannot resize the window in a FileType autocommand. (Ingo Karkat)
Solution:   Add the CMDWIN flag to :resize. (test by Ingo Karkat,
            closes #1804)
2017-06-28 22:26:54 +02:00
Bram Moolenaar
86f100dc09 patch 8.0.0687: minor issues related to quickfix
Problem:    Minor issues related to quickfix.
Solution:   Set the proper return status for all cases in setqflist() and at
            test cases for this.  Move the "adding" flag outside of
            FEAT_WINDOWS. Minor update to the setqflist() help text. (Yegappan
            Lakshmanan)
2017-06-28 21:26:27 +02:00
Bram Moolenaar
9f5f7bf4d5 patch 8.0.0686: extra redraw when using CTRL-L in second window
Problem:    When typing CTRL-L in a window that's not the first one, another
            redraw will happen later. (Christian Brabandt)
Solution:   Reset must_redraw after calling screenclear().
2017-06-28 20:45:26 +02:00
Bram Moolenaar
e6bf655bc4 patch 8.0.0685: when conversion fails written file may be truncated
Problem:    When making backups is disabled and conversion with iconv fails
            the written file is truncated. (Luo Chen)
Solution:   First try converting the file and write the file only when it did
            not fail. (partly by Christian Brabandt)
2017-06-27 22:11:51 +02:00
Bram Moolenaar
28b238225a patch 8.0.0684: old style tests are not nice
Problem:    Old style tests are not nice.
Solution:   Turn two tests into new style. (pschuh, closes #1797)
2017-06-27 18:29:17 +02:00
Bram Moolenaar
2e147caa14 patch 8.0.0683: visual bell flashes too quickly
Problem:    When using a visual bell there is no delay, causing the flash to
            be very short, possibly unnoticeable.  Also, the flash and the
            beep can lockup the UI when repeated often.
Solution:   Do the delay in Vim or flush the output before the delay. Limit the
            bell to once per half a second. (Ozaki Kiichi, closes #1789)
2017-06-27 17:09:37 +02:00
Bram Moolenaar
0b2eef24bc patch 8.0.0682: no test for synIDtrans()
Problem:    No test for synIDtrans().
Solution:   Add a test. (Dominique Pelle, closes #1796)
2017-06-27 15:43:49 +02:00
Bram Moolenaar
18d90b95c4 patch 8.0.0681: unnamed register only contains the last deleted text
Problem:    Unnamed register only contains the last deleted text when
            appending deleted text to a register. (Wolfgang Jeltsch)
Solution:   Only set y_previous when not using y_append. (Christian Brabandt)
2017-06-27 15:39:14 +02:00
Bram Moolenaar
07ecfa64a1 patch 8.0.0680: plugins in start packages are sourced twice
Problem:    Plugins in start packages are sourced twice. (mseplowitz)
Solution:   Use the unmodified runtime path when loading plugins (test by Ingo
            Karkat, closes #1801)
2017-06-27 14:43:55 +02:00
Bram Moolenaar
41cc038ff8 patch 8.0.0679: using freed memory
Problem:    Using freed memory.
Solution:   Get the parent frame pointer earlier.
2017-06-26 09:59:35 +02:00
Bram Moolenaar
8eeeba8c02 patch 8.0.0678: closing a window does not trigger resizing
Problem:    When 'equalalways' is set and closing a window in a separate
            frame, not all window sizes are adjusted. (Glacambre)
Solution:   Resize all windows if the new current window is not in the same
            frame as the closed window. (closes #1707)
2017-06-25 22:45:39 +02:00
Bram Moolenaar
1814183b86 patch 8.0.0677: setting 'filetype' may switch buffers
Problem:    Setting 'filetype' internally may cause the current buffer and
            window to change unexpectedly.
Solution:   Set curbuf_lock. (closes #1734)
2017-06-25 21:17:25 +02:00
Bram Moolenaar
182a17b1e8 patch 8.0.0676: crash when closing quickfix window in autocmd
Problem:    Crash when closing the quickfix window in a FileType autocommand
            that triggers when the quickfix window is opened.
Solution:   Save the new value before triggering the OptionSet autocommand.
            Add the "starting" flag to test_override() to make the text work.
2017-06-25 20:57:18 +02:00
Bram Moolenaar
774e5a9673 patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Problem:    'colorcolumn' has a higher priority than 'hlsearch', it should be
            the other way around. (Nazri Ramliy)
Solution:   Change the priorities. (LemonBoy, closes #1794)
2017-06-25 18:03:37 +02:00
Bram Moolenaar
5d7be4f0fa patch 8.0.0674: cannot build with eval but without timers
Problem:    Cannot build with eval but without timers.
Solution:   Add #ifdef (John Marriott)
2017-06-25 13:40:17 +02:00
Bram Moolenaar
ea20de8146 patch 8.0.0673: build failure without conceal feature
Problem:    Build failure without conceal feature.
Solution:   Add #ifdef.
2017-06-24 22:52:24 +02:00
Bram Moolenaar
cc0750dc6e patch 8.0.0672: third item of synconcealed() changes too often
Problem:    Third item of synconcealed() changes too often. (Dominique Pelle)
Solution:   Reset the sequence number at the start of each line.
2017-06-24 22:29:24 +02:00
Bram Moolenaar
4eb6531b03 patch 8.0.0671: hang when typing CTRL-C in confirm() in timer
Problem:    When a function invoked from a timer calls confirm() and the user
            types CTRL-C then Vim hangs.
Solution:   Reset typebuf_was_filled. (Ozaki Kiichi, closes #1791)
2017-06-24 18:49:00 +02:00
Bram Moolenaar
1e8e14552e patch 8.0.0670: can't use input() in a timer callback
Problem:    Can't use input() in a timer callback. (Cosmin Popescu)
Solution:   Reset vgetc_busy and set timer_busy. (Ozaki Kiichi, closes #1790,
            closes #1129)
2017-06-24 16:03:06 +02:00
Bram Moolenaar
24a9e348aa patch 8.0.0669: CTRL-N at start of the buffer does not work correctly
Problem:    In Insert mode, CTRL-N at start of the buffer does not work
            correctly. (zuloloxi)
Solution:   Wrap around the start of the buffer. (Christian Brabandt)
2017-06-24 15:39:07 +02:00
Bram Moolenaar
a1bd86e0f2 patch 8.0.0668: nsis installer script does not work
Problem:    Nsis installer script does not work. (Christian Brabandt)
Solution:   Fix the syntax of /SD.
2017-06-24 15:11:01 +02:00
Bram Moolenaar
53564f7c1a patch 8.0.0667: memory access error when command follows :endfunc
Problem:    Memory access error when command follows :endfunction. (Nikolai
            Pavlov)
Solution:   Make memory handling in :function straightforward. (closes #1793)
2017-06-24 14:48:11 +02:00
Bram Moolenaar
5fe691240b patch 8.0.0666: dead for loop
Problem:    Dead for loop. (Coverity)
Solution:   Remove the for loop.
2017-06-23 23:00:08 +02:00
Bram Moolenaar
090209bfbd patch 8.0.0665: warning for uninitialized variable
Problem:    Warning for uninitialized variable. (Tony Mechelynck)
Solution:   Initialize it.
2017-06-23 22:45:33 +02:00
Bram Moolenaar
6d006f9e95 patch 8.0.0664: mouse does not work in tmux
Problem:    Mouse does not work in tmux. (lilydjwg)
Solution:   Add flag for SGR release being present.
2017-06-23 22:35:34 +02:00
Bram Moolenaar
f8be461d02 patch 8.0.0663: unexpected error message only when 'verbose' is set
Problem:    Giving an error message only when 'verbose' set is unexpected.
Solution:   Give a warning message instead.
2017-06-23 20:52:40 +02:00
Bram Moolenaar
4670490673 patch 8.0.0662: stray FIXME for fixed problem
Problem:    Stray FIXME for fixed problem.
Solution:   Remove the comment. (Dominique Pelle)
2017-06-22 23:03:12 +02:00
Bram Moolenaar
a529ce068b patch 8.0.0661: recognizing urxvt mouse codes does not work well
Problem:    Recognizing urxvt mouse codes does not work well.
Solution:   Recognize "Esc[*M" and "Esc[*m". (Maurice Bos, closes #1486)
2017-06-22 22:37:57 +02:00
Bram Moolenaar
a1fed064d1 patch 8.0.0660: silent install on MS-Windows shows dialog
Problem:    Silent install on MS-Windows does show a dialog.
Solution:   Add /SD to the default choice. (allburov, closes #1772)
2017-06-22 22:05:02 +02:00
Bram Moolenaar
4d785895d1 patch 8.0.0659: no test for conceal mode
Problem:    No test for conceal mode.
Solution:   Add a conceal mode test. (Dominique Pelle, closes #1783)
2017-06-22 22:00:50 +02:00
Bram Moolenaar
d2c061d24c patch 8.0.0658: spell test is old style
Problem:    Spell test is old style.
Solution:   Turn the spell test into a new style test (pschuh, closes #1778)
2017-06-22 21:42:49 +02:00
Bram Moolenaar
6a8958db25 patch 8.0.0657: cannot get and set quickfix list items
Problem:    Cannot get and set quickfix list items.
Solution:   Add the "items" argument to getqflist() and setqflist(). (Yegappan
            Lakshmanan)
2017-06-22 21:33:20 +02:00
Bram Moolenaar
6f9a476b2f patch 8.0.0656: cannot use ! after some user commands
Problem:    Cannot use ! after some user commands.
Solution:   Properly check for existing command. (Higashi Higashi)
2017-06-22 20:39:17 +02:00
Bram Moolenaar
d6abcd154c patch 8.0.0655: not easy to make sure a function does not exist
Problem:    Not easy to make sure a function does not exist.
Solution:   Add ! as an optional argument to :delfunc.
2017-06-22 19:15:24 +02:00
Bram Moolenaar
663bb23316 patch 8.0.0654: no warning for text after :endfunction
Problem:    Text found after :endfunction is silently ignored.
Solution:   Give a warning if 'verbose' is set.  When | or \n are used,
            execute the text as a command.
2017-06-22 19:12:10 +02:00
Bram Moolenaar
c768a208ca patch 8.0.0653: the default highlight for QuickFixLine is not good
Problem:    The default highlight for QuickFixLine does not work for several
            color schemes. (Manas Thakur)
Solution:   Make the default use the old color. (closes #1780)
2017-06-22 16:04:27 +02:00
Bram Moolenaar
383aa84c0d patch 8.0.0652: unicode information is outdated
Problem:    Unicode information is outdated.
Solution:   Update to Unicode 10. (Christian Brabandt)
2017-06-22 15:27:37 +02:00
Bram Moolenaar
157069b04e patch 8.0.0651: build failure without the auto command feature
Problem:    Build failure without the auto command feature.
Solution:   Add #ifdef. (closes #1782)
2017-06-22 14:56:12 +02:00
Bram Moolenaar
868831f122 patch 8.0.0650: for extra help files the filetype is set more than once
Problem:    For extra help files the filetype is set more than once.
Solution:   In *.txt files check that there is no help file modline.
2017-06-22 14:47:22 +02:00
Bram Moolenaar
9049298f8d patch 8.0.0649: when opening a help file the filetype is set several times
Problem:    When opening a help file the filetype is set several times.
Solution:   When setting the filetype to the same value from a modeline, don't
            trigger FileType autocommands.  Don't set the filetype to "help"
            when it's already set correctly.
2017-06-22 14:16:31 +02:00
Bram Moolenaar
fadacf01d0 patch 8.0.0648: possible use of NULL pointer
Problem:    Possible use of NULL pointer if buflist_new() returns NULL.
            (Coverity)
Solution:   Check for NULL pointer in set_bufref().
2017-06-19 20:35:32 +02:00
Bram Moolenaar
06f1ed2f78 patch 8.0.0647: syntax highlighting can make cause a freeze
Problem:    Syntax highlighting can make cause a freeze.
Solution:   Apply 'redrawtime' to syntax highlighting, per window.
2017-06-18 22:41:03 +02:00
Bram Moolenaar
0946326580 patch 8.0.0646: the hlsearch test fails on fast systems
Problem:    The hlsearch test fails on fast systems.
Solution:   Make the search pattern slower.  Fix that the old regexp engine
            doesn't timeout properly.
2017-06-17 20:55:06 +02:00
Bram Moolenaar
1ef9bbe215 patch 8.0.0645: no error for illegal back reference in NFA engine
Problem:    The new regexp engine does not give an error for using a back
            reference where it is not allowed. (Dominique Pelle)
Solution:   Check the back reference like the old engine. (closes #1774)
2017-06-17 20:08:20 +02:00
Bram Moolenaar
5b1affefd0 patch 8.0.0644: the timeout for 'hlsearch' is not tested
Problem:    There is no test for 'hlsearch' timing out.
Solution:   Add a test.
2017-06-17 19:13:49 +02:00
Bram Moolenaar
fbd0b0af68 patch 8.0.0643: when a pattern search is slow Vim becomes unusable
Problem:    When 'hlsearch' is set and matching with the last search pattern
            is very slow, Vim becomes unusable.  Cannot quit search by
            pressing CTRL-C.
Solution:   When the search times out set a flag and don't try again.  Check
            for timeout and CTRL-C in NFA loop that adds states.
2017-06-17 18:44:21 +02:00
Bram Moolenaar
8cf91286ca patch 8.0.0642: writefile() continues after detecting an error
Problem:    writefile() continues after detecting an error.
Solution:   Bail out as soon as an error is detected. (suggestions by Nikolai
            Pavlov, closes #1476)
2017-06-13 19:38:37 +02:00
Bram Moolenaar
3ec574f2b5 Update runtime files.
Includes changing &sw to shiftwidth() for all indent scripts.
2017-06-13 18:12:01 +02:00
Bram Moolenaar
2102035488 patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Problem:    Cannot set a separate highlighting for the current line in the
            quickfix window.
Solution:   Add QuickFixLine. (anishsane, closes #1755)
2017-06-13 17:21:04 +02:00
Bram Moolenaar
83064068ea patch 8.0.0640: mismatch between help and actual message
Problem:    Mismatch between help and actual message for ":syn conceal".
Solution:   Change the message to match the help. (Ken Takata)
2017-06-13 16:34:54 +02:00
Bram Moolenaar
9a48961d8b patch 8.0.0639: the cursor position is set when editing a new commit message
Problem:    The cursor position is set to the last position in a new commit
            message.
Solution:   Don't set the position if the filetype matches "commit".
            (Christian Brabandt)
2017-06-13 16:12:51 +02:00
Bram Moolenaar
d7383881c8 patch 8.0.0638: cannot build with new MSVC version
Problem:    Cannot build with new MSVC version VS2017.
Solution:   Change the compiler arguments. (Leonardo Manera, closes #1731,
            closes #1747)
2017-06-13 15:22:12 +02:00
Bram Moolenaar
21b34b63b3 patch 8.0.0637: crash when using some version of GTK 3
Problem:    Crash when using some version of GTK 3.
Solution:   Add #ifdefs around incrementing the menu index. (Kazunobu
            Kuriyama)
2017-06-13 14:34:01 +02:00
Bram Moolenaar
56f2db562d patch 8.0.0636: when reading the undo file fails may use uninitialized data
Problem:    When reading the undo file fails may use uninitialized data.
Solution:   Always clear the buffer on failure.
2017-06-11 23:09:15 +02:00
Bram Moolenaar
3a429efb62 patch 8.0.0635: when 'ignorecase' is set script detection is inaccurate
Problem:    When 'ignorecase' is set script detection is inaccurate.
Solution:   Enforce matching case for text. (closes #1753)
2017-06-11 17:10:32 +02:00
Bram Moolenaar
875feea6ce patch 8.0.0634: cannot easily get to the last quickfix list
Problem:    Cannot easily get to the last quickfix list.
Solution:   Add "$" as a value for the "nr" argument of getqflist() and
            setqflist(). (Yegappan Lakshmanan)
2017-06-11 16:07:51 +02:00
Bram Moolenaar
60964f6874 patch 8.0.0633: the client-server test is still a bit flaky
Problem:    The client-server test is still a bit flaky.
Solution:   Wait a bit for the GUI to start.  Check that the version number
            can be obtained.
2017-06-10 17:06:16 +02:00
Bram Moolenaar
1c13c0fe3e patch 8.0.0632: the quotestar test is still a bit flaky
Problem:    The quotestar test is still a bit flaky.
Solution:   Kill any existing server to make the retry work.  Wait for the
            register to be filled.
2017-06-10 16:30:32 +02:00
Bram Moolenaar
fa4161cb0c patch 8.0.0631: can't build with Perl 5.26
Problem:    Perl 5.26 also needs S_TOPMARK and S_POPMARK defined.
Solution:   Define the functions when needed. (Jesin, closes #1748)
2017-06-10 15:46:23 +02:00
Bram Moolenaar
f84b122a99 patch 8.0.0630: it is not easy to work on lines without a match
Problem:    The :global command does not work recursively, which makes it
            difficult to execute a command on a line where one pattern matches
            and another does not match. (Miles Cranmer)
Solution:   Allow for recursion if it is for only one line. (closes #1760)
2017-06-10 14:29:52 +02:00
Bram Moolenaar
6b1da3312e patch 8.0.0629: checking for ambigous width is not working
Problem:    Checking for ambigous width is not working. (Hirohito Higashi)
Solution:   Reset "starting" earlier.
2017-06-09 21:35:47 +02:00
Bram Moolenaar
f085f4266e patch 8.0.0628: cursor disappears after silent mapping
Problem:    Cursor disappears after silent mapping. (Ramel Eshed)
Solution:   Do restore the cursor when it was changed, but don't change it in
            the first place for a silent mapping.
2017-06-07 20:39:47 +02:00
Bram Moolenaar
add8dce38d patch 8.0.0627: "gn" selects only one character with 'nowrapscan'
Problem:    When 'wrapscan' is off "gn" does not select the whole pattern when
            it's the last one in the text. (KeyboardFire)
Solution:   Check if the search fails. (Christian Brabandt, closes #1683)
2017-06-05 19:56:04 +02:00
Bram Moolenaar
e21d69eec1 patch 8.0.0626: in the GUI the cursor may flicker
Problem:    In the GUI the cursor may flicker.
Solution:   Check the cmd_silent flag before updating the cursor shape.
            (Hirohito Higashi, closes #1637)
2017-06-05 19:32:32 +02:00
Bram Moolenaar
206155280d patch 8.0.0625: shellescape() always escapes a newline
Problem:    shellescape() always escapes a newline, which does not work with
            some shells. (Harm te Hennepe)
Solution:   Only escape a newline when the "special" argument is non-zero.
            (Christian Brabandt, closes #1590)
2017-06-05 18:46:26 +02:00
Bram Moolenaar
6c95fbc9ae patch 8.0.0624: warning for unused variable in tiny build
Problem:    Warning for unused variable in tiny build. (Tony Mechelynck)
Solution:   Add an #ifdef.
2017-06-05 17:53:37 +02:00
Bram Moolenaar
966e58e413 patch 8.0.0623: error for invalid regexp is not very informative
Problem:    The message "Invalid range" is used for multiple errors.
Solution:   Add two more specific error messages. (Itchyny, Ken Hamada)
2017-06-05 16:54:08 +02:00
243 changed files with 16044 additions and 2654 deletions

View File

@@ -85,6 +85,7 @@ SRC_ALL = \
src/syntax.c \
src/tag.c \
src/term.c \
src/terminal.c \
src/term.h \
src/termlib.c \
src/ui.c \
@@ -187,6 +188,7 @@ SRC_ALL = \
src/proto/syntax.pro \
src/proto/tag.pro \
src/proto/term.pro \
src/proto/terminal.pro \
src/proto/termlib.pro \
src/proto/ui.pro \
src/proto/undo.pro \
@@ -194,6 +196,76 @@ SRC_ALL = \
src/proto/version.pro \
src/proto/winclip.pro \
src/proto/window.pro \
src/libvterm/.bzrignore \
src/libvterm/.gitignore \
src/libvterm/LICENSE \
src/libvterm/Makefile \
src/libvterm/README \
src/libvterm/tbl2inc_c.pl \
src/libvterm/vterm.pc.in \
src/libvterm/bin/unterm.c \
src/libvterm/bin/vterm-ctrl.c \
src/libvterm/bin/vterm-dump.c \
src/libvterm/doc/URLs \
src/libvterm/doc/seqs.txt \
src/libvterm/include/vterm.h \
src/libvterm/include/vterm_keycodes.h \
src/libvterm/src/encoding.c \
src/libvterm/src/encoding/DECdrawing.inc \
src/libvterm/src/encoding/DECdrawing.tbl \
src/libvterm/src/encoding/uk.inc \
src/libvterm/src/encoding/uk.tbl \
src/libvterm/src/keyboard.c \
src/libvterm/src/mouse.c \
src/libvterm/src/parser.c \
src/libvterm/src/pen.c \
src/libvterm/src/rect.h \
src/libvterm/src/screen.c \
src/libvterm/src/state.c \
src/libvterm/src/unicode.c \
src/libvterm/src/utf8.h \
src/libvterm/src/vterm.c \
src/libvterm/src/vterm_internal.h \
src/libvterm/t/02parser.test \
src/libvterm/t/03encoding_utf8.test \
src/libvterm/t/10state_putglyph.test \
src/libvterm/t/11state_movecursor.test \
src/libvterm/t/12state_scroll.test \
src/libvterm/t/13state_edit.test \
src/libvterm/t/14state_encoding.test \
src/libvterm/t/15state_mode.test \
src/libvterm/t/16state_resize.test \
src/libvterm/t/17state_mouse.test \
src/libvterm/t/18state_termprops.test \
src/libvterm/t/20state_wrapping.test \
src/libvterm/t/21state_tabstops.test \
src/libvterm/t/22state_save.test \
src/libvterm/t/25state_input.test \
src/libvterm/t/26state_query.test \
src/libvterm/t/27state_reset.test \
src/libvterm/t/28state_dbl_wh.test \
src/libvterm/t/29state_fallback.test \
src/libvterm/t/30pen.test \
src/libvterm/t/40screen_ascii.test \
src/libvterm/t/41screen_unicode.test \
src/libvterm/t/42screen_damage.test \
src/libvterm/t/43screen_resize.test \
src/libvterm/t/44screen_pen.test \
src/libvterm/t/45screen_protect.test \
src/libvterm/t/46screen_extent.test \
src/libvterm/t/47screen_dbl_wh.test \
src/libvterm/t/48screen_termprops.test \
src/libvterm/t/90vttest_01-movement-1.test \
src/libvterm/t/90vttest_01-movement-2.test \
src/libvterm/t/90vttest_01-movement-3.test \
src/libvterm/t/90vttest_01-movement-4.test \
src/libvterm/t/90vttest_02-screen-1.test \
src/libvterm/t/90vttest_02-screen-2.test \
src/libvterm/t/90vttest_02-screen-3.test \
src/libvterm/t/90vttest_02-screen-4.test \
src/libvterm/t/92lp1640917.test \
src/libvterm/t/harness.c \
src/libvterm/t/run-test.pl \
# source files for Unix only

View File

@@ -87,6 +87,7 @@ UninstPage instfiles
Function .onInit
MessageBox MB_YESNO|MB_ICONQUESTION \
"This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer.$\n Continue?" \
/SD IDYES \
IDYES NoAbort
Abort ; causes installer to quit.
NoAbort:

View File

@@ -1,7 +1,7 @@
" The default vimrc file.
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2017 Apr 12
" Last change: 2017 Jun 13
"
" This is loaded if no vimrc file was found.
" Except when Vim is run with "-u NONE" or "-C".
@@ -106,12 +106,13 @@ if has("autocmd")
au!
" When editing a file, always jump to the last known cursor position.
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
" Don't do it when the position is invalid, when inside an event handler
" (happens when dropping a file on gvim) and for a commit message (it's
" likely a different one than last time).
autocmd BufReadPost *
\ if line("'\"") >= 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
\ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
\ | exe "normal! g`\""
\ | endif
augroup END

View File

@@ -101,6 +101,7 @@ DOCS = \
tabpage.txt \
tagsrch.txt \
term.txt \
terminal.txt \
tips.txt \
todo.txt \
uganda.txt \
@@ -236,6 +237,7 @@ HTMLS = \
tabpage.html \
tagsrch.html \
term.html \
terminal.html \
tips.html \
todo.html \
uganda.html \

View File

@@ -1,4 +1,4 @@
*channel.txt* For Vim version 8.0. Last change: 2016 Dec 02
*channel.txt* For Vim version 8.0. Last change: 2017 Jun 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -489,6 +489,11 @@ If you want to handle both stderr and stdout with one handler use the
"callback" option: >
let job = job_start(command, {"callback": "MyHandler"})
Depending on the system, starting a job can put Vim in the background, the
started job gets the focus. To avoid that, use the `foreground()` function.
This might not always work when called early, put in the callback handler or
use a timer to call it after the job has started.
You can send a message to the command with ch_evalraw(). If the channel is in
JSON or JS mode you can use ch_evalexpr().

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.0. Last change: 2017 Jun 04
*eval.txt* For Vim version 8.0. Last change: 2017 Jul 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -4189,14 +4189,14 @@ getchar([expr]) *getchar()*
not consumed. Return zero if no character available.
Without [expr] and when [expr] is 0 a whole character or
special key is returned. If it is an 8-bit character, the
special key is returned. If it is a single character, the
result is a number. Use nr2char() to convert it to a String.
Otherwise a String is returned with the encoded character.
For a special key it's a sequence of bytes starting with 0x80
(decimal: 128). This is the same value as the string
"\<Key>", e.g., "\<Left>". The returned value is also a
String when a modifier (shift, control, alt) was used that is
not included in the character.
For a special key it's a String with a sequence of bytes
starting with 0x80 (decimal: 128). This is the same value as
the String "\<Key>", e.g., "\<Left>". The returned value is
also a String when a modifier (shift, control, alt) was used
that is not included in the character.
When [expr] is 0 and Esc is typed, there will be a short delay
while Vim waits to see if this is the start of an escape
@@ -4586,18 +4586,24 @@ getqflist([{what}]) *getqflist()*
returns only the items listed in {what} as a dictionary. The
following string items are supported in {what}:
context get the context stored with |setqflist()|
items quickfix list entries
nr get information for this quickfix list; zero
means the current quickfix list
means the current quickfix list and '$' means
the last quickfix list
title get the list title
winid get the |window-ID| (if opened)
all all of the above quickfix properties
Non-string items in {what} are ignored.
If "nr" is not present then the current quickfix list is used.
To get the number of lists in the quickfix stack, set 'nr' to
'$' in {what}. The 'nr' value in the returned dictionary
contains the quickfix stack size.
In case of error processing {what}, an empty dictionary is
returned.
The returned dictionary contains the following entries:
context context information stored with |setqflist()|
items quickfix list entries
nr quickfix list number
title quickfix list title text
winid quickfix |window-ID| (if opened)
@@ -5461,7 +5467,10 @@ line({expr}) The result is a Number, which is the line number of the file
< *last-position-jump*
This autocommand jumps to the last known position in a file
just after opening it, if the '" mark is set: >
:au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
:au BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
\ | exe "normal! g`\""
\ | endif
line2byte({lnum}) *line2byte()*
Return the byte count from the start of the buffer for line
@@ -5883,7 +5892,7 @@ max({expr}) Return the maximum value of all items in {expr}.
it returns the maximum of all values in the dictionary.
If {expr} is neither a list nor a dictionary, or one of the
items in {expr} cannot be used as a Number this results in
an error. An empty |List| or |Dictionary| results in zero.
an error. An empty |List| or |Dictionary| results in zero.
*min()*
min({expr}) Return the minimum value of all items in {expr}.
@@ -5891,7 +5900,7 @@ min({expr}) Return the minimum value of all items in {expr}.
it returns the minimum of all values in the dictionary.
If {expr} is neither a list nor a dictionary, or one of the
items in {expr} cannot be used as a Number this results in
an error. An empty |List| or |Dictionary| results in zero.
an error. An empty |List| or |Dictionary| results in zero.
*mkdir()* *E739*
mkdir({name} [, {path} [, {prot}]])
@@ -6186,8 +6195,8 @@ printf({fmt}, {expr1} ...) *printf()*
zero the decimal point is omitted. When the precision
is not specified 6 is used. A really big number
(out of range or dividing by zero) results in "inf"
or "-inf" with %f (INF or -INF with %F).
"0.0 / 0.0" results in "nan" with %f (NAN with %F).
or "-inf" with %f (INF or -INF with %F).
"0.0 / 0.0" results in "nan" with %f (NAN with %F).
Example: >
echo printf("%.2f", 12.115)
< 12.12
@@ -6991,11 +7000,16 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
argument is ignored. The following items can be specified in
{what}:
context any Vim type can be stored as a context
nr list number in the quickfix stack
items list of quickfix entries. Same as the {list}
argument.
nr list number in the quickfix stack; zero
means the current quickfix list and '$' means
the last quickfix list
title quickfix list title text
Unsupported keys in {what} are ignored.
If the "nr" item is not present, then the current quickfix list
is modified.
is modified. When creating a new quickfix list, "nr" can be
set to a value one greater than the quickfix stack size.
Examples: >
:call setqflist([], 'r', {'title': 'My search'})
@@ -7095,18 +7109,22 @@ shellescape({string} [, {special}]) *shellescape()*
quotes within {string}.
Otherwise it will enclose {string} in single quotes and
replace all "'" with "'\''".
When the {special} argument is present and it's a non-zero
Number or a non-empty String (|non-zero-arg|), then special
items such as "!", "%", "#" and "<cword>" will be preceded by
a backslash. This backslash will be removed again by the |:!|
command.
The "!" character will be escaped (again with a |non-zero-arg|
{special}) when 'shell' contains "csh" in the tail. That is
because for csh and tcsh "!" is used for history replacement
even when inside single quotes.
The <NL> character is also escaped. With a |non-zero-arg|
{special} and 'shell' containing "csh" in the tail it's
With a |non-zero-arg| {special} the <NL> character is also
escaped. When 'shell' containing "csh" in the tail it's
escaped a second time.
Example of use with a |:!| command: >
:exe '!dir ' . shellescape(expand('<cfile>'), 1)
< This results in a directory listing for the file under the
@@ -7638,17 +7656,29 @@ synIDtrans({synID}) *synIDtrans()*
":highlight link" are followed.
synconcealed({lnum}, {col}) *synconcealed()*
The result is a List. The first item in the list is 0 if the
character at the position {lnum} and {col} is not part of a
concealable region, 1 if it is. The second item in the list is
a string. If the first item is 1, the second item contains the
text which will be displayed in place of the concealed text,
depending on the current setting of 'conceallevel'. The third
and final item in the list is a unique number representing the
specific syntax region matched. This allows detection of the
beginning of a new concealable region if there are two
consecutive regions with the same replacement character.
For an example use see $VIMRUNTIME/syntax/2html.vim .
The result is a List with currently three items:
1. The first item in the list is 0 if the character at the
position {lnum} and {col} is not part of a concealable
region, 1 if it is.
2. The second item in the list is a string. If the first item
is 1, the second item contains the text which will be
displayed in place of the concealed text, depending on the
current setting of 'conceallevel' and 'listchars'.
3. The third and final item in the list is a number
representing the specific syntax region matched in the
line. When the character is not concealed the value is
zero. This allows detection of the beginning of a new
concealable region if there are two consecutive regions
with the same replacement character. For an example, if
the text is "123456" and both "23" and "45" are concealed
and replace by the character "X", then:
call returns ~
synconcealed(lnum, 1) [0, '', 0]
synconcealed(lnum, 2) [1, 'X', 1]
synconcealed(lnum, 3) [1, 'X', 1]
synconcealed(lnum, 4) [1, 'X', 2]
synconcealed(lnum, 5) [1, 'X', 2]
synconcealed(lnum, 6) [0, '', 0]
synstack({lnum}, {col}) *synstack()*
@@ -7913,8 +7943,19 @@ test_override({name}, {val}) *test_override()*
name effect when {val} is non-zero ~
redraw disable the redrawing() function
char_avail disable the char_avail() function
starting reset the "starting" variable, see below
ALL clear all overrides ({val} is not used)
"starting" is to be used when a test should behave like
startup was done. Since the tests are run by sourcing a
script the "starting" variable is non-zero. This is usually a
good thing (tests run faster), but sometimes changes behavior
in a way that the test doesn't work properly.
When using: >
call test_override('starting', 1)
< The value of "starting" is saved. It is restored by: >
call test_override('starting', 0)
test_settime({expr}) *test_settime()*
Set the time Vim uses internally. Currently only used for
timestamps in the history, as they are used in viminfo, and
@@ -7976,6 +8017,10 @@ timer_start({time}, {callback} [, {options}])
"repeat" Number of times to repeat calling the
callback. -1 means forever. When not present
the callback will be called once.
If the timer causes an error three times in a
row the repeat is cancelled. This avoids that
Vim becomes unusable because of all the error
messages.
Example: >
func MyHandler(timer)
@@ -8335,8 +8380,8 @@ winwidth({nr}) *winwidth()*
:if winwidth(0) <= 50
: exe "normal 50\<C-W>|"
:endif
< For getting the terminal or screen size, see the 'columns'
option.
< For getting the terminal or screen size, see the 'columns'
option.
wordcount() *wordcount()*
@@ -8354,11 +8399,11 @@ wordcount() *wordcount()*
cursor_words Number of words before cursor position
(not in Visual mode)
visual_bytes Number of bytes visually selected
(only in Visual mode)
(only in Visual mode)
visual_chars Number of chars visually selected
(only in Visual mode)
(only in Visual mode)
visual_words Number of chars visually selected
(only in Visual mode)
(only in Visual mode)
*writefile()*
@@ -8702,6 +8747,9 @@ See |:verbose-cmd| for more information.
not used an error message is given. When [!] is used,
an existing function is silently replaced. Unless it
is currently being executed, that is an error.
NOTE: Use ! wisely. If used without care it can cause
an existing function to be replaced unexpectedly,
which is hard to debug.
For the {arguments} see |function-argument|.
@@ -8751,18 +8799,36 @@ See |:verbose-cmd| for more information.
implies that the effect of |:nohlsearch| is undone
when the function returns.
*:endf* *:endfunction* *E126* *E193*
:endf[unction] The end of a function definition. Must be on a line
by its own, without other commands.
*:endf* *:endfunction* *E126* *E193* *W22*
:endf[unction] [argument]
The end of a function definition. Best is to put it
on a line by its own, without [argument].
[argument] can be:
| command command to execute next
\n command command to execute next
" comment always ignored
anything else ignored, warning given when
'verbose' is non-zero
The support for a following command was added in Vim
8.0.0654, before that any argument was silently
ignored.
To be able to define a function inside an `:execute`
command, use line breaks instead of |:bar|: >
:exe "func Foo()\necho 'foo'\nendfunc"
<
*:delf* *:delfunction* *E130* *E131* *E933*
:delf[unction] {name} Delete function {name}.
:delf[unction][!] {name}
Delete function {name}.
{name} can also be a |Dictionary| entry that is a
|Funcref|: >
:delfunc dict.init
< This will remove the "init" entry from "dict". The
function is deleted if there are no more references to
it.
With the ! there is no error if the function does not
exist.
*:retu* *:return* *E133*
:retu[rn] [expr] Return from a function. When "[expr]" is given, it is
evaluated and returned as the result of the function.

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.0. Last change: 2017 Jun 04
*options.txt* For Vim version 8.0. Last change: 2017 Jun 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3522,6 +3522,9 @@ A jump table for the options with a short description can be found at |Q_op|.
:s///gg subst. all subst. one
NOTE: This option is reset when 'compatible' is set.
DEPRECATED: Setting this option may break plugins that are not aware
of this option. Also, many users get confused that adding the /g flag
has the opposite effect of that it normally does.
*'grepformat'* *'gfm'*
'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m")
@@ -4037,7 +4040,9 @@ A jump table for the options with a short description can be found at |Q_op|.
D:DiffDelete,T:DiffText,>:SignColumn,
B:SpellBad,P:SpellCap,R:SpellRare,
L:SpellLocal,-:Conceal,+:Pmenu,=:PmenuSel,
x:PmenuSbar,X:PmenuThumb")
x:PmenuSbar,X:PmenuThumb,*:TabLine,
#:TabLineSel,_:TabLineFill,!:CursorColumn,
.:CursorLine,o:ColorColumn,q:QuickFixLine")
global
{not in Vi}
This option can be used to set highlighting mode for various
@@ -5940,10 +5945,14 @@ A jump table for the options with a short description can be found at |Q_op|.
{only available when compiled with the |+reltime|
feature}
The time in milliseconds for redrawing the display. This applies to
searching for patterns for 'hlsearch' and |:match| highlighting.
searching for patterns for 'hlsearch', |:match| highlighting an syntax
highlighting.
When redrawing takes more than this many milliseconds no further
matches will be highlighted. This is used to avoid that Vim hangs
when using a very complicated pattern.
matches will be highlighted.
For syntax highlighting the time applies per window. When over the
limit syntax highlighting is disabled until |CTRL-L| is used.
This is used to avoid that Vim hangs when using a very complicated
pattern.
*'regexpengine'* *'re'*
'regexpengine' 're' number (default 0)

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.0. Last change: 2017 Mar 29
*pattern.txt* For Vim version 8.0. Last change: 2017 Jun 05
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1076,12 +1076,16 @@ x A single character, with no special meaning, matches itself
":s/[/x/" searches for "[/x" and replaces it with nothing. It does
not search for "[" and replaces it with "x"!
*E944* *E945*
If the sequence begins with "^", it matches any single character NOT
in the collection: "[^xyz]" matches anything but 'x', 'y' and 'z'.
- If two characters in the sequence are separated by '-', this is
shorthand for the full list of ASCII characters between them. E.g.,
"[0-9]" matches any decimal digit. Non-ASCII characters can be
used, but the character values must not be more than 256 apart.
"[0-9]" matches any decimal digit. If the starting character exceeds
the ending character, e.g. [c-a], E944 occurs. Non-ASCII characters
can be used, but the character values must not be more than 256 apart
in the old regexp engine. For example, searching by [\u3000-\u4000]
after setting re=1 emits a E945 error. Prepending \%#=2 will fix it.
- A character class expression is evaluated to the set of characters
belonging to that character class. The following character classes
are supported:

View File

@@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 8.0. Last change: 2017 Mar 06
*quickfix.txt* For Vim version 8.0. Last change: 2017 Jun 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -472,7 +472,11 @@ keep its height, ignoring 'winheight' and 'equalalways'. You can change the
height manually (e.g., by dragging the status line above it with the mouse).
In the quickfix window, each line is one error. The line number is equal to
the error number. You can use ":.cc" to jump to the error under the cursor.
the error number. The current entry is highlighted with the QuickFixLine
highlighting. You can change it to your liking, e.g.: >
:hi QuickFixLine ctermbg=Yellow guibg=Yellow
You can use ":.cc" to jump to the error under the cursor.
Hitting the <Enter> key or double-clicking the mouse on a line has the same
effect. The file containing the error is opened in the window above the
quickfix window. If there already is a window for that file, it is used

View File

@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 8.0. Last change: 2017 Feb 06
*repeat.txt* For Vim version 8.0. Last change: 2017 Jun 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -46,7 +46,7 @@ of area is used, see |visual-repeat|.
==============================================================================
2. Multiple repeats *multi-repeat*
*:g* *:global* *E147* *E148*
*:g* *:global* *E148*
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
@@ -79,8 +79,15 @@ The default for [range] is the whole buffer (1,$). Use "CTRL-C" to interrupt
the command. If an error message is given for a line, the command for that
line is aborted and the global command continues with the next marked or
unmarked line.
*E147*
When the command is used recursively, it only works on one line. Giving a
range is then not allowed. This is useful to find all lines that match a
pattern and do not match another pattern: >
:g/found/v/notfound/{cmd}
This first finds all lines containing "found", but only executes {cmd} when
there is no match for "notfound".
To repeat a non-Ex command, you can use the ":normal" command: >
To execute a non-Ex command, you can use the `:normal` command: >
:g/pat/normal {commands}
Make sure that {commands} ends with a whole command, otherwise Vim will wait
for you to type the rest of the command for each match. The screen will not

View File

@@ -4519,6 +4519,8 @@ E940 eval.txt /*E940*
E941 eval.txt /*E941*
E942 eval.txt /*E942*
E943 message.txt /*E943*
E944 pattern.txt /*E944*
E945 pattern.txt /*E945*
E95 message.txt /*E95*
E96 diff.txt /*E96*
E97 diff.txt /*E97*

130
runtime/doc/terminal.txt Normal file
View File

@@ -0,0 +1,130 @@
*terminal.txt* For Vim version 8.0. Last change: 2017 Jul 04
VIM REFERENCE MANUAL by Bram Moolenaar
Terminal window support *terminal*
WARNING: THIS IS ONLY PARTLY IMPLEMENTED, ANYTHING CAN STILL CHANGE
1. Basic use |terminal-use|
2. Remote testing |terminal-testing|
3. Debugging |terminal-debug|
{Vi does not have any of these commands}
==============================================================================
1. Basic use *terminal-use*
This feature is for running a terminal emulator in a Vim window. A job can be
started connected to the terminal emulator. For example, to run a shell: >
:term bash
Or to run a debugger: >
:term gdb vim
The job runs asynchronously from Vim, the window will be updated to show
output from the job, also while editing in any other window.
When the keyboard focus is in the terminal window, typed keys will be send to
the job. This uses a pty when possible.
Navigate between windows with CTRL-W commands (and mouse).
E.g. CTRL-W CTRL-W moves focus to the next window.
Option 'termkey'
Specify key for Vim command in terminal window. local to window.
Default is CTRL-W.
Option 'termsize'
Specify terminal size. Local to window.
When empty the terminal gets the size from the window.
When set (e.g., "24x80") the terminal size is fixed. If the window is smaller
only the top-left part is displayed. (TODO: scrolling?)
Syntax ~
*:ter* *:terminal*
:terminal[!] [command] Open a new terminal window.
If [command] is provided run it as a job and connect
the input and output to the terminal.
If [command] is not given the 'shell' option is used.
A new buffer will be created, using [command] or
'shell' as the name. If a buffer by this name already
exists a number is added in parenthesis.
E.g. if "gdb" exists the second terminal buffer will
use "gdb (1)".
The window can be closed, in which case the buffer
becomes hidden. The command will not be stopped. The
`:buffer` command can be used to turn the current
window into a terminal window, using the existing
buffer. If there are unsaved changes this fails, use
! to force, as usual.
Resizing ~
The size of the terminal can be in one of three modes:
1. The 'termsize' option is empty: The terminal size follows the window size.
The minimal size is 2 screen lines with 10 cells.
2. The 'termsize' option is "rows*cols", where "rows" is the minimal number of
screen rows and "cols" is the minial number of cells.
3. The 'termsize' option is "rowsXcols" (where the x is upper or lower case).
The terminal size is fixed to the specified number of screen lines and
cells. If the window is bigger there will be unused empty space.
If the window is smaller than the terminal size, only part of the terminal can
be seen (the lower-left part).
The |term_getsize()| function can be used to get the current size of the
terminal. |term_setsize()| can be used only when in the first or second mode,
not when 'termsize' is "rowsXcols".
==============================================================================
2. Remote testing *terminal-testing*
Most Vim tests execute a script inside Vim. For some tests this does not
work, running the test interferes with the code being tested. To avoid this
Vim is executed in a terminal window. The test sends keystrokes to it and
inspects the resulting screen state.
Functions ~
term_sendkeys() send keystrokes to a terminal
term_wait() wait for screen to be updated
term_scrape() inspect terminal screen
==============================================================================
3. Debugging *terminal-debug*
The Terminal debugging plugin can be used to debug a program with gdb and view
the source code in a Vim window. For example: >
:TermDebug vim
This opens three windows:
- A terminal window in which "gdb vim" is executed. Here you can directly
interact with gdb.
- A terminal window for the executed program. When "run" is used in gdb the
program I/O will happen in this window, so that it does not interfere with
controlling gdb.
- A normal Vim window used to show the source code. When gdb jumps to a
source file location this window will display the code, if possible. Values
of variables can be inspected, breakpoints set and cleared, etc.
This uses two terminal windows. To open the gdb window: >
:term gdb [arguments]
To open the terminal to run the tested program |term_open()| is used.
TODO
vim:tw=78:ts=8:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.0. Last change: 2017 Jun 05
*todo.txt* For Vim version 8.0. Last change: 2017 Jun 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -113,6 +113,7 @@ With foldmethod=syntax and nofoldenable comment highlighting isn't removed.
(Marcin Szewczyk, 2017 Apr 26)
ml_get error when using a Python. (Yggdroot, 2017 Jun 1, #1737)
Lemonboy can reproduce (2017 Jun 5)
ml_get errors with buggy script. (Dominique, 2017 Apr 30)
@@ -144,15 +145,9 @@ Openhab syntax file (mueller, #1678)
Use gvimext.dll from the nightly build? (Issue #249)
Patch to remove HAVE_GTK_MULTIHEAD-relevant code. (Kazunobu Kuriyama, 2017 May
5) Update May 11
'synmaxcol' works with bytes instead of screen cells. (Llandon, 2017 May 31,
#1736)
Patch to pass quickfix list index to functions. (Yegappan Lakshmanan, 2017 May
31)
Problem with using :cd when remotely editing a file. (Gerd Wachsmuth, 2017 May
8, #1690)
@@ -168,16 +163,6 @@ manager. Problem with Motif?
Bogus characters inserted when triggering indent while changing text.
(Vitor Antunes, 2016 Nov 22, #1269)
Patch to have ":stag" respect 'switchbuf'. (Ingo Karkat, 2017 May 5, #1681)
Patch to improve building with MSVC. (Leonardo Manera, #1747)
Wrong selection of quoted text (Guraga, #1687)
Patch to fix selection of quoted text. (Christian Brabandt, 2017 May 7, #1687)
Patch to use separate error message for regex range. (Itchyny, Ken Hamada,
2017 May 16)
Segmentation fault with complete(). (Lifepillar, 2017 Apr 29, #1668)
Check for "pat" to be NULL in search_for_exact_line()?
How did it get NULL? Comment by Christian, Apr 30.
@@ -185,18 +170,8 @@ How did it get NULL? Comment by Christian, Apr 30.
Is it possible to keep the complete menu open when calling complete()?
(Prabir Shrestha, 2017 May 19, #1713)
Calling may_req_ambiguous_char_width() and may_req_bg_color() only after
executing command line commands may not work properly.
(Rastislav Barlink, 2017 May 18)
Set "starting" to 0 earlier, and move the may_req calls above exe_commands()?
No, that's a problem with using "-c quit", not running Vim interactive.
Memory leak in test97? The string is actually freed. Weird.
Patch for shellescape(). (Christian Brabandt, 2017 Apr 20, #1590)
Patch for flickering redraw. (Hirohito Higashi, 2017 Apr 23, #1637)
New value "uselast" for 'switchbuf'. (Lemonboy, 2017 Apr 23, #1652)
Add a toolbar in the terminal. Can be global, above all windows, or specific
@@ -212,18 +187,6 @@ Perhaps simpler: actually delete the mappings. Use maplist() to list matching
mappings (with a lhs prefix, like maparg()), mapdelete() to delete,
maprestore() to restore (using the output of maplist().
Patch to support chinese wordcount in utf-8. (Rain, 2017 May 24, #1722)
Or not?
"gn" selects one character instead of the searched text. (keyboardfire, #1683)
Patch by Christian, 2017 May 7.
Wrong memory access using p_fdm, found in patch to add tests for diff mode
(#1658) (Dominique Pelle, 2017 May 6)
Patch to improve test coverage for diff mode. (Dominique Pelle, 2017 May 11,
#1685)
Add an argument to :mkvimrc (or add aother command) to skip mappings from
plugins (source is a Vim script). No need to put these in a .vimrc, they will
be defined when the plugin is loaded.
@@ -249,6 +212,7 @@ Also get E749 on exit.
Another example in #1309
Patch to change all use of &sw to shiftwidth(). (Tyru, 2017 Feb 19)
Takuya Fujiwara
Wait until maintainers integrate it.
When deleting a mark or register, leave a tombstone, so that it's also deleted
@@ -358,6 +322,8 @@ Patch for wrong cursor position on wrapped line, involving breakindent.
(Ozaki Kiichi, 2016 Nov 25)
Does this also fix #1408 ?
Patch to add "module" to quickfix entries. (Coot, 2017 Jun 8, #1757)
Patch for 'cursorlinenr' option. (Ozaki Kiichi, 2016 Nov 30)
When 'completeopt' has "noselect" does not insert a newline. (Lifepillar, 2017
@@ -500,9 +466,6 @@ This does not work: :set cscopequickfix=a-
Possibly wrong value for seq_cur. (Florent Fayolle, 2016 May 15, #806)
Patch to add separate highlighting for quickfix current line.
(anishsane, 2016 Sep 16, #1080)
Filetype plugin for awk. (Doug Kearns, 2016 Sep 5)
Patch to improve map documentation. Issue #799.
@@ -539,6 +502,9 @@ Because of using the initial buffer? (Dun Peal, 2016 May 12)
Patch to add the :bvimgrep command. (Christian Brabandt, 2014 Nov 12)
Updated 2016 Jun 10, #858 Update 2017 Mar 28: use <buffer>
Patch to fix that an encoding conversion failure results in a corrupted or
empty file. (Christian Brabandt, #1765, https://github.com/chrisbra/vim-mq-patches/blob/master/conversion_error)
Add redrawtabline command. (Naruhiko Nishino, 2016 Jun 11)
Neovim patch for utfc_ptr2char_len() https://github.com/neovim/neovim/pull/4574
@@ -1032,8 +998,6 @@ Patch to handle integer overflow. (Aaron Burrow, 2013 Dec 12)
Patch to add "ntab" item in 'listchars' to repeat first character. (Nathaniel
Braun, pragm, 2013 Oct 13) A better solution 2014 Mar 5.
/[b-a] gives error E16, should probably be E769.
7 Windows XP: When using "ClearType" for text smoothing, a column of yellow
pixels remains when typing spaces in front of a "D" ('guifont' set to
"lucida_console:h8").

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2017 Jun 04
" Last Change: 2017 Jun 22
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -48,6 +48,9 @@ func! s:StarSetf(ft)
endif
endfunc
" Vim help file
au BufNewFile,BufRead $VIMRUNTIME/doc/*.txt setf help
" Abaqus or Trasys
au BufNewFile,BufRead *.inp call s:Check_inp()
@@ -2253,6 +2256,8 @@ func! s:FTtex()
let format = tolower(matchstr(firstline, '\a\+'))
let format = substitute(format, 'pdf', '', '')
if format == 'tex'
let format = 'latex'
elseif format == 'plaintex'
let format = 'plain'
endif
else
@@ -2784,7 +2789,13 @@ au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh')
" Plain text files, needs to be far down to not override others. This avoids
" the "conf" type being used if there is a line starting with '#'.
au BufNewFile,BufRead *.txt,*.text,README setf text
au BufNewFile,BufRead *.text,README setf text
" Help files match *.txt but should have a last line that is a modeline.
au BufNewFile,BufRead *.txt
\ if getline('$') !~ 'vim:.*ft=help'
\| setf text
\| endif
" Use the filetype detect plugins. They may overrule any of the previously

View File

@@ -87,7 +87,7 @@ function s:MainBlockIndent (prev_indent, prev_lnum, blockstart, stop_at)
endwhile
endwhile
" Fallback - just move back one
return a:prev_indent - &sw
return a:prev_indent - shiftwidth()
endfunction MainBlockIndent
" Section: s:EndBlockIndent {{{1
@@ -131,7 +131,7 @@ function s:EndBlockIndent( prev_indent, prev_lnum, blockstart, blockend )
endwhile
endwhile
" Fallback - just move back one
return a:prev_indent - &sw
return a:prev_indent - shiftwidth()
endfunction EndBlockIndent
" Section: s:StatementIndent {{{1
@@ -213,15 +213,15 @@ function GetAdaIndent()
endif
" Move indent in
if ! false_match
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
elseif line =~ '^\s*\(case\|exception\)\>'
" Move indent in twice (next 'when' will move back)
let ind = ind + 2 * &sw
let ind = ind + 2 * shiftwidth()
elseif line =~ '^\s*end\s*record\>'
" Move indent back to tallying 'type' preceeding the 'record'.
" Allow indent to be equal to 'end record's.
let ind = s:MainBlockIndent( ind+&sw, lnum, 'type\>', '' )
let ind = s:MainBlockIndent( ind+shiftwidth(), lnum, 'type\>', '' )
elseif line =~ '\(^\s*new\>.*\)\@<!)\s*[;,]\s*$'
" Revert to indent of line that started this parenthesis pair
exe lnum
@@ -235,10 +235,10 @@ function GetAdaIndent()
exe v:lnum
elseif line =~ '[.=(]\s*$'
" A statement continuation - move in one
let ind = ind + &sw
let ind = ind + shiftwidth()
elseif line =~ '^\s*new\>'
" Multiple line generic instantiation ('package blah is\nnew thingy')
let ind = s:StatementIndent( ind - &sw, lnum )
let ind = s:StatementIndent( ind - shiftwidth(), lnum )
elseif line =~ ';\s*$'
" Statement end (but not 'end' ) - try to find current statement-start indent
let ind = s:StatementIndent( ind, lnum )
@@ -256,17 +256,17 @@ function GetAdaIndent()
elseif continuation && line =~ '^\s*('
" Don't do this if we've already indented due to the previous line
if ind == initind
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
elseif line =~ '^\s*\(begin\|is\)\>'
let ind = s:MainBlockIndent( ind, lnum, '\(procedure\|function\|declare\|package\|task\)\>', 'begin\>' )
elseif line =~ '^\s*record\>'
let ind = s:MainBlockIndent( ind, lnum, 'type\>\|for\>.*\<use\>', '' ) + &sw
let ind = s:MainBlockIndent( ind, lnum, 'type\>\|for\>.*\<use\>', '' ) + shiftwidth()
elseif line =~ '^\s*\(else\|elsif\)\>'
let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' )
elseif line =~ '^\s*when\>'
" Align 'when' one /in/ from matching block start
let ind = s:MainBlockIndent( ind, lnum, '\(case\|exception\)\>', '' ) + &sw
let ind = s:MainBlockIndent( ind, lnum, '\(case\|exception\)\>', '' ) + shiftwidth()
elseif line =~ '^\s*end\>\s*\<if\>'
" End of if statements
let ind = s:EndBlockIndent( ind, lnum, 'if\>', 'end\>\s*\<if\>' )

View File

@@ -60,7 +60,7 @@ function! GetAwkIndent()
" 'pattern { action }' (simple check match on /{/ increases the indent then)
if s:Get_brace_balance( prev_data, '{', '}' ) > 0
return ind + &sw
return ind + shiftwidth()
endif
let brace_balance = s:Get_brace_balance( prev_data, '(', ')' )
@@ -99,7 +99,7 @@ function! GetAwkIndent()
return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum))
else
" if/for/while without '{'
return ind + &sw
return ind + shiftwidth()
endif
endif
endif
@@ -140,7 +140,7 @@ function! GetAwkIndent()
" Decrease indent if this line contains a '}'.
if getline(v:lnum) =~ '^\s*}'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -69,7 +69,7 @@ function! GetBstIndent(lnum) abort
endif
let fakeline = substitute(line,'^}','','').matchstr(cline,'^}')
let ind = indent(lnum)
let ind = ind + &sw * s:count(line,'{')
let ind = ind - &sw * s:count(fakeline,'}')
let ind = ind + shiftwidth() * s:count(line,'{')
let ind = ind - shiftwidth() * s:count(fakeline,'}')
return ind
endfunction

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Bazel (http://bazel.io)
" Maintainer: David Barnett (https://github.com/google/vim-ft-bzl)
" Last Change: 2015 Aug 11
" Last Change: 2017 Jun 13
if exists('b:did_indent')
finish
@@ -41,11 +41,8 @@ function GetBzlIndent(lnum) abort
if exists('g:pyindent_open_paren')
let l:pyindent_open_paren = g:pyindent_open_paren
endif
" Vim 7.3.693 and later defines a shiftwidth() function to get the effective
" shiftwidth value. Fall back to &shiftwidth if the function doesn't exist.
let l:sw_expr = exists('*shiftwidth') ? 'shiftwidth()' : '&shiftwidth'
let g:pyindent_nested_paren = l:sw_expr . ' * 2'
let g:pyindent_open_paren = l:sw_expr . ' * 2'
let g:pyindent_nested_paren = 'shiftwidth() * 2'
let g:pyindent_open_paren = 'shiftwidth() * 2'
endif
let l:indent = -1

View File

@@ -47,7 +47,7 @@ fun! CdlGetIndent(lnum)
let thisline = getline(a:lnum)
if match(thisline, '^\s*\(\k\+\|\[[^]]*]\)\s*\(,\|;\s*$\)') >= 0
" it's an attributes line
return &sw
return shiftwidth()
elseif match(thisline, '^\c\s*\([{}]\|\/[*/]\|dimension\|schedule\|group\|hierarchy\|class\)') >= 0
" it's a header or '{' or '}' or a comment
return 0
@@ -71,13 +71,13 @@ fun! CdlGetIndent(lnum)
let c = line[inicio-1]
" ')' and '=' don't change indent and are useless to set 'f'
if c == '{'
return &sw
return shiftwidth()
elseif c != ')' && c != '='
let f = 1 " all but 'elseif' are followed by a formula
if c ==? 'n' || c ==? 'e' " 'then', 'else'
let ind = ind + &sw
let ind = ind + shiftwidth()
elseif strpart(line, inicio-6, 6) ==? 'elseif' " elseif, set f to conditional
let ind = ind + &sw
let ind = ind + shiftwidth()
let f = 0
end
end
@@ -98,16 +98,16 @@ fun! CdlGetIndent(lnum)
let ind = 0
let f = 1
elseif c == ')' || c== ';' || strpart(line, inicio-5, 5) ==? 'endif'
let ind = ind - &sw
let ind = ind - shiftwidth()
elseif c == '(' || c ==? 'f' " '(' or 'if'
let ind = ind + &sw
let ind = ind + shiftwidth()
else " c == '='
" if it is an asignment increase indent
if f == -1 " we don't know yet, find out
let f = CdlAsignment(lnum, strpart(line, 0, inicio))
end
if f == 1 " formula increase it
let ind = ind + &sw
let ind = ind + shiftwidth()
end
end
endw
@@ -115,13 +115,13 @@ fun! CdlGetIndent(lnum)
" CURRENT LINE, if it starts with a closing element, decrease indent
" or if it starts with '=' (asignment), increase indent
if match(thisline, '^\c\s*\(else\|then\|endif\|[);]\)') >= 0
let ind = ind - &sw
let ind = ind - shiftwidth()
elseif match(thisline, '^\s*=') >= 0
if f == -1 " we don't know yet if is an asignment, find out
let f = CdlAsignment(lnum, "")
end
if f == 1 " formula increase it
let ind = ind + &sw
let ind = ind + shiftwidth()
end
end

View File

@@ -31,19 +31,19 @@ function! GetChaiScriptIndent()
let flag = 0
let prevline = getline(lnum)
if prevline =~ '^.*{.*'
let ind = ind + &shiftwidth
let ind = ind + shiftwidth()
let flag = 1
endif
" Subtract a 'shiftwidth' after lines containing a { followed by a }
" to keep it balanced
if flag == 1 && prevline =~ '.*{.*}.*'
let ind = ind - &shiftwidth
let ind = ind - shiftwidth()
endif
" Subtract a 'shiftwidth' on lines ending with }
if getline(v:lnum) =~ '^\s*\%(}\)'
let ind = ind - &shiftwidth
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -261,7 +261,7 @@ if exists("*searchpairpos")
call cursor(paren)
if s:is_method_special_case(paren)
return [paren[0], paren[1] + &shiftwidth - 1]
return [paren[0], paren[1] + shiftwidth() - 1]
endif
if s:is_reader_conditional_special_case(paren)
@@ -299,19 +299,19 @@ if exists("*searchpairpos")
let ww = s:strip_namespace_and_macro_chars(w)
if &lispwords =~# '\V\<' . ww . '\>'
return [paren[0], paren[1] + &shiftwidth - 1]
return [paren[0], paren[1] + shiftwidth() - 1]
endif
if g:clojure_fuzzy_indent
\ && !s:match_one(g:clojure_fuzzy_indent_blacklist, ww)
\ && s:match_one(g:clojure_fuzzy_indent_patterns, ww)
return [paren[0], paren[1] + &shiftwidth - 1]
return [paren[0], paren[1] + shiftwidth() - 1]
endif
call search('\v\_s', 'cW')
call search('\v\S', 'W')
if paren[0] < line(".")
return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)]
return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : shiftwidth() - 1)]
endif
call search('\v\S', 'bW')

View File

@@ -68,19 +68,19 @@ fun! CMakeGetIndent(lnum)
let ind = ind
else
if previous_line =~? cmake_indent_begin_regex
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
if previous_line =~? cmake_indent_open_regex
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
endif
" Subtract
if this_line =~? cmake_indent_end_regex
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
if previous_line =~? cmake_indent_close_regex
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -52,11 +52,11 @@ function! s:optionalblock(lnum,ind,blocks,clauses)
if getline(lastclause) =~? clauses && s:stripped(lastclause) !~? '^'.begin
let ind = indent(lastclause)
elseif lastclause > 0
let ind = indent(lastclause) + &sw
"let ind = ind + &sw
let ind = indent(lastclause) + shiftwidth()
"let ind = ind + shiftwidth()
endif
elseif line =~? clauses && cline !~? end
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
return ind
endfunction
@@ -98,8 +98,8 @@ function! GetCobolIndent(lnum) abort
let num = matchstr(line,'^\s*\zs\d\+\>')
if 0+cnum == num
return lindent
elseif 0+cnum > num && default < lindent + &sw
let default = lindent + &sw
elseif 0+cnum > num && default < lindent + shiftwidth()
let default = lindent + shiftwidth()
endif
elseif lindent < bshft && lindent >= ashft
break
@@ -135,13 +135,13 @@ function! GetCobolIndent(lnum) abort
if line =~? '^PERFORM\>'
let perfline = substitute(line, '\c^PERFORM\s*', "", "")
if perfline =~? '^\%(\k\+\s\+TIMES\)\=\s*$'
let ind = ind + &sw
let ind = ind + shiftwidth()
elseif perfline =~? '^\%(WITH\s\+TEST\|VARYING\|UNTIL\)\>.*[^.]$'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
endif
if line =~? '^\%(IF\|THEN\|ELSE\|READ\|EVALUATE\|SEARCH\|SELECT\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
let ind = s:optionalblock(a:lnum,ind,'ADD\|COMPUTE\|DIVIDE\|MULTIPLY\|SUBTRACT','ON\s\+SIZE\s\+ERROR')
let ind = s:optionalblock(a:lnum,ind,'STRING\|UNSTRING\|ACCEPT\|DISPLAY\|CALL','ON\s\+OVERFLOW\|ON\s\+EXCEPTION')
@@ -157,10 +157,10 @@ function! GetCobolIndent(lnum) abort
"&& s:stripped(lastclause) !~? '^\%(SEARCH\|EVALUATE\|READ\)\>'
let ind = indent(lastclause)
elseif lastclause > 0
let ind = indent(lastclause) + &sw
let ind = indent(lastclause) + shiftwidth()
endif
elseif line =~? '^WHEN\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
"I'm not sure why I had this
"if line =~? '^ELSE\>-\@!' && line !~? '\.$'
@@ -168,7 +168,7 @@ function! GetCobolIndent(lnum) abort
"endif
if cline =~? '^\(END\)\>-\@!'
" On lines with just END, 'guess' a simple shift left
let ind = ind - &sw
let ind = ind - shiftwidth()
elseif cline =~? '^\(END-IF\|THEN\|ELSE\)\>-\@!'
call cursor(a:lnum,indent(a:lnum))
let match = searchpair('\c-\@<!\<IF\>','\c-\@<!\%(THEN\|ELSE\)\>','\c-\@<!\<END-IF\>\zs','bnW',s:skip)
@@ -209,7 +209,7 @@ function! GetCobolIndent(lnum) abort
if match > 0
let ind = indent(match)
elseif cline =~? '^\(END-\(READ\|EVALUATE\|SEARCH\|PERFORM\)\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif
return ind < bshft ? bshft : ind

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Cucumber
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2016 Aug 29
" Last Change: 2017 Jun 13
if exists("b:did_indent")
finish
@@ -27,7 +27,7 @@ function! GetCucumberIndent()
let line = getline(prevnonblank(v:lnum-1))
let cline = getline(v:lnum)
let nline = getline(nextnonblank(v:lnum+1))
let sw = exists('*shiftwidth') ? shiftwidth() : &sw
let sw = exists('*shiftwidth') ? shiftwidth() : shiftwidth()
let syn = s:syn(prevnonblank(v:lnum-1))
let csyn = s:syn(v:lnum)
let nsyn = s:syn(nextnonblank(v:lnum+1))

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Dylan
" Version: 0.01
" Last Change: 2003 Feb 04
" Last Change: 2017 Jun 13
" Maintainer: Brent A. Fulgham <bfulgham@debian.org>
" Only load this indent file when no other was loaded.
@@ -45,13 +45,13 @@ function DylanGetIndent()
" If previous line was a 'define', indent
if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)'
let chg = &sw
let chg = shiftwidth()
" local methods indent the shift-width, plus 6 for the 'local'
elseif prevline =~? '^\s*local'
let chg = &sw + 6
let chg = shiftwidth() + 6
" If previous line was a let with no closing semicolon, indent
elseif prevline =~? '^\s*let.*[^;]\s*$'
let chg = &sw
let chg = shiftwidth()
" If previous line opened a parenthesis, and did not close it, indent
elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1
@@ -75,13 +75,13 @@ function DylanGetIndent()
" line doesn't start with an indentable command:
let curr_str = getline(curr_line)
if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)'
let chg = &sw
let chg = shiftwidth()
endif
endif
" If a line starts with end, un-indent (even if we just indented!)
if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)'
let chg = chg - &sw
let chg = chg - shiftwidth()
endif
return ind + chg

View File

@@ -669,7 +669,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol)
call s:Pop(a:stack)
if empty(a:stack)
call s:Log(' Stack is ["when"], so LTI is in a guard -> return')
return [1, a:stored_vcol + &sw + 2]
return [1, a:stored_vcol + shiftwidth() + 2]
else
return [1, s:UnexpectedToken(a:token, a:stack)]
endif
@@ -678,7 +678,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol)
call s:Pop(a:stack)
if empty(a:stack)
call s:Log(' Stack is ["->"], so LTI is in function body -> return')
return [1, a:stored_vcol + &sw]
return [1, a:stored_vcol + shiftwidth()]
elseif a:stack[0] ==# ';'
call s:Pop(a:stack)
if empty(a:stack)
@@ -797,7 +797,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
elseif token ==# 'begin'
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
\stored_vcol, 'end', &sw)
\stored_vcol, 'end', shiftwidth())
if ret | return res | endif
" case EXPR of BRANCHES end
@@ -848,11 +848,11 @@ function! s:ErlangCalcIndent2(lnum, stack)
elseif stack == ['->']
call s:Log(' LTI is in a branch after ' .
\'"of/receive/after/if/catch" -> return')
return stored_vcol + &sw
return stored_vcol + shiftwidth()
elseif stack == ['when']
call s:Log(' LTI is in a guard after ' .
\'"of/receive/after/if/catch" -> return')
return stored_vcol + &sw
return stored_vcol + shiftwidth()
else
return s:UnexpectedToken(token, stack)
endif
@@ -888,7 +888,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
if empty(stack)
call s:Log(' LTI is in a condition; matching ' .
\'"case/if/try/receive" found')
let stored_vcol = curr_vcol + &sw
let stored_vcol = curr_vcol + shiftwidth()
elseif stack[0] ==# 'align_to_begin_element'
call s:Pop(stack)
let stored_vcol = curr_vcol
@@ -897,23 +897,23 @@ function! s:ErlangCalcIndent2(lnum, stack)
\'"case/if/try/receive" found')
call s:Pop(stack)
call s:Pop(stack)
let stored_vcol = curr_vcol + &sw
let stored_vcol = curr_vcol + shiftwidth()
elseif stack[0] ==# '->'
call s:Log(' LTI is in a branch; matching ' .
\'"case/if/try/receive" found')
call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * &sw
let stored_vcol = curr_vcol + 2 * shiftwidth()
elseif stack[0] ==# 'when'
call s:Log(' LTI is in a guard; matching ' .
\'"case/if/try/receive" found')
call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * &sw + 2
let stored_vcol = curr_vcol + 2 * shiftwidth() + 2
endif
endif
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
\stored_vcol, 'end', &sw)
\stored_vcol, 'end', shiftwidth())
if ret | return res | endif
elseif token ==# 'fun'
@@ -930,7 +930,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
" stack = ['when'] => LTI is in a guard
if empty(stack)
call s:Log(' LTI is in a condition; matching "fun" found')
let stored_vcol = curr_vcol + &sw
let stored_vcol = curr_vcol + shiftwidth()
elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';'
call s:Log(' LTI is in a condition; matching "fun" found')
call s:Pop(stack)
@@ -938,15 +938,15 @@ function! s:ErlangCalcIndent2(lnum, stack)
elseif stack[0] ==# '->'
call s:Log(' LTI is in a branch; matching "fun" found')
call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * &sw
let stored_vcol = curr_vcol + 2 * shiftwidth()
elseif stack[0] ==# 'when'
call s:Log(' LTI is in a guard; matching "fun" found')
call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * &sw + 2
let stored_vcol = curr_vcol + 2 * shiftwidth() + 2
endif
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
\stored_vcol, 'end', &sw)
\stored_vcol, 'end', shiftwidth())
if ret | return res | endif
else
" Pass: we have a function reference (e.g. "fun f/0")
@@ -1220,7 +1220,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
" when A,
" LTI
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
\stored_vcol, &sw)
\stored_vcol, shiftwidth())
if ret | return res | endif
else
" Example:
@@ -1252,7 +1252,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
" If LTI is between an 'after' and the corresponding
" 'end', then let's return
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
\stored_vcol, &sw)
\stored_vcol, shiftwidth())
if ret | return res | endif
endif

View File

@@ -47,11 +47,7 @@ set cpo&vim
function! GetErubyIndent(...)
" The value of a single shift-width
if exists('*shiftwidth')
let sw = shiftwidth()
else
let sw = &sw
endif
let sw = shiftwidth()
if a:0 && a:1 == '.'
let v:lnum = line('.')

View File

@@ -339,7 +339,7 @@ function FalconGetIndent(...)
" If the previous line ended with a block opening, add a level of indent.
if s:Match(lnum, s:block_regex)
return indent(s:GetMSL(lnum)) + &sw
return indent(s:GetMSL(lnum)) + shiftwidth()
endif
" If it contained hanging closing brackets, find the rightmost one, find its
@@ -350,20 +350,20 @@ function FalconGetIndent(...)
if opening.pos != -1
if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
if col('.') + 1 == col('$')
return ind + &sw
return ind + shiftwidth()
else
return virtcol('.')
endif
else
let nonspace = matchend(line, '\S', opening.pos + 1) - 1
return nonspace > 0 ? nonspace : ind + &sw
return nonspace > 0 ? nonspace : ind + shiftwidth()
endif
elseif closing.pos != -1
call cursor(lnum, closing.pos + 1)
normal! %
if s:Match(line('.'), s:falcon_indent_keywords)
return indent('.') + &sw
return indent('.') + shiftwidth()
else
return indent('.')
endif
@@ -392,7 +392,7 @@ function FalconGetIndent(...)
let col = s:Match(lnum, s:falcon_indent_keywords)
if col > 0
call cursor(lnum, col)
let ind = virtcol('.') - 1 + &sw
let ind = virtcol('.') - 1 + shiftwidth()
" TODO: make this better (we need to count them) (or, if a searchpair
" fails, we know that something is lacking an end and thus we indent a
" level
@@ -422,9 +422,9 @@ function FalconGetIndent(...)
" TODO: this does not take into account contrived things such as
" module Foo; class Bar; end
if s:Match(lnum, s:falcon_indent_keywords)
let ind = msl_ind + &sw
let ind = msl_ind + shiftwidth()
if s:Match(lnum, s:end_end_regex)
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind
endif
@@ -433,7 +433,7 @@ function FalconGetIndent(...)
" closing bracket, indent one extra level.
if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
if lnum == p_lnum
let ind = msl_ind + &sw
let ind = msl_ind + shiftwidth()
else
let ind = msl_ind
endif

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: git config file
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2016 Aug 29
" Last Change: 2017 Jun 13
if exists("b:did_indent")
finish
@@ -20,7 +20,7 @@ if exists("*GetGitconfigIndent")
endif
function! GetGitconfigIndent()
let sw = exists('*shiftwidth') ? shiftwidth() : &sw
let sw = shiftwidth()
let line = getline(prevnonblank(v:lnum-1))
let cline = getline(v:lnum)
if line =~ '\\\@<!\%(\\\\\)*\\$'

View File

@@ -2,7 +2,7 @@
" Language: gitolite configuration
" URL: https://github.com/tmatilai/gitolite.vim
" Maintainer: Teemu Matilainen <teemu.matilainen@iki.fi>
" Last Change: 2011-12-24
" Last Change: 2017 Jun 13
if exists("b:did_indent")
finish
@@ -27,11 +27,11 @@ function! GetGitoliteIndent()
let cline = getline(v:lnum)
if cline =~ '^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\|-\)[ \t=]'
return &sw
return shiftwidth()
elseif cline =~ '^\s*config\s'
return &sw
return shiftwidth()
elseif pline =~ '^\s*repo\s' && cline =~ '^\s*\(#.*\)\?$'
return &sw
return shiftwidth()
elseif cline =~ '^\s*#'
return indent(prevln)
elseif cline =~ '^\s*$'

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Go
" Maintainer: David Barnett (https://github.com/google/vim-ft-go)
" Last Change: 2014 Aug 16
" Last Change: 2017 Jun 13
"
" TODO:
" - function invocations split across lines
@@ -23,18 +23,6 @@ if exists('*GoIndent')
finish
endif
" The shiftwidth() function is relatively new.
" Don't require it to exist.
if exists('*shiftwidth')
function s:sw() abort
return shiftwidth()
endfunction
else
function s:sw() abort
return &shiftwidth
endfunction
endif
function! GoIndent(lnum)
let l:prevlnum = prevnonblank(a:lnum-1)
if l:prevlnum == 0
@@ -51,17 +39,17 @@ function! GoIndent(lnum)
if l:prevl =~ '[({]\s*$'
" previous line opened a block
let l:ind += s:sw()
let l:ind += shiftwidth()
endif
if l:prevl =~# '^\s*\(case .*\|default\):$'
" previous line is part of a switch statement
let l:ind += s:sw()
let l:ind += shiftwidth()
endif
" TODO: handle if the previous line is a label.
if l:thisl =~ '^\s*[)}]'
" this line closed a block
let l:ind -= s:sw()
let l:ind -= shiftwidth()
endif
" Colons are tricky.
@@ -69,7 +57,7 @@ function! GoIndent(lnum)
" We ignore trying to deal with jump labels because (a) they're rare, and
" (b) they're hard to disambiguate from a composite literal key.
if l:thisl =~# '^\s*\(case .*\|default\):$'
let l:ind -= s:sw()
let l:ind -= shiftwidth()
endif
return l:ind

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Haml
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2016 Aug 29
" Last Change: 2017 Jun 13
if exists("b:did_indent")
finish
@@ -37,7 +37,7 @@ function! GetHamlIndent()
let line = substitute(line,'^\s\+','','')
let indent = indent(lnum)
let cindent = indent(v:lnum)
let sw = exists('*shiftwidth') ? shiftwidth() : &sw
let sw = shiftwidth()
if cline =~# '\v^-\s*%(elsif|else|when)>'
let indent = cindent < indent ? cindent : indent - sw
endif

View File

@@ -27,13 +27,13 @@ function HamGetIndent(lnum)
" Add a shiftwidth to statements following if, else, elseif,
" case, select, default, do, until, while, for, start
if prevline =~? '^\s*\<\(if\|else\%(if\)\?\|for\|repeat\|do\|while\|sub\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Subtract a shiftwidth from else, elseif, end(if|while|for), until
let line = getline(v:lnum)
if line =~? '^\s*\(else\|elseif\|loop\|until\|end\%(if\|while\|for\|sub\)\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -47,7 +47,7 @@ function GetHogIndent()
" Continuation of a line that wasn't indented
let prevline = getline(prevlnum)
if prevline =~ '^\k\+.*\\\s*$'
return &sw
return shiftwidth()
endif
" Continuation of a line that was indented
@@ -58,13 +58,13 @@ function GetHogIndent()
" Indent the next line if previous line contained a start of a block
" definition ('{' or '(').
if prevline =~ '^\k\+[^#]*{}\@!\s*$' " TODO || prevline =~ '^\k\+[^#]*()\@!\s*$'
return &sw
return shiftwidth()
endif
" Match inside of a block
if s:IsInBlock(v:lnum)
if prevline =~ "^\k\+.*$"
return &sw
return shiftwidth()
else
return indent(prevlnum)
endif

View File

@@ -2,7 +2,7 @@
" Header: "{{{
" Maintainer: Bram Moolenaar
" Original Author: Andy Wokula <anwoku@yahoo.de>
" Last Change: 2017 Jan 17
" Last Change: 2017 Jun 13
" Version: 1.0
" Description: HTML indent script with cached state for faster indenting on a
" range of lines.
@@ -51,15 +51,6 @@ if exists("*HtmlIndent") && !exists('g:force_reload_html')
finish
endif
" shiftwidth() exists since patch 7.3.694
if exists('*shiftwidth')
let s:ShiftWidth = function('shiftwidth')
else
func! s:ShiftWidth()
return &shiftwidth
endfunc
endif
" Allow for line continuation below.
let s:cpo_save = &cpo
set cpo-=C
@@ -123,7 +114,7 @@ func! HtmlIndent_CheckUserSettings()
let indone = {"zero": 0
\,"auto": "indent(prevnonblank(v:lnum-1))"
\,"inc": "b:hi_indent.blocktagind + s:ShiftWidth()"}
\,"inc": "b:hi_indent.blocktagind + shiftwidth()"}
let script1 = ''
if exists("b:html_indent_script1")
@@ -358,7 +349,7 @@ func! s:CheckBlockTag(blocktag, ind)
endif
let b:hi_newstate.blocklnr = v:lnum
" save allover indent for the endtag
let b:hi_newstate.blocktagind = b:hi_indent.baseindent + (s:nextrel + s:curind) * s:ShiftWidth()
let b:hi_newstate.blocktagind = b:hi_indent.baseindent + (s:nextrel + s:curind) * shiftwidth()
if a:ind == 3
return "SCRIPT" " all except this must be lowercase
" line is to be checked again for the type attribute
@@ -480,7 +471,7 @@ func! s:FreshState(lnum)
let state.blocklnr = stopline
" check preceding tags in the line:
call s:CountITags(tagline[: stopcol-2])
let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * s:ShiftWidth()
let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * shiftwidth()
return state
elseif stopline == state.lnum
" handle special case: previous line (= state.lnum) contains a
@@ -490,7 +481,7 @@ func! s:FreshState(lnum)
if !swendtag
let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bnW")
call s:CountITags(tolower(getline(bline)[: bcol-2]))
let state.baseindent = indent(bline) + (s:curind + s:nextrel) * s:ShiftWidth()
let state.baseindent = indent(bline) + (s:curind + s:nextrel) * shiftwidth()
return state
endif
endif
@@ -511,7 +502,7 @@ func! s:FreshState(lnum)
if found == 2
let state.baseindent = b:hi_indent.baseindent
endif
let state.blocktagind = indent(comlnum) + (s:curind + s:nextrel) * s:ShiftWidth()
let state.blocktagind = indent(comlnum) + (s:curind + s:nextrel) * shiftwidth()
return state
endif
@@ -530,7 +521,7 @@ func! s:FreshState(lnum)
let text = tolower(getline(comlnum)[: comcol-2])
endif
call s:CountITags(text)
let state.baseindent = indent(comlnum) + (s:curind + s:nextrel) * s:ShiftWidth()
let state.baseindent = indent(comlnum) + (s:curind + s:nextrel) * shiftwidth()
" TODO check tags that follow "-->"
return state
endif
@@ -550,9 +541,9 @@ func! s:FreshState(lnum)
let text = getline(start_lnum)
let swendtag = match(text, '^\s*</') >= 0
call s:CountITags(text[: col('.') - 2])
let state.baseindent += s:nextrel * s:ShiftWidth()
let state.baseindent += s:nextrel * shiftwidth()
if !swendtag
let state.baseindent += s:curind * s:ShiftWidth()
let state.baseindent += s:curind * shiftwidth()
endif
endif
return state
@@ -565,9 +556,9 @@ func! s:FreshState(lnum)
let text = getline(state.lnum)
let swendtag = match(text, '^\s*</') >= 0
call s:CountITags(tolower(text))
let state.baseindent = indent(state.lnum) + s:nextrel * s:ShiftWidth()
let state.baseindent = indent(state.lnum) + s:nextrel * shiftwidth()
if !swendtag
let state.baseindent += s:curind * s:ShiftWidth()
let state.baseindent += s:curind * shiftwidth()
endif
return state
endfunc "}}}
@@ -646,7 +637,7 @@ func! s:CSSIndent()
" add indent after {
let brace_counts = HtmlIndent_CountBraces(prev_lnum)
let extra = brace_counts.c_open * s:ShiftWidth()
let extra = brace_counts.c_open * shiftwidth()
let prev_text = getline(prev_lnum)
let below_end_brace = prev_text =~ '}\s*$'
@@ -663,7 +654,7 @@ func! s:CSSIndent()
" if the current line is not a comment or starts with @ (used by template
" systems) reduce indent if previous line is a continuation line
if !prev_hasfield && !prev_special
let extra = -s:ShiftWidth()
let extra = -shiftwidth()
endif
else
let cur_hasfield = curtext =~ '^\s*[a-zA-Z0-9-]\+:'
@@ -671,14 +662,14 @@ func! s:CSSIndent()
if !cur_hasfield && (prev_hasfield || prev_unfinished)
" Continuation line has extra indent if the previous line was not a
" continuation line.
let extra = s:ShiftWidth()
let extra = shiftwidth()
" Align with @if
if prev_text =~ '^\s*@if '
let extra = 4
endif
elseif cur_hasfield && !prev_hasfield && !prev_special
" less indent below a continuation line
let extra = -s:ShiftWidth()
let extra = -shiftwidth()
endif
endif
endif
@@ -699,10 +690,10 @@ func! s:CSSIndent()
if special
" do not reduce indent below @{ ... }
if extra < 0
let extra += s:ShiftWidth()
let extra += shiftwidth()
endif
else
let extra -= (brace_counts.c_close - (prev_text =~ '^\s*}')) * s:ShiftWidth()
let extra -= (brace_counts.c_close - (prev_text =~ '^\s*}')) * shiftwidth()
endif
endif
@@ -710,10 +701,10 @@ func! s:CSSIndent()
if extra == 0
if brace_counts.p_open > brace_counts.p_close
" previous line has more ( than ): add a shiftwidth
let extra = s:ShiftWidth()
let extra = shiftwidth()
elseif brace_counts.p_open < brace_counts.p_close
" previous line has more ) than (: subtract a shiftwidth
let extra = -s:ShiftWidth()
let extra = -shiftwidth()
endif
endif
@@ -816,7 +807,7 @@ func! s:Alien5()
let idx = match(prevtext, '^\s*\zs<!--')
if idx >= 0
" just below comment start, add a shiftwidth
return idx + s:ShiftWidth()
return idx + shiftwidth()
endif
" Some files add 4 spaces just below a TODO line. It's difficult to detect
@@ -837,7 +828,7 @@ func! s:Alien6()
return indent(lnum)
endif
endif
return b:hi_indent.baseindent + s:ShiftWidth()
return b:hi_indent.baseindent + shiftwidth()
endfunc "}}}
" When the "lnum" line ends in ">" find the line containing the matching "<".
@@ -947,7 +938,7 @@ func! HtmlIndent()
endif
let curtext = tolower(getline(v:lnum))
let indentunit = s:ShiftWidth()
let indentunit = shiftwidth()
let b:hi_newstate = {}
let b:hi_newstate.lnum = v:lnum
@@ -1030,9 +1021,9 @@ func! HtmlIndent()
if col('.') > 2
let swendtag = match(text, '^\s*</') >= 0
call s:CountITags(text[: col('.') - 2])
let indent += s:nextrel * s:ShiftWidth()
let indent += s:nextrel * shiftwidth()
if !swendtag
let indent += s:curind * s:ShiftWidth()
let indent += s:curind * shiftwidth()
endif
endif
else

View File

@@ -1,6 +1,6 @@
" IDL (Interactive Data Language) indent file.
" Language: IDL (ft=idlang)
" Last change: 2012 May 18
" Last change: 2017 Jun 13
" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
" Only load this indent file when no other was loaded.
@@ -34,25 +34,25 @@ function GetIdlangIndent(lnum)
" Indenting of continued lines.
if getline(pnum) =~ '\$\s*\(;.*\)\=$'
if getline(pnum2) !~ '\$\s*\(;.*\)\=$'
let curind = curind+&sw
let curind = curind+shiftwidth()
endif
else
if getline(pnum2) =~ '\$\s*\(;.*\)\=$'
let curind = curind-&sw
let curind = curind-shiftwidth()
endif
endif
" Indenting blocks of statements.
if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>'
if getline(pnum) =~? 'begin\>'
elseif indent(v:lnum) > curind-&sw
let curind = curind-&sw
elseif indent(v:lnum) > curind-shiftwidth()
let curind = curind-shiftwidth()
else
return -1
endif
elseif getline(pnum) =~? 'begin\>'
if indent(v:lnum) < curind+&sw
let curind = curind+&sw
if indent(v:lnum) < curind+shiftwidth()
let curind = curind+shiftwidth()
else
return -1
endif

View File

@@ -50,17 +50,17 @@ fun! GetIshdIndent(lnum)
" Add
if previous_line =~ '^\s*\<\(function\|begin\|switch\|case\|default\|if.\{-}then\|else\|elseif\|while\|repeat\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Subtract
if this_line =~ '^\s*\<endswitch\>'
let ind = ind - 2 * &sw
let ind = ind - 2 * shiftwidth()
elseif this_line =~ '^\s*\<\(begin\|end\|endif\|endwhile\|else\|elseif\|until\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
elseif this_line =~ '^\s*\<\(case\|default\)\>'
if previous_line !~ '^\s*\<switch\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif

View File

@@ -236,9 +236,10 @@ function s:OneScope(lnum)
\ s:save_pos('s:previous_token') != '.'
endfunction
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the
" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is
" a continued expression, which could have started in a braceless context
" returns braceless levels started by 'i' and above lines * shiftwidth().
" 'num' is the lineNr which encloses the entire context, 'cont' if whether
" line 'i' + 1 is a continued expression, which could have started in a
" braceless context
function s:iscontOne(i,num,cont)
let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]
let pind = a:num ? indent(l:num) + s:W : 0

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: JSON
" Mantainer: Eli Parra <eli@elzr.com> https://github.com/elzr/vim-json
" Last Change: 2014 Aug 29
" Last Change: 2017 Jun 13
" https://github.com/jakar/vim-json/commit/20b650e22aa750c4ab6a66aa646bdd95d7cd548a#diff-e81fc111b2052e306d126bd9989f7b7c
" Original Author: Rogerz Zhang <rogerz.zhang at gmail.com> http://github.com/rogerz/vim-json
" Acknowledgement: Based off of vim-javascript maintained by Darrick Wiebe
@@ -141,7 +141,7 @@ function GetJSONIndent()
" If the previous line ended with a block opening, add a level of indent.
" if s:Match(lnum, s:block_regex)
" return indent(lnum) + &sw
" return indent(lnum) + shiftwidth()
" endif
" If the previous line contained an opening bracket, and we are still in it,
@@ -149,7 +149,7 @@ function GetJSONIndent()
if line =~ '[[({]'
let counts = s:LineHasOpeningBrackets(lnum)
if counts[0] == '1' || counts[1] == '1' || counts[2] == '1'
return ind + &sw
return ind + shiftwidth()
else
call cursor(v:lnum, vcol)
end

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Liquid
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2016 Aug 29
" Last Change: 2017 Jun 13
if exists('b:did_indent')
finish
@@ -54,7 +54,7 @@ function! GetLiquidIndent(...)
let line = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+')
let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
let sw = exists('*shiftwidth') ? shiftwidth() : &sw
let sw = shiftwidth()
let ind += sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>')
let ind -= sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>')
let ind -= sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>')

View File

@@ -38,24 +38,24 @@ function! GetLogtalkIndent()
endif
" Check for entity opening directive on previous line
if pline =~ '^\s*:-\s\(object\|protocol\|category\)\ze(.*,$'
let ind = ind + &sw
let ind = ind + shiftwidth()
" Check for clause head on previous line
elseif pline =~ ':-\s*\(%.*\)\?$'
let ind = ind + &sw
let ind = ind + shiftwidth()
" Check for entity closing directive on previous line
elseif pline =~ '^\s*:-\send_\(object\|protocol\|category\)\.\(%.*\)\?$'
let ind = ind - &sw
let ind = ind - shiftwidth()
" Check for end of clause on previous line
elseif pline =~ '\.\s*\(%.*\)\?$'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
" Check for opening conditional on previous line
if pline =~ '^\s*\([(;]\|->\)' && pline !~ '\.\s*\(%.*\)\?$' && pline !~ '^.*\([)][,]\s*\(%.*\)\?$\)'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Check for closing an unclosed paren, or middle ; or ->
if line =~ '^\s*\([);]\|->\)'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind
endfunction

View File

@@ -2,7 +2,7 @@
" Language: Lua script
" Maintainer: Marcus Aurelius Farias <marcus.cf 'at' bol.com.br>
" First Author: Max Ischenko <mfi 'at' ukr.net>
" Last Change: 2016 Jan 10
" Last Change: 2017 Jun 13
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -48,7 +48,7 @@ function! GetLuaIndent()
" Add 'shiftwidth' if what we found previously is not in a comment and
" an "end" or "until" is not present on the same line.
if synIDattr(synID(prevlnum, midx + 1, 1), "name") != "luaComment" && prevline !~ '\<end\>\|\<until\>'
let ind = ind + &shiftwidth
let ind = ind + shiftwidth()
endif
endif
@@ -56,7 +56,7 @@ function! GetLuaIndent()
" This is the part that requires 'indentkeys'.
let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\)')
if midx != -1 && synIDattr(synID(v:lnum, midx + 1, 1), "name") != "luaComment"
let ind = ind - &shiftwidth
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -44,9 +44,9 @@ function GetMatlabIndent(lnum)
" See if this line does not follow the line right after an openblock
if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
" See if the user has already dedented
elseif indent(v:lnum) > curind - &sw
elseif indent(v:lnum) > curind - shiftwidth()
" If not, recommend one dedent
let curind = curind - &sw
let curind = curind - shiftwidth()
else
" Otherwise, trust the user
return -1
@@ -56,9 +56,9 @@ function GetMatlabIndent(lnum)
" If the previous line opened a block
elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
" See if the user has already indented
if indent(v:lnum) < curind + &sw
if indent(v:lnum) < curind + shiftwidth()
"If not, recommend indent
let curind = curind + &sw
let curind = curind + shiftwidth()
else
" Otherwise, trust the user
return -1

View File

@@ -49,7 +49,7 @@ function GetMmaIndent()
" also, indent only if this line if this line isn't starting a new
" block... TODO - fix this with indentkeys?
if getline(v:lnum-1) =~ '\\\@<!\%(\[[^\]]*\|([^)]*\|{[^}]*\)$' && getline(v:lnum) !~ '\s\+[\[({]'
let ind = ind+&sw
let ind = ind+shiftwidth()
endif
" if this line had unmatched closing block,

View File

@@ -4,7 +4,7 @@
" Mike Leary <leary@nwlink.com>
" Markus Mottl <markus.mottl@gmail.com>
" URL: http://www.ocaml.info/vim/indent/ocaml.vim
" Last Change: 2013 Jun 29
" Last Change: 2017 Jun 13
" 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
" 2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
" 2013 June - commented textwidth (Marc Weber)
@@ -101,7 +101,7 @@ function! GetOCamlIndent()
" Return double 'shiftwidth' after lines matching:
if lline =~ '^\s*|.*->\s*$'
return ind + &sw + &sw
return ind + 2 * shiftwidth()
endif
let line = getline(v:lnum)
@@ -172,7 +172,7 @@ function! GetOCamlIndent()
" Indent if current line begins with 'and':
elseif line =~ '^\s*and\>'
if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$'
return ind - &sw
return ind - shiftwidth()
endif
" Indent if current line begins with 'with':
@@ -199,14 +199,14 @@ function! GetOCamlIndent()
" or 'method':
elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>'
if lline !~ s:obj
return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw
return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + shiftwidth()
endif
endif
" Add a 'shiftwidth' after lines ending with:
if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|parser\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$'
let ind = ind + &sw
let ind = ind + shiftwidth()
" Back to normal indent after lines ending with ';;':
elseif lline =~ ';;\s*$' && lline !~ '^\s*;;'
@@ -263,7 +263,7 @@ function! GetOCamlIndent()
" Subtract a 'shiftwidth' after lines matching 'match ... with parser':
if lline =~ '\<match\>.*\<with\>\s*\<parser\s*$'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -131,7 +131,7 @@ function GetOccamIndent()
if line =~ s:FirstLevelIndent || (line =~ s:FirstLevelNonColonEndIndent && line !~ s:ColonEnd)
\ || (line !~ s:ColonStart && (prevline =~ s:SecondLevelIndent
\ || (prevline =~ s:SecondLevelNonColonEndIndent && prevline !~ s:ColonEnd)))
let curindent = curindent + &shiftwidth
let curindent = curindent + shiftwidth()
" Restore magic
if !save_magic|setlocal nomagic|endif
@@ -153,7 +153,7 @@ function GetOccamIndent()
while !found
if indent(prevlinenum) == curindent - &shiftwidth
if indent(prevlinenum) == curindent - shiftwidth()
let found = 1
endif
@@ -171,7 +171,7 @@ function GetOccamIndent()
if prevlinenum > 0
if getline(prevlinenum) =~ s:SecondLevelIndent
let curindent = curindent + &shiftwidth
let curindent = curindent + shiftwidth()
endif
endif

View File

@@ -2,7 +2,7 @@
" Language: Pascal
" Maintainer: Neil Carter <n.carter@swansea.ac.uk>
" Created: 2004 Jul 13
" Last Change: 2011 Apr 01
" Last Change: 2017 Jun 13
"
" This is version 2.0, a complete rewrite.
"
@@ -102,12 +102,12 @@ function! GetPascalIndent( line_num )
" If the PREVIOUS LINE ended in these items, always indent
if prev_codeline =~ '\<\(type\|const\|var\)$'
return indnt + &shiftwidth
return indnt + shiftwidth()
endif
if prev_codeline =~ '\<repeat$'
if this_codeline !~ '^\s*until\>'
return indnt + &shiftwidth
return indnt + shiftwidth()
else
return indnt
endif
@@ -115,7 +115,7 @@ function! GetPascalIndent( line_num )
if prev_codeline =~ '\<\(begin\|record\)$'
if this_codeline !~ '^\s*end\>'
return indnt + &shiftwidth
return indnt + shiftwidth()
else
return indnt
endif
@@ -125,10 +125,10 @@ function! GetPascalIndent( line_num )
" followed by "begin"
if prev_codeline =~ '\<\(\|else\|then\|do\)$' || prev_codeline =~ ':$'
if this_codeline !~ '^\s*begin\>'
return indnt + &shiftwidth
return indnt + shiftwidth()
else
" If it does start with "begin" then keep the same indent
"return indnt + &shiftwidth
"return indnt + shiftwidth()
return indnt
endif
endif
@@ -137,7 +137,7 @@ function! GetPascalIndent( line_num )
" only the line before the current one. TODO: Get it working for
" parameter lists longer than two lines.
if prev_codeline =~ '([^)]\+$'
return indnt + &shiftwidth
return indnt + shiftwidth()
endif
@@ -146,7 +146,7 @@ function! GetPascalIndent( line_num )
" Lines starting with "else", but not following line ending with
" "end".
if this_codeline =~ '^\s*else\>' && prev_codeline !~ '\<end$'
return indnt - &shiftwidth
return indnt - shiftwidth()
endif
" Lines after a single-statement branch/loop.
@@ -160,16 +160,16 @@ function! GetPascalIndent( line_num )
" additional unindentation.
if this_codeline =~ '^\s*\(end;\|except\|finally\|\)$'
" Note that we don't return from here.
return indnt - &shiftwidth - &shiftwidth
return indnt - 2 * shiftwidth()
endif
return indnt - &shiftwidth
return indnt - shiftwidth()
endif
" Lines starting with "until" or "end". This rule must be overridden
" by the one for "end" after a single-statement branch/loop. In
" other words that rule should come before this one.
if this_codeline =~ '^\s*\(end\|until\)\>'
return indnt - &shiftwidth
return indnt - shiftwidth()
endif
@@ -201,7 +201,7 @@ function! GetPascalIndent( line_num )
" If the PREVIOUS LINE ended in these items, always indent.
if prev_codeline =~ '^\s*\(unit\|uses\|try\|except\|finally\|private\|protected\|public\|published\)$'
return indnt + &shiftwidth
return indnt + shiftwidth()
endif
" ???? Indent "procedure" and "functions" if they appear within an
@@ -212,11 +212,11 @@ function! GetPascalIndent( line_num )
" UNINDENT ONCE
if this_codeline =~ '^\s*\(except\|finally\)$'
return indnt - &shiftwidth
return indnt - shiftwidth()
endif
if this_codeline =~ '^\s*\(private\|protected\|public\|published\)$'
return indnt - &shiftwidth
return indnt - shiftwidth()
endif

View File

@@ -3,7 +3,7 @@
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: http://github.com/vim-perl/vim-perl
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
" Last Change: 2013-07-24
" Last Change: 2017 Jun 13
" Suggestions and improvements by :
" Aaron J. Sherman (use syntax for hints)
@@ -138,9 +138,9 @@ function! GetPerlIndent()
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
let brace = strpart(line, bracepos, 1)
if brace == '(' || brace == '{' || brace == '['
let ind = ind + &sw
let ind = ind + shiftwidth()
else
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif
let bracepos = match(line, braceclass, bracepos + 1)
@@ -152,25 +152,25 @@ function! GetPerlIndent()
\ || synid == "perlMatchStartEnd"
\ || synid == "perlBraces"
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif
else
if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
if cline =~ '^\s*[])}]'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif
" Indent lines that begin with 'or' or 'and'
if cline =~ '^\s*\(or\|and\)\>'
if line !~ '^\s*\(or\|and\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
elseif line =~ '^\s*\(or\|and\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -3,7 +3,7 @@
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: http://github.com/vim-perl/vim-perl
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
" Last Change: 2013-07-21
" Last Change: 2017 Jun 13
" Contributors: Andy Lester <andy@petdance.com>
" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
"
@@ -107,19 +107,19 @@ function! GetPerl6Indent()
endif
if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
if cline =~ '^\s*[)}\]»>]'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
" Indent lines that begin with 'or' or 'and'
if cline =~ '^\s*\(or\|and\)\>'
if line !~ '^\s*\(or\|and\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
elseif line =~ '^\s*\(or\|and\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -3,7 +3,7 @@
" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
" URL: http://www.2072productions.com/vim/indent/php.vim
" Home: https://github.com/2072/PHP-Indenting-for-VIm
" Last Change: 2017 March 12th
" Last Change: 2017 Jun 13
" Version: 1.62
"
"
@@ -50,25 +50,15 @@ let b:did_indent = 1
let g:php_sync_method = 0
if exists('*shiftwidth')
function! s:sw()
return shiftwidth()
endfunction
else
function! s:sw()
return &shiftwidth
endfunction
endif
if exists("PHP_default_indenting")
let b:PHP_default_indenting = PHP_default_indenting * s:sw()
let b:PHP_default_indenting = PHP_default_indenting * shiftwidth()
else
let b:PHP_default_indenting = 0
endif
if exists("PHP_outdentSLComments")
let b:PHP_outdentSLComments = PHP_outdentSLComments * s:sw()
let b:PHP_outdentSLComments = PHP_outdentSLComments * shiftwidth()
else
let b:PHP_outdentSLComments = 0
endif
@@ -357,7 +347,7 @@ function! FindTheSwitchIndent (lnum) " {{{
let test = GetLastRealCodeLNum(a:lnum - 1)
if test <= 1
return indent(1) - s:sw() * b:PHP_vintage_case_default_indent
return indent(1) - shiftwidth() * b:PHP_vintage_case_default_indent
end
while getline(test) =~ '^\s*}' && test > 1
@@ -371,7 +361,7 @@ function! FindTheSwitchIndent (lnum) " {{{
if getline(test) =~# '^\s*switch\>'
return indent(test)
elseif getline(test) =~# s:defaultORcase
return indent(test) - s:sw() * b:PHP_vintage_case_default_indent
return indent(test) - shiftwidth() * b:PHP_vintage_case_default_indent
else
return FindTheSwitchIndent(test)
endif
@@ -444,7 +434,7 @@ function! GetPhpIndent()
endif
if b:PHP_default_indenting
let b:PHP_default_indenting = g:PHP_default_indenting * s:sw()
let b:PHP_default_indenting = g:PHP_default_indenting * shiftwidth()
endif
let cline = getline(v:lnum)
@@ -701,7 +691,7 @@ function! GetPhpIndent()
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
return indent(FindTheIfOfAnElse(v:lnum, 1))
elseif cline =~# s:defaultORcase
return FindTheSwitchIndent(v:lnum) + s:sw() * b:PHP_vintage_case_default_indent
return FindTheSwitchIndent(v:lnum) + shiftwidth() * b:PHP_vintage_case_default_indent
elseif cline =~ '^\s*)\=\s*{'
let previous_line = last_line
let last_line_num = lnum
@@ -713,7 +703,7 @@ function! GetPhpIndent()
let ind = indent(last_line_num)
if b:PHP_BracesAtCodeLevel
let ind = ind + s:sw()
let ind = ind + shiftwidth()
endif
return ind
@@ -724,7 +714,7 @@ function! GetPhpIndent()
endwhile
elseif last_line =~# unstated && cline !~ '^\s*);\='.endline
let ind = ind + s:sw() " we indent one level further when the preceding line is not stated
let ind = ind + shiftwidth() " we indent one level further when the preceding line is not stated
return ind + addSpecial
elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated
@@ -823,7 +813,7 @@ function! GetPhpIndent()
endif
if !dontIndent && (!b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{')
let ind = ind + s:sw()
let ind = ind + shiftwidth()
endif
if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1
@@ -841,17 +831,17 @@ function! GetPhpIndent()
endif
elseif last_line =~ '^\s*'.s:blockstart
let ind = ind + s:sw()
let ind = ind + shiftwidth()
elseif AntepenultimateLine =~ '{'.endline && AntepenultimateLine !~? '^\s*use\>' || AntepenultimateLine =~ terminated || AntepenultimateLine =~# s:defaultORcase
let ind = ind + s:sw()
let ind = ind + shiftwidth()
endif
endif
if cline =~ '^\s*[)\]];\='
let ind = ind - s:sw()
let ind = ind - shiftwidth()
endif
let b:PHP_CurrentIndentLevel = ind

View File

@@ -41,16 +41,16 @@ function! PostscrIndentGet(lnum)
" Indent for dicts, arrays, and saves with possible trailing comment
if pline =~ '\(begin\|<<\|g\=save\|{\|[\)\s*\(%.*\)\=$'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Remove indent for popped dicts, and restores.
if pline =~ '\(end\|g\=restore\)\s*$'
let ind = ind - &sw
let ind = ind - shiftwidth()
" Else handle immediate dedents of dicts, restores, and arrays.
elseif getline(a:lnum) =~ '\(end\|>>\|g\=restore\|}\|]\)'
let ind = ind - &sw
let ind = ind - shiftwidth()
" Else handle DSC comments - always start of line.
elseif getline(a:lnum) =~ '^\s*%%'

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: PoV-Ray Scene Description Language
" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
" Last Change: 2002-10-20
" Last Change: 2017 Jun 13
" URI: http://trific.ath.cx/Ftp/vim/indent/pov.vim
" Only load this indent file when no other was loaded.
@@ -75,9 +75,9 @@ function GetPoVRayIndent()
" opening line.
let cur = s:MatchCount(v:lnum, '^\s*\%(#\s*\%(end\|else\)\>\|[]})]\)')
if cur > 0
let final = plind + (chg - cur) * &sw
let final = plind + (chg - cur) * shiftwidth()
else
let final = plind + chg * &sw
let final = plind + chg * shiftwidth()
endif
return final < 0 ? 0 : final

View File

@@ -41,18 +41,18 @@ function! GetPrologIndent()
endif
" Check for clause head on previous line
if pline =~ ':-\s*\(%.*\)\?$'
let ind = ind + &sw
let ind = ind + shiftwidth()
" Check for end of clause on previous line
elseif pline =~ '\.\s*\(%.*\)\?$'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
" Check for opening conditional on previous line
if pline =~ '^\s*\([(;]\|->\)'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Check for closing an unclosed paren, or middle ; or ->
if line =~ '^\s*\([);]\|->\)'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind
endfunction

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: RPL/2
" Version: 0.2
" Last Change: 2005 Mar 28
" Last Change: 2017 Jun 13
" Maintainer: BERTRAND Jo<4A>l <rpl2@free.fr>
" Only load this indent file when no other was loaded.
@@ -32,16 +32,16 @@ function RplGetIndent(lnum)
if prevstat =~? '\<\(if\|iferr\|do\|while\)\>' && prevstat =~? '\<end\>'
elseif prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' && prevstat =~? '\s\+>>\($\|\s\+\)'
elseif prevstat =~? '\<\(if\|iferr\|then\|else\|elseif\|select\|case\|do\|until\|while\|repeat\|for\|start\|default\)\>' || prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Subtract a shiftwidth from then, else, elseif, end, until, repeat, next,
" step
let line = getline(v:lnum)
if line =~? '^\s*\(then\|else\|elseif\|until\|repeat\|next\|step\|default\|end\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
elseif line =~? '^\s*>>\($\|\s\+\)'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind

View File

@@ -404,11 +404,7 @@ function GetRubyIndent(...)
" ----------
" The value of a single shift-width
if exists('*shiftwidth')
let sw = shiftwidth()
else
let sw = &sw
endif
let sw = shiftwidth()
" For the current line, use the first argument if given, else v:lnum
let clnum = a:0 ? a:1 : v:lnum

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Rust
" Author: Chris Morgan <me@chrismorgan.info>
" Last Change: 2017 Mar 21
" Last Change: 2017 Jun 13
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
" Only load this indent file when no other was loaded.
@@ -199,7 +199,7 @@ function GetRustIndent(lnum)
" It's the closing line, dedent it
return 0
else
return &shiftwidth
return shiftwidth()
endif
endif
endif

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Sass
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2016 Aug 29
" Last Change: 2017 Jun 13
if exists("b:did_indent")
finish
@@ -29,7 +29,7 @@ function! GetSassIndent()
let indent = indent(lnum)
let cindent = indent(v:lnum)
if line !~ s:property && line !~ s:extend && cline =~ s:property
return indent + (exists('*shiftwidth') ? shiftwidth() : &sw)
return indent + shiftwidth()
else
return -1
endif

View File

@@ -46,17 +46,17 @@ function! GetSDLIndent()
if (getline(lnum) =~? '^\s*\(start\|state\|system\|package\|connection\|channel\|alternative\|macro\|operator\|newtype\|select\|substructure\|decision\|generator\|refinement\|service\|method\|exceptionhandler\|asntype\|syntype\|value\|(.*):\|\(priority\s\+\)\=input\|provided\)'
\ || getline(lnum) =~? virtuality . '\(process\|procedure\|block\|object\)')
\ && getline(lnum) !~? 'end[[:alpha:]]\+;$'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Subtract a 'shiftwidth' after states
if getline(lnum) =~? '^\s*\(stop\|return\>\|nextstate\)'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
" Subtract a 'shiftwidth' on on end (uncompleted line)
if getline(v:lnum) =~? '^\s*end\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
" Put each alternatives where the corresponding decision was

View File

@@ -115,9 +115,9 @@ function! GetSMLIndent()
" Return double 'shiftwidth' after lines matching:
if lline =~ '^\s*|.*=>\s*$'
return ind + &sw + &sw
return ind + 2 *shiftwidth()
elseif lline =~ '^\s*val\>.*=\s*$'
return ind + &sw
return ind + shiftwidth()
endif
let line = getline(v:lnum)
@@ -157,7 +157,7 @@ function! GetSMLIndent()
if lastModule == -1
return 0
else
return lastModule + &sw
return lastModule + shiftwidth()
endif
" Indent lines starting with '|' from matching 'case', 'handle'
@@ -172,7 +172,7 @@ function! GetSMLIndent()
if switchLine =~ '\<case\>'
return col(".") + 2
elseif switchLine =~ '\<handle\>'
return switchLineIndent + &sw
return switchLineIndent + shiftwidth()
elseif switchLine =~ '\<datatype\>'
call search('=')
return col(".") - 1
@@ -184,7 +184,7 @@ function! GetSMLIndent()
" Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else',
" 'in'
elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$'
let ind = ind + &sw
let ind = ind + shiftwidth()
" Indent if last line ends with 'of', align from 'case'
elseif lline =~ '\<\(of\)\s*$'
@@ -199,14 +199,14 @@ function! GetSMLIndent()
" Indent if last line starts with 'fun', 'case', 'fn'
elseif lline =~ '^\s*\(fun\|fn\|case\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Don't indent 'let' if last line started with 'fun', 'fn'
if line =~ '^\s*let\>'
if lline =~ '^\s*\(fun\|fn\)'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: SQL
" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
" Last Change: 2012 Dec 06
" Last Change: 2017 Jun 13
" Version: 3.0
" Download: http://vim.sourceforge.net/script.php?script_id=495
@@ -147,7 +147,7 @@ function! s:CheckToIgnoreRightParan( prev_lnum, num_levels )
endwhile
" Fallback - just move back one
" return a:prev_indent - &sw
" return a:prev_indent - shiftwidth()
return ignore_paran
endfunction
@@ -166,7 +166,7 @@ function! s:GetStmtStarterIndent( keyword, curr_lnum )
let lnum = a:curr_lnum
" Default - reduce indent by 1
let ind = indent(a:curr_lnum) - &sw
let ind = indent(a:curr_lnum) - shiftwidth()
if a:keyword =~? 'end'
exec 'normal! ^'
@@ -230,7 +230,7 @@ function! s:ModuloIndent(ind)
let ind = a:ind
if ind > 0
let modulo = ind % &shiftwidth
let modulo = ind % shiftwidth()
if modulo > 0
let ind = ind - modulo
@@ -291,7 +291,7 @@ function! GetSQLIndent()
" where END IF, END, should decrease the indent.
if prevline =~? s:SQLBlockStart
" Move indent in
let ind = ind + &sw
let ind = ind + shiftwidth()
" echom 'prevl - SQLBlockStart - indent ' . ind . ' line: ' . prevline
elseif prevline =~ '[()]'
if prevline =~ '('
@@ -308,7 +308,7 @@ function! GetSQLIndent()
if num_unmatched_left > 0
" There is a open left paranethesis
" increase indent
let ind = ind + ( &sw * num_unmatched_left )
let ind = ind + ( shiftwidth() * num_unmatched_left )
elseif num_unmatched_right > 0
" if it is an unbalanced paranethesis only unindent if
" it was part of a command (ie create table(..) )
@@ -323,7 +323,7 @@ function! GetSQLIndent()
endif
if (num_unmatched_right - ignore) > 0
let ind = ind - ( &sw * (num_unmatched_right - ignore) )
let ind = ind - ( shiftwidth() * (num_unmatched_right - ignore) )
endif
endif
@@ -339,12 +339,12 @@ function! GetSQLIndent()
if line =~? '^\s*els'
" Any line when you type else will automatically back up one
" ident level (ie else, elseif, elsif)
let ind = ind - &sw
let ind = ind - shiftwidth()
" echom 'curr - else - indent ' . ind
elseif line =~? '^\s*end\>'
let ind = s:GetStmtStarterIndent('end', v:lnum)
" General case for end
" let ind = ind - &sw
" let ind = ind - shiftwidth()
" echom 'curr - end - indent ' . ind
elseif line =~? '^\s*when\>'
let ind = s:GetStmtStarterIndent('when', v:lnum)
@@ -352,7 +352,7 @@ function! GetSQLIndent()
" clause, do not change the indent level, since these
" statements do not have a corresponding END statement.
" if stmt_starter =~? 'case'
" let ind = ind - &sw
" let ind = ind - shiftwidth()
" endif
" elseif line =~ '^\s*)\s*;\?\s*$'
" elseif line =~ '^\s*)'
@@ -371,14 +371,14 @@ function! GetSQLIndent()
" let num_unmatched_right = s:CountUnbalancedParan( line, ')' )
" if num_unmatched_right > 0
" elseif strpart( line, strlen(line)-1, 1 ) =~ ')'
" let ind = ind - &sw
" let ind = ind - shiftwidth()
if line =~ '^\s*)'
" let ignore = ignore + 1
" echom 'curr - begins ) unbalanced ignore: ' . ignore
endif
if (num_unmatched_right - ignore) > 0
let ind = ind - ( &sw * (num_unmatched_right - ignore) )
let ind = ind - ( shiftwidth() * (num_unmatched_right - ignore) )
endif
" endif
endif

View File

@@ -29,7 +29,7 @@ function SystemVerilogIndent()
if exists('b:systemverilog_indent_width')
let offset = b:systemverilog_indent_width
else
let offset = &sw
let offset = shiftwidth()
endif
if exists('b:systemverilog_indent_modules')
let indent_modules = offset

View File

@@ -3,7 +3,7 @@
" Based on Tera Term Version 4.92
" Maintainer: Ken Takata
" URL: https://github.com/k-takata/vim-teraterm
" Last Change: 2016 Aug 17
" Last Change: 2017 Jun 13
" Filenames: *.ttl
" License: VIM License
@@ -22,16 +22,6 @@ if exists("*GetTeraTermIndent")
finish
endif
" The shiftwidth() function is relatively new.
" Don't require it to exist.
if exists('*shiftwidth')
let s:sw = function('shiftwidth')
else
function s:sw() abort
return &shiftwidth
endfunction
endif
function! GetTeraTermIndent(lnum)
let l:prevlnum = prevnonblank(a:lnum-1)
if l:prevlnum == 0
@@ -48,15 +38,15 @@ function! GetTeraTermIndent(lnum)
if l:prevl =~ '^\s*if\>.*\<then\>'
" previous line opened a block
let l:ind += s:sw()
let l:ind += shiftwidth()
endif
if l:prevl =~ '^\s*\%(elseif\|else\|do\|until\|while\|for\)\>'
" previous line opened a block
let l:ind += s:sw()
let l:ind += shiftwidth()
endif
if l:thisl =~ '^\s*\%(elseif\|else\|endif\|enduntil\|endwhile\|loop\|next\)\>'
" this line closed a block
let l:ind -= s:sw()
let l:ind -= shiftwidth()
endif
return l:ind

View File

@@ -215,14 +215,14 @@ function! GetTeXIndent() " {{{
" ZYC modification : \end after \begin won't cause wrong indent anymore
if line =~ '\\begin{.*}'
if line !~ g:tex_noindent_env
let ind = ind + &sw
let ind = ind + shiftwidth()
let stay = 0
endif
if g:tex_indent_items
" Add another sw for item-environments
if line =~ g:tex_itemize_env
let ind = ind + &sw
let ind = ind + shiftwidth()
let stay = 0
endif
endif
@@ -241,23 +241,23 @@ function! GetTeXIndent() " {{{
if g:tex_indent_items
" Remove another sw for item-environments
if cline =~ g:tex_itemize_env
let ind = ind - &sw
let ind = ind - shiftwidth()
let stay = 0
endif
endif
let ind = ind - &sw
let ind = ind - shiftwidth()
let stay = 0
endif
if g:tex_indent_brace
if line =~ '[[{]$'
let ind += &sw
let ind += shiftwidth()
let stay = 0
endif
if cline =~ '^\s*\\\?[\]}]' && s:CheckPairedIsLastCharacter(v:lnum, indent(v:lnum))
let ind -= &sw
let ind -= shiftwidth()
let stay = 0
endif
@@ -266,7 +266,7 @@ function! GetTeXIndent() " {{{
let char = line[i]
if char == ']' || char == '}'
if s:CheckPairedIsLastCharacter(lnum, i)
let ind -= &sw
let ind -= shiftwidth()
let stay = 0
endif
endif
@@ -280,12 +280,12 @@ function! GetTeXIndent() " {{{
if g:tex_indent_items
" '\item' or '\bibitem' itself:
if cline =~ g:tex_items
let ind = ind - &sw
let ind = ind - shiftwidth()
let stay = 0
endif
" lines following to '\item' are intented once again:
if line =~ g:tex_items
let ind = ind + &sw
let ind = ind + shiftwidth()
let stay = 0
endif
endif
@@ -317,9 +317,9 @@ function! s:GetLastBeginIndentation(lnum) " {{{
return indent(lnum)
endif
if line =~ g:tex_itemize_env
return indent(lnum) + 2 * &sw
return indent(lnum) + 2 * shiftwidth()
endif
return indent(lnum) + &sw
return indent(lnum) + shiftwidth()
endif
endfor
return -1
@@ -347,7 +347,7 @@ function! s:GetEndIndentation(lnum) " {{{
let min_indent = min([min_indent, indent(lnum)])
endif
endfor
return min_indent - &sw
return min_indent - shiftwidth()
endfunction
" Most of the code is from matchparen.vim

View File

@@ -25,11 +25,11 @@ function GetTildeIndent(lnum)
endif
if getline(v:lnum) =~ '^\s*\~\(endif\|else\|elseif\|end\)\>'
return indent(v:lnum) - &sw
return indent(v:lnum) - shiftwidth()
endif
if getline(plnum) =~ '^\s*\~\(if\|foreach\|foreach_row\|xml_loop\|file_loop\|file_write\|file_append\|imap_loopsections\|imap_index\|imap_list\|ldap_search\|post_loopall\|post_loop\|file_loop\|sql_loop_num\|sql_dbmsselect\|search\|sql_loop\|post\|for\|function_define\|silent\|while\|setvalbig\|mail_create\|systempipe\|mail_send\|dual\|elseif\|else\)\>'
return indent(plnum) + &sw
return indent(plnum) + shiftwidth()
else
return -1
endif

View File

@@ -49,26 +49,26 @@ fun! VbGetIndent(lnum)
" Add
if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\|else\|elseif\|do\|for\|while\|enum\|with\)\>'
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" Subtract
if this_line =~? '^\s*\<end\>\s\+\<select\>'
if previous_line !~? '^\s*\<select\>'
let ind = ind - 2 * &sw
let ind = ind - 2 * shiftwidth()
else
" this case is for an empty 'select' -- 'end select'
" (w/o any case statements) like:
"
" select case readwrite
" end select
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
elseif this_line =~? '^\s*\<\(end\|else\|elseif\|until\|loop\|next\|wend\)\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
elseif this_line =~? '^\s*\<\(case\|default\)\>'
if previous_line !~? '^\s*\<select\>'
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
endif

View File

@@ -2,7 +2,7 @@
" Language: VHDL
" Maintainer: Gerald Lai <laigera+vim?gmail.com>
" Version: 1.60
" Last Change: 2016 Feb 26
" Last Change: 2017 Jun 13
" URL: http://www.vim.org/scripts/script.php?script_id=1450
" only load this indent file when no other was loaded
@@ -114,9 +114,9 @@ function GetVHDLindent()
return ind2 + m
else
if g:vhdl_indent_genportmap
return ind2 + stridx(prevs_noi, '(') + &sw
return ind2 + stridx(prevs_noi, '(') + shiftwidth()
else
return ind2 + &sw
return ind2 + shiftwidth()
endif
endif
endif
@@ -128,7 +128,7 @@ function GetVHDLindent()
if g:vhdl_indent_rhsassign
return ind2 + matchend(prevs_noi, '<=\s*\ze.')
else
return ind2 + &sw
return ind2 + shiftwidth()
endif
endif
@@ -218,12 +218,12 @@ function GetVHDLindent()
let ps = getline(pn)
if (ps =~? s:NC.'\<begin\>')
return indent(pn) - &sw
return indent(pn) - shiftwidth()
endif
endwhile
if (pn == 0)
return ind - &sw
return ind - shiftwidth()
else
return indent(pn)
endif
@@ -237,7 +237,7 @@ function GetVHDLindent()
" keyword: "type"
let s3 = s:NC.s:NE.'\<type\>'
if curs !~? s3.'.*'.s:NC.'\<\%(record\|units\)\>.*'.s:ES && prevs =~? s3
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
return ind
endif
@@ -282,7 +282,7 @@ function GetVHDLindent()
" removed: "begin", "case", "elsif", "if", "loop", "record", "units", "while"
" where: anywhere in previous line
if prevs =~? s:NC.s:NE.'\<\%(block\|process\)\>'
return ind + &sw
return ind + shiftwidth()
endif
" indent: +sw
@@ -290,7 +290,7 @@ function GetVHDLindent()
" removed: "component", "for", "when", "with"
" where: start of previous line
if prevs =~? '^\s*\%(architecture\|configuration\|entity\|package\)\>'
return ind + &sw
return ind + shiftwidth()
endif
" indent: +sw
@@ -298,7 +298,7 @@ function GetVHDLindent()
" removed: "generate", "is", "=>"
" where: end of previous line
if prevs =~? s:NC.'\<select'.s:ES
return ind + &sw
return ind + shiftwidth()
endif
" indent: +sw
@@ -310,7 +310,7 @@ function GetVHDLindent()
" where: end of previous line
" _note_: indent allowed to leave this filter
if prevs =~? s:NC.'\%(\<begin\>\|'.s:NE.'\<\%(loop\|record\|units\)\>\)' || prevs =~? '^\s*\%(component\|else\|for\)\>' || prevs =~? s:NC.'\%('.s:NE.'\<generate\|\<\%(is\|then\)\|=>\)'.s:ES
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
" ****************************************************************************************
@@ -322,7 +322,7 @@ function GetVHDLindent()
if prevs =~? s:NC.'\<is'.s:ES
return ind
elseif prevs !~? s4
return ind - &sw
return ind - shiftwidth()
else
return ind2
endif
@@ -336,7 +336,7 @@ function GetVHDLindent()
if prevs =~? '^\s*\%(elsif\|'.s5.'\)'
return ind
else
return ind - &sw
return ind - shiftwidth()
endif
endif
@@ -367,9 +367,9 @@ function GetVHDLindent()
"where: start of previous non-comment line
if m == 1
if ps =~? '^\s*end\s\+case\>'
return indent(pn) - 2 * &sw
return indent(pn) - 2 * shiftwidth()
elseif ps =~? '^\s*when\>'
return indent(pn) - &sw
return indent(pn) - shiftwidth()
elseif ps =~? '^\s*case\>'
return indent(pn)
endif
@@ -385,14 +385,14 @@ function GetVHDLindent()
let pn = prevnonblank(pn - 1)
let ps = getline(pn)
endwhile
return ind - &sw
return ind - shiftwidth()
endif
" indent: -sw
" keyword: ")"
" where: start of current line
if curs =~ '^\s*)'
return ind - &sw
return ind - shiftwidth()
endif
" indent: 0
@@ -407,7 +407,7 @@ function GetVHDLindent()
" where: start of current line
"if curs =~? '^\s*end\s\+\w\+\>'
if curs =~? '^\s*end\%(\s\|;'.s:ES.'\)'
return ind - &sw
return ind - shiftwidth()
endif
" ****************************************************************************************

View File

@@ -1,6 +1,6 @@
" Language: xml
" Maintainer: Johannes Zellner <johannes@zellner.org>
" Last Change: 2012 Jul 25
" Last Change: 2017 Jun 13
" Notes: 1) does not indent pure non-xml code (e.g. embedded scripts)
" 2) will be confused by unbalanced tags in comments
" or CDATA sections.
@@ -67,7 +67,7 @@ endfun
fun! <SID>XmlIndentSum(lnum, style, add)
let line = getline(a:lnum)
if a:style == match(line, '^\s*</')
return (&sw *
return (shiftwidth() *
\ (<SID>XmlIndentWithPattern(line, b:xml_indent_open)
\ - <SID>XmlIndentWithPattern(line, b:xml_indent_close)
\ - <SID>XmlIndentWithPattern(line, '.\{-}/>'))) + a:add

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: YAML
" Maintainer: Nikolai Pavlov <zyx.vim@gmail.com>
" Last Change: 2015 Nov 01
" Last Change: 2017 Jun 13
" Only load this indent file when no other was loaded.
if exists('b:did_indent')
@@ -24,14 +24,6 @@ if exists('*GetYAMLIndent')
finish
endif
if exists('*shiftwidth')
let s:shiftwidth = function('shiftwidth')
else
function s:shiftwidth()
return &shiftwidth
endfunction
endif
function s:FindPrevLessIndentedLine(lnum, ...)
let prevlnum = prevnonblank(a:lnum-1)
let curindent = a:0 ? a:1 : indent(a:lnum)
@@ -119,7 +111,7 @@ function GetYAMLIndent(lnum)
"
" - |-
" Block scalar without indentation indicator
return previndent+s:shiftwidth()
return previndent+shiftwidth()
elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$'
" - |+2
" block scalar with indentation indicator
@@ -155,7 +147,7 @@ function GetYAMLIndent(lnum)
\ '\v)%(\s+|\s*%(\#.*)?$))*'
" Mapping with: value
" that is multiline scalar
return previndent+s:shiftwidth()
return previndent+shiftwidth()
endif
return previndent
endfunction

View File

@@ -1,11 +1,15 @@
" Vim support file to detect file types in scripts
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2017 Mar 04
" Last change: 2017 Jun 11
" This file is called by an autocommand for every file that has just been
" loaded into a buffer. It checks if the type of file can be recognized by
" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
"
" Note that the pattern matches are done with =~# to avoid the value of the
" 'ignorecase' option making a difference. Where case is to be ignored use
" =~? instead. Do not use =~ anywhere.
" Only do the rest when the FileType autocommand has not been triggered yet.
@@ -28,12 +32,12 @@ set cpo&vim
let s:line1 = getline(1)
if s:line1 =~ "^#!"
if s:line1 =~# "^#!"
" A script that starts with "#!".
" Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into
" "#!/usr/bin/bash" to make matching easier.
if s:line1 =~ '^#!\s*\S*\<env\s'
if s:line1 =~# '^#!\s*\S*\<env\s'
let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
endif
@@ -44,11 +48,11 @@ if s:line1 =~ "^#!"
" "#!/usr/bin/env perl [path/args]"
" If there is no path use the first word: "#!perl [path/args]".
" Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
if s:line1 =~ '^#!\s*\a:[/\\]'
if s:line1 =~# '^#!\s*\a:[/\\]'
let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
elseif s:line1 =~ '^#!.*\<env\>'
elseif s:line1 =~# '^#!.*\<env\>'
let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
else
let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
@@ -56,16 +60,16 @@ if s:line1 =~ "^#!"
" tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
" third line. Suggested by Steven Atkinson.
if getline(3) =~ '^exec wish'
if getline(3) =~# '^exec wish'
let s:name = 'wish'
endif
" Bourne-like shell scripts: bash bash2 ksh ksh93 sh
if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>'
call SetFileTypeSH(s:line1) " defined in filetype.vim
" csh scripts
elseif s:name =~ '^csh\>'
elseif s:name =~# '^csh\>'
if exists("g:filetype_csh")
call SetFileTypeShell(g:filetype_csh)
else
@@ -73,99 +77,99 @@ if s:line1 =~ "^#!"
endif
" tcsh scripts
elseif s:name =~ '^tcsh\>'
elseif s:name =~# '^tcsh\>'
call SetFileTypeShell("tcsh")
" Z shell scripts
elseif s:name =~ '^zsh\>'
elseif s:name =~# '^zsh\>'
set ft=zsh
" TCL scripts
elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
set ft=tcl
" Expect scripts
elseif s:name =~ '^expect\>'
elseif s:name =~# '^expect\>'
set ft=expect
" Gnuplot scripts
elseif s:name =~ '^gnuplot\>'
elseif s:name =~# '^gnuplot\>'
set ft=gnuplot
" Makefiles
elseif s:name =~ 'make\>'
elseif s:name =~# 'make\>'
set ft=make
" Lua
elseif s:name =~ 'lua'
elseif s:name =~# 'lua'
set ft=lua
" Perl 6
elseif s:name =~ 'perl6'
elseif s:name =~# 'perl6'
set ft=perl6
" Perl
elseif s:name =~ 'perl'
elseif s:name =~# 'perl'
set ft=perl
" PHP
elseif s:name =~ 'php'
elseif s:name =~# 'php'
set ft=php
" Python
elseif s:name =~ 'python'
elseif s:name =~# 'python'
set ft=python
" Groovy
elseif s:name =~ '^groovy\>'
elseif s:name =~# '^groovy\>'
set ft=groovy
" Ruby
elseif s:name =~ 'ruby'
elseif s:name =~# 'ruby'
set ft=ruby
" JavaScript
elseif s:name =~ 'node\(js\)\=\>' || s:name =~ 'rhino\>'
elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>'
set ft=javascript
" BC calculator
elseif s:name =~ '^bc\>'
elseif s:name =~# '^bc\>'
set ft=bc
" sed
elseif s:name =~ 'sed\>'
elseif s:name =~# 'sed\>'
set ft=sed
" OCaml-scripts
elseif s:name =~ 'ocaml'
elseif s:name =~# 'ocaml'
set ft=ocaml
" Awk scripts
elseif s:name =~ 'awk\>'
elseif s:name =~# 'awk\>'
set ft=awk
" Website MetaLanguage
elseif s:name =~ 'wml'
elseif s:name =~# 'wml'
set ft=wml
" Scheme scripts
elseif s:name =~ 'scheme'
elseif s:name =~# 'scheme'
set ft=scheme
" CFEngine scripts
elseif s:name =~ 'cfengine'
elseif s:name =~# 'cfengine'
set ft=cfengine
" Erlang scripts
elseif s:name =~ 'escript'
elseif s:name =~# 'escript'
set ft=erlang
" Haskell
elseif s:name =~ 'haskell'
elseif s:name =~# 'haskell'
set ft=haskell
" Scala
elseif s:name =~ 'scala\>'
elseif s:name =~# 'scala\>'
set ft=scala
endif
@@ -180,28 +184,28 @@ else
let s:line5 = getline(5)
" Bourne-like shell scripts: sh ksh bash bash2
if s:line1 =~ '^:$'
if s:line1 =~# '^:$'
call SetFileTypeSH(s:line1) " defined in filetype.vim
" Z shell scripts
elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' ||
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
set ft=zsh
" ELM Mail files
elseif s:line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
set ft=mail
" Mason
elseif s:line1 =~ '^<[%&].*>'
elseif s:line1 =~# '^<[%&].*>'
set ft=mason
" Vim scripts (must have '" vim' as the first line to trigger this)
elseif s:line1 =~ '^" *[vV]im$'
elseif s:line1 =~# '^" *[vV]im$'
set ft=vim
" MOO
elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
set ft=moo
" Diff file:
@@ -215,29 +219,29 @@ else
" - "=== ", "--- ", "+++ " (bzr diff, common case)
" - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
" - "# HG changeset patch" in first line (Mercurial export format)
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
\ || (s:line1 =~ '^=== ' && ((s:line2 =~ '^=\{66\}' && s:line3 =~ '^--- ' && s:line4 =~ '^+++') || (s:line2 =~ '^--- ' && s:line3 =~ '^+++ ')))
\ || (s:line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
elseif s:line1 =~# '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
\ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
\ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
\ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
\ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
\ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
set ft=diff
" PostScript Files (must have %!PS as the first line, like a2ps output)
elseif s:line1 =~ '^%![ \t]*PS'
elseif s:line1 =~# '^%![ \t]*PS'
set ft=postscr
" M4 scripts: Guess there is a line that starts with "dnl".
elseif s:line1 =~ '^\s*dnl\>'
\ || s:line2 =~ '^\s*dnl\>'
\ || s:line3 =~ '^\s*dnl\>'
\ || s:line4 =~ '^\s*dnl\>'
\ || s:line5 =~ '^\s*dnl\>'
elseif s:line1 =~# '^\s*dnl\>'
\ || s:line2 =~# '^\s*dnl\>'
\ || s:line3 =~# '^\s*dnl\>'
\ || s:line4 =~# '^\s*dnl\>'
\ || s:line5 =~# '^\s*dnl\>'
set ft=m4
" AmigaDos scripts
elseif $TERM == "amiga"
\ && (s:line1 =~ "^;" || s:line1 =~ '^\.[bB][rR][aA]')
\ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
set ft=amiga
" SiCAD scripts (must have procn or procd as the first line to trigger this)
@@ -245,15 +249,15 @@ else
set ft=sicad
" Purify log files start with "**** Purify"
elseif s:line1 =~ '^\*\*\*\* Purify'
elseif s:line1 =~# '^\*\*\*\* Purify'
set ft=purifylog
" XML
elseif s:line1 =~ '<?\s*xml.*?>'
elseif s:line1 =~# '<?\s*xml.*?>'
set ft=xml
" XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
elseif s:line1 =~ '\<DTD\s\+XHTML\s'
elseif s:line1 =~# '\<DTD\s\+XHTML\s'
set ft=xhtml
" HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
@@ -262,96 +266,96 @@ else
set ft=html
" PDF
elseif s:line1 =~ '^%PDF-'
elseif s:line1 =~# '^%PDF-'
set ft=pdf
" XXD output
elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
set ft=xxd
" RCS/CVS log output
elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:'
elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
set ft=rcslog
" CVS commit
elseif s:line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
set ft=cvs
" Prescribe
elseif s:line1 =~ '^!R!'
elseif s:line1 =~# '^!R!'
set ft=prescribe
" Send-pr
elseif s:line1 =~ '^SEND-PR:'
elseif s:line1 =~# '^SEND-PR:'
set ft=sendpr
" SNNS files
elseif s:line1 =~ '^SNNS network definition file'
elseif s:line1 =~# '^SNNS network definition file'
set ft=snnsnet
elseif s:line1 =~ '^SNNS pattern definition file'
elseif s:line1 =~# '^SNNS pattern definition file'
set ft=snnspat
elseif s:line1 =~ '^SNNS result file'
elseif s:line1 =~# '^SNNS result file'
set ft=snnsres
" Virata
elseif s:line1 =~ '^%.\{-}[Vv]irata'
\ || s:line2 =~ '^%.\{-}[Vv]irata'
\ || s:line3 =~ '^%.\{-}[Vv]irata'
\ || s:line4 =~ '^%.\{-}[Vv]irata'
\ || s:line5 =~ '^%.\{-}[Vv]irata'
elseif s:line1 =~# '^%.\{-}[Vv]irata'
\ || s:line2 =~# '^%.\{-}[Vv]irata'
\ || s:line3 =~# '^%.\{-}[Vv]irata'
\ || s:line4 =~# '^%.\{-}[Vv]irata'
\ || s:line5 =~# '^%.\{-}[Vv]irata'
set ft=virata
" Strace
elseif s:line1 =~ '^\(\[pid \d\+\] \)\=[0-9:.]* *execve(' || s:line1 =~ '^__libc_start_main'
elseif s:line1 =~# '^\(\[pid \d\+\] \)\=[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main'
set ft=strace
" VSE JCL
elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>'
elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
set ft=vsejcl
" TAK and SINDA
elseif s:line4 =~ 'K & K Associates' || s:line2 =~ 'TAK 2000'
elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
set ft=takout
elseif s:line3 =~ 'S Y S T E M S I M P R O V E D '
elseif s:line3 =~# 'S Y S T E M S I M P R O V E D '
set ft=sindaout
elseif getline(6) =~ 'Run Date: '
elseif getline(6) =~# 'Run Date: '
set ft=takcmp
elseif getline(9) =~ 'Node File 1'
elseif getline(9) =~# 'Node File 1'
set ft=sindacmp
" DNS zone files
elseif s:line1.s:line2.s:line3.s:line4 =~ '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA'
elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA'
set ft=bindzone
" BAAN
elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC '
\ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC '
elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
\ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
set ft=baan
" Valgrind
elseif s:line1 =~ '^==\d\+== valgrind' || s:line3 =~ '^==\d\+== Using valgrind'
elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
set ft=valgrind
" Go docs
elseif s:line1 =~ '^PACKAGE DOCUMENTATION$'
elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
set ft=godoc
" Renderman Interface Bytestream
elseif s:line1 =~ '^##RenderMan'
elseif s:line1 =~# '^##RenderMan'
set ft=rib
" Scheme scripts
elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme'
elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
set ft=scheme
" Git output
elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
set ft=git
" Gprof (gnu profiler)
elseif s:line1 == 'Flat profile:'
\ && s:line2 == ''
\ && s:line3 =~ '^Each sample counts as .* seconds.$'
\ && s:line3 =~# '^Each sample counts as .* seconds.$'
set ft=gprof
" Erlang terms
@@ -362,18 +366,18 @@ else
" CVS diff
else
let s:lnum = 1
while getline(s:lnum) =~ "^? " && s:lnum < line("$")
while getline(s:lnum) =~# "^? " && s:lnum < line("$")
let s:lnum += 1
endwhile
if getline(s:lnum) =~ '^Index:\s\+\f\+$'
if getline(s:lnum) =~# '^Index:\s\+\f\+$'
set ft=diff
" locale input files: Formal Definitions of Cultural Conventions
" filename must be like en_US, fr_FR@euro or en_US.UTF-8
elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
let s:lnum = 1
while s:lnum < 100 && s:lnum < line("$")
if getline(s:lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
setf fdcc
break
endif

View File

@@ -3,7 +3,7 @@
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
" Last Change: 2016 Nov 12
" Last Change: 2017 Apr 23
" URL: https://anonscm.debian.org/cgit/pkg-vim/vim.git/plain/runtime/syntax/debchangelog.vim
" Standard syntax initialization
@@ -14,14 +14,14 @@ endif
" Case doesn't matter for us
syn case ignore
let urgency='urgency=\(low\|medium\|high\|critical\)\( [^[:space:],][^,]*\)\='
let binNMU='binary-only=yes'
let s:urgency='urgency=\(low\|medium\|high\|critical\)\( [^[:space:],][^,]*\)\='
let s:binNMU='binary-only=yes'
" Define some common expressions we can use later on
syn match debchangelogName contained "^[[:alnum:]][[:alnum:].+-]\+ "
exe 'syn match debchangelogFirstKV contained "; \('.urgency.'\|'.binNMU.'\)"'
exe 'syn match debchangelogOtherKV contained ", \('.urgency.'\|'.binNMU.'\)"'
syn match debchangelogTarget contained "\v %(frozen|unstable|sid|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile|lts|security)|wheezy-%(backports%(-sloppy)=|security)|jessie%(-backports|-security)=|stretch|%(devel|precise|trusty|vivid|wily|xenial|yakkety|zesty)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
exe 'syn match debchangelogFirstKV contained "; \('.s:urgency.'\|'.s:binNMU.'\)"'
exe 'syn match debchangelogOtherKV contained ", \('.s:urgency.'\|'.s:binNMU.'\)"'
syn match debchangelogTarget contained "\v %(frozen|unstable|sid|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile|lts|security)|%(wheezy|jessie)%(-backports%(-sloppy)=|-security)=|stretch%(-backports|-security)=|%(devel|precise|trusty|vivid|wily|xenial|yakkety|zesty|artful)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
syn match debchangelogVersion contained "(.\{-})"
syn match debchangelogCloses contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
syn match debchangelogLP contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"

View File

@@ -2,7 +2,7 @@
" Language: Debian sources.list
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
" Last Change: 2016 Nov 12
" Last Change: 2017 Apr 22
" URL: https://anonscm.debian.org/cgit/pkg-vim/vim.git/plain/runtime/syntax/debsources.vim
" Standard syntax initialization
@@ -25,7 +25,7 @@ let s:supported = [
\ 'oldstable', 'stable', 'testing', 'unstable', 'experimental',
\ 'squeeze', 'wheezy', 'jessie', 'stretch', 'sid', 'rc-buggy',
\
\ 'precise', 'trusty', 'xenial', 'yakkety', 'zesty', 'devel'
\ 'trusty', 'xenial', 'yakkety', 'zesty', 'artful', 'devel'
\ ]
let s:unsupported = [
\ 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato',
@@ -33,15 +33,15 @@ let s:unsupported = [
\
\ 'warty', 'hoary', 'breezy', 'dapper', 'edgy', 'feisty',
\ 'gutsy', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid',
\ 'maverick', 'natty', 'oneiric', 'quantal', 'raring', 'saucy',
\ 'maverick', 'natty', 'oneiric', 'precise', 'quantal', 'raring', 'saucy',
\ 'utopic', 'vivid', 'wily'
\ ]
let &cpo=s:cpo
" Match uri's
syn match debsourcesUri +\(https\?://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\++
exe 'syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\('. join(s:supported, '\|'). '\)\([-[:alnum:]_./]*\)+'
exe 'syn match debsourcesUnsupportedDistrKeyword +\([[:alnum:]_./]*\)\('. join(s:unsupported, '\|') .'\)\([-[:alnum:]_./]*\)+'
exe 'syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\<\('. join(s:supported, '\|'). '\)\>\([-[:alnum:]_./]*\)+'
exe 'syn match debsourcesUnsupportedDistrKeyword +\([[:alnum:]_./]*\)\<\('. join(s:unsupported, '\|') .'\)\>\([-[:alnum:]_./]*\)+'
" Associate our matches and regions with pretty colours
hi def link debsourcesLine Error

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Vim help file
" Maintainer: Bram Moolenaar (Bram@vim.org)
" Last Change: 2016 Sep 02
" Last Change: 2017 Jun 13
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
@@ -54,7 +54,8 @@ else
syn match helpIgnore "." contained
endif
syn keyword helpNote note Note NOTE note: Note: NOTE: Notes Notes:
syn keyword helpWarning WARNING: Warning:
syn keyword helpWarning WARNING WARNING: Warning:
syn keyword helpDeprecated DEPRECATED DEPRECATED: Deprecated:
syn match helpSpecial "\<N\>"
syn match helpSpecial "\<N\.$"me=e-1
syn match helpSpecial "\<N\.\s"me=e-2
@@ -171,6 +172,7 @@ hi def link helpNotVi Special
hi def link helpSpecial Special
hi def link helpNote Todo
hi def link helpWarning Todo
hi def link helpDeprecated Todo
hi def link helpComment Comment
hi def link helpConstant Constant

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: php PHP 3/4/5/7
" Maintainer: Jason Woofenden <jason@jasonwoof.com>
" Last Change: Apr 28, 2017
" Last Change: Jun 09, 2017
" URL: https://jasonwoof.com/gitweb/?p=vim-syntax.git;a=blob;f=php.vim;hb=HEAD
" Former Maintainers: Peter Hodge <toomuchphp-vim@yahoo.com>
" Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
@@ -197,7 +197,7 @@ syn keyword phpFunctions nsapi_request_headers nsapi_response_headers nsapi_vir
syn keyword phpFunctions aggregate_info aggregate_methods_by_list aggregate_methods_by_regexp aggregate_methods aggregate_properties_by_list aggregate_properties_by_regexp aggregate_properties aggregate aggregation_info deaggregate contained
syn keyword phpFunctions ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob contained
syn keyword phpFunctions odbc_autocommit odbc_binmode odbc_close_all odbc_close odbc_columnprivileges odbc_columns odbc_commit odbc_connect odbc_cursor odbc_data_source odbc_do odbc_error odbc_errormsg odbc_exec odbc_execute odbc_fetch_array odbc_fetch_into odbc_fetch_object odbc_fetch_row odbc_field_len odbc_field_name odbc_field_num odbc_field_precision odbc_field_scale odbc_field_type odbc_foreignkeys odbc_free_result odbc_gettypeinfo odbc_longreadlen odbc_next_result odbc_num_fields odbc_num_rows odbc_pconnect odbc_prepare odbc_primarykeys odbc_procedurecolumns odbc_procedures odbc_result_all odbc_result odbc_rollback odbc_setoption odbc_specialcolumns odbc_statistics odbc_tableprivileges odbc_tables contained
syn keyword phpFunctions openssl_csr_export_to_file openssl_csr_export openssl_csr_new openssl_csr_sign openssl_error_string openssl_free_key openssl_get_privatekey openssl_get_publickey openssl_open openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_seal openssl_sign openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_free openssl_x509_parse openssl_x509_read contained
syn keyword phpFunctions openssl_cipher_iv_length openssl_csr_export_to_file openssl_csr_export openssl_csr_get_public_key openssl_csr_get_subject openssl_csr_new openssl_csr_sign openssl_decrypt openssl_dh_compute_key openssl_digest openssl_encrypt openssl_error_string openssl_free_key openssl_get_cert_locations openssl_get_cipher_methods openssl_get_md_methods openssl_get_privatekey openssl_get_publickey openssl_open openssl_pbkdf2 openssl_pkcs12_export_to_file openssl_pkcs12_export openssl_pkcs12_read openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_free openssl_pkey_get_details openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_random_pseudo_bytes openssl_seal openssl_sign openssl_spki_export_challenge openssl_spki_export openssl_spki_new openssl_spki_verify openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_fingerprint openssl_x509_free openssl_x509_parse openssl_x509_read contained
syn keyword phpFunctions ora_bind ora_close ora_columnname ora_columnsize ora_columntype ora_commit ora_commitoff ora_commiton ora_do ora_error ora_errorcode ora_exec ora_fetch_into ora_fetch ora_getcolumn ora_logoff ora_logon ora_numcols ora_numrows ora_open ora_parse ora_plogon ora_rollback contained
syn keyword phpFunctions flush ob_clean ob_end_clean ob_end_flush ob_flush ob_get_clean ob_get_contents ob_get_flush ob_get_length ob_get_level ob_get_status ob_gzhandler ob_implicit_flush ob_list_handlers ob_start output_add_rewrite_var output_reset_rewrite_vars contained
syn keyword phpFunctions overload contained

View File

@@ -3,6 +3,7 @@
" http://www.unicode.org/Public/5.1.0/ucd/UCD.html
" For the other files see the header.
"
" Might need to update the URL to the emoji-data.txt
" Usage: Vim -S <this-file>
"
" Author: Bram Moolenaar
@@ -382,8 +383,9 @@ let s:ambitable = []
call BuildWidthTable('A', 'ambiguous')
" Edit the emoji text file. Requires the netrw plugin.
edit http://www.unicode.org/Public/emoji/3.0/emoji-data.txt
edit http://unicode.org/Public/emoji/5.0/emoji-data.txt
"edit http://www.unicode.org/Public/emoji/latest/emoji-data.txt
" Build the emoji table. Ver. 1.0 - 6.0
" Must come after the "ambiguous" table
call BuildEmojiTable('; Emoji\s\+# [1-6]\.[0-9]', 'emoji')
call BuildEmojiTable('; Emoji\s\+#\s\+\d\+\.\d', 'emoji')

View File

@@ -1,11 +1,14 @@
# Makefile for GvimExt, using MSVC
# Options:
# DEBUG=yes Build debug version (for VC7 and maybe later)
# CPUARG= /arch:IA32/AVX/etc, call from main makefile to set
# automatically from CPUNR
#
TARGETOS=WINNT
TARGETOS = WINNT
!ifndef APPVER
APPVER=5.0
APPVER = 5.01
!endif
!if "$(DEBUG)" != "yes"
@@ -37,6 +40,9 @@ CPU = i386
!include <Win32.mak>
!endif
# include CPUARG
cflags = $(cflags) $(CPUARG)
all: gvimext.dll
gvimext.dll: gvimext.obj \

View File

@@ -1,7 +1,7 @@
# Makefile for Vim on Win32 (Windows XP/2003/Vista/7/8/10) and Win64,
# using the Microsoft Visual C++ compilers. Known to work with VC5, VC6 (VS98),
# VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005), VC9 (VS2008), VC10 (VS2010),
# VC11 (VS2012), VC12 (VS2013) and VC14 (VS2015)
# VC11 (VS2012), VC12 (VS2013), VC14 (VS2015) and VC15 (VS2017)
#
# To build using other Windows compilers, see INSTALLpc.txt
#
@@ -108,10 +108,15 @@
#
# Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
#
# Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
# i386)
# Processor Version: CPUNR=[any, i586, i686, sse, sse2, avx, avx2] (default is
# any)
# avx is available on Visual C++ 2010 and after.
# avx2 is available on Visual C++ 2013 Update 2 and after.
#
# Version Support: WINVER=[0x0501, 0x0600] (default is 0x0501)
# Version Support: WINVER=[0x0501, 0x0502, 0x0600, 0x0601, 0x0602,
# 0x0603, 0x0A00] (default is 0x0501)
# Supported versions depends on your target SDK, check SDKDDKVer.h
# See https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt
#
# Debug version: DEBUG=yes
# Mapfile: MAP=[no, yes or lines] (default is yes)
@@ -270,11 +275,31 @@ MAKEFLAGS_GVIMEXT = DEBUG=yes
!if $(MSVCVER) < 1900
MSVC_MAJOR = ($(MSVCVER) / 100 - 6)
MSVCRT_VER = ($(MSVCVER) / 10 - 60)
# Visual C++ 2017 needs special handling
# it has an _MSC_VER of 1910->14.1, but is actually v15 with runtime v140
!elseif $(MSVCVER) == 1910
MSVC_MAJOR = 15
MSVCRT_VER = 140
!else
MSVC_MAJOR = ($(MSVCVER) / 100 - 5)
MSVCRT_VER = ($(MSVCVER) / 10 - 50)
!endif
# Calculate MSVC_FULL for Visual C++ 8 and up.
!if $(MSVC_MAJOR) >= 8
! if [echo MSVC_FULL=_MSC_FULL_VER> msvcfullver.c && $(CC) /EP msvcfullver.c > msvcfullver.~ 2> nul]
! message *** ERROR
! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
! error Make aborted.
! else
! include msvcfullver.~
! if [del msvcfullver.c msvcfullver.~]
! endif
! endif
!endif
# Calculate MSVCRT_VER
!if [(set /a MSVCRT_VER="$(MSVCRT_VER)" > nul) && set MSVCRT_VER > msvcrtver.~] == 0
!include msvcrtver.~
@@ -446,27 +471,95 @@ DEL_TREE = rmdir /s /q
INTDIR=$(OBJDIR)
OUTDIR=$(OBJDIR)
### Validate CPUNR
!ifndef CPUNR
# default to untargeted code
CPUNR = any
!elseif "$(CPUNR)" == "i386" || "$(CPUNR)" == "i486"
# alias i386 and i486 to i586
! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
! message Windows XP is the minimum target OS, with a minimum target
! message architecture of i586.
! message Retargeting to i586
CPUNR = i586
!elseif "$(CPUNR)" == "pentium4"
# alias pentium4 to sse2
! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
! message Retargeting to sse2.
CPUNR = sse2
!elseif "$(CPUNR)" != "any" && "$(CPUNR)" != "i586" && "$(CPUNR)" != "i686" && "$(CPUNR)" != "sse" && "$(CPUNR)" != "sse2" && "$(CPUNR)" != "avx" && "$(CPUNR)" != "avx2"
! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
!endif
# Convert processor ID to MVC-compatible number
!if $(MSVC_MAJOR) < 8
!if "$(CPUNR)" == "i386"
CPUARG = /G3
!elseif "$(CPUNR)" == "i486"
CPUARG = /G4
!elseif "$(CPUNR)" == "i586"
! if "$(CPUNR)" == "i586"
CPUARG = /G5
!elseif "$(CPUNR)" == "i686"
! elseif "$(CPUNR)" == "i686"
CPUARG = /G6
!elseif "$(CPUNR)" == "pentium4"
! elseif "$(CPUNR)" == "sse"
CPUARG = /G6 /arch:SSE
! elseif "$(CPUNR)" == "sse2"
CPUARG = /G7 /arch:SSE2
!else
! elseif "$(CPUNR)" == "avx" || "$(CPUNR)" == "avx2"
! message AVX/AVX2 Instruction Sets are not supported by Visual C++ v$(MSVC_MAJOR)
! message Falling back to SSE2
CPUARG = /G7 /arch:SSE2
! elseif "$(CPUNR)" == "any"
CPUARG =
!endif
! endif
!else
# VC8/9/10 only allows specifying SSE architecture but only for 32bit
!if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "pentium4"
# IA32/SSE/SSE2 are only supported on x86
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && ("$(CPUNR)" == "i586" || "$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
# VC<11 generates fp87 code by default
! if $(MSVC_MAJOR) < 11
CPUARG =
# VC>=11 needs explicit insturctions to generate fp87 code
! else
CPUARG = /arch:IA32
! endif
! elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse"
CPUARG = /arch:SSE
! elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2"
CPUARG = /arch:SSE2
! elseif "$(CPUNR)" == "avx"
# AVX is only supported by VC 10 and up
! if $(MSVC_MAJOR) < 10
! message AVX Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
! message Falling back to SSE2
CPUARG = /arch:SSE2
! else
CPUARG =
! endif
! else
CPUARG = /arch:AVX
! endif
! elseif "$(CPUNR)" == "avx2"
# AVX is only supported by VC 10 and up
! if $(MSVC_MAJOR) < 10
! message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
! message Falling back to SSE2
CPUARG = /arch:SSE2
! else
CPUARG =
! endif
# AVX2 is only supported by VC 12U2 and up
# 180030501 is the full version number for Visual Studio 2013/VC 12 Update 2
! elseif $(MSVC_FULL) < 180030501
! message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)-$(MSVC_FULL)
! message Falling back to AVX
CPUARG = /arch:AVX
! else
CPUARG = /arch:AVX2
! endif
! endif
!endif
!endif
# Pass CPUARG to GVimExt, to avoid using version-dependent defaults
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
LIBC =
DEBUGINFO = /Zi

View File

@@ -482,6 +482,11 @@ CClink = $(CC)
# Uncomment this when you do not want inter process communication.
#CONF_OPT_CHANNEL = --disable-channel
# TERMINAL - Terminal emulator support, :terminal command. Requires the
# channel feature.
# Uncomment this when you want terminal emulator support.
#CONF_OPT_TERMINAL = --enable-terminal
# MULTIBYTE - To edit multi-byte characters.
# Uncomment this when you want to edit a multibyte language.
# It's automatically enabled with normal features, GTK or IME support.
@@ -598,6 +603,9 @@ CClink = $(CC)
# Use this with GCC to check for mistakes, unused arguments, etc.
#CFLAGS = -g -Wall -Wextra -Wshadow -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
# Add -Wpedantic to find // comments and other C99 constructs.
# Better disable Perl and Python to avoid a lot of warnings.
#CFLAGS = -g -Wall -Wextra -Wshadow -Wmissing-prototypes -Wpedantic -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
#PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
#MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
@@ -1371,6 +1379,13 @@ ALL_GUI_PRO = gui.pro gui_gtk.pro gui_motif.pro gui_xmdlg.pro gui_athena.pro gu
# }}}
TERM_DEPS = \
libvterm/include/vterm.h \
libvterm/include/vterm_keycodes.h \
libvterm/src/rect.h \
libvterm/src/utf8.h \
libvterm/src/vterm_internal.h
### Command to create dependencies based on #include "..."
### prototype headers are ignored due to -DPROTO, system
### headers #include <...> are ignored if we use the -MM option, as
@@ -1560,6 +1575,7 @@ BASIC_SRC = \
syntax.c \
tag.c \
term.c \
terminal.c \
ui.c \
undo.c \
userfunc.c \
@@ -1569,6 +1585,7 @@ BASIC_SRC = \
SRC = $(BASIC_SRC) \
$(GUI_SRC) \
$(TERM_SRC) \
$(HANGULIN_SRC) \
$(LUA_SRC) \
$(MZSCHEME_SRC) \
@@ -1610,7 +1627,7 @@ ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) \
$(PYTHON_SRC) $(PYTHON3_SRC) $(TCL_SRC) \
$(WORKSHOP_SRC) $(WSDEBUG_SRC) \
$(NETBEANS_SRC) $(CHANNEL_SRC)
$(NETBEANS_SRC) $(CHANNEL_SRC) $(TERM_SRC)
#LINT_SRC = $(SRC)
#LINT_SRC = $(ALL_SRC)
#LINT_SRC = $(BASIC_SRC)
@@ -1665,12 +1682,14 @@ OBJ_COMMON = \
objects/syntax.o \
objects/tag.o \
objects/term.o \
objects/terminal.o \
objects/ui.o \
objects/undo.o \
objects/userfunc.o \
objects/version.o \
objects/window.o \
$(GUI_OBJ) \
$(TERM_OBJ) \
$(LUA_OBJ) \
$(MZSCHEME_OBJ) \
$(PERL_OBJ) \
@@ -1795,6 +1814,7 @@ PRO_AUTO = \
syntax.pro \
tag.pro \
term.pro \
terminal.pro \
termlib.pro \
ui.pro \
undo.pro \
@@ -1848,7 +1868,7 @@ config auto/config.mk: auto/configure config.mk.in config.h.in
$(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
$(CONF_OPT_FEAT) $(CONF_TERM_LIB) \
$(CONF_OPT_COMPBY) $(CONF_OPT_ACL) $(CONF_OPT_NETBEANS) \
$(CONF_OPT_CHANNEL) \
$(CONF_OPT_CHANNEL) $(CONF_OPT_TERMINAL) \
$(CONF_ARGS) $(CONF_OPT_MZSCHEME) $(CONF_OPT_PLTHOME) \
$(CONF_OPT_LUA) $(CONF_OPT_LUA_PREFIX) \
$(CONF_OPT_SYSMOUSE); \
@@ -2086,11 +2106,11 @@ test1 \
test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
test30 test31 test32 test33 test34 test36 test37 test38 test39 \
test40 test41 test42 test43 test44 test45 test48 test49 \
test50 test51 test52 test53 test54 test55 test56 test57 test58 test59 \
test50 test51 test52 test53 test54 test55 test56 test57 test59 \
test60 test64 test66 test67 test68 test69 \
test70 test72 test73 test74 test75 test77 test78 test79 \
test80 test82 test83 test84 test85 test86 test87 test88 \
test90 test91 test94 test95 test97 test98 test99 \
test80 test83 test84 test85 test86 test87 test88 \
test91 test94 test95 test97 test98 test99 \
test100 test101 test103 test104 test107 test108:
cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
@@ -2207,6 +2227,7 @@ test_arglist \
test_search \
test_searchpos \
test_set \
test_sha256 \
test_signs \
test_smartindent \
test_sort \
@@ -2233,6 +2254,7 @@ test_arglist \
test_unlet \
test_usercommands \
test_utf8 \
test_utf8_comparisons \
test_viminfo \
test_vimscript \
test_visual \
@@ -2788,7 +2810,7 @@ SHADOWDIR = shadow
shadow: runtime pixmaps
$(MKDIR_P) $(SHADOWDIR)
cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../vimtutor ../gvimtutor ../install-sh .
cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh .
mkdir $(SHADOWDIR)/auto
cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
$(MKDIR_P) $(SHADOWDIR)/po
@@ -3226,6 +3248,9 @@ objects/tag.o: tag.c
objects/term.o: term.c
$(CCC) -o $@ term.c
objects/terminal.o: terminal.c $(TERM_DEPS)
$(CCC) -o $@ terminal.c
objects/ui.o: ui.c
$(CCC) -o $@ ui.c
@@ -3253,6 +3278,34 @@ objects/channel.o: channel.c
Makefile:
@echo The name of the makefile MUST be "Makefile" (with capital M)!!!!
CCCTERM = $(CCC) -Ilibvterm/include -DINLINE=""
objects/term_encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/encoding.c
objects/term_keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/keyboard.c
objects/term_mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/mouse.c
objects/term_parser.o: libvterm/src/parser.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/parser.c
objects/term_pen.o: libvterm/src/pen.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/pen.c
objects/term_screen.o: libvterm/src/screen.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/screen.c
objects/term_state.o: libvterm/src/state.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/state.c
objects/term_unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/unicode.c
objects/term_vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
$(CCCTERM) -o $@ libvterm/src/vterm.c
###############################################################################
### MacOS X installation
###
@@ -3397,7 +3450,7 @@ objects/ex_cmds2.o: ex_cmds2.c vim.h auto/config.h feature.h os_unix.h \
objects/ex_docmd.o: ex_docmd.c vim.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
proto.h globals.h farsi.h arabic.h
proto.h globals.h farsi.h arabic.h ex_cmdidxs.h
objects/ex_eval.o: ex_eval.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
@@ -3501,7 +3554,7 @@ objects/option.o: option.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h
objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
globals.h farsi.h arabic.h if_mzsch.h os_unixx.h
globals.h farsi.h arabic.h os_unixx.h
objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
@@ -3550,6 +3603,10 @@ objects/term.o: term.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
globals.h farsi.h arabic.h
objects/terminal.o: terminal.c vim.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
proto.h globals.h farsi.h arabic.h
objects/ui.o: ui.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
proto/gui_beval.pro alloc.h ex_cmds.h spell.h proto.h globals.h farsi.h \
@@ -3659,7 +3716,7 @@ objects/json_test.o: json_test.c main.c vim.h auto/config.h feature.h os_unix.h
objects/kword_test.o: kword_test.c main.c vim.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
proto.h globals.h farsi.h arabic.h charset.c mbyte.c
proto.h globals.h farsi.h arabic.h charset.c
objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h \
@@ -3679,7 +3736,7 @@ objects/if_lua.o: if_lua.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h
objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
proto.h globals.h farsi.h arabic.h if_mzsch.h mzscheme_base.c
proto.h globals.h farsi.h arabic.h if_mzsch.h
objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \

33
src/auto/configure vendored
View File

@@ -655,6 +655,8 @@ X_PRE_LIBS
X_CFLAGS
XMKMF
xmkmfpath
TERM_OBJ
TERM_SRC
CHANNEL_OBJ
CHANNEL_SRC
NETBEANS_OBJ
@@ -814,6 +816,7 @@ enable_cscope
enable_workshop
enable_netbeans
enable_channel
enable_terminal
enable_multibyte
enable_hangulinput
enable_xim
@@ -1491,6 +1494,7 @@ Optional Features:
--enable-workshop Include Sun Visual Workshop support.
--disable-netbeans Disable NetBeans integration support.
--disable-channel Disable process communication support.
--enable-terminal Disable terminal emulation support.
--enable-multibyte Include multibyte editing support.
--enable-hangulinput Include Hangul input support.
--enable-xim Include XIM input support.
@@ -7464,6 +7468,35 @@ if test "$enable_channel" = "yes"; then
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-terminal argument" >&5
$as_echo_n "checking --enable-terminal argument... " >&6; }
# Check whether --enable-terminal was given.
if test "${enable_terminal+set}" = set; then :
enableval=$enable_terminal; enable_terminal="yes"
fi
if test "$enable_terminal" = "yes"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use terminal emulator with tiny or small features" >&5
$as_echo "cannot use terminal emulator with tiny or small features" >&6; }
enable_terminal="no"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "$enable_terminal" = "yes"; then
$as_echo "#define FEAT_TERMINAL 1" >>confdefs.h
TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/screen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
TERM_OBJ="objects/term_encoding.o objects/term_keyboard.o objects/term_mouse.o objects/term_parser.o objects/term_pen.o objects/term_screen.o objects/term_state.o objects/term_unicode.o objects/term_vterm.o"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-multibyte argument" >&5
$as_echo_n "checking --enable-multibyte argument... " >&6; }
# Check whether --enable-multibyte was given.

View File

@@ -372,7 +372,7 @@ open_buffer(
set_bufref(bufref_T *bufref, buf_T *buf)
{
bufref->br_buf = buf;
bufref->br_fnum = buf->b_fnum;
bufref->br_fnum = buf == NULL ? 0 : buf->b_fnum;
bufref->br_buf_free_count = buf_free_count;
}

View File

@@ -431,6 +431,9 @@
/* Define if you want to include process communication. */
#undef FEAT_JOB_CHANNEL
/* Define if you want to include terminal emulator support. */
#undef FEAT_TERMINAL
/* Define default global runtime path */
#undef RUNTIME_GLOBAL

View File

@@ -91,6 +91,8 @@ NETBEANS_SRC = @NETBEANS_SRC@
NETBEANS_OBJ = @NETBEANS_OBJ@
CHANNEL_SRC = @CHANNEL_SRC@
CHANNEL_OBJ = @CHANNEL_OBJ@
TERM_SRC = @TERM_SRC@
TERM_OBJ = @TERM_OBJ@
RUBY = @vi_cv_path_ruby@
RUBY_SRC = @RUBY_SRC@

View File

@@ -2028,6 +2028,28 @@ if test "$enable_channel" = "yes"; then
AC_SUBST(CHANNEL_OBJ)
fi
AC_MSG_CHECKING(--enable-terminal argument)
AC_ARG_ENABLE(terminal,
[ --enable-terminal Disable terminal emulation support.],
[enable_terminal="yes"], )
if test "$enable_terminal" = "yes"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
enable_terminal="no"
else
AC_MSG_RESULT(yes)
fi
else
AC_MSG_RESULT(no)
fi
if test "$enable_terminal" = "yes"; then
AC_DEFINE(FEAT_TERMINAL)
TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/screen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
AC_SUBST(TERM_SRC)
TERM_OBJ="objects/term_encoding.o objects/term_keyboard.o objects/term_mouse.o objects/term_parser.o objects/term_pen.o objects/term_screen.o objects/term_state.o objects/term_unicode.o objects/term_vterm.o"
AC_SUBST(TERM_OBJ)
fi
AC_MSG_CHECKING(--enable-multibyte argument)
AC_ARG_ENABLE(multibyte,
[ --enable-multibyte Include multibyte editing support.], ,

View File

@@ -4308,9 +4308,17 @@ ins_compl_get_exp(pos_T *ini)
{
ins_buf = curbuf;
first_match_pos = *ini;
/* So that ^N can match word immediately after cursor */
if (ctrl_x_mode == 0)
dec(&first_match_pos);
/* Move the cursor back one character so that ^N can match the
* word immediately after the cursor. */
if (ctrl_x_mode == 0 && dec(&first_match_pos) < 0)
{
/* Move the cursor to after the last character in the
* buffer, so that word at start of buffer is found
* correctly. */
first_match_pos.lnum = ins_buf->b_ml.ml_line_count;
first_match_pos.col =
(colnr_T)STRLEN(ml_get(first_match_pos.lnum));
}
last_match_pos = first_match_pos;
type = 0;
@@ -4512,7 +4520,7 @@ ins_compl_get_exp(pos_T *ini)
found_new_match = searchit(NULL, ins_buf, pos,
compl_direction,
compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
RE_LAST, (linenr_T)0, NULL);
RE_LAST, (linenr_T)0, NULL, NULL);
--msg_silent;
if (!compl_started || set_match_pos)
{
@@ -7321,7 +7329,9 @@ oneleft(void)
#ifdef FEAT_VIRTUALEDIT
if (virtual_active())
{
# ifdef FEAT_LINEBREAK
int width;
# endif
int v = getviscol();
if (v == 0)

View File

@@ -3191,7 +3191,11 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED)
ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE),
insert ? 0 : typebuf.tb_len, !typed, FALSE);
vim_free(keys_esc);
if (vgetc_busy)
if (vgetc_busy
#ifdef FEAT_TIMERS
|| timer_busy
#endif
)
typebuf_was_filled = TRUE;
if (execute)
{
@@ -5866,6 +5870,9 @@ f_has(typval_T *argvars, typval_T *rettv)
#ifdef FEAT_TERMGUICOLORS
"termguicolors",
#endif
#ifdef FEAT_TERMINAL
"terminal",
#endif
#ifdef TERMINFO
"terminfo",
#endif
@@ -9281,7 +9288,7 @@ search_cmn(typval_T *argvars, pos_T *match_pos, int *flagsp)
pos = save_cursor = curwin->w_cursor;
subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
options, RE_SEARCH, (linenr_T)lnum_stop, &tm);
options, RE_SEARCH, (linenr_T)lnum_stop, &tm, NULL);
if (subpatnum != FAIL)
{
if (flags & SP_SUBPAT)
@@ -9619,7 +9626,7 @@ do_searchpair(
for (;;)
{
n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
options, RE_SEARCH, lnum_stop, &tm);
options, RE_SEARCH, lnum_stop, &tm, NULL);
if (n == FAIL || (firstpos.lnum != 0 && EQUAL_POS(pos, firstpos)))
/* didn't find it or found the first match again: FAIL */
break;
@@ -10461,8 +10468,10 @@ f_sha256(typval_T *argvars, typval_T *rettv)
static void
f_shellescape(typval_T *argvars, typval_T *rettv)
{
int do_special = non_zero_arg(&argvars[1]);
rettv->vval.v_string = vim_strsave_shellescape(
get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]), TRUE);
get_tv_string(&argvars[0]), do_special, do_special);
rettv->v_type = VAR_STRING;
}
@@ -11839,8 +11848,8 @@ f_synconcealed(typval_T *argvars UNUSED, typval_T *rettv)
if ((syntax_flags & HL_CONCEAL) && curwin->w_p_cole < 3)
{
cchar = syn_get_sub_char();
if (cchar == NUL && curwin->w_p_cole == 1 && lcs_conceal != NUL)
cchar = lcs_conceal;
if (cchar == NUL && curwin->w_p_cole == 1)
cchar = (lcs_conceal == NUL) ? ' ' : lcs_conceal;
if (cchar != NUL)
{
# ifdef FEAT_MBYTE
@@ -12392,6 +12401,7 @@ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
{
char_u *name = (char_u *)"";
int val;
static int save_starting = -1;
if (argvars[0].v_type != VAR_STRING
|| (argvars[1].v_type) != VAR_NUMBER)
@@ -12405,10 +12415,29 @@ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
disable_redraw_for_testing = val;
else if (STRCMP(name, (char_u *)"char_avail") == 0)
disable_char_avail_for_testing = val;
else if (STRCMP(name, (char_u *)"starting") == 0)
{
if (val)
{
if (save_starting < 0)
save_starting = starting;
starting = 0;
}
else
{
starting = save_starting;
save_starting = -1;
}
}
else if (STRCMP(name, (char_u *)"ALL") == 0)
{
disable_char_avail_for_testing = FALSE;
disable_redraw_for_testing = FALSE;
if (save_starting >= 0)
{
starting = save_starting;
save_starting = -1;
}
}
else
EMSG2(_(e_invarg2), name);
@@ -13177,7 +13206,10 @@ f_writefile(typval_T *argvars, typval_T *rettv)
char_u *fname;
FILE *fd;
int ret = 0;
listitem_T *li;
list_T *list;
rettv->vval.v_number = -1;
if (check_restricted() || check_secure())
return;
@@ -13186,20 +13218,31 @@ f_writefile(typval_T *argvars, typval_T *rettv)
EMSG2(_(e_listarg), "writefile()");
return;
}
if (argvars[0].vval.v_list == NULL)
list = argvars[0].vval.v_list;
if (list == NULL)
return;
for (li = list->lv_first; li != NULL; li = li->li_next)
if (get_tv_string_chk(&li->li_tv) == NULL)
return;
if (argvars[2].v_type != VAR_UNKNOWN)
{
if (vim_strchr(get_tv_string(&argvars[2]), 'b') != NULL)
char_u *arg2 = get_tv_string_chk(&argvars[2]);
if (arg2 == NULL)
return;
if (vim_strchr(arg2, 'b') != NULL)
binary = TRUE;
if (vim_strchr(get_tv_string(&argvars[2]), 'a') != NULL)
if (vim_strchr(arg2, 'a') != NULL)
append = TRUE;
}
fname = get_tv_string_chk(&argvars[1]);
if (fname == NULL)
return;
/* Always open the file in binary mode, library functions have a mind of
* their own about CR-LF conversion. */
fname = get_tv_string(&argvars[1]);
if (*fname == NUL || (fd = mch_fopen((char *)fname,
append ? APPENDBIN : WRITEBIN)) == NULL)
{
@@ -13208,7 +13251,7 @@ f_writefile(typval_T *argvars, typval_T *rettv)
}
else
{
if (write_list(fd, argvars[0].vval.v_list, binary) == FAIL)
if (write_list(fd, list, binary) == FAIL)
ret = -1;
fclose(fd);
}

View File

@@ -25,12 +25,12 @@ static const unsigned short cmdidxs1[26] =
/* r */ 351,
/* s */ 370,
/* t */ 437,
/* u */ 472,
/* v */ 483,
/* w */ 501,
/* x */ 516,
/* y */ 525,
/* z */ 526
/* u */ 473,
/* v */ 484,
/* w */ 502,
/* x */ 517,
/* y */ 526,
/* z */ 527
};
/*
@@ -60,7 +60,7 @@ static const unsigned char cmdidxs2[26][26] =
/* q */ { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* r */ { 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 18, 0, 0, 0, 0 },
/* s */ { 2, 6, 15, 0, 18, 22, 0, 24, 25, 0, 0, 28, 30, 34, 38, 40, 0, 48, 0, 49, 0, 61, 62, 0, 63, 0 },
/* t */ { 2, 0, 19, 0, 22, 23, 0, 24, 0, 25, 0, 26, 27, 28, 29, 30, 0, 31, 33, 0, 34, 0, 0, 0, 0, 0 },
/* t */ { 2, 0, 19, 0, 22, 24, 0, 25, 0, 26, 0, 27, 28, 29, 30, 31, 0, 32, 34, 0, 35, 0, 0, 0, 0, 0 },
/* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 },
/* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 12, 0, 13, 14, 0, 0, 0, 0 },
@@ -69,4 +69,4 @@ static const unsigned char cmdidxs2[26][26] =
/* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
static const int command_count = 539;
static const int command_count = 540;

View File

@@ -5096,7 +5096,7 @@ do_sub(exarg_T *eap)
); ++lnum)
{
nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
(colnr_T)0, NULL);
(colnr_T)0, NULL, NULL);
if (nmatch)
{
colnr_T copycol;
@@ -5695,7 +5695,7 @@ skip:
|| nmatch_tl > 0
|| (nmatch = vim_regexec_multi(&regmatch, curwin,
curbuf, sub_firstlnum,
matchcol, NULL)) == 0
matchcol, NULL, NULL)) == 0
|| regmatch.startpos[0].lnum > 0)
{
if (new_start != NULL)
@@ -5760,7 +5760,7 @@ skip:
}
if (nmatch == -1 && !lastone)
nmatch = vim_regexec_multi(&regmatch, curwin, curbuf,
sub_firstlnum, matchcol, NULL);
sub_firstlnum, matchcol, NULL, NULL);
/*
* 5. break if there isn't another match in this line
@@ -5903,6 +5903,17 @@ do_sub_msg(
return FALSE;
}
static void
global_exe_one(char_u *cmd, linenr_T lnum)
{
curwin->w_cursor.lnum = lnum;
curwin->w_cursor.col = 0;
if (*cmd == NUL || *cmd == '\n')
do_cmdline((char_u *)"p", NULL, NULL, DOCMD_NOWAIT);
else
do_cmdline(cmd, NULL, NULL, DOCMD_NOWAIT);
}
/*
* Execute a global command of the form:
*
@@ -5933,9 +5944,13 @@ ex_global(exarg_T *eap)
int match;
int which_pat;
if (global_busy)
/* When nesting the command works on one line. This allows for
* ":g/found/v/notfound/command". */
if (global_busy && (eap->line1 != 1
|| eap->line2 != curbuf->b_ml.ml_line_count))
{
EMSG(_("E147: Cannot do :global recursive")); /* will increment global_busy */
/* will increment global_busy to break out of the loop */
EMSG(_("E147: Cannot do :global recursive with a range"));
return;
}
@@ -5993,46 +6008,58 @@ ex_global(exarg_T *eap)
return;
}
/*
* pass 1: set marks for each (not) matching line
*/
for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum)
if (global_busy)
{
/* a match on this line? */
lnum = curwin->w_cursor.lnum;
match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
(colnr_T)0, NULL);
(colnr_T)0, NULL, NULL);
if ((type == 'g' && match) || (type == 'v' && !match))
{
ml_setmarked(lnum);
ndone++;
}
line_breakcheck();
}
/*
* pass 2: execute the command for each line that has been marked
*/
if (got_int)
MSG(_(e_interr));
else if (ndone == 0)
{
if (type == 'v')
smsg((char_u *)_("Pattern found in every line: %s"), pat);
else
smsg((char_u *)_("Pattern not found: %s"), pat);
global_exe_one(cmd, lnum);
}
else
{
/*
* pass 1: set marks for each (not) matching line
*/
for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum)
{
/* a match on this line? */
match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
(colnr_T)0, NULL, NULL);
if ((type == 'g' && match) || (type == 'v' && !match))
{
ml_setmarked(lnum);
ndone++;
}
line_breakcheck();
}
/*
* pass 2: execute the command for each line that has been marked
*/
if (got_int)
MSG(_(e_interr));
else if (ndone == 0)
{
if (type == 'v')
smsg((char_u *)_("Pattern found in every line: %s"), pat);
else
smsg((char_u *)_("Pattern not found: %s"), pat);
}
else
{
#ifdef FEAT_CLIPBOARD
start_global_changes();
start_global_changes();
#endif
global_exe(cmd);
global_exe(cmd);
#ifdef FEAT_CLIPBOARD
end_global_changes();
end_global_changes();
#endif
}
ml_clearmarked(); /* clear rest of the marks */
}
ml_clearmarked(); /* clear rest of the marks */
vim_regfree(regmatch.regprog);
}
@@ -6063,12 +6090,7 @@ global_exe(char_u *cmd)
old_lcount = curbuf->b_ml.ml_line_count;
while (!got_int && (lnum = ml_firstmarked()) != 0 && global_busy == 1)
{
curwin->w_cursor.lnum = lnum;
curwin->w_cursor.col = 0;
if (*cmd == NUL || *cmd == '\n')
do_cmdline((char_u *)"p", NULL, NULL, DOCMD_NOWAIT);
else
do_cmdline(cmd, NULL, NULL, DOCMD_NOWAIT);
global_exe_one(cmd, lnum);
ui_breakcheck();
}
@@ -6810,8 +6832,15 @@ fix_help_buffer(void)
char_u *rt;
int mustfree;
/* set filetype to "help". */
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL);
#ifdef FEAT_AUTOCMD
/* Set filetype to "help" if still needed. */
if (STRCMP(curbuf->b_p_ft, "help") != 0)
{
++curbuf_lock;
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL);
--curbuf_lock;
}
#endif
#ifdef FEAT_SYN_HL
if (!syntax_present(curwin))
@@ -8514,4 +8543,3 @@ ex_oldfiles(exarg_T *eap UNUSED)
}
}
#endif

View File

@@ -51,7 +51,9 @@
#define BUFUNL 0x20000L /* accepts unlisted buffer too */
#define ARGOPT 0x40000L /* allow "++opt=val" argument */
#define SBOXOK 0x80000L /* allowed in the sandbox */
#define CMDWIN 0x100000L /* allowed in cmdline window */
#define CMDWIN 0x100000L /* allowed in cmdline window; when missing
* disallows editing another buffer when
* curbuf_lock is set */
#define MODIFY 0x200000L /* forbidden in non-'modifiable' buffer */
#define EXFLAGS 0x400000L /* allow flags after count in argument */
#define FILES (XFILE | EXTRA) /* multiple extra files allowed */
@@ -426,7 +428,7 @@ EX(CMD_delcommand, "delcommand", ex_delcommand,
NEEDARG|WORD1|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_delfunction, "delfunction", ex_delfunction,
NEEDARG|WORD1|CMDWIN,
BANG|NEEDARG|WORD1|CMDWIN,
ADDR_LINES),
EX(CMD_display, "display", ex_display,
EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN,
@@ -1176,7 +1178,7 @@ EX(CMD_registers, "registers", ex_display,
EXTRA|NOTRLCOM|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_resize, "resize", ex_resize,
RANGE|NOTADR|TRLBAR|WORD1,
RANGE|NOTADR|TRLBAR|WORD1|CMDWIN,
ADDR_LINES),
EX(CMD_retab, "retab", ex_retab,
TRLBAR|RANGE|WHOLEFOLD|DFLALL|BANG|WORD1|CMDWIN|MODIFY,
@@ -1481,6 +1483,9 @@ EX(CMD_tclfile, "tclfile", ex_tclfile,
EX(CMD_tearoff, "tearoff", ex_tearoff,
NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN,
ADDR_LINES),
EX(CMD_terminal, "terminal", ex_terminal,
RANGE|NOTADR|EXTRA|TRLBAR|CMDWIN,
ADDR_OTHER),
EX(CMD_tfirst, "tfirst", ex_tag,
RANGE|NOTADR|BANG|TRLBAR|ZEROR,
ADDR_LINES),
@@ -1620,7 +1625,7 @@ EX(CMD_winsize, "winsize", ex_winsize,
EXTRA|NEEDARG|TRLBAR,
ADDR_LINES),
EX(CMD_wincmd, "wincmd", ex_wincmd,
NEEDARG|WORD1|RANGE|NOTADR,
NEEDARG|WORD1|RANGE|NOTADR|CMDWIN,
ADDR_WINDOWS),
EX(CMD_windo, "windo", ex_listdo,
NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,

View File

@@ -1183,6 +1183,7 @@ timer_callback(timer_T *timer)
/*
* Call timers that are due.
* Return the time in msec until the next timer is due.
* Returns -1 if there are no pending timers.
*/
long
check_due_timer(void)
@@ -1196,7 +1197,13 @@ check_due_timer(void)
long current_id = last_timer_id;
# ifdef WIN3264
LARGE_INTEGER fr;
# endif
/* Don't run any timers while exiting or dealing with an error. */
if (exiting || aborting())
return next_due;
# ifdef WIN3264
QueryPerformanceFrequency(&fr);
# endif
profile_start(&now);
@@ -1209,15 +1216,35 @@ check_due_timer(void)
this_due = GET_TIMEDIFF(timer, now);
if (this_due <= 1)
{
int save_timer_busy = timer_busy;
int save_vgetc_busy = vgetc_busy;
int did_emsg_save = did_emsg;
int called_emsg_save = called_emsg;
int did_throw_save = did_throw;
timer_busy = timer_busy > 0 || vgetc_busy > 0;
vgetc_busy = 0;
called_emsg = FALSE;
timer->tr_firing = TRUE;
timer_callback(timer);
timer->tr_firing = FALSE;
timer_next = timer->tr_next;
did_one = TRUE;
timer_busy = save_timer_busy;
vgetc_busy = save_vgetc_busy;
if (called_emsg)
{
++timer->tr_emsg_count;
if (!did_throw_save && current_exception != NULL)
discard_current_exception();
}
did_emsg = did_emsg_save;
called_emsg = called_emsg_save;
/* Only fire the timer again if it repeats and stop_timer() wasn't
* called while inside the callback (tr_id == -1). */
if (timer->tr_repeat != 0 && timer->tr_id != -1)
if (timer->tr_repeat != 0 && timer->tr_id != -1
&& timer->tr_emsg_count < 3)
{
profile_setlimit(timer->tr_interval, &timer->tr_due);
this_due = GET_TIMEDIFF(timer, now);
@@ -3278,19 +3305,6 @@ source_callback(char_u *fname, void *cookie UNUSED)
(void)do_source(fname, FALSE, DOSO_NONE);
}
/*
* Source the file "name" from all directories in 'runtimepath'.
* "name" can contain wildcards.
* When "flags" has DIP_ALL: source all files, otherwise only the first one.
*
* return FAIL when no file could be sourced, OK otherwise.
*/
int
source_runtime(char_u *name, int flags)
{
return do_in_runtimepath(name, flags, source_callback, NULL);
}
/*
* Find the file "name" in all directories in "path" and invoke
* "callback(fname, cookie)".
@@ -3428,18 +3442,19 @@ do_in_path(
}
/*
* Find "name" in 'runtimepath'. When found, invoke the callback function for
* Find "name" in "path". When found, invoke the callback function for
* it: callback(fname, "cookie")
* When "flags" has DIP_ALL repeat for all matches, otherwise only the first
* one is used.
* Returns OK when at least one match found, FAIL otherwise.
*
* If "name" is NULL calls callback for each entry in runtimepath. Cookie is
* If "name" is NULL calls callback for each entry in "path". Cookie is
* passed by reference in this case, setting it to NULL indicates that callback
* has done its job.
*/
int
do_in_runtimepath(
static int
do_in_path_and_pp(
char_u *path,
char_u *name,
int flags,
void (*callback)(char_u *fname, void *ck),
@@ -3452,7 +3467,7 @@ do_in_runtimepath(
char *opt_dir = "pack/*/opt/*/%s";
if ((flags & DIP_NORTP) == 0)
done = do_in_path(p_rtp, name, flags, callback, cookie);
done = do_in_path(path, name, flags, callback, cookie);
if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START))
{
@@ -3479,6 +3494,42 @@ do_in_runtimepath(
return done;
}
/*
* Just like do_in_path_and_pp(), using 'runtimepath' for "path".
*/
int
do_in_runtimepath(
char_u *name,
int flags,
void (*callback)(char_u *fname, void *ck),
void *cookie)
{
return do_in_path_and_pp(p_rtp, name, flags, callback, cookie);
}
/*
* Source the file "name" from all directories in 'runtimepath'.
* "name" can contain wildcards.
* When "flags" has DIP_ALL: source all files, otherwise only the first one.
*
* return FAIL when no file could be sourced, OK otherwise.
*/
int
source_runtime(char_u *name, int flags)
{
return source_in_path(p_rtp, name, flags);
}
/*
* Just like source_runtime(), but use "path" instead of 'runtimepath'.
*/
int
source_in_path(char_u *path, char_u *name, int flags)
{
return do_in_path_and_pp(path, name, flags, source_callback, NULL);
}
/*
* Expand wildcards in "pat" and invoke do_source() for each match.
*/

View File

@@ -488,6 +488,9 @@ static void ex_folddo(exarg_T *eap);
#ifndef FEAT_PROFILE
# define ex_profile ex_ni
#endif
#ifndef FEAT_TERMINAL
# define ex_terminal ex_ni
#endif
/*
* Declare cmdnames[].
@@ -2370,7 +2373,8 @@ do_one_cmd(
goto doend;
}
/* Check for wrong commands. */
if (*p == '!' && ea.cmd[1] == 0151 && ea.cmd[0] == 78)
if (*p == '!' && ea.cmd[1] == 0151 && ea.cmd[0] == 78
&& !IS_USER_CMDIDX(ea.cmdidx))
{
errormsg = uc_fun_cmd();
goto doend;
@@ -4556,7 +4560,7 @@ get_address(
curwin->w_cursor.col = 0;
searchcmdlen = 0;
if (!do_search(NULL, c, cmd, 1L,
SEARCH_HIS | SEARCH_MSG, NULL))
SEARCH_HIS | SEARCH_MSG, NULL, NULL))
{
curwin->w_cursor = pos;
cmd = NULL;
@@ -4613,7 +4617,7 @@ get_address(
if (searchit(curwin, curbuf, &pos,
*cmd == '?' ? BACKWARD : FORWARD,
(char_u *)"", 1L, SEARCH_MSG,
i, (linenr_T)0, NULL) != FAIL)
i, (linenr_T)0, NULL, NULL) != FAIL)
lnum = pos.lnum;
else
{
@@ -7267,8 +7271,11 @@ ex_quit(exarg_T *eap)
apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
/* Refuse to quit when locked or when the buffer in the last window is
* being closed (can only happen in autocommands). */
if (curbuf_locked() || (wp->w_buffer->b_nwindows == 1
&& wp->w_buffer->b_locked > 0))
if (curbuf_locked()
# ifdef FEAT_WINDOWS
|| !win_valid(wp)
# endif
|| (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0))
return;
#endif

View File

@@ -1492,7 +1492,7 @@ getcmdline(
if (c != NUL)
{
if (c == firstc || vim_strchr((char_u *)(
p_magic ? "\\^$.*[" : "\\^$"), c)
p_magic ? "\\~^$.*[" : "\\^$"), c)
!= NULL)
{
/* put a backslash before special
@@ -1693,7 +1693,7 @@ getcmdline(
i = searchit(curwin, curbuf, &t,
c == Ctrl_G ? FORWARD : BACKWARD,
ccline.cmdbuff, count, search_flags,
RE_SEARCH, 0, NULL);
RE_SEARCH, 0, NULL, NULL);
--emsg_off;
if (i)
{
@@ -1708,6 +1708,14 @@ getcmdline(
search_start = t;
(void)decl(&search_start);
}
else if (c == Ctrl_G && firstc == '?')
{
/* move just after the current match, so that
* when nv_search finishes the cursor will be
* put back on the match */
search_start = t;
(void)incl(&search_start);
}
if (LT_POS(t, search_start) && c == Ctrl_G)
{
/* wrap around */
@@ -1903,9 +1911,9 @@ cmdline_changed:
i = do_search(NULL, firstc, ccline.cmdbuff, count,
SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK,
#ifdef FEAT_RELTIME
&tm
&tm, NULL
#else
NULL
NULL, NULL
#endif
);
--emsg_off;
@@ -6878,6 +6886,8 @@ open_cmdwin(void)
# ifdef FEAT_AUTOCMD
/* Do execute autocommands for setting the filetype (load syntax). */
unblock_autocmds();
/* But don't allow switching to another buffer. */
++curbuf_lock;
# endif
/* Showing the prompt may have set need_wait_return, reset it. */
@@ -6893,6 +6903,9 @@ open_cmdwin(void)
}
set_option_value((char_u *)"ft", 0L, (char_u *)"vim", OPT_LOCAL);
}
# ifdef FEAT_AUTOCMD
--curbuf_lock;
# endif
/* Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin
* sets 'textwidth' to 78). */

View File

@@ -1267,6 +1267,13 @@
# undef FEAT_JOB_CHANNEL
#endif
/*
* +terminal ":terminal" command. Runs a terminal in a window.
*/
#if !defined(FEAT_JOB_CHANNEL) && defined(FEAT_TERMINAL)
# undef FEAT_TERMINAL
#endif
/*
* +signs Allow signs to be displayed to the left of text lines.
* Adds the ":sign" command.

View File

@@ -3166,6 +3166,7 @@ buf_write(
int device = FALSE; /* writing to a device */
stat_T st_old;
int prev_got_int = got_int;
int checking_conversion;
int file_readonly = FALSE; /* overwritten file is read-only */
static char *err_readonly = "is read-only (cannot override: \"W\" in 'cpoptions')";
#if defined(UNIX) /*XXX fix me sometime? */
@@ -4344,433 +4345,491 @@ buf_write(
#endif
/*
* Open the file "wfname" for writing.
* We may try to open the file twice: If we can't write to the
* file and forceit is TRUE we delete the existing file and try to create
* a new one. If this still fails we may have lost the original file!
* (this may happen when the user reached his quotum for number of files).
* Appending will fail if the file does not exist and forceit is FALSE.
* If conversion is taking place, we may first pretend to write and check
* for conversion errors. Then loop again to write for real.
* When not doing conversion this writes for real right away.
*/
while ((fd = mch_open((char *)wfname, O_WRONLY | O_EXTRA | (append
? (forceit ? (O_APPEND | O_CREAT) : O_APPEND)
: (O_CREAT | O_TRUNC))
, perm < 0 ? 0666 : (perm & 0777))) < 0)
for (checking_conversion = TRUE; ; checking_conversion = FALSE)
{
/*
* A forced write will try to create a new file if the old one is
* still readonly. This may also happen when the directory is
* read-only. In that case the mch_remove() will fail.
* There is no need to check conversion when:
* - there is no conversion
* - we make a backup file, that can be restored in case of conversion
* failure.
*/
if (errmsg == NULL)
{
#ifdef UNIX
stat_T st;
/* Don't delete the file when it's a hard or symbolic link. */
if ((!newfile && st_old.st_nlink > 1)
|| (mch_lstat((char *)fname, &st) == 0
&& (st.st_dev != st_old.st_dev
|| st.st_ino != st_old.st_ino)))
errmsg = (char_u *)_("E166: Can't open linked file for writing");
else
#ifdef FEAT_MBYTE
if (!converted || dobackup)
#endif
checking_conversion = FALSE;
if (checking_conversion)
{
/* Make sure we don't write anything. */
fd = -1;
write_info.bw_fd = fd;
}
else
{
/*
* Open the file "wfname" for writing.
* We may try to open the file twice: If we can't write to the file
* and forceit is TRUE we delete the existing file and try to
* create a new one. If this still fails we may have lost the
* original file! (this may happen when the user reached his
* quotum for number of files).
* Appending will fail if the file does not exist and forceit is
* FALSE.
*/
while ((fd = mch_open((char *)wfname, O_WRONLY | O_EXTRA | (append
? (forceit ? (O_APPEND | O_CREAT) : O_APPEND)
: (O_CREAT | O_TRUNC))
, perm < 0 ? 0666 : (perm & 0777))) < 0)
{
errmsg = (char_u *)_("E212: Can't open file for writing");
if (forceit && vim_strchr(p_cpo, CPO_FWRITE) == NULL
&& perm >= 0)
/*
* A forced write will try to create a new file if the old one
* is still readonly. This may also happen when the directory
* is read-only. In that case the mch_remove() will fail.
*/
if (errmsg == NULL)
{
#ifdef UNIX
/* we write to the file, thus it should be marked
writable after all */
if (!(perm & 0200))
made_writable = TRUE;
perm |= 0200;
if (st_old.st_uid != getuid() || st_old.st_gid != getgid())
perm &= 0777;
stat_T st;
/* Don't delete the file when it's a hard or symbolic link.
*/
if ((!newfile && st_old.st_nlink > 1)
|| (mch_lstat((char *)fname, &st) == 0
&& (st.st_dev != st_old.st_dev
|| st.st_ino != st_old.st_ino)))
errmsg = (char_u *)_("E166: Can't open linked file for writing");
else
#endif
if (!append) /* don't remove when appending */
mch_remove(wfname);
continue;
{
errmsg = (char_u *)_("E212: Can't open file for writing");
if (forceit && vim_strchr(p_cpo, CPO_FWRITE) == NULL
&& perm >= 0)
{
#ifdef UNIX
/* we write to the file, thus it should be marked
writable after all */
if (!(perm & 0200))
made_writable = TRUE;
perm |= 0200;
if (st_old.st_uid != getuid()
|| st_old.st_gid != getgid())
perm &= 0777;
#endif
if (!append) /* don't remove when appending */
mch_remove(wfname);
continue;
}
}
}
}
}
restore_backup:
{
stat_T st;
/*
* If we failed to open the file, we don't need a backup. Throw it
* away. If we moved or removed the original file try to put the
* backup in its place.
*/
if (backup != NULL && wfname == fname)
{
if (backup_copy)
{
stat_T st;
/*
* There is a small chance that we removed the original,
* try to move the copy in its place.
* This may not work if the vim_rename() fails.
* In that case we leave the copy around.
* If we failed to open the file, we don't need a backup.
* Throw it away. If we moved or removed the original file
* try to put the backup in its place.
*/
/* If file does not exist, put the copy in its place */
if (mch_stat((char *)fname, &st) < 0)
vim_rename(backup, fname);
/* if original file does exist throw away the copy */
if (mch_stat((char *)fname, &st) >= 0)
mch_remove(backup);
}
else
{
/* try to put the original file back */
vim_rename(backup, fname);
}
}
if (backup != NULL && wfname == fname)
{
if (backup_copy)
{
/*
* There is a small chance that we removed the
* original, try to move the copy in its place.
* This may not work if the vim_rename() fails.
* In that case we leave the copy around.
*/
/* If file does not exist, put the copy in its
* place */
if (mch_stat((char *)fname, &st) < 0)
vim_rename(backup, fname);
/* if original file does exist throw away the copy
*/
if (mch_stat((char *)fname, &st) >= 0)
mch_remove(backup);
}
else
{
/* try to put the original file back */
vim_rename(backup, fname);
}
}
/* if original file no longer exists give an extra warning */
if (!newfile && mch_stat((char *)fname, &st) < 0)
end = 0;
}
/* if original file no longer exists give an extra warning
*/
if (!newfile && mch_stat((char *)fname, &st) < 0)
end = 0;
}
#ifdef FEAT_MBYTE
if (wfname != fname)
vim_free(wfname);
if (wfname != fname)
vim_free(wfname);
#endif
goto fail;
}
errmsg = NULL;
goto fail;
}
write_info.bw_fd = fd;
#if defined(MACOS_CLASSIC) || defined(WIN3264)
/* TODO: Is it need for MACOS_X? (Dany) */
/*
* On macintosh copy the original files attributes (i.e. the backup)
* This is done in order to preserve the resource fork and the
* Finder attribute (label, comments, custom icons, file creator)
*/
if (backup != NULL && overwriting && !append)
{
if (backup_copy)
(void)mch_copy_file_attribute(wfname, backup);
else
(void)mch_copy_file_attribute(backup, wfname);
}
/* TODO: Is it need for MACOS_X? (Dany) */
/*
* On macintosh copy the original files attributes (i.e. the backup)
* This is done in order to preserve the resource fork and the
* Finder attribute (label, comments, custom icons, file creator)
*/
if (backup != NULL && overwriting && !append)
{
if (backup_copy)
(void)mch_copy_file_attribute(wfname, backup);
else
(void)mch_copy_file_attribute(backup, wfname);
}
if (!overwriting && !append)
{
if (buf->b_ffname != NULL)
(void)mch_copy_file_attribute(buf->b_ffname, wfname);
/* Should copy resource fork */
}
if (!overwriting && !append)
{
if (buf->b_ffname != NULL)
(void)mch_copy_file_attribute(buf->b_ffname, wfname);
/* Should copy resource fork */
}
#endif
write_info.bw_fd = fd;
#ifdef FEAT_CRYPT
if (*buf->b_p_key != NUL && !filtering)
{
char_u *header;
int header_len;
buf->b_cryptstate = crypt_create_for_writing(crypt_get_method_nr(buf),
buf->b_p_key, &header, &header_len);
if (buf->b_cryptstate == NULL || header == NULL)
end = 0;
else
{
/* Write magic number, so that Vim knows how this file is
* encrypted when reading it back. */
write_info.bw_buf = header;
write_info.bw_len = header_len;
write_info.bw_flags = FIO_NOCONVERT;
if (buf_write_bytes(&write_info) == FAIL)
end = 0;
wb_flags |= FIO_ENCRYPTED;
vim_free(header);
}
}
#endif
write_info.bw_buf = buffer;
nchars = 0;
/* use "++bin", "++nobin" or 'binary' */
if (eap != NULL && eap->force_bin != 0)
write_bin = (eap->force_bin == FORCE_BIN);
else
write_bin = buf->b_p_bin;
#ifdef FEAT_MBYTE
/*
* The BOM is written just after the encryption magic number.
* Skip it when appending and the file already existed, the BOM only makes
* sense at the start of the file.
*/
if (buf->b_p_bomb && !write_bin && (!append || perm < 0))
{
write_info.bw_len = make_bom(buffer, fenc);
if (write_info.bw_len > 0)
{
/* don't convert, do encryption */
write_info.bw_flags = FIO_NOCONVERT | wb_flags;
if (buf_write_bytes(&write_info) == FAIL)
end = 0;
else
nchars += write_info.bw_len;
}
}
write_info.bw_start_lnum = start;
#endif
#ifdef FEAT_PERSISTENT_UNDO
write_undo_file = (buf->b_p_udf && overwriting && !append
&& !filtering && reset_changed);
if (write_undo_file)
/* Prepare for computing the hash value of the text. */
sha256_start(&sha_ctx);
#endif
write_info.bw_len = bufsize;
#ifdef HAS_BW_FLAGS
write_info.bw_flags = wb_flags;
#endif
fileformat = get_fileformat_force(buf, eap);
s = buffer;
len = 0;
for (lnum = start; lnum <= end; ++lnum)
{
/*
* The next while loop is done once for each character written.
* Keep it fast!
*/
ptr = ml_get_buf(buf, lnum, FALSE) - 1;
#ifdef FEAT_PERSISTENT_UNDO
if (write_undo_file)
sha256_update(&sha_ctx, ptr + 1, (UINT32_T)(STRLEN(ptr + 1) + 1));
#endif
while ((c = *++ptr) != NUL)
{
if (c == NL)
*s = NUL; /* replace newlines with NULs */
else if (c == CAR && fileformat == EOL_MAC)
*s = NL; /* Mac: replace CRs with NLs */
else
*s = c;
++s;
if (++len != bufsize)
continue;
if (buf_write_bytes(&write_info) == FAIL)
if (*buf->b_p_key != NUL && !filtering)
{
end = 0; /* write error: break loop */
break;
}
nchars += bufsize;
s = buffer;
len = 0;
#ifdef FEAT_MBYTE
write_info.bw_start_lnum = lnum;
#endif
}
/* write failed or last line has no EOL: stop here */
if (end == 0
|| (lnum == end
&& (write_bin || !buf->b_p_fixeol)
&& (lnum == buf->b_no_eol_lnum
|| (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
{
++lnum; /* written the line, count it */
no_eol = TRUE;
break;
}
if (fileformat == EOL_UNIX)
*s++ = NL;
else
{
*s++ = CAR; /* EOL_MAC or EOL_DOS: write CR */
if (fileformat == EOL_DOS) /* write CR-NL */
{
if (++len == bufsize)
char_u *header;
int header_len;
buf->b_cryptstate = crypt_create_for_writing(
crypt_get_method_nr(buf),
buf->b_p_key, &header, &header_len);
if (buf->b_cryptstate == NULL || header == NULL)
end = 0;
else
{
/* Write magic number, so that Vim knows how this file is
* encrypted when reading it back. */
write_info.bw_buf = header;
write_info.bw_len = header_len;
write_info.bw_flags = FIO_NOCONVERT;
if (buf_write_bytes(&write_info) == FAIL)
{
end = 0; /* write error: break loop */
break;
}
nchars += bufsize;
s = buffer;
len = 0;
end = 0;
wb_flags |= FIO_ENCRYPTED;
vim_free(header);
}
*s++ = NL;
}
#endif
}
if (++len == bufsize && end)
{
if (buf_write_bytes(&write_info) == FAIL)
{
end = 0; /* write error: break loop */
break;
}
nchars += bufsize;
s = buffer;
len = 0;
errmsg = NULL;
ui_breakcheck();
if (got_int)
{
end = 0; /* Interrupted, break loop */
break;
}
}
#ifdef VMS
write_info.bw_buf = buffer;
nchars = 0;
/* use "++bin", "++nobin" or 'binary' */
if (eap != NULL && eap->force_bin != 0)
write_bin = (eap->force_bin == FORCE_BIN);
else
write_bin = buf->b_p_bin;
#ifdef FEAT_MBYTE
/*
* On VMS there is a problem: newlines get added when writing blocks
* at a time. Fix it by writing a line at a time.
* This is much slower!
* Explanation: VAX/DECC RTL insists that records in some RMS
* structures end with a newline (carriage return) character, and if
* they don't it adds one.
* With other RMS structures it works perfect without this fix.
* The BOM is written just after the encryption magic number.
* Skip it when appending and the file already existed, the BOM only
* makes sense at the start of the file.
*/
if (buf->b_fab_rfm == FAB$C_VFC
|| ((buf->b_fab_rat & (FAB$M_FTN | FAB$M_CR)) != 0))
if (buf->b_p_bomb && !write_bin && (!append || perm < 0))
{
int b2write;
buf->b_fab_mrs = (buf->b_fab_mrs == 0
? MIN(4096, bufsize)
: MIN(buf->b_fab_mrs, bufsize));
b2write = len;
while (b2write > 0)
write_info.bw_len = make_bom(buffer, fenc);
if (write_info.bw_len > 0)
{
write_info.bw_len = MIN(b2write, buf->b_fab_mrs);
/* don't convert, do encryption */
write_info.bw_flags = FIO_NOCONVERT | wb_flags;
if (buf_write_bytes(&write_info) == FAIL)
end = 0;
else
nchars += write_info.bw_len;
}
}
write_info.bw_start_lnum = start;
#endif
#ifdef FEAT_PERSISTENT_UNDO
write_undo_file = (buf->b_p_udf
&& overwriting
&& !append
&& !filtering
&& reset_changed
&& !checking_conversion);
if (write_undo_file)
/* Prepare for computing the hash value of the text. */
sha256_start(&sha_ctx);
#endif
write_info.bw_len = bufsize;
#ifdef HAS_BW_FLAGS
write_info.bw_flags = wb_flags;
#endif
fileformat = get_fileformat_force(buf, eap);
s = buffer;
len = 0;
for (lnum = start; lnum <= end; ++lnum)
{
/*
* The next while loop is done once for each character written.
* Keep it fast!
*/
ptr = ml_get_buf(buf, lnum, FALSE) - 1;
#ifdef FEAT_PERSISTENT_UNDO
if (write_undo_file)
sha256_update(&sha_ctx, ptr + 1,
(UINT32_T)(STRLEN(ptr + 1) + 1));
#endif
while ((c = *++ptr) != NUL)
{
if (c == NL)
*s = NUL; /* replace newlines with NULs */
else if (c == CAR && fileformat == EOL_MAC)
*s = NL; /* Mac: replace CRs with NLs */
else
*s = c;
++s;
if (++len != bufsize)
continue;
if (buf_write_bytes(&write_info) == FAIL)
{
end = 0;
end = 0; /* write error: break loop */
break;
}
b2write -= MIN(b2write, buf->b_fab_mrs);
}
write_info.bw_len = bufsize;
nchars += len;
s = buffer;
len = 0;
}
nchars += bufsize;
s = buffer;
len = 0;
#ifdef FEAT_MBYTE
write_info.bw_start_lnum = lnum;
#endif
}
if (len > 0 && end > 0)
{
write_info.bw_len = len;
if (buf_write_bytes(&write_info) == FAIL)
end = 0; /* write error */
nchars += len;
}
/* write failed or last line has no EOL: stop here */
if (end == 0
|| (lnum == end
&& (write_bin || !buf->b_p_fixeol)
&& (lnum == buf->b_no_eol_lnum
|| (lnum == buf->b_ml.ml_line_count
&& !buf->b_p_eol))))
{
++lnum; /* written the line, count it */
no_eol = TRUE;
break;
}
if (fileformat == EOL_UNIX)
*s++ = NL;
else
{
*s++ = CAR; /* EOL_MAC or EOL_DOS: write CR */
if (fileformat == EOL_DOS) /* write CR-NL */
{
if (++len == bufsize)
{
if (buf_write_bytes(&write_info) == FAIL)
{
end = 0; /* write error: break loop */
break;
}
nchars += bufsize;
s = buffer;
len = 0;
}
*s++ = NL;
}
}
if (++len == bufsize && end)
{
if (buf_write_bytes(&write_info) == FAIL)
{
end = 0; /* write error: break loop */
break;
}
nchars += bufsize;
s = buffer;
len = 0;
ui_breakcheck();
if (got_int)
{
end = 0; /* Interrupted, break loop */
break;
}
}
#ifdef VMS
/*
* On VMS there is a problem: newlines get added when writing
* blocks at a time. Fix it by writing a line at a time.
* This is much slower!
* Explanation: VAX/DECC RTL insists that records in some RMS
* structures end with a newline (carriage return) character, and
* if they don't it adds one.
* With other RMS structures it works perfect without this fix.
*/
if (buf->b_fab_rfm == FAB$C_VFC
|| ((buf->b_fab_rat & (FAB$M_FTN | FAB$M_CR)) != 0))
{
int b2write;
buf->b_fab_mrs = (buf->b_fab_mrs == 0
? MIN(4096, bufsize)
: MIN(buf->b_fab_mrs, bufsize));
b2write = len;
while (b2write > 0)
{
write_info.bw_len = MIN(b2write, buf->b_fab_mrs);
if (buf_write_bytes(&write_info) == FAIL)
{
end = 0;
break;
}
b2write -= MIN(b2write, buf->b_fab_mrs);
}
write_info.bw_len = bufsize;
nchars += len;
s = buffer;
len = 0;
}
#endif
}
if (len > 0 && end > 0)
{
write_info.bw_len = len;
if (buf_write_bytes(&write_info) == FAIL)
end = 0; /* write error */
nchars += len;
}
/* Stop when writing done or an error was encountered. */
if (!checking_conversion || end == 0)
break;
/* If no error happened until now, writing should be ok, so loop to
* really write the buffer. */
}
#if defined(UNIX) && defined(HAVE_FSYNC)
/* On many journalling file systems there is a bug that causes both the
* original and the backup file to be lost when halting the system right
* after writing the file. That's because only the meta-data is
* journalled. Syncing the file slows down the system, but assures it has
* been written to disk and we don't lose it.
* For a device do try the fsync() but don't complain if it does not work
* (could be a pipe).
* If the 'fsync' option is FALSE, don't fsync(). Useful for laptops. */
if (p_fs && fsync(fd) != 0 && !device)
/* If we started writing, finish writing. Also when an error was
* encountered. */
if (!checking_conversion)
{
errmsg = (char_u *)_("E667: Fsync failed");
end = 0;
}
#if defined(UNIX) && defined(HAVE_FSYNC)
/*
* On many journalling file systems there is a bug that causes both the
* original and the backup file to be lost when halting the system
* right after writing the file. That's because only the meta-data is
* journalled. Syncing the file slows down the system, but assures it
* has been written to disk and we don't lose it.
* For a device do try the fsync() but don't complain if it does not
* work (could be a pipe).
* If the 'fsync' option is FALSE, don't fsync(). Useful for laptops.
*/
if (p_fs && fsync(fd) != 0 && !device)
{
errmsg = (char_u *)_("E667: Fsync failed");
end = 0;
}
#endif
#if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
/* Probably need to set the security context. */
if (!backup_copy)
mch_copy_sec(backup, wfname);
/* Probably need to set the security context. */
if (!backup_copy)
mch_copy_sec(backup, wfname);
#endif
#ifdef UNIX
/* When creating a new file, set its owner/group to that of the original
* file. Get the new device and inode number. */
if (backup != NULL && !backup_copy)
{
# ifdef HAVE_FCHOWN
stat_T st;
/* don't change the owner when it's already OK, some systems remove
* permission or ACL stuff */
if (mch_stat((char *)wfname, &st) < 0
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid)
/* When creating a new file, set its owner/group to that of the
* original file. Get the new device and inode number. */
if (backup != NULL && !backup_copy)
{
ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
if (perm >= 0) /* set permission again, may have changed */
(void)mch_setperm(wfname, perm);
}
# ifdef HAVE_FCHOWN
stat_T st;
/* don't change the owner when it's already OK, some systems remove
* permission or ACL stuff */
if (mch_stat((char *)wfname, &st) < 0
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid)
{
ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
if (perm >= 0) /* set permission again, may have changed */
(void)mch_setperm(wfname, perm);
}
# endif
buf_setino(buf);
}
else if (!buf->b_dev_valid)
/* Set the inode when creating a new file. */
buf_setino(buf);
buf_setino(buf);
}
else if (!buf->b_dev_valid)
/* Set the inode when creating a new file. */
buf_setino(buf);
#endif
if (close(fd) != 0)
{
errmsg = (char_u *)_("E512: Close failed");
end = 0;
}
if (close(fd) != 0)
{
errmsg = (char_u *)_("E512: Close failed");
end = 0;
}
#ifdef UNIX
if (made_writable)
perm &= ~0200; /* reset 'w' bit for security reasons */
if (made_writable)
perm &= ~0200; /* reset 'w' bit for security reasons */
#endif
if (perm >= 0) /* set perm. of new file same as old file */
(void)mch_setperm(wfname, perm);
if (perm >= 0) /* set perm. of new file same as old file */
(void)mch_setperm(wfname, perm);
#ifdef HAVE_ACL
/*
* Probably need to set the ACL before changing the user (can't set the
* ACL on a file the user doesn't own).
* On Solaris, with ZFS and the aclmode property set to "discard" (the
* default), chmod() discards all part of a file's ACL that don't represent
* the mode of the file. It's non-trivial for us to discover whether we're
* in that situation, so we simply always re-set the ACL.
*/
/*
* Probably need to set the ACL before changing the user (can't set the
* ACL on a file the user doesn't own).
* On Solaris, with ZFS and the aclmode property set to "discard" (the
* default), chmod() discards all part of a file's ACL that don't
* represent the mode of the file. It's non-trivial for us to discover
* whether we're in that situation, so we simply always re-set the ACL.
*/
# ifndef HAVE_SOLARIS_ZFS_ACL
if (!backup_copy)
if (!backup_copy)
# endif
mch_set_acl(wfname, acl);
mch_set_acl(wfname, acl);
#endif
#ifdef FEAT_CRYPT
if (buf->b_cryptstate != NULL)
{
crypt_free_state(buf->b_cryptstate);
buf->b_cryptstate = NULL;
}
if (buf->b_cryptstate != NULL)
{
crypt_free_state(buf->b_cryptstate);
buf->b_cryptstate = NULL;
}
#endif
#if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
if (wfname != fname)
{
/*
* The file was written to a temp file, now it needs to be converted
* with 'charconvert' to (overwrite) the output file.
*/
if (end != 0)
if (wfname != fname)
{
if (eval_charconvert(enc_utf8 ? (char_u *)"utf-8" : p_enc, fenc,
wfname, fname) == FAIL)
/*
* The file was written to a temp file, now it needs to be
* converted with 'charconvert' to (overwrite) the output file.
*/
if (end != 0)
{
write_info.bw_conv_error = TRUE;
end = 0;
if (eval_charconvert(enc_utf8 ? (char_u *)"utf-8" : p_enc,
fenc, wfname, fname) == FAIL)
{
write_info.bw_conv_error = TRUE;
end = 0;
}
}
mch_remove(wfname);
vim_free(wfname);
}
mch_remove(wfname);
vim_free(wfname);
}
#endif
}
if (end == 0)
{
/*
* Error encountered.
*/
if (errmsg == NULL)
{
#ifdef FEAT_MBYTE
@@ -5690,6 +5749,10 @@ buf_write_bytes(struct bw_info *ip)
}
#endif /* FEAT_MBYTE */
if (ip->bw_fd < 0)
/* Only checking conversion, which is OK if we get here. */
return OK;
#ifdef FEAT_CRYPT
if (flags & FIO_ENCRYPTED)
{
@@ -8800,7 +8863,7 @@ do_doautocmd(
/*
* Loop over the events.
*/
while (*arg && !VIM_ISWHITE(*arg))
while (*arg && !ends_excmd(*arg) && !VIM_ISWHITE(*arg))
if (apply_autocmds_group(event_name2nr(arg, &arg),
fname, NULL, TRUE, group, curbuf, NULL))
nothing_done = FALSE;
@@ -9322,7 +9385,8 @@ apply_autocmds_group(
* Quickly return if there are no autocommands for this event or
* autocommands are blocked.
*/
if (first_autopat[(int)event] == NULL || autocmd_blocked > 0)
if (event == NUM_EVENTS || first_autopat[(int)event] == NULL
|| autocmd_blocked > 0)
goto BYPASS_AU;
/*
@@ -9395,7 +9459,7 @@ apply_autocmds_group(
{
if (event == EVENT_COLORSCHEME || event == EVENT_OPTIONSET)
autocmd_fname = NULL;
else if (fname != NULL && *fname != NUL)
else if (fname != NULL && !ends_excmd(*fname))
autocmd_fname = fname;
else if (buf != NULL)
autocmd_fname = buf->b_ffname;

View File

@@ -467,6 +467,11 @@ flush_buffers(int flush_typeahead)
;
typebuf.tb_off = MAXMAPLEN;
typebuf.tb_len = 0;
#if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
/* Reset the flag that text received from a client or from feedkeys()
* was inserted in the typeahead buffer. */
typebuf_was_filled = FALSE;
#endif
}
else /* remove mapped characters at the start only */
{
@@ -2583,7 +2588,7 @@ vgetorpeek(int advance)
* get a character: 3. from the user - handle <Esc> in Insert mode
*/
/*
* special case: if we get an <ESC> in insert mode and there
* Special case: if we get an <ESC> in insert mode and there
* are no more characters at once, we pretend to go out of
* insert mode. This prevents the one second delay after
* typing an <ESC>. If we get something after all, we may
@@ -2617,8 +2622,8 @@ vgetorpeek(int advance)
mode_deleted = TRUE;
}
#ifdef FEAT_GUI
/* may show different cursor shape */
if (gui.in_use)
/* may show a different cursor shape */
if (gui.in_use && State != NORMAL && !cmd_silent)
{
int save_State;

View File

@@ -1659,6 +1659,7 @@ EXTERN int in_free_unref_items INIT(= FALSE);
#ifdef FEAT_TIMERS
EXTERN int did_add_timer INIT(= FALSE);
EXTERN int timer_busy INIT(= 0); /* when timer is inside vgetc() then > 0 */
#endif
#ifdef FEAT_EVAL

View File

@@ -5361,7 +5361,7 @@ gui_do_findrepl(
searchflags += SEARCH_START;
i = msg_scroll;
(void)do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
searchflags, NULL);
searchflags, NULL, NULL);
msg_scroll = i; /* don't let an error message set msg_scroll */
}

View File

@@ -652,9 +652,11 @@ gui_mch_add_menu(vimmenu_T *menu, int idx)
parent_widget = (parent != NULL) ? parent->submenu_id : gui.menubar;
menu_item_new(menu, parent_widget);
# if !GTK_CHECK_VERSION(3,4,0)
/* since the tearoff should always appear first, increment idx */
if (parent != NULL && !menu_is_popup(parent->name))
++idx;
# endif
gtk_menu_shell_insert(GTK_MENU_SHELL(parent_widget), menu->id, idx);
@@ -773,10 +775,12 @@ gui_mch_add_menu_item(vimmenu_T *menu, int idx)
if (parent == NULL || parent->submenu_id == NULL)
return;
# if !GTK_CHECK_VERSION(3,4,0)
/* Make place for the possible tearoff handle item. Not in the popup
* menu, it doesn't have a tearoff item. */
if (!menu_is_popup(parent->name))
++idx;
# endif
if (menu_is_separator(menu->name))
{

View File

@@ -633,6 +633,30 @@ S_SvREFCNT_dec(pTHX_ SV *sv)
}
# endif
/* perl-5.26 also needs S_TOPMARK and S_POPMARK. */
# if (PERL_REVISION == 5) && (PERL_VERSION >= 26)
PERL_STATIC_INLINE I32
S_TOPMARK(pTHX)
{
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
"MARK top %p %" IVdf "\n",
PL_markstack_ptr,
(IV)*PL_markstack_ptr)));
return *PL_markstack_ptr;
}
PERL_STATIC_INLINE I32
S_POPMARK(pTHX)
{
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
"MARK pop %p %" IVdf "\n",
(PL_markstack_ptr-1),
(IV)*(PL_markstack_ptr-1))));
assert((PL_markstack_ptr > PL_markstack) || !"MARK underflow");
return *PL_markstack_ptr--;
}
# endif
/*
* Make all runtime-links of perl.
*

View File

@@ -779,6 +779,7 @@ get_exceptions(void)
static int initialised = 0;
#define PYINITIALISED initialised
static int python_end_called = FALSE;
#define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self);
@@ -878,6 +879,7 @@ python_end(void)
if (recurse != 0)
return;
python_end_called = TRUE;
++recurse;
#ifdef DYNAMIC_PYTHON
@@ -1040,6 +1042,8 @@ DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
}
++recursive;
#endif
if (python_end_called)
return;
#if defined(MACOS) && !defined(MACOS_X_UNIX)
GetPort(&oldPort);
@@ -1568,7 +1572,7 @@ do_pyeval (char_u *str, typval_T *rettv)
(rangeinitializer) init_range_eval,
(runner) run_eval,
(void *) rettv);
switch(rettv->v_type)
switch (rettv->v_type)
{
case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;

View File

@@ -733,8 +733,8 @@ get_py3_exceptions(void)
#endif /* DYNAMIC_PYTHON3 */
static int py3initialised = 0;
#define PYINITIALISED py3initialised
static int python_end_called = FALSE;
#define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self)
@@ -817,6 +817,7 @@ python3_end(void)
if (recurse != 0)
return;
python_end_called = TRUE;
++recurse;
#ifdef DYNAMIC_PYTHON3
@@ -938,6 +939,9 @@ DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
PyObject *cmdbytes;
PyGILState_STATE pygilstate;
if (python_end_called)
goto theend;
#if defined(MACOS) && !defined(MACOS_X_UNIX)
GetPort(&oldPort);
/* Check if the Python library is available */

View File

@@ -112,6 +112,7 @@
/* Used for the sgr mouse. */
#define KS_SGR_MOUSE 237
#define KS_SGR_MOUSE_RELEASE 236
/*
* Filler used after KS_SPECIAL and others
@@ -139,6 +140,8 @@
/*
* Codes for keys that do not have a termcap name.
* The numbers are fixed to make sure that recorded key sequences remain valid.
* Add new entries at the end, not halfway.
*
* K_SPECIAL KS_EXTRA KE_xxx
*/
@@ -146,125 +149,126 @@ enum key_extra
{
KE_NAME = 3 /* name of this terminal entry */
, KE_S_UP /* shift-up */
, KE_S_DOWN /* shift-down */
, KE_S_UP = 4 /* shift-up */
, KE_S_DOWN = 5 /* shift-down */
, KE_S_F1 /* shifted function keys */
, KE_S_F2
, KE_S_F3
, KE_S_F4
, KE_S_F5
, KE_S_F6
, KE_S_F7
, KE_S_F8
, KE_S_F9
, KE_S_F10
, KE_S_F1 = 6 /* shifted function keys */
, KE_S_F2 = 7
, KE_S_F3 = 8
, KE_S_F4 = 9
, KE_S_F5 = 10
, KE_S_F6 = 11
, KE_S_F7 = 12
, KE_S_F8 = 13
, KE_S_F9 = 14
, KE_S_F10 = 15
, KE_S_F11
, KE_S_F12
, KE_S_F13
, KE_S_F14
, KE_S_F15
, KE_S_F16
, KE_S_F17
, KE_S_F18
, KE_S_F19
, KE_S_F20
, KE_S_F11 = 16
, KE_S_F12 = 17
, KE_S_F13 = 18
, KE_S_F14 = 19
, KE_S_F15 = 20
, KE_S_F16 = 21
, KE_S_F17 = 22
, KE_S_F18 = 23
, KE_S_F19 = 24
, KE_S_F20 = 25
, KE_S_F21
, KE_S_F22
, KE_S_F23
, KE_S_F24
, KE_S_F25
, KE_S_F26
, KE_S_F27
, KE_S_F28
, KE_S_F29
, KE_S_F30
, KE_S_F21 = 26
, KE_S_F22 = 27
, KE_S_F23 = 28
, KE_S_F24 = 29
, KE_S_F25 = 30
, KE_S_F26 = 31
, KE_S_F27 = 32
, KE_S_F28 = 33
, KE_S_F29 = 34
, KE_S_F30 = 35
, KE_S_F31
, KE_S_F32
, KE_S_F33
, KE_S_F34
, KE_S_F35
, KE_S_F36
, KE_S_F37
, KE_S_F31 = 36
, KE_S_F32 = 37
, KE_S_F33 = 38
, KE_S_F34 = 39
, KE_S_F35 = 40
, KE_S_F36 = 41
, KE_S_F37 = 42
, KE_MOUSE /* mouse event start */
, KE_MOUSE = 43 /* mouse event start */
/*
* Symbols for pseudo keys which are translated from the real key symbols
* above.
*/
, KE_LEFTMOUSE /* Left mouse button click */
, KE_LEFTDRAG /* Drag with left mouse button down */
, KE_LEFTRELEASE /* Left mouse button release */
, KE_MIDDLEMOUSE /* Middle mouse button click */
, KE_MIDDLEDRAG /* Drag with middle mouse button down */
, KE_MIDDLERELEASE /* Middle mouse button release */
, KE_RIGHTMOUSE /* Right mouse button click */
, KE_RIGHTDRAG /* Drag with right mouse button down */
, KE_RIGHTRELEASE /* Right mouse button release */
, KE_LEFTMOUSE = 44 /* Left mouse button click */
, KE_LEFTDRAG = 45 /* Drag with left mouse button down */
, KE_LEFTRELEASE = 46 /* Left mouse button release */
, KE_MIDDLEMOUSE = 47 /* Middle mouse button click */
, KE_MIDDLEDRAG = 48 /* Drag with middle mouse button down */
, KE_MIDDLERELEASE = 49 /* Middle mouse button release */
, KE_RIGHTMOUSE = 50 /* Right mouse button click */
, KE_RIGHTDRAG = 51 /* Drag with right mouse button down */
, KE_RIGHTRELEASE = 52 /* Right mouse button release */
, KE_IGNORE /* Ignored mouse drag/release */
, KE_IGNORE = 53 /* Ignored mouse drag/release */
, KE_TAB /* unshifted TAB key */
, KE_S_TAB_OLD /* shifted TAB key (no longer used) */
, KE_TAB = 54 /* unshifted TAB key */
, KE_S_TAB_OLD = 55 /* shifted TAB key (no longer used) */
, KE_XF1 /* extra vt100 function keys for xterm */
, KE_XF2
, KE_XF3
, KE_XF4
, KE_XEND /* extra (vt100) end key for xterm */
, KE_ZEND /* extra (vt100) end key for xterm */
, KE_XHOME /* extra (vt100) home key for xterm */
, KE_ZHOME /* extra (vt100) home key for xterm */
, KE_XUP /* extra vt100 cursor keys for xterm */
, KE_XDOWN
, KE_XLEFT
, KE_XRIGHT
, KE_SNIFF_UNUSED = 56 /* obsolete */
, KE_XF1 = 57 /* extra vt100 function keys for xterm */
, KE_XF2 = 58
, KE_XF3 = 59
, KE_XF4 = 60
, KE_XEND = 61 /* extra (vt100) end key for xterm */
, KE_ZEND = 62 /* extra (vt100) end key for xterm */
, KE_XHOME = 63 /* extra (vt100) home key for xterm */
, KE_ZHOME = 64 /* extra (vt100) home key for xterm */
, KE_XUP = 65 /* extra vt100 cursor keys for xterm */
, KE_XDOWN = 66
, KE_XLEFT = 67
, KE_XRIGHT = 68
, KE_LEFTMOUSE_NM /* non-mappable Left mouse button click */
, KE_LEFTRELEASE_NM /* non-mappable left mouse button release */
, KE_LEFTMOUSE_NM = 69 /* non-mappable Left mouse button click */
, KE_LEFTRELEASE_NM = 70 /* non-mappable left mouse button release */
, KE_S_XF1 /* extra vt100 shifted function keys for xterm */
, KE_S_XF2
, KE_S_XF3
, KE_S_XF4
, KE_S_XF1 = 71 /* vt100 shifted function keys for xterm */
, KE_S_XF2 = 72
, KE_S_XF3 = 73
, KE_S_XF4 = 74
/* NOTE: The scroll wheel events are inverted: i.e. UP is the same as
* moving the actual scroll wheel down, LEFT is the same as moving the
* scroll wheel right. */
, KE_MOUSEDOWN /* scroll wheel pseudo-button Down */
, KE_MOUSEUP /* scroll wheel pseudo-button Up */
, KE_MOUSELEFT /* scroll wheel pseudo-button Left */
, KE_MOUSERIGHT /* scroll wheel pseudo-button Right */
, KE_MOUSEDOWN = 75 /* scroll wheel pseudo-button Down */
, KE_MOUSEUP = 76 /* scroll wheel pseudo-button Up */
, KE_MOUSELEFT = 77 /* scroll wheel pseudo-button Left */
, KE_MOUSERIGHT = 78 /* scroll wheel pseudo-button Right */
, KE_KINS /* keypad Insert key */
, KE_KDEL /* keypad Delete key */
, KE_KINS = 79 /* keypad Insert key */
, KE_KDEL = 80 /* keypad Delete key */
, KE_CSI /* CSI typed directly */
, KE_SNR /* <SNR> */
, KE_PLUG /* <Plug> */
, KE_CMDWIN /* open command-line window from Command-line Mode */
, KE_CSI = 81 /* CSI typed directly */
, KE_SNR = 82 /* <SNR> */
, KE_PLUG = 83 /* <Plug> */
, KE_CMDWIN = 84 /* open command-line window from Command-line Mode */
, KE_C_LEFT /* control-left */
, KE_C_RIGHT /* control-right */
, KE_C_HOME /* control-home */
, KE_C_END /* control-end */
, KE_C_LEFT = 85 /* control-left */
, KE_C_RIGHT = 86 /* control-right */
, KE_C_HOME = 87 /* control-home */
, KE_C_END = 88 /* control-end */
, KE_X1MOUSE /* X1/X2 mouse-buttons */
, KE_X1DRAG
, KE_X1RELEASE
, KE_X2MOUSE
, KE_X2DRAG
, KE_X2RELEASE
, KE_X1MOUSE = 89 /* X1/X2 mouse-buttons */
, KE_X1DRAG = 90
, KE_X1RELEASE = 91
, KE_X2MOUSE = 92
, KE_X2DRAG = 93
, KE_X2RELEASE = 94
, KE_DROP /* DnD data is available */
, KE_CURSORHOLD /* CursorHold event */
, KE_NOP /* doesn't do something */
, KE_FOCUSGAINED /* focus gained */
, KE_FOCUSLOST /* focus lost */
, KE_DROP = 95 /* DnD data is available */
, KE_CURSORHOLD = 96 /* CursorHold event */
, KE_NOP = 97 /* doesn't do something */
, KE_FOCUSGAINED = 98 /* focus gained */
, KE_FOCUSLOST = 99 /* focus lost */
};
/*
@@ -416,6 +420,7 @@ enum key_extra
#define K_PTERM_MOUSE TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
#define K_URXVT_MOUSE TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
#define K_SGR_MOUSE TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
#define K_SGR_MOUSERELEASE TERMCAP2KEY(KS_SGR_MOUSE_RELEASE, KE_FILLER)
#define K_SELECT TERMCAP2KEY(KS_SELECT, KE_FILLER)
#define K_TEAROFF TERMCAP2KEY(KS_TEAROFF, KE_FILLER)

Some files were not shown because too many files have changed in this diff Show More