Skip to content

Instantly share code, notes, and snippets.

@legumbre
Created April 8, 2016 23:33
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 legumbre/6567d49214660e799f33335067b43322 to your computer and use it in GitHub Desktop.
Save legumbre/6567d49214660e799f33335067b43322 to your computer and use it in GitHub Desktop.
flymake with LuaJIT
;;; flymake configuration for lua
;;; assumes luajit is in $PATH
;;; Install:
;; copy flymake-lua.el somewhere in your load-path
;;
;; in ~/.emacs:
;; (eval-after-load 'lua-mode '(add-hook 'lua-mode-hook 'flymake-lua-setup))
;; (autoload #'flymake-lua-setup "flymake-lua" nil t)
;; use ~/tmp for temp files
(defvar flymake-temp-dir "~/tmp")
(defvar luac-program "luajit")
;; (setq flymake-log-level 3)
;;; disable moronic modal dialog
(setq flymake-gui-warnings-enabled nil)
(define-key lua-mode-map (kbd "C-x `") 'flymake-goto-next-error)
(custom-set-faces
'(flymake-errline ((t (:underline "red"))))
'(flymake-warnline ((t (:underline "yellow")))))
(eval-after-load 'flymake
'(progn
(defun flymake-get-temp-dir ()
(if (and (boundp 'flymake-temp-dir)
(file-readable-p flymake-temp-dir))
flymake-temp-dir
temporary-file-directory))))
(defun flymake-lua-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-in-temp-dir))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list luac-program (list "-b" local-file "-"))))
(defun flymake-lua-setup ()
(make-local-variable 'flymake-allowed-file-name-masks)
(make-local-variable 'flymake-err-line-patterns)
(make-local-variable 'flymake-no-changes-timeout)
(setq flymake-allowed-file-name-masks
'(("\\.lua\\'" flymake-lua-init)))
(setq flymake-err-line-patterns
'(("^.*luac[0-9.]*\\(.exe\\)?: *\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 2 3 nil 4)))
(setq flymake-err-line-patterns
'(("^.*luajit[0-9.]*\\(.exe\\)?: *\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 2 3 nil 4)))
(setq flymake-no-changes-timeout 1)
(flymake-mode 1))
(defun flymake-create-in-temp-dir (file-name &optional dir)
(let ((temporary-file-directory (flymake-get-temp-dir)))
(make-temp-file (file-name-nondirectory file-name))))
(provide 'flymake-lua)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment