Commit Graph

27518 Commits

Author SHA1 Message Date
Yee Cheng Chin
8d7e6a26f1 MacVim Release 176
Updated to Vim 9.0.1276

Features
====================

Dictionary lookup
--------------------

You can now use Force Touch or Cmd-Ctrl-D to look up definitions of word
under the cursor (or selected text in visual mode). This will also
preview URLs, and support data types such as phone numbers and
addresses. #1312 #1313

This feature can also be invoked programmatically from VimScript (see
`:h macvim-lookup`). #1315

Tool bar / Touch Bar / menu icons
--------------------

You can now use SF Symbols for Tool bar and Touch Bar icons, including
using different symbol styles such as "palette" or "multicolor". Menu
items can now also use the `icon=` syntax to specify icons as well. See
`:help macvim-toolbar-icon` for details. #1329

The default tool bar also has updated icons to look similar to SF
Symbols used by newer macOS versions. #1214 by @sfsam

Window management actions
--------------------

There are new `macaction`'s for managing the MacVim window. The new
`zoomLeft`/`zoomRight` actions allow you to pin the window to the
left/right of the screen, and there are also new actions for interacting
with Stage Manager (requires macOS 13+). See `:h macvim-actions` for
details. #1330

Pre-release updates / Sparkle 2
--------------------

MacVim now supports pre-release software builds. It's sometimes hard for
us to release frequent updates due to the desire to pick a stable
upstream Vim version, needing to test the release on multiple OS
versions, making sure there aren't half-complete or buggy features, and
other reasons.

This new feature now allows us to push pre-release beta builds out in a
more frequent fashion, which could be useful if there are particular
features or fixes that you would like to try out before the next
official release. Pre-release builds will be released depending on bug
fixes and features instead of a fixed cadence. Do note that these
pre-release builds may not be as well-validated and may have half-baked
features.

If you are using the built-in auto-updater to update MacVim, you can
turn this on by going to Advanced settings pane, and enable "Enable
pre-release software updates".

This feature is only available for macOS 10.13 or above.

The auto-updater has also been updated from Sparkle 1.27.1 to 2.3.0 for
10.13+ builds. Legacy (10.9-10.12) builds are still using Sparkle 1.

See #1332.

New Vim features
--------------------

New `smoothscroll` option allows you to scroll through a long wrapped
line (using Ctrl-E or mouse wheel) without immediately jumping to the
next line. (v9.0.0640)

`splitscroll` option has been renamed `splitkeep`, with more flexibility
than before. (v9.0.0647)

Sound playback on macOS is now supported. You can use `has('sound')` to
check. See `help sound` for details. (v9.0.0694)

Terminals now support `:confirm` for `:q`, etc, which also means
MacVim's Cmd-W will work properly for terminal windows. (v9.0.0710)

Virtual text had numerous bugs fixed.

General
====================

Legacy build for 10.9 - 10.12
--------------------

Per a previous announcement (#1271), the default MacVim binary will now
require macOS 10.13 or above. Users of macOS 10.9 - 10.12 can use a
separate "legacy" build which will still be supported. The legacy binary
will still have the latest versions of Vim and be supported, but may not
have all the latest features (e.g. pre-release builds).

If you are using the auto-updater (Sparkle) to update MacVim, it should
"just work" and find the best version for you. If you are downloading
MacVim from the website, there is also a link to download the legacy
version marked for 10.9+ as well. If you download the normal binary
marked for 10.13+ from the website, it won't work on these older macOS
versions.

See #1331.

Fixes
====================

CoreText Renderer clipping and rendering bugs
--------------------

Unicode characters with multiple composing characters (e.g. "x⃗") will
now render correctly. #1172

Texts (e.g. Tibetan, Zalgo texts) that are taller than the line height
will no longer be clipped inappropriately. You can use a new setting
`MMRendererClipToRow` to re-enable clipping if the tall texts are
distracting. #995 / #1356

Tab crash
--------------------

Fixed a crash when opening new tabs that seems to only occur in macOS 13
Ventura. #1333

Other bugs
--------------------

- 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. Note
  that the previous release also claimed it fixed this, but because the
  binary was built against an old macOS SDK (Big Sur), the fix did not
  work in the binary release. #1261
- Allow "Open untitled window: never" and "After last window closes:
  Quit MacVim" to be set together again. Added safeguards to make sure
  doing so won't immediately close the app. #1338
- Edit.Cut / Copy menu items will now be properly disabled when there
  isn't selected text. #1308
- Fixed potential `:emenu` crash when the menu is associated with an
  action in a non-valid mode. #1305
- Fixed bug where just bringing up the right-click (or the
  MacVim→Services) menu would somehow copy the selected texts to the
  system clipboard. #1300
- Fixed a Japanese input method bug where using left/right arrow to move
  to a different section of the input text would previously result in
  the candidate list not showing up at the correct position. #1312
- Fix non-CoreText renderer not handling text styles like strikethrough
  correctly (note: this renderer has been deprecated for a while and you
  should not use it). #1296
- This release uses an older sh/bash syntax file because the latest one
  in Vim has a bug. #1358

Misc
====================

New settings:

- "No drop shadows" (Appearance). #1301
- "Treat Ctrl-click as right-click" (Input) (#1326). This was previously
  configurable via command-line, but now also possible in the settings
  pane under the new "Input" category.

"About MacVim" now reports the version number in a clearer way with
clearly specified release number vs Vim version.

Known Issues
====================

Printing
--------------------

Printing using File→Print or `:hardcopy` is currently not working under
macOS 13 Ventura due to its removal of PostScript support in the Preview
app. This will be fixed in a later release. See the issue for
workarounds. #1347

Scripting
====================

- Scripting languages versions:
    - Perl is now built against 5.30, up from 5.18.
    - Ruby is now built against 3.2, up from 3.1.

Compatibility
====================

Requires macOS 10.9 or above. (10.9 - 10.12 requires downloading a
separate legacy build)

Script interfaces have compatibility with these versions:

- Lua 5.4
- Perl 5.30
- Python2 2.7
- Python3 3.10
- Ruby 3.2
release-176
2023-02-07 03:35:56 -08:00
Yee Cheng Chin
76b9df28ea Merge pull request #1361 from ychin/fix-tab-remaining-tracking-tag-crash
Fix remaining tab crash from not clearing tracking tags correctly
2023-02-07 02:34:28 -08:00
Yee Cheng Chin
3906462fcf Fix remaining tab crash from not clearing tracking tags correctly
Similar to #1334. The old PSMTabBarControl code has a lot of dubious
straggling states regarding the tracking tags. Seems like previous macOS
versions tolerated that but in the newer macOS versions, the tags seem
to be reused for other purposes and so when you double-remove the tags,
you get into trouble.

Related to #1333
2023-02-07 02:30:42 -08:00
Yee Cheng Chin
b2dacc5416 Merge pull request #1360 from ychin/sparkle-release-notes-javascript
Allow Sparkle release notes to use JavaScript so videos work
2023-02-06 22:56:51 -08:00
Yee Cheng Chin
d3ec355512 Merge pull request #1359 from ychin/fix-macvim-sign-scripts-sparkle-1
Fix MacVim code signing script to work with Sparkle 1
2023-02-06 22:56:27 -08:00
Yee Cheng Chin
905db20e17 Allow Sparkle release notes to use JavaScript so videos work
Currently, it's hard to embed video in the release notes shown to
Sparkle, because by default it disables JavaScript, which video tags
need in order to work properly for the WebKit embedded browser. Turn it
on, so that we can show video instead of animated GIF's in the future
for release notes.

I don't think there should be any serious security issues after thinking
about it. The browser is sandboxed and we are serving this through https
anyway.
2023-02-06 22:53:35 -08:00
Yee Cheng Chin
a3042b8e97 Fix MacVim code signing script to work with Sparkle 1
We previously removed the --deep flag from signing, which missed one of
the executable within Sparkle 1 that we need to sign expicitly (Sparkle
1 is still used for legacy builds).
2023-02-06 22:51:19 -08:00
Yee Cheng Chin
2e74830e8a Merge pull request #1358 from ychin/downgrade-sh-syntax-204
Downgrade sh.vim syntax from version 205 to 204
2023-02-06 05:54:39 -08:00
Yee Cheng Chin
be09129614 Downgrade sh.vim syntax from version 205 to 204
The latest Vim runtime update upgraded sh.vim from version 204 to 205,
which contains a bug (https://github.com/vim/vim/issues/11937). Since we
are releasing MacVim soon, simply revert this change to have a stable
build and we will revert this when Vim has fixed this upstream.
2023-02-06 05:51:18 -08:00
Yee Cheng Chin
19d0419569 Merge remote-tracking branch 'vim/master' 2023-02-04 02:27:59 -08:00
Bram Moolenaar
4be18e77ff patch 9.0.1276: some mappings with Meta and Shift do not work
Problem:    Some mappings with Meta and Shift do not work.
Solution:   Apply the Shift modifier to the key. (issue #11913)
2023-02-03 12:28:07 +00:00
Yee Cheng Chin
aa485a215c Merge pull request #1357 from ychin/store-last-used-version-macvim-better-about-version
Report better version in About MacVim, and store last used version
2023-02-02 19:07:43 -08:00
Yee Cheng Chin
02092cfe96 Report better version in About MacVim, and store last used version
Use a better format for the version reporting in the "About MacVim" page
to be clear what's the Vim version, and what's specifically the MacVim
release number.

Also, store the last used MacVim version number. This isn't used right
now but may be used later for showing up a "What's New" page when
updating to a new version, primarily for non-Sparkle users (e.g.
Homebrew builds) so they can still be notified when something changed.
Storing this number now allows us to know in a later build whether the
user has upgraded to the build or starting a new build from fresh (where
we may not want to show the "What's New" page as everything would be
new).

Part of addressing #1293
2023-02-02 17:06:56 -08:00
Yegappan Lakshmanan
78012f55fa patch 9.0.1275: the code for setting options is too complicated
Problem:    The code for setting options is too complicated.
Solution:   Refactor the do_set() function. (Yegappan Lakshmanan, Lewis
            Russell, closes #11932)
2023-02-02 16:34:11 +00:00
Bram Moolenaar
be4e01637e Update runtime files. 2023-02-02 13:59:48 +00:00
Amaan Qureshi
685bf83b73 patch 9.0.1274: FIRRTL files are not recognized
Problem:    FIRRTL files are not recognized.
Solution:   Add a pattern for FIRRTL files. (Amaan Qureshi, closes #11931)
2023-02-02 13:30:13 +00:00
Bram Moolenaar
8f531662e2 patch 9.0.1273: "1v" may select block with wrong size
Problem:    "1v" may select block with wrong size. (Evgeni Chasnovski)
Solution:   Compute "curswant" in the right line. (closes #11925)
2023-02-01 17:33:18 +00:00
zeertzjq
e8d4ae0d11 patch 9.0.1272: typo in pattern for filetype detection
Problem:    Typo in pattern for filetype detection.
Solution:   Fix the typo. (closes #11924)
2023-02-01 15:31:23 +00:00
zeertzjq
1b438a8228 patch 9.0.1271: using sizeof() and subtract array size is tricky
Problem:    Using sizeof() and subtract array size is tricky.
Solution:   Use offsetof() instead. (closes #11926)
2023-02-01 13:11:15 +00:00
zeertzjq
a7d36b7320 patch 9.0.1270: crash when using search stat in narrow screen
Problem:    Crash when using search stat in narrow screen.
Solution:   Check length of message. (closes #11921)
2023-01-31 21:13:38 +00:00
Bram Moolenaar
b40c1de384 patch 9.0.1269: channel test often fails on Mac OS
Problem:    Channel test often fails on Mac OS.
Solution:   Increase the wait time from one to 15 milliseconds. (D. Ben
            Knoble, closes #11894)
2023-01-31 21:01:08 +00:00
Mark Skelton
9c51798a1f patch 9.0.1268: .clangd and .stylelintrc files don't get a filetype
Problem:    .clangd and .stylelintrc files don't get a filetype.
Solution:   Use yaml for .clangd and json for .stylelintrc files. (Mark
            Skelton, closes #11916)
2023-01-31 18:57:17 +00:00
Yegappan Lakshmanan
d6e4c75af2 patch 9.0.1267: the did_set_string_option function is too long
Problem:    The did_set_string_option function is too long.
Solution:   Further cleanup of handling string options.  (Yegappan Lakshmanan,
            Lewis Russell, closes #11920)
2023-01-31 13:25:58 +00:00
Bram Moolenaar
ce93d162da patch 9.0.1266: error for space before ": type" is inconsistent
Problem:    Error for space before ": type" is inconsistent.
Solution:   Give E1059 in more places. (closes #11868)
2023-01-30 21:12:34 +00:00
Bram Moolenaar
b8bebd0cd7 patch 9.0.1265: using an interface method may give a compilation error
Problem:    Using an interface method may give a compilation error.
Solution:   Do not try to compile the body of a method of an interface.
            (closes #11885)
2023-01-30 20:24:23 +00:00
Bram Moolenaar
eb45ad25ab patch 9.0.1264: Motif: compiler warning for unused argument
Problem:    Motif: compiler warning for unused argument.
Solution:   Add "UNUSED".
2023-01-30 19:26:24 +00:00
Amaan Qureshi
907349a743 patch 9.0.1263: KDL files are not recognized
Problem:    KDL files are not recognized.
Solution:   Add a pattern for KDL files. (Amaan Qureshi, closes #11898)
2023-01-30 15:19:57 +00:00
Yegappan Lakshmanan
f2e30d0c44 patch 9.0.1262: the did_set_string_option function is too long
Problem:    The did_set_string_option function is too long.
Solution:   Split off functionality to individual functions.  (Yegappan
            Lakshmanan, Lewis Russell, closes #11904)
2023-01-30 13:04:42 +00:00
Yee Cheng Chin
17f3c3ddf4 Merge pull request #1356 from ychin/coretext-rendering-fixes-composing-chars-clipping
Fix misc CoreText rendering bugs and issues with clipping and composing characters
2023-01-29 17:27:56 -08:00
Yee Cheng Chin
d1c8e612fe Fix CoreText clipping issues with tall texts
This fixes the issue where particularly tall characters will get clipped
at the row boundary. This happens because even though a font describes
the line height with font metrics, individual glyphs do not have to
respect them, and we can see with emoji rendering sometimes they can
poke upwards past the line height. Also, it's trivially easy to
construct composing characters that become really tall, e.g. "x゙̂⃗", or
Tibetan scripts like "ཧཱུྃ".

To fix this, we do the following:

1. Remove the explicit clipping call at rendering.

2. Fix partial redraw to not lead to clipping / corruption. This is
   quite tricky, because let's say we have a character that is tall
   enough to touch other lines, if those lines are redraw but not the
   line with the tall char, the redraw will paint over the parts of the
   glyphs poking through. Alternatively if we redraw the line with the
   tall chars we also need to expand the redraw region to make sure
   other lines get repainted as well. To fix this properly, we should do
   a proper glyph calculation when we receive the draw command before we
   issue before we call `setNeedsDisplayInRect`, but since right now we
   only extract glyph info later (during drawRect call), it's too late.
   We just do the hacky solution by storing a variable
   `redrawExpandRows` that tracks how many lines to expand for all
   lines. It's a little hacky since this will affect all lines
   permanently regardless if they have tall characters or not. The
   proper fix may come later as an optimization (or when we do hardware
   rendering via Metal).

3. Re-order the rendering so we have a two pass system, where we first
   draw the background fill color for all rows, then the text. This
   helps prevent things like Vim's window split or cursorline from
   obscuring the text.

4. Add a preference to turn on clipping (old behavior). This helps
   prevent odd issues with really tall texts (e.g. Zalgo text) making it
   hard to see what's going on. The preference `MMRendererClipToRow` is
   not exposed in UI for now as it's a relatively niche. It will be
   exposed later when we have a dedicated render tab in settings.

Note that a lot of these characters only show their full height by doing
`set maxcombine=8` because the default (2) is quite low.

Part of the fix for #995
2023-01-29 16:10:16 -08:00
Yee Cheng Chin
fe2305ddf5 Fix composing characters renderered at an offset
MacVim previously didn't really render composing characters with
multiple glyphs correctly. For simple ones like 'â' it would work fine
because Core Text just generates one glyph for it, but for more
complicated ones like 'x⃗' the renderer didn't properly query the advance
of the glyphs to put them at the correct position. Refactor the logic to
keep track of the current cell/glyphs and make sure to track the
advances fo the glyphs so the composing chars' glyphs would be laid out
properly on top of the cell.

We need to be careful with the tracking, because in Vim we force the
text rendering to be monospaced, and so we maintain the tracking within
a single grapheme (which can consist of multiple glyphs), but when we
move to the next grapheme we reset the position so we can get proper
monospaced rendering even for non-monospaced texts like CJK or stylized
texts.

Fix #995
Fix #1172
2023-01-29 16:10:16 -08:00
Yee Cheng Chin
49e7a1da76 Remove the ceil() call around fontDescent in Core Text renderer
I have looked and I do not believe there is a good reason to do this
rounding up at all. I believe the motivation is to align the baseline
with the pixel boundary, but I don't believe that is necessary, given
that Core Text will properly perform the correct antialiasing for us.
Most texts aren't directly aligned at the baseline anyway. Before, that
ceil() option is a reason why sometimes fonts would feel pushed upwards,
clipping emojis to the top, and creating a lopsided effect for fonts
like Fira Code (h11), since we draw the boxes aligned to the line
height at the bottom of the descender, meaning the ceil() has an effect
of pushing the text up.
2023-01-29 16:10:16 -08:00
Yee Cheng Chin
e05f23b3b9 Rename the "preserve line spacing" setting to "use macOS calculation"
The setting was added to "preserve" the font's original line spacing
intents, but after further investigation I cannot find why Apple's
calculation for font line spacing to be so wide. Furthermore it's quite
odd because the default line spacing is wide, but the only thing that
setting does is by re-initializing the font under Core Text (instead of
using NSFont like the default) using CTFont and somehow the issue is
fixed. Inspecting font metrics (using ttx) also didn't seem to give any
hints why the spacing are so wide (e.g. ascent / descent / line gap etc
all look fine). A StackOverflow comment seems to suggest that Apple is
simply adding a 1.2x scale to some fonts
(https://stackoverflow.com/questions/5511830/how-does-line-spacing-work-in-core-text-and-why-is-it-different-from-nslayoutm)
which seems to match the observation. My guess is that Apple looks at
some fonts and think they are too aggressive in their font metrics
design and "helpfully" introduces a 1.2x multiplier to space them out,
where Core Text is lower level than AppKit and therefore does not have
this auto-inflation.

By renaming the option it should make it clearer that this is a somewhat
arbitrary distinction instead of it being an inherent property of the
font.
2023-01-29 16:10:16 -08:00
Yee Cheng Chin
233e188cf8 Fix MacVim-specific C files to pass coding style test 2023-01-29 16:09:48 -08:00
Yee Cheng Chin
325e09dfcf Merge remote-tracking branch 'vim/master' 2023-01-29 15:07:18 -08:00
Amaan Qureshi
2a99fe6c41 patch 9.0.1261: Elsa files are not recognized
Problem:    Elsa files are not recognized.
Solution:   Add a pattern for Elsa files. (Amaan Qureshi, closes #11908)
2023-01-29 17:50:14 +00:00
Bram Moolenaar
836137d89a patch 9.0.1260: Coverity warns for possible NULL pointer usage
Problem:    Coverity warns for possible NULL pointer usage.
Solution:   Change the condition.
2023-01-29 14:11:24 +00:00
Bram Moolenaar
492324e588 patch 9.0.1259: diffmode test fails
Problem:    Diffmode test fails.
Solution:   Adjust expected result for adjusted indenting.
2023-01-28 20:57:59 +00:00
Bram Moolenaar
755bf2b3d2 patch 9.0.1258: code style test fails
Problem:    Code style test fails.
Solution:   Adjust test files.
2023-01-28 19:38:49 +00:00
Bram Moolenaar
94722c5107 patch 9.0.1257: code style is not check in test scripts
Problem:    Code style is not check in test scripts.
Solution:   Add basic code style check for test files.
2023-01-28 19:19:03 +00:00
ObserverOfTime
04e4f1d985 patch 9.0.1256: NetworkManager connection files are not recognized
Problem:    NetworkManager connection files are not recognized.
Solution:   Add a pattern for NetworkManager connection files. (closes #11893)
2023-01-28 18:05:40 +00:00
Bram Moolenaar
8fe5b9c8c1 patch 9.0.1255: changing 'virtualedit' does not have immediate effect
Problem:    Changing 'virtualedit' does not have immediate effect.
Solution:   Correct how is checked for a changed value. (closes #11878)
2023-01-28 16:37:37 +00:00
Bram Moolenaar
d0200c8631 patch 9.0.1254: calling a method on an interface does not work
Problem:    Calling a method on an interface does not work.
Solution:   At runtime figure out what method to call. (closes #11901)
2023-01-28 15:19:40 +00:00
Philip H
192e24d974 patch 9.0.1253: CI adds repository unnecessarily
Problem:    CI adds repository unnecessarily.
Solution:   Remove the line from the workflow. (closes #11900)
2023-01-28 10:43:50 +00:00
Christopher Plewright
f75a2cb3c7 patch 9.0.1252: MS-Windows: scrollback cropped off on Vim exit
Problem:    MS-Windows: scrollback cropped off on Vim exit.
Solution:   Don't call SetConsoleScreenBufferInfoEx when using the alternate
            screen buffer. (Christopher Plewright, closes #11882)
2023-01-28 10:28:09 +00:00
Yegappan Lakshmanan
fadc02a2a5 patch 9.0.1251: checking returned value of ga_grow() is inconsistent
Problem:    Checking returned value of ga_grow() is inconsistent.
Solution:   Check for FAIL instaed of "not OK". (Yegappan Lakshmanan,
            closes #11897)
2023-01-27 21:03:12 +00:00
Bram Moolenaar
8dbab1d8ce patch 9.0.1250: cannot use an object method with :defer
Problem:    Cannot use an object method with :defer. (Ernie Rael)
Solution:   Find the object method and generate code to call it.
            (closes #11886)
2023-01-27 20:14:02 +00:00
Bram Moolenaar
657aea7fc4 patch 9.0.1249: cannot export an abstract class
Problem:    Cannot export an abstract class. (Ernie Rael)
Solution:   Add the EX_EXPORT flag to :abstract. (closes #11884)
2023-01-27 13:16:19 +00:00
Bram Moolenaar
53f54e49b7 patch 9.0.1248: cannot export an interface
Problem:    Cannot export an interface. (Ernie Rael)
Solution:   Add the EX_EXPORT flag to :interface. (closes #11884)
2023-01-26 20:36:56 +00:00
Bram Moolenaar
870219c58c patch 9.0.1247: divide by zero with 'smoothscroll' set and a narrow window
Problem:    Divide by zero with 'smoothscroll' set and a narrow window.
Solution:   Bail out when the window is too narrow.
2023-01-26 14:14:43 +00:00