diff options
Diffstat (limited to 'arkta')
| -rw-r--r-- | arkta/arkta-cosmetic.el | 150 | ||||
| -rw-r--r-- | arkta/arkta-progmodes.el | 285 | ||||
| -rw-r--r-- | arkta/arkta-project.el | 143 |
3 files changed, 0 insertions, 578 deletions
diff --git a/arkta/arkta-cosmetic.el b/arkta/arkta-cosmetic.el deleted file mode 100644 index 96e5498..0000000 --- a/arkta/arkta-cosmetic.el +++ /dev/null | |||
| @@ -1,150 +0,0 @@ | |||
| 1 | ;; -*- lexical-binding: t -*- | ||
| 2 | ;; Copyright © 2018-2025 Uko Koknevics | ||
| 3 | |||
| 4 | (use-package ansi-color | ||
| 5 | :ensure nil | ||
| 6 | :hook (compilation-filter . ansi-color-compilation-filter) | ||
| 7 | :custom | ||
| 8 | (ansi-color-for-compilation-mode t)) | ||
| 9 | |||
| 10 | (use-package centaur-tabs | ||
| 11 | :ensure t | ||
| 12 | :demand t | ||
| 13 | :init | ||
| 14 | (defun arkta/disable-centaur-tabs-mode () | ||
| 15 | (centaur-tabs-local-mode +1)) | ||
| 16 | :hook (dashboard-mode . arkta/disable-centaur-tabs-mode) | ||
| 17 | :bind (("C-x <C-right>" . centaur-tabs-forward) | ||
| 18 | ("C-x <right>" . centaur-tabs-forward) | ||
| 19 | ("C-x <C-left>" . centaur-tabs-backward) | ||
| 20 | ("C-x <left>" . centaur-tabs-backward)) | ||
| 21 | :custom | ||
| 22 | (centaur-tabs-style "alternate") | ||
| 23 | (centaur-tabs-height 35) | ||
| 24 | (centaur-tabs-icon-type 'nerd-icons) | ||
| 25 | (centaur-tabs-set-icons t) | ||
| 26 | (centaur-tabs-gray-out-icons 'buffer) | ||
| 27 | (centaur-tabs-set-bar 'over) | ||
| 28 | (centaur-tabs-set-close-button nil) | ||
| 29 | (centaur-tabs-set-modified-marker t) | ||
| 30 | (centaur-tabs-modified-marker "●") | ||
| 31 | (centaur-tabs-cycle-scope 'tabs) | ||
| 32 | :config | ||
| 33 | (centaur-tabs-mode +1)) | ||
| 34 | |||
| 35 | (use-package display-fill-column-indicator | ||
| 36 | :ensure nil | ||
| 37 | :demand t | ||
| 38 | :init | ||
| 39 | (defun arkta/disable-dfci () | ||
| 40 | (display-fill-column-indicator-mode -1)) | ||
| 41 | :hook (dashboard-mode . arkta/disable-dfci) | ||
| 42 | :config | ||
| 43 | (global-display-fill-column-indicator-mode +1)) | ||
| 44 | |||
| 45 | (use-package display-line-numbers | ||
| 46 | :ensure nil | ||
| 47 | :demand t | ||
| 48 | :init | ||
| 49 | (defun arkta/disable-dln () | ||
| 50 | (display-line-numbers-mode -1)) | ||
| 51 | :hook ((dashboard-mode help-mode) . arkta/disable-dln) | ||
| 52 | :config | ||
| 53 | (global-display-line-numbers-mode +1)) | ||
| 54 | |||
| 55 | (use-package doom-modeline | ||
| 56 | :ensure t | ||
| 57 | :custom | ||
| 58 | (doom-modeline-bar-width 4) | ||
| 59 | (doom-modeline-battery t) | ||
| 60 | (doom-modeline-buffer-file-true-name t) | ||
| 61 | (doom-modeline-height 25) | ||
| 62 | (doom-modeline-hud t) | ||
| 63 | (doom-modeline-hud-min-height 6) | ||
| 64 | (doom-modeline-icon t) | ||
| 65 | (doom-modeline-percent-position nil) | ||
| 66 | (doom-modeline-project-detection 'project) | ||
| 67 | (doom-modeline-total-line-number t) | ||
| 68 | :config | ||
| 69 | (doom-modeline-mode +1)) | ||
| 70 | |||
| 71 | (use-package emojify | ||
| 72 | :ensure t | ||
| 73 | :config | ||
| 74 | (global-emojify-mode +1)) | ||
| 75 | |||
| 76 | (use-package faces | ||
| 77 | :ensure nil | ||
| 78 | :custom-face | ||
| 79 | (default ((t (:weight ,(if +mac+ 'medium 'regular) | ||
| 80 | :slant normal | ||
| 81 | :width normal | ||
| 82 | :font "Input Mono" | ||
| 83 | :height 130))))) | ||
| 84 | |||
| 85 | (use-package git-gutter | ||
| 86 | :ensure t | ||
| 87 | :config | ||
| 88 | (global-git-gutter-mode +1)) | ||
| 89 | |||
| 90 | (use-package hl-line | ||
| 91 | :ensure nil | ||
| 92 | :config | ||
| 93 | (global-hl-line-mode +1)) | ||
| 94 | |||
| 95 | (use-package hl-todo | ||
| 96 | :ensure t | ||
| 97 | :config | ||
| 98 | (global-hl-todo-mode +1)) | ||
| 99 | |||
| 100 | (use-package modus-themes | ||
| 101 | :ensure t | ||
| 102 | :config | ||
| 103 | (load-theme 'modus-operandi t)) | ||
| 104 | |||
| 105 | (use-package nerd-icons | ||
| 106 | :ensure t | ||
| 107 | :init | ||
| 108 | (defun arkta/nerd-icons-maybe-install-fonts () | ||
| 109 | (when (and (display-graphic-p) | ||
| 110 | (not (find-font (font-spec :family nerd-icons-font-family)))) | ||
| 111 | ;; TODO: Maybe also reinstall them every month or so | ||
| 112 | (nerd-icons-install-fonts t))) | ||
| 113 | :hook ((elpaca-after-init server-after-make-frame) . arkta/nerd-icons-maybe-install-fonts)) | ||
| 114 | |||
| 115 | (use-package rainbow-delimiters | ||
| 116 | :ensure t | ||
| 117 | :hook (prog-mode . rainbow-delimiters-mode)) | ||
| 118 | |||
| 119 | (use-package rainbow-mode | ||
| 120 | :ensure t | ||
| 121 | :init | ||
| 122 | (defun arkta/enable-rainbow () | ||
| 123 | (rainbow-mode +1)) | ||
| 124 | :hook (prog-mode . arkta/enable-rainbow)) | ||
| 125 | |||
| 126 | (use-package scroll-bar | ||
| 127 | :ensure nil | ||
| 128 | :defer t | ||
| 129 | :config | ||
| 130 | (scroll-bar-mode -1)) | ||
| 131 | |||
| 132 | (use-package solaire-mode | ||
| 133 | :ensure t | ||
| 134 | :config | ||
| 135 | (solaire-global-mode +1)) | ||
| 136 | |||
| 137 | (use-package time | ||
| 138 | :ensure nil | ||
| 139 | :custom | ||
| 140 | (display-time-default-load-average nil) | ||
| 141 | :config | ||
| 142 | (display-time-mode +1)) | ||
| 143 | |||
| 144 | (use-package tool-bar | ||
| 145 | :ensure nil | ||
| 146 | :defer t | ||
| 147 | :config | ||
| 148 | (tool-bar-mode -1)) | ||
| 149 | |||
| 150 | (provide 'arkta-cosmetic) | ||
diff --git a/arkta/arkta-progmodes.el b/arkta/arkta-progmodes.el deleted file mode 100644 index a85d0c0..0000000 --- a/arkta/arkta-progmodes.el +++ /dev/null | |||
| @@ -1,285 +0,0 @@ | |||
| 1 | ;; -*- lexical-binding: t -*- | ||
| 2 | ;; Copyright © 2018-2025 Uko Koknevics | ||
| 3 | |||
| 4 | (use-package adoc-mode | ||
| 5 | :ensure t | ||
| 6 | :mode "\\.adoc\\'") | ||
| 7 | |||
| 8 | (use-package asm-mode | ||
| 9 | :ensure nil | ||
| 10 | :mode ("\\.s\\'" "\\.S\\'") | ||
| 11 | :init | ||
| 12 | (defun arkta/asm-setup () | ||
| 13 | (set-tab-usage t) | ||
| 14 | (set-tab-width 8)) | ||
| 15 | :hook (asm-mode . arkta/asm-setup)) | ||
| 16 | |||
| 17 | (use-package auto-compile | ||
| 18 | :after elisp-mode | ||
| 19 | :ensure t | ||
| 20 | :hook ((emacs-lisp-mode . auto-compile-on-load-mode) | ||
| 21 | (emacs-lisp-mode . auto-compile-on-save-mode))) | ||
| 22 | |||
| 23 | (use-package c-ts-mode | ||
| 24 | :after treesit | ||
| 25 | :ensure nil | ||
| 26 | :mode ("\\.c\\'" | ||
| 27 | ("\\.cpp\\'" . c++-ts-mode)) | ||
| 28 | :init | ||
| 29 | (defun arkta/c-setup () | ||
| 30 | (set-tab-usage t) | ||
| 31 | (set-tab-width c-ts-mode-indent-offset)) | ||
| 32 | :hook (c-ts-base-mode . arkta/c-setup) | ||
| 33 | :custom | ||
| 34 | (c-ts-mode-indent-offset 8) | ||
| 35 | (c-ts-mode-indent-style (lambda () | ||
| 36 | `(((node-is ")") parent-bol 0) | ||
| 37 | ((node-is "}") parent-bol 0) | ||
| 38 | ((node-is "access_specifier") parent-bol 0) | ||
| 39 | ((parent-is "argument_list") parent-bol c-ts-mode-indent-offset) | ||
| 40 | ((parent-is "parameter_list") parent-bol c-ts-mode-indent-offset) | ||
| 41 | ((parent-is "field_declaration_list") parent-bol c-ts-mode-indent-offset) | ||
| 42 | ,@(alist-get 'linux (c-ts-mode--indent-styles 'c)))))) | ||
| 43 | |||
| 44 | (use-package cmake-ts-mode | ||
| 45 | :after treesit | ||
| 46 | :ensure nil | ||
| 47 | :mode ("CMakeLists\\.txt\\'" | ||
| 48 | "\\.cmake\\'")) | ||
| 49 | |||
| 50 | (use-package company-mlton | ||
| 51 | :after (company sml) | ||
| 52 | :ensure '(company-mlton :host github | ||
| 53 | :repo "MatthewFluet/company-mlton") | ||
| 54 | :hook (sml-mode . company-mlton-init)) | ||
| 55 | |||
| 56 | (use-package csharp-mode | ||
| 57 | :after treesit | ||
| 58 | :ensure nil | ||
| 59 | :mode "\\.cs\\'") | ||
| 60 | |||
| 61 | (use-package css-mode | ||
| 62 | :after treesit | ||
| 63 | :ensure nil | ||
| 64 | :mode "\\.css\\'") | ||
| 65 | |||
| 66 | (use-package dart-mode | ||
| 67 | :ensure t | ||
| 68 | :mode "\\.dart\\'") | ||
| 69 | |||
| 70 | (use-package dockerfile-ts-mode | ||
| 71 | :after treesit | ||
| 72 | :ensure nil | ||
| 73 | :mode "Dockerfile\\'") | ||
| 74 | |||
| 75 | (use-package ebuild-mode | ||
| 76 | :ensure (ebuild-mode :host github | ||
| 77 | :repo "emacsmirror/ebuild-mode") | ||
| 78 | :mode ("\\.ebuild\\'" | ||
| 79 | "\\.eclass\\'")) | ||
| 80 | |||
| 81 | (use-package elisp-mode | ||
| 82 | :ensure nil | ||
| 83 | :mode ("\\.el\\'" . emacs-lisp-mode)) | ||
| 84 | |||
| 85 | (use-package elixir-mode | ||
| 86 | :ensure t | ||
| 87 | :mode "\\.exs?\\'" | ||
| 88 | :init | ||
| 89 | (defun arkta/elixir-setup () | ||
| 90 | (add-hook 'before-save-hook #'elixir-format nil t)) | ||
| 91 | :hook (elixir-mode . arkta/elixir-setup)) | ||
| 92 | |||
| 93 | (use-package gdscript-mode | ||
| 94 | :ensure t | ||
| 95 | :mode "\\.gd\\'") | ||
| 96 | |||
| 97 | (use-package go-ts-mode | ||
| 98 | :after treesit | ||
| 99 | :ensure nil | ||
| 100 | :mode "\\.go\\'" | ||
| 101 | :init | ||
| 102 | (defun arkta/go-setup () | ||
| 103 | (add-hook 'before-save-hook #'gofmt-before-save nil t) | ||
| 104 | (set-tab-usage t) | ||
| 105 | (set-tab-width go-ts-mode-indent-offset)) | ||
| 106 | :hook (go-ts-mode . arkta/go-setup)) | ||
| 107 | |||
| 108 | (use-package groovy-mode | ||
| 109 | :ensure t | ||
| 110 | :mode ("Jenkinsfile\\'" | ||
| 111 | "\\.jenkinsfile\\'" | ||
| 112 | "\\.gradle\\'" | ||
| 113 | "\\.groovy\\'")) | ||
| 114 | |||
| 115 | (use-package haskell-mode | ||
| 116 | :ensure t | ||
| 117 | :mode "\\.hs\\'") | ||
| 118 | |||
| 119 | (use-package htmlize | ||
| 120 | :ensure t) | ||
| 121 | |||
| 122 | (use-package java-ts-mode | ||
| 123 | :after treesit | ||
| 124 | :ensure nil | ||
| 125 | :mode "\\.java\\'") | ||
| 126 | |||
| 127 | (use-package js | ||
| 128 | :after treesit | ||
| 129 | :ensure nil | ||
| 130 | :mode ("\\.js\\'" . js-ts-mode)) | ||
| 131 | |||
| 132 | (use-package json-ts-mode | ||
| 133 | :after treesit | ||
| 134 | :ensure nil | ||
| 135 | :mode "\\.json\\'") | ||
| 136 | |||
| 137 | (use-package kotlin-ts-mode | ||
| 138 | :after treesit | ||
| 139 | :ensure t | ||
| 140 | :mode "\\.kts?\\'") | ||
| 141 | |||
| 142 | (use-package lisp-mode | ||
| 143 | :ensure nil | ||
| 144 | :mode "\\.lisp\\'") | ||
| 145 | |||
| 146 | (use-package lua-mode | ||
| 147 | :ensure t | ||
| 148 | :custom | ||
| 149 | (lua-indent-level 4) | ||
| 150 | :mode ("\\.lua\\'" "\\.rockspec\\'")) | ||
| 151 | |||
| 152 | (use-package make-mode | ||
| 153 | :ensure nil | ||
| 154 | :mode (("Makefile\\'" . makefile-gmake-mode) | ||
| 155 | ("GNUmakefile\\'" . makefile-mode) | ||
| 156 | ("\\.mk\\(\\.template\\)?\\'" . makefile-mode))) | ||
| 157 | |||
| 158 | (use-package markdown-mode | ||
| 159 | :ensure t | ||
| 160 | :mode ("\\.md\\'" . gfm-mode)) | ||
| 161 | |||
| 162 | (use-package nasm-mode | ||
| 163 | :ensure t | ||
| 164 | :mode ("\\.asm\\'" | ||
| 165 | "\\.inc\\'") | ||
| 166 | :init | ||
| 167 | (defun arkta/nasm-setup () | ||
| 168 | (set-tab-width 4)) | ||
| 169 | :hook (nasm-mode . arkta/nasm-setup)) | ||
| 170 | |||
| 171 | (use-package nix-mode | ||
| 172 | :ensure t | ||
| 173 | :mode "\\.nix\\'") | ||
| 174 | |||
| 175 | (use-package nxml-mode | ||
| 176 | :ensure nil | ||
| 177 | :mode ("\\.xml\\'" | ||
| 178 | "\\.plist\\'" | ||
| 179 | "\\.svg\\'")) | ||
| 180 | |||
| 181 | (use-package org | ||
| 182 | :ensure nil | ||
| 183 | :after htmlize | ||
| 184 | :bind (("C-c l" . org-store-link) | ||
| 185 | ("C-c a" . org-agenda)) | ||
| 186 | :mode ("\\.org\\'" . org-mode) | ||
| 187 | :custom | ||
| 188 | (org-agenda-files '("~/TODO.org")) | ||
| 189 | (org-log-done t)) | ||
| 190 | |||
| 191 | (use-package php-mode | ||
| 192 | :ensure t | ||
| 193 | :mode "\\.php\\'") | ||
| 194 | |||
| 195 | (use-package pico8-mode | ||
| 196 | :ensure '(pico8-mode :host github | ||
| 197 | :repo "Kaali/pico8-mode") | ||
| 198 | :mode "\\.p8\\'") | ||
| 199 | |||
| 200 | (use-package proof-general | ||
| 201 | :ensure t) | ||
| 202 | |||
| 203 | (use-package prolog | ||
| 204 | :ensure nil | ||
| 205 | :mode ("\\.pl\\'" . prolog-mode)) | ||
| 206 | |||
| 207 | (use-package python | ||
| 208 | :after treesit | ||
| 209 | :ensure nil | ||
| 210 | :mode ("\\.py\\'" . python-ts-mode)) | ||
| 211 | |||
| 212 | (use-package racket-mode | ||
| 213 | :ensure t | ||
| 214 | :mode "\\.rkt\\'") | ||
| 215 | |||
| 216 | (use-package ruby-ts-mode | ||
| 217 | :after treesit | ||
| 218 | :ensure nil | ||
| 219 | :mode "\\.rb\\'") | ||
| 220 | |||
| 221 | (use-package rust-ts-mode | ||
| 222 | :after treesit | ||
| 223 | :ensure nil | ||
| 224 | :mode "\\.rs\\'") | ||
| 225 | |||
| 226 | (use-package scala-mode | ||
| 227 | :ensure t | ||
| 228 | :mode "\\.scala\\'") | ||
| 229 | |||
| 230 | (use-package scheme | ||
| 231 | :ensure nil | ||
| 232 | :commands scheme-mode | ||
| 233 | :mode ("\\.scm\\'" . scheme-mode) | ||
| 234 | :config | ||
| 235 | (put 'module 'scheme-indent-function 2)) | ||
| 236 | |||
| 237 | (use-package slime | ||
| 238 | :ensure t | ||
| 239 | :after lisp-mode | ||
| 240 | :commands slime | ||
| 241 | :custom | ||
| 242 | (inferior-lisp-program (executable-find "sbcl"))) | ||
| 243 | |||
| 244 | (use-package smalltalk-mode | ||
| 245 | :ensure t | ||
| 246 | :mode "\\.st\\'") | ||
| 247 | |||
| 248 | (use-package sml-mode | ||
| 249 | :ensure t | ||
| 250 | :mode "\\.sml\\'") | ||
| 251 | |||
| 252 | (use-package svelte-mode | ||
| 253 | :ensure t | ||
| 254 | :mode ("\\.svelte\\'" "\\.svx\\'")) | ||
| 255 | |||
| 256 | (use-package swift-mode | ||
| 257 | ;; There's swift-ts-mode... but it doesn't have parser.c committed... | ||
| 258 | :ensure t | ||
| 259 | :mode "\\.swift\\'") | ||
| 260 | |||
| 261 | (use-package toml-ts-mode | ||
| 262 | :after treesit | ||
| 263 | :ensure nil | ||
| 264 | :mode "\\.toml\\'") | ||
| 265 | |||
| 266 | (use-package typescript-ts-mode | ||
| 267 | :after treesit | ||
| 268 | :ensure nil | ||
| 269 | :mode "\\.ts\\'") | ||
| 270 | |||
| 271 | (use-package typst-ts-mode | ||
| 272 | :after treesit | ||
| 273 | :ensure t | ||
| 274 | :mode "\\.typ\\'") | ||
| 275 | |||
| 276 | (use-package yaml-ts-mode | ||
| 277 | :after treesit | ||
| 278 | :ensure nil | ||
| 279 | :mode ("\\.clang-\\(tidy\\|format\\)\\'" "\\.ya?ml\\'")) | ||
| 280 | |||
| 281 | (use-package zig-mode | ||
| 282 | :ensure t | ||
| 283 | :mode "\\.zig\\'") | ||
| 284 | |||
| 285 | (provide 'arkta-progmodes) | ||
diff --git a/arkta/arkta-project.el b/arkta/arkta-project.el deleted file mode 100644 index 18354a9..0000000 --- a/arkta/arkta-project.el +++ /dev/null | |||
| @@ -1,143 +0,0 @@ | |||
| 1 | ;; -*- lexical-binding: t -*- | ||
| 2 | ;; Copyright © 2018-2025 Uko Koknevics | ||
| 3 | |||
| 4 | ;; TODO: See about porting this to project.el: | ||
| 5 | ;; (define-key map (kbd "a") #'projectile-find-other-file) | ||
| 6 | ;; (define-key map (kbd "E") #'projectile-edit-dir-locals) | ||
| 7 | ;; (define-key map (kbd "g") #'projectile-find-file-dwim) | ||
| 8 | ;; (define-key map (kbd "i") #'projectile-invalidate-cache) | ||
| 9 | ;; (define-key map (kbd "I") #'projectile-ibuffer) | ||
| 10 | ;; (define-key map (kbd "j") #'projectile-find-tag) | ||
| 11 | ;; (define-key map (kbd "l") #'projectile-find-file-in-directory) | ||
| 12 | ;; (define-key map (kbd "m") #'projectile-commander) | ||
| 13 | ;; (define-key map (kbd "o") #'projectile-multi-occur) | ||
| 14 | ;; (define-key map (kbd "q") #'projectile-switch-open-project) | ||
| 15 | ;; (define-key map (kbd "R") #'projectile-regenerate-tags) | ||
| 16 | |||
| 17 | ;; (define-key map (kbd "s r") #'projectile-ripgrep) | ||
| 18 | ;; (define-key map (kbd "s s") #'projectile-ag) | ||
| 19 | |||
| 20 | ;; (define-key map (kbd "S") #'projectile-save-project-buffers) | ||
| 21 | ;; (define-key map (kbd "t") #'projectile-toggle-between-implementation-and-test) | ||
| 22 | ;; (define-key map (kbd "T") #'projectile-find-test-file) | ||
| 23 | ;; ;; project lifecycle external commands | ||
| 24 | ;; ;; TODO: Bundle those under some prefix key | ||
| 25 | ;; (define-key map (kbd "C") #'projectile-configure-project) | ||
| 26 | ;; (define-key map (kbd "K") #'projectile-package-project) | ||
| 27 | ;; (define-key map (kbd "L") #'projectile-install-project) | ||
| 28 | ;; (define-key map (kbd "P") #'projectile-test-project) | ||
| 29 | ;; (define-key map (kbd "u") #'projectile-run-project) | ||
| 30 | |||
| 31 | ;; ;; integration with utilities | ||
| 32 | ;; (define-key map (kbd "x i") #'projectile-run-ielm) | ||
| 33 | ;; (define-key map (kbd "x t") #'projectile-run-term) | ||
| 34 | ;; (define-key map (kbd "x g") #'projectile-run-gdb) | ||
| 35 | ;; (define-key map (kbd "x v") #'projectile-run-vterm) | ||
| 36 | ;; (define-key map (kbd "x 4 v") #'projectile-run-vterm-other-window) | ||
| 37 | |||
| 38 | ;; ;; misc | ||
| 39 | ;; (define-key map (kbd "z") #'projectile-cache-current-file) | ||
| 40 | ;; (define-key map (kbd "<left>") #'projectile-previous-project-buffer) | ||
| 41 | ;; (define-key map (kbd "<right>") #'projectile-next-project-buffer) | ||
| 42 | ;; (define-key map (kbd "ESC") #'projectile-project-buffers-other-buffer) | ||
| 43 | |||
| 44 | (cl-defun arkta/project-completing-read (prompt choices &key initial-input action (project (project-current t))) | ||
| 45 | "Present a project tailored PROMPT with CHOICES." | ||
| 46 | (require 'ivy) | ||
| 47 | (let ((prompt (arkta/project-prepend-project-name prompt project))) | ||
| 48 | (ivy-read prompt choices | ||
| 49 | :initial-input initial-input | ||
| 50 | :action action | ||
| 51 | :caller 'arkta/project-completing-read))) | ||
| 52 | |||
| 53 | (defun arkta/project-expand-root (name &optional project) | ||
| 54 | "Expand NAME to project root." | ||
| 55 | (let (project (or project (project-current t))) | ||
| 56 | (expand-file-name name (project-root project)))) | ||
| 57 | |||
| 58 | (defun arkta/project-find-references (&optional symbol) | ||
| 59 | "Find all references to SYMBOL in the current project. | ||
| 60 | |||
| 61 | A thin wrapper around `xref-references-in-directory'." | ||
| 62 | (interactive) | ||
| 63 | (require 'xref) | ||
| 64 | (let ((project-root (project-root (project-current t))) | ||
| 65 | (symbol (or symbol | ||
| 66 | (read-from-minibuffer "Lookup in project: " (arkta/symbol-at-point))))) | ||
| 67 | (xref-show-xrefs (xref-references-in-directory symbol project-root) nil))) | ||
| 68 | |||
| 69 | (defun arkta/project-magit-status () | ||
| 70 | (interactive) | ||
| 71 | (magit-status (project-root (project-current t)))) | ||
| 72 | |||
| 73 | (defun arkta/project-prepend-project-name (string &optional project) | ||
| 74 | "Prepend the current project's name to STRING." | ||
| 75 | (let ((project (or project (project-current t)))) | ||
| 76 | (format "[%s] %s" (project-name project) string))) | ||
| 77 | |||
| 78 | (defun arkta/project-recentf () | ||
| 79 | "Show a list of recently visited files in a project." | ||
| 80 | (interactive) | ||
| 81 | (let ((project (project-current t))) | ||
| 82 | (find-file (arkta/project-expand-root | ||
| 83 | (arkta/project-completing-read | ||
| 84 | "Recently visited files: " | ||
| 85 | (arkta/project-recentf-files project) | ||
| 86 | :project project) | ||
| 87 | project)))) | ||
| 88 | |||
| 89 | (defun arkta/project-recentf-files (&optional project) | ||
| 90 | "Return a list of recently visited files in a project." | ||
| 91 | (require 'recentf) | ||
| 92 | (let* ((project (or project (project-current t))) | ||
| 93 | (project-root (expand-file-name (project-root project)))) | ||
| 94 | (mapcar | ||
| 95 | (lambda (f) (file-relative-name f project-root)) | ||
| 96 | (cl-remove-if-not | ||
| 97 | (lambda (f) (string-prefix-p project-root (expand-file-name f))) | ||
| 98 | recentf-list)))) | ||
| 99 | |||
| 100 | (defun arkta/symbol-at-point () | ||
| 101 | "Get the symbol at point and strip its properties." | ||
| 102 | (substring-no-properties (or (thing-at-point 'symbol) ""))) | ||
| 103 | |||
| 104 | (use-package project | ||
| 105 | :ensure nil | ||
| 106 | :config | ||
| 107 | (defvar-keymap arkta/project-prefix-map | ||
| 108 | :parent project-prefix-map | ||
| 109 | "C-b" 'project-list-buffers | ||
| 110 | |||
| 111 | "!" 'project-shell-command | ||
| 112 | "&" 'project-async-shell-command | ||
| 113 | |||
| 114 | "4" 'project-other-window-command | ||
| 115 | "5" 'project-other-frame-command | ||
| 116 | |||
| 117 | "D" 'project-dired | ||
| 118 | "F" 'project-or-external-find-file | ||
| 119 | "V" 'project-vc-dir | ||
| 120 | |||
| 121 | "b" 'project-switch-to-buffer | ||
| 122 | "c" 'project-compile | ||
| 123 | "d" 'project-find-dir | ||
| 124 | "e" 'arkta/project-recentf | ||
| 125 | "f" 'project-find-file | ||
| 126 | "k" 'project-kill-buffers | ||
| 127 | "p" 'project-switch-project | ||
| 128 | "r" 'project-query-replace-regexp | ||
| 129 | "v" 'arkta/project-magit-status | ||
| 130 | |||
| 131 | "M-x" 'project-execute-extended-command | ||
| 132 | |||
| 133 | "s f" 'project-find-file | ||
| 134 | "s g" 'project-find-regexp | ||
| 135 | "s r" 'project-find-regexp | ||
| 136 | "s x" 'arkta/project-find-references | ||
| 137 | |||
| 138 | "x e" 'project-eshell | ||
| 139 | "x s" 'project-shell) | ||
| 140 | (fset 'arkta/project-prefix-map arkta/project-prefix-map) | ||
| 141 | :bind (("C-c p" . arkta/project-prefix-map))) | ||
| 142 | |||
| 143 | (provide 'arkta-project) | ||