Compare commits
6 Commits
a35e9b63c1
...
bec92689f7
| Author | SHA1 | Date | |
|---|---|---|---|
| bec92689f7 | |||
| 087d5efaaf | |||
| 148e9019f4 | |||
| 05fd169c91 | |||
| 312fa1e42c | |||
| a55570bbf6 |
@@ -69,4 +69,6 @@
|
||||
syd/lsp
|
||||
syd/custom
|
||||
syd/transient
|
||||
syd/bookmark))
|
||||
syd/bookmark
|
||||
syd/haskell
|
||||
syd/qbe))
|
||||
|
||||
@@ -21,21 +21,38 @@
|
||||
(use-package cider
|
||||
:after clojure-mode
|
||||
:config
|
||||
|
||||
(defun syd-clojure-doc (arg)
|
||||
(interactive "P")
|
||||
(cider-doc arg)
|
||||
cider-doc-buffer)
|
||||
|
||||
(defun syd-clojure-eval-region (beg end)
|
||||
(cider-eval-region beg end))
|
||||
|
||||
(syd-handle '(clojure-mode clojurescript-mode cider-repl-mode)
|
||||
:docs #'cider-doc
|
||||
:eval-region #'syd-clojure-eval-region
|
||||
:load-buffer #'cider-load-buffer)
|
||||
|
||||
(add-hook 'cider-repl-mode-hook #'syd-lisp-mode)
|
||||
|
||||
(syd-push shackle-rules
|
||||
`("*cider-doc*" ,@syd-help-popup-options)
|
||||
'("*cider-test-report*")
|
||||
'("*cider-error*")))
|
||||
`("*cider-doc*" ,@syd-help-popup-options)
|
||||
'("*cider-test-report*")
|
||||
'("*cider-error*"))
|
||||
|
||||
(defun syd-clojure-classpath-relative-file-name (file-name)
|
||||
(when (and cider-mode (cider-nrepl-eval-session))
|
||||
(let ((prefixes (-filter #'file-directory-p
|
||||
(cider-classpath-entries))))
|
||||
(cl-loop for classpath-entry in prefixes
|
||||
for prefix = (file-name-as-directory classpath-entry)
|
||||
when (string-prefix-p prefix file-name)
|
||||
return (string-remove-prefix prefix file-name)))))
|
||||
(add-to-list 'syd-insert-file-name-alist
|
||||
`(,#'syd-clojure-classpath-relative-file-name
|
||||
. "Classpath-relative")))
|
||||
|
||||
(use-package cider-mode
|
||||
:straight nil ; Part of `cider'.
|
||||
|
||||
65
modules/home/users/msyds/emacs/lisp/syd/haskell.el
Normal file
65
modules/home/users/msyds/emacs/lisp/syd/haskell.el
Normal file
@@ -0,0 +1,65 @@
|
||||
;; -*- lexical-binding: t; -*-
|
||||
(require 'syd/base)
|
||||
(require 'syd/handle)
|
||||
|
||||
(defun syd-haskell-open-repl ()
|
||||
"Open a Haskell REPL."
|
||||
(interactive)
|
||||
(require 'inf-haskell)
|
||||
(run-haskell))
|
||||
|
||||
(defun syd-haskell-evil-open-above ()
|
||||
"Opens a line above the current, following Haskell-mode's indentation"
|
||||
(interactive)
|
||||
(evil-beginning-of-line)
|
||||
(haskell-indentation-newline-and-indent)
|
||||
(evil-previous-line)
|
||||
(haskell-indentation-indent-line)
|
||||
(evil-append-line nil))
|
||||
|
||||
(defun syd-haskell-evil-open-below ()
|
||||
"Opens a line below the current, following Haskell-mode's indentation"
|
||||
(interactive)
|
||||
(evil-append-line nil)
|
||||
(haskell-indentation-newline-and-indent))
|
||||
|
||||
(defun syd-haskell-hoogle-start-server ()
|
||||
(interactive)
|
||||
(haskell-hoogle-start-server)
|
||||
(message "Hoogle started on localhost:%d" haskell-hoogle-port-number))
|
||||
|
||||
(use-package haskell-mode
|
||||
:mode (("\\.l?hs'" . haskell-literate-mode)
|
||||
("\\.hs'" . haskell-mode))
|
||||
:custom (; Show errors in REPL, not popup buffers.
|
||||
(haskell-interactive-popup-errors nil)
|
||||
(haskell-process-suggest-remove-import-line t)
|
||||
(haskell-process-auto-import-loaded-modules t))
|
||||
:general
|
||||
(:keymaps 'haskell-mode-map
|
||||
:states '(normal visual motion emacs insert)
|
||||
:major-modes t
|
||||
:prefix syd-localleader-key
|
||||
:non-normal-prefix syd-alt-localleader-key
|
||||
"c" #'haskell-cabal-visit-file
|
||||
"h s" #'syd-haskell-hoogle-start-server
|
||||
"h q" #'haskell-hoogle-kill-server)
|
||||
(:keymaps 'interactive-haskell-mode-map
|
||||
:states '(normal insert)
|
||||
"C-j" #'haskell-interactive-mode-history-next
|
||||
"C-k" #'haskell-interactive-mode-history-previous)
|
||||
(:keymaps 'haskell-mode-map
|
||||
:states 'normal
|
||||
[remap evil-open-above] #'syd-haskell-evil-open-above
|
||||
[remap evil-open-below] #'syd-haskell-evil-open-below)
|
||||
:config
|
||||
(add-to-list 'completion-ignored-extensions ".hi"))
|
||||
|
||||
(use-package lsp-haskell
|
||||
:defer t
|
||||
:custom ((lsp-haskell-server-path "haskell-language-server"))
|
||||
:init
|
||||
(add-hook 'haskell-mode-hook #'lsp-deferred 'append)
|
||||
(add-hook 'haskell-literate-mode-hook #'lsp-deferred 'append))
|
||||
|
||||
(provide 'syd/haskell)
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
(require 'syd/base)
|
||||
(require 'syd/popups)
|
||||
(require 'syd/handle)
|
||||
|
||||
(use-package lsp-mode
|
||||
:init
|
||||
@@ -35,6 +36,12 @@
|
||||
(syd-push
|
||||
shackle-rules
|
||||
`(("*lsp-help*" "*lsp-install*")
|
||||
,@syd-help-popup-options)))
|
||||
:select nil :size 0.42 :popup t :align bottom))
|
||||
(defun syd-lsp-handle-docs ()
|
||||
(interactive)
|
||||
(lsp-describe-thing-at-point)
|
||||
(get-buffer "*lsp-help*"))
|
||||
(syd-handle 'lsp-mode
|
||||
:docs #'syd-lsp-handle-docs)))
|
||||
|
||||
(provide 'syd/lsp)
|
||||
|
||||
@@ -193,21 +193,37 @@ form."
|
||||
(cons mode (intern (concat (match-string 1 s) "-ts-mode"))))
|
||||
(error "Symbol `%c' is not a mode." mode))))
|
||||
|
||||
(defun syd--insert-file-name-annotation (x)
|
||||
(concat
|
||||
" "
|
||||
(propertize " " 'display `(space :align-to (- right ,(+ 1 (length x)))))
|
||||
x))
|
||||
(defun syd--insert-file-name-annotation (descs)
|
||||
(when descs
|
||||
(let ((s (string-join descs ", ")))
|
||||
(concat
|
||||
" "
|
||||
(propertize " " 'display `(space :align-to (- right ,(+ 1 (length s)))))
|
||||
s))))
|
||||
|
||||
(defun syd-project-relative-file-name (file-name)
|
||||
(file-relative-name file-name (project-root (project-current))))
|
||||
|
||||
(defvar syd-insert-file-name-alist
|
||||
`((,#'syd-project-relative-file-name . "Project-relative")
|
||||
(,#'file-relative-name . "File-relative")
|
||||
(,#'identity . "Absolute"))
|
||||
"List of pairs where each cons is a function mapping paths to paths
|
||||
or nil, and each cons is a string description.")
|
||||
|
||||
(defun syd--evaluate-syd-insert-file-name-alist (path)
|
||||
(cl-loop for (fn . lbl) in syd-insert-file-name-alist
|
||||
for r = (funcall fn path)
|
||||
when r
|
||||
collect (cons r lbl)))
|
||||
|
||||
(defun syd-insert-file-name ()
|
||||
(interactive)
|
||||
(let* ((path (read-file-name "Path: " nil nil 'confirm))
|
||||
(proj-root (project-root (project-current)))
|
||||
(alts
|
||||
`((,(file-relative-name path proj-root) . "Project-relative")
|
||||
(,(file-relative-name path default-directory) . "File-relative")
|
||||
(,path . "Absolute")
|
||||
("... (choose a dir)")))
|
||||
(let* ((path (expand-file-name
|
||||
(read-file-name "Path: " nil nil 'confirm)))
|
||||
(choose-a-dir "... (choose a dir)")
|
||||
(alts (cons `(,choose-a-dir)
|
||||
(syd--evaluate-syd-insert-file-name-alist path)))
|
||||
(choice
|
||||
(completing-read
|
||||
"Variant: "
|
||||
@@ -217,11 +233,14 @@ form."
|
||||
`(metadata
|
||||
(annotation-function
|
||||
. ,(lambda (s)
|
||||
(when-let* ((desc (cdr (assoc s alts))))
|
||||
(let ((descs
|
||||
(cl-loop for (p . lbl) in alts
|
||||
when (equal p s)
|
||||
collect lbl)))
|
||||
(syd--insert-file-name-annotation
|
||||
desc))))))
|
||||
descs))))))
|
||||
(_ (all-completions s (mapcar #'car alts) p)))))))
|
||||
(if (equal choice "... (choose a root)")
|
||||
(if (equal choice choose-a-dir)
|
||||
(insert (file-relative-name
|
||||
path (read-file-name "Relative to: " nil nil
|
||||
'confirm)))
|
||||
|
||||
12
modules/home/users/msyds/emacs/lisp/syd/qbe.el
Normal file
12
modules/home/users/msyds/emacs/lisp/syd/qbe.el
Normal file
@@ -0,0 +1,12 @@
|
||||
;; -*- lexical-binding: t; -*-
|
||||
(require 'syd/base)
|
||||
|
||||
(use-package qbe-mode
|
||||
:mode "\\.qbe\\'"
|
||||
:straight (:type git
|
||||
:host github
|
||||
:repo "mbknust/qbe-mode")
|
||||
:config
|
||||
(add-hook 'qbe-mode-hook #'indent-tabs-mode))
|
||||
|
||||
(provide 'syd/qbe)
|
||||
@@ -22,11 +22,13 @@ in {
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org"
|
||||
"https://cache.iog.io"
|
||||
"https://cache.zw3rk.com"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
(builtins.readFile ../../public-keys/deertopia-cache.pub.pem)
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
|
||||
"loony-tools:pr9m4BkM/5/eSTZlkQyRt57Jz7OMBxNSUiMC4FkcNfk="
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user