doomemacs/modules/lang/lua/autoload/lua.el
Henrik Lissner 659f7bfc71
refactor!: deprecate IS-* OS constants
BREAKING CHANGE: This deprecates the IS-(MAC|WINDOWS|LINUX|BSD) family
of global constants in favor of a native `featurep` check:

  IS-MAC      ->  (featurep :system 'macos)
  IS-WINDOWS  ->  (featurep :system 'windows)
  IS-LINUX    ->  (featurep :system 'linux)
  IS-BSD      ->  (featurep :system 'bsd)

The constants will stick around until the v3 release so folks can still
use it -- and there are still some modules that use it, but I'll phase
those uses out gradually.

Fix: #7479
2024-02-04 17:54:29 -05:00

52 lines
1.9 KiB
EmacsLisp

;;; lang/lua/autoload/lua.el -*- lexical-binding: t; -*-
(defun +lua-love-build-command ()
(when-let (root (+lua-love-project-root))
(format "%s %s"
(if (executable-find "love")
"love"
(if (featurep :system 'macos) "open -a love.app"))
(shell-quote-argument root))))
;;;###autoload
(defun +lua-love-project-root (&optional dir)
"Return directory (up from DIR) where a main.lua or main.moon exists.
Returns nil if 'love' executable can't be found."
(when (executable-find "love")
(when-let ((dir (or dir (doom-project-root))))
(if (doom-project-p dir)
(file-name-directory
(or (file-exists-p! (or "main.lua" "src/main.lua") dir)
(and (modulep! +moonscript)
(file-exists-p! (or "main.moon" "src/main.moon") dir))
""))
;; Since Love2D games are likely to be prototypes, they may not be in a
;; well-formed project as far as projecitle is concerned, so we search for
;; main.lua/main.moon up the file tree as a backup.
(or (projectile-locate-dominating-file dir "main.lua")
(when-let (root (projectile-locate-dominating-file dir "src/main.lua"))
(expand-file-name "src" root))
(and (modulep! +moonscript)
(or (projectile-locate-dominating-file dir "main.moon")
(when-let (root (projectile-locate-dominating-file dir "src/main.moon"))
(expand-file-name "src" root)))))))))
;;
;;; Commands
;;;###autoload
(defun +lua/open-repl ()
"Open Lua REPL."
(interactive)
(lua-start-process "lua" "lua")
(pop-to-buffer lua-process-buffer))
;;;###autoload
(defun +lua/run-love-game ()
"Run the current project with Love2D."
(interactive)
(if-let (cmd (+lua-love-build-command))
(async-shell-command cmd)
(user-error "Couldn't find love project")))