aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/gnu-readline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Formula/gnu-readline.rb')
-rw-r--r--Library/Formula/gnu-readline.rb190
1 files changed, 190 insertions, 0 deletions
diff --git a/Library/Formula/gnu-readline.rb b/Library/Formula/gnu-readline.rb
new file mode 100644
index 000000000..183cd8d19
--- /dev/null
+++ b/Library/Formula/gnu-readline.rb
@@ -0,0 +1,190 @@
+require 'formula'
+
+class GnuReadline < 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.undent
+ 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))
+ {