Now it exits after showing the help window because the user can't
interact with it while the menu is working and on some cases the help
buffer uses the same window as the menu, hidding it.
I find the VC status on the modeline useful (the one that shows
Git[:-]branchname) This indicates when the buffer's associated file was
changed on disk (`:' for edited, `-' for unedited.) This indicator is
not affected by a commit with magit, so it keeps signaling a file as
edited when in fact it is not. This patch reverts all buffers that are
visiting a file in the current working tree after a commit.
We need process-connection-type to be nil on cygwin
We need process-connection-type to be t for magit to ask for password
So we now use the new variable magit-process-connection-type for this,
defaulting to nil on cygwin, and to t on others platform.
Then we can use "l" to show short-log from long log an reflog.
At the same time we add the different keybinding to see the different
kind of logs from the others logs.
This patch removes the runtime dependences on the cl package.
Luckily, there weren't too many of these.
From the GNU emacs lisp manual (Appendix D.1 coding conventions)
* Please don't require the `cl' package of Common Lisp extensions
at run time. Use of this package is optional, and it is not part
of the standard Emacs namespace. If your package loads `cl' at
run time, that could cause name clashes for users who don't use
that package.
However, there is no problem with using the `cl' package at
compile time, with `(eval-when-compile (require 'cl))'. That's
sufficient for using the macros in the `cl' package, because the
compiler expands them before generating the byte-code.
There's also the small matter that many of the function implementations
in cl, striving for the full generality of Common Lisp (much of which
is completely useless in Emacs), turn out to be horrible.
E.g., for a fun time, dig down through
(find-if pred list :from-end t),
and look at what it ACTUALLY does when you finish macroexpanding
everything. It tests *every* element of the list against the
predicate, not just the rightmost ones stopping when it finds the
first match. Once it determines the rightmost match, it then retains
NOT the element itself, but its *ordinal* position N, which then gets
used in (elt list N), meaning ANOTHER listwalk, just to get the
element back in order to return it. Nor is the byte-compiler anywhere
near smart enough to optimize this away (I'm not sure *any* compiler
would be...)
I'll grant cl has some useful macros in it, but it comes bundled with a
lot of crap and you need to be really careful about what you use. For
many things, you're better off rolling your own functionality using
the standard routines available (e.g., while, mapcar, and reverse are
all written directly in C).
And you most definitely do NOT want to be foisting the crap on
everybody else, hence the need to keep it out of the runtime.
Meanwhile, here's The Patch:
Modified magit.el