Return to Snippet

Revision: 2284
at February 12, 2007 10:51 by gtcaz


Updated Code
#!/usr/bin/env ruby -w
# By Geoff Cheshire <[email protected]>
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog"
selection = STDIN.read
IO.popen("aspell -a", 'w+') do |aspell|
  aspell.puts(selection)
  aspell.close_write
  aspell.each do |check|
    if check =~ /^\&/
      data, raw_suggestions = check.split(":")
      signal, original, count, offset = data.split
      suggestions = ""
      raw_suggestions.split(', ').each { |s| suggestions += "\"#{s.chomp}\" " }
      choice=%x("#{COCOA_DIALOG}" dropdown \
          --title "Misspelled Word" \
          --text "There are #{count} suggestions for '#{original}':" \
          --string-output \
          --items #{suggestions} \
          --button1 "Replace" --button2 "Skip" --button3 "Add to dictionary") # No room for a "Cancel" button
        button, replacement = choice.split(" ", 2)
        replacement.chomp!
        case button
          when "Replace"
            selection.gsub!(/#{original}/, replacement) # Replace done globally; all instances of original replaced
          when "Add"
            `echo -e "*#{original}\n#" | aspell -a`
            `"#{COCOA_DIALOG}" ok-msgbox \
              --text "Added '#{original}' to your personal dictionary." \
              --no-cancel --timeout 2`
        end
    end
  end
end
print selection

Revision: 2283
at January 30, 2007 00:30 by gtcaz


Updated Code
#!/usr/bin/ruby
# Offers spelling alternatives for current word.
# You MUST have aspell installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.1.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

selection = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = selection.match(/\w+'?\w*/)[0]
result = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none].split("\n")[1].split

case result[0]
when '*'
  TextMate.exit_discard if result[0] == "*"
when '#'
  print "#{word} did not appear in the dictionary, but there are no suggestions."
  TextMate.exit_show_tool_tip
when '&'
  suggestions = result[4..result.length].join(" ").delete(",")
  choice=%x("#{COCOA_DIALOG}" dropdown \
    --title "Misspelled Word" \
    --text "There are #{result[2]} suggestions for '#{result[1]}':" \
    --string-output \
    --items #{suggestions.gsub(/'/, "\\\\\\0")} \
    --button1 "Replace" --button2 "Cancel" --button3 "Add to dictionary")
  button, replacement = choice.split
  case button
    when "Replace"
      print selection.gsub(/^#{word}/, replacement)
      exit
    when "Add"
      `echo -e "*#{word}\n#" | aspell -a`
      print "Added '#{word}' to your personal dictionary."
      TextMate.exit_show_tool_tip
  end
end
TextMate.exit_discard

Revision: 2282
at January 30, 2007 00:29 by gtcaz


Updated Code
#!/usr/bin/ruby
# Offers spelling alternatives for current word.
# You MUST have aspell installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

selection = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = selection.match(/\w+'?\w*/)[0]
result = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none].split("\n")[1].split

case result[0]
when '*'
  TextMate.exit_discard if result[0] == "*"
when '#'
  print "#{word} did not appear in the dictionary, but there are no suggestions."
  TextMate.exit_show_tool_tip
when '&'
  suggestions = result[4..result.length].join(" ").delete(",")
  choice=%x("#{COCOA_DIALOG}" dropdown \
    --title "Misspelled Word" \
    --text "There are #{result[2]} suggestions for '#{result[1]}':" \
    --string-output \
    --items #{suggestions.gsub(/'/, "\\\\\\0")} \
    --button1 "Replace" --button2 "Cancel" --button3 "Add to dictionary")
  button, replacement = choice.split
  case button
    when "Replace"
      print selection.gsub(/^#{word}/, replacement)
      exit
    when "Add"
      `echo -e "*#{word}\n#" | aspell -a`
      print "Added '#{word}' to your personal dictionary."
      TextMate.exit_show_tool_tip
  end
end
TextMate.exit_discard

Revision: 2281
at January 30, 2007 00:20 by gtcaz


Updated Code
#!/usr/bin/ruby
# Offers spelling alternatives for current word.
# You MUST have aspell installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

word = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = word.match(/\w+'?\w*/)[0]
result = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none].split("\n")[1].split

case result[0]
when '*'
  TextMate.exit_discard if result[0] == "*"
when '#'
  print "#{word} did not appear in the dictionary, but there are no suggestions."
  TextMate.exit_show_tool_tip
when '&'
  suggestions = result[4..result.length].join(" ").delete(",")
  choice=%x("#{COCOA_DIALOG}" dropdown \
    --title "Misspelled Word" \
    --text "There are #{result[2]} suggestions for '#{result[1]}':" \
    --string-output \
    --items #{suggestions.gsub(/'/, "\\\\\\0")} \
    --button1 "Replace" --button2 "Cancel" --button3 "Add to dictionary")
  button, replacement = choice.split
  case button
    when "Replace"
      print replacement
      exit
    when "Add"
      `echo -e "*#{word}\n#" | aspell -a`
      print "Added '#{word}' to your personal dictionary."
      TextMate.exit_show_tool_tip
  end
end
TextMate.exit_discard

Revision: 2280
at January 29, 2007 23:36 by gtcaz


Updated Code
#!/usr/bin/ruby
# Offers spelling alternatives for current word.
# You MUST have aspell installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

word = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = word.match(/\w+'?\w*/)[0]
suggestions = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none|tail -n3|cut -f2 -d:|tr -d ,].rstrip
TextMate.exit_discard if suggestions == "*"
result=%x("#{COCOA_DIALOG}" dropdown \
  --title "Misspelled Word" \
  --text "Suggestions for '#{word}'." \
  --string-output \
  --items #{suggestions.gsub(/'/, "\\\\\\0")} \
  --button1 "Replace" --button2 "Cancel" --button3 "Add to dictionary")
button, replacement = result.split
case button
  when "Replace"
    print replacement
    exit
  when "Add"
    `echo -e "*#{word}\n#" | aspell -a`
    print "Added '#{word}' to your personal dictionary."
    TextMate.exit_show_tool_tip
end
TextMate.exit_discard

Revision: 2279
at January 29, 2007 22:33 by gtcaz


Updated Code
#!/usr/bin/ruby
# Offers spelling alternatives for current word.
# You MUST have aspell installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

word = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = word.match(/\w+'?\w*/)[0]
suggestions = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none|tail -n3|cut -f2 -d:|tr -d ,].rstrip
TextMate.exit_discard if suggestions == "*"
result=%x("#{COCOA_DIALOG}" dropdown \
  --title "Misspelled Word" \
  --text "Suggestions for '#{word}'." \
  --string-output \
  --items #{suggestions.gsub(/'/, "\\\\\\0")} \
  --button1 "Replace" --button2 "Cancel")
button, replacement = result.split
TextMate.exit_discard unless "Replace" == button
print replacement

Revision: 2278
at January 29, 2007 22:31 by gtcaz


Updated Code
#!/usr/bin/ruby

# Offers spelling alternatives for current word.
# You MUST have aspell and wxCocoaDialog installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

# Test for aspell
unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

word = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

# Test for wxCocoaDialog
unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = word.match(/\w+'?\w*/)[0]
suggestions = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none|tail -n3|cut -f2 -d:|tr -d ,].rstrip
TextMate.exit_discard if suggestions == "*"
result=%x("#{COCOA_DIALOG}" dropdown \
  --title "Misspelled Word" \
  --text "Suggestions for '#{word}'." \
  --string-output \
  --items #{suggestions.gsub(/'/, "\\\\\\0")} \
  --button1 "Replace" --button2 "Cancel")
button, replacement = result.split
TextMate.exit_discard unless "Replace" == button
print replacement

Revision: 2277
at January 29, 2007 22:27 by gtcaz


Initial Code
#!/usr/bin/ruby

# Offers spelling alternatives for current word.
# You MUST have aspell installed for this to work.
# Ruby version for e By Geoff Cheshire
# Based on work from Haris Skiadas (http://skiadas.dcostanet.net)
# Version 2.0
require ENV['TM_SUPPORT_PATH'] + "/lib/exit_codes.rb"

# Test for aspell
unless File.exists?("/usr/bin/aspell")
  print "Error: You must install aspell via the cygwin installer prior to running this command."
  TextMate.exit_show_tool_tip
end

word = STDIN.read
COCOA_DIALOG = "#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.exe"

# Test for wxCocoaDialog
unless File.exists?(COCOA_DIALOG)
  print "Error: #{COCOA_DIALOG} not found.  Please install wxCocoaDialog."
  TextMate.exit_show_tool_tip
end

word = word.match(/\w+'?\w*/)[0]
suggestions = %x[aspell <<<#{word.gsub(/'/, "\\\\\\0")} -a --mode=none|tail -n3|cut -f2 -d:|tr -d ,].rstrip
TextMate.exit_discard if suggestions == "*"
result=%x("#{COCOA_DIALOG}" dropdown \
  --title "Misspelled Word" \
  --text "Suggestions for '#{word}'." \
  --string-output \
  --items #{suggestions.gsub(/'/, "\\\\\\0")} \
  --button1 "Replace" --button2 "Cancel")
button, replacement = result.split
TextMate.exit_discard unless "Replace" == button
print replacement

Initial URL


Initial Description
Requires aspell and wxCocoaDialog.

Now checks all of your selection for misspellings.

Known issues: 
* e doesn't see contractions as a "word", so you must select things like can't, won't, etc. or the command won't see the whole word.

* Duplicate misspelled words are not handled well.  Replacements are done globally, yet you'll be asked for each occurrence.

Place in the Text bundle
I named the command: Spell check word/selection
Save: Nothing
Input: Selected Text or Word
Output: Replace Selected Text
Key Equivalent: Ctrl-;
Scope Selector: {Blank}

Initial Title
Super Simple Speller v3

Initial Tags
command, ruby

Initial Language
Ruby