dotemacs
org-mode

;;
;;                   __  _ __ ___   __ _  ___ ___
;;                  / _ \ '_ ` _ \ / _` |/ __/ __|
;;                 |  __/ | | | | | (_| | (__\__ \
;;                (_)___|_| |_| |_|\__,_|\___|___/
;;                                .-.
;; =--------------------------    /v\  ---------------------------=
;; = lapipaplena.org            //  \\             templix@gmx.es =
;; =-----------------          /(   )\        --------------------=
;; =                            ^^-^^                             =
;; =        http://lapipaplena.duckdns:8000/tractatus/            =
;; =--------------------------------------------------------------=
;
;; "Muéstrame tu .emacs y te diré quién eres"
;;              [Bogdan Maryniuk]
;;
;; "Emacs es como un misil guiado por láser. Solo tiene que estar
;;       un poco mal configurado para arruinar todo el día"
;;                     [Sean McGrath]
;;
;; "Si bien cualquier editor de texto puede guardar sus archivos,
;;             solo Emacs puede guardar su alma"
;;                   [Per Abrahamsen]
;;
;; "Yo uso emacs, que puede considerarse un procesador
;;               de textos termonuclear."
;;                  [Neal Stephenson]
;;

Arrancar modo servidor a menos que ya se esté ejecutando:

(require 'server)
(unless (server-running-p)
  (server-start))

especificar directorio y subdirectorios para las extensiones:

(let ((default-directory "~/.emacs.d/"))
    (normal-top-level-add-subdirs-to-load-path))

Verifica si están los siguientes paquetes instalados. Si se borran del listado no se suprimen de emacs. Listado de paquetes con C-h v RET package-activated-list:

(setq package-list '(aes alert anti-zenburn-theme auto-complete
      auto-dim-other-buffers auto-package-update babel bf-mode bongo
      bonjourmadame browse-at-remote camcorder clean-buffers
      color-theme-buffer-local color-theme cp5022x crux deferred deft
      dired-filetype-face dired-hacks-utils diredful dirtree dracula-theme
      egg elfeed-web elfeed elscreen emacsagist emamux
      emms-player-simple-mpv emms epresent espresso-theme
      exec-path-from-shell f3 facebook firestarter git f gntp golden-ratio
      google-this google-translate hc-zenburn-theme helm helm-core helpful
      ido-completing-read+ impatient-mode insert-shebang interaction-log
      julia-mode kaesar-file kaesar-mode kaesar keydef latex-preview-pane
      libmpdee log4e lorem-ipsum magit git-commit ghub magit-popup
      markdown-mode markdown-preview-eww memoize muse mustache names nikola
      nterm nxml-mode oauth olivetti openwith org-bullets org-pdfview
      org-present org-tree-slide org2blog htmlize metaweblog ox-html5slide
      ox-twbs package+ package-utils pandoc-mode hydra passthword
      password-generator pathify pdf-tools let-alist persistent-scratch
      pkg-info epl plantuml-mode popup quickrun restart-emacs runner s
      schrute seq sequences shell-current-directory shell-here shell-pop
      simple-httpd smart-cursor-color smex sos org ssh ssh-config-mode
      symon tablist tao-theme tea-time tree-mode twitter twittering-mode
      w3m watch-buffer weather-metno which-key windata with-editor async
      writeroom-mode visual-fill-column wttrin xml-rpc xterm-color
      yasnippet zenburn-theme zpresent request org-parser zygospore ht
      dash))

Repositorios de emacs:

(require 'package)
(setq package-archives '(("melpa" . "http://melpa.org/packages/")
                         ("org" . "http://orgmode.org/elpa/")))
(add-to-list 'package-archives
         '("elpa" . "http://tromey.com/elpa/") t)
(add-to-list 'package-archives
         '("gnu" . "http://elpa.gnu.org/packages/") t)
;(add-to-list 'package-archives
;         '("marmalade" . "http://marmalade-repo.org/packages/"))
;(setq package-check-signature nil)

Activar todos los paquetes (en particular, autocarga):

(package-initialize)

Actualización de paquetes:

(unless package-archive-contents
  (package-refresh-contents))

Instalar paquetes que no esten instalados y si en el listado:

(dolist (package package-list)
  (unless (package-installed-p package)
    (package-install package)))

Verificarar si el-get está instalado, y si no, lo hará a través de git

(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(unless (require 'el-get nil t)
  (url-retrieve
   "https://raw.github.com/dimitri/el-get/master/el-get-install.el"
   (lambda (s)
     (end-of-buffer)
     (eval-print-last-sexp))))

1 Ajustes generales

Sin mensaje de bienvenida. Existe uno personalizado como función y mensaje del buffer scratch

;(setq inhibit-startup-message t)
(setq initial-scratch-message
      ";; Soy tu editor, empieza a probar código o
;; con C-x C-f abre algún archivo.\n")

Que todos los errores llamen al depurador:

;(setq debug-on-error t)
;(setq byte-compile-debug t)
;(setq debug-ignored-errors nil)

Suprime las advertencias para funciones redefinidas con defadvice tipo; ad-handle-definition: `tramp-read-passwd' got redefined:

;(setq ad-redefinition-action 'accept)

Algunas cosas que podemos implementar en el arranque:

;(split-window-horizontally)   ; Iniciar con la ventana dividida es dos
;(other-window 1)              ; Moverse al segundo panel
;(shell)                       ; Lanzar una shell
;(rename-buffer "shell-1")     ; Enumerarla como "shell-1"
;(other-window 1)              ; Ir nuevamente al primer panel

No mostrar la barra del menú:

(menu-bar-mode -1)

Sustituir la región activa con tan sólo escribir texto o eliminarla pulsando "DEL":

(delete-selection-mode 1)

Dividir el buffer en dos ventanas que son una continuación de la otra cuando se visita el mismo archivo:

(follow-mode t)

Seguir enlaces simbólicos

(setq vc-follows-symlinks t)

Iluminar los parentesis y las llaves por parejas:

(show-paren-mode 1)

Pedir confirmación al salir de emacs

;(setq confirm-kill-emacs 'y-or-n-p)

Activar soporte common lisp

(require 'cl)

Capturas de pantalla:

(require 'screenshot)
;;; Que las capturas se guarden en ~/capturas
(setq screenshot-schemes
  '(("local"
     :dir "~/capturas/")))
(setq screenshot-default-scheme "local")

Referente al paquete ido:

(require 'ido)
;;; Habilitar coincidencia aproximada:
(setq ido-enable-flex-matching t)
(ido-mode 1)
(setq ido-everywhere t)
(ido-mode 'buffers)
;;; Mostrar archivos recientes abiertos en el menú del buffer
;(setq ido-use-virtual-buffers t)
;;; Ignorar determinados buffers para que no salgan al pulsar C-x b
(setq ido-ignore-buffers '("^ " "*Completions*" "*Shell Command Output*"
                           "*Messages*" "Async Shell Command" "*scratch*"
                           "*tramp*" "*magit*" "*tag-info*" "*ESS*" "*Egg:*"
                           "*Compile-Log*" "*Runner Output*" "*magit-diff:*"
                           "*Org PDF LaTeX Output*" "*debug*" "*GNU Emacs*"
                           "*Help*" "*Minibuf-1*" "*Backtrace*" "*elfeed-log*"
                           "Magit-*"
                           ))
;;; Prioridad al mostrar determinadas extensiones:
(setq ido-file-extensions-order '(".emacs" ".sh" ".txt" ".el" ".tex" ))

Restablecer la posición del cursor al reabrir un archivo y activarlo para todos los buffers

(require 'saveplace)
(setq-default save-place t)
(setq save-place-file "~/.emacs.d/saved-places")

Usar decoración de texto siguiente: (bash, la máxima [t], latex, la mínima [1], un intermedio sería valor 2

(setq font-lock-maximum-decoration
      '((shell-mode . t) (latex-mode . 2)))

Modo inicial por defecto:

(setq default-major-mode 'text-mode)

Dar permisos de execución al fichero si és un script y poderlo ejecutar con C-c e

(add-hook 'after-save-hook
  'executable-make-buffer-file-executable-if-script-p)

Ver depuración de scripts de forma rápida (C-c r):

(require 'quickrun)

No hacer copias de seguredad ni crear archivos #auto-save#

(setq make-backup-files nil)
(setq auto-save-default nil)

Guardar la sessión al cerrar emacs y restaurarla al arrancarlo de nuevo. Poner a cero [0] para desactivar.

(desktop-save-mode 1)

Para vaciar el escritorio de todo lo guardado:

; M-x desktop-clear

Abrir archivos comprimidos con gzip y bzip2:

(auto-compression-mode t)

Reemplazar "yes" y "no" para "y" y "n" en el prompt

(fset 'yes-or-no-p 'y-or-n-p)

Realzar la línea del foco. Atajo para activa/desactivar: C-c i

(global-hl-line-mode 0)
(set-face-background hl-line-face "gray18")

Mostrar tamaño del archivo en la linea de estado:

;(size-indication-mode t)

Mostrar fecha y hora en formato 12 horas + los minutos

;(setq display-time-day-and-date t) ; Solo muestra el dia
;      display-time-24hr-format t) ; Formato 24 horas
(setq display-time-string-forms
      '(day "-" month "-" year " " "[" 24-hours ":" minutes "]"))
(display-time)

Posar en català el calendari i altres ajustos:

(setq calendar-date-style (quote european)) ; dia-mes-año
(setq calendar-week-start-day 1) ; que las semanas empiecen el lunes
(setq calendar-day-header-array ["Dg" "Dl" "Dm" "Dc" "Dj" "Dv" "Ds"])
(setq calendar-day-name-array ["Diumenge" "Dilluns" "Dimarts" "Dimecres"
                               "Dijous" "Divendres" "Dissabte"])
(setq calendar-month-name-array
 ["Gener" "Febrer" "Març"
  "Abril" "Maig" "Juny"
  "Juliol" "Agost" "Setembre"
  "Octubre" "Novembre" "Decembre"])

Añadir un espacio entre el número de linia y el texto de la línia y con una barra vertical de separación

(setq linum-format "%d  \u2502 ")
;;; si se desea con 3 espacios y sin barra vertical
;(setq linum-format "%3d ")

Ignorar mayúsculas en modo ido:

(setq ido-case-fold t)

Insensible a mayúsculas y minúsculas en las busquedas:

(setq case-fold-search nil)

Usar espacios y no tabulaciones.

(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
;;; Que las tabulaciones sean de 4 espacios:
(setq default-tab-width 4)
(setq tab-width 4)

Guardar contraseñas en la caché.

;(setq-default password-cache-expiry nil)

Eliminar espacios en blanco al final de la línia automáticament al guardar el archivo

(add-hook 'before-save-hook 'delete-trailing-whitespace)
(add-hook 'write-file-hooks 'delete-trailing-whitespace nil t)

Mover a la papelera al borrar archivos o directorios:

(setq delete-by-moving-to-trash t
      trash-directory "~/.local/share/Trash/files")

Codificación utf-8

(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-language-environment "UTF-8")
(prefer-coding-system 'utf-8)

No truncar el archivo de mensajes aunque sea grande: Por defecto 1000 lineas

(setq message-log-max t)

Cuando sea necesario, expandir verticalmente la ventana del minibuffer para contener todo el texto que se coloca:

(setq resize-mini-windows t)

Indicar la columna al lado del número de linea en la línea de modo:

(column-number-mode t)

Si tenemos un archivo sensible (contraseñas, códigos…) podemos ocultarlo del archivo de configuración. Las siguientes lineas lo leen si existe.

(if (file-exists-p "~/.emacs.secrets")
        (load-file "~/.emacs.secrets"))

Preservar enlaces duros del archivo que se está editando. especialmente importante si se edita archivos de sistema:

(setq backup-by-copying-when-linked t)

Preservar el propietario y el grupo del archivo que se está editando. especialmente importante si se edita archivos como root:

(setq backup-by-copying-when-mismatch t)

Esconder comentarios de un script. Para esconder: M-x hide/show-comments Para mostrar: M-x hide/show-comments-toggle

;(require 'hide-comt)

Guardar un completo historial de todo lo que ocurre en la sesión:

(setq savehist-file "~/.emacs.d/savehist")
(savehist-mode 1)
(setq history-length t)
(setq history-delete-duplicates t)
(setq savehist-save-minibuffer-history 1)
(setq savehist-additional-variables
      '(kill-ring
        search-ring
        regexp-search-ring))

Para conocer el tiempo en determinada ciudad, en este caso Figueres (España). M-x weather-metno-forecast Descargar de: https://github.com/ruediger/weather-metno-el

(require 'weather-metno)
(setq weather-metno-location-name "Figueres, Spain"
      weather-metno-location-latitude 42.27
      weather-metno-location-longitude 2.96)

Otra forma de conocer el tiempo en una ciudad

(require 'wttrin)

Especificar varias ciudades y cuando la solicite empezar a teclear y con TAB completará la deseada. Existe función mi-wttrin

(setq wttrin-default-cities '("figueras,girona"))

El tiempo en la linea de modo

;(yahoo-weather-mode t)

En dired que se muestren en primer lugar los directorios:

(setq dired-listing-switches "-aBhl --group-directories-first")

En dired, asociar extensiones a determinadas aplicaciones. M-x runner-add-extension (C-c C-c para guardar la asociación)) Pulsando ! Abre la extensión indicada por el cursor

(require 'runner)

Actualización automática en dired sin mostrar salida

(setq global-auto-revert-non-file-buffers t)
(setq auto-revert-verbose nil)

Establecer diferentes colores según tipo de archivo.

(with-eval-after-load 'dired  (require 'dired-filetype-face))

Pulsando "b" en un directorio con dired muestra el contenido.

(require 'bf-mode)

Inicia bf-mode inmediatamente después de comenzar dired

(setq bf-mode-enable-at-starting-dired t)

En dired permitir siempre el cambio de permisos pulsando C-x C-q y fijar los cambios cuando se termina con C-c C-c

(setq wdired-allow-to-change-permissions t)

Entrar en el directorio y abrir en el navegador github o bitbucket con M-x browse-at-remote. La primera vez, entrar en el directorio y lanzar: git config –add browseAtRemote.type "github"

(require 'browse-at-remote)

Convertir textos a html.

(require 'htmlize)
(autoload 'htmlize-region "htmlize" "htmlize la region" t)
(autoload 'htmlize-buffer "htmlize" "htmlize el buffer" t)

Colocar shebang automaticamente al crear un script con extensión sh, perl y python para otros lenguajes o excluir extensiones: M-x customize-group RET insert-shebang

(require 'insert-shebang)
(add-hook 'find-file-hook 'insert-shebang)

Para que cuando se usen teclas "incorrectas" (flechas, RePág…) emacs le diga en el minibuffer las que tiene que usar (C-f, C-v…)

;(guru-global-mode +1)

Si sólo quiere una advertencia:

;(setq guru-warn-only t)

Muestra al cabo de un segundo sin teclear en una ventana emergente las teclas asociadas a una combinación introducida o a un prefijo.

(require 'which-key)
(which-key-mode)
;;; Para que la ventana surja en la parte inferior:
(which-key-setup-side-window-bottom)

Asteriscos más bonitos en modo org

(require 'org-bullets)
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))

Que las medidas de las imágenes en org-mode puedan ser modificadas en el propio archivo org y no sobrepasen 600px.

(setq org-image-actual-width nil)

Un Lorem-ipsum con frases del Quijote

(require 'quijot-ipsum)
; activar los atajos
(quijot-ipsum-use-default-bindings)

Un montón de utilidades para internet (traceroute, ping, route, dig…) Descarga: https://raw.githubusercontent.com/emacs-mirror/emacs/master/lisp/net/net-utils.el

(require 'net-utils)

Exportadores de formatos para org-mode

(setq org-alphabetical-lists t)
(require 'ox-html)
(require 'ox-latex)
(require 'ox-ascii)

Aplicaciones externas para org-mode

(add-hook 'org-mode-hook
      '(lambda ()
         (setq org-file-apps
           '((auto-mode . emacs)
             ("\\.mm\\'" . default)
             ("\\.x?html?\\'" . "/usr/bin/firefox %s")
             ("\\.pdf\\'" . "evince %s")))))

Pegar licencias en el texto (M-x license-skeleton)

;(require 'xlicense)

Abrir .emacs> cuando inicie emacs

(find-file-noselect "~/.emacs")

Activar que epa pida contraseña en el minibuffer y no con aplicación gráfica:

(setenv "GPG_AGENT_INFO" nil)
;;; personalizar la variable a la herramienta que se desea que Emacs utilice:
(setq epg-gpg-program "gpg")
(setq epa-pinentry-mode 'loopback)
(require 'pinentry)
(pinentry-start)
;; EasyPG (GPG para emacs)
(require 'epa)
; Configuración para el cifrado y descifrado automático y transparente:
(require 'epa-file)
(epa-file-enable)

Otra manera de acceder a un archivo de forma rápida (C-x r j l)

(set-register ?l '(file . "~/.config/openbox/lxde-rc.xml"))

Variables modificadas a partir de M-x customize-group

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(LaTeX-command-style
   (quote
    (("" "%(PDF)%(latex) --shell-escape %(file-line-error) %(extraopts) %S%(PDFout)"))))
 '(after-save-hook
   (quote
    (egg-maybe-update-status executable-make-buffer-file-executable-if-script-p)))
 '(ansi-color-faces-vector
   [default bold shadow italic underline bold bold-italic bold])
 '(ansi-color-names-vector
   (vector "#424242" "#d54e53" "#b9ca4a" "#e7c547" "#7aa6da" "#c397d8" "#70c0b1" "#eaeaea"))
 '(beacon-color "#d54e53")
 '(centered-window-mode t)
 '(custom-enabled-themes (quote (sanityinc-tomorrow-eighties)))
 '(custom-safe-themes
   (quote
    ("628278136f88aa1a151bb2d6c8a86bf2b7631fbea5f0f76cba2a0079cd910f7d"
    "1b8d67b43ff1723960eb5e0cba512a2c7a2ad544ddb2533a90101fd1852b426e"
    "82d2cac368ccdec2fcc7573f24c3f79654b78bf133096f9b40c20d97ec1d8016"
    "06f0b439b62164c6f8f84fdda32b62fb50b6d00e8b01c2208e55543a6337433a"
    "bb08c73af94ee74453c90422485b29e5643b73b05e8de029a6909af6a3fb3f58"
    "2540689fd0bc5d74c4682764ff6c94057ba8061a98be5dd21116bf7bf301acfb"
    "aaffceb9b0f539b6ad6becb8e96a04f2140c8faa1de8039a343a4f1e009174fb"
    default)))
 '(elfeed-search-title-max-width 130)
 '(emms-player-mplayer-parameters (quote ("-quiet" "-really-quiet")))
 '(epg-gpg-program "/usr/bin/gpg")
 '(eshell-buffer-name "Eshell")
 '(eww-download-directory "~/Baixades/")
 '(fci-rule-color "#424242")
 '(fill-column 80)
 '(firestarter-mode t)
 '(firestarter-reporting-functions (quote (firestarter-report-to-buffer actualitzar)))
 '(flycheck-color-mode-line-face-to-color (quote mode-line-buffer-id))
 '(forecast-language (quote sp))
 '(frame-background-mode (quote dark))
 '(global-visual-line-mode t)
 '(google-translate-default-source-language "en")
 '(google-translate-default-target-language "es")
 '(insert-shebang-custom-headers (quote (("sh" . "#!/bin/bash"))))
 '(insert-shebang-ignore-extensions (quote ("txt" "org" "el" "tex" "html")))
 '(iwconfig-program "iwconfig")
 '(lpr-page-header-program "ps")
 '(lpr-page-header-switches nil)
 '(magit-repository-directories (quote ("~/tractatus" "~/repositori" "~/gestrac")))
 '(muse-project-alist nil)
 '(olivetti-body-width 110)
 '(org-export-backends (quote (ascii beamer html latex md odt org texinfo)))
 '(org-export-default-language "es")
 '(package-selected-packages
   (quote
    (color-theme-sanityinc-tomorrow transpose-frame color-theme-modern
    magit pass eshell-autojump paradox zzz-to-char volatile-highlights
    tabbar wget elpy pinentry flymd markdown-mode+ initchart isend-mode
    el-get recover-buffers try bug-hunter mediawiki focus eshell-manual
    ox-impress-js dired-subtree xpm ox-epub zygospore presentation
    org-presie yahoo-weather ssh-config-mode nssh org-present ox-reveal
    tea-time helpful org-preview-html org-page org-present afternoon-theme
    web-search async auto-complete dash elfeed epl f ghub git-commit gntp
    helm helm-core ht htmlize hydra julia-mode kaesar let-alist log4e
    memoize metaweblog mustache names org org-parser popup s simple-httpd
    tablist tree-mode visual-fill-column which-key windata with-editor
    xml-rpc yasnippet keydef kaesar-file kaesar-mode google-translate
    apt-utils bf-mode exec-path-from-shell elscreen dracula-theme crux
    package+ package-utils smex zpresent auto-dim-other-buffers
    ido-completing-read+ firestarter dirtree nxml-mode
    shell-current-directory shell-pop twitter auto-package-update
    org-pdfview nikola w3m emms-player-mpv emms-player-simple-mpv emms
    bongo epresent symon plantuml-mode watch-buffer xterm-color
    zenburn-theme wttrin writeroom-mode weather-metno twittering-mode
    tao-theme ssh sos smart-cursor-color shell-here sequences seq schrute
    runner restart-emacs request quickrun pkg-info persistent-scratch
    pdf-tools pathify password-generator passthword pandoc-mode ox-twbs
    ox-html5slide org2blog org-tree-slide org-bullets openwith olivetti
    oauth nterm muse markdown-preview-eww markdown-mode lorem-ipsum
    libmpdee latex-preview-pane latex-extra interaction-log insert-shebang
    impatient-mode hc-zenburn-theme google-this golden-ratio git facebook
    f3 espresso-theme emamux emacsagist elfeed-web egg diredful
    dired-hacks-utils dired-filetype-face deft deferred cp5022x
    color-theme-buffer-local color-theme clean-buffers camcorder
    browse-at-remote bonjourmadame babel anti-zenburn-theme alert aes)))
 '(printer-name "HP_psc_1100_series")
 '(route-program "ss")
 '(route-program-options (quote ("-a")))
 '(sdwim-override-save-keycommand t)
 '(temporary-file-directory "~/.emacs.d/backups/")
 '(user-mail-address "templix@gmx.es")
 '(vc-annotate-background nil)
 '(vc-annotate-color-map
   (quote
    ((20 . "#d54e53")
     (40 . "#e78c45")
     (60 . "#e7c547")
     (80 . "#b9ca4a")
     (100 . "#70c0b1")
     (120 . "#7aa6da")
     (140 . "#c397d8")
     (160 . "#d54e53")
     (180 . "#e78c45")
     (200 . "#e7c547")
     (220 . "#b9ca4a")
     (240 . "#70c0b1")
     (260 . "#7aa6da")
     (280 . "#c397d8")
     (300 . "#d54e53")
     (320 . "#e78c45")
     (340 . "#e7c547")
     (360 . "#b9ca4a"))))
 '(vc-annotate-very-old-color nil)
 '(watch-buffer-types t)
 '(writeroom-width 120)
 '(wttrin-default-accept-language (quote ("Accept-Language" . "es")))
 '(xterm-mouse-mode t)
 '(yahoo-weather-location "figueras,sp"))

ccrypt (encriptar archivos)

(require 'ps-ccrypt "ps-ccrypt.el")

Paquete que proporciona un conjunto de funciones y combinaciones de teclas para el lanzamiento de las búsquedas de Google desde dentro de emacs. Para ver todas las opciones C-c C-h

(require 'google-this)
(google-this-mode t)

Salvapantallas de emacs. Activado a los 5 minutos de inactividad. en debian precisa tener instalado el paquete xtrlock

(require 'zone)
;(zone-when-idle 300)
;;; Activar un salvapantallas concreto. Por defecto aleatorio. Ver función zone-choose
;(setq zone-programs [zone-pgm-drip-fretfully])

Twitter (M-x twit)

(add-hook 'twittering-mode-hook (lambda () (visual-line-mode 1)))
(require 'twittering-mode)
;;; Para evitar tener que autorizar twittering-mode cada vez que se ejecute
(setq twittering-use-master-password t)
(setq twittering-private-info-file "~/.emacs.d/twittering-mode.gpg")
(setq twittering-status-format "%i @%s %S %p: %T [%@]%r %R %f%L \n-------")
(setq twittering-icon-mode nil)
;;; actualizar cada 20 minutos
(setq twittering-timer-interval 1200)
(setq twittering-number-of-tweets-on-retrieval 200)

Interfaz para git

(require 'egg)
;;; Gestión de los repositorios de github (C-c C-g activa magit-status)
;;; c c (editar commit), C-c C-c (commit), P u (push)
(require 'magit)
;;; especificar directorios git que se pueden escoger en el minibuffer
;;; al pulsar C-c C-g (con C-u C-c C-g tambien deja escoger repositorio)

fases de la luna. M-x lunar-phases

(with-eval-after-load 'lunar
    (setq lunar-phase-names '("nova" "creixent" "plena" "minvant")))

Si queremos abrir un archivo o buffer inexistente que pida confirmación:

(setq confirm-nonexistent-file-or-buffer t)

arbol para deshacer acciones [C-x u]:

(require 'undo-tree)
(global-undo-tree-mode 1)

No truncar palabras al final de la linea:

(setq-default truncate-lines t)

Realizar 3 pings (m-x ping)

(setq ping-program-options '("-c" "3"))

Algunas cosas de org-mode: Que no salga el "validation" en el html generado a partir del org.

(setq org-html-validation-link nil)

Modificar los colores de la selección de texto:

(set-face-attribute 'region nil :background "#909CA4" :foreground "#0D0404")

presentaciones:

(setq org-reveal-root "file:///opt/reveal.js")
(require 'ox-reveal)
(setq reveal-mode t)
(require 'ox-impress-js)

Crear gráficos con org-mode con ditaa y plantuml

(setq org-plantuml-jar-path
      (expand-file-name "/opt/plantuml.jar"))
(setq org-ditaa-jar-path "/usr/bin/ditaa")
;;; Para que org-mode interprete los lenguajes corespondientes
(org-babel-do-load-languages
 'org-babel-load-languages
 '((emacs-lisp . t)
   (latex . t)
   (python . t)
   (shell . t)
   (ditaa . t)
   (plantuml . t)
   (sqlite . t)
   (org . t)))
;   (sh . t)

soporte para abrir archivos pdf en org

(eval-after-load 'org '(require 'org-pdfview))
(add-to-list 'org-file-apps
             '("\\.pdf\\'" . (lambda (file link)
                                     (org-pdfview-open link))))

Para que no pregunte si queremos evaluar la expresión de org-babel

(setq org-confirm-babel-evaluate nil)

Fuego en la pantalla

(load "~/.emacs.d/elpa/fireplace/fireplace")

Activar guardar contraseñas

;; (require 'secrets)
;; (setq secrets-enabled nil)
;; (setq auth-source-debug t)

texto centrado en la pantalla y modo lectura sin molestias (=writeroom)

(require 'darkroom)

Que las páginas man se vean en color

(require 'man)
(set-face-attribute 'Man-overstrike nil :inherit 'bold :foreground "orange red")
(set-face-attribute 'Man-underline nil :inherit 'underline :foreground "forest green")

Modificar color de letra y fondo del minibuffer

(set-face-foreground 'minibuffer-prompt "white")
;;; Modificar fondo minibuffer
;(add-hook 'minibuffer-setup-hook
;          (lambda ()
;            (make-local-variable 'face-remapping-alist)
;            (add-to-list 'face-remapping-alist '(default (:background "#104E58")))))

Dando formato a la linea de modo

(setq-default mode-line-format
      (list
       " %2 " mode-line-modified ;; espacios del borde y asteriscos si buffer modificado
       " %2 %f %4 [%l/%c:%p] ";; espacios, patch, espacios, num linea:porcentage del inicio entre corchetes
       " %4 %m %4 %I %4 " ;; espacios, modo mayor, espacios y tamaño del buffer
       mode-line-misc-info ;; información (fecha y hora)
       " %4 " (message "Emacs es genial") " %4 "
       mode-line-end-spaces)) ;; linea discontinua hasta el final

Cuando se tengan dos ventanas, la del foco que cambie el color ligeramente

(require 'auto-dim-other-buffers)
(add-hook 'after-init-hook (lambda ()
 (when (fboundp 'auto-dim-other-buffers-mode)
   (auto-dim-other-buffers-mode t))))

Mostrar, cuando el minibuffer esta inactivo, un pequeño monitor del sistema

(require 'symon)
;(symon-mode)

deft (Notas) (C-c y) Directorio para los archivos

(setq deft-directory "~/Documents/deft")
;; Que los archivos *.org sean reconocidos por el buffer de Deft.
;; El tipo de archivo predeterminado que buscará Deft es "txt".
(setq deft-extensions '("txt" "tex" "org"))
;; Si se usa org-mode con Deft, establecer el modo deft-text-mode para usar org-mode:
(setq deft-text-mode 'org-mode)
;; Que use el nombre del archivo como título
(setq deft-use-filename-as-title t)
;; Por defecto se guarda cada segundo. Con "0" se desactiva y se guarda manualmente
(setq deft-auto-save-interval 0)
;; Por defecto solo busca archivos en el directorio. Habilitar los subdirectorios:
(setq deft-recursive t)

Simbolos Existen al menos unas 40.000 letras distintas disponibles que se pueden insertar, ya sea por su nombre o por su codigo. aquí algunas que de vez en cuando uso:

(global-set-key (kbd "M-g a") "α")
(global-set-key (kbd "M-g B") "β")
(global-set-key (kbd "M-g g") "γ")
(global-set-key (kbd "M-g e") "ε")
(global-set-key (kbd "M-g p") "π")
(global-set-key (kbd "M-g f") "ϕ")
(global-set-key (kbd "M-g j") "φ")
(global-set-key (kbd "M-g w") "ω")
(global-set-key (kbd "M-g J") "Φ")
(global-set-key (kbd "M-g Y") "Ψ")
(global-set-key (kbd "M-g W") "Ω")

Extensión a las mostradas con C-x 8 Tabla personal de abreviaciones. Teclear el nombre de la primera columna seguido de ESP y se substituirá por su equivalente.

(clear-abbrev-table global-abbrev-table)
(define-abbrev-table 'global-abbrev-table '(
    ("8Delta"   "Δ")
    ("8delta"   "δ")
    ("8theta"   "θ")
    ("8lambda"  "λ")
    ("8mu"      "µ")
    ("8nu"      "ν")
    ("8Sigma"   "Σ")
    ("8sigma"   "σ")
    ("8tau"     "τ")
    ("8in"      "∈")
    ("8nin"     "∉")
    ("8inf"     "∞")
    ("8cat"    "😸")
    ("8cor"     "♥")
    ("8cara"   "😂")
    ))
(set-default 'abbrev-mode t)
(setq save-abbrevs nil)

Solo trabajar en pequeños trozos del buffer. Seleccionar region y con C-x n n solo se verá el trozo seleccionado pero el buffer está el resto del presente buffer sin verlo. Con C-x n w vuelve todo visible.

(put 'narrow-to-defun 'disabled nil)
;(put 'narrow-to-page   'disabled nil)
(put 'narrow-to-region 'disabled nil)

Ayudar a ordenar los comandos M-x en función del uso y los artículos recientes:

(smex-initialize)

Multi-term Abrir con M-x multi-term o con el atajo (C-c t o C-c T). Descargar de: http://www.emacswiki.org/emacs/download/multi-term.el

(autoload 'multi-term "multi-term" nil t)
(autoload 'multi-term-next "multi-term" nil t)
;;; que use bash
(setq multi-term-program "/bin/bash")
(setq ansi-term-program "/bin/bash")

ssh Acceso ssh (C-x C-f /ssh:usuario@IP:/home/usuario):

(require 'tramp)
(setq tramp-default-method "ssh")
;;; activar variables para ver salida de problemas con tramp
(setq tramp-debug-buffer t)
(setq tramp-verbose 10)
;;; otra forma más simple de acceder por ssh:
;;; M-x ssh RET user@host -p XXXX RET
(require 'ssh)
;;; acceder a la otra torre
(add-to-list 'auto-mode-alist '("~/.ssh/config\\'" . ssh-config-mode))

Ajustar el prompt de eshell y de ansi-term y term Modificar el prompt para mostrar el directorio de trabajo Para mostrar el usuario: (concat (getenv "USER")

(setq eshell-prompt-function
(lambda nil
(concat (eshell/pwd)
(if (= (user-uid) 0) " # " " $ "))))
;;; Especificar ruta a la shell que vamos a usar:
(setq explicit-shell-file-name "/bin/bash")
(setq shell-file-name explicit-shell-file-name)
;;; mensaje de bienvenida al entrar a la eshell:
(setq eshell-banner-message "\n... entrant a emacs shell...\n\n")
;;; para que term y ansi-term no pregunten el prompt
(defvar my-term-shell "/bin/bash")
(defadvice ansi-term (before force-bash)
  (interactive (list my-term-shell)))
(ad-activate 'ansi-term)
(defadvice term (before force-bash)
  (interactive (list my-term-shell)))
(ad-activate 'term)

Cuando se está en eshell ver la versión de emacs pulsando F1

;(add-hook 'eshell-mode-hook
;            (lambda ()
;            (define-key eshell-mode-map (kbd "<f1>") #'emacs-version)))

Colores:

;;; Poner esquemas de colores
(require 'color-theme)
(require 'color-theme-modern)
(color-theme-initialize)
;(enable-theme 'aalto-dark)
;(load-theme 'zenburn)
;(load-theme 'dracula)
;(load-theme 'misterioso)
;(load-theme 'afternoon)
;(require 'espresso-theme)
;;; M-x color-theme-sanityinc-tomorrow-day, M-x color-theme-sanityinc-tomorrow-night
;;; M-x color-theme-sanityinc-tomorrow-blue, M-x color-theme-sanityinc-tomorrow-bright
;;; M-x color-theme-sanityinc-tomorrow-eighties
(require 'color-theme-sanityinc-tomorrow)
(color-theme-sanityinc-tomorrow-bright)
;;; Esquema de color escogido del paquete color-theme:
;(color-theme-vim-colors)
;(color-theme-high-contrast)
;(color-theme-charcoal-black)
;(color-theme-matrix)
;(color-theme-calm-forest)
;;;(color-theme-comidia)
;(color-theme-oswald)
;;; Si nos gusta determinada combinación pero la queremos invertida:
;(invert-face 'default)

Modificar colores de letra y fondo del minibuffer según si está activo o no.

;; (dolist (buf '(" *Echo Area 0*" " *Echo Area 1*"))
;;   (with-current-buffer (get-buffer buf)
;;     (make-local-variable 'face-remapping-alist)
;;         (add-to-list 'face-remapping-alist '(default (:background "yellow" :foreground "black")))))

Reabrir algún buffer cerrado anteriormente El atajo de teclado es C-c 2

(require 'recentf)
(recentf-mode t)
(setq recentf-max-saved-items 1000)
(setq recentf-max-menu-items 35)

prevenir la limpieza periódica de archivos remotos:

(setq recentf-auto-cleanup 'never)

Abrir archivos con apps externas con M-x find-file o en dired con "intro"

(require 'openwith)
(openwith-mode t)
(setq openwith-associations '(("\\.odt\\'" "lowriter" (file))
                              ("\\.ods\\'" "lowriter" (file))
                              ("\\.doc\\'" "lowriter" (file))
                              ("\\.docx\\'" "lowriter" (file))
                              ("\\.ods\\'" "lowriter" (file))
                              ("\\.ppt\\'" "lowriter" (file))
                              ("\\.pptx\\'" "lowriter" (file))
                              ("\\.xls\\'" "lowriter" (file))
                              ("\\.xlsx\\'" "lowriter" (file))
                              ("\\.png\\'" "shotwell" (file))
                              ("\\.jpg\\'" "shotwell" (file))
                              ("\\.pdf\\'" "evince" (file))
                              ("\\.mp3\\'" "mplayer" (file))
                              ("\\.wav\\'" "mplayer" (file))
                              ("\\.ogg\\'" "mplayer" (file))
                              ("\\.mpeg\\'" "vlc" (file))
                              ("\\.mpg\\'" "vlc" (file))
                              ("\\.avi\\'" "vlc" (file))
                              ("\\.flv\\'" "vlc" (file))
                              ("\\.mp4\\'" "vlc" (file))
                              ("\\.sla\\'" "scribus" (file)
                               )))

emacs-wget (http://www.filewatcher.com/m/emacs-wget.tbz.29-1.html) Las descargas a ~/download

(require 'wget)
(defvar wget-hide-status t
  "Por defecto ocultar ventana de descarga wget.")

Modo latex Todos los .tex son de latex no de Plain-TeX, Asm-TeX, Info-TeX, etc:

(setq TeX-default-mode '"LaTeX-mode")
(setq TeX-force-default-mode t)
;;; Que cuando se cargue el mode mayor LaTeX se active automáticament RefTeX:
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
;;; Activar auto-fill (lineas de anchura limitada) al abrir un fichero latex:
(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
;;; Que AUCTeX delegue a RefTeX lo relativo a la generación de etiquetas:
(setq reftex-plug-into-AUCTeX t)
;;; Que AUCTeX detecte el uso de include o input
(setq-default TeX-master nil)
;;; Guardar automáticamente la compilación:
;(setq TeX-save-query nil)
;;; Analizar el documento al guardar:
(setq TeX-auto-save t)
;;; Analizar el documento al cargar:
(setq TeX-parse-self t)
;;; Para que los .tex se abran en latex-mode:
(add-to-list 'auto-mode-alist '("\\.tex$" . latex-mode))
;;; Corregir los comentarios mientras se escribe. No las etiquetas ni las variables:
;;; M-$ para ver opciones "i" para incorporar al diccionario.
(setq flyspell-mode nil)
; Modificar visor de pdfs (por defecto xdvi) a evince:
(setq TeX-PDF-mode t)
(setq TeX-view-program-list '(("Evince" "evince %o")))
(setq TeX-view-program-selection '((output-pdf "Evince")))

markdown

(autoload 'markdown-mode "markdown-mode"
  "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

activar pandoc al abrir un markdown:

(load "pandoc-mode")
(add-hook 'markdown-mode-hook 'pandoc-mode)

Para que los texinfo se abran en texinfo-mode:

(add-to-list 'auto-mode-alist '("\\.texi$" . texinfo-mode))

Imprimir

(setq lpr-command "enscript")
(setq lpr-switches (list "--font=Courier10"
                         "--no-header"))
(setq printer-name "HP_psc_1100_series")

Listado de feeds en el archivo ~/emacs.secrets alias para el lector de noticias y actualizar feeds:

(setq elfeed-update t)
(defalias 'aa 'elfeed)
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(elfeed-search-date-face ((t (:background "black" :foreground "white"))))
 '(elfeed-search-date-format (quote ("%d-%m-%Y" 10 :left)))
 '(elfeed-search-feed-face ((t (:background "black" :foreground "white"))))
 '(elfeed-search-title-face ((t (:background "black" :foreground "white"))))
 '(fringe ((t (:background "#000000")))))
;;; Aguardar respuesta del host 30 segundos:
(setf url-queue-timeout 30)
;;; Actualizar cada media hora y mostrar un mensaje:
;(run-with-timer 0 3600 'elfeed-update)
;(run-with-timer 10 nil 'elfeed-update)
;(defun elfeed-update ()
;    (message "Actualizadas noticias..."))

Escuchar música con emms:

(require 'emms)
(require 'emms-setup)
(emms-all)
;;; Incluir los reproductores como ogg123 o mpg321, mplayer, mpv, vlc ...
;;; Han de estar instalados en el sistema.
(emms-default-players)
;
(require 'emms-player-simple)
(require 'emms-source-file)
(require 'emms-source-playlist)
(require 'emms-player-mplayer)
(require 'emms-librefm-stream)
(require 'emms-streams)
(require 'emms-lyrics)
(define-emms-simple-player mplayer '(file url)
      (regexp-opt '(".ogg" ".mp3" ".wav" ".mpg" ".mpeg" ".wmv" ".wma"
                    ".mov" ".avi" ".divx" ".ogm" ".asf" ".mkv" "http://" "mms://"
                    ".rm" ".rmvb" ".mp4" ".flac" ".vob" ".m4a" ".flv" ".ogv" ".pls"))
                    "mplayer" "-quiet" "-really-quiet" "-fullscreen")
(setq emms-playlist-buffer-name "*Music*")
(setq emms-stream-default-action "play")
(setq emms-source-file-default-directory "~/Música/")

Limpiar con antiword ficheros .doc (apt-get install antiword) ;;; http://www.emacswiki.org/emacs/download/no-word.el

(autoload 'no-word "no-word" "word to txt")
 (add-to-list 'auto-mode-alist '("\\.doc$" . no-word))

Activar comandos visuales en eshell:

(add-hook 'eshell-mode-hook
          (lambda()
            ;; Programas a ejecutar en modo visual:
            (add-to-list 'eshell-visual-commands "ssh")
            (add-to-list 'eshell-visual-commands "tail")
            (add-to-list 'eshell-visual-commands "htop")
            (add-to-list 'eshell-visual-commands "mplayer")
            (add-to-list 'eshell-visual-commands "mocp")
            (setq eshell-visual-subcommands '("git" ("log" "diff" "show")))))

Guardar historial de eshell al cerrar sesión, especificando longitud y sin repetir comandos:

(setq eshell-history-size 20000)
(setq eshell-save-history-on-exit t)
(setq eshell-hist-ignoredups t)
;;; comandos entrados en eshell (history)
(add-hook 'eshell-mode-hook
          (lambda ()
            (define-key eshell-mode-map
              (kbd "M-p")
              'helm-eshell-history)))
;; (require 'eshell-autojump)
;; (eshell-autojump-load)
;; (eshell-autojump-save)
;; (eshell-autojump-record)

ajustes para crear postscripts

(require 'ps-print)
(setq ps-paper-type 'a4
;      ps-font-size 7.0 ; por defecto 8.5 points
      ps-print-header nil ; sin encabezado
;      ps-print-color-p nil ; sin color
      ps-print-color-p (quote black-white)
;      ps-landscape-mode nil ; no apaisado (por defecto)
      ps-number-of-columns 1 ; número de columnas
      ps-auto-font-detect nil ; no detectar tipo fuente
;      ps-default-bg "white" ; fondo blanco
;      ps-default-fg "black" ; letra negra
;      ps-left-margin 56.69291338582677
      )

Desactivar la tecla "insert" del teclado que a veces se me pulsa accidentalmente

(define-key global-map [(insertchar)] nil)
(define-key global-map [(control insert)] 'overwrite-mode)

Colección de extensiones ridículamente útiles

(require 'crux)

garantizar que las variables de entorno dentro de Emacs tengan el mismo aspecto que en el shell del usuario.

(setq exec-path-from-shell-check-startup-files nil)
(exec-path-from-shell-initialize)

Si no queremos ver mensajes en el minibuffer:

;(setq inhibit-message t)

dos tipos de alarmas (avis i tea-time) Me suena el estudio 12 de Chopin a la hora indicada con M-x avis-alarma

(require 'avis)

alarma que empieza a sonar al cabo de los minutos indicados con M-x tea-time

(require 'tea-time)
(setq tea-time-sound "/home/pep/Música/best.wav")
(setq tea-time-sound-command "mplayer %s")

Copi/paste emacs –> X e X –> emacs

;(require (quote xclip))
(setq xclip-mode 1)
;;; que copi/pastee hacia las X
(setq x-select-enable-clipboard t
      x-select-enable-primary t)

Redimensionar ventana activa

(require 'golden-ratio)
(golden-ratio-mode 1)
;;; Para que la pantalla activa sea más grande \\
;;; Provisional: M-x golden-ratio-adjust RET 1.1
;(setq golden-ratio-adjust-factor 1.1)

En modus dired, amb el cursor sobre un script y pulsan "P", l'hi posa un enllaç a ~/bin si el directori d'executables no és ~/bin s'haurà despecificar a la variable: pathify-directory.

(autoload 'pathify "pathify" nil t)
(autoload 'pathify-dired "pathify" nil t)
(eval-after-load 'dired
  '(define-key dired-mode-map "P" 'pathify-dired))

Mostrar buffer o region en el navegador (M-x hfyview-buffer)
https://raw.githubusercontent.com/jwiegley/nxhtml/master/util/hfyview.el

(require 'hfyview)

activar números aleatorios:

(random t)

Añadir automáticamente paréntesis, llave y comillas de cierre al insertar la de apertura.

;(setq skeleton-pair t)
;(global-set-key "[" 'skeleton-pair-insert-maybe)
;(global-set-key "(" 'skeleton-pair-insert-maybe)
;(global-set-key "{" 'skeleton-pair-insert-maybe)
;(global-set-key "'" 'skeleton-pair-insert-maybe)

Al presionar C-l el cursor va al medio, arriba y abajo. Modificar el orden: arriba, al centro y abajo

(setq recenter-positions '(top middle bottom))
;;; y que además, no se quede arriba del todo sino 5 lineas antes
;;; a menos que se pulse una segunda vez
(setq recenter-positions '(5 top bottom))

El modo DocView incorporado que permite ver archivos PDF

(setq doc-view-continuous t)

Captura la configuración actual de la ventana y permite restaurarla
después de que haya sido modificada por alguna acción:

(winner-mode 1)

aumentar la imfornación de "apropos"

(setq apropos-do-all t)

actualizaciones de los paquetes de emacs actualizaciones automáticas cada 5 dias y a las 22 horas:

(require 'auto-package-update)
;; actualizar al inicio de emacs:
;(auto-package-update-maybe)
;; cada 5 dias:
(setq auto-package-update-interval 5)
;; actualizar a las 22 horas del dia que corresponda:
(auto-package-update-at-time "22:00")
;; eliminar versiones viejas:
(setq auto-package-update-delete-old-versions t)
;; no mostrar mensajes de las actualizaciones:
(setq auto-package-update-hide-results t)

Cuando el cursor llegue abajo de la pantalla que se desplace una linea no media página

;(setq scroll-step 1)

Que todos los buffers abiertos se guarden cada 30 minutos no solo cuando se cierre por si existe algun corte de corriente.

(run-at-time nil (* 30 60) 'recentf-save-list)

menú de paquetes de Emacs con clasificaciones de paquetes, estadísticas de uso, personalización y más.

;(require 'paradox)
;(paradox-enable)
;(spinner-start 'triangle)

que la información se muestre en el area de eco y no en un otro marco

(tooltip-mode -1)
(setq tooltip-use-echo-area t)

acceder a los archivos de .password-store (pass)

;(require 'helm-pass)

consultar Stack Overflow directamente desde emacs

;(require 'howdoi)
;(howdoi-mode)

cambiar ventana horizontal por vertical y al revés

(require 'transpose-frame)

que las direfencias entre dos ficheros se vean con determinados colores.

(eval-after-load 'diff-mode
  '(progn
     (set-face-foreground 'diff-added "green4")
     (set-face-foreground 'diff-removed "red3")))

buscar un archivo o una url que indica el cursor con C-x C-f

(ffap-bindings)

Si queremos que, al abrir un archivo, por defecto se abra ~/

;(add-hook 'find-file-hook
;          (lambda() (setq default-directory (substitute-in-file-name "~/"))))

Visualización como arbol de directorios (ztree-dir):

(require 'ztree)

Creació de blogs:

(require 'ox-publish)
;(require 'ox-twbs)
(setq org-publish-project-alist
       '(("blog"
          :base-directory "~/org/"
          :recursive t
          :base-extension "org"
          :html-extension "html"
          :publishing-directory "~/public_html/"
;          :publishing-function (org-html-publish-to-html)
          publishing-function org-twbs-publish-to-html
          :exclude ".*"
          :auto-sitemap t                  ; Generate sitemap.org automagically..
;         :sitemap-filename "sitemap.org"  ; ... call it sitemap.org (it's the default)....
;         :sitemap-title "Sitemap"         ; ... with title 'Sitemap'.
;         :export-creator-info t)    ; enable the inclusion of "Created by Org" in the postamble.
;         :export-author-info t)     ; enable the inclusion of "Author: Your Name" in the postamble.
;         :auto-postamble t)         ; enable auto postamble
;         :html-preamble t
;         :html-postamble t)
;         :html-postamble "    <p class=\"postamble\">Última actualización %d.</p> ") ; your personal postamble
          :html-postamble "<p class=\"postamble\">Created by Emacs and Org-mode</p> "
         :style-include-default nil  ;Disable the default css style
         ;posar un menú a dalt de tot:
         :html-preamble "
   <div id=\"menu\">
    <p>
    <a href=\"curs_emacs.html\" >Curso emacs</a> |
    <a href=\"dotemacs.html\" >Dotemacs</a> |
    <a href=\"la_vecina.html\" >La vecina 1ª</a> |
    <a href=\"la_vecina2.html\" >La vecina 2ª</a> |
    <a href=\"la_nueva.html\" >La nueva</a> |
    <a href=\"clic.html\" >Clics, prompts...</a> |
    <a href=\"Muestras1.html\" >Muestras arqueológicas</a>
    </p>
   </div>
")))
;;       ("images"
;;        :base-directory "~/org/images/"
;;        :base-extension "png"
;;        :publishing-directory "~/public_html/")))

Menú

(defhydra hydra-dired (:color red :hint nil :exit t) ; C-c C-r (o posar M-x -dired/b)
 "
^
^Sortir^      ^Directoris^      ^arxius^           ^firefox^
^─────^───────^──────^──────────^──────────────^──^─────^────────^
_q_ quit      _d_ Documents     _f_ .emacs         _m_ curs-emacs(org)
^^            _t_ telegram      _p_ dotemacs       _M_ curs-emacs(web)
^^            _e_ EMACS         _l_ elisp-guia     _r_ eshell(org)
^^            _w_ Baixades      _b_ bashrc         _R_ eshell(web)
^^            _a_ a-importants  _n_ notes          _o_ dotemacs(org)
^^            _s_ spideroak     _F_ dir elpa       _O_ dotemacs(web)
^^            ^^                ^^                 ^^
"

 ("q" nil)
 ("d" (dired "~/Documents"))
 ("s" (dired "~/spideroak/1-BUTA"))
 ("m" (browse-url-firefox "file:///home/pep/EMACS/curs_prolongat/curs_emacs.html"))
 ("M" (browse-url-firefox "http://lapipaplena.zzzz.io/emacs/"))
 ("t" (dired "~/.telegram-cli/downloads"))
 ("a" (dired "/media/pep/DADES/dades/arxius_importants/"))
 ("o" (browse-url-firefox "file:///home/pep/EMACS/dotemacs.html"))
 ("O" (browse-url-firefox "http://lapipaplena.zzzz.io/emacs/dotemacs.html"))
 ("e" (dired "~/EMACS"))
 ("f" (find-file "~/.emacs"))
 ("F" (dired "~/.emacs.d/elpa"))
 ("l" (find-file "~/EMACS/elisp-guide.md"))
 ("w" (dired "~/Baixades"))
 ("b" bashrc)
 ("r" (browse-url-firefox "file:///home/pep/EMACS/eshell_tut.html"))
 ("R" (browse-url-firefox "http://lapipaplena.zzzz.io/emacs/eshell_tut.html"))
 ("n" (find-file "~/.notes"))
 ("p" (find-file "~/dotemacs/dotemacs.el")))

Menú superior. Para desplazarse: M-º y M-ª :

(require 'tabbar)
(tabbar-mode 1)
(setq tabbar-buffer-groups-function nil)
(setq tabbar-separator '(1.5))
;; colores
(set-face-attribute
 'tabbar-default nil
 :background "darkgreen"
 :foreground "gray80"
 :box nil
 :height 1.0)
(set-face-attribute
 'tabbar-unselected nil
 :background "darkred"
 :foreground "gray80"
 :box nil)
(set-face-attribute
 'tabbar-selected nil
 :background "darkblue"
 :foreground "SkyBlue1"
 :box nil)
(set-face-attribute
 'tabbar-button nil
 :box nil)
(set-face-attribute
 'tabbar-separator nil
 :height 1.2)
;;; Eliminar buffers cuando se tiene el menú superior activado:
;; Eliminar el buffer *scratch* después de configurado el modo.
(defun remove-scratch-buffer ()
  " Eliminar scratch con el menu superior activado"
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*")))
(add-hook 'after-change-major-mode-hook 'remove-scratch-buffer)

Eliminar los buffers messages y tag-info.

;(setq-default message-log-max nil)
;(kill-buffer "*Messages*")
(kill-buffer "*tag-info*")
(kill-buffer "*Egg:Select Action*")

Eliminar el buffer Completions después de abrir un archivo.

(add-hook 'minibuffer-exit-hook
      '(lambda ()
         (let ((buffer "*Completions*"))
           (and (get-buffer buffer)
                (kill-buffer buffer)))))

2 Plantillas

Plantilla logo skeleton

(define-skeleton logo
  "Cabecera (C-c l)"
  "logo: "
  ";;                                                                 \n"
  ";;                   ___ _ __ ___   __ _  ___ ___                  \n"
  ";;                  / _ \\ '_ ` _ \\ / _` |/ __/ __|                 \n"
  ";;                 |  __/ | | | | | (_| | (__\\__ \\                 \n"
  ";;                (_)___|_| |_| |_|\\__,_|\\___|___/                 \n"
  ";;                               .-.                               \n"
  ";; =--------------------------   /v\\  ----------------------------=\n"
  ";; = lapipaplena.org            // \\\\              templix@gmx.es =\n"
  ";; =-----------------          /(   )\\        --------------------=\n"
  ";; =                            ^^-^^                             =\n"
  ";; =      http://lapipaplena.duckdns.org:8000/tractatus/           =\n"
  ";; =--------------------------------------------------------------=\n")

plantilla skeleton beamer

(define-skeleton plantilla-beamer
  "Plantilla general para presentaciones con beamer (C-c 4)"
  "beamer: "
  "\#+TITLE: \n"
  "\#+AUTHOR: \n"
  "\#+DATE: \n"
  "\#+OPTIONS: toc:nil num:nil H:2 \n"
  "\#+LATEX_CLASS: beamer \n"
  "\#+LATEX_CLASS_OPTIONS: [presentation] \n"
  "\#+BEAMER_THEME:         ;[height=20pt] \n"
  "\#+BEAMER_COLOR_THEME: \n"
  "\#+BEAMER_FONT_THEME: professionalfonts \n"
  "\#+LANGUAGE: es \n"
  "\#+LATEX_HEADER: \\usepackage[AUTO]{babel} \n")

plantilla skeleton org-mode

(define-skeleton plantilla-orgmode
  "Plantilla general para archivos org (C-c 3)"
  "orgmode: "
  "\#+TITLE: \n"
  "\#+SUBTITLE:\n"
  "\#+HTML_HEAD: <link rel=\"stylesheet\" type=\"text/css\" href=\"./css/org.css\" />\n"
  "\#+DATE:\n"
  "\#+OPTIONS: timestamp:nil author:t toc:nil\n"
  "\#+LANGUAGE: es \n"
  "\#+LATEX_CLASS: \n"
  "\#+LATEX_CLASS_OPTIONS: [a4paper,openright,oneside,12pt] \n"
  "\#+LATEX_HEADER: \\usepackage[spanish]{babel} \n"
  "\#+LATEX_HEADER: \\usepackage{utopia} \n"
  "\#+LATEX_HEADER: \\usepackage{fullpage} \n"
  "\#+LATEX_HEADER: \\textheight=25cm \n"
  "\#+LATEX_HEADER: \\textwidth=18cm \n"
  "\#+LATEX_HEADER: \\oddsidemargin=-1cm \n"
  "\#+LATEX_HEADER: \\topmargin=-1cm \n")

Plantilla skeleton latex

(define-skeleton plantilla-latex
    "Plantilla encabezado latex (C-c 5)"
    "Plantilla: "
"\\documentclass[a4paper,openright,oneside,12pt]{book}\n"
"\\usepackage{geometry}\n"
;"\\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm,headsep=5pt,a4paper]{geometry}\n"
"\\usepackage[spanish]{babel}\n"
"\\usepackage[T1]{fontenc}\n"
"\\usepackage{textcomp}\n"
"\\usepackage[utf8]{inputenc}\n"
"\\usepackage{fancybox}\n"
"\\usepackage{framed}\n"
"\\usepackage{wedn}\n"
"\\usepackage{utopia}\n"
"\\usepackage{pbsi}\n"
"\\usepackage{suetterl}\n"
"\\usepackage{verbatim}\n"
"\\usepackage{url}\n"
"\\usepackage{setspace}\n"
"\\usepackage[framemethod=tikz]{mdframed}\n"
"\\usepackage{incgraph}\n"
"\\usepackage{xcolor}\n"
"\\usepackage{colortbl}\n"
"\\usepackage{multirow}\n"
"\\usepackage{wrapfig}\n"
"\\usepackage{fancyvrb}\n"
"\\usepackage{lipsum}\n"
"\\usepackage{fullpage}\n"
"\\usepackage{listings}\n"
"\\usepackage{graphicx}\n"
"\\usepackage{parskip}\n"
"\\textheight=25cm\n"
"\\textwidth=18cm\n"
"\\oddsidemargin=-1cm\n"
"\\topmargin=-1cm\n"
"\n"
"\\begin{document}\n"
"\n"
"\n"
"\n"
"\\end{document}\n")

3 Keys

En una pantalla con varias ventanas con C-x 1 se deja una. Pulsando otra vez C-x 1 se restauran las cerradas.

(global-set-key (kbd "C-x 1") 'zygospore-toggle-delete-other-windows)

acceso rápido para cerrar un buffer. Como C-x k sin preguntar confirmar.

(global-set-key (kbd "M-¡") 'kill-this-buffer)

moverse a derecha e izquierda en el menú superior:

(global-set-key (kbd "M-º") 'tabbar-backward)
(global-set-key (kbd "M-ª") 'tabbar-forward)

Abrir el tractatus

(global-set-key (kbd "C-t") 'tractatus)

Entrar terminal ansi-term:

(global-set-key (kbd "<f5>") ;ansi-term
                '(lambda ()(interactive)(ansi-term "/bin/bash")))

No cortar la palabra al final de la línia:

(global-set-key (kbd "<f6>") 'global-visual-line-mode)

Mostar/esconder números de línia (Linum-Mode)

(global-set-key (kbd "<f7>") 'global-linum-mode)

Abrir con app externa:

(global-set-key (kbd "<f8>") 'external-app)

lanzar blog de notas. Incluir fecha con C-c C-c:

(global-set-key (kbd "<f9>") 'remember)

3.1 Con C-c <numero>

lanzar el directorio .emacs.d:

(global-set-key (kbd "C-c 1") ;.emacs.d
                (lambda()(interactive)(find-file "~/.emacs.d")))

Reabrir alguno de los últimos 25 buffer abiertos, incluso los cerrados:

(global-set-key (kbd "C-c 2") 'recentf-open-files)

skeleton orgmode:

(global-set-key (kbd "C-c 3") 'plantilla-orgmode)

skeleton beamer:

(global-set-key (kbd "C-c 4") 'plantilla-beamer)

skeleton plantilla:

(global-set-key (kbd "C-c 5") 'plantilla-latex)

3.2 Con C-c <letra>

Abrir una URL de w3m en el navegador externo:

(global-set-key (kbd "C-c a") 'w3m-external-view-this-url)

Poner el cursor sobre una URL de un texto y abrirla en el firefox Creada la función w3mext

(global-set-key (kbd "C-c b") 'open-link)

executar scripts:

(global-set-key (kbd "C-c e") 'executable-interpret)

Abrir firefox:

(global-set-key (kbd "C-c f") 'browse-url-firefox)

Ir a la línea…

(global-set-key (kbd "C-c g") 'goto-line)

eliminar frame de una conexión remota por ssh (emacsclient -t)

(global-set-key (kbd "C-c h") 'delete-frame)

Resaltar la linea del foco:

(global-set-key (kbd "C-c i") 'global-hl-line-mode)

Comentar trozos de codigo:

(global-set-key (kbd "C-c j") 'comment-region)

skeleton logo:

(global-set-key (kbd "C-c l") 'logo)

Abrir menu de los buffers abiertos:

(global-set-key (kbd "C-c m") 'buffer-menu)

Reload .emacs. Tambien existe función M-x eb (eval-buffer)

(global-set-key (kbd "C-c n") ;.emacs
                '(lambda () (interactive) (load-file "~/.emacs")))

Eval-buffer

(global-set-key (kbd "C-c ñ") 'eval-buffer)

Compilar archivo lisp:

(global-set-key (kbd "C-c o") 'byte-compile-file)

Imprimir buffer a pdf

(global-set-key (kbd "C-c p") 'pdf-save-buffer)

executar scripts con quickrun:

(global-set-key (kbd "C-c r") 'quickrun)

Lanzar el buffer scratch con C-c s:

(global-set-key (kbd "C-c s") ;scratch
                 (lambda()(interactive)(switch-to-buffer "*scratch*")))

Abrir terminal con shell:

(global-set-key (kbd "C-c t") 'shell)

Abrir ansi-term

(global-set-key (kbd "C-c T") 'ansi-term)

Descomentar trozos de codigo:

(global-set-key (kbd "C-c u") 'uncomment-region)

Crear backup del buffer actual:

(global-set-key (kbd "C-c v") 'save-backup)

Esconder/mostrar archivos ocultos:

(global-set-key (kbd "C-c w") 'dired-dotfiles-toggle)

abrir notas deft. Nueva nota C-c M-y

(global-set-key (kbd "C-c y") 'deft)

3.3 C-c M-…

alternar entre ventana horizontal y vetical

(global-set-key (kbd "C-c M-a") 'transpose-frame)

Guardar todo y salir. Igual que con C-c M-s

(global-set-key (kbd "C-c M-b") 'save-buffers-kill-emacs)

Abrir nueva ventana horizontal con un buffer distinto:

(global-set-key (kbd "C-c M-q") 'split-window-horizontally-other-buffer)

multiple cursors

(global-set-key (kbd "C-c M-r") 'mc/edit-lines)

buscar librerias

(global-set-key (kbd "C-c M-t") 'find-library)

Nueva nota deft.

(global-set-key (kbd "C-c M-y") 'deft-new-file-mamed)

3.4 C-c C-…

actualizar el tractatus de la web

(global-set-key (kbd "C-c C-a") 'actualitzar)

Activar/desactivar corrector

(global-set-key (kbd "C-c C-b") 'flyspell-mode)

enviar lineas o comandos a la terminal d'emacs

(global-set-key (kbd "C-c C-c") 'isend-send)

Descencriptar region:

(global-set-key (kbd "C-c C-d") 'epa-decrypt-region)

Encriptar region:

(global-set-key (kbd "C-c C-e") 'epa-encrypt-region)

Abrir el archivo que marca el cursor

(global-set-key (kbd "C-c C-f") 'find-file-at-point)

Lanzar magit status

(global-set-key (kbd "C-c C-g") 'magit-status)

ip local en el minibuffer

(global-set-key (kbd "C-c C-i") 'ip-local)

Buscar informació de sota el cursor (funcions, variables, comandes…)

(global-set-key (kbd "C-c C-j") 'helpful-at-point)

ip externa en el minibuffer

(global-set-key (kbd "C-c C-m") 'ip-externa)

Borrar lineas enteras con independencia del lugar del cursor

(global-set-key (kbd "C-c C-n") 'kill-whole-line)

Abrir dir del cursor en una ventana:

(global-set-key (kbd "C-c C-o") 'abrir-nueva-ventana)

Llamar a package-list-package

(global-set-key (kbd "C-c C-p") 'package-list-packages)

Abre menú de archivos o directorios:

(global-set-key (kbd "C-c C-r") 'hydra-dired/body)

Guardar todos los buffers

(global-set-key (kbd "C-c C-s") 'save-all)

Desplegar buffers abiertos en el minibuffer. "a" los ocultos. "q" cerrar

(global-set-key (kbd "C-c C-t") 'bs-show)

traducir texto seleccionado con google

(global-set-key (kbd "C-c C-v") 'google-translate-at-point)

Abrir nueva ventana horinzontal con un buffer distinto:

(global-set-key (kbd "C-c C-w") 'split-window-vertically-other-buffer)

Si se està en modo writeroom agrandar/disminuir la fuente:

(with-eval-after-load 'writeroom-mode
  (define-key writeroom-mode-map (kbd "C-c <") #'writeroom-decrease-width)
  (define-key writeroom-mode-map (kbd "C-c >") #'writeroom-increase-width)
  (define-key writeroom-mode-map (kbd "C-c =") #'writeroom-adjust-width))

4 Funciones

(defun display-startup-echo-area-message ()
  " mostrar mensaje en el minibuffer"
    (message "Arxiu de configuració llegit. Activat emacs... l'editor dels deus!"))
(defun insert-system-type ()
  " insertar tipo de sistema"
  (interactive)
  (insert (format "%s" system-type)))
(defun insert-system-name ()
  " insertar nombre del sistema"
  (interactive)
  (insert (format "%s" system-name)))
(defun open-link ()
  " Cursor sobre una URL o una imagen y abrirla con firefox. [C-c b]"
    (interactive)
    (let (url)
      (if (string= major-mode "w3m-mode")
              (setq url (or (w3m-anchor) (w3m-image)
                w3m-current-url)))
          (browse-url-firefox (if url url (car
                       (browse-url-interactive-arg
                        "URL: "))))
      ))
(defun save-backup ()
  " Copia de seguridad con fecha del búfer actual en ~/.emacs.d/backups (C-c v)"
  (interactive)
  (write-region (point-min) (point-max)
                (format "~/.emacs.d/backups/%s-%s"
                        (format-time-string "%d-%m-%Y")
                        (buffer-name))))
(defun copiar-ruta ()
  " Copiar la ruta del archivo del presente buffer (Pegarla con C-x y):"
  (interactive)
  (kill-new buffer-file-name t)
  (message "Ruta del archivo copiada."))
(defun ruta ()
  " Mostrar en el minibuffer el path del presente buffer"
  (interactive)
  (message (buffer-file-name)))
(defun my-eshell-mode-faces ()
  " aumentar colorines en eshell"
;  (face-remap-add-relative 'default '((:background "red" :foreground "#BD8700"))))
  (face-remap-add-relative 'default '((:foreground "#BD8700"))))
(add-hook 'eshell-mode-hook 'my-eshell-mode-faces)
(defun eshell-clear ()
  " Limpiar eshell buffer."
  (interactive)
  (let ((input (eshell-get-old-input)))
    (eshell/clear-scrollback)
    (eshell-emit-prompt)
    (insert input)))
;;; Función para pasar un buffer a pdf:
(defun pdf-print (&optional filename)
  " Buffer a pdf. Con: C-u M-x pedirá nombre para guardar, por defecto el mismo con extensión pdf."
  (interactive (list (if current-prefix-arg
                         (ps-print-preprint 4)
                       (concat (file-name-sans-extension (buffer-file-name))
                               ".ps"))))
  (ps-print-with-faces (point-min) (point-max) filename)
  (shell-command (concat "ps2pdf " filename))
  (delete-file filename)
  (message "Guardado en %s" (concat (file-name-sans-extension filename) ".pdf")))
(defun insert-date (prefix)
  " Insertar: fecha (M-x insert-date), dia de la semana y fecha (C-u M-x insert-date) o fecha con horas, minutos y segundos (C-u C-u M-x insert-date."
  (interactive "P")
  (let ((format (cond
                 ((not prefix) "%d-%m-%Y")
                 ((equal prefix '(4)) "%A, %d %B %Y")
                 ((equal prefix '(16)) "%d-%m-%Y %H:%M:%S"))))
    (insert (format-time-string format))))
(defun comment-indent-default ()
  " Colocar los comentarios en la columna 0"
  (setq comment-column 0))
;  (setq-local comment-start "# ")
;(add-hook 'lisp-mode-hook (setq comment-column 5))
(defun external-app ()
  " Abrir archivo con apps externas. (F8)"
  (interactive)
  (let* ((file (dired-get-filename nil t)))
    (call-process "xdg-open" nil 0 nil file)))
(defun dired-dotfiles-toggle ()
  " En dired mostrar/esconder archivos ocultos. (C-c w)"
  (interactive)
  (when (equal major-mode 'dired-mode)
    (if (or (not (boundp 'dired-dotfiles-show-p)) dired-dotfiles-show-p)
        (progn
          (set (make-local-variable 'dired-dotfiles-show-p) nil)
          (message "h")
          (dired-mark-files-regexp "^\\\.")
          (dired-do-kill-lines))
      (progn (revert-buffer)
                    (set (make-local-variable 'dired-dotfiles-show-p) t)))))
(defun ventana-nueva-p (path)
  " Directorios en una nueva ventana. t si el patch es directorio y nil si es archivo"
    (car (file-attributes path)))
(defun abrir-nueva-ventana ()
  " en dired abrir el directorio o archivo del cursor en nueva ventana. (C-c C-o)"
  (interactive)
  (require 'ffap)
  (let ((file (or (ffap-url-at-point)
                  (ffap-file-at-point))))
    (unless (stringp file)
      (error"No es un archivo o una URLb"))
    (when (file-exists-p (expand-file-name file))
      (setq file (expand-file-name file)))
    (message "Abrir: %s" file)
    (if (ventana-nueva-p file)
        (dired-other-window file)
      (find-file-other-window file))
    ))
(defun wget-hide ()
  " Esconder la información de la descarga."
  (interactive)
  (if (bufferp (get-buffer wget-process-buffer))
      (delete-window (get-buffer-window (get-buffer wget-process-buffer))))
  (setq wget-hide-status t))
(defun wget-show ()
  " Mostrar información de la descarga."
  (interactive)
  (call-interactively 'wget-state-of-progress)
  (setq wget-hide-status nil))
(provide 'wget-extension)
(defun google-buscar ()
  " Buscar en google con firefox la palabra bajo el cursor."
  (interactive)
  (browse-url-firefox
(concat "http://www.google.com.pe/search?hl=en&q=define%3A"
                       (thing-at-point 'word ))))
(defun ddg-search (text)
  " Buscar en firefox con DuckDuckGo la palabra que se entre"
  (interactive "sPalabra a buscar: ")
  (browse-url-firefox
  (concat "https://duckduckgo.com/?q="
          (replace-regexp-in-string " " "+" text))))
(defun definir ()
  " Busca la palabra debajo del cursor en el navegador"
  (interactive)
  (browse-url-firefox
   (concat "https://duckduckgo.com/?q="
           (thing-at-point 'word))))
(defun tractatus ()
  " Abrir el tractatus."
    (interactive)
      (find-file "~/tractatus/tractatus.txt"));
(defun bashrc ()
  " Abrir ~/.bashrc."
  (interactive)
    (find-file "~/.bashrc"))
(defun sudo-open-file (file)
  " Abrir archivo com privilegios de administrador"
  (interactive "FFind file: ")
  (set-buffer
   (find-file
    (concat "/sudo::"
            (expand-file-name file)))))
(defun su ()
  " Reabrir el presente archivo como root."
  (interactive)
  (when buffer-file-name
    (find-alternate-file
          (concat "/su::" buffer-file-name))))
(defun abrir-buffer-con-firefox ()
  " Abrir presente buffer con firefox"
  (interactive)
  (let ((filename (buffer-file-name)))
        (browse-url-firefox (concat "file://" filename))))
(defun eb ()
  " función para eval-buffer"
  (interactive)
  (call-interactively 'eval-buffer)
  (message "El buffer ha estat correctament evaluat"))
(defun electric-indent-ignore-text (char)
  " Ignorar indentacion en archivos de texto (text-mode)"
  (if (equal major-mode 'text-mode)
      'no-indent
    nil))
(add-hook 'electric-indent-functions 'electric-indent-ignore-text)
(defun split-window-vertically-other-buffer ()
  " Abrir nueva ventana vertical con un buffer distinto (C-x 4)"
  (interactive)
  (split-window-vertically)
  (set-window-buffer (next-window) (other-buffer)))
(defun split-window-horizontally-other-buffer ()
  " Abrir nueva ventana horizontal con un buffer distinto (C-x 5)"
  (interactive)
  (split-window-horizontally)
  (set-window-buffer (next-window) (other-buffer)))
(defun youtube-dl ()
  " Copiar la url en el navegador y bajar el video de youtube al directorio ~/Baixades"
  (interactive)
  (let* ((str (current-kill 0))
     (default-directory "~/Baixades")
     (proc (get-buffer-process (ansi-term "/bin/bash"))))
    (term-send-string
     proc
     (concat "cd ~/Baixades && youtube-dl " str "\n"))))
(defun zone-choose (pgm)
  " Función para escoger el salvapantallas para 'zone'. Con TAB salen las opciones"
  (interactive
   (list
    (completing-read
     "Program: "
     (mapcar 'symbol-name zone-programs))))
  (let ((zone-programs (list (intern pgm))))
          (zone)))
(defun delete-buffer-and-file ()
  " Eliminar el archivo visitado en el presente buffer y el buffer correspondiente."
  (interactive)
  (let ((filename (buffer-file-name))
        (buffer (current-buffer))
        (name (buffer-name)))
    (if (not (and filename (file-exists-p filename)))
        (error "¡El buffer '%s' no se está visitando!" name)
      (when (yes-or-no-p "¿Eliminar el archivo?")
        (delete-file filename)
        (kill-buffer buffer)
                        (message "El archivo '%s' ha sido eliminado" filename)))))
(defun ddg-wikipedia (text)
  " Buscar en firefox con DuckDuckGo en la wikipedia"
  (interactive "sCercar a Wikipedia: ")
  (browse-url-firefox
   (concat "https://duckduckgo.com/?q=!wikipedia-es+"
           (replace-regexp-in-string " " "+" text))))
(defun revert-all-buffers ()
  " Revertir todos los buffers abiertos a sus respectivos archivos"
  (interactive)
  (let* ((list (buffer-list))
         (buffer (car list)))
    (while buffer
      (when (buffer-file-name buffer)
        (progn
          (set-buffer buffer)
          (revert -buffer t t t)))
      (setq list (cdr list))
      (setq buffer (car list))))
  (message "Todos los archivos actualizados"))
(require 'cl-lib)
(defun shell-at-dir (dir)
  " Abrir el directorio del presente buffer visitado en una shell."
  (interactive (list default-directory))
  (let ((buf (car (cl-remove-if-not
                   (lambda (it)
                     (with-current-buffer it
                       (and (derived-mode-p 'shell-mode)
                            (equal default-directory dir))))
                   (buffer-list)))))
    (if buf
        (switch-to-buffer buf)
      (shell (generate-new-buffer-name "*shell*")))))
(defun open-buffer-path ()
  " Abrir con el navegador de archivos por defecto el directorio del presente buffer."
  (interactive)
  (shell-command (concat "xdg-open "
                          (expand-file-name default-directory))))
(defun indent-whole-buffer ()
  " Indentar todo el buffer"
  (interactive)
  (delete-trailing-whitespace)
  (indent-region (point-min) (point-max) nil)
  (untabify (point-min) (point-max)))
(defun reiniciar ()
  " Reiniciar el sistema"
  (interactive)
    (shell-command (concat "echo " (shell-quote-argument (read-passwd "Password? "))
                       " | sudo -S init 6")))
(defun uname ()
  " Define nombre sistema, distro, kernel, arquitectura..."
  (interactive)
  (shell-command "uname -a"))
(defun sudo-shell-command (command)
  " Ejecutar un comando con sudo"
  (interactive "MShell command: ")
  (with-temp-buffer
    (cd "/sudo::/")
        (async-shell-command command)))
(defun miniflux ()
  " Arrancar en el navegador firefox el lector de noticias"
  (interactive)
  (browse-url-firefox "http://localhost/miniflux"))
(defun tractatus-web ()
  " Arrancar en el navegador firefox el tractatus"
  (interactive)
  (browse-url-firefox "http://lapipaplena.duckdns.org/tractatus"))
(defun pytrac ()
  " Arrancar en el navegador firefox el pytrac"
  (interactive)
  (browse-url-firefox "http://staredsi.eu/wiki/"))
(defun goo-tractatus (text)
  " Buscar en firefox con google en el tractatus"
  (interactive "sCercar al tractatus: ")
  (browse-url-firefox
   (concat "https://google.es/?q=site%3Ahttp%3A%2F%2Flapipaplena.zzzz.io/tractatus "
           (replace-regexp-in-string " " "+" text))))
(defun search (regexp)
  " Buscar una expresión en todos los buffers"
  (interactive "sExpresió a cercar: ")
  (multi-occur-in-matching-buffers ".*" regexp))
(defun kill-all-other-buffers ()
  " Matar todos los buffers excepto el presente."
  (interactive)
  (mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
(defun test-emacs ()
  " Prueba la configuración de emacs mostrando errores en un buffer"
  (interactive)
  (require 'async)
  (async-start
   (lambda () (shell-command-to-string
               "emacs --batch --eval \"
(condition-case e
    (progn
      (load \\\"~/.emacs\\\")
      (message \\\"-OK-\\\"))
  (error
   (message \\\"ERROR!\\\")
   (signal (car e) (cdr e))))\""))
   `(lambda (output)
      (if (string-match "-OK-" output)
          (when ,(called-interactively-p 'any)
            (message "Tot és correcte"))
        (switch-to-buffer-other-window "*startup error*")
        (delete-region (point-min) (point-max))
        (insert output)
        (search-backward "ERROR!!")))))
(defun mi-wttrin ()
  " Abrir wttrin con la primera ciudad especificada en 'wttrin-default-cities'"
  (interactive)
  (wttrin-query (car wttrin-default-cities)))
(defun temps ()
  " Muestra el tiempo en Figueres en una ventana..."
  (interactive)
    (async-shell-command "curl -H 'Accept-Language: es' -s wttr.in/figueras,spain | sed -n '1,7p'"))
(defun header-org-mode (language)
  " Insertar cabeceras en org-mode."
  (interactive
   (let ((languages '("Generic" "HTML" "LaTeX" )))
     (list (ido-completing-read "To which export: " languages))
     )
   )

  (when (string= language "Generic")
    (progn
      (insert (format "#+TITLE:\n"))
      (insert (format "#+AUTHOR:\n"))
      (insert (format "#+LANGUAGE: es \n"))
      (insert (format "#+OPTIONS:   toc:1\n"))
      (insert (format "#+TOC: headlines 3\n\n"))
      )
    )

  (when (string= language "HTML")
    (progn
      (insert (format "#+TITLE:\n"))
      (insert (format "#+AUTHOR:\n"))
      (insert (format "#+LANGUAGE: ca\n"))
      (insert (format "#+OPTIONS:   toc:1\n"))
      (insert (format "#+TOC: headlines 3\n"))
      ;(insert (format "#+SETUPFILE: /cygdrive/c/Users/Alex/.emacs.d/css/org-html-themes/setup/theme-readtheorg.setup\n\n"))
      )
    )

  (when (string= language "LaTeX")
    (progn
      (insert (format "#+Title:\n"))
      (insert (format "#+Author:\n"))
      (insert (format "#+LANGUAGE: es\n"))
      (insert (format "#+LATEX_CLASS: article\n"))
      (insert (format "#+LATEX_CLASS_OPTIONS: [spanish,a4paper]\n"))
      (insert (format "#+LATEX_HEADER: \\usepackage{color}\n"))
      (insert (format "#+LATEX_HEADER: \\usepackage[spanish]{babel}\n\n"))

      )
    )
  )
(defun writing-mode ()
  " Escribir sin distracciones con texto centrado, 110 caractares linea
    Con C-c [ y C-c ] se agranda o achica."
  (interactive)
  (cond ((bound-and-true-p olivetti-mode)
         (olivetti-mode)
         ;(flyspell-mode)
         (toggle-frame-fullscreen)
         (menu-bar-mode -1))
        (t
         (olivetti-mode 1)
         (toggle-frame-fullscreen))))
(defun visit-file-at-point ()
  " Visitar el archivo que marca el cursor, si existe"
  (interactive)
  (let ((file (ffap-guess-file-name-at-point)))
    (when file
            (find-file file))))
(defun mi-org-screenshot ()
  " Captura del buffer org, guardarla en el mismo directorio con nombre
    'fecha-hora' e insertar el link en el punto del cursor"
    (interactive)
    (let ((filename
           (concat
            (make-temp-name
             (concat (buffer-file-name)
                     "_"
                     (format-time-string "%Y%m%d_%H%M%S_")) ) ".png")))
      (call-process "scrot" nil nil nil "-s" filename)
      (insert (concat "[[" filename "]]"))
          (org-display-inline-images)))
(defun actualitzar ()
  " Actualitza el tractatus situado en lapipaplena.duckdns.org:8000
    cuando se ha modificado el tractatus.txt"
  (interactive)
  (async-shell-command "webtrac2pip.sh"))
(defun geoiplookup (target)
  " Mostrar en el minibuffer el origen de una url."
  (interactive "sUrl: ")
  (shell-command (concat "geoiplookup " target)))
(defun mi-ssh (args)
  " Conectar con un host remoto por ssh."
  (interactive "sssh ")
  (let ((switches (split-string-and-unquote args)))
    (set-buffer (apply 'make-term "ssh" "ssh" nil switches))
    (term-mode)
    (term-char-mode)
    (switch-to-buffer "*ssh*")))
(defun wrap-<p>-region (start end)
  " Insertar etiquetas <p></p> en una región."
  (interactive "r")
  (save-excursion
    (goto-char end) (insert "</p>")
    (goto-char start) (insert "<p>")))
(defun wrap-<b>-region (start end)
  " Insertar etiquetas <b></b> en una region"
  (interactive "r")
  (save-excursion
    (goto-char end) (insert "</b>")
    (goto-char start) (insert "<b>")))
(defun insert-random-number ()
  " Insertar un número aleatorio entre 0 y 9."
  (interactive)
  (insert (number-to-string (random 9))))
(defun ip-local ()
  " Mosrar la ip local (C-c C-i)"
  (interactive)
  (shell-command "hostname -I"))
(defun ip-externa ()
  " Mostrar la ipa externa (C-c C-m)"
  (interactive)
  (shell-command "wget -O - -q http://checkip.dyndns.org/ | cut -d':' -f2 | cut -d'<' -f1| cut -c2-"))
(defun info-version ()
  " Mostrar version de emacs y org-mode"
  (interactive)
     (message "Emacs %s org-mode %s"
              emacs-version org-version))
(defun copy-lines (arg)
  " Copiar tantas lineas como indique el prefijo argumento.
   C-u 3 M-x copy-lines Copiara 3 lineas. Con C-y las pegará"
  (interactive "p")
  (kill-ring-save (line-beginning-position)
                  (line-beginning-position (+ 1 arg)))
  (message "%d linea%s en kill ring" arg (if (= 1 arg) "" "s")))
(defun remove-mark ()
  " Desmarcar una región marcada. Útil si se está en una macro para no detenerla"
  (interactive)
  (if (region-active-p)
      (deactivate-mark)))
(defun save-all ()
  " Guardar todos  los buffers (C-c C-s)
  con <C-u C-x s> y <C-s !> tambien los hace. "
  (interactive) (save-some-buffers t)
  (message "Tos els buffers guardats"))
(defun guardar-tot-i-sortir ()
  " Guardar todos los buffers y cerrar emacs (C-c M-s). Tambe C-c M-b (save-buffers-kill-emacs)"
  (interactive)
  (save-some-buffers t)
  (kill-emacs))
(defun curs-emacs-eww ()
  " Entrar en el curso de emacs del tractatus por consola"
  (interactive)
  (eww "http://lapipaplena.zzzz.io/emacs/"))
(defun cerrar (text)
  " Matar la aplicación de las X que se especifique"
  (interactive "sAplicación a cerrar: ")
  (shell-command  (concat "killall " text)))
(defun rename-file-and-buffer (new-name)
  " Renombrar el presente buffe y su archivo asociado."
  (interactive "sNuevo nombre: ")
  (let ((name (buffer-name))
        (filename (buffer-file-name)))
    (if (not filename)
        (message "Buffer '%s' y no está siendo visitado el archivo" name)
      (if (get-buffer new-name)
          (message "El buffer '%s' ya existe" new-name)
        (progn
          (rename-file name new-name 1)
          (rename-buffer new-name)
          (set-visited-file-name new-name)
                    (set-buffer-modified-p nil))))))
(defun git-pull ()
  " Mostrar si se han producido cambios en el tractatus"
  (interactive)
  (shell-command "cd /home/pep/tractatus; git pull"))
(defun list-functions ()
  " Todas las funcioens del archivo de configuración .emacs"
  (interactive)
  (shell-command "list_functions_emacs.sh")
  (find-file "~/functions/info2.txt"))
(defun list-keys ()
  " Todos los atajos del archivo de configuración .emacs"
  (interactive)
  (shell-command "dreceres_emacs.sh")
  (find-file "~/dreceres_emacs/dreceres_definitiu.txt"))
(defun meu-term (nom)
  " Un ansi-term con nombre escogido del buffer"
  (interactive "sNom: ")
  (ansi-term "/bin/bash" nom))
(defun mi-text-faces ()
  " Que los buffers en modo .txt se vean de distinto color."
  (face-remap-add-relative 'default
                           :background "#433C3C"
                           :foreground "lightblue"))
(add-hook 'text-mode-hook 'mi-text-faces)
(defun mi-server ()
  "Abrir un buffer shell con una sesión ssh."
  (interactive)
  (comint-send-string
   (get-buffer-process (shell))
   "ssh -p 5000 user@url.com\n"))

Fecha: 2019

Autor: pep