You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

14 KiB

use-package tips

Some notes about use-package

  • :ensure if true will install the package if not installed It won't update packages. See auto-package-update for keeping all packages up to date
  • :init keyword to execute code before a package is loaded. It accepts one or more foorms, up to the next keyword
  • :config can be used to execute code after a package is loaded. In cases where loading is done lazily (see more about autoloading below), this execution is deferred until after the autoload occurs
  • :custom permite configurar variables con syntaxis simplificada
  • :bind
  • bind-keymap
  • :mode and :interpreter
  • :magic
  • :hook
  • :if
  • :defer En general use-package intenta aplicar lazy loading, pero en algún paquete es necesario especificarlo explicitamente
  • :demand Este es el contrario del anterior, para paquetes que queremos cargar de inmediato
  • :diminish and :delight changes minormode display in status line

Interface tweaks

Some GUI optimizations

  (setq inhibit-x-resources t)     ; avoid problems with emacs daemon and cursor colors
  (set-face-attribute 'default nil :family "Mensch" :foundry "PfEd" :height 158)
  (setq inhibit-startup-message t) ; Eliminate FSF startup msg
  (setq frame-title-format "%b")   ; Put filename in titlebar
  (setq visible-bell t)            ; Flash instead of beep
  (set-scroll-bar-mode 'right)     ; Scrollbar placement
  (show-paren-mode t)              ; Blinking cursor shows matching parentheses
  (electric-pair-mode t)           ; electric-pair-mode on
  (setq column-number-mode t)      ; Show column number of current cursor location
  (mouse-wheel-mode t)             ; wheel-mouse support
  (setq fill-column 78)
  (setq auto-fill-mode t)                   ; Set line width to 78 columns...
  (setq-default indent-tabs-mode nil)       ; Insert spaces instead of tabs
  (setq-default tab-width 4)                ; set default tab 4 spaces
  (global-set-key "\r" 'newline-and-indent) ; turn autoindenting on
  ;(set-default 'truncate-lines t)          ; Truncate lines for all buffers
  (fset 'yes-or-no-p 'y-or-n-p)
  (setq sentence-end-double-space nil)
  ; delete trailing whitespace before saving
  (add-hook 'before-save-hook 'delete-trailing-whitespace)
  ;; Enable line numbers for some modes
  (dolist (mode '(;;text-mode-hook
                  prog-mode-hook
                  conf-mode-hook))
    (add-hook mode (lambda () (display-line-numbers-mode 1))))

  ;; Override some modes which derive from the above
  (dolist (mode '(org-mode-hook))
    (add-hook mode (lambda () (display-line-numbers-mode 0))))

Set encoding

Use utf-8 please

  ;; Set encoding
  (prefer-coding-system 'utf-8)

Some shortcuts

Useful shortcuts:

  • Revert buffer (recargar)
  • fichero org de configuración de emacs
  • fichero org ppal, aquí está todo
  • journal org file
  • org para el blog público, ideas para el blog
  • org para el blog privado
  • org notes file: para tomar una nota rápida, no lo uso mucho
  • phone org file: por si tomo notas en el teléfono, no lo uso mucho
  (global-set-key (kbd "<f5>") 'revert-buffer)
  ;; emacs configuration org file
  (global-set-key
   (kbd "\e\ec")
   (lambda () (interactive) (find-file "~/.emacs.d/myconfig.org")))
  ;; Main org file
  (global-set-key
   (kbd "\e\ei")
   (lambda () (interactive) (find-file "~/Dropbox/orgfiles/i.org")))
  ;; journal org file
  (global-set-key
   (kbd "\e\ej")
   (lambda () (interactive) (find-file "~/Dropbox/orgfiles/journal.org")))
  ;; Notes file
  (global-set-key
   (kbd "\e\en")
   (lambda () (interactive) (find-file "~/Dropbox/orgfiles/notes.org")))
  ;; public blog org file
  (global-set-key
   (kbd "\e\eb")
   (lambda () (interactive) (find-file "~/Dropbox/orgfiles/b.org")))
  ;; private blog file
  (global-set-key
   (kbd "\e\ep")
   (lambda () (interactive) (find-file "~/work/repos/Personal/blog/comacero_priv/content-org/blog_privado.org")))
  ;; phone org file
  (global-set-key
   (kbd "\e\eh")
   (lambda () (interactive) (find-file "~/share/Mob_orgzly/phone.org")))

  (global-set-key [C-tab] 'hippie-expand)                    ; expand
  (global-set-key [C-kp-subtract] 'undo)                     ; [Undo]
  (global-set-key [C-kp-multiply] 'goto-line)                ; goto line
  (global-set-key [C-kp-add] 'toggle-truncate-lines)         ; truncate lines
  (global-set-key [C-kp-divide] 'delete-trailing-whitespace) ; delete trailing whitespace
  (global-set-key [C-kp-decimal] 'completion-at-point)       ; complete at point
  (global-set-key [C-M-prior] 'previous-buffer)              ; previous-buffer
  (global-set-key [C-M-next] 'next-buffer)                   ; next-buffer

Own map

Defines own key map

  (define-prefix-command 'own-map)
  (global-set-key (kbd "C-ñ") 'own-map)
  (define-key own-map (kbd "y") 'aya-create)
  (define-key own-map (kbd "e") 'aya-expand)

General (a new binding system)

Have a look at doc

  ;; (use-package general)

Syntax highlight

Set maximum colors

  (cond ((fboundp 'global-font-lock-mode)        ; Turn on font-lock (syntax highlighting)
         (global-font-lock-mode t)               ; in all modes that support it
         (setq font-lock-maximum-decoration t))) ; Maximum colors

Kill buffer quick

Kill current buffer without questions

  ;;------------------------------------------------------------
  ;; Kill current buffer with C-Supr
  (defun geosoft-kill-buffer ()
    ;; Kill default buffer without the extra emacs questions
    (interactive)
    (kill-buffer (buffer-name))
    (set-name))
  (global-set-key [C-delete] 'geosoft-kill-buffer)

rainbow-delimiters

  (use-package rainbow-delimiters
    :hook (prog-mode . rainbow-delimiters-mode)
    )

which-key

Some help with composed hotkeys

  (use-package which-key
    :diminish
    :config
    (which-key-mode)
    (setq which-key-idle-delay 0.3)
    )

ace-windows

To jump to different windows easily

  (use-package ace-window
    :init
    (global-set-key [remap other-window] 'ace-window)
    (custom-set-faces
     '(aw-leading-char-face
       ((t (:inherit ace-jump-face-foreground :height 3.0)))))
    )

PCRE2el

Perl Compatible Regexes

  (use-package pcre2el
    :config
    (pcre-mode +1))

doom-modeline

A fancy modeline. Remember to execute M-x all-the-icons-install-fonts See this for fixing icons in terminal

  (use-package all-the-icons
    )
  (use-package doom-modeline
    :init
    (doom-modeline-mode 1)
    (setq doom-modeline-icon 1) ;; this fixes icons in emacs-client
    :custom
    (doom-modeline-height 15)
    ;;(doom-modeline-icon (display-graphic-p))
    )

color-theme

  ;; (use-package modus-operandi-theme)
  (use-package modus-themes)
  ;; (load-theme 'modus-operandi t)
  (load-theme 'modus-vivendi t)

  (use-package doom-themes
    :config
    ;; Global settings (defaults)
    (setq doom-themes-enable-bold t    ; if nil, bold is universally disabled
          doom-themes-enable-italic t) ; if nil, italics is universally disabled
    (load-theme 'doom-vibrant t)

    ;; Enable flashing mode-line on errors
    (doom-themes-visual-bell-config)

    ;; Enable custom neotree theme (all-the-icons must be installed!)
    (doom-themes-neotree-config)

    ;; or for treemacs users
    (setq doom-themes-treemacs-theme "doom-colors") ; use the colorful treemacs theme
    (doom-themes-treemacs-config)

    ;; Corrects (and improves) org-mode's native fontification.
    (doom-themes-org-config)
    )

Completion systems

Vertico (the choosed one)

Have a look here

  (use-package vertico
    :init
    (vertico-mode +1)
    :config
    ;; Different scroll margin
    ;; (setq vertico-scroll-margin 0)

    ;; Show more candidates
    ;; (setq vertico-count 20)

    ;; Grow and shrink the Vertico minibuffer
    ;; (setq vertico-resize t)

    ;; Optionally enable cycling for `vertico-next' and `vertico-previous'.
    (setq vertico-cycle t)
    )

Orderless

Have a look at repo

  (use-package orderless
    :init
    (icomplete-mode)
    :custom
    (completion-styles '(orderless))
    (completion-category-defaults nil)
    (completion-category-overrides '((file (styles partial-completion))))
    )

Marginalia

Check the doc

  (use-package marginalia
  :init
  (marginalia-mode +1)
  :bind
  (; ("M-A" . marginalia-cycle)    ;; Uncomment for global bind
   :map minibuffer-local-map
   ("M-A" . marginalia-cycle))
  )

Consult and Embark

Consult is a collection of programs using emacs completing-read You must read the doc!

  (use-package consult
    :bind
    ("C-c h" . consult-history)
    ("C-c m" . consult-mode-command)
    ("C-c k" . consult-kmacro)
    ;; C-x bindings (ctl-x-map)
    ("C-x M-:" . consult-complex-command)     ;; orig. repeat-complex-command
    ("C-x b" . consult-buffer)                ;; orig. switch-to-buffer
    )

Embark

The doc

  (use-package embark
    :bind
    (("C-." . embark-act)         ;; pick some comfortable binding
     ("C-;" . embark-dwim)        ;; good alternative: M-.
     ("C-h B" . embark-bindings)) ;; alternative for `describe-bindings'

    :init

    ;; Optionally replace the key help with a completing-read interface
    (setq prefix-help-command #'embark-prefix-help-command)

    :config

    ;; Hide the mode line of the Embark live/completions buffers
    (add-to-list 'display-buffer-alist
                 '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
                   nil
                    (window-parameters (mode-line-format . none))))
    )

  ;; Consult users will also want the embark-consult package.
  (use-package embark-consult
    :after (embark consult)
    :demand t ; only necessary if you have the hook below
    ;; if you want to have consult previews as you move around an
    ;; auto-updating embark collect buffer
    :hook
    (embark-collect-mode . consult-preview-at-point-mode))

Editor Enhancements

ripgrep

rg repo

  (use-package rg
    :bind
    ("C-c s" . rg-menu))

Buffer management

Bufler repo

  (use-package bufler
    )
  (defun sap/bufler-one-window (&optional force-refresh)
    (interactive "P")
    (bufler-list)
    (delete-other-windows)
    )

  (global-set-key (kbd "C-x C-b") 'sap/bufler-one-window)

Hydra

Hydra repo

  (use-package hydra)

Hydra for toggle

  (global-set-key
   (kbd "<f6> t")
   (defhydra hydra-toggle (:color pink)
     "
     _a_ abbrev-mode:       %`abbrev-mode
     _d_ debug-on-error:    %`debug-on-error
     _f_ auto-fill-mode:    %`auto-fill-function
     _l_ disp-line-num      %`display-line-numbers-mode
     _s_ flyspell-mode:     %`flyspell-mode
     _t_ truncate-lines:    %`truncate-lines
     _w_ whitespace-mode:   %`global-whitespace-mode
     "
     ("a" abbrev-mode nil)
     ("d" toggle-debug-on-error nil)
     ("f" auto-fill-mode nil)
     ("l" display-line-numbers-mode nil)
     ("s" flyspell-mode nil)
     ("t" toggle-truncate-lines nil)
     ("w" whitespace-mode nil)
     ("q" nil "quit"))
   )

Hydra for navigation

  (global-set-key
   (kbd "<f6> j")
   (defhydra gotoline
     (:pre (linum-mode 1)
           :post (linum-mode -1))
     "goto"
     ("t" (lambda () (interactive)(move-to-window-line-top-bottom 0)) "top")
     ("b" (lambda () (interactive)(move-to-window-line-top-bottom -1)) "bottom")
     ("m" (lambda () (interactive)(move-to-window-line-top-bottom)) "middle")
     ("e" (lambda () (interactive)(end-of-buffer)) "end")
     ("c" recenter-top-bottom "recenter")
     ("n" next-line "down")
     ("p" (lambda () (interactive) (forward-line -1))  "up")
     ("g" goto-line "goto-line")
     )
   )

next