diff --git a/config.org b/config.org index 1c76c0b..92b4fe5 100644 --- a/config.org +++ b/config.org @@ -31,10 +31,82 @@ #+end_src +** Prolog +#+begin_src emacs-lisp +(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t) +(autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t) +(autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t) +(setq prolog-system 'swi) +(setq auto-mode-alist (append '(("\\.pl$" . prolog-mode) + ("\\.m$" . mercury-mode)) + auto-mode-alist)) +#+end_src + +** Dired +#+begin_src emacs-lisp + (use-package dired-git + :hook + (dired-mode . dired-git-mode)) +#+end_src + ** Theme #+BEGIN_SRC emacs-lisp (use-package zenburn-theme) (load-theme 'zenburn t) + + (use-package vertico + :custom + (vertico-cycle t) ;; Enable cycling for `vertico-next/previous' + :init + (vertico-mode)) + + (use-package savehist + :init + (savehist-mode)) + + (use-package emacs + :custom + ;; Support opening new minibuffers from inside existing minibuffers. + (enable-recursive-minibuffers t) + ;; Hide commands in M-x which do not work in the current mode. Vertico + ;; commands are hidden in normal buffers. This setting is useful beyond + ;; Vertico. + (read-extended-command-predicate #'command-completion-default-include-p) + :init + ;; Add prompt indicator to `completing-read-multiple'. + ;; We display [CRM], e.g., [CRM,] if the separator is a comma. + (defun crm-indicator (args) + (cons (format "[CRM%s] %s" + (replace-regexp-in-string "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" "" crm-separator) + (car args)) + (cdr args))) + (advice-add #'completing-read-multiple :filter-args #'crm-indicator) + + (setq minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt)) + (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)) + + (use-package vertico-directory + :after vertico + :ensure nil + ;; More convenient directory navigation commands + :bind (:map vertico-map + ("RET" . vertico-directory-enter) + ("DEL" . vertico-directory-delete-char) + ("M-DEL" . vertico-directory-delete-word)) + ;; Tidy shadowed file names + :hook (rfn-eshadow-update-overlay . vertico-directory-tidy)) + + (use-package vertico-multiform + :after vertico + :load-path "~/.emacs.d/elpa/vertico-1.9/") + + (vertico-multiform-mode 1) + + (use-package vertico-posframe + :ensure t) + (setq vertico-posframe-parameters + '((left-fringe . 8) + (right-fringe . 8))) #+END_SRC ** Encoding @@ -58,31 +130,39 @@ ** Helm #+begin_src emacs-lisp - (use-package helm - :config (require 'helm-autoloads)) - (global-set-key (kbd "M-x") #'helm-M-x) - (helm-mode 1) + (use-package helm + :config (require 'helm-autoloads) + :bind - (setq helm-recentf-fuzzy-match t - helm-locate-fuzzy-match nil ;; locate fuzzy is worthless - helm-M-x-fuzzy-match t - helm-buffers-fuzzy-matching t - helm-semantic-fuzzy-match t - helm-apropos-fuzzy-match t - helm-imenu-fuzzy-match t - helm-lisp-fuzzy-completion t - helm-completion-in-region-fuzzy-match t) + (("M-x". 'helm-M-x) + ("C-x C-f" . 'helm-find-files))) + (helm-mode 1) + (use-package helm-make + :bind ("C-x m" . 'helm-make)) + (use-package helm-posframe) + (helm-posframe-enable) + (setq helm-recentf-fuzzy-match t + helm-locate-fuzzy-match nil ;; locate fuzzy is worthless + helm-M-x-fuzzy-match t + helm-buffers-fuzzy-matching t + helm-semantic-fuzzy-match t + helm-apropos-fuzzy-match t + helm-imenu-fuzzy-match t + helm-lisp-fuzzy-completion t + helm-completion-in-region-fuzzy-match t) #+end_src ** Company #+BEGIN_SRC emacs-lisp - (use-package company - :hook - (after-init . global-company-mode)) - (use-package company-box - :hook - (company-mode . company-box-mode)) + (use-package company + :hook + (after-init . global-company-mode) + :custom + (company-backends '(company-capf))) + (use-package company-box + :hook + (company-mode . company-box-mode)) #+END_SRC ** Smart parenthesis @@ -98,48 +178,42 @@ ** LSP #+begin_src emacs-lisp (use-package lsp-mode - :init - ;;set prefix - (setq lsp-keymap-prefix "C-c l") - (setq lsp-diagnostics-provider :flycheck) ; Use flycheck for diagnostics - (setq lsp-enable-snippet t) ; Enable snippet support - (setq company-idle-delay 0.2) ; Set delay for completion pop-up - (setq company-minimum-prefix-length 1) - (setq lsp-clients-clangd-executable "clangd") - - :hook - ((c-mode . lsp) - (latex-mode . lsp) - (python-mode . lsp) - (lsp-mode . lsp-enable-which-key-integration) - (before-save . lsp-format-buffer)) - :commands lsp - :bind - ("C-" . ff-find-other-file)) - (use-package lsp-ui - :init - (setq lsp-ui-doc-enable t - lsp-ui-position 'at-point) - :hook - (lsp-mode . lsp-ui-mode)) + :init + ;;set prefix + (setq lsp-keymap-prefix "C-c l") + (setq lsp-diagnostics-provider :flycheck) ; Use flycheck for diagnostics + (setq lsp-enable-snippet t) ; Enable snippet support + (setq company-idle-delay 0.2) ; Set delay for completion pop-up + (setq company-minimum-prefix-length 1) + (setq lsp-clients-clangd-executable "clangd") + :hook + ((prog-mode . lsp) + (c-mode . lsp) + (latex-mode . lsp) + (python-mode . lsp) + (lsp-mode . lsp-enable-which-key-integration) + ;;(before-save . lsp-format-buffer) + ) + :commands lsp + :bind + ("C-" . ff-find-other-file) + :custom + (lsp-prefer-capf t)) + (use-package helm-lsp - :commands helm-lsp-workspace-symbol) + :commands helm-lsp-workspace-symbol) (use-package which-key - :config - (which-key-mode)) -#+end_src - -** Eglot - -#+begin_src emacs-lisp - (use-package eglot) - (add-to-list 'eglot-server-programs '((c-mode) "clangd")) - (add-hook 'c-mode-hook 'eglot-ensure) + :config + (which-key-mode)) #+end_src * Key-binds +** Buffer +#+begin_src emacs-lisp + (keymap-global-set "M-a" 'switch-to-buffer) +#+end_src ** C *** Dereference arrow @@ -153,6 +227,7 @@ (insert "ù")) )) (keymap-global-set "ù" 'print-arrow) + (keymap-global-set "∇" 'Control-X-prefix) #+END_SRC @@ -203,191 +278,42 @@ :config (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) #+end_src -** Font -#+begin_src emacs-lisp - (font-lock-add-keywords 'org-mode - '(("^ *\\([-]\\) " - (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))) - (custom-theme-set-faces - 'user - '(variable-pitch ((t (:family "ETBembo" :height 220 :weight thin)))) - '(fixed-pitch ((t ( :family "Fira Code Retina" :height 200))))) - (let* ((variable-tuple - (cond ((x-list-fonts "ETBembo") '(:font "ETBembo")) - ((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro")) - ((x-list-fonts "Lucida Grande") '(:font "Lucida Grande")) - ((x-list-fonts "Verdana") '(:font "Verdana")) - ((x-family-fonts "Sans Serif") '(:family "Sans Serif")) - (nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro.")))) - (base-font-color (face-foreground 'default nil 'default)) - (headline `(:inherit default :weight bold :foreground ,base-font-color))) - - - ;; Headlines - (custom-theme-set-faces - 'user - `(org-level-8 ((t (,@headline ,@variable-tuple)))) - `(org-level-7 ((t (,@headline ,@variable-tuple)))) - `(org-level-6 ((t (,@headline ,@variable-tuple)))) - `(org-level-5 ((t (,@headline ,@variable-tuple)))) - `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1)))) - `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25)))) - `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.5)))) - `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75)))) - `(org-document-title ((t (,@headline ,@variable-tuple :height 2.0 :underline nil)))))) -#+end_src ** Emphasis markers #+begin_src emacs-lisp (setq org-hide-emphasis-markers t) #+end_src -** Hooks -*** Variable pitch mode +* Hooks +** Variable pitch mode #+begin_src emacs-lisp (add-hook 'org-mode-hook 'variable-pitch-mode) #+end_src -*** Visual line mode +** Visual line mode #+begin_src emacs-lisp (add-hook 'org-mode-hook 'visual-line-mode) #+end_src -** Custom faces -#+begin_src emacs-lisp -(custom-theme-set-faces - 'user - '(org-block ((t (:inherit fixed-pitch)))) - '(org-code ((t (:inherit (shadow fixed-pitch))))) - '(org-document-info ((t (:foreground "dark orange")))) - '(org-document-info-keyword ((t (:inherit (shadow fixed-pitch))))) - '(org-indent ((t (:inherit (org-hide fixed-pitch))))) - '(org-link ((t (:foreground "royal blue" :underline t)))) - '(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch))))) - '(org-property-value ((t (:inherit fixed-pitch))) t) - '(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch))))) - '(org-table ((t (:inherit fixed-pitch :foreground "#83a598")))) - '(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold :height 0.8)))) - '(org-verbatim ((t (:inherit (shadow fixed-pitch)))))) -#+end_src +** Menu bar +#+BEGIN_SRC emacs-lisp + (add-hook 'before-make-frame-hook (lambda () (menu-bar-mode -1))) +#+END_SRC + +** Tool bar + +#+BEGIN_SRC emacs-lisp + (add-hook 'before-make-frame-hook (lambda () (tool-bar-mode -1))) +#+END_SRC + +** Scroll bar +#+BEGIN_SRC emacs-lisp + (add-hook 'before-make-frame-hook (lambda () (scroll-bar-mode -1))) +#+END_SRC + + * Terminal #+begin_src emacs-lisp (use-package vterm) #+end_src -* Treemacs -#+begin_src emacs-lisp -(use-package treemacs - :ensure t - :defer t - :init - (with-eval-after-load 'winum - (define-key winum-keymap (kbd "M-0") #'treemacs-select-window)) - :config - (progn - (setq treemacs-collapse-dirs (if treemacs-python-executable 3 0) - treemacs-deferred-git-apply-delay 0.5 - treemacs-directory-name-transformer #'identity - treemacs-display-in-side-window t - treemacs-eldoc-display 'simple - treemacs-file-event-delay 2000 - treemacs-file-extension-regex treemacs-last-period-regex-value - treemacs-file-follow-delay 0.2 - treemacs-file-name-transformer #'identity - treemacs-follow-after-init t - treemacs-expand-after-init t - treemacs-find-workspace-method 'find-for-file-or-pick-first - treemacs-git-command-pipe "" - treemacs-goto-tag-strategy 'refetch-index - treemacs-header-scroll-indicators '(nil . "^^^^^^") - treemacs-hide-dot-git-directory t - treemacs-indentation 2 - treemacs-indentation-string " " - treemacs-is-never-other-window nil - treemacs-max-git-entries 5000 - treemacs-missing-project-action 'ask - treemacs-move-files-by-mouse-dragging t - treemacs-move-forward-on-expand nil - treemacs-no-png-images nil - treemacs-no-delete-other-windows t - treemacs-project-follow-cleanup nil - treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory) - treemacs-position 'left - treemacs-read-string-input 'from-child-frame - treemacs-recenter-distance 0.1 - treemacs-recenter-after-file-follow nil - treemacs-recenter-after-tag-follow nil - treemacs-recenter-after-project-jump 'always - treemacs-recenter-after-project-expand 'on-distance - treemacs-litter-directories '("/node_modules" "/.venv" "/.cask") - treemacs-project-follow-into-home nil - treemacs-show-cursor nil - treemacs-show-hidden-files t - treemacs-silent-filewatch nil - treemacs-silent-refresh nil - treemacs-sorting 'alphabetic-asc - treemacs-select-when-already-in-treemacs 'move-back - treemacs-space-between-root-nodes t - treemacs-tag-follow-cleanup t - treemacs-tag-follow-delay 1.5 - treemacs-text-scale nil - treemacs-user-mode-line-format nil - treemacs-user-header-line-format nil - treemacs-wide-toggle-width 70 - treemacs-width 35 - treemacs-width-increment 1 - treemacs-width-is-initially-locked t - treemacs-workspace-switch-cleanup nil) - - ;; The default width and height of the icons is 22 pixels. If you are - ;; using a Hi-DPI display, uncomment this to double the icon size. - ;;(treemacs-resize-icons 44) - - (treemacs-follow-mode t) - (treemacs-filewatch-mode t) - (treemacs-fringe-indicator-mode 'always) - (when treemacs-python-executable - (treemacs-git-commit-diff-mode t)) - - (pcase (cons (not (null (executable-find "git"))) - (not (null treemacs-python-executable))) - (`(t . t) - (treemacs-git-mode 'deferred)) - (`(t . _) - (treemacs-git-mode 'simple))) - - (treemacs-hide-gitignored-files-mode nil)) - :bind - (:map global-map - ("M-0" . treemacs-select-window) - ("C-x t 1" . treemacs-delete-other-windows) - ("C-x t t" . treemacs) - ("C-x t d" . treemacs-select-directory) - ("C-x t B" . treemacs-bookmark) - ("C-x t C-t" . treemacs-find-file) - ("C-x t M-t" . treemacs-find-tag))) - -(use-package treemacs-projectile - :after (treemacs projectile) - :ensure t) - -(use-package treemacs-icons-dired - :hook (dired-mode . treemacs-icons-dired-enable-once) - :ensure t) - -(use-package treemacs-magit - :after (treemacs magit) - :ensure t) - -(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode - :after (treemacs persp-mode) ;;or perspective vs. persp-mode - :ensure t - :config (treemacs-set-scope-type 'Perspectives)) - -(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode - :after (treemacs) - :ensure t - :config (treemacs-set-scope-type 'Tabs)) - - -#+end_src * Projectile #+begin_src emacs-lisp @@ -401,29 +327,6 @@ #+end_src * Misceleaneous -** Mac related -#+begin_src emacs-lisp -(setq mac-option-modifier nil - mac-command-modifier 'meta - x-select-enable-clipboard t) -#+end_src - -** Menu bar -#+BEGIN_SRC emacs-lisp -(menu-bar-mode -1) -#+END_SRC - -** Tool bar - -#+BEGIN_SRC emacs-lisp -(tool-bar-mode -1) -#+END_SRC - -** Scroll bar -#+BEGIN_SRC emacs-lisp -(scroll-bar-mode -1) -#+END_SRC - ** Global font #+begin_src emacs-lisp (set-face-attribute 'default nil :family "Cascadia Mono" :height 200) @@ -433,3 +336,15 @@ (use-package all-the-icons :if (display-graphic-p)) #+end_src + +** Delete backup files +#+begin_src emacs-lisp + +(setq make-backup-files nil) +#+end_src + +** Line numberring +#+begin_src emacs-lisp + (add-hook 'prog-mode-hook 'display-line-numbers-mode) +(setq-default tab-width 4) +#+end_src