Emacs Lisp
Table of Contents
1. Per-directory minor modes
The following example enables company-mode only for JavaScript (and related) files for some given project path:
(defun per-directory-company-mode ()
(let ((fname (buffer-file-name)))
(when fname
(let ((fname (expand-file-name fname)))
(when (string-prefix-p "/home/b0h/development/project/" fname)
(when (or
(string-suffix-p ".ts" fname)
(string-suffix-p ".tsx" fname)
(string-suffix-p ".js" fname)
(string-suffix-p ".jsx" fname))
(company-mode 1)))))))
(add-hook 'find-file-hook 'per-directory-company-mode)
2. Per-directory build commands
The following example makes pressing F5 run different build commands depending on where the file you're editing is located:
(defun build ()
(interactive)
(let ((fname (buffer-file-name))
(compilation-scroll-output t))
(when fname
(let ((fname (expand-file-name fname)))
(cond ((string-prefix-p "/home/b0h/development/project1/" fname)
(let ((default-directory "/home/b0h/development/project1/"))
(compile "npm run build ")))
((string-prefix-p "/home/b0h/development/project2/" fname)
(let ((default-directory "/home/b0h/development/project2/"))
(compile "make all "))))))))
(global-set-key (kbd "<f5>") 'build)
3. Load all files in a directory matching some regexp
Useful if you always want some set of files loaded at all times (projects, etc)
(defun load-files ()
(interactive)
(let ((projects '(("/home/b0h/Development/project1" "\\.qc$" "\\.src$")
("/home/b0h/Development/project2" "\\.tsx?$"))))
(dolist (project projects)
(let ((dir (car project))
(fileregexes (cdr project)))
(dolist (fileregex fileregexes)
(let ((files (directory-files-recursively dir fileregex)))
(dolist (file files)
(find-file-noselect file))))))))