Skip to content

Instantly share code, notes, and snippets.

@hhutch
Last active April 26, 2017 01:34
Show Gist options
  • Save hhutch/22f2dd5da031b2abdfcf to your computer and use it in GitHub Desktop.
Save hhutch/22f2dd5da031b2abdfcf to your computer and use it in GitHub Desktop.

Note

This is my dot-file, therefore it’s prone to have broken-ness in it. I’m trying to clean it up and make sure it’s sane.

Things currently not the way i’d like

  • escreen is nice, but i have to init it each time and set it up to use it… i’d like a working revive+ config, but I haven’t gotten it working correctly yet. see my twittering section for an example of how i use excreen
  • twittering is nice but again, saved workspace would make it better
  • my scheme config is lacking. i like cluck for chicken, but i’d like to have quack going and i need to set up racket and mit-scheme
  • for clojure i should switch to: cider + cider-inspect + ritz
  • dotemacs.org BROKEN scheme is not working for me, por que?

Broken things

  • cut/paste from tmux on linux & mac

General Setup

Create the autosave dir if necessary, since emacs won’t.

(make-directory "~/.emacs.d/autosaves/" t)

Global Load Paths

;; (add-to-list 'load-path "~/.emacs.d/")

Global Bindings

Join Lines, used a lot

(global-set-key (kbd "C-x C-j") 'join-line)

right ALT should be ALT, not META

I need to be able to input special chars easier

(setq ns-right-alternate-modifier nil)

Global Hooks

Emacs Graphic Display

(when (display-graphic-p)
      (defun djcb-opacity-modify (&optional dec)
        "modify the transparency of the emacs frame; if DEC is t,
    decrease the transparency, otherwise increase it in 10%-steps"
        (let* ((alpha-or-nil (frame-parameter nil 'alpha)) ; nil before setting
               (oldalpha (if alpha-or-nil alpha-or-nil 100))
               (newalpha (if dec (- oldalpha 10) (+ oldalpha 10))))
          (when (and (>= newalpha frame-alpha-lower-limit) (<= newalpha 100))
            (modify-frame-parameters nil (list (cons 'alpha newalpha))))))

      ;; C-8 will increase opacity (== decrease transparency)
      ;; C-9 will decrease opacity (== increase transparency
      ;; C-0 will returns the state to normal
      (global-set-key (kbd "C-8") '(lambda()(interactive)(djcb-opacity-modify)))
      (global-set-key (kbd "C-9") '(lambda()(interactive)(djcb-opacity-modify t)))
      (global-set-key (kbd "C-0") '(lambda()(interactive)
                                     (modify-frame-parameters nil `((alpha . 100)))))

      ;; Settings
      (menu-bar-mode 0)
      (tool-bar-mode 0)
      (scroll-bar-mode 0)
      (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.
       '(default ((t (:inherit nil 
                               :stipple nil :background "black" :foreground "white"
                               :inverse-video nil :box nil :strike-through nil
                               :overline nil :underline nil :slant normal
                               :weight normal :height 90 :width normal
                               :foundry "unknown" :family "Ubuntu Mono"))))))

Install Standard Packages

should i be using pallet instead? https://github.com/rdallasgray/pallet

How to manually create the list of packages to install

C-h v package-activated-list  

Define the list of packages to automatically install

(setq package-list
      '(4clojure request ac-js2 skewer-mode js2-mode simple-httpd
      js2-mode ac-math auto-complete popup ac-nrepl auto-complete
      popup cider pkg-info epl dash dash clojure-mode ac-slime
      ack ack-and-a-half angry-police-captain autopair
      browse-kill-ring chicken-scheme cljsbuild-mode
      clojure-cheatsheet cider pkg-info epl dash dash
      clojure-mode helm clojure-snippets yasnippet
      clojurescript-mode command-frequency command-log-mode
      creole-mode crontab-mode dired+ e2wm-svg-clock svg-clock
      e2wm window-layout edit-server eimp emamux emms
      enh-ruby-mode ensime scala-mode2 auto-complete popup popup
      dash s ercn escreen flycheck pkg-info epl dash f dash s
      dash s flymake-ruby flymake-easy geiser gist tabulated-list
      gh logito pcache git-gutter git-link gitignore-mode
      google-maps google-translate gplusify graphviz-dot-mode
      guru-mode hackernews haskell-mode haste helm-ag helm
      helm-git helm-github-stars helm helm-j-cheatsheet helm
      helm-ls-git helm-open-github gh logito pcache helm
      helm-orgcard helm helm-perldoc deferred helm helm-proc helm
      helm-rails inflections helm helm-rb helm-ag-r helm helm
      helm-rubygems-local helm itail j-mode jira js2-refactor
      yasnippet s dash multiple-cursors js2-mode json-mode
      jsx-mode kill-ring-search lein nrepl pkg-info epl dash dash
      clojure-mode logito magit-push-remote magit git-rebase-mode
      git-commit-mode markdown-mode+ markdown-mode markdown-mode
      minimap multi-eshell multi-term multiple-cursors nginx-mode
      nlinum nrepl-ritz fringe-helper nrepl pkg-info epl dash
      dash clojure-mode ob-mongo org openwith org-dotemacs org
      org-plus-contrib org-trello kv s esxml kv elnode kv db kv
      fakir kv dash noflet creole kv noflet s noflet dash web
      request dash ox-reveal org palette hexrgb paredit pastebin
      pcache pinboard pkg-info epl dash plantuml-mode
      auto-complete popup popup powerline pretty-symbols quack
      rainbow-delimiters rainbow-mode refheap request revive
      rhtml-mode rinari jump inflections findr ruby-compilation
      inf-ruby inf-ruby robe inf-ruby ruby-compilation inf-ruby
      ruby-electric ruby-test-mode rvm s scala-mode2 skewer-mode
      js2-mode simple-httpd slime-js slime slime-repl slime
      slime-repl slime smex sunrise-x-tree sunrise-commander
      svg-clock tabulated-list textile-mode todochiku top-mode
      twittering-mode w3m web wget wgrep-ack wgrep window-layout
      windresize xclip yaml-mode yasnippet zencoding-mode))

Repositories

(when (>= emacs-major-version 24)
  (require 'package)
  (package-initialize)
  (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
  ;; (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") t)
  (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
  ;; (add-to-list 'package-archives '("elpa" . "http://orgmode.org/elpa/") t)
  ;; (add-to-list 'package-archives '("elpa" . "http://tromey.com/elpa/") t)
  (add-to-list 'package-archives '("SC"   . "http://joseito.republika.pl/sunrise-commander/") t) 
  (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t))

activate all the packages (in particular autoloads)

(package-initialize)

fetch the list of packages available (on startup)

(when (not package-archive-contents)
  (package-refresh-contents))

Install any missing packages from our list

(dolist (package package-list)
  (when (not (package-installed-p package))
    (package-install package)))

Configure EL-Get

(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "https://raw.github.com/dimitri/el-get/master/el-get-install.el")
    (goto-char (point-max))
    (eval-print-last-sexp)))

(el-get 'sync)
(setq el-get-user-package-directory "~/.emacs.d/el-get/init-files/")

install packages

(setq el-get-sources
      '((:name revive-plus
            :website "https://github.com/martialboniou/revive-plus"
            :description "Serialize your window configurations in Emacs"
            :depends revive
            :type github
            :pkgname "martialboniou/revive-plus")))

Languages

Generic LISP

Hooks

should i be using smartparens instead? https://github.com/Fuco1/smartparens

(defun turn-on-paredit () (paredit-mode 1))

(add-hook 'elisp-mode-hook 'turn-on-paredit)
(add-hook 'elisp-mode-hook 'rainbow-delimiters-mode)
(add-hook 'emacs-lisp-mode-hook 'turn-on-paredit)
(add-hook 'emacs-lisp-mode-kook 'rainbow-delimiters-mode)
(add-hook 'lisp-mode-hook 'turn-on-paredit)
(add-hook 'lisp-mode-kook 'rainbow-delimiters-mode)

Pretty Lambdas

Turns the word `lambda` into a greek lambda character

(defun pretty-lambdas ()
  (font-lock-add-keywords
   nil `(("(\\(lambda\\>\\)"
          (0 (progn (compose-region (match-beginning 1) (match-end 1)
                                    ,(make-char 'greek-iso8859-7 107))
                    nil))))))

SLIME

(add-to-list 'load-path "~/src/slime/")  
;; (setq inferior-lisp-program "/opt/sbcl/bin/sbcl") ; your Lisp system
(require 'slime)
;; (slime-setup)
(slime-setup '(slime-repl))

Rainbow Delimiters

(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.
 '(default ((t (:inherit nil :stipple nil :background "black" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 100 :width normal :foundry "apple" :family "Monospace"))))
 '(rainbow-delimiters-depth-1-face ((t (:foreground "#c397d8" :weight ultra-bold))))
 '(rainbow-delimiters-depth-2-face ((t (:foreground "#e7c547" :weight ultra-bold))))
 '(rainbow-delimiters-depth-3-face ((t (:foreground "#7aa6da" :weight ultra-bold))))
 '(rainbow-delimiters-depth-4-face ((t (:foreground "#d54e53" :weight ultra-bold))))
 '(rainbow-delimiters-depth-5-face ((t (:foreground "#70c0b1" :weight ultra-bold))))
 '(rainbow-delimiters-depth-6-face ((t (:foreground "#b9ca4a" :weight ultra-bold))))
 '(rainbow-delimiters-depth-7-face ((t (:foreground "#e78c45" :weight ultra-bold))))
 '(rainbow-delimiters-depth-8-face ((t (:foreground "#969896" :weight ultra-bold))))
 '(rainbow-delimiters-depth-9-face ((t (:foreground "#eaeaea" :weight ultra-bold)))))

Scheme

Chicken

libraries

(add-to-list 'load-path "/var/lib/chicken/6/")   ; Where Eggs are insde-auto-p nil)
(setq geiser-mode-auto-p nil)
(require 'paredit)
;; (require 'cluck)
;; (require 'chicken-scheme)

;; non-functioning lambda replace?
;; (defun sm-greek-lambda ()
;;   (font-lock-add-keywords 
;;    nil
;;    `(("\\<lambda\\>"
;;       (0 (progn (compose-region (match-beginning 0) (match-end 0)
;;                                 ,(make-char 'greek-iso8859-7 107))
;;                 nil))))))

;; (autoload 'chicken-slime "chicken-slime" "SWANK backend for Chicken" t)

Hooks

(add-hook 'scheme-mode-hook 'paredit-mode)
(add-hook 'scheme-mode-hook 'rainbow-delimiters-mode-enable)
;; (add-hook 'scheme-mode-hook 'sm-greek-lambda)
;; (add-hook 'scheme-mode-hook 'cluck)
;; (add-hook 'scheme-mode-hook 'pretty-lambdas)
(add-hook 'scheme-mode-hook 'pretty-symbols-mode)
;; (add-hook 'scheme-mode-hook
;;           (lambda ()
;;            (slime-mode t)))

Petite Chez Scheme

MIT Scheme

Racket

Guile

Clojure

Hooks

(add-hook 'clojure-mode-hook 'turn-on-paredit)
(add-hook 'clojure-mode-hook 'git-gutter-mode)
(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode-enable)

(add-hook 'nrepl-interaction-mode-hook
        	 'nrepl-turn-on-eldoc-mode)

Clojurescript added to list of clojure file extensions

(setq auto-mode-alist (cons '("\\.cljs" . clojure-mode) auto-mode-alist))

Javascript

Hooks

(add-hook 'js2-mode-hook
          (lambda ()
            (slime-js-minor-mode 1)))

(add-hook 'css-mode-hook
          (lambda ()
            (define-key css-mode-map "\M-\C-x" 'slime-js-refresh-css)
            (define-key css-mode-map "\C-c\C-r" 'slime-js-embed-css)))

JS2 Mode

;(add-to-list 'load-path "/path/to/js2-mode/directory")
(autoload 'js2-mode "js2-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))

(global-set-key [f5] 'slime-js-reload)

JS2 spacing

(setq js2-mode-hook
  '(lambda () (progn
    (set-variable 'indent-tabs-mode nil))))

JSON

(load "json-mode")
(defun enable-json-mode ()
  (when (and (stringp buffer-file-name)
             (string-match "\\.json\\'" buffer-file-name))
    (json-mode)))

Hooks

(add-hook 'find-file-hook 'enable-json-mode)

;; json spacing
(setq json-mode-hook
  '(lambda () (progn
    (set-variable 'indent-tabs-mode nil))))

JSHINT

(add-to-list 'load-path "~/.emacs.d/jshint-mode")
;; (require 'flymake-jshint)
(setq jshint-mode-jshintrc "~/emacs.d/jshintrc.json") ;; this is a symlink currently
(add-hook 'javascript-mode-hook
     (lambda () (flymake-mode t)))
(add-hook 'js2-mode-hook
     (lambda () (flymake-mode t)))
(add-hook 'js-mode-hook
     (lambda () (flymake-mode t)))
(global-set-key (kbd "C-c C-g n") 'flymake-goto-next-error)

J

(setq j-path "/home/hunter/j64-701/bin/")
(autoload 'j-mode "j-mode.el" "Major mode for editing J files" t)

;; Add for detection of j source files if the auto-load fails
(add-to-list 'auto-mode-alist '("\\.ij[rstp]$" . j-mode))

Haskell

(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)

;; hslint on the command line only likes this indentation mode;
;; alternatives commented out below.
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)

;; Ignore compiled Haskell files in filename completions
(add-to-list 'completion-ignored-extensions ".hi")

K

Kona is an open source impl of K, an APL derivitive from Kx Systems the leading purveyor of time series databases. To use,

  • open a *.k file
  • invoke k-mode
    M-x k-mode
        
  • To evaluate in the K-repl, at the end of a line of K code
    C-c C-e
        

require

;; (require 'k-mode)

hooks

;; (add-to-list 'auto-mode-alist '("\\.k$" . k-mode))

Scala

(add-to-list 'auto-mode-alist '("\\.scala$" . scala-mode))
(setq exec-path (append exec-path (list "/home/hunter/bin/scala/scala/bin")))

hooks

(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)

Ruby

(defadvice inf-ruby-console-auto (before activate-rvm-for-robe activate)
  (rvm-activate-corresponding-ruby))

ruby-mode

(autoload 'ruby-mode "ruby-mode" "Major mode for ruby files" t)
(add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.builder$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Capfile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("config.ru$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Guardfile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.pill$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.pryrc$" . ruby-mode))
(add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.scss\\'" . scss-mode))

rhtml-mode

(add-to-list 'auto-mode-alist '("\\.erb$" . rhtml-mode))
(add-to-list 'auto-mode-alist '("\\.rhtml$" . rhtml-mode))
(add-to-list 'auto-mode-alist '("\\.html\\.erb$" . rhtml-mode))
;; (add-to-list 'auto-mode-alist '("\\.erb$" . zencoding-mode))
;; (add-to-list 'auto-mode-alist '("\\.rhtml$" . zencoding-mode))
;; (add-to-list 'auto-mode-alist '("\\.html\\.erb$" . zencoding-mode))

hooks

(require 'rhtml-mode)
     (add-hook 'rhtml-mode-hook
               (lambda () (rinari-launch)))

(add-hook 'ruby-mode-hook 'flymake-ruby-load)
(add-hook 'ruby-mode-hook 'robe-mode)
(add-hook 'rhtml-mode-hook
          '(lambda ()
             (abbrev-mode 0)))
(autoload 'inf-ruby "inf-ruby" "Run an inferior Ruby process" t)
;; (autoload 'inf-ruby-setup-keybindings "inf-ruby" "" t)
;; (eval-after-load 'ruby-mode
;;   '(add-hook 'ruby-mode-hook 'inf-ruby-setup-keybindings))

Utility Modes

Org Mode

general

(require 'org-depend)
(setq org-agenda-files '("~/.org/gtd.org"
                         "~/.org/thepractice.org"
                         "~/.org/thelearning.org"
                         "~/.org/thebuilding.org"))
(setq org-agenda-dim-blocked-tasks t)
(setq org-directory "~/.org")
(setq org-mobile-directory "~/Dropbox/MobileOrg")
(setq org-mobile-inbox-for-pull (concat org-directory "/index.org"))
(setq org-mobile-files (quote ("gtd.org"
                               "timeclock.org"
                               "traininggoals.org"
                               "thelearning.org"
                               "thepractice.org"
                               "thebuilding.org"
                               "theproject.org")))
(setq org-clock-persist 'history)
(org-clock-persistence-insinuate)
;; push to org-mobile on save  
;; (add-hook 'after-save-hook
;;  (lambda ()
;;    (if (string= buffer-file-name "/home/hunter/.org/gtd.org") (org-mobile-push))))

(setq org-default-notes-file (concat org-directory "/notes.org"))
(define-key global-map "\C-cc" 'org-capture)

;; org agenda / capture
(global-set-key "\C-ca" 'org-agenda)

;; indent and fontify based on major mode of code block
(setq org-src-fontify-natively t)
(setq org-src-tab-acts-natively t)

(setq org-indent-html nil)

Org pdf & latex export

;; -------------------------------------
;; -- PDF
;; -------------------------------------
;; 'rhh-org-article' for export org documents to the LaTex 'article', using
;; XeTeX and some fancy fonts; requires XeTeX (see org-latex-to-pdf-process)
;; -----------------------------------------------------------------------------
;; http://emacs-fu.blogspot.com/2011/04/nice-looking-pdfs-with-org-mode-and.html
;; http://comments.gmane.org/gmane.emacs.orgmode/40221
;; -----------------------------------------------------------------------------
;; Install Packages:
;; + texlive-all  
;; + texlive-xetex
;; + ttf-sil-gentium
;; + ttf-sil-gentium-basic
;; + ttf-sil-charis
;; + ttf-dejavu
;; -----------------------------------------------------------------------------
;; Make sure to include the latex class in you header:
;; #+LaTeX_CLASS: rhh-org-article
;; -----------------------------------------------------------------------------
(eval-after-load 'org-export-latex
  '(progn
     (add-to-list 'org-export-latex-classes
          '("rhh-org-article"
            "\\documentclass[11pt,a4paper]{article}
             \\usepackage{minted}
             \\usemintedstyle{emacs}
             \\newminted{common-lisp}{fontsize=10}
                     \\usepackage[T1]{fontenc}
                     \\usepackage{hyperref}
                     \\usepackage{fontspec}
                     \\usepackage{graphicx} 
                     \\defaultfontfeatures{Mapping=tex-text}
                     \\setromanfont{Gentium}
                     \\setromanfont [BoldFont={Gentium Basic Bold},
                                     ItalicFont={Gentium Basic Italic}]{Gentium Basic}
                     \\setsansfont{Charis SIL}
                     \\setmonofont[Scale=0.8]{DejaVu Sans Mono}
                     \\usepackage{geometry}
                     \\geometry{a4paper, textwidth=6.5in, textheight=10in,
                                 marginparsep=7pt, marginparwidth=.6in}
                     \\pagestyle{empty}
                     \\title{}
                           [NO-DEFAULT-PACKAGES]
                           [NO-PACKAGES]"
            ("\\section{%s}" . "\\section*{%s}")
            ("\\subsection{%s}" . "\\subsection*{%s}")
            ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
            ("\\paragraph{%s}" . "\\paragraph*{%s}")
            ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))))
;; -----------------------------------------------------------------------------
;; Added Syntax Highlighting Support
;; http://orgmode.org/worg/org-tutorials/org-latex-export.html
;; #+LaTeX_HEADER: \usepackage{minted}
;; #+LaTeX_HEADER: \usemintedstyle{emacs}
;; #+LaTeX_HEADER: \newminted{common-lisp}{fontsize=\footnotesize}
;; -----------------------------------------------------------------------------
;; Install Packages:
;; + python-pygments
;; -----------------------------------------------------------------------------
(setq org-export-latex-listings 'minted)
(setq org-export-latex-custom-lang-environments
      '(
    (emacs-lisp "common-lispcode")
       ))
(setq org-export-latex-minted-options
      '(("frame" "lines")
        ("fontsize" "\\scriptsize")
    ("linenos" "")
))
(setq org-latex-to-pdf-process 
      '("xelatex --shell-escape -interaction nonstopmode %f"
    "xelatex --shell-escape -interaction nonstopmode %f")) ;; for multiple passes
;; Not sure if this is actually setting the export class correctly.
(setq org-export-latex-class "rhh-org-article")

Org markdown export

(require 'ox-md)

Org mode abbrev

(add-hook 'org-mode-hook (lambda () (abbrev-mode 1)))

Abbreviations

SEL
#+begin_src emacs-lisp
       	
#+end_src 

Org Babel

PlantUML

;; active Org-babel languages
(org-babel-do-load-languages
 'org-babel-load-languages
 '(;; other Babel languages
   (plantuml . t)
   (sql . t)
   (ruby . t)
   (R . t)
   (clojure . t)))

(setq org-plantuml-jar-path
      (expand-file-name "~/.emacs.d/externals/plantuml.jar"))
(setq plantuml-jar-path
      (expand-file-name "~/.emacs.d/externals/plantuml.jar"))

Org Reveal

(require 'ox-reveal)

Org Bullets

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

Org beeminder

api setup

(require 'beeminder) 
(setq beeminder-username "XXXXXXXXXX")
(setq beeminder-auth-token "XXXXXXXXXX")

keybindings

(global-set-key "\C-cba" 'beeminder-add-data)
(global-set-key "\C-cbw" 'beeminder-whoami)
(global-set-key "\C-cbg" 'beeminder-my-goals-org)
(global-set-key "\C-cbr" 'beeminder-refresh-goal)
(global-set-key "\C-cbt" 'beeminder-submit-clocked-time)

Org skeletons

R

(define-skeleton org-r-skeleton
  "Header info for a emacs-org file."
  "Title: "
  "#+TITLE:" str " \n"
  "#+AUTHOR: Your Name\n"
  "#+email: your-email@server.com\n"
  "#+INFOJS_OPT: \n"
  "#+BABEL: :session *R* :cache yes :results output graphics :exports both :tangle yes \n"
  "-----"
 )

HELM

helm github stars

(require 's) ;; this is required by helm-github-stars
(setq helm-github-stars-username "hhutch")

Magit

(global-set-key (kbd "C-x C-g") 'magit-status)
(global-set-key (kbd "C-x C-a g") 'git-gutter:toggle)
(if (eq system-type 'darwin)
    (setq magit-emacsclient-executable "/usr/local/bin/emacsclient"))

IDO Mode

(ido-mode)

Multiple Cursors

(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)

4Clojure

(global-set-key (kbd "C-c C-4 o") '4clojure-open-question)
(global-set-key (kbd "C-c C-4 c") '4clojure-check-answers)
(global-set-key (kbd "C-c C-4 n") '4clojure-next-question)
(global-set-key (kbd "C-c C-4 p") '4clojure-previous-question)

Escreen

(require 'escreen)
(escreen-install)

Mozilla minor mode for moz shell

(add-to-list 'load-path "~/.emacs.d/externals")
(require 'moz)
(autoload 'moz-minor-mode "moz" "Mozilla Minor and Inferior Mozilla Modes" t)

(add-hook 'javascript-mode-hook 'javascript-custom-setup)
(defun javascript-custom-setup ()
  (moz-minor-mode 1))

Twittering Mode

A twitter client. How I like to use twit to replace tweet deck

  • start up escreen
    M-x escreen-install
    M-x escreen-create-screen
        
  • start up twit
    M-x twit
        
  • create 4 vertical windows and balance them in size
    C-x 3
    C-x 3
    C-x 3
    C-x 3
    C-x +
        
  • go to next pane and add a search for a hashtag
    C-x o
    M-x twittering-search RET #clojure
        
  • go to next pane and use a list
    C-x o
    M-x twittering-other-user-list-interactive RET greenrd RET functional-programming RET     
        

settings

(setq twittering-icon-mode t)
(setq twittering-use-master-password t)

todochiku alert hook

(require 'todochiku)
(add-hook 'twittering-new-tweets-hook (lambda ()
  (let ((n twittering-new-tweets-count))
    (if (> n 10)
        (todochiku-message
          (twittering-timeline-spec-to-string twittering-new-tweets-spec)
          (format "You have %d new tweet%s"
            n (if (> n 1) "s" ""))
          (todochiku-icon 'social))
      (dolist (el twittering-new-tweets-statuses)
        (todochiku-message
          (twittering-timeline-spec-to-string twittering-new-tweets-spec)
          (concat (cdr (assoc 'user-screen-name el))
             " said: "
             (cdr (assoc 'text el)))
          (todochiku-icon 'social)))))))

SMEX

(smex-initialize)

;; Replace execute-extended-command binding with smex.
(global-set-key (kbd "M-x") 'smex)
(global-set-key (kbd "M-X") 'smex-major-mode-commands)

;; Keep execute-extended-command at hand just in case.
(global-set-key (kbd "C-c C-c M-x") 'execute-extended-command)

;; Share smex history across my machines.
;; (setq smex-save-file (expand-file-name ".smex-items" dropbox-directory))

revive+

currently doesn’t work/i don’t know how to use it. object is to use it with escreen. https://github.com/martialboniou/revive-plus

;; (add-to-list 'load-path "~/.emacs.d/revive-plus")
(require 'revive+) ; may be optional
(revive-plus:demo)
(setq revive-plus:all-frames t)
;(add-hook 'auto-save-hook #'(lambda () (call-interactively #'desktop-save)))

time functions

(defun fix-timestamp-string (date-string)
  "Returns yyyy-mm-dd format of DATE-STRING

For examples:
 「Nov. 28, 1994」 ⇒ 「1994-11-28」
 「November 28, 1994」 ⇒ 「1994-11-28」
 「11/28/1994」 ⇒ 「1994-11-28」

Any “day of week”, or “time” info, or any other parts of the string, are discarded.

Code detail: URL `http://xahlee.org/emacs/elisp_parse_time.html'"
  (let (dateList ξyear ξmonth ξdate yyyy mm dd (dateStr date-string))
    (require 'parse-time)

    (setq dateStr (replace-regexp-in-string "^ *\\(.+\\) *$" "\\1" dateStr)) ; remove white spaces

    (cond

     ;; USA convention of mm/dd/yyyy
     ((string-match "^\\([0-9][0-9]\\)/\\([0-9][0-9]\\)/\\([0-9][0-9][0-9][0-9]\\)$" dateStr)
      (concat (match-string 3 dateStr) "-" (match-string 1 dateStr) "-" (match-string 2 dateStr))
      )
     ((string-match "^\\([0-9]\\)/\\([0-9][0-9]\\)/\\([0-9][0-9][0-9][0-9]\\)$" dateStr)
      (concat (match-string 3 dateStr) "-" (match-string 1 dateStr) "-" (match-string 2 dateStr))
      )

     ;; some ISO 8601. yyyy-mm-dd
     ((string-match "^\\([0-9][0-9][0-9][0-9]\\)-\\([0-9][0-9]\\)-\\([0-9][0-9]\\)$T[0-9][0-9]:[0-9][0-9]" dateStr)
      (concat (match-string 1 dateStr) "-" (match-string 2 dateStr) "-" (match-string 3 dateStr))
      )
     ((string-match "^\\([0-9][0-9][0-9][0-9]\\)-\\([0-9][0-9]\\)-\\([0-9][0-9]\\)$" dateStr)
      (concat (match-string 1 dateStr) "-" (match-string 2 dateStr) "-" (match-string 3 dateStr))
      )
     ((string-match "^\\([0-9][0-9][0-9][0-9]\\)-\\([0-9][0-9]\\)$" dateStr)
      (concat (match-string 1 dateStr) "-" (match-string 2 dateStr))
      )
     ((string-match "^\\([0-9][0-9][0-9][0-9]\\)$" dateStr)
      (match-string 1 dateStr)
      )

     ;; else
     (t
      (progn 
        (setq dateStr (replace-regexp-in-string "January " "Jan. " dateStr))
        (setq dateStr (replace-regexp-in-string "February " "Feb. " dateStr))
        (setq dateStr (replace-regexp-in-string "March " "Mar. " dateStr))
        (setq dateStr (replace-regexp-in-string "April " "Apr. " dateStr))
        (setq dateStr (replace-regexp-in-string "May " "May. " dateStr))
        (setq dateStr (replace-regexp-in-string "June " "Jun. " dateStr))
        (setq dateStr (replace-regexp-in-string "July " "Jul. " dateStr))
        (setq dateStr (replace-regexp-in-string "August " "Aug. " dateStr))
        (setq dateStr (replace-regexp-in-string "September " "Sep. " dateStr))
        (setq dateStr (replace-regexp-in-string "October " "Oct. " dateStr))
        (setq dateStr (replace-regexp-in-string "November " "Nov. " dateStr))
        (setq dateStr (replace-regexp-in-string "December " "Dec. " dateStr))

        (setq dateStr (replace-regexp-in-string " 1st," " 1" dateStr))
        (setq dateStr (replace-regexp-in-string " 2nd," " 2" dateStr))
        (setq dateStr (replace-regexp-in-string " 3rd," " 3" dateStr))
        (setq dateStr (replace-regexp-in-string "\\([0-9]\\)th," "\\1" dateStr))

        (setq dateStr (replace-regexp-in-string " 1st " " 1 " dateStr))
        (setq dateStr (replace-regexp-in-string " 2nd " " 2 " dateStr))
        (setq dateStr (replace-regexp-in-string " 3rd " " 3 " dateStr))
        (setq dateStr (replace-regexp-in-string "\\([0-9]\\)th " "\\1 " dateStr))

        (setq dateList (parse-time-string dateStr))
        (setq ξyear (nth 5 dateList))
        (setq ξmonth (nth 4 dateList))
        (setq ξdate (nth 3 dateList))

        (setq yyyy (number-to-string ξyear))
        (setq mm (if ξmonth (format "%02d" ξmonth) "" ) )
        (setq dd (if ξdate (format "%02d" ξdate) "" ) )
        (concat yyyy "-" mm "-" dd)

        ) ) ) ))

(defun fix-timestamp ()
  "Change timestamp under cursor into a yyyy-mm-dd format.
If there's a text selection, use that as input, else use current line.
All other text in input are discarded.
For example:
TUESDAY, FEB 15, 2011 05:16 ET
becomes
2011-02-15
.
See `fix-timestamp-string' for detail."
  (interactive)
  (let (bds p1 p2 inputStr)
    (setq bds (get-selection-or-unit 'line))
    (setq inputStr (elt bds 0) )
    (setq p1 (elt bds 1) )
    (setq p2 (elt bds 2) )
    (delete-region p1 p2)
    (insert (fix-timestamp-string inputStr)) ))

org-toodledo

settings

(setq org-toodledo-userid "XXXXXXXXXX")   ; *NOT* your email!
(setq org-toodledo-password "XXXXXXXXXX")

;; Useful key bindings for org-mode
;; (add-hook 'org-mode-hook
;;        (lambda ()
;;          (local-unset-key "\C-o")
;;          (local-set-key "\C-od" 'org-toodledo-mark-task-deleted)
;;          (local-set-key "\C-os" 'org-toodledo-sync)
;;          )
;;        )
;; (add-hook 'org-agenda-mode-hook
;;        (lambda ()
;;          (local-unset-key "\C-o")
;;          (local-set-key "\C-od" 'org-toodledo-agenda-mark-task-deleted)
;;          )
;;        )

ERC

general settings

(erc :server "irc.freenode.net"
     ;; :port 7000
     :nick "XXXXXXXXXX"
     :full-name "XXXXXXXXXX")
(setq erc-interpret-mirc-color t)

channels

(setq erc-autojoin-channels-alist
      '(("freenode.net"
         "#somechannels")))

paradox

(setq paradox-github-token 'XXXXXXXXXX)

2048

;; http://sachachua.com/blog/2014/05/2048-emacs-colours/
(add-to-list 'load-path "~/.emacs.d/elpa/2048-game-20140330.1212")
(require '2048-game)

(defface 2048-2-face '((t (:foreground "red"))) "Face used for 2" :group '2048-game)
(defface 2048-4-face '((t (:foreground "orange"))) "Face used for 4" :group '2048-game)
(defface 2048-8-face '((t (:foreground "yellow"))) "Face used for 8" :group '2048-game)
(defface 2048-16-face '((t (:foreground "green"))) "Face used for 16" :group '2048-game)
(defface 2048-32-face '((t (:foreground "lightblue" :bold t))) "Face used for 32" :group '2048-game)
(defface 2048-64-face '((t (:foreground "lavender" :bold t))) "Face used for 64" :group '2048-game)
(defface 2048-128-face '((t (:foreground "SlateBlue" :bold t))) "Face used for 128" :group '2048-game)
(defface 2048-256-face '((t (:foreground "MediumVioletRed" :bold t))) "Face used for 256" :group '2048-game)
(defface 2048-512-face '((t (:foreground "tomato" :bold t))) "Face used for 512" :group '2048-game)
(defface 2048-1024-face '((t (:foreground "SkyBlue1" :bold t))) "Face used for 1024" :group '2048-game)
(defface 2048-2048-face '((t (:foreground "lightgreen" :bold t))) "Face used for 2048" :group '2048-game)

(defvar 2048-font-lock-keywords
  '(("\\<2\\>" 0 '2048-2-face)
    ("\\<4\\>" 0 '2048-4-face)
    ("\\<8\\>" 0 '2048-8-face)
    ("\\<16\\>" 0 '2048-16-face)
    ("\\<32\\>" 0 '2048-32-face)
    ("\\<64\\>" 0 '2048-64-face)
    ("\\<128\\>" 0 '2048-128-face)
    ("\\<256\\>" 0 '2048-256-face)
    ("\\<512\\>" 0 '2048-512-face)
    ("\\<1024\\>" 0 '2048-1024-face)
    ("\\<2048\\>" 0 '2048-2048-face)))

(defun sacha/2048-fontify ()
  (font-lock-add-keywords nil 2048-font-lock-keywords))

(defun sacha/2048-set-font-size ()
  (text-scale-set 5))

(use-package 2048-game
  :config
  (progn
   (add-hook '2048-mode-hook 'sacha/2048-fontify)
   (add-hook '2048-mode-hook 'sacha/2048-set-font-size)))

btc ticker

;;Optional: You can setup the fetch interval
;;default: 10 secs
(setq btc-ticker-api-poll-interval 10)

;;Enable btc-ticker-mode
(btc-ticker-mode 1)

My Custom Settings for appearance and interaction

General tweaks

Answer yes/no with y/n … I can fit into big boy pants

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

Set custom ORG-Mode templates

(setq org-structure-template-alist
      (quote
       (("s" "#+BEGIN_SRC ?

#+END_SRC" "<src lang=\"?\">

</src>")
        ("sel" "#+BEGIN_SRC emacs-lisp
?
#+END_SRC" "#+BEGIN_SRC emacs-lisp
?
#+END_SRC")
        ("e" "#+BEGIN_EXAMPLE
?
#+END_EXAMPLE" "<example>
?
</example>")
        ("q" "#+BEGIN_QUOTE
?
#+END_QUOTE" "<quote>
?
</quote>")
        ("v" "#+BEGIN_VERSE
?
#+END_VERSE" "<verse>
?
</verse>")
        ("V" "#+BEGIN_VERBATIM
?
#+END_VERBATIM" "<verbatim>
?
</verbatim>")
        ("c" "#+BEGIN_CENTER
?
#+END_CENTER" "<center>
?
</center>")
        ("l" "#+BEGIN_LaTeX
?
#+END_LaTeX" "<literal style=\"latex\">
?
</literal>")
        ("L" "#+LaTeX: " "<literal style=\"latex\">?</literal>")
        ("h" "#+BEGIN_HTML
?
#+END_HTML" "<literal style=\"html\">
?
</literal>")
        ("H" "#+HTML: " "<literal style=\"html\">?</literal>")
        ("a" "#+BEGIN_ASCII
?
#+END_ASCII" "")
        ("A" "#+ASCII: " "")
        ("i" "#+INDEX: ?" "#+INDEX: ?")
        ("I" "#+INCLUDE: %file ?" "<include file=%file markup=\"?\">")
)))

OS X from spotlight might not know your $PATH

http://danzorx.tumblr.com/post/11976550618/easypg-for-emacs-on-os-x-or-sometimes-emacs-doesnt

(setq exec-path (append exec-path (list "/usr/local/bin")))

Whitespace display

Settings

(setq whitespace-display-mappings
      ;; all numbers are Unicode codepoint in decimal. ℯℊ (insert-char 182 1)
      '(
        (space-mark 32 [183] [46]) ; 32 SPACE 「 」, 183 MIDDLE DOT 「·」, 46 FULL STOP 「.」
        (newline-mark 10 [182 10]) ; 10 LINE FEED
        (tab-mark 9 [9655 9] [92 9]) ; 9 TAB, 9655 WHITE RIGHT-POINTING TRIANGLE 「▷」
        ))
(setq whitespace-style (quote (spaces tabs newline space-mark tab-mark newline-mark)))

Key Binding

(global-set-key (kbd "C-x C-a w") 'whitespace-mode)

Scratch Buffers

(defun create-scratch-buffer nil
       "create a scratch buffer"
       (interactive)
       (switch-to-buffer (get-buffer-create "*scratch*"))
       (lisp-interaction-mode))

Web / web-get

a work in progress ffor better behavior than wget and elisp only using `web` library

(defun my-switch-to-url-buffer (status)
  (switch-to-buffer (current-buffer)))

(defun w-get (url)
  "Get the specified URL and save to current buffer."
  (interactive
   (list
    (let ((def-url (browse-url-url-at-point)))
      (read-from-minibuffer "URL: " def-url nil nil 'web-get-history-list))))
  (let ((with-current-buffer
         (lambda (status)
           (switch-to-buffer (current-buffer)))))
    (url-retrieve url 'my-switch-to-url-buffer)))

Dired

(setq dired-dwim-target t)
(setq dired-listing-switches "-alh")

Theme

ERC

(load-theme 'blue-erc t t)
(enable-theme 'blue-erc)
;; (load-theme 'dark-erc t t)
;; (enable-theme 'dark-erc)

Powerline

setup

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

face

(set-face-attribute 'powerline-active1 nil :box nil :foreground "LightGrey")
(set-face-attribute 'powerline-active2 nil :box nil)
(set-face-attribute 'mode-line nil :box nil :background "OliveDrab3" :foreground "grey14")
(set-face-attribute 'powerline-inactive1 nil :box nil)
(set-face-attribute 'powerline-inactive2 nil :box nil)
(set-face-attribute 'mode-line-inactive nil :box nil)
(set-face-attribute 'mode-line-highlight nil :box nil)
(setq powerline-default-separator 'slant)

invoke

(powerline-default-theme)

DuckDuckGo

Library

;;DuckDuckgo search
(defun duckduckgo-search (text)
  "Search DuckDuckGo from Emacs."
  (interactive "sDDG: ")
  (browse-url
   (concat "https://duckduckgo.com/?q="
           (replace-regexp-in-string " " "+" text))))

(defun duckduckgo-bang (text)
  "Search DuckDuckGo from Emacs."
  (interactive "sDDG! ")
  (browse-url
   (concat "https://duckduckgo.com/?q=!"
           (replace-regexp-in-string " " "+" text))))

(defun duckduckgo-amazon (text)
  "Search DuckDuckGo from Emacs."
  (interactive "sAmazon! ")
  (browse-url
   (concat "https://duckduckgo.com/?q=!amazon+"
           (replace-regexp-in-string " " "+" text))))

Keybinding

(global-set-key (kbd "C-c d") 'duckduckgo-search)
(global-set-key (kbd "C-c C-d") 'duckduckgo-bang)

Reference

;; (defun duckduckgo-bang (bang)
;;   (interactive "sDDG! ")
;;   (let* ((search-query (replace-regexp-in-string " " "+" (buffer-substring-no-properties (region-beginning) (region-end))))
;;          (search-string (if (> (length bang) 0)
;;                             (concat "!" bang "+" search-query)
;;                           search-query)))
;;     (browse-url (concat "http://duckduckgo.com/?ka=h&kh=1&kj=b2&km=m&ko=1&ks=n&kt=h&ku=-1&kv=1&kw=s&kx=e&ky=b&k1=-1&q=" search-string))))

Chinese input

had this working on previous ubuntu install, current install this is not working with ibus. ibus-el package for 13.10 seems to throw segfaults. possible solutions using google cloud ibus replacement http://stackoverflow.com/questions/19827038/after-the-upgrading-of-ubuntu-to-13-10-and-emacs-to-24-3-1-i-cant-input-japane, http://blog.csdn.net/csfreebird/article/details/18903641 and http://blog.csdn.net/csfreebird/article/details/18903755. but apparently sugou is already replaced by http://code.google.com/p/ibus-cloud-pinyin/wiki/Intro?tm=6 ?

Vietnamese input

eshell

command prompt customization courtesy of http://blog.liangzan.net/blog/2012/12/12/customizing-your-emacs-eshell-prompt/

(setq eshell-history-size 1024)
(setq eshell-prompt-regexp "^[^#$]*[#$] ")

(load "em-hist")           ; So the history vars are defined
(if (boundp 'eshell-save-history-on-exit)
    (setq eshell-save-history-on-exit t)) ; Don't ask, just save
                                        ;(message "eshell-ask-to-save-history is %s" eshell-ask-to-save-history)
(if (boundp 'eshell-ask-to-save-history)
    (setq eshell-ask-to-save-history 'always)) ; For older(?) version
                                        ;(message "eshell-ask-to-save-history is %s" eshell-ask-to-save-history)

(defun eshell/ef (fname-regexp &rest dir) (ef fname-regexp default-directory))


;;; ---- path manipulation

(defun pwd-repl-home (pwd)
  (interactive)
  (let* ((home (expand-file-name (getenv "HOME")))
         (home-len (length home)))
    (if (and
         (>= (length pwd) home-len)
         (equal home (substring pwd 0 home-len)))
        (concat "~" (substring pwd home-len))
      pwd)))

(defun curr-dir-git-branch-string (pwd)
  "Returns current git branch as a string, or the empty string if
PWD is not in a git repo (or the git command is not found)."
  (interactive)
  (when (and (eshell-search-path "git")
             (locate-dominating-file pwd ".git"))
    (let ((git-output (shell-command-to-string (concat "cd " pwd " && git branch | grep '\\*' | sed -e 's/^\\* //'"))))
      (propertize (concat "["
                          (if (> (length git-output) 0)
                              (substring git-output 0 -1)
                            "(no branch)")
                          "]") 'face `(:foreground "green"))
      )))

(setq eshell-prompt-function
      (lambda ()
        (concat
         (propertize ((lambda (p-lst)
                        (if (> (length p-lst) 3)
                            (concat
                             (mapconcat (lambda (elm) (if (zerop (length elm)) ""
                                                        (substring elm 0 1)))
                                        (butlast p-lst 3)
                                        "/")
                             "/"
                             (mapconcat (lambda (elm) elm)
                                        (last p-lst 3)
                                        "/"))
                          (mapconcat (lambda (elm) elm)
                                     p-lst
                                     "/")))
                      (split-string (pwd-repl-home (eshell/pwd)) "/")) 'face `(:foreground "yellow"))
         (or (curr-dir-git-branch-string (eshell/pwd)))
         (propertize "$ " 'face 'default))))

(setq eshell-highlight-prompt nil)

play youtube

;; (defun play-youtube-video (url)
;;   (interactive "sURL: ")
;;   (shell-command
;;    (concat "youtube-dl  -o - " url " | vlc -")))

;; (defun w3m-play-youtube-video () 
;;   (interactive)
;;   (play-youtube-video
;;    (w3m-print-this-url (point))))
;; (global-set-key (kbd "<f9> y") 'w3m-play-youtube-video)

world time

(setq display-time-world-list '(("America/Los_Angeles" "Seattle")
                                ("America/Chicago" "Chicago")
                                ("America/New_York" "New York")
                                ("Europe/London" "London")
                                ("Europe/Paris" "Paris")
                                ("Asia/Calcutta" "Bangalore")
                                ("Asia/Saigon" "Saigon")
                                ("Austrailia/Perth" "Perth")
                                ("Asia/Tokyo" "Tokyo")))

;(("PST" . -800) ("PDT" . -700) ("MST" . -700) ("MDT" . -600) ("CST" . -600) ("CDT" . -500) ("EST" . -500) ("EDT" . -400) ("AST" . -400) ("NST" . -330) ("UT" . 0) ("GMT" . 0) ("BST" . 100) ("MET" . 100) ("EET" . 200) ("JST" . 900) ("GMT+1" . 100) ("GMT+2" . 200) ("GMT+3" . 300) ("GMT+4" . 400) ("GMT+5" . 500) ("GMT+6" . 600) ("GMT+7" . 700) ("GMT+8" . 800) ("GMT+9" . 900) ("GMT+10" . 1000) ("GMT+11" . 1100) ("GMT+12" . 1200) ("GMT+13" . 1300) ("GMT-1" . -100) ("GMT-2" . -200) ("GMT-3" . -300) ("GMT-4" . -400) ("GMT-5" . -500) ("GMT-6" . -600) ("GMT-7" . -700) ("GMT-8" . -800) ("GMT-9" . -900) ("GMT-10" . -1000) ("GMT-11" . -1100) ("GMT-12" . -1200))

insert a buffer’s filename into the kill-ring

(defun buffer-visiting-filename-to-kill-ring nil
  ""
  (interactive)
  (kill-new (or (buffer-file-name) "")))

font-awesome

Assume you have already installed Font Awesome on the system http://fortawesome.github.io/Font-Awesome/

overlay

Overlay Library https://github.com/ShingoFukuyama/ov.el

(require 'ov)

font awesome list

(setq font-awesome-list '(("\xf000" . "fa-glass")
                          ("\xf001" . "fa-music")
                          ("\xf002" . "fa-search")
                          ("\xf003" . "fa-envelope-o")
                          ("\xf004" . "fa-heart")
                          ("\xf005" . "fa-star")
                          ("\xf006" . "fa-star-o")
                          ("\xf007" . "fa-user")
                          ("\xf008" . "fa-film")
                          ("\xf009" . "fa-th-large")
                          ("\xf00a" . "fa-th")
                          ("\xf00b" . "fa-th-list")
                          ("\xf00c" . "fa-check")
                          ("\xf00d" . "fa-times")
                          ("\xf00e" . "fa-search-plus")
                          ("\xf010" . "fa-search-minus")
                          ("\xf011" . "fa-power-off")
                          ("\xf012" . "fa-signal")
                          ("\xf013" . "fa-cog")
                          ("\xf014" . "fa-trash-o")
                          ("\xf015" . "fa-home")
                          ("\xf016" . "fa-file-o")
                          ("\xf017" . "fa-clock-o")
                          ("\xf018" . "fa-road")
                          ("\xf019" . "fa-download")
                          ("\xf01a" . "fa-arrow-circle-o-down")
                          ("\xf01b" . "fa-arrow-circle-o-up")
                          ("\xf01c" . "fa-inbox")
                          ("\xf01d" . "fa-play-circle-o")
                          ("\xf01e" . "fa-repeat")
                          ("\xf021" . "fa-refresh")
                          ("\xf022" . "fa-list-alt")
                          ("\xf023" . "fa-lock")
                          ("\xf024" . "fa-flag")
                          ("\xf025" . "fa-headphones")
                          ("\xf026" . "fa-volume-off")
                          ("\xf027" . "fa-volume-down")
                          ("\xf028" . "fa-volume-up")
                          ("\xf029" . "fa-qrcode")
                          ("\xf02a" . "fa-barcode")
                          ("\xf02b" . "fa-tag")
                          ("\xf02c" . "fa-tags")
                          ("\xf02d" . "fa-book")
                          ("\xf02e" . "fa-bookmark")
                          ("\xf02f" . "fa-print")
                          ("\xf030" . "fa-camera")
                          ("\xf031" . "fa-font")
                          ("\xf032" . "fa-bold")
                          ("\xf033" . "fa-italic")
                          ("\xf034" . "fa-text-height")
                          ("\xf035" . "fa-text-width")
                          ("\xf036" . "fa-align-left")
                          ("\xf037" . "fa-align-center")
                          ("\xf038" . "fa-align-right")
                          ("\xf039" . "fa-align-justify")
                          ("\xf03a" . "fa-list")
                          ("\xf03b" . "fa-outdent")
                          ("\xf03c" . "fa-indent")
                          ("\xf03d" . "fa-video-camera")
                          ("\xf03e" . "fa-picture-o")
                          ("\xf040" . "fa-pencil")
                          ("\xf041" . "fa-map-marker")
                          ("\xf042" . "fa-adjust")
                          ("\xf043" . "fa-tint")
                          ("\xf044" . "fa-pencil-square-o")
                          ("\xf045" . "fa-share-square-o")
                          ("\xf046" . "fa-check-square-o")
                          ("\xf047" . "fa-arrows")
                          ("\xf048" . "fa-step-backward")
                          ("\xf049" . "fa-fast-backward")
                          ("\xf04a" . "fa-backward")
                          ("\xf04b" . "fa-play")
                          ("\xf04c" . "fa-pause")
                          ("\xf04d" . "fa-stop")
                          ("\xf04e" . "fa-forward")
                          ("\xf050" . "fa-fast-forward")
                          ("\xf051" . "fa-step-forward")
                          ("\xf052" . "fa-eject")
                          ("\xf053" . "fa-chevron-left")
                          ("\xf054" . "fa-chevron-right")
                          ("\xf055" . "fa-plus-circle")
                          ("\xf056" . "fa-minus-circle")
                          ("\xf057" . "fa-times-circle")
                          ("\xf058" . "fa-check-circle")
                          ("\xf059" . "fa-question-circle")
                          ("\xf05a" . "fa-info-circle")
                          ("\xf05b" . "fa-crosshairs")
                          ("\xf05c" . "fa-times-circle-o")
                          ("\xf05d" . "fa-check-circle-o")
                          ("\xf05e" . "fa-ban")
                          ("\xf060" . "fa-arrow-left")
                          ("\xf061" . "fa-arrow-right")
                          ("\xf062" . "fa-arrow-up")
                          ("\xf063" . "fa-arrow-down")
                          ("\xf064" . "fa-share")
                          ("\xf065" . "fa-expand")
                          ("\xf066" . "fa-compress")
                          ("\xf067" . "fa-plus")
                          ("\xf068" . "fa-minus")
                          ("\xf069" . "fa-asterisk")
                          ("\xf06a" . "fa-exclamation-circle")
                          ("\xf06b" . "fa-gift")
                          ("\xf06c" . "fa-leaf")
                          ("\xf06d" . "fa-fire")
                          ("\xf06e" . "fa-eye")
                          ("\xf070" . "fa-eye-slash")
                          ("\xf071" . "fa-exclamation-triangle")
                          ("\xf072" . "fa-plane")
                          ("\xf073" . "fa-calendar")
                          ("\xf074" . "fa-random")
                          ("\xf075" . "fa-comment")
                          ("\xf076" . "fa-magnet")
                          ("\xf077" . "fa-chevron-up")
                          ("\xf078" . "fa-chevron-down")
                          ("\xf079" . "fa-retweet")
                          ("\xf07a" . "fa-shopping-cart")
                          ("\xf07b" . "fa-folder")
                          ("\xf07c" . "fa-folder-open")
                          ("\xf07d" . "fa-arrows-v")
                          ("\xf07e" . "fa-arrows-h")
                          ("\xf080" . "fa-bar-chart-o")
                          ("\xf081" . "fa-twitter-square")
                          ("\xf082" . "fa-facebook-square")
                          ("\xf083" . "fa-camera-retro")
                          ("\xf084" . "fa-key")
                          ("\xf085" . "fa-cogs")
                          ("\xf086" . "fa-comments")
                          ("\xf087" . "fa-thumbs-o-up")
                          ("\xf088" . "fa-thumbs-o-down")
                          ("\xf089" . "fa-star-half")
                          ("\xf08a" . "fa-heart-o")
                          ("\xf08b" . "fa-sign-out")
                          ("\xf08c" . "fa-linkedin-square")
                          ("\xf08d" . "fa-thumb-tack")
                          ("\xf08e" . "fa-external-link")
                          ("\xf090" . "fa-sign-in")
                          ("\xf091" . "fa-trophy")
                          ("\xf092" . "fa-github-square")
                          ("\xf093" . "fa-upload")
                          ("\xf094" . "fa-lemon-o")
                          ("\xf095" . "fa-phone")
                          ("\xf096" . "fa-square-o")
                          ("\xf097" . "fa-bookmark-o")
                          ("\xf098" . "fa-phone-square")
                          ("\xf099" . "fa-twitter")
                          ("\xf09a" . "fa-facebook")
                          ("\xf09b" . "fa-github")
                          ("\xf09c" . "fa-unlock")
                          ("\xf09d" . "fa-credit-card")
                          ("\xf09e" . "fa-rss")
                          ("\xf0a0" . "fa-hdd-o")
                          ("\xf0a1" . "fa-bullhorn")
                          ("\xf0f3" . "fa-bell")
                          ("\xf0a3" . "fa-certificate")
                          ("\xf0a4" . "fa-hand-o-right")
                          ("\xf0a5" . "fa-hand-o-left")
                          ("\xf0a6" . "fa-hand-o-up")
                          ("\xf0a7" . "fa-hand-o-down")
                          ("\xf0a8" . "fa-arrow-circle-left")
                          ("\xf0a9" . "fa-arrow-circle-right")
                          ("\xf0aa" . "fa-arrow-circle-up")
                          ("\xf0ab" . "fa-arrow-circle-down")
                          ("\xf0ac" . "fa-globe")
                          ("\xf0ad" . "fa-wrench")
                          ("\xf0ae" . "fa-tasks")
                          ("\xf0b0" . "fa-filter")
                          ("\xf0b1" . "fa-briefcase")
                          ("\xf0b2" . "fa-arrows-alt")
                          ("\xf0c0" . "fa-users")
                          ("\xf0c1" . "fa-link")
                          ("\xf0c2" . "fa-cloud")
                          ("\xf0c3" . "fa-flask")
                          ("\xf0c4" . "fa-scissors")
                          ("\xf0c5" . "fa-files-o")
                          ("\xf0c6" . "fa-paperclip")
                          ("\xf0c7" . "fa-floppy-o")
                          ("\xf0c8" . "fa-square")
                          ("\xf0c9" . "fa-bars")
                          ("\xf0ca" . "fa-list-ul")
                          ("\xf0cb" . "fa-list-ol")
                          ("\xf0cc" . "fa-strikethrough")
                          ("\xf0cd" . "fa-underline")
                          ("\xf0ce" . "fa-table")
                          ("\xf0d0" . "fa-magic")
                          ("\xf0d1" . "fa-truck")
                          ("\xf0d2" . "fa-pinterest")
                          ("\xf0d3" . "fa-pinterest-square")
                          ("\xf0d4" . "fa-google-plus-square")
                          ("\xf0d5" . "fa-google-plus")
                          ("\xf0d6" . "fa-money")
                          ("\xf0d7" . "fa-caret-down")
                          ("\xf0d8" . "fa-caret-up")
                          ("\xf0d9" . "fa-caret-left")
                          ("\xf0da" . "fa-caret-right")
                          ("\xf0db" . "fa-columns")
                          ("\xf0dc" . "fa-sort")
                          ("\xf0dd" . "fa-sort-asc")
                          ("\xf0de" . "fa-sort-desc")
                          ("\xf0e0" . "fa-envelope")
                          ("\xf0e1" . "fa-linkedin")
                          ("\xf0e2" . "fa-undo")
                          ("\xf0e3" . "fa-gavel")
                          ("\xf0e4" . "fa-tachometer")
                          ("\xf0e5" . "fa-comment-o")
                          ("\xf0e6" . "fa-comments-o")
                          ("\xf0e7" . "fa-bolt")
                          ("\xf0e8" . "fa-sitemap")
                          ("\xf0e9" . "fa-umbrella")
                          ("\xf0ea" . "fa-clipboard")
                          ("\xf0eb" . "fa-lightbulb-o")
                          ("\xf0ec" . "fa-exchange")
                          ("\xf0ed" . "fa-cloud-download")
                          ("\xf0ee" . "fa-cloud-upload")
                          ("\xf0f0" . "fa-user-md")
                          ("\xf0f1" . "fa-stethoscope")
                          ("\xf0f2" . "fa-suitcase")
                          ("\xf0a2" . "fa-bell-o")
                          ("\xf0f4" . "fa-coffee")
                          ("\xf0f5" . "fa-cutlery")
                          ("\xf0f6" . "fa-file-text-o")
                          ("\xf0f7" . "fa-building-o")
                          ("\xf0f8" . "fa-hospital-o")
                          ("\xf0f9" . "fa-ambulance")
                          ("\xf0fa" . "fa-medkit")
                          ("\xf0fb" . "fa-fighter-jet")
                          ("\xf0fc" . "fa-beer")
                          ("\xf0fd" . "fa-h-square")
                          ("\xf0fe" . "fa-plus-square")
                          ("\xf100" . "fa-angle-double-left")
                          ("\xf101" . "fa-angle-double-right")
                          ("\xf102" . "fa-angle-double-up")
                          ("\xf103" . "fa-angle-double-down")
                          ("\xf104" . "fa-angle-left")
                          ("\xf105" . "fa-angle-right")
                          ("\xf106" . "fa-angle-up")
                          ("\xf107" . "fa-angle-down")
                          ("\xf108" . "fa-desktop")
                          ("\xf109" . "fa-laptop")
                          ("\xf10a" . "fa-tablet")
                          ("\xf10b" . "fa-mobile")
                          ("\xf10c" . "fa-circle-o")
                          ("\xf10d" . "fa-quote-left")
                          ("\xf10e" . "fa-quote-right")
                          ("\xf110" . "fa-spinner")
                          ("\xf111" . "fa-circle")
                          ("\xf112" . "fa-reply")
                          ("\xf113" . "fa-github-alt")
                          ("\xf114" . "fa-folder-o")
                          ("\xf115" . "fa-folder-open-o")
                          ("\xf118" . "fa-smile-o")
                          ("\xf119" . "fa-frown-o")
                          ("\xf11a" . "fa-meh-o")
                          ("\xf11b" . "fa-gamepad")
                          ("\xf11c" . "fa-keyboard-o")
                          ("\xf11d" . "fa-flag-o")
                          ("\xf11e" . "fa-flag-checkered")
                          ("\xf120" . "fa-terminal")
                          ("\xf121" . "fa-code")
                          ("\xf122" . "fa-reply-all")
                          ("\xf122" . "fa-mail-reply-all")
                          ("\xf123" . "fa-star-half-o")
                          ("\xf124" . "fa-location-arrow")
                          ("\xf125" . "fa-crop")
                          ("\xf126" . "fa-code-fork")
                          ("\xf127" . "fa-chain-broken")
                          ("\xf128" . "fa-question")
                          ("\xf129" . "fa-info")
                          ("\xf12a" . "fa-exclamation")
                          ("\xf12b" . "fa-superscript")
                          ("\xf12c" . "fa-subscript")
                          ("\xf12d" . "fa-eraser")
                          ("\xf12e" . "fa-puzzle-piece")
                          ("\xf130" . "fa-microphone")
                          ("\xf131" . "fa-microphone-slash")
                          ("\xf132" . "fa-shield")
                          ("\xf133" . "fa-calendar-o")
                          ("\xf134" . "fa-fire-extinguisher")
                          ("\xf135" . "fa-rocket")
                          ("\xf136" . "fa-maxcdn")
                          ("\xf137" . "fa-chevron-circle-left")
                          ("\xf138" . "fa-chevron-circle-right")
                          ("\xf139" . "fa-chevron-circle-up")
                          ("\xf13a" . "fa-chevron-circle-down")
                          ("\xf13b" . "fa-html5")
                          ("\xf13c" . "fa-css3")
                          ("\xf13d" . "fa-anchor")
                          ("\xf13e" . "fa-unlock-alt")
                          ("\xf140" . "fa-bullseye")
                          ("\xf141" . "fa-ellipsis-h")
                          ("\xf142" . "fa-ellipsis-v")
                          ("\xf143" . "fa-rss-square")
                          ("\xf144" . "fa-play-circle")
                          ("\xf145" . "fa-ticket")
                          ("\xf146" . "fa-minus-square")
                          ("\xf147" . "fa-minus-square-o")
                          ("\xf148" . "fa-level-up")
                          ("\xf149" . "fa-level-down")
                          ("\xf14a" . "fa-check-square")
                          ("\xf14b" . "fa-pencil-square")
                          ("\xf14c" . "fa-external-link-square")
                          ("\xf14d" . "fa-share-square")
                          ("\xf14e" . "fa-compass")
                          ("\xf150" . "fa-caret-square-o-down")
                          ("\xf151" . "fa-caret-square-o-up")
                          ("\xf152" . "fa-caret-square-o-right")
                          ("\xf153" . "fa-eur")
                          ("\xf154" . "fa-gbp")
                          ("\xf155" . "fa-usd")
                          ("\xf156" . "fa-inr")
                          ("\xf157" . "fa-jpy")
                          ("\xf158" . "fa-rub")
                          ("\xf159" . "fa-krw")
                          ("\xf15a" . "fa-btc")
                          ("\xf15b" . "fa-file")
                          ("\xf15c" . "fa-file-text")
                          ("\xf15d" . "fa-sort-alpha-asc")
                          ("\xf15e" . "fa-sort-alpha-desc")
                          ("\xf160" . "fa-sort-amount-asc")
                          ("\xf161" . "fa-sort-amount-desc")
                          ("\xf162" . "fa-sort-numeric-asc")
                          ("\xf163" . "fa-sort-numeric-desc")
                          ("\xf164" . "fa-thumbs-up")
                          ("\xf165" . "fa-thumbs-down")
                          ("\xf166" . "fa-youtube-square")
                          ("\xf167" . "fa-youtube")
                          ("\xf168" . "fa-xing")
                          ("\xf169" . "fa-xing-square")
                          ("\xf16a" . "fa-youtube-play")
                          ("\xf16b" . "fa-dropbox")
                          ("\xf16c" . "fa-stack-overflow")
                          ("\xf16d" . "fa-instagram")
                          ("\xf16e" . "fa-flickr")
                          ("\xf170" . "fa-adn")
                          ("\xf171" . "fa-bitbucket")
                          ("\xf172" . "fa-bitbucket-square")
                          ("\xf173" . "fa-tumblr")
                          ("\xf174" . "fa-tumblr-square")
                          ("\xf175" . "fa-long-arrow-down")
                          ("\xf176" . "fa-long-arrow-up")
                          ("\xf177" . "fa-long-arrow-left")
                          ("\xf178" . "fa-long-arrow-right")
                          ("\xf179" . "fa-apple")
                          ("\xf17a" . "fa-windows")
                          ("\xf17b" . "fa-android")
                          ("\xf17c" . "fa-linux")
                          ("\xf17d" . "fa-dribbble")
                          ("\xf17e" . "fa-skype")
                          ("\xf180" . "fa-foursquare")
                          ("\xf181" . "fa-trello")
                          ("\xf182" . "fa-female")
                          ("\xf183" . "fa-male")
                          ("\xf184" . "fa-gittip")
                          ("\xf185" . "fa-sun-o")
                          ("\xf186" . "fa-moon-o")
                          ("\xf187" . "fa-archive")
                          ("\xf188" . "fa-bug")
                          ("\xf189" . "fa-vk")
                          ("\xf18a" . "fa-weibo")
                          ("\xf18b" . "fa-renren")
                          ("\xf18c" . "fa-pagelines")
                          ("\xf18d" . "fa-stack-exchange")
                          ("\xf18e" . "fa-arrow-circle-o-right")
                          ("\xf190" . "fa-arrow-circle-o-left")
                          ("\xf191" . "fa-caret-square-o-left")
                          ("\xf192" . "fa-dot-circle-o")
                          ("\xf193" . "fa-wheelchair")
                          ("\xf194" . "fa-vimeo-square")
                          ("\xf195" . "fa-try")
                          ("\xf196" . "fa-plus-square-o")))

Example 1: Insert all fonts at the cursor position

(defun font-awesome-insert-all ()
  (interactive)
  (mapc (lambda (font)
        (insert " ")
        (ov-set (ov-insert (car font)) 'face '(:family "FontAwesome" :height 1.5)))
      font-awesome-list))
;; (font-awesome-insert-all)

Example 2: Insert icon that has key action

(defun font-awesome-insert-apple ()
  (interactive)
  (let* ((apple (rassoc "fa-apple" font-awesome-list))
         (char (car apple))
         ov)
    (setq ov (ov-insert char))
    (ov-set ov 'face '(:family "FontAwesome" :foreground "#cc3300"))
    (ov-keymap ov
               ;; Show message in minibuffer
               "RET" '(message "Apple Selected!!!!!!")
               ;; Add a new apple
               "a" '(font-awesome-insert-apple))))
;; (font-awesome-insert-apple)

smartparens

(require 'smartparens-html)

MDBG chinese lookup

(defun mdbg-search ()
  "Search MDBG from Emacs"
  (interactive)
  (let (myWord myUrl)
    (setq myWord
          (if (region-active-p)
              (buffer-substring-no-properties (region-beginning) (region-end))
            (thing-at-point 'symbol)))
    (setq myUrl
          (concat "http://www.mdbg.net/chindict/chindict.php?page=worddict&wdrst=0&wdqb=" myWord))
    (browse-url myUrl)))

Confluence Mode

(setq confluence-url "http://cilwiki.atlassian.net/wiki/rpc/xmlrpc")

Org Jira

(setq jiralib-host "XXXXXXXXXX")
(setq jiralib-url "XXXXXXXXXX")
machine JIRALIB-HOST login USERNAME password XXXXX port 80
;; yes I'm ok with symlinks
(setq find-file-visit-truename t)
(setq vc-follow-symlinks t)
;; I am using an "aftermarket" org, installed from Melpa.
(add-to-list 'load-path "~/.emacs.d/elpa/org-20140120")
;; use org-dotemacs for pretty configurations!
(load-file "~/.emacs.d/org-dotemacs.el")
;; load my org based configuration
(org-dotemacs-load-default)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment