diff --git a/emacs.d/init-literate.org b/emacs.d/init-literate.org index 03691a0..bf47314 100644 --- a/emacs.d/init-literate.org +++ b/emacs.d/init-literate.org @@ -7,7 +7,9 @@ - [[Acerca de este documento][Acerca de este documento]] - [[Configuración Genérica][Configuración Genérica]] - [[Iniciar paquetes elpa/melpa/marmalade][Iniciar paquetes elpa/melpa/marmalade]] + - [[Actualizar paquetes][Actualizar paquetes]] - [[Asegurarse de que use-package y el-get estan instalados y los inicializa][Asegurarse de que use-package y el-get estan instalados y los inicializa]] + - [[Hábitos][Hábitos]] - [[Moverse por el buffer][Moverse por el buffer]] - [[Establecer nombre y correo][Establecer nombre y correo]] - [[Abrir cómo buffer inicial][Abrir cómo buffer inicial]] @@ -20,6 +22,7 @@ - [[Helm][Helm]] - [[Buscar más eficazmente en Helm][Buscar más eficazmente en Helm]] - [[ivy-mode][ivy-mode]] + - [[counsel-dash][counsel-dash]] - [[Seguir enlaces simbólicos][Seguir enlaces simbólicos]] - [[Emparejar parentesis y otros][Emparejar parentesis y otros]] - [[Mantener lista de buffers recientes][Mantener lista de buffers recientes]] @@ -29,7 +32,6 @@ - [[Auto identación][Auto identación]] - [[Magit][Magit]] - [[Insertar licencia][Insertar licencia]] - - [[counsel-dash][counsel-dash]] - [[Borrar espacios sobrantes][Borrar espacios sobrantes]] - [[Usar ssh con tramp][Usar ssh con tramp]] - [[Golden Ratio][Golden Ratio]] @@ -40,6 +42,10 @@ - [[Sobreescribir al seleccionar texto][Sobreescribir al seleccionar texto]] - [[Imenu][Imenu]] - [[imenu-list][imenu-list]] + - [[Buffer \ast{}Scratch\ast{} persistente][Buffer \ast{}Scratch\ast{} persistente]] + - [[kill-this-buffer en vez de kil-buffer][kill-this-buffer en vez de kil-buffer]] + - [[Hydra][Hydra]] + - [[csv-mode][csv-mode]] - [[Aspecto][Aspecto]] - [[Tema cyberpunk][Tema cyberpunk]] - [[Powerline modificada][Powerline modificada]] @@ -71,6 +77,9 @@ - [[calfw][calfw]] - [[Tareas repetitivas][Tareas repetitivas]] - [[Cambiar el formato de CLOCKTABLE][Cambiar el formato de CLOCKTABLE]] + - [[Quitar tags de la agenda][Quitar tags de la agenda]] + - [[Comandos de Agenda][Comandos de Agenda]] + - [[Capturas de notas][Capturas de notas]] - [[Edición, diseño y varios][Edición, diseño y varios]] - [[Atajos de teclado][Atajos de teclado]] - [[Definir lenguajes que entiende babel][Definir lenguajes que entiende babel]] @@ -86,15 +95,11 @@ - [[org2nikola][org2nikola]] - [[Notas a pie de página][Notas a pie de página]] - [[toc-org][toc-org]] - - [[Cifrar archivos][Cifrar archivos]] - - [[Generar id para cabeceras de manera dinámica][Generar id para cabeceras de manera dinámica]] - - [[Hábitos][Hábitos]] - - [[org-protocol][org-protocol]] - - [[Empareja simbolos de marcado y paréntesis][Empareja simbolos de marcado y paréntesis]] - - [[Más profundidad en imenu][Más profundidad en imenu]] - - [[Capturas de notas][Capturas de notas]] - - [[Comandos de Agenda][Comandos de Agenda]] - - [[Temas para exportación en html][Temas para exportación en html]] + - [[Cifrar archivos][Cifrar archivos]] + - [[Más profundidad en imenu][Más profundidad en imenu]] + - [[Empareja simbolos de marcado y paréntesis][Empareja simbolos de marcado y paréntesis]] + - [[org-protocol][org-protocol]] + - [[Temas para exportación en html][Temas para exportación en html]] - [[Funciones personalizadas][Funciones personalizadas]] - [[Recargar todos los buffers abiertos][Recargar todos los buffers abiertos]] - [[Insertar cabeceras para org-mode][Insertar cabeceras para org-mode]] @@ -103,6 +108,7 @@ - [[Añadir soporte para editar archivos en docker][Añadir soporte para editar archivos en docker]] - [[Insertar fecha de hoy][Insertar fecha de hoy]] - [[Abrir eshell aquí][Abrir eshell aquí]] + - [[Reabrir buffer con sudo][Reabrir buffer con sudo]] * Acerca de este documento :PROPERTIES: @@ -113,35 +119,35 @@ Este documento está hecho en org-mode y es tanto mi configuración de emacs com Mi idea es que termine siendo más o menos un tutorial de emacs, tal vez extendido con los articulos del blog. A ver como sale. Se puede instalar mi configuración de emacs del siguiente modo: #+BEGIN_SRC bash :tangle no :eval no - git clone https://daemons.cf/cgit/dotfiles - cd dotfiles - ./instala.sh emacs +git clone https://daemons.cf/cgit/dotfiles +cd dotfiles +./instala.sh emacs #+END_SRC Que hace esto exactamente? Básicamente, instalar todos los paquetes y scripts mencionados en este documento. De un modo más extendido, lo que hace el script de =instala.sh= es esto (la explicación en los comentarios): #+BEGIN_SRC bash :tangle no :eval no - # Establece el directorio de las configuraciones, lo crea y las copia ahí - EMACSDIR="$HOME/.emacs.d" - mkdir -p $EMACSDIR - ln -sf $(pwd)/emacs.d/{init.el,init-literate.org} $EMACSDIR +# Establece el directorio de las configuraciones, lo crea y las copia ahí +EMACSDIR="$HOME/.emacs.d" +mkdir -p $EMACSDIR +ln -sf $(pwd)/emacs.d/{init.el,init-literate.org} $EMACSDIR - # crear private-literate.org si no existe para que no se queje init.el - if [[ ! -e $EMACSDIR/private-literate.org ]] - then - echo -e "* Vacio\n#+BEGIN_SRC emacs-lisp\n#+END_SRC" > $EMACSDIR/private-literate.org - fi +# crear private-literate.org si no existe para que no se queje init.el +if [[ ! -e $EMACSDIR/private-literate.org ]] +then + echo -e "* Vacio\n#+BEGIN_SRC emacs-lisp\n#+END_SRC" > $EMACSDIR/private-literate.org +fi - # Instalar todos los paquetes de emacs - emacs -Q --batch --eval "(ignore-errors (load-file \""$EMACSDIR/"init.el\"))" - emacs -Q --batch --eval "(ignore-errors (load-file \""$EMACSDIR/"init-literate.el\"))" - emacs -Q --batch --eval '(ignore-errors (load-file "/tmp/powerline.el"))' +# Instalar todos los paquetes de emacs +emacs -Q --batch --eval "(load-file \""$EMACSDIR/"init.el\")" +emacs -Q --batch --eval "(load-file \""$EMACSDIR/"init-literate.el\")" +emacs -Q --batch --eval "(load-file \"/tmp/powerline.el\"))" - # Por algún motivo al compilar desde el-get mete una ruta incorrecta en org-loaddefs.el - find $EMACSDIR -name 'org-loaddefs.el' | xargs sed -i "s,org-mode-maint/lisp/,,g" +# Por algún motivo al compilar desde el-get mete una ruta incorrecta en org-loaddefs.el +find $EMACSDIR -name 'org-loaddefs.el' | xargs sed -i "s,org-mode-maint/lisp/,,g" - # Necesito permiso de superusuario para copiar los scripts capture y demacs en /usr/local/bin/ - sudo ln -sf $(pwd)/emacs.d/{capture,demacs} /usr/local/bin/ +# Necesito permiso de superusuario para copiar los scripts capture y demacs en /usr/local/bin/ +sudo ln -sf $(pwd)/emacs.d/{capture,demacs} /usr/local/bin/ #+END_SRC Este archivo en formato org-mode está [[https://daemons.cf/cgit/dotfiles/plain/emacs.d/init-literate.org][aquí]]. Este archivo en formato HTML está [[https://daemons.cf/stories/mi-configuracin-de-emacs/][aquí]]. @@ -178,40 +184,56 @@ Me gusta que nada más abrirlo, me muestre la agenda, por eso está el =(org-age :END: Ahora mismo el repositorio de marmalade está comentado por que da un error al usarlo con https. Uso el de ojab.ru, que es un proxy a marmalade. #+BEGIN_SRC emacs-lisp - (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/") - ;;("marmalade" . "https://marmalade-repo.org/packages/") - ("marmalade" . "https://ojab.ru/marmalade/") - ("melpa" . "https://melpa.org/packages/"))) - (package-initialize) - - ;; Actualiza la lista de paquetes - (unless package-archive-contents - (package-refresh-contents)) +(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/") + ;;("marmalade" . "https://marmalade-repo.org/packages/") + ("marmalade" . "https://ojab.ru/marmalade/") + ("melpa" . "https://melpa.org/packages/"))) +(package-initialize) +#+END_SRC +** Actualizar paquetes +:PROPERTIES: +:CUSTOM_ID: Actualizar paquetes y hacer su instalación asíncrona +:END: +#+BEGIN_SRC emacs-lisp +(package-refresh-contents) #+END_SRC ** Asegurarse de que use-package y el-get estan instalados y los inicializa :PROPERTIES: :CUSTOM_ID: Asegurarse de que use-package y el-get estan instalados y los inicializa :END: #+BEGIN_SRC emacs-lisp - ;; Comprueba si use-package está instalado, sinó lo instala desde los repositorios - (unless (require 'use-package nil 'noerror) - (package-install 'use-package) - ) +;; Comprueba si use-package está instalado, sinó lo instala desde los repositorios +(unless (require 'use-package nil 'noerror) + (package-install 'use-package)) - (require 'use-package) +(require 'use-package) - ;; Añade la ruta de el-get - (add-to-list 'load-path (concat user-emacs-directory "el-get/el-get/")) +;; Añade la ruta de el-get +(add-to-list 'load-path (concat user-emacs-directory "el-get/el-get/")) - ;; Comprueba si el-get está instalado, sinó lo instala desde un gist - (unless (require 'el-get nil 'noerror) - ;; comprobar si existe el fichero a descargar, si existe no lo descarga - (if (not (file-exists-p "/tmp/el-get-install.el")) +;; Comprueba si el-get está instalado, sinó lo instala desde un gist +(unless (require 'el-get) + ;; comprobar si existe el fichero a descargar, si existe no lo descarga + (if (not (file-exists-p "/tmp/el-get-install.el")) (url-copy-file "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el" "/tmp/el-get-install.el")) - (load-file "/tmp/el-get-install.el") - ) + (load-file "/tmp/el-get-install.el")) - (use-package el-get) +(use-package el-get) +#+END_SRC +*** Hábitos +:PROPERTIES: +:CUSTOM_ID: Hábitos +:END: +#+BEGIN_SRC emacs-lisp +(use-package org-habit + :init + (add-to-list 'org-modules 'org-habit) + :config + (setq org-habit-preceding-days 7 + org-habit-following-days 0 + org-habit-graph-column 50 + org-habit-show-habits-only-for-today t + org-habit-show-all-today t)) #+END_SRC ** Moverse por el buffer :PROPERTIES: @@ -219,8 +241,8 @@ Ahora mismo el repositorio de marmalade está comentado por que da un error al u :END: Subir y bajar párrafos: #+BEGIN_SRC emacs-lisp - (global-set-key "\M-p" 'backward-paragraph) - (global-set-key "\M-n" 'forward-paragraph) +(global-set-key "\M-p" 'backward-paragraph) +(global-set-key "\M-n" 'forward-paragraph) #+END_SRC ** Establecer nombre y correo :PROPERTIES: @@ -236,7 +258,7 @@ Al exportar en org-mode, por ejemplo, coge estos valores. :CUSTOM_ID: Abrir cómo buffer inicial :END: #+BEGIN_SRC emacs-lisp - (setq initial-buffer-choice "~/Documentos/org/index.org") +(setq initial-buffer-choice "~/Documentos/org/index.org") #+END_SRC ** Iniciar cómo servidor :PROPERTIES: @@ -244,7 +266,7 @@ Al exportar en org-mode, por ejemplo, coge estos valores. :END: De este modo puedo usar =emacsclient= desde la terminal y la sesión de =emacs= existente. #+BEGIN_SRC emacs-lisp - (server-start) +(server-start) #+END_SRC ** Auto-guardado :PROPERTIES: @@ -252,13 +274,13 @@ De este modo puedo usar =emacsclient= desde la terminal y la sesión de =emacs= :END: Es bastante molesto que te vaya dejando la mierda por ahí, mejor en un directorio conjunto. #+BEGIN_SRC emacs-lisp - (defvar backup-dir (expand-file-name (concat user-emacs-directory "backup/"))) - (defvar autosave-dir (expand-file-name (concat user-emacs-directory "backup/"))) - (setq backup-directory-alist (list (cons ".*" backup-dir))) - (setq auto-save-list-file-prefix autosave-dir) - (setq auto-save-file-name-transforms `((".*" ,autosave-dir t))) - (setq tramp-backup-directory-alist backup-directory-alist) - (setq tramp-auto-save-directory autosave-dir) +(defvar backup-dir (expand-file-name (concat user-emacs-directory "backup/"))) +(defvar autosave-dir (expand-file-name (concat user-emacs-directory "backup/"))) +(setq backup-directory-alist (list (cons ".*" backup-dir))) +(setq auto-save-list-file-prefix autosave-dir) +(setq auto-save-file-name-transforms `((".*" ,autosave-dir t))) +(setq tramp-backup-directory-alist backup-directory-alist) +(setq tramp-auto-save-directory autosave-dir) #+END_SRC ** Modo por defecto :PROPERTIES: @@ -266,22 +288,22 @@ Es bastante molesto que te vaya dejando la mierda por ahí, mejor en un director :END: Al abrir un archivo o bufer sin algún modo asociado, se abrirá en modo texto. #+BEGIN_SRC emacs-lisp - (setq major-mode 'text-mode) +(setq major-mode 'text-mode) #+END_SRC ** Acepta 'y' o 'n' cuando pide 'yes' o 'no' :PROPERTIES: :CUSTOM_ID: Acepta 'y' o 'n' cuando pide 'yes' o 'no' :END: #+BEGIN_SRC emacs-lisp - (fset 'yes-or-no-p 'y-or-n-p) +(fset 'yes-or-no-p 'y-or-n-p) #+END_SRC ** Lenguaje por defecto en emacs y org-mode :PROPERTIES: :CUSTOM_ID: Lenguaje por defecto en emacs y org-mode :END: #+BEGIN_SRC emacs-lisp - (setq current-language-environment "Spanish") - (setq org-export-default-language "es") +(setq current-language-environment "Spanish") +(setq org-export-default-language "es") #+END_SRC ** Moverse por ventanas con shift :PROPERTIES: @@ -289,14 +311,14 @@ Al abrir un archivo o bufer sin algún modo asociado, se abrirá en modo texto. :END: No funciona en =org-mode=. #+BEGIN_SRC emacs-lisp - (when (fboundp 'windmove-default-keybindings) - (windmove-default-keybindings)) +(when (fboundp 'windmove-default-keybindings) + (windmove-default-keybindings)) #+END_SRC ** Helm :PROPERTIES: :CUSTOM_ID: Helm :END: -Copiado del git de helm. Esta es una configuración bastante mínima. Más información por [[http://daemons.cf/categories/helm/][aquí]]. Ahora mismo no está activo en mi configuración. +Copiado del git de helm. Esta es una configuración bastante mínima. Más información por [[http://daemons.cf/categories/helm/][aquí]]. Está activo, pero solo para counsel-dash. #+name:helm #+BEGIN_SRC emacs-lisp :tangle no @@ -343,89 +365,126 @@ Ivy es más liviano que helm, aunque más simple. Más información [[https://da #+name:ivy-mode #+BEGIN_SRC emacs-lisp - (unless (require 'ivy nil 'noerror) - (sleep-for 5)) +(unless (require 'ivy nil 'noerror) + (sleep-for 5)) - (use-package ivy - :init - ;; Añade los buffers de bookmarks y de recentf - (setq ivy-use-virtual-buffers t) - ;; Muestra las coincidencias con lo que se escribe y la posicion en estas - (setq ivy-count-format "(%d/%d) ") - ;; Un mejor buscador - (setq ivy-re-builders-alist - '((read-file-name-internal . ivy--regex-fuzzy) - (t . ivy--regex-plus))) - ;; No se sale del minibuffer si se encuentra un error - (setq ivy-on-del-error-function nil) - ;; ivy mete el simbolo ^ al ejecutar algunas ordenes, así se quita - (setq ivy-initial-inputs-alist nil) - ;; Dar la vuelta a los candidatos - (setq ivy-wrap t) - ;; Ver la ruta de los ficheros virtuales - (setq ivy-virtual-abbreviate 'full) - ;; Asegurarse de que están smex y flx - (use-package smex :ensure t) - (use-package flx :ensure t) - (use-package diminish :ensure t) - :config - (ivy-mode 1) - :diminish ivy-mode - :ensure t - ) +(use-package ivy + :init + ;; Añade los buffers de bookmarks y de recentf + (setq ivy-use-virtual-buffers t) + ;; Muestra las coincidencias con lo que se escribe y la posicion en estas + (setq ivy-count-format "(%d/%d) ") + ;; Un mejor buscador + (setq ivy-re-builders-alist + '((read-file-name-internal . ivy--regex-fuzzy) + (t . ivy--regex-plus))) + ;; No se sale del minibuffer si se encuentra un error + (setq ivy-on-del-error-function nil) + ;; ivy mete el simbolo ^ al ejecutar algunas ordenes, así se quita + (setq ivy-initial-inputs-alist nil) + ;; Dar la vuelta a los candidatos + (setq ivy-wrap t) + ;; Ver la ruta de los ficheros virtuales + (setq ivy-virtual-abbreviate 'full) + ;; Asegurarse de que están smex, flx, diminis y ivi-hydra + (use-package smex :ensure t) + (use-package flx :ensure t) + (use-package diminish :ensure t) + (use-package ivy-hydra :ensure t) + :config + (ivy-mode 1) + (setq magit-completing-read-function 'ivy-completing-read) + :diminish ivy-mode + :ensure t) - (use-package counsel - :bind ( - ;; Sustituir M-x - ("M-x" . counsel-M-x) - ;; Sustituir imenu - ("C-c b" . counsel-imenu) - ;; Sustituir find-file - ("C-x C-f" . counsel-find-file) - ;; Sustituir describe-function - ("C-h f" . counsel-describe-function) - ;; Sustituir describe-variable - ("C-h v" . counsel-describe-variable) - ;; Sustituir descbinds - ("C-h b" . counsel-descbinds) - ;; Sustituye helm-show-kill-ring - ("M-y" . counsel-yank-pop) - ) - :config - ;; usar ffap - (setq counsel-find-file-at-point t) - :ensure t - ) +(use-package counsel + :bind (;; Sustituir M-x + ("M-x" . counsel-M-x) + ;; Sustituir imenu + ("C-c b" . counsel-imenu) + ;; Sustituir find-file + ("C-x C-f" . counsel-find-file) + ;; Abrir ficheros del repo git + ("C-x f" . counsel-git) + ;; Sustituir describe-function + ("C-h f" . counsel-describe-function) + ;; Sustituir describe-variable + ("C-h v" . counsel-describe-variable) + ;; Sustituir descbinds + ("C-h b" . counsel-descbinds) + ;; Sustituye helm-show-kill-ring + ("M-y" . counsel-yank-pop) + :map ivy-minibuffer-map + ("M-y" . ivy-next-line-and-call) + ("C-c C-r" . ivy-resume) + ) + :config + ;; usar ffap + (setq counsel-find-file-at-point t) + :ensure t) - (use-package swiper - :bind ( - ;; Sustituir isearch - ("C-s" . swiper) - ("C-r" . swiper) - ) - :ensure t - ) +(use-package swiper + :bind (;; Sustituir isearch + ("C-s" . swiper) + ("C-r" . swiper)) + :ensure t) +#+END_SRC +*** counsel-dash +:PROPERTIES: +:CUSTOM_ID: counsel-dash +:END: +#+name:counsel-dash-conf +#+BEGIN_SRC emacs-lisp +(add-to-list 'el-get-sources '(:name counsel-dash + :description "counsel-dash" + :type github + :pkgname "nathankot/counsel-dash")) + +(if (not (el-get-package-installed-p 'counsel-dash)) + (progn + (package-install 'helm) + (package-install 'dash-functional) + (package-install 'helm-dash) + (el-get 'sync 'counsel-dash))) + +(use-package counsel-dash + :load-path "el-get/counsel-dash" + :init + (setq counsel-dash-docsets-path "~/.emacs.d/docsets") + (setq counsel-dash-common-docsets '("Bash" "Emacs Lisp" "HTML" "Markdown" "Nginx" "Python 3" "Docker" "Font_Awesome" "LaTeX" "MySQL" "Python 2" "SQLite")) + (setq counsel-dash-browser-func 'eww)) #+END_SRC +Auto-instala los docsets: +#+name: instala-docsets +#+BEGIN_SRC emacs-lisp +(setq local_docsets counsel-dash-common-docsets) +(while local_docsets + (setq docs (car local_docsets)) + (if (string-match "Python" docs) + (setq docs (replace-regexp-in-string " " "_" docs))) + (if (string-match "Emacs Lisp" docs) + (setq docs (replace-regexp-in-string " " "_" docs))) + (if (not (file-exists-p (concat counsel-dash-docsets-path "/" (car local_docsets) ".docset"))) + (counsel-dash-install-docset docs)) + (setq local_docsets (cdr local_docsets))) +#+END_SRC ** Seguir enlaces simbólicos :PROPERTIES: :CUSTOM_ID: Seguir enlaces simbólicos :END: #+BEGIN_SRC emacs-lisp - (setq vc-follow-symlinks t) +(setq vc-follow-symlinks t) #+END_SRC -#+RESULTS: -: t - ** Emparejar parentesis y otros :PROPERTIES: :CUSTOM_ID: Emparejar parentesis y otros :END: Empareja () [] {} y "". #+BEGIN_SRC emacs-lisp - (electric-pair-mode 1) +(electric-pair-mode 1) #+END_SRC ** Mantener lista de buffers recientes :PROPERTIES: @@ -434,24 +493,23 @@ Empareja () [] {} y "". Al usar ivy o helm y ejecutar =switch-buffer= (C-x b) se pueden ver los buffers que se han abierto recientemente si se tiene recentf activo. #+BEGIN_SRC emacs-lisp - (setq recentf-max-saved-items 30) - (setq recentf-max-menu-items 20) - (recentf-mode 1) +(setq recentf-max-saved-items 30) +(setq recentf-max-menu-items 20) +(recentf-mode 1) #+END_SRC ** Guardar el layout tal cómo está :PROPERTIES: :CUSTOM_ID: Guardar el layout tal cómo está :END: -No está activo. -#+BEGIN_SRC emacs-lisp :tangle no - (desktop-save-mode 1) +#+BEGIN_SRC emacs-lisp +(desktop-save-mode 1) #+END_SRC ** No truncar líneas :PROPERTIES: :CUSTOM_ID: No truncar líneas :END: #+BEGIN_SRC emacs-lisp - (setq truncate-lines nil) +(setq truncate-lines nil) #+END_SRC ** Programación :PROPERTIES: @@ -462,21 +520,19 @@ No está activo. :CUSTOM_ID: Auto identación :END: #+BEGIN_SRC emacs-lisp - (global-set-key (kbd "RET") 'newline-and-indent) +(global-set-key (kbd "RET") 'newline-and-indent) #+END_SRC *** Magit :PROPERTIES: :CUSTOM_ID: Magit :END: #+BEGIN_SRC emacs-lisp - (use-package magit - :bind - ("C-x g" . magit-status) - :config - ; usar un wrapper que torifica git - (setq magit-git-executable "/usr/local/bin/tgit") - :ensure t - ) +(use-package magit + :bind + ("C-x g" . magit-status) + :config + ;; usar un wrapper que torifica git + (setq magit-git-executable "/usr/local/bin/tgit")) #+END_SRC El wrapper es el siguiente: @@ -496,62 +552,26 @@ torify git "$@" :CUSTOM_ID: Insertar licencia :END: #+BEGIN_SRC emacs-lisp - (add-to-list 'el-get-sources '(:name xlicense-github - :type github - :pkgname "jtimberman/xlicense-el" - )) +(add-to-list 'el-get-sources '(:name xlicense-github + :type github + :pkgname "jtimberman/xlicense-el")) - (if (not (el-get-package-installed-p 'xlicense-github)) - (el-get 'sync 'xlicense-github) - ) +(if (not (el-get-package-installed-p 'xlicense-github)) + (el-get 'sync 'xlicense-github)) - (use-package xlicense - :load-path "el-get/xlicense-github" - :init - (setq license-directory (concat user-emacs-directory "el-get/xlicense-github/licenses/")) - ) +(use-package xlicense + :load-path "el-get/xlicense-github" + :init + (setq license-directory (concat user-emacs-directory "el-get/xlicense-github/licenses/"))) #+END_SRC -*** counsel-dash -#+name:counsel-dash-conf -#+BEGIN_SRC emacs-lisp - (add-to-list 'el-get-sources '(:name counsel-dash - :description "counsel-dash" - :type github - :pkgname "nathankot/counsel-dash")) - - (if (not (el-get-package-installed-p 'counsel-dash)) - (package-install "helm") - (el-get 'sync 'counsel-dash)) - - (use-package counsel-dash - :init - (setq counsel-dash-docsets-path "~/.emacs.d/docsets") - (setq counsel-dash-common-docsets '("Bash" "Emacs Lisp" "HTML" "Markdown" "Nginx" "Python 3" "Docker" "Font_Awesome" "LaTeX" "MySQL" "Python 2" "SQLite")) - (setq counsel-dash-browser-func 'eww) -#+END_SRC - -Auto-instala los docsets: -#+name: instala-docsets -#+BEGIN_SRC emacs-lisp - (setq local_docsets counsel-dash-common-docsets) - (while local_docsets - (setq docs (car local_docsets)) - (if (string-match "Python" docs) - (setq docs (replace-regexp-in-string " " "_" docs))) - (if (string-match "Emacs Lisp" docs) - (setq docs (replace-regexp-in-string " " "_" docs))) - (if (not (file-exists-p (concat counsel-dash-docsets-path "/" (car local_docsets) ".docset"))) - (counsel-dash-install-docset docs)) - (setq local_docsets (cdr local_docsets))) -#+END_SRC ** Borrar espacios sobrantes :PROPERTIES: :CUSTOM_ID: Borrar espacios sobrantes :END: Al guardar, borrar los que sobren de cada linea despues de el último carácter. #+BEGIN_SRC emacs-lisp - (add-hook 'before-save-hook 'delete-trailing-whitespace) +(add-hook 'before-save-hook 'delete-trailing-whitespace) #+END_SRC ** Usar ssh con tramp :PROPERTIES: @@ -559,7 +579,7 @@ Al guardar, borrar los que sobren de cada linea despues de el último carácter. :END: Por defecto usa scp, que es muy lento. Así se usará ssh. #+BEGIN_SRC emacs-lisp - (setq tramp-default-method "ssh") +(setq tramp-default-method "ssh") #+END_SRC ** Golden Ratio :PROPERTIES: @@ -569,25 +589,25 @@ Gestiona las ventanas abiertas modificando el tamaño para hacerlo aceptable. Ig #+name:golden-ratio #+BEGIN_SRC emacs-lisp - (use-package golden-ratio - :config - ;; (defun init/no-golden-ratio-for-buffers (bufname) - ;; "Disable golden-ratio if BUFNAME is the name of a visible buffer." - ;; (and (get-buffer bufname) (get-buffer-window bufname 'visible))) - ;; (defun init/no-golden-ratio () - ;; "Disable golden-ratio for guide-key popwin buffer." - ;; (or (init/no-golden-ratio-for-buffers " *undo-tree*") - ;; (init/no-golden-ratio-for-buffers " *undo-tree Diff*") - ;; )) +(use-package golden-ratio + :config + ;; (defun init/no-golden-ratio-for-buffers (bufname) + ;; "Disable golden-ratio if BUFNAME is the name of a visible buffer." + ;; (and (get-buffer bufname) (get-buffer-window bufname 'visible))) + ;; (defun init/no-golden-ratio () + ;; "Disable golden-ratio for guide-key popwin buffer." + ;; (or (init/no-golden-ratio-for-buffers " *undo-tree*") + ;; (init/no-golden-ratio-for-buffers " *undo-tree Diff*") + ;; )) - ;; (add-to-list 'golden-ratio-inhibit-functions - ;; 'init/no-golden-ratio) + ;; (add-to-list 'golden-ratio-inhibit-functions + ;; 'init/no-golden-ratio) - (golden-ratio-mode t) - (setq golden-ratio-exclude-buffer-regexp '("undo-tree" "help" "diff" "calendar" "messages" "Org Agenda" "Agenda Commands" "Org Select" "magit:" "Calendar")) - :diminish golden-ratio-mode - :ensure t - ) + (golden-ratio-mode t) + (setq golden-ratio-exclude-buffer-regexp '("undo-tree" "help" "diff" "calendar" "messages" "Org Agenda" "Agenda Commands" "Org Select" "magit:" "Calendar")) + (setq golden-ratio-auto-scale t) + :diminish golden-ratio-mode + :ensure t) #+END_SRC ** Abrir enlaces en el navegador por defecto @@ -597,7 +617,7 @@ Gestiona las ventanas abiertas modificando el tamaño para hacerlo aceptable. Ig Para establecer un navegador por defecto, hay ejecutar: #+BEGIN_SRC sh :tangle no - xdg-settings set default-web-browser qutebrowser.desktop +xdg-settings set default-web-browser qutebrowser.desktop #+END_SRC En general, cada navegador te lo crea. En el caso de qutebrowser esto no fue así, por lo que tuve que copiar el de firefox en =/usr/share/applications/qutebrowser.desktop= que contiene: @@ -688,7 +708,7 @@ X-KDE-StartupNotify=true La configuración necesaria para emacs es la siguiente: #+BEGIN_SRC emacs-lisp - (setq browse-url-browser-function 'browse-url-xdg-open) +(setq browse-url-browser-function 'browse-url-xdg-open) #+END_SRC ** Terminal @@ -697,20 +717,19 @@ La configuración necesaria para emacs es la siguiente: :END: Establecer shell. #+BEGIN_SRC emacs-lisp - (setq explicit-shell-file-name "/bin/bash") - (setq shell-file-name explicit-shell-file-name) - (setenv "SHELL" shell-file-name) - (add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m) +(setq explicit-shell-file-name "/bin/bash") +(setq shell-file-name explicit-shell-file-name) +(setenv "SHELL" shell-file-name) +(add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m) #+END_SRC ** Cambiar de ventana más comodamente :PROPERTIES: :CUSTOM_ID: Cambiar de ventana más comodamente :END: #+BEGIN_SRC emacs-lisp - (use-package switch-window - :ensure t - :bind ("C-x o" . switch-window) - ) +(use-package switch-window + :ensure t + :bind ("C-x o" . switch-window)) #+END_SRC ** undo-tree :PROPERTIES: @@ -718,13 +737,12 @@ Establecer shell. :END: Visualiza los cambios hechos con un arbol. Además, cuando se tira para atras y se hace un cambio, los primeros siguen accesibles. #+BEGIN_SRC emacs-lisp - (use-package undo-tree - :diminish undo-tree-mode - :ensure t - :config - (global-undo-tree-mode) - (setq undo-tree-visualizer-timestamps t) - ) +(use-package undo-tree + :diminish undo-tree-mode + :ensure t + :config + (global-undo-tree-mode) + (setq undo-tree-visualizer-timestamps t)) #+END_SRC ** Sobreescribir al seleccionar texto :PROPERTIES: @@ -732,7 +750,7 @@ Visualiza los cambios hechos con un arbol. Además, cuando se tira para atras y :END: No está activo. #+BEGIN_SRC emacs-lisp :tangle no - (delete-selection-mode t) +(delete-selection-mode t) #+END_SRC ** Imenu :PROPERTIES: @@ -745,13 +763,44 @@ Imenu sirver para crear menus de archivos, habitualmente usando las cabeceras. :END: Muestra imenu en un buffer lateral. No está activo. #+BEGIN_SRC emacs-lisp :tangle no - (use-package imenu-list +(use-package imenu-list :ensure t :bind ("C-'" . imenu-list-minor-mode) - :config (setq imenu-list-auto-resize nil) - ) + :config (setq imenu-list-auto-resize nil)) #+END_SRC +** Buffer \ast{}Scratch\ast{} persistente +:PROPERTIES: +:CUSTOM_ID: Buffer \ast{}Scratch\ast{} persistente +:END: +#+BEGIN_SRC emacs-lisp +(use-package persistent-scratch + :ensure t + :config + (persistent-scratch-setup-default)) +#+END_SRC +** kill-this-buffer en vez de kil-buffer +:PROPERTIES: +:CUSTOM_ID: kill-this-buffer en vez de kil-buffer +:END: +Fuente: http://pragmaticemacs.com/emacs/dont-kill-buffer-kill-this-buffer-instead/ +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "C-x k") 'kill-this-buffer) +#+END_SRC +** Hydra +:PROPERTIES: +:CUSTOM_ID: Hydra +:END: +#+BEGIN_SRC emacs-lisp +(use-package hydra :ensure t) +#+END_SRC +** csv-mode +:PROPERTIES: +:CUSTOM_ID: csv-mode +:END: +#+BEGIN_SRC emacs-lisp +(use-package csv-mode :ensure t) +#+END_SRC * Aspecto :PROPERTIES: :CUSTOM_ID: Aspecto @@ -1085,6 +1134,7 @@ Lo siguiente lo he cogido de la configuración de [[https://ogbe.net/emacsconfig "Use M-x hidden-mode-line-mode to make the mode-line appear.")))) #+END_SRC + #+RESULTS: ** Formato de las columnas de númeracion @@ -1128,8 +1178,8 @@ Sin scroll bar, menu bar ni tool bar. :CUSTOM_ID: Partir buffers de manera más bonita :END: #+BEGIN_SRC emacs-lisp - (add-to-list 'default-frame-alist '(height . 40)) - (add-to-list 'default-frame-alist '(width . 90)) +(add-to-list 'default-frame-alist '(height . 40)) +(add-to-list 'default-frame-alist '(width . 90)) #+END_SRC ** Scroll :PROPERTIES: @@ -1294,33 +1344,92 @@ Si el paquete no está instalado, lo instala mediante el-get. :PROPERTIES: :CUSTOM_ID: gnu-social-mode :END: -No está activo. +No está activo, lo cargo de =private-literate.org=. #+name:gnusocial-mode #+BEGIN_SRC emacs-lisp :tangle no - (add-to-list 'el-get-sources '(:name gnu-social-mode +(add-to-list 'el-get-sources '(:name gnu-social-mode :description "gnu-social client" :type github - :pkgname "bashrc/gnu-social-mode" - ) - ) + :pkgname "bashrc/gnu-social-mode")) - (if (not (el-get-package-installed-p 'gnu-social-mode)) - (el-get 'sync 'gnu-social-mode) - ) +(if (not (el-get-package-installed-p 'gnu-social-mode)) + (el-get 'sync 'gnu-social-mode) + ) - (use-package gnu-social-mode - :load-path "el-get/gnu-social-mode/" - :init - (setq gnu-social-server-textlimit 140 - gnu-social-server "quitter.se" - gnu-social-username "drymer" - gnu-social-password "Cosas Nazis, Peter" - gnu-social-new-dents-count 1 - gnu-social-status-format "%i %s, %@:\n %h%t\n\n" - gnu-social-statuses-count 200 - ) - ) +(use-package gnu-social-mode + :load-path "el-get/gnu-social-mode/" + :init + (setq gnu-social-server-textlimit 140 + gnu-social-server "quitter.se" + gnu-social-username "drymer" + gnu-social-password "lolazing" + gnu-social-new-dents-count 1 + gnu-social-status-format "%i %s, %@:\n %h%t\n\n" + gnu-social-statuses-count 200 + ) + + (defhydra hydra-gnu-social (:color blue :hint nil) + " + ╭────────────┐ + Posts User Groups │ GNU social │ + ╭─────────────────────────────────────────────────────────────────────────────┴────────────╯ + _k_ [_t_] Post _p_ [_f_] Follow ^_J_^ Join group [_q_] Quit + ^↑^ [_X_] Delete post ^↑^ [_F_] Unfollow ^_L_^ Leave Group + ^↓^ [_r_] Repost ^↓^ [_i_] Profile (browser) + _j_ [_b_] Favorite _n_ ^ ^ + ^ ^ [_RET_] Reply ^ ^ ^ ^ + ^ ^ [_T_] Show Conversation + -------------------------------------------------------------------------------------------- + " + ("C-o" keyboard-quit "Back") + ("q" keyboard-quit) + ("j" gnu-social-goto-next-status :color red) + ("k" gnu-social-goto-previous-status :color red) + ("g" beginning-of-buffer) + ("G" end-of-buffer) + ("t" gnu-social-update-status-interactive) + ("X" gnu-social-delete-notice) + ("RET" gnu-social-reply-to-all) + ("r" gnu-social-repeat) + ("u" gnu-social-current-timeline) + ("b" gnu-social-favorite) + ("f" gnu-social-follow) + ("F" gnu-social-unfollow) + ("i" gnu-social-view-user-page) + ("T" gnu-social-conversation-timeline) + ("o" gnu-social-click) + ("n" gnu-social-goto-next-status-of-user :color red) + ("p" gnu-social-goto-previous-status-of-user :color red) + ("a" gnu-social-toggle-activate-buffer) + ("J" gnu-social-group-join) + ("L" gnu-social-group-leave)) + + :config + (bind-keys :map gnu-social-mode-map + ("C-o" . hydra-gnu-social/body) + ("q" . gnu-social-kill-buffer) + ("Q" . gnu-social-edit-mode) + ("j" . gnu-social-goto-next-status) + ("k" . gnu-social-goto-previous-status) + ("h" . gnu-social-switch-to-next-timeline) + ("l" . gnu-social-switch-to-previous-timeline) + ("g" . beginning-of-buffer) + ("G" . end-of-buffer) + ("t" . gnu-social-update-status-interactive) + ("X" . gnu-social-delete-status) + ("RET" . gnu-social-reply-to-all) + ("r" . gnu-social-repeat) + ("u" . gnu-social-current-timeline) + ("b" . gnu-social-favorite) + ("f" . gnu-social-follow) + ("F" . gnu-social-unfollow) + ("i" . gnu-social-view-user-page) + ("T" . gnu-social-conversation-timeline) + ("o" . gnu-social-click) + ("n" . gnu-social-goto-next-status-of-user) + ("p" . gnu-social-goto-previous-status-of-user) + ("a" . gnu-social-toggle-activate-buffer))) #+END_SRC ** po-mode :PROPERTIES: @@ -1396,7 +1505,9 @@ Se usa la rama =maint= del repositorio git. Primero se comprueba si está instal :CUSTOM_ID: Definir archivos de la agenda :END: #+BEGIN_SRC emacs-lisp - (setq org-agenda-files '("~/Documentos/org/index.org" "~/Documentos/org/archive_index.org" "~/Documentos/org/notas.org")) +(setq org-directory "~/Documentos/org/") +(setq memacs-directory (concat org-directory "memacs/")) +(setq org-agenda-files (list org-directory memacs-directory (concat memacs-directory "git/"))) #+END_SRC **** Definir archivo de notas para org-capture :PROPERTIES: @@ -1474,9 +1585,9 @@ Paquete para ver las tareas de =org-mode= en un formato de calendario más típi ) (use-package calfw - :init - (require 'calfw-org) + :load-path "el-get/calfw" :config + (require 'calfw-org) (setq cfw:org-overwrite-default-keybinding t) (setq calendar-week-start-day 1) (setq calendar-month-name-array @@ -1503,6 +1614,75 @@ Por defecto, al pasar de las 24 horas dedicadas, lo mostrará cómo 1d. Con el s (setq org-time-clocksum-format '(:hours "%d" :require-hours t :minutes ":%02d" :require-minutes t)) #+END_SRC +**** Quitar tags de la agenda +:PROPERTIES: +:CUSTOM_ID: Quitar tags de la agenda +:END: +#+BEGIN_SRC emacs-lisp +(setq org-agenda-remove-tags t) +#+END_SRC +**** Comandos de Agenda +:PROPERTIES: +:CUSTOM_ID: Comandos de Agenda +:END: + +#+name:custom-commands +#+BEGIN_SRC emacs-lisp + (setq org-agenda-custom-commands + '(("b" . "Blog") + ("bi" "Idees per article" ((todo "TODO|IN-PROGRESS" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) + ("bp" "Articles llestos per a publicar" ((todo "READY|PROGRAMMED" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) + ("bc" "Articles cancel·lats" ((todo "CANCELLED" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) + ("bf" "Articles publicats" ((todo "DONE" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) + ("p" . "Projectes Personals") + ("pp" "Projectes Personals" tags-todo "projectes") + ("pg" "General" tags-todo "general") + ("pi" "isso-gnusocial" tags-todo "issoGnusocial") + ("pr" "gnusrss" tags-todo "gnusrss") + ("pj" "jabbergram" tags-todo "jabbergram") + ("v" "Relacionat amb els VPS / chustaserver" tags-todo "vps") + ("w" "Webs" tags "" ((org-agenda-files '("~/Documentos/org/web.org")))))) +#+END_SRC +**** Capturas de notas +:PROPERTIES: +:CUSTOM_ID: Capturas de notas +:END: +#+name:capture-templates +#+BEGIN_SRC emacs-lisp + (setq org-capture-templates + '(("s" "Tasca Simple" entry (file+headline "~/Documentos/org/notas.org" "Notes") + "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") + ("b" "Idea per article" entry (file+headline "~/Documentos/blog/Articulos/articulos.org" "Ideas") + "** TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ("p" "Personal" entry (file+headline "~/Documentos/org/index.org" "Personal") + "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") + ("t" "Treball" entry (file+headline "~/Documentos/org/index.org" "Treball") + "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") + ("w" "Marcadors" entry (file "~/Documentos/org/web.org") + "* %x\n %U\n %c" + :empty-lines 1) + ("v" "Relacionat amb els VPS / chustaserver" entry (file+headline "~/Documentos/org/index.org" "VPS") + "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ("e" "Coses a fer amb emacs" entry (file+headline "~/Documentos/org/index.org" "Emacs") + "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") + + )) + + (setq org-capture-templates + (append org-capture-templates + '(("o" "Ordinadors") + ("og" "General" entry (file+headline "~/Documentos/org/index.org" "General") + "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ("oi" "isso-gnusocial" entry (file+headline "~/Documentos/org/index.org" "isso-gnusocial") + "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ("or" "gnusrss" entry (file+headline "~/Documentos/org/index.org" "gnusrss") + "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ("oj" "jabbergram" entry (file+headline "~/Documentos/org/index.org" "jabbergram") + "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ("os" "SimpleUpload" entry (file+headline "~/Documentos/org/index.org" "SimpleUpload") + "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") + ))) +#+END_SRC *** Edición, diseño y varios :PROPERTIES: :CUSTOM_ID: Edición, diseño y varios @@ -1570,17 +1750,19 @@ Presionando tanto RET cómo TAB. (use-package ox-md) #+END_SRC **** Exportar rst +:PROPERTIES: +:CUSTOM_ID: Exportar rst +:END: #+BEGIN_SRC emacs-lisp - (add-to-list 'el-get-sources '(:name ox-rst - :type github - :pkgname "masayuko/ox-rst" - )) +(add-to-list 'el-get-sources '(:name ox-rst + :type github + :pkgname "masayuko/ox-rst")) - (if (not (el-get-package-installed-p 'ox-rst)) - (el-get 'sync 'ox-rst) - ) +(if (not (el-get-package-installed-p 'ox-rst)) + (el-get 'sync 'ox-rst)) - (use-package ox-rst) +(use-package ox-rst + :load-path "el-get/ox-rst") #+END_SRC **** Configuracion de bloques de código @@ -1591,7 +1773,8 @@ La primera linea formatea el código cómo si se tratase de código nativo, la s #+BEGIN_SRC emacs-lisp (setq org-src-fontify-natively t) (setq org-src-tab-acts-natively t) - (setq org-babel-python-command "python3") + (setq org-src-preserve-indentation t) + (setq org-edit-src-content-indentation 0) #+END_SRC **** Elementos de marcado @@ -1657,7 +1840,6 @@ Sirve para publicar en =nikola= con marcado =org-mode=. Si no está instalado, l :description "Export org into HTML used by static blog generator nikola." :type git :url "https://github.com/redguardtoo/org2nikola.git" - :load-path ("./") )) (if (not (el-get-package-installed-p 'org2nikola)) @@ -1669,41 +1851,14 @@ Las funciones cutres son mías. #+name:org2nikola #+BEGIN_SRC emacs-lisp - ;; Se instala el htmlize de melpa, el de org-mode es demasiado viejo - (use-package htmlize :ensure t) - (use-package org2nikola - :load-path "el-get/org2nikola/" + :load-path "el-get/org2nikola" + :init + ;; Se instala el htmlize de melpa, el de org-mode es demasiado viejo + (use-package htmlize :ensure t) :config (setq org2nikola-output-root-directory "~/Documentos/blog/") (setq org2nikola-use-verbose-metadata t) - - (defun org2nikola/build () - "Construye la web." - (interactive) - (compile (concat "source ~/.virtualenvs/blog/bin/activate; cd " org2nikola-output-root-directory "; bash scripts/construir.sh; deactivate"))) - - (defun org2nikola/serve () - "Sirve la web en un servidor web interno." - (interactive) - (compile (concat "source ~/.virtualenvs/blog/bin/activate; cd " org2nikola-output-root-directory "; qutebrowser --target tab-bg-silent http://localhost:8000 2> /dev/null &; nikola serve; deactivate;"))) - - (defun org2nikola/clean () - "Borra la carpeta output para empezar de cero." - (interactive) - (compile (concat "source ~/.virtualenvs/blog/bin/activate; cd " org2nikola-output-root-directory "; nikola clean; deactivate"))) - - (defun org2nikola/deploy () - "Despliega la web al momento preguntando por el nombre del commit." - (interactive) - (compile (concat "source ~/.virtualenvs/blog/bin/activate; cd " org2nikola-output-root-directory "; nikola deploy; deactivate;"))) - - (defun org2nikola/autodeploy () - "Despliega la web automáticamente el día designado." - (interactive) - (insert - (compile (concat "/usr/local/bin/programa-post " (org-read-date))))) - ;; Las dos siguientes funciones probablemente no sirvan a nadie (defun org2nikola/url-post () "Devuelve el enlace del articulo en el que esté el cursor." @@ -1721,9 +1876,9 @@ Las funciones cutres son mías. (cdr (car (org-entry-properties (point) "CUSTOM_ID"))))) (message url) (kill-new url) - ) - ) + )) #+END_SRC + **** Notas a pie de página :PROPERTIES: :CUSTOM_ID: Notas a pie de página @@ -1736,7 +1891,6 @@ Prefiero que aparezcan las notas debajo del arbol en el que se ha tomado. :PROPERTIES: :CUSTOM_ID: toc-org :END: -Ando trasteando toc-org para crear tablas de contenido exportables en org-mode. Aún no está listo. #+BEGIN_SRC emacs-lisp (use-package toc-org @@ -1745,7 +1899,7 @@ Ando trasteando toc-org para crear tablas de contenido exportables en org-mode. (add-hook 'org-mode-hook 'toc-org-enable) ) #+END_SRC -*** Cifrar archivos +**** Cifrar archivos :PROPERTIES: :CUSTOM_ID: Cifrar archivos :END: @@ -1755,10 +1909,6 @@ Ando trasteando toc-org para crear tablas de contenido exportables en org-mode. (epa-file-enable) ) #+END_SRC -*** Generar id para cabeceras de manera dinámica -:PROPERTIES: -:CUSTOM_ID: Generar id para cabeceras de manera dinámica -:END: A diferencia de la función de writequit, esta establece el título como custom\under{}id. #+BEGIN_SRC emacs-lisp @@ -1792,30 +1942,14 @@ A diferencia de la función de writequit, esta establece el título como custom\ (interactive) (org-map-entries (lambda () (eos/org-custom-id-get (point) 'create)))) #+END_SRC -*** Hábitos +**** Más profundidad en imenu :PROPERTIES: -:CUSTOM_ID: Hábitos +:CUSTOM_ID: Más profundidad en imenu :END: #+BEGIN_SRC emacs-lisp - (use-package org-habit - :init - (add-to-list 'org-modules 'org-habit) - :config - (setq org-habit-preceding-days 7 - org-habit-following-days 0 - org-habit-graph-column 80 - org-habit-show-habits-only-for-today t - org-habit-show-all-today t) - ) + (setq org-imenu-depth 9) #+END_SRC -*** org-protocol -:PROPERTIES: -:CUSTOM_ID: org-protocol -:END: -#+BEGIN_SRC emacs-lisp -(use-package org-protocol) -#+END_SRC -*** Empareja simbolos de marcado y paréntesis +**** Empareja simbolos de marcado y paréntesis :PROPERTIES: :CUSTOM_ID: Empareja simbolos de marcado y paréntesis :END: @@ -1825,79 +1959,17 @@ A diferencia de la función de writequit, esta establece el título como custom\ (modify-syntax-entry ?_ "(_" org-mode-syntax-table) (modify-syntax-entry ?= "(=" org-mode-syntax-table) #+END_SRC -*** Más profundidad en imenu +**** org-protocol :PROPERTIES: -:CUSTOM_ID: Más profundidad en imenu +:CUSTOM_ID: org-protocol :END: #+BEGIN_SRC emacs-lisp - (setq org-imenu-depth 9) +(use-package org-protocol) #+END_SRC -*** Capturas de notas +**** Temas para exportación en html :PROPERTIES: -:CUSTOM_ID: Capturas de notas +:CUSTOM_ID: Temas para exportación en html :END: - -#+name:capture-templates -#+BEGIN_SRC emacs-lisp - (setq org-capture-templates - '(("s" "Tasca Simple" entry (file+headline "~/Documentos/org/notas.org" "Notes") - "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") - ("b" "Idea per article" entry (file+headline "~/Documentos/blog/Articulos/articulos.org" "Ideas") - "** TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ("p" "Personal" entry (file+headline "~/Documentos/org/index.org" "Personal") - "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") - ("t" "Treball" entry (file+headline "~/Documentos/org/index.org" "Treball") - "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") - ("w" "Marcadors" entry (file "~/Documentos/org/web.org") - "* %x\n %U\n %c" - :empty-lines 1) - ("v" "Relacionat amb els VPS / chustaserver" entry (file+headline "~/Documentos/org/index.org" "VPS") - "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ("e" "Coses a fer amb emacs" entry (file+headline "~/Documentos/org/index.org" "Emacs") - "** TODO %? \n:PROPERTIES:\n:CREATED: %u\n:END:\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n") - - )) - - (setq org-capture-templates - (append org-capture-templates - '(("o" "Ordinadors") - ("og" "General" entry (file+headline "~/Documentos/org/index.org" "General") - "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ("oi" "isso-gnusocial" entry (file+headline "~/Documentos/org/index.org" "isso-gnusocial") - "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ("or" "gnusrss" entry (file+headline "~/Documentos/org/index.org" "gnusrss") - "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ("oj" "jabbergram" entry (file+headline "~/Documentos/org/index.org" "jabbergram") - "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ("os" "SimpleUpload" entry (file+headline "~/Documentos/org/index.org" "SimpleUpload") - "* TODO %?\n:PROPERTIES:\n:CREATED: %u\n:END:\n") - ))) -#+END_SRC -*** Comandos de Agenda -:PROPERTIES: -:CUSTOM_ID: Comandos de Agenda -:END: - -#+name:custom-commands -#+BEGIN_SRC emacs-lisp - (setq org-agenda-custom-commands - '(("b" . "Blog") - ("bi" "Idees per article" ((todo "TODO|IN-PROGRESS" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) - ("bp" "Articles llestos per a publicar" ((todo "READY|PROGRAMMED" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) - ("bc" "Articles cancel·lats" ((todo "CANCELLED" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) - ("bf" "Articles publicats" ((todo "DONE" ((org-agenda-files '("~/Documentos/blog/Articulos/articulos.org")))))) - ("p" . "Projectes Personals") - ("pp" "Projectes Personals" tags-todo "projectes") - ("pg" "General" tags-todo "general") - ("pi" "isso-gnusocial" tags-todo "issoGnusocial") - ("pr" "gnusrss" tags-todo "gnusrss") - ("pj" "jabbergram" tags-todo "jabbergram") - ("v" "Relacionat amb els VPS / chustaserver" tags-todo "vps") - ("w" "Webs" tags "" ((org-agenda-files '("~/Documentos/org/web.org")))) - ) - ) -#+END_SRC -*** Temas para exportación en html #+BEGIN_SRC emacs-lisp (add-to-list 'el-get-sources '(:name org-html-themes :type github @@ -2127,3 +2199,19 @@ directory to make multiple eshell windows easier." (insert (concat "ls")) (eshell-send-input))) #+END_SRC +** Reabrir buffer con sudo +Fuente: http://emacsredux.com/blog/2013/04/21/edit-files-as-root/ +#+BEGIN_SRC emacs-lisp +(defun sudo-edit (&optional arg) + "Edit currently visited file as root. + +With a prefix ARG prompt for a file to visit. +Will also prompt for a file to visit if current +buffer is not visiting a file." + (interactive "P") + (if (or arg (not buffer-file-name)) + (find-file (concat "/sudo:root@localhost:" + (ido-read-file-name "Find file(as root): "))) + (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) + +#+END_SRC diff --git a/emacs.d/init.el b/emacs.d/init.el index acdc9d2..a74d3bd 100644 --- a/emacs.d/init.el +++ b/emacs.d/init.el @@ -3,20 +3,17 @@ (if (string-match "lisp\/org" val) (progn (setq org-viejo val) - (delete val load-path) - ) - ) - ) + (delete val load-path)))) ;; Se añade la ruta del org-mode nuevo (add-to-list 'load-path (concat user-emacs-directory "el-get/org-mode-maint/lisp/")) ;; Se intenta cargar el org-mode más nuevo. Si falla, vuelve a añadir al path la versión vieja para poder cargar el fichero de configuración (unless (require 'org nil 'noerror) - (add-to-list 'load-path org-viejo) - ) + (add-to-list 'load-path org-viejo)) ;; Se carga la configuración pública y la privada +(message "Evaluating init-literate.org") (org-babel-load-file (concat user-emacs-directory "init-literate.org")) +(message "Evaluating private-literate.org") (org-babel-load-file (concat user-emacs-directory "private-literate.org")) -(put 'narrow-to-region 'disabled nil)