332 lines
12 KiB
EmacsLisp
332 lines
12 KiB
EmacsLisp
;;; init-config.el --- Configuración de org-mode -*- lexical-binding: t -*-
|
||
|
||
;; Author: kj <webmaster@outcontrol.net>
|
||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||
|
||
;;; Commentary:
|
||
|
||
;; Aquí se encuentran todas las configuraciones relacionadas a org-mode.
|
||
;;
|
||
;; org-mode es un de los reclamos más potentes de Emacs. Aunque solo es
|
||
;; un formato de texto enrriquecido, básicamente algo similar a
|
||
;; markdown, Emacs es el que lo ha llevado muy bien y probalemente el que
|
||
;; mejor lo soporta.
|
||
;;
|
||
;; Cabe mencionar que este modo es también el predefinido para todo un
|
||
;; ecosistema dentro de Emacs, como es el caso de la agenda o la base de
|
||
;; conocimientos org-roam.
|
||
|
||
;;; Code:
|
||
(defun kj/org-hook ()
|
||
"Configuración para el hook de 'org-mode'."
|
||
|
||
(display-line-numbers-mode 0)
|
||
;; (variable-pitch-mode 1)
|
||
(visual-line-mode 1)
|
||
(visual-fill-column-mode 1)
|
||
|
||
;; Configuración de fonts
|
||
;; (set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face))
|
||
|
||
;; Ensure that anything that should be fixed-pitch in Org files appears that way
|
||
;; (set-face-attribute 'org-hide nil :inherit 'fixed-pitch)
|
||
;; (set-face-attribute 'org-block nil :foreground 'unspecified :inherit 'fixed-pitch)
|
||
;; (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
|
||
(setq org-fontify-quote-and-verse-blocks t) ;; Permitir configuración de bloques quote y verse.
|
||
;; (set-face-attribute 'org-block nil :underline nil :foreground nil :background "#282a36")
|
||
;; (set-face-attribute 'org-block-begin-line nil :underline nil :foreground nil :background "#1e1f28")
|
||
;; (set-face-attribute 'org-block-end-line nil :underline nil :foreground nil :background nil)
|
||
;; (set-face-attribute 'org-block-end-line nil :background 'unspecified)
|
||
(set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch))
|
||
(set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
|
||
(set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
|
||
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
|
||
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
|
||
|
||
;; (set-face-attribute 'org-block nil :background
|
||
;; (color-darken-name
|
||
;; (face-attribute 'default :background) 3))
|
||
|
||
;; (setq org-src-block-faces '(("emacs-lisp" (:background "#EEE2FF"))
|
||
;; ("python" (:background "#E5FFB8"))))
|
||
|
||
;; Tachar los elementos "DONE"
|
||
(set-face-attribute 'org-done nil :strike-through t)
|
||
(set-face-attribute 'org-headline-done nil
|
||
:strike-through t
|
||
:foreground "light gray")
|
||
|
||
;; Embellecer las prioridades
|
||
(setq org-highest-priority ?A
|
||
org-default-priority ?B
|
||
org-lowest-priority ?D) ;; Cambiar prioridades de A,B,C a A,B,C,D
|
||
(push '("[#A]" . "⚡" ) prettify-symbols-alist)
|
||
(push '("[#B]" . "🔥" ) prettify-symbols-alist)
|
||
(push '("[#C]" . "🐢" ) prettify-symbols-alist)
|
||
(push '("[#D]" . "☕" ) prettify-symbols-alist)
|
||
;; (push '("#+begin_quote" . "❝" ) prettify-symbols-alist)
|
||
;; (push '("#+end_quote" . "❞" ) prettify-symbols-alist)
|
||
;; (push '("#+begin_export" . "📤" ) prettify-symbols-alist)
|
||
;; (push '("#+end_export" . "⎯" ) prettify-symbols-alist)
|
||
;; (push '("#+begin_comment" . "📝" ) prettify-symbols-alist)
|
||
;; (push '("#+end_comment" . "⎯" ) prettify-symbols-alist)
|
||
;; (push '("#+begin_src" . "❯" ) prettify-symbols-alist)
|
||
;; (push '("#+end_src" . "⎯" ) prettify-symbols-alist)
|
||
;; (push '("#+begin_example" . "🦉" ) prettify-symbols-alist)
|
||
;; (push '("#+end_example" . "⎯" ) prettify-symbols-alist)
|
||
(prettify-symbols-mode)
|
||
|
||
;; Habilitar evaluación de lenguajes en org-mode (babel)
|
||
(org-babel-do-load-languages 'org-babel-load-languages
|
||
(append org-babel-load-languages
|
||
'(
|
||
(C . t)
|
||
(R . t)
|
||
(awk . t)
|
||
(calc . t)
|
||
(clojure . t)
|
||
(go . t)
|
||
(haskell . t)
|
||
(java . t)
|
||
(js . t)
|
||
(php . t)
|
||
(python . t)
|
||
(rust . t)
|
||
(translate . t)
|
||
(shell . t)
|
||
)))
|
||
;; No solicitar confirmación para evaluar
|
||
(setq org-confirm-babel-evaluate nil)
|
||
)
|
||
|
||
;; org-mode
|
||
(use-package org
|
||
:defer t
|
||
:ensure nil
|
||
:bind (("C-c a" . org-agenda)
|
||
("C-c c" . org-capture))
|
||
:hook
|
||
(org-mode . kj/org-hook)
|
||
:config
|
||
(setq org-ellipsis " ▾")
|
||
(setq org-hide-emphasis-markers t)
|
||
;;(setq org-startup-folded 'content)
|
||
|
||
(setq org-agenda-start-with-log-mode t)
|
||
(setq org-log-done 'time)
|
||
(setq org-log-into-drawer t)
|
||
(setq org-cycle-separator-lines -1)
|
||
|
||
;; Identación
|
||
(setq org-startup-indented t)
|
||
(setq org-src-preserve-indentation nil)
|
||
(setq org-edit-src-content-indentation 0)
|
||
(setq org-src-tab-acts-natively t)
|
||
|
||
;; Palabras claves del To Do de org-mode
|
||
(setq org-todo-keywords
|
||
;;'((sequence "☐" "✔" "⌛" "❌")))
|
||
'((sequence "TODO(t)" "DOING(n)" "WAITING(w)" "|" "DONE(d!)" "CANCELED(c!)")))
|
||
(setq org-todo-keyword-faces
|
||
'(("TODO" . "#ff6464")
|
||
("DOING" . "yellow")
|
||
("DONE" . "green")
|
||
("HOLD" . "orange")
|
||
("CANCELED" . "#aaa"))
|
||
)
|
||
|
||
;; Tachar los checkbox marcados como terminados
|
||
(defface org-checkbox-done-text
|
||
'((t (:foreground "#71696A" :strike-through t)))
|
||
"Face for the text part of a checked org-mode checkbox.")
|
||
|
||
(font-lock-add-keywords
|
||
'org-mode
|
||
`(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)"
|
||
1 'org-checkbox-done-text prepend))
|
||
'append)
|
||
|
||
;; Archivos a usarse en org-agenda
|
||
(setq org-agenda-files
|
||
'("~/Documentos/ORG/Agenda/Tareas.org")
|
||
)
|
||
|
||
;; Archivos entre los que se moverán las tareas
|
||
(setq org-refile-targets
|
||
'(("Archivo.org" :maxlevel . 1)
|
||
("Tareas.org" :maxlevel . 1)))
|
||
|
||
;; Guardar los archivos cuando se muevan tareas entre ellos
|
||
(advice-add 'org-refile :after 'org-save-all-org-buffers)
|
||
|
||
(setq org-capture-templates
|
||
`(("t" "Tareas")
|
||
("tt" "Tareas" entry (file+olp "~/Documentos/ORG/Agenda/Tareas.org")
|
||
"* TODO %? \n %a\n %i" :empty-lines 1)
|
||
)
|
||
)
|
||
|
||
;; Configuración de imágenes
|
||
(setq org-startup-with-inline-images t) ;; Mostrar por defecto las imágenes
|
||
(setq org-display-remote-inline-images 'cache) ;; Mostrar imágenes remotas
|
||
(setq org-image-actual-width 512)
|
||
)
|
||
|
||
;; Org-yt para soportar embebidos.
|
||
(use-package org-yt
|
||
:ensure (:host github :repo "TobiasZawada/org-yt")
|
||
:config
|
||
(defun org-http-image-data-fn (protocol link _description)
|
||
"Interpret LINK as an URL to an image file."
|
||
(when (and (image-type-from-file-name link)
|
||
(not (eq org-display-remote-inline-images 'skip)))
|
||
(if-let (buf (url-retrieve-synchronously (concat protocol ":" link)))
|
||
(with-current-buffer buf
|
||
(goto-char (point-min))
|
||
(re-search-forward "\r?\n\r?\n" nil t)
|
||
(buffer-substring-no-properties (point) (point-max)))
|
||
(message "Download of image \"%s\" failed" link)
|
||
nil)))
|
||
(org-link-set-parameters "http" :image-data-fun #'org-http-image-data-fn)
|
||
(org-link-set-parameters "https" :image-data-fun #'org-http-image-data-fn)
|
||
)
|
||
|
||
;; Los head "*" se ven como puntos
|
||
(use-package org-bullets
|
||
:defer t
|
||
:hook
|
||
(org-mode . org-bullets-mode)
|
||
:config
|
||
(setq org-bullets-bullet-list '("◉"
|
||
"○"
|
||
"●"
|
||
"◈"
|
||
"◇"
|
||
"◆"
|
||
"✸"
|
||
"✳"))
|
||
)
|
||
|
||
;; Mejora visualmente varias cosas de org
|
||
(use-package org-modern
|
||
:defer t
|
||
:ensure t
|
||
:hook ((org-mode . org-modern-mode)
|
||
(org-agenda . org-modern-mode))
|
||
:config
|
||
;; Me gustan varias cosas por defecto, así que desactivo aquí varias de las "mejoras"
|
||
(setq org-modern-table nil ;; Mejora visual de las tablas
|
||
org-modern-table-vertical 1 ;; Grosor de las líneas verticales de las tablas
|
||
org-modern-table-horizontal 0.2 ;; Grosor de las líneas horizontales de las tablas
|
||
org-modern-priority nil ;; Mejora de las prioridades (Arriba ya las puse bonitas con prettyfy-symbols, así que mejor está desactivado)
|
||
org-modern-todo nil ;; Mejora visual a las lista de tareas
|
||
org-modern-statistics nil ;; Mejora visual a las estadísticas de completado de uan tarea (ej: [50%] o [5/9])
|
||
org-modern-checkbox nil ;; Mejora de los checkboxes (a mi parecer se ven más feos, los por defecto ya están bonitos).
|
||
org-modern-keyword nil ;; Oculta el "#+" en los keywords de org
|
||
org-modern-block-name nil ;; Mejora visual para los org blocks (bloques de código, ejemplo, citas, etc.)
|
||
org-modern-star nil ;; Lista de bullets a usar en los headers (falla si se activa junto a org-bullets).
|
||
)
|
||
)
|
||
|
||
(use-package visual-fill-column
|
||
:defer t
|
||
:after (org)
|
||
:config
|
||
;; Tamaño de la columna
|
||
(setq-default visual-fill-column-width 150)
|
||
;; Centrar el texto
|
||
(setq-default visual-fill-column-center-text t
|
||
visual-fill-column-adjust-for-text-scale nil
|
||
visual-fill-column-enable-sensible-window-split t)
|
||
)
|
||
|
||
;; Segundo cerebro: Base de conocimientos en formato Zettelkasten
|
||
(use-package org-roam
|
||
:defer t
|
||
:ensure t
|
||
:bind (("<f4>" . org-roam-node-insert)
|
||
("<f3>" . org-roam-node-find))
|
||
:init
|
||
(setq org-roam-v2-ack t)
|
||
(setq org-roam-completion-system 'ivy)
|
||
:custom
|
||
(org-roam-directory "~/Documentos/ORG/Notas")
|
||
(org-roam-completion-everywhere t)
|
||
:config
|
||
(org-roam-setup))
|
||
|
||
;; Interface web para navegar en mi base de conocimientos.
|
||
(use-package org-roam-ui
|
||
:defer t
|
||
:ensure t
|
||
:config
|
||
(setq org-roam-ui-sync-theme t
|
||
org-roam-ui-follow t
|
||
org-roam-ui-update-on-save t
|
||
org-roam-ui-open-on-start t))
|
||
|
||
;; Continúa el formato de la lista cuando presionas enter.
|
||
(use-package org-autolist
|
||
:ensure t
|
||
:hook (org-mode . org-autolist-mode))
|
||
|
||
;; Org babel para PHP
|
||
(use-package ob-php
|
||
:defer t
|
||
:ensure t)
|
||
|
||
;; Org babel para GO
|
||
(use-package ob-go
|
||
:defer t
|
||
:ensure t)
|
||
|
||
;; Org babel para Rust
|
||
(use-package ob-rust
|
||
:defer t
|
||
:ensure t)
|
||
|
||
;; Org babel para traducciones (mediante google translate)
|
||
(use-package ob-translate
|
||
:defer t
|
||
:ensure t)
|
||
|
||
;; Org mode en modo presentación
|
||
(use-package org-present
|
||
:defer t
|
||
:after (org)
|
||
:config
|
||
(add-hook 'org-present-mode-hook
|
||
(lambda ()
|
||
(org-display-inline-images)
|
||
(org-present-hide-cursor)
|
||
(org-present-read-only)
|
||
))
|
||
(add-hook 'org-present-mode-quit-hook
|
||
(lambda ()
|
||
;; (org-remove-inline-images)
|
||
(org-present-show-cursor)
|
||
(org-present-read-write)))
|
||
|
||
(add-hook 'org-present-after-navigate-functions
|
||
(lambda ()
|
||
;; Show only top-level headlines
|
||
(org-overview)
|
||
;; Unfold the current entry
|
||
(org-show-entry)
|
||
;; Show only direct subheadings of the slide but don't expand them
|
||
(org-show-children)
|
||
))
|
||
)
|
||
|
||
;; Mostrar los caracteres ocultos de org mode al pasar con el cursor.
|
||
(use-package org-appear
|
||
:defer t
|
||
;; :hook (org-mode . org-appear-mode)
|
||
)
|
||
|
||
;; Polymode para org-mode
|
||
(use-package poly-org)
|
||
|
||
(provide 'init-org)
|
||
;;; init-org.el ends here
|