2011/11/04

mymvim.rb

MacVim 付属のmvim はshell で書かれている。
mvim で存在しないファイルを指定すると新規ファイルを作成する。
Lion で MacVim を起動していない時にうっかり mvim を動かすと
下記のようなエラーが残り shell 終了しない。

... MacVim[451:507] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to ....

Ctr + C で終了するはめになる。

defaults write -g ApplePersistenceIgnoreState YES

を実行しているけれど
念のため org.vim.MacVim にも指定。

% defaults write org.vim.MacVim ApplePersistenceIgnoreState YES
% defaults read org.vim.MacVim
{
    ApplePersistenceIgnoreState = YES;
    MMAutosaveColumns = 150;
    MMAutosaveRows = 45;
    MMCurrentPreferencePane = General;
    MMLastWindowClosedBehavior = 1;
    MMNativeFullScreen = 0;
    MMOpenInCurrentWindow = 1;
    MMTopLeftPoint = "{208, 723}";
    MMUntitledWindow = 0;
    MMUseInlineIm = 0;
    NSQuotedKeystrokeBinding = "";
    NSRepeatCountBinding = "";
    SUCheckAtStartup = 0;
}

が...むなしく変化なく shell 終わらず。
そりゃそうかも。
mvim の最後の行あたり exec が怪しいのかも...

それで
Ruby 1.9.3 で mymvim.rb を作るいい口実ができた。
mymvim.rb は
MacVim が起動していなかったら、たぶん?正しく起動し、指定したファイルを開く。
存在しないファイルを指定してしまっても、何もおこらない。
おもったよりも早く動く。

ところが mymvim.rb を実行すると...

% ps aux  |grep task

=>
...(略) grep --color=auto task
...(略) /usr/libexec/taskgated -p -s

必ず /usr/libexec/taskgated が発生する。
数分すると自動的に消える。これは一体なんなのだろう。
Snow Leopard の時もあったような気もする...。

taskgated を sudo で kill しつつ
よくよく試してみると mymvim.rb だけでなく
MacVim 付属の mvim を実行したあとにも taskgated が発生していた。
ということは、
どのような方法で MacVim を起動したかってことは関係なくて、
MacVim を起動したこと、そのこと自体が taskgated を引き起こしている
ようだ。

MacVim をインストールしている ~/Application と
同じ階層にある他の Application を起動してみると...
taskgated が発生した。

dmg をダウンロードしてインストールした
/usr/local/git/bin/git
を動かしてみると、やはり発生した。

% ruby19 -e "puts \"hello\""
hello
% 

を実行しただけでも発生した。

しかし Lion にデフォルトで入っていた ruby 1.8 を動かしても発生しなかった。

% ruby  -e "puts \"hello\""
hello
% 


/Application にある Safari.app などを起動してみると
taskgated は発生しなかった。

つまり
Apple によって署名されていない Application やプログラムを起動すると
taskgated process が発生するってことかな。?

署名されたソフトウエアと、そうじゃないものの違い....

mymvim.rb

# coding: utf-8
# snapshot MacVim 7.3
# OS X Lion 10.7.2
# ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]

module Mymvim
  class Mvim
    def initialize(f)
      @f = f
      @osa = '/usr/bin/osascript'
      macvim = "Tell application \"MacVim\""
      @s1 = "#{macvim} to open (POSIX file \"#{@f}\") as string"
      @s2 = "#{macvim} to activate"
    end
    def base
      run
    end
    def run
      begin
        e = system("#{@osa} -e '#{@s1}' -e '#{@s2}'")
        exit unless e
      ensure
        print "bye\n"
        exit
      end
    end
  end
end

f = ARGV[0]
 unless File.exist?(f)
  print "Not found : #{f}\n"
  exit
end
Mymvim::Mvim.new(f).base

0 件のコメント: