8c29982153
This reverts commit adee5315265cc46aa6a3057071527abb16e1cd94. Turns out one of the "other things" is a dealbreaker. We only create kegs using a formula's canonical name. However, we do not check that this is the case when mapping existing kegs back to formula objects, and thus a keg with a name that happens to be an alias can fool Homebrew into thinking the canonically-named keg exists. So anything that enumerates kegs and then tries to do stuff with the resulting formula objects will just break. This is obviously worse than the debugger being broken, so reverting this for the time being.
190 lines
5.6 KiB
Ruby
190 lines
5.6 KiB
Ruby
require 'formula'
|
|
|
|
class Readline < Formula
|
|
homepage 'http://tiswww.case.edu/php/chet/readline/rltop.html'
|
|
url 'http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz'
|
|
mirror 'http://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz'
|
|
sha256 '79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381'
|
|
version '6.2.4'
|
|
|
|
keg_only <<-EOS
|
|
OS X provides the BSD libedit library, which shadows libreadline.
|
|
In order to prevent conflicts when programs look for libreadline we are
|
|
defaulting this GNU Readline installation to keg-only.
|
|
EOS
|
|
|
|
# Vendor the patches.
|
|
# The mirrors are unreliable for getting the patches, and the more patches
|
|
# there are, the more unreliable they get. Pulling this patch inline to
|
|
# reduce bug reports.
|
|
# Upstream patches can be found in:
|
|
# http://ftpmirror.gnu.org/readline/readline-6.2-patches
|
|
def patches; DATA; end
|
|
|
|
def install
|
|
# Always build universal, per https://github.com/mxcl/homebrew/issues/issue/899
|
|
ENV.universal_binary
|
|
system "./configure", "--prefix=#{prefix}",
|
|
"--mandir=#{man}",
|
|
"--infodir=#{info}",
|
|
"--enable-multibyte"
|
|
system "make install"
|
|
end
|
|
end
|
|
|
|
__END__
|
|
diff --git a/callback.c b/callback.c
|
|
index 4ee6361..7682cd0 100644
|
|
--- a/callback.c
|
|
+++ b/callback.c
|
|
@@ -148,6 +148,9 @@ rl_callback_read_char ()
|
|
eof = _rl_vi_domove_callback (_rl_vimvcxt);
|
|
/* Should handle everything, including cleanup, numeric arguments,
|
|
and turning off RL_STATE_VIMOTION */
|
|
+ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
|
|
+ _rl_internal_char_cleanup ();
|
|
+
|
|
return;
|
|
}
|
|
#endif
|
|
diff --git a/input.c b/input.c
|
|
index 7c74c99..b49af88 100644
|
|
--- a/input.c
|
|
+++ b/input.c
|
|
@@ -409,7 +409,7 @@ rl_clear_pending_input ()
|
|
int
|
|
rl_read_key ()
|
|
{
|
|
- int c;
|
|
+ int c, r;
|
|
|
|
rl_key_sequence_length++;
|
|
|
|
@@ -429,14 +429,18 @@ rl_read_key ()
|
|
{
|
|
while (rl_event_hook)
|
|
{
|
|
- if (rl_gather_tyi () < 0) /* XXX - EIO */
|
|
+ if (rl_get_char (&c) != 0)
|
|
+ break;
|
|
+
|
|
+ if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */
|
|
{
|
|
rl_done = 1;
|
|
return ('\n');
|
|
}
|
|
+ else if (r == 1) /* read something */
|
|
+ continue;
|
|
+
|
|
RL_CHECK_SIGNALS ();
|
|
- if (rl_get_char (&c) != 0)
|
|
- break;
|
|
if (rl_done) /* XXX - experimental */
|
|
return ('\n');
|
|
(*rl_event_hook) ();
|
|
diff --git a/patchlevel b/patchlevel
|
|
index fdf4740..626a945 100644
|
|
--- a/patchlevel
|
|
+++ b/patchlevel
|
|
@@ -1,3 +1,3 @@
|
|
# Do not edit -- exists only for use by patch
|
|
|
|
-1
|
|
+4
|
|
diff --git a/support/shobj-conf b/support/shobj-conf
|
|
index 5a63e80..c61dc78 100644
|
|
--- a/support/shobj-conf
|
|
+++ b/support/shobj-conf
|
|
@@ -157,7 +157,7 @@ freebsd[4-9]*|freebsdelf*|dragonfly*)
|
|
;;
|
|
|
|
# Darwin/MacOS X
|
|
-darwin[89]*|darwin10*)
|
|
+darwin[89]*|darwin1[012]*)
|
|
SHOBJ_STATUS=supported
|
|
SHLIB_STATUS=supported
|
|
|
|
@@ -186,7 +186,7 @@ darwin*|macosx*)
|
|
SHLIB_LIBSUFF='dylib'
|
|
|
|
case "${host_os}" in
|
|
- darwin[789]*|darwin10*) SHOBJ_LDFLAGS=''
|
|
+ darwin[789]*|darwin1[012]*) SHOBJ_LDFLAGS=''
|
|
SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
|
|
;;
|
|
*) SHOBJ_LDFLAGS='-dynamic'
|
|
diff --git a/vi_mode.c b/vi_mode.c
|
|
index 41e1dbb..4408053 100644
|
|
--- a/vi_mode.c
|
|
+++ b/vi_mode.c
|
|
@@ -1114,7 +1114,7 @@ rl_domove_read_callback (m)
|
|
rl_beg_of_line (1, c);
|
|
_rl_vi_last_motion = c;
|
|
RL_UNSETSTATE (RL_STATE_VIMOTION);
|
|
- return (0);
|
|
+ return (vidomove_dispatch (m));
|
|
}
|
|
#if defined (READLINE_CALLBACKS)
|
|
/* XXX - these need to handle rl_universal_argument bindings */
|
|
@@ -1234,11 +1234,19 @@ rl_vi_delete_to (count, key)
|
|
_rl_vimvcxt->motion = '$';
|
|
r = rl_domove_motion_callback (_rl_vimvcxt);
|
|
}
|
|
- else if (vi_redoing)
|
|
+ else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */
|
|
{
|
|
_rl_vimvcxt->motion = _rl_vi_last_motion;
|
|
r = rl_domove_motion_callback (_rl_vimvcxt);
|
|
}
|
|
+ else if (vi_redoing) /* handle redoing `dd' here */
|
|
+ {
|
|
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
|
|
+ rl_mark = rl_end;
|
|
+ rl_beg_of_line (1, key);
|
|
+ RL_UNSETSTATE (RL_STATE_VIMOTION);
|
|
+ r = vidomove_dispatch (_rl_vimvcxt);
|
|
+ }
|
|
#if defined (READLINE_CALLBACKS)
|
|
else if (RL_ISSTATE (RL_STATE_CALLBACK))
|
|
{
|
|
@@ -1316,11 +1324,19 @@ rl_vi_change_to (count, key)
|
|
_rl_vimvcxt->motion = '$';
|
|
r = rl_domove_motion_callback (_rl_vimvcxt);
|
|
}
|
|
- else if (vi_redoing)
|
|
+ else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */
|
|
{
|
|
_rl_vimvcxt->motion = _rl_vi_last_motion;
|
|
r = rl_domove_motion_callback (_rl_vimvcxt);
|
|
}
|
|
+ else if (vi_redoing) /* handle redoing `cc' here */
|
|
+ {
|
|
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
|
|
+ rl_mark = rl_end;
|
|
+ rl_beg_of_line (1, key);
|
|
+ RL_UNSETSTATE (RL_STATE_VIMOTION);
|
|
+ r = vidomove_dispatch (_rl_vimvcxt);
|
|
+ }
|
|
#if defined (READLINE_CALLBACKS)
|
|
else if (RL_ISSTATE (RL_STATE_CALLBACK))
|
|
{
|
|
@@ -1377,6 +1393,19 @@ rl_vi_yank_to (count, key)
|
|
_rl_vimvcxt->motion = '$';
|
|
r = rl_domove_motion_callback (_rl_vimvcxt);
|
|
}
|
|
+ else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */
|
|
+ {
|
|
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
|
|
+ r = rl_domove_motion_callback (_rl_vimvcxt);
|
|
+ }
|
|
+ else if (vi_redoing) /* handle redoing `yy' here */
|
|
+ {
|
|
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
|
|
+ rl_mark = rl_end;
|
|
+ rl_beg_of_line (1, key);
|
|
+ RL_UNSETSTATE (RL_STATE_VIMOTION);
|
|
+ r = vidomove_dispatch (_rl_vimvcxt);
|
|
+ }
|
|
#if defined (READLINE_CALLBACKS)
|
|
else if (RL_ISSTATE (RL_STATE_CALLBACK))
|
|
{
|