パスのテキストであれば、すぐジャンプする xyzzy lisp

ファイル名: -
クリップボードまたはセレクション範囲の文字列で ディレクトリを開きます。
;clipboard なければ selectionの文字列のディレクトリを開く
;(ファイルであれば、その場所のディレクトリ)
(defun open-dir-by-cp (&optional target)
  (interactive)
  (let ((cp-path target)(auto-setted-flag nil)(cp-path-dir))
	(if (eq target nil)
		(setq cp-path (get-clipboard-data)
			  auto-setted-flag t))
	;(msgbox "~A->~A ~A" target cp-path auto-setted-flag)
  (setq cp-path (substitute-string cp-path "[>|##>|] +" ""))
  (setq cp-path (substitute-string cp-path "\n" ""))
  ;(msgbox "check it out!! :p \n~A" cp-path)
  (cond ((file-directory-p cp-path)(shell-execute cp-path))
		((file-exist-p cp-path)(shell-execute (directory-namestring cp-path)))
		((file-directory-p (setq cp-path-dir (directory-namestring cp-path)))(shell-execute cp-path-dir)
		 (msgbox "open: ~A\ncut: ~A" cp-path-dir (substring cp-path (length cp-path-dir))))
		((and (not (eq nil (get-selection-type))) auto-setted-flag)
		 (open-dir-by-cp (buffer-substring (selection-mark) (selection-point))))
		(t (msgbox "file でも dirでもありません :p \n~A" cp-path)))))
ツールバーやジェスチャーに設定するとさらに楽に効率的に作業できます。 ツールバーの場合、ラッパー関数で動的・間接的に起動させないと動きませんでした。
↓ツールバーのアイテム
	 ("関数" 64 toolbar-func-rapper)

;toolbar に設定
(defvar *toolbar-caller-func* 'open-dir-by-cp)

(defun toolbar-func-rapper ()
  (interactive)
  (funcall *toolbar-caller-func*))
マウスジェスチャーではこんな設定を入れています。 パスらしきテキストにカーソルを当て↓にドラッグするだけで、txtを開いたりできます。
(defun find-file-string()
  (interactive)
  (let ((select-str)(temp-str))
    (save-excursion
      (setq select-str
            (if (and (get-selection-type)
                     (or (= (get-selection-type) 1)(= (get-selection-type) 2)))
                (selection-start-end (start end) (buffer-substring start end))
              (progn
                (goto-virtual-line   *first-mouse-action-y*)
                (goto-virtual-column   *first-mouse-action-x*)
                (skip-syntax-spec-backward "\\w_'kjx")
                (buffer-substring (point)
                                  (progn
                                    (skip-syntax-spec-forward "\\w_'kjx")
                                    (point)))))))

    (setq select-str (substitute-string select-str "^\(ttps?:\)" "h\\1"))
    (setq select-str (substitute-string select-str "^www\." "http://www"))
    (setq select-str (substitute-string select-str "^ttp:" "http:"))

    (cond
     ((file-directory-p select-str) (find-file select-str))
     ((file-exist-p select-str) (find-file select-str))
     ((string-match "^\\\\\\w" select-str) (shell-execute select-str))
     ((string-match "^[A-Z]:[\\/]" select-str) (shell-execute select-str))
     ((string-match "^http\\|^file\\|^ftp\\|^mailto\\|^gopher\\|^news\\|^finger\\|^telnet\\|^wais\\|^nntp\\|^cso\\|^lynxexec\\|^lynxcgi\\|^LYNX" select-str)
      (shell-execute select-str t))
     (t(let ((dir-list (append *load-path* (list (default-directory) ed::*memo-directory*))))
         (dolist (dir dir-list)
           (when (file-exist-p (merge-pathnames select-str dir))
             (find-file (merge-pathnames select-str dir))
             (return-from find-file-string))))))))
Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

244 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です