4

In TextMate 2, Execute and Update ‘# =>’ Markers menu action updates the markers in the following code as if I am running ruby 1.8 even though my TM_RUBY environment variable is set to ~/.rvm/rubies/ruby-1.9.3-p286/bin/ruby:

v = RUBY_VERSION # => "1.8.7"
puts "".singleton_class
puts v
# ~> -:2: undefined method `singleton_class' for "":String (NoMethodError)

Running the same code in TextMate 2, on the other hand, returns the expected command output:

#<Class:#<String:0x007fcf418941b8>>
1.9.3

This is a wonderful feature and it would be a real shame if it is limited to ruby 1.8. I suspect, however, that this may be peculiar to my setup (I have actually seen it work with 1.9 code here: http://ruby-kickstart.com/). Execute and Update ‘# =>’ Markers menu action is defined in the Ruby bundle where it calls xmpfilter from rcodetools:

#!/usr/bin/env bash

[[ -f "${TM_SUPPORT_PATH}/lib/bash_init.sh" ]] && . "${TM_SUPPORT_PATH}/lib/bash_init.sh"

export RUBYLIB="$TM_BUNDLE_SUPPORT/vendor/rcodetools/lib${RUBYLIB:+:$RUBYLIB}"
export TM_RUBY=$(which "${TM_RUBY:-ruby}")

"${TM_RUBY}" -r "${TM_SUPPORT_PATH}/lib/ruby1.9/add_1.8_features.rb" -- "$TM_BUNDLE_SUPPORT/vendor/rcodetools/bin/xmpfilter"

The file add_1.8_features.rb only adds a few legacy methods to the String and File classes (e.g. grep and remove). Indeed, this enables it to support ruby 1.9 (see https://github.com/textmate/ruby.tmbundle/blob/master/Support/vendor/rcodetools/CHANGES).

At this point I am not even quite sure where does ruby 1.8 come from in the first place. Even passing the explicit path to the latest ruby instead of "${TM_RUBY}" in the last line above does not change the output.

I would be very grateful for any help that would allow me to use this (or equivalent) menu action in TextMate.

Milos
  • 2,728
  • 22
  • 24
  • What is your `TM_RUBY` environment variable set to by default? – tadman Nov 07 '12 at 15:50
  • I often switch between them (by checking and unchecking the variables). In the example above you can see that I had it set to Ruby 1.9.3 (~/.rvm/rubies/ruby-1.9.3-p286/bin/ruby), but I also often use MacRuby (/usr/local/bin/macruby, which is a ruby 1.9.2). – Milos Nov 07 '12 at 17:17
  • Ah, it wasn't clear what the path used in your example was. – tadman Nov 07 '12 at 18:13
  • I have updated my question accordingly. Thanks! – Milos Nov 07 '12 at 19:15
  • Is this still a problem? I can't seem to reproduce this behavior. Setting TM_RUBY gives me the correct result both when running the file and when using the markers. I am using rbenv instead of rvm which I find superior. But that shouldn't have any impact on which ruby binary Textmate is using. – Dirk Geurs Nov 05 '13 at 15:23

1 Answers1

1

This is a good reference.

http://cl.ly/23Ylhttp://cl.ly/23Yl/rvm_textmate.png

Make sure you are running all the new versions.

Out of the box, rvm ships with a ruby binary, typically in ~/.rvm/bin (or, in system wide installs, inside of /usr/local/bin), that will perform the following steps before executing ruby:

Load up RVM
Look for any RVMRC files and load them
Execute as a normal ruby

This approach makes it possible to have the ruby switched on a per-project basis without any extra work. With rvm installed, this is a matter of taking the full path to rvm-auto-ruby, found via:

$ which rvm-auto-ruby

And in the advanced section of the textmate preferences, either adding or changing the TM_RUBY variable to point to the given path, like shown in this screenshot with an example installation.

Source: https://rvm.io/integration/textmate/

FWIW: Josh Cheek is great (rubykickstart)