diff --git a/.travis.yml b/.travis.yml
index 38961904fe977be459799a8dae7629b7bca7cc28..9943ca614471a48dea36ebc9f4b2261a17da825b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,19 +1,25 @@
 language: ruby
-rvm:
-  - "2.1.1"
 
-before_script: |
-  sudo apt-get install -y tmux libncurses-dev lib32ncurses5-dev
+install:
+- sudo apt-get install -y libncurses-dev lib32ncurses5-dev
+- sudo add-apt-repository -y ppa:pi-rho/dev
+- sudo apt-get update
+- sudo apt-get install -y tmux=1.9a-1~ppa1~p
 
+script: |
   export GOROOT=~/go1.4
   export GOPATH=~/go
+  export FZF_BASE=~/go/src/github.com/junegunn/fzf
 
   mkdir -p ~/go/src/github.com/junegunn
-  ln -s $(pwd) ~/go/src/github.com/junegunn/fzf
+  ln -s $(pwd) $FZF_BASE
 
-  curl https://storage.googleapis.com/golang/go1.4.linux-amd64.tar.gz | tar -xz
+  curl https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz | tar -xz
   mv go $GOROOT
-  cd $GOROOT/src && GOARCH=386 ./make.bash
+  cd $GOROOT/src
+  GOARCH=386 ./make.bash
 
-  cd ~/go/src/github.com/junegunn/fzf/src && make install && cd .. &&
-  yes | ./install && tmux
+  cd $FZF_BASE/src && make install &&
+  cd $FZF_BASE/bin && ln -sf fzf-linux_amd64 fzf-$(./fzf --version)-linux_amd64 &&
+  cd $FZF_BASE && yes | ./install &&
+  tmux new "rake test > out && touch ok" && cat out && [ -e ok ]
diff --git a/test/test_go.rb b/test/test_go.rb
index de8fac7df446d5a0b11b74d2fc91cd518ddc8260..a499a92faac96d634fdcefe5cb06557caac94c10 100644
--- a/test/test_go.rb
+++ b/test/test_go.rb
@@ -10,6 +10,7 @@ class Tmux
 
   def initialize shell = 'bash'
     @win = go("new-window -P -F '#I' 'bash --rcfile ~/.fzf.#{shell}'").first
+    @lines = `tput lines`.chomp.to_i
   end
 
   def self.current
@@ -25,7 +26,7 @@ class Tmux
   end
 
   def close timeout = 1
-    send_keys 'C-c', 'C-u', 'C-d'
+    send_keys 'C-c', 'C-u', 'exit', :Enter
     wait(timeout) { closed? }
   end
 
@@ -41,7 +42,7 @@ class Tmux
   def capture
     go("capture-pane -t #{win} \\; save-buffer #{TEMPNAME}")
     raise "Window not found" if $?.exitstatus != 0
-    File.read(TEMPNAME).split($/)
+    File.read(TEMPNAME).split($/)[0, @lines]
   end
 
   def until timeout = 1
@@ -54,7 +55,15 @@ private
     until yield
       waited += 0.1
       sleep 0.1
-      raise "timeout" if waited > timeout
+      if waited > timeout
+        hl = '=' * 10
+        puts hl
+        capture.each_with_index do |line, idx|
+          puts [idx.to_s.rjust(2), line].join(': ')
+        end
+        puts hl
+        raise "timeout"
+      end
     end
   end
 
@@ -85,7 +94,7 @@ class TestGoFZF < MiniTest::Unit::TestCase
 
   def test_vanilla
     tmux.send_keys "seq 1 100000 | fzf > #{tempname}", :Enter
-    tmux.until { |lines| lines.last =~ /^>/ && lines[-2] =~ /^  100000/ }
+    tmux.until(10) { |lines| lines.last =~ /^>/ && lines[-2] =~ /^  100000/ }
     lines = tmux.capture
     assert_equal '  2',             lines[-4]
     assert_equal '> 1',             lines[-3]
@@ -94,7 +103,7 @@ class TestGoFZF < MiniTest::Unit::TestCase
 
     # Testing basic key bindings
     tmux.send_keys '99', 'C-a', '1', 'C-f', '3', 'C-b', 'C-h', 'C-u', 'C-e', 'C-y', 'C-k', 'Tab', 'BTab'
-    tmux.until { |lines| lines.last == '> 391' }
+    tmux.until { |lines| lines[-2] == '  856/100000' }
     lines = tmux.capture
     assert_equal '> 1391',       lines[-4]
     assert_equal '  391',        lines[-3]
@@ -117,7 +126,7 @@ class TestGoFZF < MiniTest::Unit::TestCase
 
   def test_fzf_prompt
     tmux.send_keys "fzf -q 'foo bar foo-bar'", :Enter
-    tmux.until { |lines| lines.last =~ /foo-bar/ }
+    tmux.until { |lines| lines.last =~ /^>/ }
 
     # CTRL-A
     tmux.send_keys "C-A", "("