mirror of
https://github.com/jimeh/.emacs.d.git
synced 2026-02-19 13:46:41 +00:00
83 lines
2.6 KiB
EmacsLisp
83 lines
2.6 KiB
EmacsLisp
;;; ruby-guard.el --- Launching guard directly inside emacs.
|
|
|
|
;; Copyright (C) 2014 Zhang Kai Yu
|
|
|
|
;; Author: Zhang Kai Yu <yeannylam@gmail.com>
|
|
;; Version: 0.1.0
|
|
;; Keywords: ruby, guard, rails
|
|
;; URL: https://github.com/cheunghy/ruby-guard
|
|
|
|
;;; Commentary:
|
|
|
|
;; M-x ruby-guard to launch.
|
|
|
|
;;; Code:
|
|
|
|
(defvar ruby-guard-buffer-name "*guard*")
|
|
|
|
(defun ruby-guard-root (&optional last-directory)
|
|
"Return the directory name where guard file is located."
|
|
(locate-dominating-file (or last-directory
|
|
(file-truename default-directory))
|
|
"Guardfile"))
|
|
|
|
(defun ruby-guard-spring-p ()
|
|
"Return non-nil if spring tmpdir found for `ruby-guard-root'."
|
|
(file-exists-p (file-truename
|
|
(concat temporary-file-directory
|
|
"spring/"
|
|
(md5 (ruby-guard-root) 0 -1)
|
|
".pid"))))
|
|
|
|
(defun ruby-guard-zeus-p ()
|
|
"Return non-nil if `.zeus.sock' found in `ruby-guard-root'."
|
|
(file-exists-p (expand-file-name ".zeus.sock" (ruby-guard-root))))
|
|
|
|
(defun ruby-guard-chef-cookbook-p ()
|
|
"Return non-nil if `ruby-guard-root' is in Chef cookbook."
|
|
(file-exists-p (expand-file-name "recipes" (ruby-guard-root))))
|
|
|
|
(defun ruby-guard-chefdk-installed-p ()
|
|
"Return non-nil if Chef development kit directory is present."
|
|
(file-exists-p "/opt/chefdk"))
|
|
|
|
(defun ruby-guard-bundle-p ()
|
|
"Return non-nil if `Gemfile' found in `ruby-guard-root'."
|
|
(file-exists-p (expand-file-name "Gemfile" (ruby-guard-root))))
|
|
|
|
(defun ruby-guard-command-name ()
|
|
"Return ruby-guard-command."
|
|
(cond ((ruby-guard-spring-p)
|
|
"spring guard")
|
|
((ruby-guard-bundle-p)
|
|
"bundle exec guard")
|
|
((and (ruby-guard-chef-cookbook-p)
|
|
(ruby-guard-chefdk-installed-p))
|
|
"chef exec guard")
|
|
(t "guard")))
|
|
|
|
(defmacro ruby-guard-with-root (body-form)
|
|
"Run (BODY-FORM) with `ruby-guard-root' as `default-directory'."
|
|
`(let ((default-directory (ruby-guard-root)))
|
|
,body-form))
|
|
|
|
;;;###autoload
|
|
(defun ruby-guard ()
|
|
"Run Guard in separate buffer."
|
|
(interactive)
|
|
(let ((default-directory (ruby-guard-root)))
|
|
(if default-directory
|
|
(progn
|
|
(if (member ruby-guard-buffer-name
|
|
(mapcar 'buffer-name (buffer-list)))
|
|
(switch-to-buffer ruby-guard-buffer-name)
|
|
(ruby-guard-with-root
|
|
(async-shell-command
|
|
(ruby-guard-command-name)
|
|
(get-buffer-create ruby-guard-buffer-name)))))
|
|
(error "Cannot find Guardfile."))))
|
|
|
|
(provide 'ruby-guard)
|
|
|
|
;;; ruby-guard.el ends here
|