Rafael Leyva Ruiz

Python backend developer. Vim nerd.

Configuracion de emacs.

Posted at — Jan 1, 0001

Credits to Harry R. Schwartz, @hrs, Zamansky.

Informacion personal

  (setq user-full-name "Rafael Leyva Ruiz"
        user-mail-address "rafaelleru95103@gmail.com"
        calendar-latitude 42.2
        calendar-longitude -71.1
        calendar-location-name "Madrid, ES")
Madrid, ES

Gestion de paquetes melpa y cask

  (require 'cask "~/.cask/cask.el")
  (cask-initialize)
  (require 'pallet)
pallet

Use package

  (unless (package-installed-p 'use-package)
    (package-refresh-contents)
    (package-install 'use-package))

Ajustes de la interfaz

Ocultar botones que no uso y la barra de scroll.

  (tool-bar-mode -1)
  (menu-bar-mode 1)
  (scroll-bar-mode -1)

tema personalizado


  (use-package gotham-theme
    :ensure t)

  (use-package solarized-theme
    :ensure t)

  (use-package danneskjold-theme
    :ensure t)

  (use-package atom-one-dark-theme
    :ensure t)

  (defun load-my-theme ()
;;;"""Carga mi tema solarized"""
(interactive)
(setq solarized-use-variable-pitch nil)
(setq solarized-height-plus-1 1.0)
(setq solarized-height-plus-2 1.0)
(setq solarized-height-plus-3 1.0)
(setq solarized-height-plus-4 1.0)
(setq solarized-high-contrast-mode-line t)
(load-theme 'solarized-dark t)
  )

  (add-hook 'after-init-hook 'load-my-theme)
  (when window-system
    (lambda) (load-my-theme))

  (defun load-my-white-theme ()
    (interactive)
    (load-theme 'solarized-light t)
    )
load-my-white-theme

Fuente Inconsolata

Permite ademas cambiar el tamaño de la ventana y la fuente para presentaciones por ejemplo.

  (setq hrs/default-font "Inconsolata")
  (setq hrs/default-font-size 13)
  (setq hrs/current-font-size hrs/default-font-size)

  (defun set-font () 
(interactive)
(setq hrs/default-font "Source Code Pro")
(setq hrs/default-font-size 12)
(setq hrs/current-font-size hrs/default-font-size))

  (setq hrs/font-change-increment 1.1)

  (defun hrs/set-font-size ()
"Set the font to `hrs/default-font' at `hrs/current-font-size'."
(set-frame-font
(concat hrs/default-font "-" (number-to-string hrs/current-font-size))))

  (defun hrs/reset-font-size ()
"Change font size back to `hrs/default-font-size'."
(interactive)
(setq hrs/current-font-size hrs/default-font-size)
(hrs/set-font-size))

  (defun hrs/increase-font-size ()
"Increase current font size by a factor of `hrs/font-change-increment'."
(interactive)
(setq hrs/current-font-size
   (ceiling (* hrs/current-font-size hrs/font-change-increment)))
(hrs/set-font-size))

  (defun hrs/decrease-font-size ()
"Decrease current font size by a factor of `hrs/font-change-increment', down to a minimum size of 1."
(interactive)
(setq hrs/current-font-size
   (max 1
 (floor (/ hrs/current-font-size hrs/font-change-increment))))
(hrs/set-font-size))

  (define-key global-map (kbd "C-)") 'hrs/reset-font-size)
  (define-key global-map (kbd "C-+") 'hrs/increase-font-size)
  (define-key global-map (kbd "C-_") 'hrs/decrease-font-size)
  (define-key global-map (kbd "C--") 'hrs/decrease-font-size)
  (hrs/set-font-size)

Resaltar linea de edicion

  (add-hook 'after-init-hook 'global-hl-line-mode)

Ver coincidencia de parentesis

  (show-paren-mode 1)
t

Tamaño al abrir una nueva ventana de emacs

  (when window-system (set-frame-size (selected-frame) 130 45))

No mover el cursor al hacer scroll con el raton

  (defun scroll-down-keep-cursor ()
(interactive)
(scroll-down 1))
  (defun scroll-up-keep-cursor ()
(interactive)
(scroll-up 1))
scroll-up-keep-cursor

Activar ido mode (cambiado por ivy-mode y swiper)

   (ido-mode t)

Winner mode

  • Permite almacenar el estado anterior de las ventanas y volver con C-c flecha
  (use-package winner
    :ensure t
    :init
    (winner-mode t))

Ace window

Visto en https://www.youtube.com/watch?v=D6OUMVbPKSA&index=5&list=PL9KxKa8NpFxIcNQa9js7dQQIHc81b0-Xg parece muy util.

  (use-package ace-window
    :ensure t
    :init

    (defun my-ace-window ()
      (interactive)
      (linum-mode -1)
      (ace-window 1)
      (linum-mode 1))

    (global-set-key [remap other-window] 'ace-window)
                                       ;(setq aw-scope 'frame)
    :config 
    (custom-set-faces
         '(aw-leading-char-face
           ((t (:inherit ace-jump-face-foreground :height 2.0))))))
t

Auto revert mode

  (global-auto-revert-mode 1)
t

cambar preguntas de yes or no por y or n

http://pages.sachachua.com/.emacs.d/Sacha.html#org0477c97

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

Desactivar la pantalla de bienvenida

  (setq inhibit-startup-message t)
t

Modo terminal

(add-hook 'term-mode-hook '(set-background-color white))
set-background-color white

Utilidades

seleccionar con C-=

como en https://www.youtube.com/watch?v=vKIFi1h0I5Y&index=17&list=PL9KxKa8NpFxIcNQa9js7dQQIHc81b0-Xg&spfreload=5

  (use-package expand-region
    :ensure t
    :config
    (global-set-key (kbd "C-=") 'er/expand-region)
    (global-set-key (kbd "C-¿") 'er/contract-region))
t

suena interesante (historial de portapapeles con ivy y counsel)

atajo para ir directamente a una linea goto-line

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

Ivi mode y swiper

Mirar helm (parece mas potente)

https://github.com/emacs-helm/helm https://github.com/abo-abo/swiper-helm

  (use-package ivy
  :ensure t
  :config
  (ivy-mode 1))

  (use-package swiper
    :ensure t)

  (use-package counsel
    :ensure t)
  ;(setq ivy-use-virtual-buffers t)

Helm

  (use-package helm
    :ensure t
    :config
    (helm-autoresize-mode t)
    (helm-mode t)
    (global-set-key (kbd "C-x C-f") 'helm-find-files); <del> borre hasta /
    (global-set-key (kbd "C-x b") 'helm-mini)
    (global-set-key (kbd "M-x") 'helm-M-x)
    (global-set-key (kbd "M-y") 'helm-show-kill-ring)
    (define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action))

  (use-package swiper-helm
    :ensure t
    :config
    (global-set-key "\C-s" 'swiper-helm)
    (global-set-key "\C-r" 'swiper-helm)
    (global-set-key (kbd "C-c C-r") 'ivy-resume)
    (setq ivy-use-virtual-buffers t)
    (setq ivy-display-style 'fancy)
    (define-key read-expression-map (kbd "C-r") 'counsel-expression-history))
t

helm-google

¿Por qué no?

  (use-package helm-google
    :ensure t)

neotree

  (use-package neotree
    :ensure t
    :config
    (setq neo-theme (if (display-graphic-p) 'ascii 'arrow))
    (global-set-key (kbd "C-x n t") 'neotree-toggle))
t

smartparents

  (use-package smartparens
       :ensure smartparens
       :init
       (smartparens-global-mode t))

which-key

En ocasiones no recuerdas que combinacion realiza una accion en concreto, ahi es cuando which-key entra en accion.

  (use-package which-key
    :ensure t
    :init
    (which-key-mode 1))

engine-mode

seleccionar y buscar desde emacs

  (use-package engine-mode
    :ensure t
    :config
    (engine-mode t)
    (defengine duckduckgo
      "https://duckduckgo.com/?q=%s"
      :keybinding "d")

    (defengine google
      "http://www.google.com/search?ie=utf-8&oe=utf-8&q=%s"
      :keybinding "g")
    )
t

Hydra

     (use-package hydra
       :ensure t)

evil-mode

  (use-package evil
    :ensure t
    :config
    (evil-mode 1))
t

elfeed

  (use-package elfeed
    :ensure t
    :init
    :config
  )
  (setq elfeed-db-directory "~/.emacs.d/elfeeddb")
~/.emacs.d/elfeeddb
  (use-package elfeed-goodies
  :ensure t
  :config 
  )
  (elfeed-goodies/setup)
elfeed-goodies/split-show-prev
  (use-package elfeed-org
    :ensure t
    )
  (elfeed-org)
  (setq rmh-elfeed-org-files (list "/data/Nextcloud/org/rss.org"))
/data/Nextcloud/org/rss.org

Ajustes para lenguajes de programacion

projectile mode

  (use-package projectile
    :ensure t
    :init
    (projectile-mode t))

Autocomplete mode.

  (use-package auto-complete
    :ensure t
    :config
    (ac-config-default)
    (global-auto-complete-mode -1))

  (add-hook 'org-mode-hook 'auto-complete-mode)
(lambda nil (org-bullets-mode t)) auto-complete-mode er/add-org-mode-expansions #[0 \300\301\302\303\304$\207 [add-hook change-major-mode-hook org-show-block-all append local] 5] #[0 \300\301\302\303\304$\207 [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes org-ac/setup-current-buffer auto-revert-mode

Activar company mode de modo global y flycheck para colorear la sintaxis

  (use-package flycheck
  :ensure t
  :init
  (global-flycheck-mode t))

  (use-package company
  :ensure t
  :config
  (global-company-mode t)
  (setq company-echo-delay 0)
  (global-set-key (kbd "C-*") 'company-complete)
  (add-to-list 'company-backends 'company-elisp)
  (add-to-list 'company-backends 'company-tern)
  (add-to-list 'company-backends 'company-css))
t

Yasnippet.

  (use-package yasnippet
    :ensure t
    :init
    (yas-global-mode 1)
    (add-to-list 'company-backends 'company-yasnippet))

Multiples cursores, muy practico para editar html.

  (use-package multiple-cursors
    :ensure t)

Hydra para multiple cursors.

  (defhydra hydra-multiple-cursors (global-map "C-c m")
    "multiple cursors"
    (">" mc/mark-next-like-this "next like this")
    ("<" mc/mark-previous-like-this "previous like this")
    ("c" mc/edit-lines "edit lines")
    ("e" mc/edit-ends-of-lines "edit end of lines")
    ("b" mc/edit-beginnings-of-lines "edit begin of lines")
    )
hydra-multiple-cursors/body

dumb jump

  (use-package dumb-jump
    :ensure
    :bind 
    (("C-x g o" . dumb-jump-go-other-window)
     ("C-x g j" . dumb-jump-go)
     ("C-x g x" . dumb-jump-go-prefer-external)
     ("C-x g z" . dumb-jump-go-prefer-external-other-window))
    :config (setq dumb-jump-selector 'helm)
    )

minimap

  (use-package minimap
    :ensure t
    :config
    (setq minimap-window-location 'right)
    (setq minimap-always-recenter -1)
    (setq minimap-minimum-width '0)
    (setq minimap-width-fraction 0.1)
    (setq minimap-update 1)
    )
t

Python

autocomplete con company Jedi

  (use-package company-jedi
    :ensure t)

  (defun my/python-mode-hook ()
    (add-to-list 'company-backends 'company-jedi))
  (add-hook 'python-mode-hook 'my/python-mode-hook)
my/python-mode-hook (lambda nil (set (make-local-variable (quote yas-indent-line)) (quote fixed))) elpy-mode er/add-python-mode-expansions

elpy

utilidades de IDE python en emacs

  (use-package elpy
    :ensure t
    :config
    (add-hook 'python-mode-hook 'elpy-mode)
    (add-hook 'elpy-mode-hook (auto-complete-mode -1))
    )
t

C++

autocomplete C/C++ headers from .h files in a project

  (use-package auto-complete-c-headers
:ensure t
:config
(defun my:ac-c-headers-init ()
(require 'auto-complete-c-headers)
(add-to-list 'ac-sources 'ac-source-c-headers)))

  (add-hook 'c++-mode-hook 'my:ac-c-headers-init)
  (add-hook 'c-mode-hook 'my:ac-c-headers-init)
my:ac-c-headers-init (lambda nil (easy-menu-add-item nil (quote (C)) (rtags-submenu-list))) er/add-cc-mode-expansions rtags-start-process-unless-running irony-mode

Irony-mode

  (use-package irony
    :ensure t)

  (use-package company-irony
    :ensure t)

  (use-package flycheck-irony
    :ensure t
    :config
    (flycheck-irony-setup))

  (use-package company-irony-c-headers
    :ensure t)

  (add-hook 'c++-mode-hook 'irony-mode)
  (add-hook 'c-mode-hook 'irony-mode)
  (add-hook 'objc-mode-hook 'irony-mode)

  ;; replace the `completion-at-point' and `complete-symbol' bindings in
  ;; irony-mode's buffers by irony-mode's function

  (defun my-irony-mode-hook ()
    (define-key irony-mode-map [remap completion-at-point]
'counsel-irony)
    (define-key irony-mode-map [remap complete-symbol]
'counsel-irony)
    ;; ;; (define-key irony-mode-map [remap comment-region]
    ;; ;;   'compile)
    (eval-after-load 'company
'(add-to-list 'company-backends '(company-irony-c-headers company-irony))))

  (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
  (add-hook 'irony-mode-hook 'my-irony-mode-hook)
my-flycheck-rtags-setup my-irony-mode-hook irony-cdb-autosetup-compile-options

modern c++ font lock

  (use-package modern-cpp-font-lock
:ensure t
:config
(modern-c++-font-lock-global-mode t))
t

Rtags

  (add-hook 'c-mode-hook 'rtags-start-process-unless-running)
  (add-hook 'c++-mode-hook 'rtags-start-process-unless-running)
  (add-hook 'objc-mode-hook 'rtags-start-process-unless-running)
  (setq rtags-completions-enabled t)
  (setq rtags-autostart-diagnostics t)
  (rtags-enable-standard-keybindings)
rtags-location-stack-visualize
heml integration
  (use-package helm-rtags
:ensure t
:config
(setq rtags-use-helm t)
)
  (setq rtags-display-result-backend 'helm)
helm
company-rtags support
  (use-package company-rtags
:ensure t
:config
(setq rtags-completions-enabled t)
(eval-after-load 'company
'(add-to-list 'company-backends 'company-rtags))
(setq rtags-autostart-diagnostics t)
(rtags-enable-standard-keybindings))
t
flycheck rtags integration
(use-package flycheck-rtags
:ensure t
:config
(defun my-flycheck-rtags-setup ()
(flycheck-select-checker 'rtags)
(setq-local flycheck-highlighting-mode 'symbols)
(setq-local flycheck-check-syntax-automatically nil))
)

;(add-hook 'c-mode-common-hook #'my-flycheck-rtags-setup)
(add-hook 'irony-mode-hook 'my-flycheck-rtags-setup)
my-flycheck-rtags-setup my-irony-mode-hook irony-cdb-autosetup-compile-options

javascript

(use-package js2
  :ensure t
  :config
  (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)))

  (setq js-indent-level 2)
(use-package eslint-fix
  :ensure t
  :config
   (eval-after-load 'js2-mode
'(add-hook 'js2-mode-hook (lambda () (add-hook 'after-save-hook 'eslint-fix nil t)))))
t
  (use-package tern
    :ensure t)

  (use-package company-tern
    :ensure t)

Vuejs mode

  (setq js-indent-level 2)
  (add-hook 'js-mode-hook (lambda () (tern-mode t)))
  (use-package vue-mode
:ensure t
:config
(setq mmm-submode-decoration-level 0))
t

html && css

  (use-package rainbow-mode
    :ensure t 
    :config
    (add-hook 'html-mode-hook
     (lambda () 
               (rainbow-mode t)))
    (add-hook 'css-mode-hook
	      (lambda ()
		(rainbow-mode t)))
    (add-hook 'web-mode
	      (lambda ()
		rainbow-mode t)))
t

Latex

No es un lenguaje de programcaion pero es donde mas sentido me parece que tiene (como html xD)

autoparsear el buffer al cargarlo

  (setq TeX-parse-self t)
t

Compilar siempre con pdflatex

  (setq TeX-PDF-mode t)
t

Minor mode para matematicas, añade ademas ciertos atajos de teclado

  (add-hook 'LaTeX-mode-hook
            (lambda ()
              (LaTeX-math-mode)
              (setq TeX-master t)))
lambda nil (LaTeX-math-mode) (setq TeX-master t)

R

Java

JDEE

  (use-package jdee
    :ensure t
    :config
    (add-hook 'java-mode-hook (setq jdee-server-dir "~/.jars")))
t

eclipse-ecl

  (require 'ecl-mode "~/.emacs.d/ecl-mode.el/ecl-mode.el")
ecl-mode

PDDL domain

  ;(require 'pddl-mode "~/.emacs.d/ppdl-mode.el")

Tratar CamelCase como palabras separadas.

(global-subword-mode 1)
t

Magit

  (use-package magit
    :ensure t)
  (global-set-key (kbd "M-g") 'magit-status)
magit-status

Orgmode

Autocompletado para org

  (use-package org-ac
    :ensure t
    :init
    (org-ac/config-default))

Autorevertmode en buffers de rogmode

  (add-hook 'org-mode-hook 'auto-revert-mode 1)
(lambda nil (org-bullets-mode t)) auto-complete-mode er/add-org-mode-expansions #[0 \300\301\302\303\304$\207 [add-hook change-major-mode-hook org-show-block-all append local] 5] #[0 \300\301\302\303\304$\207 [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes org-ac/setup-current-buffer auto-revert-mode

Activar puntos en vez de asteriscos, que mola mas.

  (use-package org-bullets
    :ensure t
    :config
    (add-hook 'org-mode-hook
              (lambda ()
		(org-bullets-mode t))))
t

En vez de puntos suspensivos mostrar flecha '⤵'

  (setq org-ellipsis "⤵")

Bloques de codigo en archivos orgmode

Activar el coloreado de sintaxis en bloques de código de orgmode

  (setq org-src-fontify-natively t)
t

Hacer que las tabulaciones actuen como si estuvieramos en un bugger del lenguaje indicadoBEGIN_SRC emacs-lisp

  (setq org-src-tab-acts-natively t)
t

No cambiar de ventana al editar un snippet de codigo

  (setq org-src-window-setup 'current-window)
current-window

GTD y ideas en org-mode

Keywords TODO

  (setq org-todo-keywords '((sequence "TODO" "DOING" "WAITING" "|" "DONE")))
sequence TODO DOING WAITING DONE

Todos los archivos org los guardo en '~/org/'

  (setq org-directory "~/org")
~/org

Funcion que devuelve el path de un archivo org en "~/org"

  (defun org-file-path (filename)
    "Return the absolute address of an org file, given its relative name."
    (concat (file-name-as-directory org-directory) filename))
org-file-path

Localizacion del archivo de todos

  (setq org-index-file (org-file-path "index.org"))
  (setq org-links-file (org-file-path "to-read.org"))
~/org/to-read.org

Localizacion del archive.org, ahi se guarda todo lo que hago.

  (setq org-archive-location
	(concat (org-file-path "archive.org") "::* From %s"))
~/org/archive.org::* From %s

La agenda se carga desde el index

  (setq org-agenda-files (list org-index-file
			       "~/org/gcal.org"
			       "~/org/idea.org"))
~/org/index.org ~/org/gcal.org ~/org/idea.org

La combinacion C-c C-x C-s establece un TODO como DONE y lo almacena en el index

  (defun mark-done-and-archive ()
    (interactive)
    (org-todo 'done)
    (org-archive-subtree))
  (define-key org-mode-map "\C-c\C-x\C-s" 'mark-done-and-archive) 

  (defun mark-done-and-archive-agenda ()
    (interactive)
    (org-agenda-todo 'done)
    (org-agenda-archive))
  (require 'org-agenda)
  (define-key org-agenda-mode-map "\C-c\C-x\C-s" 'mark-done-and-archive-agenda)
mark-done-and-archive-agenda

en el log de orgmode cuando se ha completado una tarea

  (setq org-log-done 'time)
time

Org-capture templates.

Hay templates para varias cosas:

  • Ideas que se me van ocurriendo para proyectos que hacer.
  • Cosas que tengo que comprar.
  • Articulos o libros que tengo que leer.
  • TODOs que tengo me van surgiendo.
TODO completar descripcion de los templates.
  (setq org-capture-templates
  '(("i" "Idea"
     entry
     (file (org-file-path "idea.org")
             "* IDEA %?\n"))

    ("r" "To read item"
     checkitem
     (file+datetree (org-file-path "to-read.org"))
     " [ ] %? %^g")

    ("b" "Item to buy"
     entry
     (file+datetree "buylist.org")
     "* BUY %?")

     ("t" "Todo"
          entry
          (file+headline org-index-file "TASKS")
          "* TODO %?\n  ADDED:%T")

     ("u" "UGR Todo"
          entry
          (file+headline org-index-file "UGR")
          "* TODO %? %^g:UGR:\nADDED:%T")

     ("e" "Nuevo evento"
          entry
          (file "~/org/gcal.org")
      "* %?\n\n%^T\n\n:PROPERTIES:\n\n:END:\n\n")
     ))
i Idea entry (file (org-file-path idea.org) * IDEA %?
Keybindings

Accesos rapidos de teclado para tareas y notas en org mode

  (define-key global-map "\C-cl" 'org-store-link)
  (define-key global-map "\C-ca" 'org-agenda)
  (define-key global-map "\C-cc" 'org-capture)
org-capture

Presionar C-c o i para abrir index.org

  (defun open-index-file ()
    "Open the master org TODO list."
    (interactive)
    (find-file org-index-file)
    (flycheck-mode -1)
    (end-of-buffer))

  (global-set-key (kbd "C-c o i") 'open-index-file)
open-index-file

C-c o l open links file

    (defun open-links-file ()
      "Open my to-read list"
      (interactive)
      (find-file org-links-file)
      (flycheck-mode -1)
      (end-of-buffer)
      )

  (global-set-key (kbd "C-c o l") 'open-links-file)
open-links-file
find-to-read-file
Hit M-n to quickly open up a capture template for a new todo.
  (defun org-capture-todo ()
    (interactive)
    (org-capture :keys "t"))

  (global-set-key (kbd "M-n") 'org-capture-todo)
org-capture-todo

Frame para capturas.

De Zamansky

    (defadvice org-capture-finalize 
	(after delete-capture-frame activate)  
      "Advise capture-finalize to close the frame"  
      (if (equal "capture" (frame-parameter nil 'name))  
      (delete-frame)))

    (defadvice org-capture-destroy 
	(after delete-capture-frame activate)  
      "Advise capture-destroy to close the frame"  
      (if (equal "capture" (frame-parameter nil 'name))  
      (delete-frame)))  

    (use-package noflet
      :ensure t)

    (defun make-capture-frame ()
      "Create a new frame and run org-capture."
      (interactive)
      (make-frame '((name . "Capture")))
      (select-frame-by-name "Capture")
      (noflet ((switch-to-buffer-other-window (buf) (switch-to-buffer buf)))
	(delete-other-windows)
	(delete-other-frames)
	(org-capture)))

    (add-hook 'org-capture-mode-hook 'delete-other-windows)
    (add-hook 'org-capture-after-finalize-hook 'delete-frame)
delete-frame

;; TODO: fix delete-other-windows

make-capture-frame

gcal-org

  (use-package org-gcal
    :ensure t
    :config
    (load-file "~/.emacs.d/hidden.el"))
t
hooks para la agenda:
  ;(add-hook 'after-init-hook (lambda () (org-gcal-sync) ))
  (add-hook 'org-agenda-mode-hook (lambda () (org-gcal-sync) ))
  (add-hook 'org-capture-after-finalize-hook (lambda () (org-gcal-sync) ))
(lambda nil (org-gcal-sync)) delete-frame

my-org-agenda-list

  (defun my-org-agenda-list()
      (interactive)
    """show agenda without other windows"
    (org-agenda-list)
    (delete-other-windows))
my-org-agenda-list

Exportando desde orgmode

Exportar a markdown y beamer directamente

  (use-package ox-md)
  (use-package ox-beamer)
  (use-package ox-reveal)
ox-reveal

Export to bootstrap

  (use-package ox-twbs
    :ensure t)

Permitir que babel evalue codigo de GNUPLOT, emacs-lisp, ruby, y python.

  (org-babel-do-load-languages
   'org-babel-load-languages
   '((emacs-lisp . t)
(ruby . t)
(python . t)
(dot . t)
(gnuplot . t)))

  (setq org-confirm-babel-evaluate nil)

Desactivar la confirmacion para evaluar codigo

  (setq org-confirm-babel-evaluate nil)

Exportar a PDF

Activar el coloreado de codigo con pylint

  (setq org-latex-pdf-process
	'("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f

Ademas incluimos este paquete en todos los documetos de latex que exportemos

  (add-to-list 'org-latex-packages-alist '("" "minted"))
  (setq org-latex-listings 'minted)
minted

Org-sync para gestionar los issues de github en orgmode

   (use-package org-sync
     :ensure t
     :config
     ;backend para github si queremos mas solo añadir
     (require 'org-sync-github))
t

funcion que detecta si hay un repositorio de git en el directorio actual y carga automaticamente los issues en <nombre_repo>.org

TODO la funcion y aprender lisp xD

funcion para actualizar el indice de cosas que leer en el navegador

  ;; Auto-export org files to html when saved 
  (defun org-mode-export-hook()
    "Auto export html"
    (when (eq major-mode 'org-mode)
      (when (equal buffer-file-name "/home/rafa/org/to-read.org")
       (org-twbs-export-to-html t))))

  (add-hook 'after-save-hook 'org-mode-export-hook)
org-mode-export-hook

small-shell from @pyctor

  (defun small-shell ()
    (interactive)
    (split-window-vertically)
    (other-window 1)
    (shrink-window (- (window-height) 12))
    (eshell "/bin/zsh")) ;Me gusta mas eshell que ansi-term que usaba el original

  (global-set-key (kbd "C-ñ") 'small-shell)
  (defun delete-shell-window ()
    (interactive)
    (when (eq major-mode 'eshell)
      (when (eq window-height 12)
	(delete-window t))))

  ;; (add-hook 'eshell-exit-hook 
  ;; 	  (lambda ()
  ;; 	    ((if (eq window-height 12)
  ;; 		))))
delete-shell-window

salir de small-shell y matar el buffer

como solo la uso para cosas brebes no me interesa tener abiertas 2000000 instancias de small-shells

  (add-hook 'eshell-hook (lambda ()
         		  (local-set-key (kbd "C-x C-k p")
      				 (delete-window)
         				 )))
lambda nil (local-set-key (kbd C-x C-k p) (delete-window))

pop-shell

  (use-package shell-pop
    :ensure t
    :init
    (setq shell-pop-shell-type "eshell")
    (setq shell-pop-shell-type (quote ("ansi-term" "*ansi-term*" (lambda nil (ansi-term shell-pop-term-shell))))))

Undo Tree

  (use-package undo-tree
    :ensure t
    :init
    (global-undo-tree-mode 1))

Desactivo las flechas para no usarlas, que para algo tiene emacs tantos atajos

  (defun disable-arrow-keys ()
  (interactive)
;;;Desactiva la nevagacion con las flechas
  (global-unset-key (kbd "<left>"))
  (global-unset-key (kbd "<right>"))
  (global-unset-key (kbd "<up>"))
  (global-unset-key (kbd "<down>")))


  (defun enable-arrow-keys ()
  (interactive)
;;;Activa la navegacion con flecha
   (global-set-key (kbd "<left>") 'left-char)
   (global-set-key (kbd "<right>")  'right-char)
   (global-set-key (kbd "<up>") 'previous-line)
   (global-set-key (kbd "<down>") 'next-line))

  ;(disable-arrow-keys) He conseguido no usar las flechas al fin
enable-arrow-keys
  (add-hook 'term-mode-hook
	    (lambda ()
	      (local-set-key (kbd "C-c C-k") 'kill-buffer-this-buffer)))
lambda nil (local-set-key (kbd C-c C-k) (quote kill-buffer-this-buffer))

Abrir cheatseet de emacs.

  (defun open-cheat-sheet ()
    "Abre en un buffer aparte el cheat-sheet de emacs realizado por mi en orgmode"
    (interactive)
    ;; (split-window-horizontally)
    ;; (other-window 1)
    ;; (shrink-window (- (window-width) 30)) ;No va la anchura pero weno
    (find-file-other-frame "~/.emacs.d/cheat-sheet.org"))
open-cheat-sheet

Arrancar emacs como servidor si no esta arrancado.

 (server-mode 1)

Para cargar el tema personalizado en cada frame que creemos

  (add-hook 'after-make-frame-functions
            (lambda (frame)
              (select-frame frame)
              (load-my-theme)
	      (set-font)))
(lambda (frame) (select-frame frame) (load-my-theme) (set-font)) x-dnd-init-frame

Atajos personalizados

al abrir la lista de buffer cambiar directamente a esa ventana

Cuando ejecuto C-x C-b normalmente quiero hacer algo como eliminar varios buffers a la vez, por lo que cada vez que abra la lista de buffers quiero saltar a ella.

  (global-set-key (kbd "C-x C-b") 'ibuffer)
ibuffer

kill-this-buffer con C-x k

Normalmente cuando ejecuto C-x k es para eliminar el buffer en el que estoy actualmente.

  (global-set-key (kbd "C-x k") 'kill-this-buffer)
kill-this-buffer

Evil settings

  (add-hook 'messages-buffer-mode-hook 'evil-insert-state)
  (define-key evil-normal-state-map [escape] 'keyboard-quit)
  (define-key evil-visual-state-map [escape] 'keyboard-quit)
  (define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
  (define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
  (define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
  (define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
  (define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
  (with-current-buffer "*Messages*"
    (evil-insert-state))