scheme-args-to-list

昨日に引き続き、emacsscheme-program-nameの分解され方についての話題。
id:SaitoAtsushi:20070413:1176476165
現行の実装における空白の扱いをどうやってくぐり抜けるかをしばらく考えた。しかし、そもそも現行の実装をそのまま使う必要はないという結論に辿りついた。カスタマイズこそemacsの真髄。と、言うわけで私が期待する挙動になるようにcmuscheme.el内のscheme-args-to-listを改造した。

(defun scheme-args-to-list (string)
  (if (string= string "") nil
    (let ((where (string-match "[ \t]" string)))
      (cond ((null where) (list string))
            ((not (= where 0))
             (let ((qpos (string-match "^\"\\([^\"]*\\)\"" string)))
               (if (null qpos)
                   (cons (substring string 0 where)
                         (scheme-args-to-list (substring string (+ 1 where)
                                                         (length string))))
                 (cons (substring string (match-beginning 1) (match-end 1))
                       (scheme-args-to-list
                        (substring string (match-end 0) (length string)))))))
            (t (let ((pos (string-match "[^ \t]" string)))
                 (if (null pos)
                     nil
                   (scheme-args-to-list (substring string pos
                                                   (length string))))))))))

テストしてみよう。

(scheme-args-to-list "gosh.exe -i -E \"use slib\"")("gosh.exe" "-i" "-E" "use slib")

満足。
Document ID: 206c164cd6ec88a93ba52fb3617e5bff