From d8cd4bdf0350c6d0e11bf7153b9dbf038f72ce2e Mon Sep 17 00:00:00 2001 From: Marcelo dos Santos Date: Sun, 29 Jul 2018 10:50:17 -0300 Subject: [PATCH 1/3] Add Racket lang --- modules/lang/racket/autoload.el | 12 ++++ modules/lang/racket/config.el | 103 ++++++++++++++++++++++++++++++++ modules/lang/racket/doctor.el | 11 ++++ modules/lang/racket/packages.el | 8 +++ 4 files changed, 134 insertions(+) create mode 100644 modules/lang/racket/autoload.el create mode 100644 modules/lang/racket/config.el create mode 100644 modules/lang/racket/doctor.el create mode 100644 modules/lang/racket/packages.el diff --git a/modules/lang/racket/autoload.el b/modules/lang/racket/autoload.el new file mode 100644 index 000000000..c1d071aa3 --- /dev/null +++ b/modules/lang/racket/autoload.el @@ -0,0 +1,12 @@ +;;; lang/racket/autoload.el -*- lexical-binding: t; -*- + +;;;###autoload +(defun +racket/repl () + "Open the Racket REPL." + (interactive) + (pop-to-buffer + (or (get-buffer "*Racket REPL*") + (progn (racket-run-and-switch-to-repl) + (let ((buf (get-buffer "*Racket REPL*"))) + (bury-buffer buf) + buf))))) diff --git a/modules/lang/racket/config.el b/modules/lang/racket/config.el new file mode 100644 index 000000000..f62a69597 --- /dev/null +++ b/modules/lang/racket/config.el @@ -0,0 +1,103 @@ +;;; lang/racket/config.el -*- lexical-binding: t; -*- + +(def-package! racket-mode + :mode "\\.rkt$" + :interpreter "racket" + :init + (add-hook 'racket-repl-mode-hook 'racket-unicode-input-method-enable) + :config + (set-popup-rule! "*Racket REPL*" + :size 10 + :select t + :modeline nil + :quit t + :transient 3) + (set-repl-handler! 'racket-mode #'+racket/repl) + (set-eval-handler! 'racket-mode "racket") + (set-company-backend! 'racket-mode '(company-abbrev + company-dabbrev-code + company-dabbrev + company-files)) + (set-lookup-handlers! 'racket-mode + :definition #'racket-describe + :documentation #'racket-doc) + (set-docset! 'racket-mode "Racket") + (set-pretty-symbols! 'racket-mode + :lambda "lambda" + :map "map" + :dot ".") + (set-rotate-patterns! 'racket-mode + :symbols '(("#true" "#false"))) + + (add-hook! racket-mode + #'(;; Internals + racket-unicode-input-method-enable + ;; 3rd-party functionality + doom|enable-delete-trailing-whitespace + ;; fontification + rainbow-delimiters-mode + highlight-quoted-mode + highlight-numbers-mode + ;; initialization + flycheck-mode)) + + (setq-hook! racket-mode + racket-smart-open-bracket-enable t + company-frontends '(company-pseudo-tooltip-unless-just-one-frontend + company-preview-if-just-one-frontend + company-preview-common-frontend)) + + (map! :map racket-mode-map + :localleader + :n "c" #'racket-run + :n "z" #'racket-repl + :n "C" #'racket-run-and-switch-to-repl + :n "x" #'racket-racket + :n "t" #'racket-test + :n "l" #'racket-logger + :n "o" #'racket-profile + (:desc "eval" :prefix "s" + :n "d" #'racket-send-definition + :n "l" #'racket-send-last-sexp + :n "r" #'racket-send-region) + (:desc "macro expand" :prefix "e" + :n "d" #'racket-expand-definition + :n "l" #'racket-expand-last-sexp + :n "r" #'racket-expand-region + :n "a" #'racket-expand-again) + :n "r" #'racket-open-require-path + :n "TAB" #'indent-for-tab-command + :n "u" #'racket-backward-up-list + :n "[" #'racket-smart-open-bracket + :n ")" #'racket-insert-closing + :n "]" #'racket-insert-closing + :n "}" #'racket-insert-closing + :n "p" #'racket-cycle-paren-shapes + :n "y" #'racket-insert-lambda + :n "d" #'racket-doc + :n "." #'racket-describe + :n "M-." #'racket-visit-definition + :n "C-." #'racket-visit-module + :n "," #'racket-unvisit + :n "f" #'racket-fold-all-tests + :n "F" #'racket-unfold-all-tests + :n "a" #'racket-align + :n "A" #'racket-unalign + :nv ";" #'comment-dwim + :nv "\\" #'indent-region)) + + +;; +;; Plugins +;; + +(def-package! highlight-quoted + :commands highlight-quoted-mode) + +(after! org + (org-babel-do-load-languages + 'org-babel-load-languages + (append org-babel-load-languages + '((racket . t) + ;; (scribble . t) + )))) diff --git a/modules/lang/racket/doctor.el b/modules/lang/racket/doctor.el new file mode 100644 index 000000000..cabeb0d55 --- /dev/null +++ b/modules/lang/racket/doctor.el @@ -0,0 +1,11 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; lang/racket/doctor.el + +(unless (executable-find "drracket") + (warn! "Could not find drracket executable; code-completion and syntax checking will not work.")) + +(unless (executable-find "racket") + (warn! "Could not find racket executable; REPL will not work.")) + +(unless (executable-find "raco") + (warn! "Could not find raco executable; commands for install packages and build libraries will not work.")) diff --git a/modules/lang/racket/packages.el b/modules/lang/racket/packages.el new file mode 100644 index 000000000..e29892a04 --- /dev/null +++ b/modules/lang/racket/packages.el @@ -0,0 +1,8 @@ +;; -*- no-byte-compile: t; -*- +;;; lang/racket/packages.el + +(package! racket-mode) +(package! ob-racket + :recipe (:fetcher github + :repo "DEADB17/ob-racket" + :files ("*"))) From 238e37a1714b71c30b386e0e5a7f978fab46fc93 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 29 Jul 2018 17:22:01 +0200 Subject: [PATCH 2/3] lang/racket: refactor and cleanup + Removed highlight-quoted block because `highlight-quoted-mode` is already autoloaded by the package + Removed org-babel-do-load-languages because lang/org/+babel already has a built-in autoloader for ob-* packages. + Removed flycheck-mode from racket-mode hook because it is enabled globally in :feature syntax-checker + Removed highlight-numbers-mode from racket-mode-hook because it is enabled on prog-mode-hook in core-ui (as of #770) + Fix racket popup rule regexp + Remove popup rules that were redundant with the defaults + Remove racket-mode-specific company-frontends value, looks like personal preference, otherwise should be set in a separate hook function that is easily recognized and disabled, if the user desires. + Remove :interpreter and :mode properties because they are already registered by the racket-mode package. + Move racket-unicode-input-method-enable into :hook property (to defer the config) --- modules/lang/racket/config.el | 47 ++++++----------------------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/modules/lang/racket/config.el b/modules/lang/racket/config.el index f62a69597..7367fa8f8 100644 --- a/modules/lang/racket/config.el +++ b/modules/lang/racket/config.el @@ -1,17 +1,9 @@ ;;; lang/racket/config.el -*- lexical-binding: t; -*- (def-package! racket-mode - :mode "\\.rkt$" - :interpreter "racket" - :init - (add-hook 'racket-repl-mode-hook 'racket-unicode-input-method-enable) + :hook ((racket-mode racket-repl-mode) . racket-unicode-input-method-enable) :config - (set-popup-rule! "*Racket REPL*" - :size 10 - :select t - :modeline nil - :quit t - :transient 3) + (set-popup-rule! "^\\*Racket REPL" :size 10 :select t) (set-repl-handler! 'racket-mode #'+racket/repl) (set-eval-handler! 'racket-mode "racket") (set-company-backend! 'racket-mode '(company-abbrev @@ -19,7 +11,7 @@ company-dabbrev company-files)) (set-lookup-handlers! 'racket-mode - :definition #'racket-describe + :definition #'racket-describe :documentation #'racket-doc) (set-docset! 'racket-mode "Racket") (set-pretty-symbols! 'racket-mode @@ -28,24 +20,15 @@ :dot ".") (set-rotate-patterns! 'racket-mode :symbols '(("#true" "#false"))) - + (add-hook! racket-mode - #'(;; Internals - racket-unicode-input-method-enable - ;; 3rd-party functionality + #'(;; 3rd-party functionality doom|enable-delete-trailing-whitespace ;; fontification rainbow-delimiters-mode - highlight-quoted-mode - highlight-numbers-mode - ;; initialization - flycheck-mode)) + highlight-quoted-mode)) - (setq-hook! racket-mode - racket-smart-open-bracket-enable t - company-frontends '(company-pseudo-tooltip-unless-just-one-frontend - company-preview-if-just-one-frontend - company-preview-common-frontend)) + (setq-hook! racket-mode racket-smart-open-bracket-enable t) (map! :map racket-mode-map :localleader @@ -85,19 +68,3 @@ :n "A" #'racket-unalign :nv ";" #'comment-dwim :nv "\\" #'indent-region)) - - -;; -;; Plugins -;; - -(def-package! highlight-quoted - :commands highlight-quoted-mode) - -(after! org - (org-babel-do-load-languages - 'org-babel-load-languages - (append org-babel-load-languages - '((racket . t) - ;; (scribble . t) - )))) From 960bde480d0f9f3301f3c3bd545b1e653073c236 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 29 Jul 2018 17:29:27 +0200 Subject: [PATCH 3/3] Install ob-racket conditionally I'll move this to lang/org/packages.el later (not easy to do from the github text editor). --- modules/lang/racket/packages.el | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/lang/racket/packages.el b/modules/lang/racket/packages.el index e29892a04..6e58afbb1 100644 --- a/modules/lang/racket/packages.el +++ b/modules/lang/racket/packages.el @@ -2,7 +2,6 @@ ;;; lang/racket/packages.el (package! racket-mode) -(package! ob-racket - :recipe (:fetcher github - :repo "DEADB17/ob-racket" - :files ("*"))) + +(when (featurep! :lang org +babel) + (package! ob-racket :recipe (:fetcher github :repo "DEADB17/ob-racket")))