Skip to content

Instantly share code, notes, and snippets.

@vinbarnes
Last active March 30, 2022 05:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vinbarnes/cf51ea639c3f686cbb6788e4f8cb628c to your computer and use it in GitHub Desktop.
Save vinbarnes/cf51ea639c3f686cbb6788e4f8cb628c to your computer and use it in GitHub Desktop.
;; helper functions
(defun kb/project-dir ()
"returns the current project's root path"
(let* ((pr (project-current t))
(pr-dir (project-root pr)))
pr-dir))
(defun kb/project-concat (path)
"appends provided path onto the current project's root path"
(concat (kb/project-dir) path))
(defun kb/project-find-in-dir (subdir)
"template function for finding a particular file in a project's subdirectory"
(let ((dirs (list (concat (kb/project-dir) subdir))))
(project-find-file-in nil dirs (project-current t))))
(defun kb/pr-find-controller69 ()
(interactive)
(kb/project-find-in-dir "app/controllers"))
;; My take at customizing project.el to mimic a projectile-rails setup
(defun kb/pr-find-controller ()
(interactive)
(let* ((pr (project-current t))
(dir (project-root pr))
(dirs (list (concat dir "app/controllers"))))
(project-find-file-in nil dirs pr)))
(defun kb/pr-find-controller ()
(interactive)
(let ((dirs (list (concat (kb/project-dir) "app/controllers"))))
(project-find-file-in nil dirs (project-current t))))
(defun kb/pr-find-model ()
(interactive)
(let* ((pr (project-current t))
(dir (project-root pr))
(dirs (list (concat dir "app/models"))))
(project-find-file-in nil dirs pr)))
(defun kb/pr-find-view ()
(interactive)
(let* ((pr (project-current t))
(dir (project-root pr))
(dirs (list (concat dir "app/views"))))
(project-find-file-in "guides" dirs pr)))
(defun kb/pr-find-schema ()
(interactive)
(let* ((pr (project-current t))
(dir (project-root pr))
(dirs (list (concat dir "db"))))
(project-find-file-in "schema" dirs pr)))
(defun kb/pr-find-schema2 ()
(interactive)
(let* ((pr (project-current t))
(dir (project-root pr))
(file (concat dir "db/schema.rb")))
(find-file file)))
(defun kb/pr-find-schema3 ()
(interactive)
(find-file (kb/project-concat "db/schema.rb")))
;; on macos this is bound by default to print current buffer
(global-unset-key (kbd "s-p"))
;; add key bindings using "super" / command key for project-related actions
;; set up project to use familiar (to me) projectile keybindings
(global-set-key (kbd "s-p s") 'project-find-regexp)
(global-set-key (kbd "s-p r c") 'kb/pr-find-controller)
(global-set-key (kbd "s-p r m") 'kb/pr-find-model)
(global-set-key (kbd "s-p r v") 'kb/pr-find-view)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment