~/c/remedie/bin/remedie-server.pl開いてる時に~/c/remedie/lib/と~/c/remedie/extlib/をPERL5LIBにいれたい

flymakeでエラー出ちゃうので、どうにかしたいと思っていたのですがこんなのを思いついたのでメモ。
とりあえず、3ディレクトリくらい上がっていく間に存在するextlib,libをリストで返す関数を書いた。

(defun* plcmp--get-lib-path-list-liberal (&optional (dir (plcmp-get-current-directory))
                                                    (libdir-names '("extlib" "lib")))
  "return list of string"
  (flet ((aux (libdir-name updirs)
              (loop for updir in updirs
                    for dir = (expand-file-name
                               (concat updir libdir-name))
                    when (and (file-exists-p dir)
                              (file-directory-p dir))
                    collect dir)))
    (let* ((updirs (loop for updir in '("../" "../../" "../../../")
                         collect (concat dir updir)))
           (updirs (mapcar 'expand-file-name updirs))
           (updirs (mapcar 'file-name-directory updirs)))
      (loop for libdir-name in libdir-names
            append (aux libdir-name updirs)))))

(defun plcmp-get-current-directory ()
  (file-name-directory
   (expand-file-name
    (or (buffer-file-name)
        default-directory))))


緩く見つける変わりに誤爆するかもしれない。
9割方うまく動いて失敗したら手動でどうにかするような感じにしたい。うーん。