Skip to content

Latest commit

 

History

History
821 lines (730 loc) · 26.5 KB

config.org

File metadata and controls

821 lines (730 loc) · 26.5 KB

Global configs

Table of coqntents

Common configs

Transparencia

(add-to-list 'default-frame-alist '(alpha . 95))

Babel lenguajes

(org-babel-do-load-languages
'org-babel-load-languages
'((shell . t)))

Interfza

(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(global-visual-line-mode nil)

(setq inhibit-startup-screen t)    ;; Desactiva la pantalla de inicio
(setq inhibit-startup-message t)   ;; Desactiva el mensaje de inicio

Ajuste de lineas

;; hace que las lineas se extiendan mas aya del editor si es necesario
(global-visual-line-mode -1)
(setq-default truncate-lines t)
(setq-default truncate-string-ellipsis "")

Dired and columns/row

;; Mostrar el número de columna en el modo de línea
(column-number-mode)

;; Desactivar la visualización de números de columna en org-mode
(add-hook 'org-mode-hook (lambda () (column-number-mode -1)))
;; Habilitar los números de línea en la izquierda en modos de programación
(add-hook 'prog-mode-hook
          (lambda ()
            (display-line-numbers-mode 1)))
;; Ajustar el formato de los números de línea con espacio adicional
(setq display-line-numbers-width-start t)

;; Ocultar archivos ocultos en dired
(require 'dired-x)
(setq dired-omit-files "^\\...+$")
(add-hook 'dired-mode-hook (lambda () (dired-omit-mode 1)))

;; dont ask when kill buffer
(global-set-key [remap kill-buffer] #'kill-this-buffer)

Reload config

(defun reload-config ()
  (interactive)
  (load-file user-init-file)
  (load-file user-init-file))

Font

(set-frame-font "DejaVu Sans Mono-13" nil t)

Recent files

(use-package recentf
  :defer 2
  :bind ("C-c C-r" . recentf-open-files)
  :init (recentf-mode)
  :custom
  (recentf-max-menu-items 10)
  (recentf-max-saved-items 50)
  (recentf-exclude (list "COMMIT_EDITMSG"
                         "~$"
                         "/scp:"
                         "/ssh:"
                         "/sudo:"
                         "diario.*"
                         "recentf*"
                         "bookmark*"
                         "/archivo*"
                         "birthday*"
                         "*elpa/*"
                         "/tmp/"
                         "drafts/*"
                         "/.elfeed"
                         "/.telega"
                         "/.config"
                         "~/.emacs.d/s*"))
    :config (run-at-time nil (* 5 60) 'recentf-save-list))

keybindings

;; Additional configurations
;; Move between windows using Meta key
(global-set-key [M-left] 'windmove-left)
(global-set-key [M-right] 'windmove-right)
(global-set-key [M-up] 'windmove-up)
(global-set-key [M-down] 'windmove-down)

;; Zoom in/out with mouse
(global-set-key [C-mouse-4] 'text-scale-increase)
(global-set-key [C-mouse-5] 'text-scale-decrease)

;; Incrementa el tamaño de la fuente
(global-set-key (kbd "C-+") 'text-scale-increase)
;; Disminuye el tamaño de la fuente
(global-set-key (kbd "C--") 'text-scale-decrease)

;; undo and redo
(global-unset-key (kbd "C-z"))
(global-set-key (kbd "C-z") 'undo)

;; org-agenda
(global-set-key (kbd "<f7>") 'org-agenda)
;; F10 para ir al Dashboard
(global-set-key (kbd "<f10>") 'open-dashboard)

;; recen files
(global-set-key (kbd "C-c r") 'counsel-recentf)

Package Manager -elpaca-

 (defvar elpaca-installer-version 0.7)
 (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
 (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
 (defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
 (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
				:ref nil :depth 1
				:files (:defaults "elpaca-test.el" (:exclude "extensions"))
				:build (:not elpaca--activate-package)))
 (let* ((repo  (expand-file-name "elpaca/" elpaca-repos-directory))
	 (build (expand-file-name "elpaca/" elpaca-builds-directory))
	 (order (cdr elpaca-order))
	 (default-directory repo))
   (add-to-list 'load-path (if (file-exists-p build) build repo))
   (unless (file-exists-p repo)
     (make-directory repo t)
     (when (< emacs-major-version 28) (require 'subr-x))
     (condition-case-unless-debug err
	  (if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
		   ((zerop (apply #'call-process `("git" nil ,buffer t "clone"
						   ,@(when-let ((depth (plist-get order :depth)))
						       (list (format "--depth=%d" depth) "--no-single-branch"))
						   ,(plist-get order :repo) ,repo))))
		   ((zerop (call-process "git" nil buffer t "checkout"
					 (or (plist-get order :ref) "--"))))
		   (emacs (concat invocation-directory invocation-name))
		   ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
					 "--eval" "(byte-recompile-directory \".\" 0 'force)")))
		   ((require 'elpaca))
		   ((elpaca-generate-autoloads "elpaca" repo)))
	      (progn (message "%s" (buffer-string)) (kill-buffer buffer))
	    (error "%s" (with-current-buffer buffer (buffer-string))))
	((error) (warn "%s" err) (delete-directory repo 'recursive))))
   (unless (require 'elpaca-autoloads nil t)
     (require 'elpaca)
     (elpaca-generate-autoloads "elpaca" repo)
     (load "./elpaca-autoloads")))
 (add-hook 'after-init-hook #'elpaca-process-queues)
 (elpaca `(,@elpaca-order))
 (elpaca elpaca-use-package
 :ensure t
 (elpaca-use-package-mode))

Flycheck

(elpaca flycheck
  :ensure t
  :init(global-flycheck-mode))

imenu-list

Esto permite explorar mis programas de manera mas rapida e inteligente

(elpaca imenu-list
  :ensure t)
;(setq imenu-list-focus-after-activation t)
(setq imenu-list-auto-resize t)
;; seteamos los shortcuts
(global-set-key (kbd "C-c i") #'imenu-list-smart-toggle)

Ef-themes

Estos son los ef-themes, esta configuracion setea el theme que mas me gusta por defecto -summer-. Ademas, gracias a las cualidades de ef-themes puedes seleccionar mas de un tema con el cual cambiar.

Ademas, tengo configurado que dependiendo de la hora uso el tema claro o el escuro.

(use-package ef-themes
  :ensure t
  :demand t
  :config
  (load-theme 'ef-reverie :no-confirm))
(setq ef-themes-to-toggle '(ef-reverie ef-rosa))

Beacon

;; Desactivar el parpadeo del cursor y cambiarlo a tipo barra
(blink-cursor-mode 0)
(setq-default cursor-type 'bar)

;; Configuración de beacon usando elpaca
(elpaca beacon
  :ensure t
;; Configurar el color del resplandor a un rozado muy fuerte
(setq beacon-color "#FF69B4")

;; Reducir el tamaño del resplandor
(setq beacon-size 20)

;; Variable para almacenar el tiempo desde el último movimiento del cursor
(defvar my-last-cursor-move-time 0)

;; Función para mostrar el resplandor periódicamente cuando el cursor está quieto
(defun my-beacon-periodic-blink ()
"Muestra el resplandor si el cursor ha estado quieto por más de 1 segundo."
(let ((idle-time (- (float-time) my-last-cursor-move-time)))
      (when (>= idle-time 1)  ;; Verificar si el cursor ha estado inactivo por 1 segundo
        (beacon-blink))))

  ;; Función para manejar el movimiento del cursor y el resplandor inmediato
  (defun my-beacon-on-cursor-move ()
    "Muestra el resplandor inmediatamente al mover el cursor y actualiza el tiempo."
    ;; Actualizar el tiempo del último movimiento del cursor
    (setq my-last-cursor-move-time (float-time))
    ;; Mostrar el resplandor inmediatamente
    (beacon-blink))

  ;; Ejecutar el resplandor periódico cada 0.8 segundos
  (run-with-timer 0 1 'my-beacon-periodic-blink)

  ;; Hook para mostrar el resplandor inmediatamente al mover el cursor
  (add-hook 'post-command-hook 'my-beacon-on-cursor-move)

  ;; Habilitar el modo beacon
  (beacon-mode 1))

Highlight-indent-guide

(use-package highlight-indent-guides
  :ensure t
  :hook (prog-mode . highlight-indent-guides-mode)
  :config
  ;; Configurar el método de guía de indentación a 'bitmap
  (setq highlight-indent-guides-method 'bitmap)
  ;; (setq highlight-indent-guides-character "|")
  ;; Configurar el color de los guías de indentación
  (custom-set-faces
   '(highlight-indent-guides-stack-odd-face ((t (:background "gray20"))))
   '(highlight-indent-guides-stack-even-face ((t (:background "gray40"))))
   '(highlight-indent-guides-character-face ((t (:foreground "dim gray"))))
   '(italic ((t (:slant italic))))))

All-the-icons

(use-package all-the-icons
 :ensure t
 :if (display-graphic-p))

(use-package all-the-icons-dired
:ensure t
:if (display-graphic-p))
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)

Dashboard

  ;; Configuración del `dashboard` en Emacs usando `elpaca`
(setq user-full-name "Cesar M.")
(setq dashboard-icon-type 'all-the-icons) ;; Usa `all-the-icons` para íconos personalizados.

(use-package dashboard
  :ensure t
  :config
  ;; Configuración básica de banner y título
  ;(global-page-break-lines-mode 1) ;; Habilita líneas de página a nivel global (requiere `page-break-lines`)

  ;; Configuración de banner
  (setq dashboard-startup-banner 'logo) ;; Usa el logo de Emacs
  (setq dashboard-banner-logo-title (format "Buen día %s" user-full-name))
  (setq dashboard-center-content t)
  (setq dashboard-set-heading-icons t)
  (setq dashboard-set-file-icons t)

  ;; Configura los elementos a mostrar en el dashboard
  (setq dashboard-items '((recents   . 5)
                          (bookmarks . 5)
                          (agenda    . 5)
                          (projects  . 5)
                          (registers . 5)))

  ;; Habilita el dashboard en el inicio
  (dashboard-setup-startup-hook)

  ;; Configuración de íconos y navegación
  (setq dashboard-set-init-info t)
  (setq dashboard-set-navigator t)
  (setq dashboard-navigator-buttons
        `(
          ((,(all-the-icons-octicon "mark-github" :height 1.1 :v-adjust 0.0)
            "GitHub" "Visitar mi GitHub" (lambda (&rest _) (browse-url "https://github.com/kascesar")))
           (,(all-the-icons-faicon "linkedin" :height 1.1 :v-adjust 0.0)
            "LinkedIn" "Visitar mi LinkedIn" (lambda (&rest _) (browse-url "https://linkedin.com/in/csarmaraya")))
           (,(all-the-icons-faicon "envelope" :height 1.1 :v-adjust 0.0)
            "Email" "Enviar un correo" (lambda (&rest _) (compose-mail))))))

  ;; Personaliza el orden de widgets
  (setq dashboard-startupify-list
        '(dashboard-insert-banner
          dashboard-insert-newline
          dashboard-insert-banner-title
          dashboard-insert-navigator
          dashboard-insert-init-info
          dashboard-insert-items
          dashboard-insert-footer))
)

Vertico

(elpaca vertico
 :ensure t
 :config
 (setq vertico-cycle t)
 (setq vertico-resize nil)
 (vertico-mode 1))

Marginalia

(elpaca marginalia
  :ensure t
  :config
  (marginalia-mode 1))

Consult

keysorderdesc
M-s M-gcounsult-grepbuscar recursivamente
M-s M-fcounsult-find
M-s M-ocounsult-outlinebuscar en el header
C-fcounsult-linebuscar en el bufer
C-Fcounsult-line-multibuscar en todos los bufer
C-x bcounsult-buferbuscar bufers

En el bufer puedes hacer las siguientes cosas

  • b SPC para bufers
  • SPC hiden bufers
  • * modified bufers
  • f Files
  • f Files registers
  • m SPC bookmarks
  • p Project
  • add custom for more
(use-package consult
  :ensure t
  :bind (;; A recursive grep
         ("C-f" . consult-grep)
         ;; Search for files names recursively
         ("M-s M-f" . consult-find)
         ;; Search through the outline (headings) of the file
         ("M-s M-o" . consult-outline)
         ;; Search the current buffer
         ("C-S" . consult-line)
         ;; Switch to another buffer, or bookmarked file, or recently
         ;; opened file.
         ("C-x b" . consult-buffer)
         ("C-s" . consult-line-multi)))

rainbow

(elpaca rainbow-mode
:ensure t
:demand t)
(add-hook 'org-mode-hook 'rainbow-mode)
(add-hook 'prog-mode-hook 'rainbow-mode)

ORG [5/6]

  • [X] elipsis icono para identificar que parte del archivo ha sido contraido
  • [X] toc permite crear un indice interactivo en el archivo org
  • [X] agenda y super-agenda gestores y mejoras de agenda de org-mode
  • [X] modern agrega muchas mejoras visuales que emjoran la apariencia de los archivos org
  • [ ] modern-ident mejora la identacion de los bloques de codigo (no me funciona)
  • [X] bullets son unos cambios para las stars en org-mode
;; Aspecto mejorado al identar
;(add-hook 'org-mode-hook 'org-indent-mode)
;; recomendacion de codigo en org-mode
(defun org-mode-setup ()
(set (make-local-variable 'company-backends)
     '((company-dabbrev company-yasnippet)))) ;; Para sugerencias de palabras y snippets

(add-hook 'org-mode-hook #'company-mode)
(add-hook 'org-mode-hook #'org-mode-setup)
(setq company-dabbrev-other-buffers t)

;; ocultamos los caracteres especiales
(setq org-hide-emphasis-markers t)
;; Aspecto mejorado al identar
;(add-hook 'org-mode-hook 'org-indent-mode)
;; recomendacion de codigo en org-mode
(defun org-mode-setup ()
(set (make-local-variable 'company-backends)
     '((company-dabbrev company-yasnippet))))

(add-hook 'org-mode-hook #'company-mode)
(add-hook 'org-mode-hook #'org-mode-setup)
(setq company-dabbrev-other-buffers t)

;; ocultamos los caracteres especiales
(setq org-hide-emphasis-markers t)

;; configuraciones de tags y estado de las tareas

(global-set-key (kbd "C-c l") #'org-store-link)
(global-set-key (kbd "C-c a") #'org-agenda)
(global-set-key (kbd "C-c c") #'org-capture)

(use-package org
:config
(setq org-log-done 'time)
(setq org-log-into-drawer t)

(setq org-todo-keywords
      '((sequence "PORHACER(p!)"
                  "ENPROCESO(e!)"
                  "BLOQUEADO(b!)"
                  "DETENIDO(d!)"
                  "|"
                  "HECHO(h!)"
                  "ARCHIVAR(a!)")))

 (setq org-todo-keyword-faces
       '(("PORHACER" . "red")
         ("ENPROCESO" . "magenta")
         ("BLOQUEADO" . "orange")
         ("HECHO" . "green")))

(setq org-file-apps
    '(("\\.html\\'" . browse-url-firefox)))

(advice-add 'org-refile :after 'org-save-all-org-buffers)


(setq org-tag-alist '(("@nota" . ?n)
                      ("@casa" . ?c)
                      ("@finanzas" . ?d)
                      ("@fecha" . ?f)
                      ("@salud" . ?s)
                      ("@tarea" . ?t)
                      ("@coche" . ?h)
                      ("@trabajo" . ?b)
                      ("@personal" . ?p)
                      ("crypt" . ?C)
                      ("TOC_4" . ?i))
      )
(setq org-tags-exclude-from-inheritance '("crypt"))

;; Progress Logging
;; When a TODO item enters DONE, add a CLOSED: property with current date-time stamp and into drawer
(setq org-log-done 'time)
(setq org-log-into-drawer "state-book")
(setq org-tags-column 81))

org-elipsis

(use-package org
:config
(setq org-ellipsis  ""))

org-toc (table of contents)

(elpaca toc-org
  :ensure t
  :demand t)
(add-hook 'org-mode-hook 'toc-org-mode)

org-agenda & super-agenda

	(elpaca org-super-agenda
	    :config
	    (org-super-agenda-mode))

	  (setq org-agenda-skip-scheduled-if-done t
		org-agenda-skip-deadline-if-done t
		org-agenda-compact-blocks t
		org-agenda-window-setup 'current-window
		org-agenda-start-on-weekday 1
		org-deadline-warning-days 7
		org-agenda-time-grid '((daily today require-timed))
		org-agenda-custom-commands
		'(
		  ("x" "Vista trabajo"
		   ((agenda "" ((org-agenda-span 3)
				(org-super-agenda-groups
				 '((:name "Hoy"
					  :discard (:tag "@personal")
					  :time-grid t
					  :scheduled past
					  :deadline past
					  :date today
					  :order 1)))))
		    (alltodo "" ((org-agenda-overriding-header "")
				 (org-super-agenda-groups
				  '((:discard (:tag "personal" ))
				    (:name "Vencimiento hoy"
					   :deadline today
					   :order 5)
				    (:name "Próximamente"
					   :deadline future
					   :order 11)
				    (:name "Atrasado"
					   :scheduled past
					   :deadline past
					   :order 12)
				    (:name "Por hacer"
					    ;:discard (:scheduled future :deadline future)
					   :todo "PORHACER"
					   :order 12)
				    (:name "Esperando"
					   :todo "BLOQUEADO"
					   :order 14)))))
		    (tags "trabajo/HECHO"
			  ((org-agenda-overriding-header " Tareas Hechas")))))

		  ("z" "Vista personal"
		   ((agenda "" ((org-agenda-span 3)
				(org-super-agenda-groups
				 '((:name "Hoy"
					  :discard (:tag "@trabajo" :scheduled past :deadline past)
					  :time-grid t
					  :date today
					  :scheduled today
					  :order 1)
				   (:name ""
					  :tag "agenda"
					  :todo "Aniversarios")))))
		    (alltodo "" ((org-agenda-overriding-header "")
				 (org-super-agenda-groups
				  '((:discard (:tag "trabajo" ))
				    (:name "Vencimiento hoy"
					   :deadline today
					   :order 5)
				    (:name "Atrasado"
					   :scheduled past
					   :deadline past
					   :order 11)
				    (:name "Por hacer"
					   :discard (:scheduled future :deadline future)
					   :todo "PORHACER"
					   :order 12)
				    (:name "Esperando"
					   :todo "BLOQUEADO"
					   :order 14)))))
		    (tags "personal/HECHO"
			  ((org-agenda-overriding-header " Tareas Hechas")))))
		  ))
 

 (setq calendar-month-name-array
	["Enero" "Febrero" "Marzo" "Abril" "Mayo" "Junio"
	 "Julio"    "Agosto"   "Septiembre" "Octubre" "Noviembre" "Diciembre"])

 (setq calendar-day-name-array
	["Domingo" "Lunes" "Martes" "Miércoles" "Jueves" "Viernes" "Sábado"])

 (setq org-icalendar-timezone "America/Santiago") ;; timezone
 (setq calendar-week-start-day 1) ;; la semana empieza el lunes
 (setq european-calendar-style t) ;; estilo europeo

org-modern-indent

(add-hook 'org-mode-hook 'org-indent-mode)
  (use-package compat
    :ensure (:wait t)
    :demand t)
(use-package org-modern-indent
  :load-path "~/.emacs.d/org-modern-indent/"
  :after org-modern 
  :config
  (add-hook 'org-mode-hook #'org-modern-indent-mode 90)) 

org-modern

(use-package org-modern
 :ensure '(org-modern :host github :repo "minad/org-modern")
 :custom
 (org-modern-hide-stars nil)               ; Mantiene las estrellas visibles para evitar indentación adicional
 (org-modern-table t)                      ; Activa la modernización de tablas
 (org-modern-list '((?* . "") (?+ . ""))) ; Define símbolos para listas de Org
 (org-modern-checkbox '((?X . "") (?- . "") (?\s . ""))) ; Define símbolos para checkboxes
 (org-modern-star '("" "" "" ""))     ; Define símbolos para encabezados
 (org-modern-block-name '("" . ""))        ; Personaliza los bloques de código (para alinear mejor los bordes superiores)
 :hook
 (org-mode . org-modern-mode)
 (org-agenda-finalize . org-modern-agenda))

org-bullets

(use-package org-bullets-mode
:ensure org-bullets
:config
:hook org-mode)

Calendar

  (use-package calfw
  :ensure t
  (calfw
    :host github
    :repo "kiwanami/emacs-calfw")
  :config
  (setq cfw:org-overwrite-default-keybinding t))

(use-package calfw-org
    :ensure t
    :config
    (setq cfw:org-overwrite-default-keybinding t)
    :bind ([f8] . cfw:open-org-calendar))

(setq calendar-month-name-array
      ["Enero" "Febrero" "Marzo" "Abril" "Mayo" "Junio"
       "Julio"    "Agosto"   "Septiembre" "Octubre" "Noviembre" "Diciembre"])

(setq calendar-day-name-array
      ["Domingo" "Lunes" "Martes" "Miércoles" "Jueves" "Viernes" "Sábado"])

(setq org-icalendar-timezone "America/Santiago")
(setq calendar-week-start-day 1)
(setq european-calendar-style t)

Python

Aqui configuro LSP de tal forma que quede preparado para desarrollo en Emacs.

Pylsp Servidor de python de microsoft

pip install -U 'python-lsp-server[all]' black isort pyright ruff

Ahora, configuramos el entorno de desarrollo de emacs para python

(use-package lsp-pyright
:ensure t
:custom (lsp-pyright-langserver-command "pyright")
:hook (python-mode . (lambda ()
                        (require 'lsp-pyright)
                        (lsp))))

(add-to-list 'load-path "~/.emacs.d/flymake-ruff")
(elpaca flymake-ruff
  :ensure t)
(add-hook 'python-mode-hook #'flymake-ruff-load)

(use-package lsp-mode
  :ensure t
  :commands (lsp lsp-deferred)
  :hook (python-mode . lsp-deferred)
  :config
  (require 'lsp-pyright))

;; herramientas adicionales
(use-package python-black
:ensure t
:hook (python-mode . python-black-on-save-mode))

(use-package py-isort
:ensure t
:hook (python-mode . py-isort-before-save))

marcar las columnas mas largas que 80 caracteres

(add-to-list 'load-path "~/.emacs.d/column-marker/")
(require 'column-marker)

;; Corrige el lambda en el hook
(add-hook 'python-mode-hook (lambda () (column-marker-1 80)))

company

(use-package company
  :ensure t
  :defer 2
  :custom
  (company-begin-commands '(self-insert-command))
  (company-idle-delay .1)
  (company-minimum-prefix-length 2)
  (company-show-numbers t)
  (company-tooltip-align-annotations 't)
  (global-company-mode t))

git [3/3]

Estos son los paquetes que suelo usar con git en mi dia a dia para desarrollo

  • [X] magit es un gestor de repositorios git interactivo y muy poderoso
  • [X] git-gutter muestra en los archivos que lineas se agregan, elimina y modifica
  • [X] git-timemachine permite interactivamente las modificaciones se hicieron

Magit

(use-package transient :ensure t :demand t)
(use-package magit :ensure (:wait t) :demand t)

git-gutter

Esta herramienta agrega indicadores para identificar los cambios miesntras programo

(use-package git-gutter
  :ensure (:wait t)
  :demand t
  )
(global-git-gutter-mode +1)
(custom-set-variables
 '(git-gutter:modified-sign "M")
 '(git-gutter:added-sign "+")
 '(git-gutter:deleted-sign "-"))

git-timemachine

Herramienta que me permite observar un archivo de manera interactiva para ver sus versiones en tiempo real

(elpaca git-timemachine
:ensure t)

Tempo

Typing the below + TABExpands to …
<a’#+BEGIN_EXPORT ascii’ … ‘#+END_EXPORT
<c’#+BEGIN_CENTER’ … ‘#+END_CENTER’
<C’#+BEGIN_COMMENT’ … ‘#+END_COMMENT’
<e’#+BEGIN_EXAMPLE’ … ‘#+END_EXAMPLE’
<E’#+BEGIN_EXPORT’ … ‘#+END_EXPORT’
<h’#+BEGIN_EXPORT html’ … ‘#+END_EXPORT’
<l’#+BEGIN_EXPORT latex’ … ‘#+END_EXPORT’
<q’#+BEGIN_QUOTE’ … ‘#+END_QUOTE’
<s’#+BEGIN_SRC’ … ‘#+END_SRC’
<v’#+BEGIN_VERSE’ … ‘#+END_VERSE’
(require 'org-tempo)

end

(use-package emacs :ensure nil :config (setq ring-bell-function #'ignore))