Updated to Vim 9.0.472.
Announcements
====================
Sponsors
--------------------
MacVim now allows you to sponsor the team! Any amount would be
appreciated and it is of course optional. See the announcement (#1271)
for more details.
Supporting old versions of macOS (10.12 or below)
--------------------
Currently, macOS supports macOS 10.9 or above. However, this is getting
harder to do so as time goes on (e.g. the latest Xcode doesn't support
building for it). In the near future, MacVim will mostly target 10.13
(High Sierra) or above, with 10.9 - 10.12 as legacy support. Visit this
discussion (#1288) if you would be affected and would like to know more.
Features
====================
Resizing MacVim new options
--------------------
You can now smoothly drag and resize MacVim without having it
constrained to fixed multiples of the text size, by setting the
"Smoothly resizes window" under General preference pane. This also
allows MacVim to behave better when used with third-party tools (e.g.
BetterSnapTool) to snap it to one side of the screen. #1276
The command line can now be pinned to the bottom of the window with a
setting (under Appearance preference pane). This makes it look better
aligned when using smooth resizing, or in other situations where the
window size is not a direct multiples of Vim's text size (e.g. full
screen or guioption+=k). #1280
New supported text styles
--------------------
Vim highlight groups `strikethrough`, `underdouble`, `underdotted`,
`underdashed` are now supported. #1287
New Vim features
--------------------
Virtual text allows you to place custom texts to be displayed inline for
diagnostic information and more (e.g. build errors, CSS color preview).
See `:help virtual-text` for more information.
The default color schemes (e.g. desert) are now fixed to look correct
again.
Misc options and commands:
- `set nosplitscroll` lets you preserve the windows' scroll positions
when splitting. (v9.0.0445)
- `:defer` allows you to clean up in a function. (v9.0.0370)
- `:echowindow` allows you to echo a message to a floating popup message
window instead of to the command line. (v9.0.0321)
Fixes
====================
- Fixed non-native full screen not working well with the notch on newer
MacBook's when set to not show menu bar. You can also use
`MMNonNativeFullScreenSafeAreaBehavior` to force MacVim to use the
notch area as well if you don't mind some content being obscured. #1261
- Fixed bad interaction when two settings ("Open untitled window: never"
and "After last window closes: Quit MacVim") are set together. #1257
- Fixed the bundled Vim tutor not working when launching from the Help
menu #1265.
- Fix crashing on launch under macOS 10.9. #1212
- Fixed potential crash when switching appearance mode in MacVim
preferences. #1270
- Korean localized menus no longer throw a syntax error on launch. #1278
- `did_install_default_menus` should work in MacVim now. #1267
General
====================
Sparkle (updater for MacVim) is now updated to 1.27.1 (#1284), and we no
longer use DSA keys for signing updates (#1285) as we are using EdDSA
already.
Scripting
====================
- Scripting languages versions:
- Python is now built against 3.10, up from 3.9.
Compatibility
====================
Requires macOS 10.9 or above.
Script interfaces have compatibility with these versions:
- Lua 5.4
- Perl 5.18
- Python2 2.7
- Python3 3.10
- Ruby 3.1
Problem: In a :def function all closures in a loop get the same variables.
Solution: When in a loop and a closure refers to a variable declared in the
loop, prepare for making a copy of variables for each closure.
Problem: Cursor moves if cmdwin is closed when 'splitscroll' is off.
Solution: Skip win_fix_cursor if called when cmdwin is open or closing.
(Luuk van Baal, closes#11134)
Add support for all the missing text styles for MacVim for Vim parity.
For strikethrough, this needed to be done as a second pass to make sure
they get drawn on top of the text. This is necessary because currently
the logic buffers texts up before dispatching them later in a line, so
it's just easier to loop through the line a second time if we detected
strikethrough. For the strikethrough position, we simply use the half of
xheight which seems to work best in looking good.
For underdouble, the logic is a little tricky because sometimes we don't
have space below the line. When that's the case, simply draw the second
line on top of the first line.
For underdotted, need to do something smart to space out the dots. When
the width is divisible by 2, they get spaced out evenly. If they are
not, try to make it work if divisible by 3. If that's not the case, we
just readjust the size of dot/gap a little bit to make it fit, even
though now we have non-integer sizes (from experimentation, the
antialising works well enough that it's not too jarring).
Also fix rendering of undercurl to work for double-width characters as
well.
Note that underdouble/underdotted/underdashed are not supported in
regular gVim yet, and so I had to add the ifdef for those in gui.c.
These may cause merge conflicts later which should be easily resolved.
Known issue 1: Note that currently underline is not respecting the
font's underline thickness and position. We always use a thickness of 1
pt, and hard-code a 0.4*descent position, which are not great. Thickness
in particular should scale with the font size. They should be fixed in a
future commit.
Known issue 2: There are some current clipping bugs in the renderer.
This is because the line height returned by NSLayoutManager is sometimes
smaller than ascent+descent+leading, *and* MMCoreTextView for some
reason takes the `ceil(descent)` (presumably to make the rendering
grid-aligned). This should be fixed later.
Fix#1034
Problem: Cursor moves when cmdwin is closed when 'splitscroll' is off.
Solution: Temporarily set 'splitscroll' when jumping back to the original
window. (closes#11128)
We previously added a step to rebuild the Vim help tags when publishing
so that we could get the latest tags when generating a MacVim release
(sometimes Vim's runtime is lagging behind and doesn't have that done).
However, the step was so placed so far back (after building/testing)
that it doesn't actually do anything, as MacVim was already built. Move
it earlier so we build MacVim after vimtags are re-generated. As part of
doing this we also need to split building Vim itself earlier as vimtags
generation requires having a Vim binary.
So the updated steps are 1. Vim, 2. help tags, 3. MacVim, 4. Tests.
Previously they were 1. Vim/MacVim, 2. Tests, 3. help tags.
Problem: Visual highlighting extends into virtual text prop.
Solution: Do not highlight what isn't actually selected. Fix ordering of
stored text props.
Sparkle has deprecated signing updates with DSA for a long time. MacVim
has also added an EdDSA key for a while now. This means we can remove
the DSA key and still be pretty safe and certain that vast majority of
MacVim users can still update from old versions of MacVim to the new
one, using only the EdDSA key. This makes the update process easier and
we don't have to use legacy tools to sign each update with the
deprecated DSA key.
This is the last 1.x version. Upgrading to it to get all remaining fixes
before we need to decide whether whether we upgrade to 2.x (which has
much higher minimum macOS requirements).
CI build has been updated to build MacVim against Python 3.10, so we
want to update the other detection to use 3.10 as well. Also added a
comment to CI file to make sure we remember to update the vimrc file
when updating the version.
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
The recent change that added smooth resizing changed the alignment for
the General preference pane from bottom to top aligned as it never made
sense to be bottom aligned. However, there was code in in the preference
controller to correct for that when resizing the pane when sparkle is
disabled, which caused the resizing to not work. Fix that to account for
the top alignment instead of bottom.
Fix#1281
Problem: Using :echowin while at the hit-enter prompt causes problems.
Solution: Do not prompt for :echowin. Postpone showing the message window.
Start the timer when the window is displayed.
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.