[patch] Modern UI upgrade for Vim NSIS installer

208 views
Skip to first unread message

Guopeng Wen

unread,
Jul 30, 2010, 4:21:18 AM7/30/10
to vim...@vim.org
I've upgraded the NSIS installer script to use Modern UI 2.0. You
can check here for screenshots of that UI:
http://nsis.sourceforge.net/Docs/Modern%20UI%202/Readme.html
It's basically what the "state of the art" Windows installer
generally look like.

I've added quite some UI sugar, as well as multiple language support
to the installer (disabled by default). You can find detailed
changelog below. The change is extensive but the functionality is
still the same (exactly the same files will be installed/removed).
I've tested it on Windows XP. No more irritating pop up dialogs.
And should I say, the new UI looks sleeker.

Modification are limited to the "nsis/" directory. For future
enhancement, "dosinst.c" might be changed (see below). Nothing else
has been touched.

Three new files are added under "nsis/" for multiple language
support:
lang-english.nsi
lang-simpchinese.nsi
lang-tradchinese.nsi
Only the first one is necessary unless you enabled multiple language
support (see below).

The patch is created against mercurial changeset aaa953373c91.
Please be aware the patch contains characters coded in cp936 and
big5, so I send it as an attachment. Let's hope it gets through
correctly.

If you build your own Windows installer, please test. You feedback
are greatly appreciated.

Here's the detail changelog:

- Upgraded to Modern UI (MUI) 2.0. Now NSIS 2.34 is the minimum
requirement.

- Eliminated all pop-up message boxes used to ask for user input.

* The functionality of confirmation popup in the installer is
replaced with the "Welcome" page of the MUI.
* The "Should I show README" popup is replaced with the "Show
README" checkbox in the "Finish" page of the MUI.
* Various popups in the uninstaller asking user for removal choice
are now replaced with a component selection page, user can
tailor what to remove/keep with that page. User selection will
be checked to make sure the combination is valid.

- Detailed description for each component

MUI makes it possible to add detailed description for each
component to be installed/removed. If you hover the mouse pointer
over the component list, detailed description of those components
will be shown. Such description is also used to explain the
impact of component removal.

- All other popups (mainly for error reporting) will be suppressed
in silent install mode.

- Detect running instances of Vim before installer/uninstaller made
any real change. Vim console version is executed to enum active
servers (--serverlist) for this purpose.

- Suppress the (ugly) DOS command windows in installer/uninstaller.

"install.exe" and "uninstall.exe" are now executed using
"nsExec::ExecToLog", no DOS command window will be opened. The
output will be captured and sent to detail log.

Please note Vim installer will try to remove installed version of
Vim using "install.exe -uninstall-check", that DOS command window
has not been suppressed as user may need to press a key.

Possible future enhancement:
* install.exe/uninstall.exe now wait 2 seconds before exit to make
sure user see what's displayed. As the output has been captured
and shown in the detail window, we may eliminate this with a new
command line options.
* With "-install-check", install.exe will try to detect
uninstaller window and wait for it to finish. Window caption is
used for such detection, which is unreliable when multiple
language installer is in use (see below). We may switch to
monitor Vim registry key instead.

- Multiple language support (disabled by default)

Among all text editors I've checked, Vim offers the best native
language support. It's a pity that its installer does not support
that.

I've modified the script so that it's now possible to support
multiple languages, using installer of Inkscape as primary
reference. I've added support for 3 languages:
* lang-english.nsi : English language strings
* lang-simpchinese.nsi : Simplified Chinese language strings
* lang-tradchinese.nsi : Traditional Chinese language strings

Please note the quality of Traditional Chinese language strings
may not be good since I'm not an active user, parlance used there
could be terrible. Traditional Chinese users are welcomed to
review that file.

Multiple language support is controlled by the "HAVE_MULTI_LANG"
macro, it's not defined by default, in which case only
"language-english.nsi" will be used and the installer language is
English.

Once "HAVE_MULTI_LANG" defined, all language files will be used,
and the installer will ask user to choose language at the
beginning.

Possible future enhancement/caveats:
* We may use the language selected in the installer to control
menu language of Vim, by writing appropriate option (langmenu)
in the default vimrc.
* Need volunteers to add support for other languages. Currently
number of supported languages are very limited so it might not
be a good idea to enable multiple language support by default.
* Language files must be created in various legacy
ANSI codepages at present. UNICODE support has already been
merged to NSIS mainline, a new UNICODE capable version of NSIS
might be released soon. It might be better to enable full scale
multiple language support until then as it's a lot easier to
maintain language files in UTF-8.

- Verifies installation path before uninstallation

As the uninstaller could remove all files under the installation
path, this is necessary to guard against corrupted installation
path.

- Other code structure changes:
* Rewrite all logic control structures with LogicLib for better
readability.
* Add macro to make it easier to exclude VisVim. That DLL is not
easy to build.
* Use consistent indent in the script. Well, don't hate me for
changing indent :)

Regards!

--

Guopeng

nsis.patch

Bram Moolenaar

unread,
Jul 30, 2010, 3:48:39 PM7/30/10
to Guopeng Wen, vim...@vim.org

Guopeng Wen wrote:

This all sounds very good.

Do you perhaps have a few screenshots of the Vim installer?

Unfortunately it's too close to the 7.3 release to include now. And
there are still improvements to do. I hope we can include it later.

--
Eye have a spelling checker, it came with my PC;
It plainly marks four my revue mistakes I cannot sea.
I've run this poem threw it, I'm sure your please to no,
It's letter perfect in it's weigh, my checker tolled me sew!

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///

Guopeng Wen

unread,
Jul 31, 2010, 9:56:07 AM7/31/10
to Vimdev
On 07/31/2010 03:48 AM, Bram Moolenaar wrote:
> This all sounds very good.
>
> Do you perhaps have a few screenshots of the Vim installer?

I attached screenshots for English installer/uninstaller. Please
find detailed description below.

> Unfortunately it's too close to the 7.3 release to include now. And
> there are still improvements to do. I hope we can include it later.

Thanks for consideration and I'm all for your decision. I'll keep
the patch up to date, let me know when you think it's the right
time.

Here's description for those screenshots.

Installer has 7 to 8 pages (language.png, install.png):

- Language selection dialog (language.png)

This dialog will be shown only if multiple language support has
been enabled. It determines the language used in the following
pages.

User selected language (as Windows LCID) will be written to
Windows registry:
HKLM\SOFTWARE\Vim\Installer Language
Global variable $LANGUAGE will also be set to that LCID.

- Page 1 : Welcome page

This serves as the old installation confirmation dialog. Once
user press "next", the installer will check for running Vim
instance, and try to uninstall any existing Vim.

A black DOS window will flash by even if no Vim has installed.

- Page 2 : License Agreement

This page should be checked a little bit carefully. This is the
pristine license page of NSIS, which makes it pretty clear
what's been shown is a license agreement and user must agree to
it. Please let me know if you think that's not appropriate.

- Page 3 : Components

Detailed description of components will be shown here.

- Page 4 : Destination Path

The installer will check for running Vim instance again when
user press "install".

- Page 5 : Installation

There is a noticeable pause near the end when "install.exe"
being executed silently (2s delay in install.exe).

- Page 6 : Finish

User can determine whether README.txt should be shown or not on
this page.


Uninstaller has 4 pages (uninstall.png):

- Page 1: Confirmation.

- Page 2: Components

Combination of components will be checked to make sure it's
valid. Vim installation root is not allowed to be removed if
user choose to keep some components under it.

Uninstaller will check for running instances of Vim once user
press "Uninstall".

- Page 3: Uninstallation

Noticeable pause when "Unregistering Vim ...", as
"uninstall.exe" is been executed silently there.

- Page 4: Finish

If some components cannot be removed without reboot, the reboot
selections will be shown on this page. Otherwise, those
selections won't be shown. This is a nice feature of NSIS.

--

Guopeng

install.png
language.png
uninstall.png

Tony Mechelynck

unread,
Jul 31, 2010, 10:46:06 AM7/31/10
to vim...@googlegroups.com, Guopeng Wen

Hm, I'm not concerned (since I'm on Linux), but it seems to go in the
opposite direction to Steve Hall's "one-click" installer.

What about a first page with two radio buttons:

(*) Standard install
( ) Custom install

? The first option would install Vim with "typical" settings (and
sufficiently powerful to let the user customize it later via vimrc
etc.), bypassing all those menus of yours, which would appear if the
user selects "Custom install"?


Best regards,
Tony.
--
He wasn't much of an actor, he wasn't much of a Governor -- Hell, they
_HAD_ to make him President of the United States. It's the only job he's
qualified for!
-- Michael Cain

Guopeng Wen

unread,
Jul 31, 2010, 11:34:38 AM7/31/10
to Vimdev
On 07/31/2010 10:46 PM, Tony Mechelynck wrote:
> Hm, I'm not concerned (since I'm on Linux), but it seems to go in the
> opposite direction to Steve Hall's "one-click" installer.
>
> What about a first page with two radio buttons:
>
> (*) Standard install
> ( ) Custom install
>
> ? The first option would install Vim with "typical" settings (and
> sufficiently powerful to let the user customize it later via vimrc
> etc.), bypassing all those menus of yours, which would appear if the
> user selects "Custom install"?
>
>
> Best regards,
> Tony.

Hmmm, "one-click" is not powerful enough, how about "no-click" :)

You just brought up another topic I'm trying to touch. NSIS
installer is in fact quite flexible - it can be executed "silently".
That is, slap some control parameters on command line, it can run
from beginning to end. Well, it cannot happen automatically, you
need to do something in the script to make that happen. It's used
for mass installation, which is apparently appealing to Linux users
who also use Windows (like me). Silent installer is in fact one of
the TODO item of Vim. Does it sound like what you expected?

Here's some of design issues I have not decided yet:

- Control granularity?
Just let user specifies installation type, or makes it possible to
specify which component to install (needs config file for this).
I think installation type should probably be OK.

- Error handing?
When should installer do if it found Vim has already installed?
Vim instance still running? I think the dumb solution should be
use - just panic and abort.

- Log?
I have not tried that yet. Apparently some kind of log should be
create during silent installation, so the user can check if
something go wrong. However, it seems default build of NSIS has
not enabled logging. You need a custom build to enable that.

Feedbacks are welcomed.

--
Guopeng

gongqian li

unread,
Jul 31, 2010, 11:57:15 AM7/31/10
to vim...@googlegroups.com


--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
 
What about a portable version like the one created in http://portableapps.com/news/2009-10-13_-_gvim_portable_7.2 which doesn't depend on windows registry? that will be really nice.
 
thanks
 
gong

Tony Mechelynck

unread,
Jul 31, 2010, 7:22:39 PM7/31/10
to vim...@googlegroups.com, Guopeng Wen

If Vim is already installed, not running, and lower version (or same
version and lower patchlevel), maybe no panic but default to upgrade?
(if different version, leave the "old" $VIMRUNTIME in place? Remove it?
Let the user decide?)

If already running, then clear error message: something like "Vim is
already running. Please quit Vim before upgrading" or similar. Or if
possible (if the running instance has +clientserver) maybe close the
existing Vim by means of the client-server facility (after asking user's
permission)

If at all possible, IMHO a log should be produced for every
installation, silent or otherwise (and if the logfile already exists,
append to it, maybe with a datestamp first to separate successive logs).


Best regards,
Tony.
--
Kirkland, Illinois, law forbids bees to fly over the village or through
any of its streets.

Tux

unread,
Jul 31, 2010, 7:57:07 PM7/31/10
to vim...@googlegroups.com
Guopeng Wen schrob am 31.07.2010 17:34:

> When should installer do if it found Vim has already installed?
> Vim instance still running?

I would propose a message box that tells the user to exit Vim first and
continues the installation after clicking "OK" or something. It would be
the easiest way IMO.

BTW while you're at it, what about a better sidebar banner? The existing
one looks rather boring. I'm not really good with GFX, but maybe someone
from this list could do it.

Guopeng Wen

unread,
Aug 1, 2010, 3:41:29 AM8/1/10
to vim...@vim.org
Resend, previous reply send to Tony only. Sorry to the duplicated
message, Tony.

Sorry I didn't make it clear that those "design issues" I listed
above are for silent mode only. For normal mode, the installer
behaves mostly like what you described, except that it won't close
any open Vim automatically, which I think is too dangerous to do.
Silent mode is different in that you should not ask for any user
feedback once started.

> If at all possible, IMHO a log should be produced for every installation,
> silent or otherwise (and if the logfile already exists, append to it, maybe
> with a datestamp first to separate successive logs).

I agree install log is a nice thing to have. There's a few
approaches to do it, but most of them needs whoever build Vim
installer do something different (a custom build of NSIS, or add
more plugins). I'll check if there's less intrusive way to do it.

>
> Best regards,
> Tony.

Regards!
Guopeng

Guopeng Wen

unread,
Aug 1, 2010, 3:50:20 AM8/1/10
to vim...@vim.org
On Sun, Aug 1, 2010 at 7:57 AM, Tux <der_t...@arcor.de> wrote:
> Guopeng Wen schrob am 31.07.2010 17:34:
>
>>    When should installer do if it found Vim has already installed?
>>    Vim instance still running?
>
> I would propose a message box that tells the user to exit Vim first and
> continues the installation after clicking "OK" or something. It would be
> the easiest way IMO.

See my reply to Tony.

> BTW while you're at it, what about a better sidebar banner? The existing
> one looks rather boring. I'm not really good with GFX, but maybe someone
> from this list could do it.

That's the pristine banner from NSIS. Yes it's better to use a
banner for Vim. I'm not good at artwork either, so, I'm expecting
other talented guys to create one to be used in the installer.

Regards!

Guopeng

Guopeng Wen

unread,
Aug 1, 2010, 4:05:04 AM8/1/10
to vim...@vim.org
On Sat, Jul 31, 2010 at 11:57 PM, gongqian li <gong...@gmail.com> wrote:
> What about a portable version like the one created in
> http://portableapps.com/news/2009-10-13_-_gvim_portable_7.2 which doesn't
> depend on windows registry? that will be really nice.

I checked the web site you mentioned. It seems that's a different
installation system (although it's based on NSIS, if I read
correctly). That means if we build that installer, we may have to
distributed two different installers for Windows. Please note I
have not checked if its license allow us to distribute such
installer directly or not. Anyway, it does not look like I can make
the decision to include such installer in Vim distribution.

That said, I assume you've tried that distribution yourself, I'm
curious about whether it provides shell extension etc. or not. Does
it provides context menu (the "Open with Vim" right mouse click
menu)? If you run "gvim" directly from command line in any
directory, could it launch Vim? Does it provide MS Visual Studio
integration?

If answer to all of those questions are no, maybe we can do emulate
that by leaving out some components. But I'm afraid things are more
complex than that.

Regards!

Guopeng

Tony Mechelynck

unread,
Aug 1, 2010, 5:27:50 AM8/1/10
to vim...@googlegroups.com, Guopeng Wen, Tux
On 01/08/10 09:50, Guopeng Wen wrote:
> On Sun, Aug 1, 2010 at 7:57 AM, Tux<der_t...@arcor.de> wrote:
[...]

>> BTW while you're at it, what about a better sidebar banner? The existing
>> one looks rather boring. I'm not really good with GFX, but maybe someone
>> from this list could do it.
>
> That's the pristine banner from NSIS. Yes it's better to use a
> banner for Vim. I'm not good at artwork either, so, I'm expecting
> other talented guys to create one to be used in the installer.
>
> Regards!
>
> Guopeng
>

Boring or not, those graphics have the merit of being "consistent" with
Windows installers for various programs. I think they are acceptable.

If we want to design a specific image for Vim, IMHO it would have to
- be based on the Vim "V" or "Vim" logo
- not be so trendy that next year it'd be out of fashion
- not make the text hard to read, not even for colour-blind people.
The latter probably implies either (a) text outside the image, or (b)
text inside the image, but on a relatively flat-coloured part of it, and
in contrasting tones (white text on dark BG, black text on light BG, etc.).


Best regards,
Tony.
--
"He's not pining, he's passed on! This parrot won't squawk! He's
ceased to be! He's expired, and gone to meet his maker! It's a
stiff! No breath of life, he may rest in peace! If you hadn't nailed
him to the perch, he'd be pushing up the daisies! He's off the twig!
He's kicked the bucket! He's curled up his tooties! He's shuffled off
this mortal world! He's run down the curtain, and joined the bleed'n
Choir Invincible! HE'S FUCKING SNUFFED IT! Vis-a-vi his metabolic
processes is head is lost. All statements concerning this parrot is no
longer a going concern, after from now on, Inoperative...

THIS IS AN EX-PARROT!!

Reply all
Reply to author
Forward
0 new messages