Skip to content

Instantly share code, notes, and snippets.

@hiroakit
Created March 22, 2016 23:31
Show Gist options
  • Save hiroakit/e4f9f847b07fe9df74b8 to your computer and use it in GitHub Desktop.
Save hiroakit/e4f9f847b07fe9df74b8 to your computer and use it in GitHub Desktop.
Emacs major mode for Renderman shader language.
;; License is GPL3
;; https://opensource.org/licenses/gpl-3.0.html
(require 'cc-mode)
;; TODO ファイルチェックをかける
(load "rman-shader-font")
(defvar rman-shader-mode-hook nil)
(defcustom rman-home "/Applications/Pixar/RenderManProServer-19.0"
"RenderMan Home directory"
:tag "RenderMan Home"
:group 'rman
:type 'directory)
(defvar rman-bin (concat (symbol-value 'rman-home) "/bin") "RMAN BIN")
(defun rman-shader-get-shader-path ()
(setq file-name "shader")
(when (eq system-type 'windows-nt)
(setq file-name (concat file-name ".exe")))
(executable-find file-name))
(defvar rman-shader-mode-key-map (make-sparse-keymap) "Keymap of rman-shader-mode")
(let ((map rman-shader-mode-key-map))
(define-key map "\C-c\C-c" 'rman-shader-compile))
(define-derived-mode rman-shader-mode c-mode "RenderMan Shader" "RenderMan Shader Language"
(interactive)
;; TODO パスにRMANTREEを持っている場合はスキップさせる
(setq exec-path (append exec-path (list (symbol-value 'rman-bin))))
(setq font-lock-defaults rman-shader-font-lock-defaults)
(use-local-map rman-shader-mode-key-map)
(run-hooks 'rman-shader-mode-hook))
(defun rman-shader-compile ()
(interactive)
(save-buffer)
(if (rman-shader-get-shader-path)
(shell-command (format "shader %s" (current-buffer)))
(message (format "ERROR: %s/shader not found." (symbol-value 'rman-bin)))))
(setq auto-mode-alist (append '(("\\.sl$" . rman-shader-mode)) auto-mode-alist))
(provide 'rman-shader-mode)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment