ぱたへね!

はてなダイアリーはrustの色分けができないのでこっちに来た

LispWorks (Windows) で外部プロセスを起動する

LispWorksのIDEを使っていると、ちょっとディレクトリ作りたいときや、ちょっとファイルを削除したいときに、diredを期待してC-xdを押してしまいます。あまりにも同じミスを何度もするので、LispWorksからWindowsのファイラーが起動するようにしました。

外部プロセスの起動

秀丸ファイラーClassicとWZ Editor 7の例です。

(defun Hidemaru-filer()
  (let ((pathopt (format nil "/select,~A" (namestring (current-pathname)))))
    (sys:call-system (list "c:\\Program Files\\HmFilerClassic\\HmFilerClassic.exe" pathopt)
                     :wait nil
                     )))
(defun WZ-filer()
  (let ((pathopt (format nil "~A" (namestring (get-working-directory)))))
    (sys:call-system (list "C:\\Program Files (x86)\\WZ EDITOR 7\\wzeditor.exe" "@txfile" pathopt)
                     :wait nil
                     )))

少しはまった所は、WZ Editor 7の方は引数のディレクトリーを開いた状態で立ち上がるのでget-working-directory、秀丸ファイラーClassicは引数のディレクトリまたはファイルを選択した状態(画面上は指定したファイルが存在するフォルダーを開く)で立ち上がるのでcurrent-pathnameを使っています。

エディタへの登録

エディタから関数を呼び出すにはeditor:defcommandを、キーに割り当てるにはeditor:bind-keyを使います。

(editor:defcommand "Filer" (p)
   (WZ-filer))

(editor:bind-key "Filer" '#(#\control-\x #\d) :global)

これらの設定を.lispworksに追加すれば、C-xdで無事ファイラーが立ち上がります。