Commit Graph

4681 Commits

Author SHA1 Message Date
Yee Cheng Chin
0c3ce43606 Change "Preferences" to "Settings" in documentation
In macOS 13 Ventura, the general terminology of "Preferences" has been
renamed to "Settings". The main menu's "Preferences…" item is
automatically renamed to "Settings…" by the OS when building against the
macOS 13 SDK, but we still need to update documentation to match.
2022-10-26 23:13:41 -07:00
Yee Cheng Chin
d8a4dcbe89 Add Vim script support and a popup menu for data lookup
Add a new Vim script function `showdefinition()` that allows Vim script
to call back to macOS's data lookup feature and show the definition /
URL preview / etc for any text, at a designated row/col position. If the
row/col are not provided this function will just show it at the cursor.

Also, add a new autoload/macvim.vim for utility functions to call
showdefinition() for selected texts and the word under cursor. Make a
new right-click popup menu "Look Up" call that when there are selected
texts in visual mode to make the lookup functionality easier to access
for users without a trackpad (since Ctrl-Cmd-D is a little obscure and
unwieldy to use). For the utility functions, it was a little hard to
determine how to get the text under visual selection without yanking (we
don't want to pollute the register here), and just implemented a
function to take care of all the edge cases including visual/block/line
modes and selection=exclusive. It could be useful in other situations.

As a side refactor, change the message handler in MacVim from if/else to
switch case. In optimized builds, they both essentially optimize to the
same thing, but for debug builds, the if/else statements have to step
through one by one, and switch case just makes more sense for a giant
message ID lookup like this.

Part of Epic #1311
2022-10-14 19:32:50 -07:00
Yee Cheng Chin
6500a0cd77 Merge remote-tracking branch 'vim/master' 2022-10-13 13:42:24 -07:00
Bram Moolenaar
d93009eb35 patch 9.0.0741: cannot specify an ID for each item with prop_add_list()
Problem:    Cannot specify an ID for each item with prop_add_list(). (Sergey
            Vlasov)
Solution:   Add an optional fifth number to the item. (closes #11360)
2022-10-13 14:35:24 +01:00
=?UTF-8?q?Bj=C3=B6rn=20Linse?=
91ccbad5de patch 9.0.0738: cannot suppress completion "scanning" messages
Problem:    Cannot suppress completion "scanning" messages.
Solution:   Add the "C" flag in 'shortmess'. (Bjorn Linse, closes #11354)
2022-10-13 12:51:13 +01:00
Bram Moolenaar
ae906c8b1b patch 9.0.0729: the rightleft and arabic features are disabled
Problem:    The rightleft and arabic features are disabled.
Solution:   Re-enable the features, some users want to use the functionality.
2022-10-12 11:12:49 +01:00
Yee Cheng Chin
83e925e923 Support dictionary/data lookups of text
This adds support for looking up data under the mouse cursor. Usually it
will bring up a dictionary, but other times it could be a Wikipedia
article, Siri knowledge, etc. Apple doesn't really have a good name for
it, other than "looking up data", "quick look" (a confusingly similar
name with the other Quick Look OS feature), or "show definition". You
can activate this by doing Ctrl-Cmd-D when the mouse is over a cursor.
If you have a trackpad, you can also either activate this using Force
click or three-finger tap (depends on your system preference settings).

Note that for Force click, this could potentially make it impossible to
use the MacVim `<ForceClick>` mapping in Vim, which allows you to map a
force click to a Vim command (#716). This is handled by having a new
setting (under a new "Input" preference pane which will have more
populated later) that allows you to choose whether to use Force click
for data lookup or Vim's `<ForceClick>` mapping. If you have configured
to use three-finger taps though this setting wouldn't do anything, and
`<ForceClick>` is always send to the Vim mapping.

Also, this is lacking a lot of features that a normal macOS application
would get, e.g. looking up selected texts (e.g. if you have "ice cream",
you may want to select the whole thing to look up the phrase, rather
than just "ice" or "cream"), data detector, and much more (e.g. custom
API support). They will be done later as part of #1311.

Technical details below:

The way the OS knows how to look up the data and present it is by
talking to the NSTextInput/NSTextInputClient. Previously MacVim
implemented NSTextInput partially, and didn't implement the critical
firstRectForCharacterRange:actualRange and characterIndexForPoint:
functions. First, in this change we change from NSTextInput to
NSTextInputClient (which is the newer non-deprecated version), and
implement those functions, which allows the OS to query the text
storage.

By default, the OS sends a quickLookWithEvent: call to us whenever the
lookup happens but for some odd reason this isn't automatic for Force
clicks, presumably because some apps want to handle Force clicks
manually (this is why some apps only work for three-finger taps but not
Force clicks for lookups). This isn't documented but I found references
in iTerm/Firefox, and basically we just need to manually handle it and
send off quickLookWithEvent: when handling Force clicks.

For implementing the NSTextInputClient properly, the main issue is
making sure that can work properly with input methods / marked texts,
which is the other primary purpose for this class (other than inputting
keys). For data lookups, I'm representing the grid as a row-major text
(with no newline/space in between) and expose that to the OS. This
already has some issue because it doesn't handle Vim vertical splits
well, as MacVim doesn't really have access to detailed Vim text buffers
easily (unless we do a lot of calls back-and-forth). This means wrapped
texts won't be looked up properly, which I think is ok. Also, the OS
APIs deal with UTF-8 indices, so we can't just convert row/column to raw
indices and have to do a lot of character length calculations
(especially for wide chars like CJK or emojis) to make sure the returned
ranges are consistent and valid. For marked texts though, this presents
a challenge because Vim doesn't really have a strong enough API to
communicate back-and-forth about the marked positions and whatnot (it
only let the GUI know where the current cursor is), and it's hard to
implement APIs like `markedRange` properly because some marked texts
could be hidden or wrapped (if you implement some of these functions
improperly Apple's input methods could start misbehaving especially when
you use arrow keys to navigate). In the end I kept the original
implementation for treating the marked texts as a range starting from 0,
*only* when we have marked text. Kind of a hack but this makes sure we
work both in marked text mode (i.e. when inputting texts) and when doing
lookups. For simplicity I made it so that you can't do data lookups when
in marked text mode now.

Input method:

This change also fixes a quirk in input method as a driveby change.
Previously the logic for calculating the rect for where the candidate
list was quite broken, but now it's calculated correctly using the
desired range and the current cursor position. This matters when say
using Japanese IM and using the left/right arrow to jump to different
sections of the text. If the desired range is in a wrapped line, the new
logic would attempt to pin it to the left-most column of where the
cursor is in the range.

Data detection:

Note that the default implementation is quite bare, and lacks a lot of
smart data detection. For example, if you put your mouse over a URL, it
won't properly select the whole URL, and addresses and dates for example
also won't get grouped together properly. This is because these require
additional implementation (e.g. using NSDataDetector) instead of coming
"for free", and will be handled later. In fact, Apple's WebKit and
NSTextView cheats by calling an internal API framework called "Reveal"
(which you can find out by intercepting NSTextView's calls and/or
looking at WebKit's source code) which is much more powerful and
supports looking up package tracking, airline info, and more, but it's
not available to third-party software (that's why Safari's lookup is so
much better than Chrome/Firefox's).

This isn't tested right now. Future task needs to add XCTest support to
properly test this as there are a lot of edge cases involved here.

Fix #1191
Part of Epic #1311, which contains other items to be implemented.
2022-10-11 16:49:06 -07:00
Bram Moolenaar
7c6cd44375 patch 9.0.0727: help in the repository differs from patched version too much
Problem:    Help in the repository differs from patched version too much.
Solution:   Make a patch for a few help files.
2022-10-11 21:54:04 +01:00
Yee Cheng Chin
4282633ba6 patch 9.0.0710: quitting/unloading/hiding a terminal does not work properly
Problem:    Quitting/unloading/hiding a terminal buffer does not always work
            properly.
Solution:   Avoid that ":q!" leaves an empty buffer behind.  ":bunload!" also
            kills the job and unloads the buffer.  ":hide" does not unload the
            buffer. (Yee Cheng Chin, closes #11323)
2022-10-10 11:46:16 +01:00
Yee Cheng Chin
09d44aa8c5 Merge remote-tracking branch 'vim/master' 2022-10-09 13:02:50 -07:00
Yee Cheng Chin
89e86cc7e4 Update documentation to remove +sound from TODO
This was implemented in upstream Vim.
2022-10-08 11:37:22 -07:00
Yee Cheng Chin
996a256ed5 Merge remote-tracking branch 'vim/master' 2022-10-08 11:37:11 -07:00
Martin Tournoij
25f3a146a0 patch 9.0.0700: there is no real need for a "big" build
Problem:    There is no real need for a "big" build.
Solution:   Move common features to "normal" build, less often used features
            to the "huge" build. (Martin Tournoij, closes #11283)
2022-10-08 19:26:41 +01:00
Martin Tournoij
251c1e2ed8 patch 9.0.0698: VisVim is outdated, does not work with current Visual Studio
Problem:    VisVim is outdated, does not work with current Visual Studio.
Solution:   Remove VisVim. (Martin Tournoij)
2022-10-08 17:15:28 +01:00
Yee Cheng Chin
4314e4f7da patch 9.0.0694: no native sound support on Mac OS
Problem:    No native sound support on Mac OS.
Solution:   Add sound support for Mac OS. (Yee Cheng Chin, closes #11274)
2022-10-08 13:50:05 +01:00
Yee Cheng Chin
52dcad216b Add clearer documentation about how to query the system appearance mode
See #1306
2022-10-07 16:38:53 -07:00
Bram Moolenaar
bdc09a18fc patch 9.0.0683: cannot specify a time for :echowindow
Problem:    Cannot specify a time for :echowindow.
Solution:   A count can be used to specify the display time. Add
            popup_findecho().
2022-10-07 14:31:45 +01:00
Yee Cheng Chin
f1749a22cb Merge remote-tracking branch 'vim/master' 2022-10-06 15:33:20 -07:00
Martin Tournoij
7904fa420e patch 9.0.0657: too many #ifdefs
Problem:    Too many #ifdefs.
Solution:   Graduate the +cmdwin feature.  Now the tiny and small builds are
            equal, drop the small build.  (Martin Tournoij, closes #11268)
2022-10-04 16:28:45 +01:00
Bram Moolenaar
4ba5f1dab6 patch 9.0.0656: cannot specify another character to use instead of '@'
Problem:    Cannot specify another character to use instead of '@' at the end
            of the window.
Solution:   Add "lastline" to 'fillchars'. (Martin Tournoij, closes #11264,
            closes #10963)
2022-10-04 14:36:29 +01:00
Yee Cheng Chin
2499e5333a Merge remote-tracking branch 'vim/master' 2022-10-03 18:11:55 -07:00
Bram Moolenaar
f269eabc6c Update runtime files 2022-10-03 18:04:35 +01:00
Luuk van Baal
13ece2ae1d patch 9.0.0647: the 'splitscroll' option is not a good name
Problem:    The 'splitscroll' option is not a good name.
Solution:   Rename 'splitscroll' to 'splitkeep' and make it a string option,
            also supporting "topline". (Luuk van Baal, closes #11258)
2022-10-03 15:28:08 +01:00
Bram Moolenaar
f6196f4244 patch 9.0.0640: cannot scroll by screen line if a line wraps
Problem:    Cannot scroll by screen line if a line wraps.
Solution:   Add the 'smoothscroll' option.  Only works for CTRL-E and CTRL-Y
            so far.
2022-10-02 21:29:55 +01:00
Bram Moolenaar
a4e0b9785e patch 9.0.0634: evaluating "expr" options has more overhead than needed
Problem:    Evaluating "expr" options has more overhead than needed.
Solution:   Use call_simple_func() for 'foldtext', 'includeexpr', 'printexpr',
            "expr" of 'spellsuggest', 'diffexpr', 'patchexpr', 'balloonexpr',
            'formatexpr', 'indentexpr' and 'charconvert'.
2022-10-01 19:43:52 +01:00
Bram Moolenaar
87b4e5c5db patch 9.0.0632: calling a function from an "expr" option has overhead
Problem:    Calling a function from an "expr" option has too much overhead.
Solution:   Add call_simple_func() and use it for 'foldexpr'
2022-10-01 15:32:46 +01:00
Bram Moolenaar
9f573a8df0 patch 9.0.0622: matchaddpos() can get slow when adding many matches
Problem:    matchaddpos() can get slow when adding many matches.
Solution:   Update the next available match ID when manually picking an ID and
            remove check if the available ID can be used. (idea by Rick Howe)
2022-09-29 13:50:08 +01:00
Bram Moolenaar
50faf02f43 patch 9.0.0620: matchaddpos() can only add up to 8 matches
Problem:    matchaddpos() can only add up to 8 matches.
Solution:   Allocate the array of positions. (closes #11248)
2022-09-29 12:50:17 +01:00
Yee Cheng Chin
8cd33f3c43 Merge remote-tracking branch 'vim/master' 2022-09-28 16:54:05 -07:00
Bram Moolenaar
9fbdbb814f Update runtime files 2022-09-27 17:30:34 +01:00
Bram Moolenaar
4cbdcbda2d patch 9.0.0524: build instructions for MS-Windows are outdated
Problem:    Build instructions for MS-Windows are outdated.
Solution:   Remove instructions for old MSVC versions.
2022-09-20 21:23:12 +01:00
Bram Moolenaar
9712ff1288 Update runtime files 2022-09-18 13:04:22 +01:00
K.Takata
27b53be3a6 patch 9.0.0496: no good reason to keep supporting Windows-XP
Problem:    No good reason to keep supporting Windows-XP.
Solution:   Drop Windows-XP support. (Ken Takata, closes #11089)
2022-09-18 12:25:49 +01:00
Bram Moolenaar
73e28dcc61 patch 9.0.0491: no good reason to build without the float feature
Problem:    No good reason to build without the float feature.
Solution:   Remove configure check for float and "#ifdef FEAT_FLOAT".
2022-09-17 21:08:33 +01:00
Yee Cheng Chin
45b74e359d Merge remote-tracking branch 'vim/master' 2022-09-16 18:15:08 -07:00
Bram Moolenaar
aa5341477c patch 9.0.0473: fullcommand() only works for the current script version
Problem:    fullcommand() only works for the current script version.
Solution:   Add an optional argument for the script version.
2022-09-15 21:46:02 +01:00
Yee Cheng Chin
c3c27f93ee Merge remote-tracking branch 'vim/master' 2022-09-13 21:11:40 -07:00
Bram Moolenaar
7b2d87220c Add missing part of patch 2022-09-12 15:16:29 +01:00
zeertzjq
cdc839353f patch 9.0.0449: there is no easy way to translate a key code into a string
Problem:    There is no easy way to translate a string with a key code into a
            readable string.
Solution:   Add the keytrans() function. (closes #11114)
2022-09-12 13:38:41 +01:00
Yee Cheng Chin
73f260832e Merge remote-tracking branch 'vim/master' 2022-09-12 01:01:41 -07:00
Yee Cheng Chin
7b81cc3922 Allow pinning the cmdline to be aligned to the bottom of window
Add a setting that could pin the command-line portion of Vim to the
bottom of the MacVim window. This is useful when smooth resizing is set,
guioption+=k, or in full screen. In those situations, the MacVim window
size is usually not direct multiples of the Vim text sizes. Previously
the command-line would be drawn like other texts, and hence not aligned
to the bottom and hence looking aesthetically a little off.

When this setting is set, the command-line portion would be aligned to
the bottom of the window. This essentially moves the gap (due to the
extra height of the window) from the bottom to be between cmdline and
the rest of Vim. When cmdheight is changed, or other situations (e.g.
typing too much cmdline height to be increased), the gap will be
adjusted as well.

Implementation-wise, this was done by passing the `commandline_row` var
from Vim to MacVim, which serves as a good estimate of where the
command-line is. This works better than just using the `cmdheight`
option as it is closer to the current state of the cmdline. One issue is
that in hit-enter prompts, the row is set to the 2nd to last row to
anticipate more messages, and we just add a big hack by incrementing the
row by 1 in hit-enter state so only the "Press Enter..." part is aligned
to bottom. We also have to do something similar to when it's showing
"--more--" for similar reasons.

- An alternative would have been to modify Vim to provide us the
  information we want (the number of rows below the status line) but
  it's pretty tricky to do as cmdline_row is used in lots of places.
  It's easier / simpler to do a simple hack like this to localize the
  damage.

Close #833
2022-09-11 17:27:28 -07:00
Luuk van Baal
29ab524358 patch 9.0.0445: when opening/closing window text moves up/down
Problem:    When opening/closing window text moves up/down.
Solution:   Add the 'splitscroll' option.  When off text will keep its
            position as much as possible.
2022-09-11 16:59:53 +01:00
Yee Cheng Chin
aa1c720306 Allows smooth resizing of MacVim's window
Adds a setting that allows for smoothly resizing the window. Previously,
MacVim would only allow resizing in fixed increment of the grid size and
snap to such sizes. This was a little more consistent with how terminals
tend to work, and allows for optimal window sizing, and it was also an
artifact of the old MacVim renderer where it didn't have a stateful
renderer that could repaint the text view.

The snapping could be jarring for users more used to modern text editors
which allow for smoothly resizing of the window though, and it makes
third party tools that could snap macOS windows to the side not work
properly as there's usually a gap near the bottom. With guioption-k,
MacVim already allows for decoupling the window size from the Vim's grid
size anyway, so adding smooth resizing allows to work much better under
those assumptions.

In addition to allowing smooth resizing, this change also makes it so
that the CoreText renderer will fill to the right a little bit when
rendering the rightmost column when MacVim's window size isn't exactly
the Vim grid size. Previously, if a color scheme has NonText color (e.g.
desert), or the user has 'cursorline' set, smooth resize (or in full
screen or guioption-k) would leave a gap to the right, looking a little
ugly. This allows the last column's to fully fill to the right,
resulting in a much more consistent look when resizing the window.

Close #948
2022-09-10 21:52:04 -07:00
Bram Moolenaar
04e0ed1ddf patch 9.0.0438: cannot put virtual text above a line
Problem:    Cannot put virtual text above a line.
Solution:   Add the "above" value for "text_align".
2022-09-10 20:00:56 +01:00
Bram Moolenaar
71b6d33976 Update runtime files 2022-09-10 13:13:14 +01:00
Bakudankun
375141e1f8 patch 9.0.0430: cannot use repeat() with a blob
Problem:    Cannot use repeat() with a blob.
Solution:   Implement blob repeat. (closes #11090)
2022-09-09 18:46:47 +01:00
ichizok
d3ced677ae Merge remote-tracking branch 'vim/master' 2022-09-08 12:41:30 +09:00
Bram Moolenaar
6f14da15ac patch 9.0.0411: only created files can be cleaned up with one call
Problem:    Only created files can be cleaned up with one call.
Solution:   Add flags to mkdir() to delete with a deferred function.
            Expand the writefile() name to a full path to handle changing
            directory.
2022-09-07 21:30:44 +01:00
ichizok
223b2d8e75 Merge remote-tracking branch 'vim/master' 2022-09-05 12:45:08 +09:00
Bram Moolenaar
0daafaa7d9 Update runtime files 2022-09-04 17:45:43 +01:00