環境変数のPATHの編集をどうにかしたい

Windows環境変数のパスを変えるとき、普通こんなダイアログを使って編集します。

値にはディレクトリのパスを入れるので、結構長くなるのですが、それをセミコロン区切りで1行で入力しなければなりません。
明らかにエディットボックスが小さい!!追加をしていく分にはまだマシですが、途中の値を編集したり削除しようとすると、思ったところにスクロールできずイライラします。

環境変数のPATH自体はレジストリに書かれているので、それを読み取ってエディタで編集するスクリプトを作りました。

require 'win32/registry'
require 'tempfile'

regs = {
  # システム環境変数
  'System' => [Win32::Registry::HKEY_LOCAL_MACHINE, 
    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'],

  # ユーザ環境変数
  'User' => [Win32::Registry::HKEY_CURRENT_USER,
    'Environment']
}

changed = false

Tempfile.open("環境変数の編集_") do |temp|
  before = {}
  # レジストリからの読み取ったキーと値をファイルへ書き込む
  regs.each do |keyname, keys|
    key, subkey = keys
    temp.puts "[#{keyname}]"
    Win32::Registry.open(key, subkey) do |reg|
      before[keyname] = reg['PATH'].split(/;+/)
      temp.puts before[keyname].join("\n")
    end
  end

  # 一度ファイルを閉じ、エディタで開く
  temp.close
  `notepad #{temp.path}`

  txt = temp.open.read
  txt.split(/(\[.*\]\n+)/).drop(1).each_slice(2) do |ret|
    keyname = $1 if ret[0] =~ /\[(.*)\]/ 
    after = ret[1].split(/\n+/)
    # 変更があった場合、レジストリに書き込む
    if keyname and before[keyname] and before[keyname] != after
      key, subkey = regs[keyname]
      Win32::Registry.create(key, subkey) do |reg|
        reg['PATH'] = after.join(';')
      end
      changed = true
    end
  end
end

# 環境変数が変更されたことを通知する
if changed
  require 'dl/win32'
  send_msg = Win32API.new('user32.dll', 'SendMessage', 'LILS', 'L')
  send_msg.call( 0xffff, 0x001A, 0, 'Environment' )
end


入力後にtxtをパースする部分が、だいぶ強引になってしまった…

使い勝手はまあまあでしょう。