From bb0a83b63120b5114c4233bf1a80cf1c00986f82 Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Fri, 2 Dec 2016 04:09:23 -0500 Subject: [PATCH 01/11] c-ide.org edits re: install and preparation * Sync org file file html file. * Remove text that misled me to think that no further customization of the demo package was necessary in order for it to function as described in the guide. * Correct dependency ambiguity about helm and helm-gtags. * Move a few paragraphs from section 'Source code navigation' to section 'Quick setup'. * Describe what tags are BEFORE beginning to use them. * Edits to section describing tag creation --- emacs-tutor/c-ide.org | 270 +++++++++++++++++++++--------------------- 1 file changed, 137 insertions(+), 133 deletions(-) diff --git a/emacs-tutor/c-ide.org b/emacs-tutor/c-ide.org index 8ec0dd1..48f0238 100644 --- a/emacs-tutor/c-ide.org +++ b/emacs-tutor/c-ide.org @@ -9,7 +9,16 @@ inside Emacs effortlessly, such as jump to definition/references at cursor, go back and forth between jumping points, finding any file instantly, switching between .h and .c/.cpp. -A few demos: +Please remember that there's a table of content on the top right +corner and you can use it to navigate this guide. If you feel your +internet connection is too slow for my guide, you can always clone and +read it offline: https://github.com/tuhdo/tuhdo.github.io + +* Introductory demos +:PROPERTIES: +:ID: introductory-demos +:END: +Here are some visual examples of the emacs IDE in action: - Switching between .h and .c/.cpp anywhere in the project like Linux kernel. If more than one file exists, it displays a list of @@ -18,7 +27,7 @@ A few demos: [[file:static/c-ide/projectile-find-other-file.gif][file:static/c-ide/projectile-find-other-file.gif]] -- Jump around Linux kernel source with ease using =helm-gtags=. The +- Jumping around Linux kernel source with ease using =helm-gtags=. The demo begins when "START" appears at the bottom: [[file:static/c-ide/helm-gtags-jump-dwim.gif][file:static/c-ide/helm-gtags-jump-dwim.gif]] @@ -77,95 +86,114 @@ A few demos: [[file:static/part3/helm-man-woman.gif][file:static/part3/helm-man-woman.gif]] -Please remember that there's a table of content on the top right -corner and you can use it to navigate this guide. If you feel your -internet connection is too slow for my guide, you can always clone and -read it offline: https://github.com/tuhdo/tuhdo.github.io +* Quick setup +:PROPERTIES: +:ID: quick-setup +:END: +I've prepared an Emacs repository to properly install the components +of the emacs IDE and to perform a basic configuration for +demonstration purposes. When installed and run the _first time_, the +demo repository will download from MELPA, install and compile all the +packages it needs. Note that depending on your internet connection and +processor speeds, this may take a while, but that shouldn't stop you from continuing with this guide; the next section can be followed using a second instance of emacs, and without the IDE components. -I added an Emacs repository that is properly configured for -demonstration purposes. You can clone and play with it without having to -manually copy and paste all the setup Elisp code throughout the guide. When -installed and run the _first time_, the demo repository will download from -MELPA, install and compile all the packages it needs. Note that depending on -your internet connection and processor speeds, this may take a while. +If you don't wish to use the demo, you can manually install the components, and use the =.el= files of the demo as a reference sample configuration. Steps to install: -- Install [[http://www.gnu.org/software/global][GNU Global]] from your distribution's package manager (Linux / Mac) or - from the [[http://adoxa.altervista.org/global/][Win32 port]] (Windows). If none is available, download the source [[http://www.gnu.org/software/global/download.html][here]] - and manually build the package. +- Install [[http://www.gnu.org/software/global][GNU Global]] from your distribution's package manager (Linux / + Mac) or from the [[http://adoxa.altervista.org/global/][Win32 port]] (Windows). If none is available, + download the source [[http://www.gnu.org/software/global/download.html][here]] and manually build the package. - Backup your ~/.emacs.d elsewhere. - If emacs is not already running, start it. -- Update your melpa database: =M-x package-list-packages=. +- Update your MELPA database: =M-x package-list-packages=. (reference: + [[file:emacs-tutor3.org::*How%20to%20use%20Emacs%20package%20manager][How to use Emacs package manager]]). - Clone the repository into your ~/.emacs.d folder. #+begin_src sh git clone https://github.com/tuhdo/emacs-c-ide-demo.git ~/.emacs.d #+end_src -- You may possibly want to edit your new =~/.emacs.d/init.el= file for two - options: +- You may possibly want to make a change to your new + =~/.emacs.d/init.el= file. By default, the demo uses [[https://github.com/emacs-helm/helm][helm]] + ([[http://tuhdo.github.io/helm-intro.html][reference]]) and [[https://github.com/syohex/emacs-helm-gtags][helm-gtags]], which is what I recommend, but if you + don't want to use =helm=, the alternative is to use =ggtags=. Here's + how to make that change. - + The demo repository can use either =gtags= (the default), or =ggtags=. If - you want to use =ggtags=, comment this line in =init.el=: + + comment these lines in =init.el=: #+BEGIN_SRC emacs-lisp + (require 'setup-helm) (require 'setup-helm-gtags) #+END_SRC And uncomment this line: - + #+BEGIN_SRC emacs-lisp ;; (require 'setup-ggtags) #+END_SRC - + The demo uses Helm. If you're not already familiar with Helm, read [[http://tuhdo.github.io/helm-intro.html][my guide]]. - If you don't want to use Helm, also comment this line in =init.el=: +That does it! To start using the demo, just type =M-x load-file RET +init.el=. As mentioned earlier, the first time you use it, it will perform a series of downloads, installs and compiles, which may take a while, but you can still continue with the next section of this guide in a second instance of emacs, even without any of the IDE components. +* Basic source code navigation +:PROPERTIES: +:ID: basic-navigation +:END: +Even without any IDE components installed, emacs already has features useful for operating on source code. - #+BEGIN_SRC emacs-lisp - (require 'setup-helm) - #+END_SRC +- *C-M-f* runs =forward-sexp=, move forward over a balanced + expression that can be a pair or a symbol. Demo: + + [[file:static/c-ide/forward-func.gif][file:static/c-ide/forward-func.gif]] + +- *C-M-b* runs =backward-sexp=, move backward over a balanced + expression that can be a pair or a symbol. Demo: + + [[file:static/c-ide/backward-func.gif][file:static/c-ide/backward-func.gif]] -That does it! To start using the demo, just type =M-x load-file RET init.el=. -Continue reading this guide for its operational directions, without needing to -bother to perform any more installations or elisp evaluations. +- *C-M-k* runs =kill-sexp=, kill balanced expression + forward that can be a pair or a symbol. Demo: + + [[file:static/c-ide/kill-func-body.gif][file:static/c-ide/kill-func-body.gif]] +- *C-M-* or *C-M-@* runs =mark-sexp=, put mark after + following expression that can be a pair or a symbol. Demo: + + [[file:static/c-ide/mark-func-body.gif][file:static/c-ide/mark-func-body.gif]] + +- *C-M-a* runs =beginning-of-defun=, which moves point to beginning of + a function. Demo: + + [[file:static/c-ide/beginning-of-defun.gif][file:static/c-ide/beginning-of-defun.gif]] + +- *C-M-e* runs =end-of-defun=, which moves point to end of a + function. Demo: + + [[file:static/c-ide/end-of-defun.gif][file:static/c-ide/end-of-defun.gif]] + +- *C-M-h* runs =mark-defun=, which put a region around whole current + or following function. Demo: + + [[file:static/c-ide/mark-defun.gif][file:static/c-ide/mark-defun.gif]] * Source code navigation :PROPERTIES: :ID: source-navigation :END: -** Prerequisite: +At this point, we begin using components of our emacs IDE, so if you're using the demo to perform its install, you'll need to wait for that to finish, and to close the second instance of emacs that you were using in the previous section. +** Package preparation :PROPERTIES: :ID: b1292347-d0ed-4421-9905-33f1050883b2 :END: -- Know how to use =package.el= and MELPA. If you don't know how to - use, read the guide [[file:emacs-tutor3.org::*How%20to%20use%20Emacs%20package%20manager][How to use Emacs package manager]]. - -- Install [[https://github.com/leoliu/ggtags][ggtags]]. After installing =ggtags= from MELPA, add this code - snippet to setup =ggtags= and key bindings: - -#+begin_src emacs-lisp - (require 'ggtags) - (add-hook 'c-mode-common-hook - (lambda () - (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode) - (ggtags-mode 1)))) - - (define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol) - (define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history) - (define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference) - (define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file) - (define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags) - (define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags) +If you didn't use the the demo to install the emacs IDE components, +you'll now need to install [[http://www.gnu.org/software/global][GNU Global]], and you'll need to install from +MELPA your choice of either [[https://github.com/leoliu/ggtags][ggtags]] or the pair of packages [[https://github.com/emacs-helm/helm][helm]] + +[[https://github.com/syohex/emacs-helm-gtags][helm-gtags]]. - (define-key ggtags-mode-map (kbd "M-,") 'pop-tag-mark) -#+end_src +Regardless of whether or not you used the demo, here are some code +snippets you'll need to get the IDE working the way this guide +presents it. -- Or, [[https://github.com/emacs-helm/helm][helm]] + [[https://github.com/syohex/emacs-helm-gtags][helm-gtags]]. Helm is awesome and if you are going to use - Helm, please read the [[http://tuhdo.github.io/helm-intro.html][Helm guide]]. Remember to setup =Helm= before - using =helm-gtags=. You can use this [[https://github.com/tuhdo/emacs-c-ide-demo/blob/master/custom/setup-helm.el][sample configuration]]. When - includes the above file in your =~/.emacs.d=, remember to add - =(require 'setup-helm)= to your =init.el=. +- If you chose the defaults, [[https://github.com/emacs-helm/helm][helm]] + [[https://github.com/syohex/emacs-helm-gtags][helm-gtags]]. #+begin_src emacs-lisp (setq @@ -193,76 +221,33 @@ bother to perform any more installations or elisp evaluations. (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history) #+end_src -Before using the =ggtags= or =helm-gtags=, remember to create a GTAGS -database by running =gtags= at your project root in terminal: - -#+begin_src shell-script - $ cd /path/to/project/root - $ gtags -#+end_src +- If you chose [[https://github.com/leoliu/ggtags][ggtags]]. +#+begin_src emacs-lisp + (require 'ggtags) + (add-hook 'c-mode-common-hook + (lambda () + (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode) + (ggtags-mode 1)))) -After this, a few files are created: + (define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol) + (define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history) + (define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference) + (define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file) + (define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags) + (define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags) -#+begin_src shell-script - $ ls G* - GPATH GRTAGS GTAGS + (define-key ggtags-mode-map (kbd "M-,") 'pop-tag-mark) #+end_src - -- *GTAGS*: definition database -- *GRTAGS*: reference database -- *GPATH*: path name database - -If you use =ggtags=, you have a command for creating GTAGS database, -that is =ggtags-create-tags=; this is recommended way when using -=ggtags=, to let it know where the project root is. - -** Basic movements -:PROPERTIES: -:ID: 45f1bb42-08e5-43b9-8ea9-7b5e1124f89e -:END: -- *C-M-f* runs =forward-sexp=, move forward over a balanced - expression that can be a pair or a symbol. Demo: - - [[file:static/c-ide/forward-func.gif][file:static/c-ide/forward-func.gif]] - -- *C-M-b* runs =backward-sexp=, move backward over a balanced - expression that can be a pair or a symbol. Demo: - - [[file:static/c-ide/backward-func.gif][file:static/c-ide/backward-func.gif]] - -- *C-M-k* runs =kill-sexp=, kill balanced expression - forward that can be a pair or a symbol. Demo: - - [[file:static/c-ide/kill-func-body.gif][file:static/c-ide/kill-func-body.gif]] - -- *C-M-* or *C-M-@* runs =mark-sexp=, put mark after - following expression that can be a pair or a symbol. Demo: - - [[file:static/c-ide/mark-func-body.gif][file:static/c-ide/mark-func-body.gif]] - -- *C-M-a* runs =beginning-of-defun=, which moves point to beginning of - a function. Demo: - - [[file:static/c-ide/beginning-of-defun.gif][file:static/c-ide/beginning-of-defun.gif]] - -- *C-M-e* runs =end-of-defun=, which moves point to end of a - function. Demo: - - [[file:static/c-ide/end-of-defun.gif][file:static/c-ide/end-of-defun.gif]] - -- *C-M-h* runs =mark-defun=, which put a region around whole current - or following function. Demo: - - [[file:static/c-ide/mark-defun.gif][file:static/c-ide/mark-defun.gif]] -** Basic concepts of tag +** Basic concepts of tags :PROPERTIES: :ID: b4902a85-f303-4f5f-8c13-1eb3d2d2de73 :END: -A tag is a name of an entity in source code. An entity can be a -variable, a method definition, an include-operator... A tag contains -information such as name of the tag (the name of the variable, -class, method), location of this tag in source code and which file it -belongs to. As an example, GNU Global generates three tag databases: +Source code navigation done by IDEs employs a concept called =tags=, a +term for an entity in source code. An entity can be a variable, a +method definition, an include-operator... A tag contains information +such as name of the tag (the name of the variable, class, method), +location of this tag in source code and which file it belongs to. As +an example, GNU Global generates three tag databases: - *GTAGS*: definition database - *GRTAGS*: reference database @@ -275,7 +260,26 @@ specified. A reference of a tag is where a tag is used in a source tree, but not where it is defined. - +** Tag database creation +:PROPERTIES: +:ID: tag-database-creation +:END: +- If you chose the defaults, [[https://github.com/emacs-helm/helm][helm]] + [[https://github.com/syohex/emacs-helm-gtags][helm-gtags]], create a GTAGS + database by running =gtags= at your project root in terminal: +#+begin_src shell-script + $ cd /path/to/project/root + $ gtags +#+end_src +- If you chose [[https://github.com/leoliu/ggtags][ggtags]], the recommended method for tag creation is to + use its own emacs command =ggtags-create-tags=. +- After running either command, a few files will be created: +#+begin_src shell-script + $ ls G* + GPATH GRTAGS GTAGS +#+end_src + - *GTAGS*: definition database + - *GRTAGS*: reference database + - *GPATH*: path name database ** Find definitions in current buffer :PROPERTIES: :ID: 3a64c7a4-e8a5-42b9-9476-28dff9e5cb96 @@ -331,7 +335,7 @@ s= to invoke Isearch on candidate buffer list. =M-.= runs =helm-gtags-dwim=, which behaves the same as =ggtags-find-tag-dwim=. Similarly, you jump back to original location by using =M-,=, which runs =tags-loop-continue= (Emacs - default). + default). #+BEGIN_CENTER [[file:static/c-ide/helm-gtags-definitions.png][file:static/c-ide/helm-gtags-definitions.png]] @@ -344,10 +348,10 @@ blank space. A prompt asks you for tag pattern, which is a regexp. =helm-gtags= provides a really nice feature that uses Helm to display -all available tags in a project and incrementally filtering, and is really +all available tags in a project and incrementally filtering, and is really fast using =helm-gtags-select=, which is bound to =C-j= in my setup above. This is useful when you want to explore tags in unfamiliar -project. Demo: +project. Demo: [[file:static/c-ide/helm-gtags-select.gif][file:static/c-ide/helm-gtags-select.gif]] @@ -360,7 +364,7 @@ project. Demo: - Using =helm-gtags=: Either run =helm-gtags-dwim= or =helm-gtags-find-rtags=, bound to *C-c g r*, which only finds - references. Note that for =helm-gtags-find-rtags=: + references. Note that for =helm-gtags-find-rtags=: - if point is inside a function, the prompt will be default to the function name. @@ -429,7 +433,7 @@ the node is a directory, the children of the node are files in that directory. One important thing to remember, Speedbar only lists files that match =speedbar-file-regexp=, that contains the extensions for common programming languages. If you don't see files in your -programming languages listed, consider adding it the regexp list. +programming languages listed, consider adding it the regexp list. *Basic usage*: @@ -606,7 +610,7 @@ You have two commands for completing C/C++ code: ((nil . ((company-clang-arguments . ("-I/home//project_root/include1/" "-I/home//project_root/include2/"))))) #+end_src - + If you put a file with a special name .dir-locals.el in a directory, Emacs will read it when it visits any file in that directory or any of its subdirectories, and apply the settings it specifies to the file’s @@ -615,7 +619,7 @@ Per-Directory Local Variables]]. If you use Helm, you can easily insert absolute path by *C-c i* at the current path in =helm-find-files= (bound to *C-x C-f* by default in my demo =.emacs.d= at the beginning): -[[file:static/c-ide/helm-files-insertion.gif][file:static/c-ide/helm-files-insertion.gif]] +[[file:static/c-ide/helm-files-insertion.gif][file:static/c-ide/helm-files-insertion.gif]] In the above example, =nil= means apply the settings to any file or sub-directory visited. If =non-nil=, you have to specify a major mode @@ -648,7 +652,7 @@ Replace == with your username. - Enter any source file and start completion. You will see that =company-clang= correctly retrieves completion candidates in those directories. - + * Header file completion with =company-c-headers= package :PROPERTIES: :ID: 6e05e8a5-04a3-4279-bf99-22fd627c0e92 @@ -666,7 +670,7 @@ Company. After installing from MELPA, set it up: add its paths since by default =company-c-headers= only includes these two system include paths: =/usr/include/= and =/usr/local/include/=. To enable C++ header completion for standard -libraries, you have to add its path, for example, like this: +libraries, you have to add its path, for example, like this: #+begin_src emacs-lisp (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.8/") @@ -679,7 +683,7 @@ local, use =company-c-headers-path-user= and put it in * CEDET :PROPERTIES: :ID: cedet -:END: +:END: ** What is CEDET? :PROPERTIES: :ID: what-is-cedet @@ -1765,7 +1769,7 @@ store window configurations, read it [[file:emacs-tutor.org::*Registers][here]]. * Debugging :PROPERTIES: -:ID: debugging +:ID: debugging :END: ** With GDB Many Windows :PROPERTIES: @@ -1843,7 +1847,7 @@ Each cell coressponds to the following commands: - =gdb-display-threads-buffer= (Cell 6): Display running threads in your programs. Please refer to [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Threads-Buffer.html#Threads-Buffer][GNU Manual - Threads Buffer]] and - [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Multithreaded-Debugging.html#Multithreaded-Debugging][Multithreaded Debugging]] for usage of the buffer. + [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Multithreaded-Debugging.html#Multithreaded-Debugging][Multithreaded Debugging]] for usage of the buffer. There are two useful commands that are not visible in =gdb-many-windows=: From 93d0a74a79c6a84fe91e42f8006170717e5394bf Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Mon, 5 Dec 2016 08:26:07 -0500 Subject: [PATCH 02/11] publish.el - create `org-publish-project-alist' * Create a `org-publish-project-alist' to enable publishing the project in a manner consistent with the current output. --- emacs-tutor/publish.el | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 emacs-tutor/publish.el diff --git a/emacs-tutor/publish.el b/emacs-tutor/publish.el new file mode 100644 index 0000000..000bb0a --- /dev/null +++ b/emacs-tutor/publish.el @@ -0,0 +1,38 @@ +; publish.el - org-publish definition +; in support of `tuhdo.github.io' "Emacs Mini Manual" +; +; Warning: Performing the publication will overwrite any targets +; already existing in the parent folder. +; +; Instructions: +; M-x load-file path/to/publish.el (or otherwise evaluate this buffer) +; Navigate to a buffer of the project +; C-u org-publish-all +; +(setq org-publish-project-alist + '(("orgfiles" + :base-directory "./" + :base-extension "org" + :publishing-directory "../" + :publishing-function org-html-publish-to-html + :headline-levels 3 + :section-numbers t + :with-toc 1 + :html-head "" + :html-preamble t) + + ("images" + :base-directory "./" + :recursive t + :base-extension "jpg\\|gif\\|png" + :publishing-directory "../" + :publishing-function org-publish-attachment) + + ("other" + :base-directory "./" + :base-extension "css" + :recursive t + :publishing-directory "../" + :publishing-function org-publish-attachment) + ("website" :components ("orgfiles" "images" "other")))) From eef1534e6c857f3eb5b85705a12b3f4f148c46fd Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Mon, 5 Dec 2016 09:58:24 -0500 Subject: [PATCH 03/11] remove cruft - archive.html, theindex.html --- archive.html | 168 ------------------------------------------------ theindex.html | 175 -------------------------------------------------- 2 files changed, 343 deletions(-) delete mode 100644 archive.html delete mode 100644 theindex.html diff --git a/archive.html b/archive.html deleted file mode 100644 index 831bd5d..0000000 --- a/archive.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - -Archive - - - - - - - - - - - -
- -
- - diff --git a/theindex.html b/theindex.html deleted file mode 100644 index df3b342..0000000 --- a/theindex.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - -Index - - - - - - - - - - -
-

Index

- -
-
- -
- - - comments powered by Disqus -
- - From f5e3147442228e9094b1ff140941e6a124a54d72 Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Mon, 5 Dec 2016 10:08:10 -0500 Subject: [PATCH 04/11] re-arrange files * rename `emacs-tutor' to `org' * put `org-publish' output in new folder `html' * remove an errant gif that was in root folder --- c-ide.html => html/c-ide.html | 0 .../emacs-for-proglang.html | 0 emacs-tutor.html => html/emacs-tutor.html | 0 emacs-tutor2.html => html/emacs-tutor2.html | 0 emacs-tutor3.html => html/emacs-tutor3.html | 0 helm-intro.html => html/helm-intro.html | 0 .../helm-projectile.html | 0 index.html => html/index.html | 0 .../setup-emacs-windows.html | 0 {emacs-tutor => html}/static/auto_complete.gif | Bin .../static/c-ide/backward-func.gif | Bin .../static/c-ide/beginning-of-defun.gif | Bin .../static/c-ide/company-c-header.png | Bin .../c-ide/company-clang-company-gtags.gif | Bin .../c-ide/company-clang-project-completion.gif | Bin .../static/c-ide/compilation-compile.gif | Bin .../static/c-ide/compilation-mode.gif | Bin .../static/c-ide/ede-project.gif | Bin .../static/c-ide/ede-rearrange-project-dir.gif | Bin .../static/c-ide/ede-same-dir-completion.gif | Bin .../static/c-ide/end-of-defun.gif | Bin .../static/c-ide/forward-func.gif | Bin .../static/c-ide/function-args-demo.gif | Bin .../static/c-ide/function-args-jump.gif | Bin .../static/c-ide/gdb-many-windows.gif | Bin .../static/c-ide/gdb-prompt.gif | Bin .../static/c-ide/ggtags-definitions.png | Bin {emacs-tutor => html}/static/c-ide/gud.gif | Bin .../static/c-ide/helm-files-insertion.gif | Bin .../static/c-ide/helm-gtags-definitions.png | Bin .../static/c-ide/helm-gtags-jump-dwim.gif | Bin .../static/c-ide/helm-gtags-select.gif | Bin .../helm-semantic-or-imenu-with-struct.gif | Bin .../static/c-ide/hs-toggle-hiding.gif | Bin .../static/c-ide/kill-func-body.gif | Bin .../static/c-ide/mark-defun.gif | Bin .../static/c-ide/mark-func-body.gif | Bin .../static/c-ide/moo-complete.png | Bin .../static/c-ide/moo-jump-local.gif | Bin .../c-ide/projectile-find-other-file.gif | Bin .../static/c-ide/semantic-boost-demo.gif | Bin .../c-ide/semantic-idle-summary-lambda.gif | Bin .../c-ide/semantic-idle-summary-variable.gif | Bin .../static/c-ide/semantic-parsing.gif | Bin .../static/c-ide/semantic-sticky-func.gif | Bin .../static/c-ide/semantic-symref.gif | Bin .../c-ide/senator-go-to-up-reference.gif | Bin .../static/c-ide/senator-jump.gif | Bin .../static/c-ide/senator-kill-yank-tag.gif | Bin .../static/c-ide/senator-next-previous-tag.gif | Bin .../static/c-ide/senator-yank-tag.gif | Bin .../static/c-ide/sr-speedbar.gif | Bin {emacs-tutor => html}/static/c-x-3.gif | Bin {emacs-tutor => html}/static/c-x-c-x.gif | Bin {emacs-tutor => html}/static/candidates.jpg | Bin {emacs-tutor => html}/static/comment.gif | Bin {emacs-tutor => html}/static/dired-subdir.gif | Bin .../static/emacs-manual-toc.gif | Bin .../static/emacs-read-pdf.gif | Bin {emacs-tutor => html}/static/ffap.gif | Bin {emacs-tutor => html}/static/find-file-ido.gif | Bin .../static/find-file-normal.gif | Bin {emacs-tutor => html}/static/frames-gui.gif | Bin {emacs-tutor => html}/static/frames-term.gif | Bin {emacs-tutor => html}/static/func_args.jpg | Bin .../static/gdb-many-windows1.png | Bin .../static/gdb-many-windows2.png | Bin .../static/ggtags-create-tags.gif | Bin .../static/ggtags-find-file-bug.gif | Bin .../static/ggtags-find-file.gif | Bin {emacs-tutor => html}/static/ggtags-rerun.gif | Bin .../static/ggtags-view-tag-history.gif | Bin .../static/gnu-global-dir-struct.jpg | Bin {emacs-tutor => html}/static/grep.gif | Bin .../static/helm-buffer-list.gif | Bin .../static/helm-new-file-buffer.gif | Bin .../helm-projectile/helm-projectile-1.gif | Bin .../helm-projectile-add-files-virtual-dir.gif | Bin .../helm-projectile-complete-at-point.gif | Bin ...elm-projectile-delete-files-virtual-dir.gif | Bin .../helm-projectile/helm-projectile-etags.gif | Bin .../helm-projectile-find-file-as-root.gif | Bin .../helm-projectile-find-file-copy.gif | Bin .../helm-projectile-find-file-delete.gif | Bin .../helm-projectile-find-file-ediff.gif | Bin .../helm-projectile-find-file-other-window.gif | Bin .../helm-projectile-find-files-1.gif | Bin .../helm-projectile-find-files-dwim-1.gif | Bin .../helm-projectile-find-other-file.gif | Bin .../helm-projectile/helm-projectile-grep.gif | Bin .../helm-projectile-new-virtual-dir.gif | Bin .../helm-projectile-remove-project.gif | Bin .../helm-projectile-rename-file.gif | Bin .../helm-projectile-serial-rename-file.gif | Bin .../helm-projectile-switch-project.gif | Bin .../static/helm_projectile.gif | Bin .../static/ibuffer-dired-group.gif | Bin .../static/ibuffer-filter-major.gif | Bin .../static/insert_buf2_macro.gif | Bin {emacs-tutor => html}/static/jump_headers.gif | Bin {emacs-tutor => html}/static/linux-dir.gif | Bin {emacs-tutor => html}/static/live_grep.gif | Bin {emacs-tutor => html}/static/macro.gif | Bin {emacs-tutor => html}/static/macro2_full.gif | Bin {emacs-tutor => html}/static/magit.gif | Bin {emacs-tutor => html}/static/modeline.jpg | Bin .../static/multiple-windows.gif | Bin {emacs-tutor => html}/static/occur-edit.gif | Bin {emacs-tutor => html}/static/occur.gif | Bin .../static/part3/backward-sexp.gif | Bin .../static/part3/customize.jpg | Bin .../static/part3/diff-hl-buffer.png | Bin .../static/part3/diff-hl-dired.png | Bin .../static/part3/diff-hl-margin.png | Bin .../static/part3/dired-plus.jpg | Bin .../static/part3/discover-my-major.png | Bin .../static/part3/forward-sexp.gif | Bin .../static/part3/golden-ratio.gif | Bin .../static/part3/helm-all-mark-rings.gif | Bin .../static/part3/helm-autoresize-fix.gif | Bin .../static/part3/helm-autoresize-mode.gif | Bin .../static/part3/helm-calc.gif | Bin .../static/part3/helm-color.gif | Bin .../static/part3/helm-eshell-history.gif | Bin .../static/part3/helm-eval-expression.gif | Bin .../static/part3/helm-find-files.gif | Bin .../static/part3/helm-find.gif | Bin .../static/part3/helm-google-suggest.gif | Bin .../static/part3/helm-kill-ring.gif | Bin .../static/part3/helm-locate.gif | Bin .../static/part3/helm-m-x.gif | Bin .../static/part3/helm-man-woman.gif | Bin .../static/part3/helm-mini.gif | Bin .../static/part3/helm-occur.gif | Bin .../static/part3/helm-regexp.gif | Bin .../static/part3/helm-registers.gif | Bin .../static/part3/helm-semantic-or-imenu-2.gif | Bin .../static/part3/helm-semantic-or-imenu.gif | Bin .../static/part3/helm-surfraw.gif | Bin .../static/part3/helm-top.gif | Bin .../static/part3/ibuffer-vc.png | Bin .../static/part3/kill-sexp.gif | Bin .../static/part3/mark-sexp.gif | Bin .../static/part3/nyan-mode.png | Bin .../static/part3/projectile.png | Bin .../static/part3/rainbow-mode.png | Bin {emacs-tutor => html}/static/part3/smex.png | Bin .../static/part3/transpose-sexp.gif | Bin .../static/part3/undo-tree.jpg | Bin .../static/part3/ztree-diff.png | Bin .../static/part3/ztree-dir.png | Bin .../static/path-variable-windows.jpg | Bin {emacs-tutor => html}/static/performance.gif | Bin {emacs-tutor => html}/static/prepare_macro.gif | Bin .../static/proglang/aggressive-indent.gif | Bin .../static/proglang/emacs_home.png | Bin .../static/proglang/emacs_path.png | Bin .../proglang/forward-backward-parens.gif | Bin .../static/proglang/geiser-demo.gif | Bin .../static/proglang/monokai.png | Bin .../static/proglang/repl-autodoc.png | Bin .../static/proglang/repl-mod.png | Bin .../static/proglang/sml-completion.gif | Bin .../static/proglang/sml-helm-imenu.gif | Bin .../static/proglang/sml-send-buffer.gif | Bin .../static/proglang/sml-send-region.gif | Bin .../static/proglang/sml-start-proc.gif | Bin .../static/proglang/zenburn.png | Bin {emacs-tutor => html}/static/reg_a.gif | Bin {emacs-tutor => html}/static/reg_b.gif | Bin {emacs-tutor => html}/static/reg_c.gif | Bin {emacs-tutor => html}/static/reg_d.gif | Bin .../static/register-windows.gif | Bin .../cygwin_example_install.png | Bin .../emacs_xwidgets_windows.png | Bin .../pdf_tools_windows_latex.gif | Bin .../setup-emacs-windows/xserver_example.png | Bin {emacs-tutor => html}/static/vc-diff.jpg | Bin {emacs-tutor => html}/static/worg.css | 0 {emacs-tutor => org}/c-ide-irony_bak.org | 0 {emacs-tutor => org}/c-ide.org | 0 {emacs-tutor => org}/cedet.org | 0 {emacs-tutor => org}/ebrowse.org | 0 {emacs-tutor => org}/emacs-for-proglang.org | 0 {emacs-tutor => org}/emacs-tutor.org | 0 {emacs-tutor => org}/emacs-tutor2.org | 0 {emacs-tutor => org}/emacs-tutor3.org | 0 {emacs-tutor => org}/helm-intro.org | 0 {emacs-tutor => org}/helm-projectile.org | 0 {emacs-tutor => org}/index.org | 0 {emacs-tutor => org}/planet.css | 0 {emacs-tutor => org}/publish.el | 0 {emacs-tutor => org}/setup-emacs-windows.org | 0 {static => org/static}/auto_complete.gif | Bin {static => org/static}/c-ide/backward-func.gif | Bin .../static}/c-ide/beginning-of-defun.gif | Bin .../static}/c-ide/company-c-header.png | Bin .../c-ide/company-clang-company-gtags.gif | Bin .../c-ide/company-clang-project-completion.gif | Bin .../static}/c-ide/compilation-compile.gif | Bin .../static}/c-ide/compilation-mode.gif | Bin {static => org/static}/c-ide/ede-project.gif | Bin .../c-ide/ede-rearrange-project-dir.gif | Bin .../static}/c-ide/ede-same-dir-completion.gif | Bin {static => org/static}/c-ide/end-of-defun.gif | Bin {emacs-tutor => org}/static/c-ide/fa-show | Bin {static => org/static}/c-ide/forward-func.gif | Bin .../static}/c-ide/function-args-demo.gif | Bin .../static}/c-ide/function-args-jump.gif | Bin .../static}/c-ide/gdb-many-windows.gif | Bin {static => org/static}/c-ide/gdb-prompt.gif | Bin .../static}/c-ide/ggtags-definitions.png | Bin {static => org/static}/c-ide/gud.gif | Bin .../static}/c-ide/helm-files-insertion.gif | Bin .../static}/c-ide/helm-gtags-definitions.png | Bin .../static}/c-ide/helm-gtags-jump-dwim.gif | Bin .../static}/c-ide/helm-gtags-select.gif | Bin .../helm-semantic-or-imenu-with-struct.gif | Bin .../static}/c-ide/hs-toggle-hiding.gif | Bin .../static}/c-ide/kill-func-body.gif | Bin {static => org/static}/c-ide/mark-defun.gif | Bin .../static}/c-ide/mark-func-body.gif | Bin {static => org/static}/c-ide/moo-complete.png | Bin .../static}/c-ide/moo-jump-local.gif | Bin .../c-ide/projectile-find-other-file.gif | Bin .../static}/c-ide/semantic-boost-demo.gif | Bin .../c-ide/semantic-idle-summary-lambda.gif | Bin .../c-ide/semantic-idle-summary-variable.gif | Bin .../static}/c-ide/semantic-parsing.gif | Bin .../static}/c-ide/semantic-sticky-func.gif | Bin .../static}/c-ide/semantic-symref.gif | Bin .../c-ide/senator-go-to-up-reference.gif | Bin {static => org/static}/c-ide/senator-jump.gif | Bin .../static}/c-ide/senator-kill-yank-tag.gif | Bin .../c-ide/senator-next-previous-tag.gif | Bin .../static}/c-ide/senator-yank-tag.gif | Bin {static => org/static}/c-ide/sr-speedbar.gif | Bin {static => org/static}/c-x-3.gif | Bin {static => org/static}/c-x-c-x.gif | Bin {static => org/static}/candidates.jpg | Bin {static => org/static}/comment.gif | Bin {static => org/static}/dired-subdir.gif | Bin {static => org/static}/emacs-manual-toc.gif | Bin {static => org/static}/emacs-read-pdf.gif | Bin {static => org/static}/ffap.gif | Bin {static => org/static}/find-file-ido.gif | Bin {static => org/static}/find-file-normal.gif | Bin {static => org/static}/frames-gui.gif | Bin {static => org/static}/frames-term.gif | Bin {static => org/static}/func_args.jpg | Bin {static => org/static}/gdb-many-windows1.png | Bin {static => org/static}/gdb-many-windows2.png | Bin {static => org/static}/ggtags-create-tags.gif | Bin .../static}/ggtags-find-file-bug.gif | Bin {static => org/static}/ggtags-find-file.gif | Bin {static => org/static}/ggtags-rerun.gif | Bin .../static}/ggtags-view-tag-history.gif | Bin .../static}/gnu-global-dir-struct.jpg | Bin {static => org/static}/grep.gif | Bin {static => org/static}/helm-buffer-list.gif | Bin .../static}/helm-new-file-buffer.gif | Bin .../helm-projectile/helm-projectile-1.gif | Bin .../helm-projectile-add-files-virtual-dir.gif | Bin .../helm-projectile-complete-at-point.gif | Bin ...elm-projectile-delete-files-virtual-dir.gif | Bin .../helm-projectile/helm-projectile-etags.gif | Bin .../helm-projectile-find-file-as-root.gif | Bin .../helm-projectile-find-file-copy.gif | Bin .../helm-projectile-find-file-delete.gif | Bin .../helm-projectile-find-file-ediff.gif | Bin .../helm-projectile-find-file-other-window.gif | Bin .../helm-projectile-find-files-1.gif | Bin .../helm-projectile-find-files-dwim-1.gif | Bin .../helm-projectile-find-other-file.gif | Bin .../helm-projectile/helm-projectile-grep.gif | Bin .../helm-projectile-new-virtual-dir.gif | Bin .../helm-projectile-remove-project.gif | Bin .../helm-projectile-rename-file.gif | Bin .../helm-projectile-serial-rename-file.gif | Bin .../helm-projectile-switch-project.gif | Bin {static => org/static}/helm_projectile.gif | Bin {static => org/static}/ibuffer-dired-group.gif | Bin .../static}/ibuffer-filter-major.gif | Bin {static => org/static}/insert_buf2_macro.gif | Bin {static => org/static}/jump_headers.gif | Bin {static => org/static}/linux-dir.gif | Bin {static => org/static}/live_grep.gif | Bin {static => org/static}/macro.gif | Bin {static => org/static}/macro2_full.gif | Bin {static => org/static}/magit.gif | Bin {static => org/static}/modeline.jpg | Bin {static => org/static}/multiple-windows.gif | Bin {static => org/static}/occur-edit.gif | Bin {static => org/static}/occur.gif | Bin {static => org/static}/part3/backward-sexp.gif | Bin {static => org/static}/part3/customize.jpg | Bin .../static}/part3/diff-hl-buffer.png | Bin {static => org/static}/part3/diff-hl-dired.png | Bin .../static}/part3/diff-hl-margin.png | Bin {static => org/static}/part3/dired-plus.jpg | Bin .../static}/part3/discover-my-major.png | Bin {static => org/static}/part3/forward-sexp.gif | Bin {static => org/static}/part3/golden-ratio.gif | Bin .../static}/part3/helm-all-mark-rings.gif | Bin .../static}/part3/helm-autoresize-fix.gif | Bin .../static}/part3/helm-autoresize-mode.gif | Bin {static => org/static}/part3/helm-calc.gif | Bin {static => org/static}/part3/helm-color.gif | Bin .../static/part3/helm-eshell-history.gif | Bin .../static}/part3/helm-eval-expression.gif | Bin .../static}/part3/helm-find-files.gif | Bin {static => org/static}/part3/helm-find.gif | Bin .../static}/part3/helm-google-suggest.gif | Bin .../static}/part3/helm-kill-ring.gif | Bin {static => org/static}/part3/helm-locate.gif | Bin {static => org/static}/part3/helm-m-x.gif | Bin .../static}/part3/helm-man-woman.gif | Bin {static => org/static}/part3/helm-mini.gif | Bin {static => org/static}/part3/helm-occur.gif | Bin {static => org/static}/part3/helm-regexp.gif | Bin .../static}/part3/helm-registers.gif | Bin .../static}/part3/helm-semantic-or-imenu-2.gif | Bin .../static}/part3/helm-semantic-or-imenu.gif | Bin {static => org/static}/part3/helm-surfraw.gif | Bin {static => org/static}/part3/helm-top.gif | Bin {static => org/static}/part3/ibuffer-vc.png | Bin {static => org/static}/part3/kill-sexp.gif | Bin {static => org/static}/part3/mark-sexp.gif | Bin {static => org/static}/part3/nyan-mode.png | Bin {static => org/static}/part3/projectile.png | Bin {static => org/static}/part3/rainbow-mode.png | Bin {static => org/static}/part3/smex.png | Bin .../static}/part3/transpose-sexp.gif | Bin {static => org/static}/part3/undo-tree.jpg | Bin {static => org/static}/part3/ztree-diff.png | Bin {static => org/static}/part3/ztree-dir.png | Bin .../static}/path-variable-windows.jpg | Bin {static => org/static}/performance.gif | Bin {static => org/static}/prepare_macro.gif | Bin .../static}/proglang/aggressive-indent.gif | Bin {static => org/static}/proglang/emacs_home.png | Bin {static => org/static}/proglang/emacs_path.png | Bin .../proglang/forward-backward-parens.gif | Bin .../static}/proglang/geiser-demo.gif | Bin {static => org/static}/proglang/monokai.png | Bin .../static}/proglang/repl-autodoc.png | Bin {static => org/static}/proglang/repl-mod.png | Bin .../static}/proglang/sml-completion.gif | Bin .../static}/proglang/sml-helm-imenu.gif | Bin .../static}/proglang/sml-send-buffer.gif | Bin .../static}/proglang/sml-send-region.gif | Bin .../static}/proglang/sml-start-proc.gif | Bin {static => org/static}/proglang/zenburn.png | Bin {static => org/static}/reg_a.gif | Bin {static => org/static}/reg_b.gif | Bin {static => org/static}/reg_c.gif | Bin {static => org/static}/reg_d.gif | Bin {static => org/static}/register-windows.gif | Bin .../emacs_xwidgets_windows.png | Bin .../pdf_tools_windows_latex.gif | Bin .../setup-emacs-windows/xserver_example.png | Bin {static => org/static}/vc-diff.jpg | Bin {static => org/static}/worg.css | 0 static/part3/helm-eshell-history.gif | Bin 112704 -> 0 bytes 364 files changed, 0 insertions(+), 0 deletions(-) rename c-ide.html => html/c-ide.html (100%) rename emacs-for-proglang.html => html/emacs-for-proglang.html (100%) rename emacs-tutor.html => html/emacs-tutor.html (100%) rename emacs-tutor2.html => html/emacs-tutor2.html (100%) rename emacs-tutor3.html => html/emacs-tutor3.html (100%) rename helm-intro.html => html/helm-intro.html (100%) rename helm-projectile.html => html/helm-projectile.html (100%) rename index.html => html/index.html (100%) rename setup-emacs-windows.html => html/setup-emacs-windows.html (100%) rename {emacs-tutor => html}/static/auto_complete.gif (100%) rename {emacs-tutor => html}/static/c-ide/backward-func.gif (100%) rename {emacs-tutor => html}/static/c-ide/beginning-of-defun.gif (100%) rename {emacs-tutor => html}/static/c-ide/company-c-header.png (100%) rename {emacs-tutor => html}/static/c-ide/company-clang-company-gtags.gif (100%) rename {emacs-tutor => html}/static/c-ide/company-clang-project-completion.gif (100%) rename {emacs-tutor => html}/static/c-ide/compilation-compile.gif (100%) rename {emacs-tutor => html}/static/c-ide/compilation-mode.gif (100%) rename {emacs-tutor => html}/static/c-ide/ede-project.gif (100%) rename {emacs-tutor => html}/static/c-ide/ede-rearrange-project-dir.gif (100%) rename {emacs-tutor => html}/static/c-ide/ede-same-dir-completion.gif (100%) rename {emacs-tutor => html}/static/c-ide/end-of-defun.gif (100%) rename {emacs-tutor => html}/static/c-ide/forward-func.gif (100%) rename {emacs-tutor => html}/static/c-ide/function-args-demo.gif (100%) rename {emacs-tutor => html}/static/c-ide/function-args-jump.gif (100%) rename {emacs-tutor => html}/static/c-ide/gdb-many-windows.gif (100%) rename {emacs-tutor => html}/static/c-ide/gdb-prompt.gif (100%) rename {emacs-tutor => html}/static/c-ide/ggtags-definitions.png (100%) rename {emacs-tutor => html}/static/c-ide/gud.gif (100%) rename {emacs-tutor => html}/static/c-ide/helm-files-insertion.gif (100%) rename {emacs-tutor => html}/static/c-ide/helm-gtags-definitions.png (100%) rename {emacs-tutor => html}/static/c-ide/helm-gtags-jump-dwim.gif (100%) rename {emacs-tutor => html}/static/c-ide/helm-gtags-select.gif (100%) rename {emacs-tutor => html}/static/c-ide/helm-semantic-or-imenu-with-struct.gif (100%) rename {emacs-tutor => html}/static/c-ide/hs-toggle-hiding.gif (100%) rename {emacs-tutor => html}/static/c-ide/kill-func-body.gif (100%) rename {emacs-tutor => html}/static/c-ide/mark-defun.gif (100%) rename {emacs-tutor => html}/static/c-ide/mark-func-body.gif (100%) rename {emacs-tutor => html}/static/c-ide/moo-complete.png (100%) rename {emacs-tutor => html}/static/c-ide/moo-jump-local.gif (100%) rename {emacs-tutor => html}/static/c-ide/projectile-find-other-file.gif (100%) rename {emacs-tutor => html}/static/c-ide/semantic-boost-demo.gif (100%) rename {emacs-tutor => html}/static/c-ide/semantic-idle-summary-lambda.gif (100%) rename {emacs-tutor => html}/static/c-ide/semantic-idle-summary-variable.gif (100%) rename {emacs-tutor => html}/static/c-ide/semantic-parsing.gif (100%) rename {emacs-tutor => html}/static/c-ide/semantic-sticky-func.gif (100%) rename {emacs-tutor => html}/static/c-ide/semantic-symref.gif (100%) rename {emacs-tutor => html}/static/c-ide/senator-go-to-up-reference.gif (100%) rename {emacs-tutor => html}/static/c-ide/senator-jump.gif (100%) rename {emacs-tutor => html}/static/c-ide/senator-kill-yank-tag.gif (100%) rename {emacs-tutor => html}/static/c-ide/senator-next-previous-tag.gif (100%) rename {emacs-tutor => html}/static/c-ide/senator-yank-tag.gif (100%) rename {emacs-tutor => html}/static/c-ide/sr-speedbar.gif (100%) rename {emacs-tutor => html}/static/c-x-3.gif (100%) rename {emacs-tutor => html}/static/c-x-c-x.gif (100%) rename {emacs-tutor => html}/static/candidates.jpg (100%) rename {emacs-tutor => html}/static/comment.gif (100%) rename {emacs-tutor => html}/static/dired-subdir.gif (100%) rename {emacs-tutor => html}/static/emacs-manual-toc.gif (100%) rename {emacs-tutor => html}/static/emacs-read-pdf.gif (100%) rename {emacs-tutor => html}/static/ffap.gif (100%) rename {emacs-tutor => html}/static/find-file-ido.gif (100%) rename {emacs-tutor => html}/static/find-file-normal.gif (100%) rename {emacs-tutor => html}/static/frames-gui.gif (100%) rename {emacs-tutor => html}/static/frames-term.gif (100%) rename {emacs-tutor => html}/static/func_args.jpg (100%) rename {emacs-tutor => html}/static/gdb-many-windows1.png (100%) rename {emacs-tutor => html}/static/gdb-many-windows2.png (100%) rename {emacs-tutor => html}/static/ggtags-create-tags.gif (100%) rename {emacs-tutor => html}/static/ggtags-find-file-bug.gif (100%) rename {emacs-tutor => html}/static/ggtags-find-file.gif (100%) rename {emacs-tutor => html}/static/ggtags-rerun.gif (100%) rename {emacs-tutor => html}/static/ggtags-view-tag-history.gif (100%) rename {emacs-tutor => html}/static/gnu-global-dir-struct.jpg (100%) rename {emacs-tutor => html}/static/grep.gif (100%) rename {emacs-tutor => html}/static/helm-buffer-list.gif (100%) rename {emacs-tutor => html}/static/helm-new-file-buffer.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-1.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-complete-at-point.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-etags.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-file-as-root.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-file-copy.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-file-delete.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-file-ediff.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-file-other-window.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-files-1.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-files-dwim-1.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-find-other-file.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-grep.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-new-virtual-dir.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-remove-project.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-rename-file.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-serial-rename-file.gif (100%) rename {emacs-tutor => html}/static/helm-projectile/helm-projectile-switch-project.gif (100%) rename {emacs-tutor => html}/static/helm_projectile.gif (100%) rename {emacs-tutor => html}/static/ibuffer-dired-group.gif (100%) rename {emacs-tutor => html}/static/ibuffer-filter-major.gif (100%) rename {emacs-tutor => html}/static/insert_buf2_macro.gif (100%) rename {emacs-tutor => html}/static/jump_headers.gif (100%) rename {emacs-tutor => html}/static/linux-dir.gif (100%) rename {emacs-tutor => html}/static/live_grep.gif (100%) rename {emacs-tutor => html}/static/macro.gif (100%) rename {emacs-tutor => html}/static/macro2_full.gif (100%) rename {emacs-tutor => html}/static/magit.gif (100%) rename {emacs-tutor => html}/static/modeline.jpg (100%) rename {emacs-tutor => html}/static/multiple-windows.gif (100%) rename {emacs-tutor => html}/static/occur-edit.gif (100%) rename {emacs-tutor => html}/static/occur.gif (100%) rename {emacs-tutor => html}/static/part3/backward-sexp.gif (100%) rename {emacs-tutor => html}/static/part3/customize.jpg (100%) rename {emacs-tutor => html}/static/part3/diff-hl-buffer.png (100%) rename {emacs-tutor => html}/static/part3/diff-hl-dired.png (100%) rename {emacs-tutor => html}/static/part3/diff-hl-margin.png (100%) rename {emacs-tutor => html}/static/part3/dired-plus.jpg (100%) rename {emacs-tutor => html}/static/part3/discover-my-major.png (100%) rename {emacs-tutor => html}/static/part3/forward-sexp.gif (100%) rename {emacs-tutor => html}/static/part3/golden-ratio.gif (100%) rename {emacs-tutor => html}/static/part3/helm-all-mark-rings.gif (100%) rename {emacs-tutor => html}/static/part3/helm-autoresize-fix.gif (100%) rename {emacs-tutor => html}/static/part3/helm-autoresize-mode.gif (100%) rename {emacs-tutor => html}/static/part3/helm-calc.gif (100%) rename {emacs-tutor => html}/static/part3/helm-color.gif (100%) rename {emacs-tutor => html}/static/part3/helm-eshell-history.gif (100%) rename {emacs-tutor => html}/static/part3/helm-eval-expression.gif (100%) rename {emacs-tutor => html}/static/part3/helm-find-files.gif (100%) rename {emacs-tutor => html}/static/part3/helm-find.gif (100%) rename {emacs-tutor => html}/static/part3/helm-google-suggest.gif (100%) rename {emacs-tutor => html}/static/part3/helm-kill-ring.gif (100%) rename {emacs-tutor => html}/static/part3/helm-locate.gif (100%) rename {emacs-tutor => html}/static/part3/helm-m-x.gif (100%) rename {emacs-tutor => html}/static/part3/helm-man-woman.gif (100%) rename {emacs-tutor => html}/static/part3/helm-mini.gif (100%) rename {emacs-tutor => html}/static/part3/helm-occur.gif (100%) rename {emacs-tutor => html}/static/part3/helm-regexp.gif (100%) rename {emacs-tutor => html}/static/part3/helm-registers.gif (100%) rename {emacs-tutor => html}/static/part3/helm-semantic-or-imenu-2.gif (100%) rename {emacs-tutor => html}/static/part3/helm-semantic-or-imenu.gif (100%) rename {emacs-tutor => html}/static/part3/helm-surfraw.gif (100%) rename {emacs-tutor => html}/static/part3/helm-top.gif (100%) rename {emacs-tutor => html}/static/part3/ibuffer-vc.png (100%) rename {emacs-tutor => html}/static/part3/kill-sexp.gif (100%) rename {emacs-tutor => html}/static/part3/mark-sexp.gif (100%) rename {emacs-tutor => html}/static/part3/nyan-mode.png (100%) rename {emacs-tutor => html}/static/part3/projectile.png (100%) rename {emacs-tutor => html}/static/part3/rainbow-mode.png (100%) rename {emacs-tutor => html}/static/part3/smex.png (100%) rename {emacs-tutor => html}/static/part3/transpose-sexp.gif (100%) rename {emacs-tutor => html}/static/part3/undo-tree.jpg (100%) rename {emacs-tutor => html}/static/part3/ztree-diff.png (100%) rename {emacs-tutor => html}/static/part3/ztree-dir.png (100%) rename {emacs-tutor => html}/static/path-variable-windows.jpg (100%) rename {emacs-tutor => html}/static/performance.gif (100%) rename {emacs-tutor => html}/static/prepare_macro.gif (100%) rename {emacs-tutor => html}/static/proglang/aggressive-indent.gif (100%) rename {emacs-tutor => html}/static/proglang/emacs_home.png (100%) rename {emacs-tutor => html}/static/proglang/emacs_path.png (100%) rename {emacs-tutor => html}/static/proglang/forward-backward-parens.gif (100%) rename {emacs-tutor => html}/static/proglang/geiser-demo.gif (100%) rename {emacs-tutor => html}/static/proglang/monokai.png (100%) rename {emacs-tutor => html}/static/proglang/repl-autodoc.png (100%) rename {emacs-tutor => html}/static/proglang/repl-mod.png (100%) rename {emacs-tutor => html}/static/proglang/sml-completion.gif (100%) rename {emacs-tutor => html}/static/proglang/sml-helm-imenu.gif (100%) rename {emacs-tutor => html}/static/proglang/sml-send-buffer.gif (100%) rename {emacs-tutor => html}/static/proglang/sml-send-region.gif (100%) rename {emacs-tutor => html}/static/proglang/sml-start-proc.gif (100%) rename {emacs-tutor => html}/static/proglang/zenburn.png (100%) rename {emacs-tutor => html}/static/reg_a.gif (100%) rename {emacs-tutor => html}/static/reg_b.gif (100%) rename {emacs-tutor => html}/static/reg_c.gif (100%) rename {emacs-tutor => html}/static/reg_d.gif (100%) rename {emacs-tutor => html}/static/register-windows.gif (100%) rename {static => html/static}/setup-emacs-windows/cygwin_example_install.png (100%) rename {emacs-tutor => html}/static/setup-emacs-windows/emacs_xwidgets_windows.png (100%) rename {emacs-tutor => html}/static/setup-emacs-windows/pdf_tools_windows_latex.gif (100%) rename {emacs-tutor => html}/static/setup-emacs-windows/xserver_example.png (100%) rename {emacs-tutor => html}/static/vc-diff.jpg (100%) rename {emacs-tutor => html}/static/worg.css (100%) rename {emacs-tutor => org}/c-ide-irony_bak.org (100%) rename {emacs-tutor => org}/c-ide.org (100%) rename {emacs-tutor => org}/cedet.org (100%) rename {emacs-tutor => org}/ebrowse.org (100%) rename {emacs-tutor => org}/emacs-for-proglang.org (100%) rename {emacs-tutor => org}/emacs-tutor.org (100%) rename {emacs-tutor => org}/emacs-tutor2.org (100%) rename {emacs-tutor => org}/emacs-tutor3.org (100%) rename {emacs-tutor => org}/helm-intro.org (100%) rename {emacs-tutor => org}/helm-projectile.org (100%) rename {emacs-tutor => org}/index.org (100%) rename {emacs-tutor => org}/planet.css (100%) rename {emacs-tutor => org}/publish.el (100%) rename {emacs-tutor => org}/setup-emacs-windows.org (100%) rename {static => org/static}/auto_complete.gif (100%) rename {static => org/static}/c-ide/backward-func.gif (100%) rename {static => org/static}/c-ide/beginning-of-defun.gif (100%) rename {static => org/static}/c-ide/company-c-header.png (100%) rename {static => org/static}/c-ide/company-clang-company-gtags.gif (100%) rename {static => org/static}/c-ide/company-clang-project-completion.gif (100%) rename {static => org/static}/c-ide/compilation-compile.gif (100%) rename {static => org/static}/c-ide/compilation-mode.gif (100%) rename {static => org/static}/c-ide/ede-project.gif (100%) rename {static => org/static}/c-ide/ede-rearrange-project-dir.gif (100%) rename {static => org/static}/c-ide/ede-same-dir-completion.gif (100%) rename {static => org/static}/c-ide/end-of-defun.gif (100%) rename {emacs-tutor => org}/static/c-ide/fa-show (100%) rename {static => org/static}/c-ide/forward-func.gif (100%) rename {static => org/static}/c-ide/function-args-demo.gif (100%) rename {static => org/static}/c-ide/function-args-jump.gif (100%) rename {static => org/static}/c-ide/gdb-many-windows.gif (100%) rename {static => org/static}/c-ide/gdb-prompt.gif (100%) rename {static => org/static}/c-ide/ggtags-definitions.png (100%) rename {static => org/static}/c-ide/gud.gif (100%) rename {static => org/static}/c-ide/helm-files-insertion.gif (100%) rename {static => org/static}/c-ide/helm-gtags-definitions.png (100%) rename {static => org/static}/c-ide/helm-gtags-jump-dwim.gif (100%) rename {static => org/static}/c-ide/helm-gtags-select.gif (100%) rename {static => org/static}/c-ide/helm-semantic-or-imenu-with-struct.gif (100%) rename {static => org/static}/c-ide/hs-toggle-hiding.gif (100%) rename {static => org/static}/c-ide/kill-func-body.gif (100%) rename {static => org/static}/c-ide/mark-defun.gif (100%) rename {static => org/static}/c-ide/mark-func-body.gif (100%) rename {static => org/static}/c-ide/moo-complete.png (100%) rename {static => org/static}/c-ide/moo-jump-local.gif (100%) rename {static => org/static}/c-ide/projectile-find-other-file.gif (100%) rename {static => org/static}/c-ide/semantic-boost-demo.gif (100%) rename {static => org/static}/c-ide/semantic-idle-summary-lambda.gif (100%) rename {static => org/static}/c-ide/semantic-idle-summary-variable.gif (100%) rename {static => org/static}/c-ide/semantic-parsing.gif (100%) rename {static => org/static}/c-ide/semantic-sticky-func.gif (100%) rename {static => org/static}/c-ide/semantic-symref.gif (100%) rename {static => org/static}/c-ide/senator-go-to-up-reference.gif (100%) rename {static => org/static}/c-ide/senator-jump.gif (100%) rename {static => org/static}/c-ide/senator-kill-yank-tag.gif (100%) rename {static => org/static}/c-ide/senator-next-previous-tag.gif (100%) rename {static => org/static}/c-ide/senator-yank-tag.gif (100%) rename {static => org/static}/c-ide/sr-speedbar.gif (100%) rename {static => org/static}/c-x-3.gif (100%) rename {static => org/static}/c-x-c-x.gif (100%) rename {static => org/static}/candidates.jpg (100%) rename {static => org/static}/comment.gif (100%) rename {static => org/static}/dired-subdir.gif (100%) rename {static => org/static}/emacs-manual-toc.gif (100%) rename {static => org/static}/emacs-read-pdf.gif (100%) rename {static => org/static}/ffap.gif (100%) rename {static => org/static}/find-file-ido.gif (100%) rename {static => org/static}/find-file-normal.gif (100%) rename {static => org/static}/frames-gui.gif (100%) rename {static => org/static}/frames-term.gif (100%) rename {static => org/static}/func_args.jpg (100%) rename {static => org/static}/gdb-many-windows1.png (100%) rename {static => org/static}/gdb-many-windows2.png (100%) rename {static => org/static}/ggtags-create-tags.gif (100%) rename {static => org/static}/ggtags-find-file-bug.gif (100%) rename {static => org/static}/ggtags-find-file.gif (100%) rename {static => org/static}/ggtags-rerun.gif (100%) rename {static => org/static}/ggtags-view-tag-history.gif (100%) rename {static => org/static}/gnu-global-dir-struct.jpg (100%) rename {static => org/static}/grep.gif (100%) rename {static => org/static}/helm-buffer-list.gif (100%) rename {static => org/static}/helm-new-file-buffer.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-1.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-add-files-virtual-dir.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-complete-at-point.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-delete-files-virtual-dir.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-etags.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-file-as-root.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-file-copy.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-file-delete.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-file-ediff.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-file-other-window.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-files-1.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-files-dwim-1.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-find-other-file.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-grep.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-new-virtual-dir.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-remove-project.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-rename-file.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-serial-rename-file.gif (100%) rename {static => org/static}/helm-projectile/helm-projectile-switch-project.gif (100%) rename {static => org/static}/helm_projectile.gif (100%) rename {static => org/static}/ibuffer-dired-group.gif (100%) rename {static => org/static}/ibuffer-filter-major.gif (100%) rename {static => org/static}/insert_buf2_macro.gif (100%) rename {static => org/static}/jump_headers.gif (100%) rename {static => org/static}/linux-dir.gif (100%) rename {static => org/static}/live_grep.gif (100%) rename {static => org/static}/macro.gif (100%) rename {static => org/static}/macro2_full.gif (100%) rename {static => org/static}/magit.gif (100%) rename {static => org/static}/modeline.jpg (100%) rename {static => org/static}/multiple-windows.gif (100%) rename {static => org/static}/occur-edit.gif (100%) rename {static => org/static}/occur.gif (100%) rename {static => org/static}/part3/backward-sexp.gif (100%) rename {static => org/static}/part3/customize.jpg (100%) rename {static => org/static}/part3/diff-hl-buffer.png (100%) rename {static => org/static}/part3/diff-hl-dired.png (100%) rename {static => org/static}/part3/diff-hl-margin.png (100%) rename {static => org/static}/part3/dired-plus.jpg (100%) rename {static => org/static}/part3/discover-my-major.png (100%) rename {static => org/static}/part3/forward-sexp.gif (100%) rename {static => org/static}/part3/golden-ratio.gif (100%) rename {static => org/static}/part3/helm-all-mark-rings.gif (100%) rename {static => org/static}/part3/helm-autoresize-fix.gif (100%) rename {static => org/static}/part3/helm-autoresize-mode.gif (100%) rename {static => org/static}/part3/helm-calc.gif (100%) rename {static => org/static}/part3/helm-color.gif (100%) rename helm-eshell-history.gif => org/static/part3/helm-eshell-history.gif (100%) rename {static => org/static}/part3/helm-eval-expression.gif (100%) rename {static => org/static}/part3/helm-find-files.gif (100%) rename {static => org/static}/part3/helm-find.gif (100%) rename {static => org/static}/part3/helm-google-suggest.gif (100%) rename {static => org/static}/part3/helm-kill-ring.gif (100%) rename {static => org/static}/part3/helm-locate.gif (100%) rename {static => org/static}/part3/helm-m-x.gif (100%) rename {static => org/static}/part3/helm-man-woman.gif (100%) rename {static => org/static}/part3/helm-mini.gif (100%) rename {static => org/static}/part3/helm-occur.gif (100%) rename {static => org/static}/part3/helm-regexp.gif (100%) rename {static => org/static}/part3/helm-registers.gif (100%) rename {static => org/static}/part3/helm-semantic-or-imenu-2.gif (100%) rename {static => org/static}/part3/helm-semantic-or-imenu.gif (100%) rename {static => org/static}/part3/helm-surfraw.gif (100%) rename {static => org/static}/part3/helm-top.gif (100%) rename {static => org/static}/part3/ibuffer-vc.png (100%) rename {static => org/static}/part3/kill-sexp.gif (100%) rename {static => org/static}/part3/mark-sexp.gif (100%) rename {static => org/static}/part3/nyan-mode.png (100%) rename {static => org/static}/part3/projectile.png (100%) rename {static => org/static}/part3/rainbow-mode.png (100%) rename {static => org/static}/part3/smex.png (100%) rename {static => org/static}/part3/transpose-sexp.gif (100%) rename {static => org/static}/part3/undo-tree.jpg (100%) rename {static => org/static}/part3/ztree-diff.png (100%) rename {static => org/static}/part3/ztree-dir.png (100%) rename {static => org/static}/path-variable-windows.jpg (100%) rename {static => org/static}/performance.gif (100%) rename {static => org/static}/prepare_macro.gif (100%) rename {static => org/static}/proglang/aggressive-indent.gif (100%) rename {static => org/static}/proglang/emacs_home.png (100%) rename {static => org/static}/proglang/emacs_path.png (100%) rename {static => org/static}/proglang/forward-backward-parens.gif (100%) rename {static => org/static}/proglang/geiser-demo.gif (100%) rename {static => org/static}/proglang/monokai.png (100%) rename {static => org/static}/proglang/repl-autodoc.png (100%) rename {static => org/static}/proglang/repl-mod.png (100%) rename {static => org/static}/proglang/sml-completion.gif (100%) rename {static => org/static}/proglang/sml-helm-imenu.gif (100%) rename {static => org/static}/proglang/sml-send-buffer.gif (100%) rename {static => org/static}/proglang/sml-send-region.gif (100%) rename {static => org/static}/proglang/sml-start-proc.gif (100%) rename {static => org/static}/proglang/zenburn.png (100%) rename {static => org/static}/reg_a.gif (100%) rename {static => org/static}/reg_b.gif (100%) rename {static => org/static}/reg_c.gif (100%) rename {static => org/static}/reg_d.gif (100%) rename {static => org/static}/register-windows.gif (100%) rename {static => org/static}/setup-emacs-windows/emacs_xwidgets_windows.png (100%) rename {static => org/static}/setup-emacs-windows/pdf_tools_windows_latex.gif (100%) rename {static => org/static}/setup-emacs-windows/xserver_example.png (100%) rename {static => org/static}/vc-diff.jpg (100%) rename {static => org/static}/worg.css (100%) delete mode 100644 static/part3/helm-eshell-history.gif diff --git a/c-ide.html b/html/c-ide.html similarity index 100% rename from c-ide.html rename to html/c-ide.html diff --git a/emacs-for-proglang.html b/html/emacs-for-proglang.html similarity index 100% rename from emacs-for-proglang.html rename to html/emacs-for-proglang.html diff --git a/emacs-tutor.html b/html/emacs-tutor.html similarity index 100% rename from emacs-tutor.html rename to html/emacs-tutor.html diff --git a/emacs-tutor2.html b/html/emacs-tutor2.html similarity index 100% rename from emacs-tutor2.html rename to html/emacs-tutor2.html diff --git a/emacs-tutor3.html b/html/emacs-tutor3.html similarity index 100% rename from emacs-tutor3.html rename to html/emacs-tutor3.html diff --git a/helm-intro.html b/html/helm-intro.html similarity index 100% rename from helm-intro.html rename to html/helm-intro.html diff --git a/helm-projectile.html b/html/helm-projectile.html similarity index 100% rename from helm-projectile.html rename to html/helm-projectile.html diff --git a/index.html b/html/index.html similarity index 100% rename from index.html rename to html/index.html diff --git a/setup-emacs-windows.html b/html/setup-emacs-windows.html similarity index 100% rename from setup-emacs-windows.html rename to html/setup-emacs-windows.html diff --git a/emacs-tutor/static/auto_complete.gif b/html/static/auto_complete.gif similarity index 100% rename from emacs-tutor/static/auto_complete.gif rename to html/static/auto_complete.gif diff --git a/emacs-tutor/static/c-ide/backward-func.gif b/html/static/c-ide/backward-func.gif similarity index 100% rename from emacs-tutor/static/c-ide/backward-func.gif rename to html/static/c-ide/backward-func.gif diff --git a/emacs-tutor/static/c-ide/beginning-of-defun.gif b/html/static/c-ide/beginning-of-defun.gif similarity index 100% rename from emacs-tutor/static/c-ide/beginning-of-defun.gif rename to html/static/c-ide/beginning-of-defun.gif diff --git a/emacs-tutor/static/c-ide/company-c-header.png b/html/static/c-ide/company-c-header.png similarity index 100% rename from emacs-tutor/static/c-ide/company-c-header.png rename to html/static/c-ide/company-c-header.png diff --git a/emacs-tutor/static/c-ide/company-clang-company-gtags.gif b/html/static/c-ide/company-clang-company-gtags.gif similarity index 100% rename from emacs-tutor/static/c-ide/company-clang-company-gtags.gif rename to html/static/c-ide/company-clang-company-gtags.gif diff --git a/emacs-tutor/static/c-ide/company-clang-project-completion.gif b/html/static/c-ide/company-clang-project-completion.gif similarity index 100% rename from emacs-tutor/static/c-ide/company-clang-project-completion.gif rename to html/static/c-ide/company-clang-project-completion.gif diff --git a/emacs-tutor/static/c-ide/compilation-compile.gif b/html/static/c-ide/compilation-compile.gif similarity index 100% rename from emacs-tutor/static/c-ide/compilation-compile.gif rename to html/static/c-ide/compilation-compile.gif diff --git a/emacs-tutor/static/c-ide/compilation-mode.gif b/html/static/c-ide/compilation-mode.gif similarity index 100% rename from emacs-tutor/static/c-ide/compilation-mode.gif rename to html/static/c-ide/compilation-mode.gif diff --git a/emacs-tutor/static/c-ide/ede-project.gif b/html/static/c-ide/ede-project.gif similarity index 100% rename from emacs-tutor/static/c-ide/ede-project.gif rename to html/static/c-ide/ede-project.gif diff --git a/emacs-tutor/static/c-ide/ede-rearrange-project-dir.gif b/html/static/c-ide/ede-rearrange-project-dir.gif similarity index 100% rename from emacs-tutor/static/c-ide/ede-rearrange-project-dir.gif rename to html/static/c-ide/ede-rearrange-project-dir.gif diff --git a/emacs-tutor/static/c-ide/ede-same-dir-completion.gif b/html/static/c-ide/ede-same-dir-completion.gif similarity index 100% rename from emacs-tutor/static/c-ide/ede-same-dir-completion.gif rename to html/static/c-ide/ede-same-dir-completion.gif diff --git a/emacs-tutor/static/c-ide/end-of-defun.gif b/html/static/c-ide/end-of-defun.gif similarity index 100% rename from emacs-tutor/static/c-ide/end-of-defun.gif rename to html/static/c-ide/end-of-defun.gif diff --git a/emacs-tutor/static/c-ide/forward-func.gif b/html/static/c-ide/forward-func.gif similarity index 100% rename from emacs-tutor/static/c-ide/forward-func.gif rename to html/static/c-ide/forward-func.gif diff --git a/emacs-tutor/static/c-ide/function-args-demo.gif b/html/static/c-ide/function-args-demo.gif similarity index 100% rename from emacs-tutor/static/c-ide/function-args-demo.gif rename to html/static/c-ide/function-args-demo.gif diff --git a/emacs-tutor/static/c-ide/function-args-jump.gif b/html/static/c-ide/function-args-jump.gif similarity index 100% rename from emacs-tutor/static/c-ide/function-args-jump.gif rename to html/static/c-ide/function-args-jump.gif diff --git a/emacs-tutor/static/c-ide/gdb-many-windows.gif b/html/static/c-ide/gdb-many-windows.gif similarity index 100% rename from emacs-tutor/static/c-ide/gdb-many-windows.gif rename to html/static/c-ide/gdb-many-windows.gif diff --git a/emacs-tutor/static/c-ide/gdb-prompt.gif b/html/static/c-ide/gdb-prompt.gif similarity index 100% rename from emacs-tutor/static/c-ide/gdb-prompt.gif rename to html/static/c-ide/gdb-prompt.gif diff --git a/emacs-tutor/static/c-ide/ggtags-definitions.png b/html/static/c-ide/ggtags-definitions.png similarity index 100% rename from emacs-tutor/static/c-ide/ggtags-definitions.png rename to html/static/c-ide/ggtags-definitions.png diff --git a/emacs-tutor/static/c-ide/gud.gif b/html/static/c-ide/gud.gif similarity index 100% rename from emacs-tutor/static/c-ide/gud.gif rename to html/static/c-ide/gud.gif diff --git a/emacs-tutor/static/c-ide/helm-files-insertion.gif b/html/static/c-ide/helm-files-insertion.gif similarity index 100% rename from emacs-tutor/static/c-ide/helm-files-insertion.gif rename to html/static/c-ide/helm-files-insertion.gif diff --git a/emacs-tutor/static/c-ide/helm-gtags-definitions.png b/html/static/c-ide/helm-gtags-definitions.png similarity index 100% rename from emacs-tutor/static/c-ide/helm-gtags-definitions.png rename to html/static/c-ide/helm-gtags-definitions.png diff --git a/emacs-tutor/static/c-ide/helm-gtags-jump-dwim.gif b/html/static/c-ide/helm-gtags-jump-dwim.gif similarity index 100% rename from emacs-tutor/static/c-ide/helm-gtags-jump-dwim.gif rename to html/static/c-ide/helm-gtags-jump-dwim.gif diff --git a/emacs-tutor/static/c-ide/helm-gtags-select.gif b/html/static/c-ide/helm-gtags-select.gif similarity index 100% rename from emacs-tutor/static/c-ide/helm-gtags-select.gif rename to html/static/c-ide/helm-gtags-select.gif diff --git a/emacs-tutor/static/c-ide/helm-semantic-or-imenu-with-struct.gif b/html/static/c-ide/helm-semantic-or-imenu-with-struct.gif similarity index 100% rename from emacs-tutor/static/c-ide/helm-semantic-or-imenu-with-struct.gif rename to html/static/c-ide/helm-semantic-or-imenu-with-struct.gif diff --git a/emacs-tutor/static/c-ide/hs-toggle-hiding.gif b/html/static/c-ide/hs-toggle-hiding.gif similarity index 100% rename from emacs-tutor/static/c-ide/hs-toggle-hiding.gif rename to html/static/c-ide/hs-toggle-hiding.gif diff --git a/emacs-tutor/static/c-ide/kill-func-body.gif b/html/static/c-ide/kill-func-body.gif similarity index 100% rename from emacs-tutor/static/c-ide/kill-func-body.gif rename to html/static/c-ide/kill-func-body.gif diff --git a/emacs-tutor/static/c-ide/mark-defun.gif b/html/static/c-ide/mark-defun.gif similarity index 100% rename from emacs-tutor/static/c-ide/mark-defun.gif rename to html/static/c-ide/mark-defun.gif diff --git a/emacs-tutor/static/c-ide/mark-func-body.gif b/html/static/c-ide/mark-func-body.gif similarity index 100% rename from emacs-tutor/static/c-ide/mark-func-body.gif rename to html/static/c-ide/mark-func-body.gif diff --git a/emacs-tutor/static/c-ide/moo-complete.png b/html/static/c-ide/moo-complete.png similarity index 100% rename from emacs-tutor/static/c-ide/moo-complete.png rename to html/static/c-ide/moo-complete.png diff --git a/emacs-tutor/static/c-ide/moo-jump-local.gif b/html/static/c-ide/moo-jump-local.gif similarity index 100% rename from emacs-tutor/static/c-ide/moo-jump-local.gif rename to html/static/c-ide/moo-jump-local.gif diff --git a/emacs-tutor/static/c-ide/projectile-find-other-file.gif b/html/static/c-ide/projectile-find-other-file.gif similarity index 100% rename from emacs-tutor/static/c-ide/projectile-find-other-file.gif rename to html/static/c-ide/projectile-find-other-file.gif diff --git a/emacs-tutor/static/c-ide/semantic-boost-demo.gif b/html/static/c-ide/semantic-boost-demo.gif similarity index 100% rename from emacs-tutor/static/c-ide/semantic-boost-demo.gif rename to html/static/c-ide/semantic-boost-demo.gif diff --git a/emacs-tutor/static/c-ide/semantic-idle-summary-lambda.gif b/html/static/c-ide/semantic-idle-summary-lambda.gif similarity index 100% rename from emacs-tutor/static/c-ide/semantic-idle-summary-lambda.gif rename to html/static/c-ide/semantic-idle-summary-lambda.gif diff --git a/emacs-tutor/static/c-ide/semantic-idle-summary-variable.gif b/html/static/c-ide/semantic-idle-summary-variable.gif similarity index 100% rename from emacs-tutor/static/c-ide/semantic-idle-summary-variable.gif rename to html/static/c-ide/semantic-idle-summary-variable.gif diff --git a/emacs-tutor/static/c-ide/semantic-parsing.gif b/html/static/c-ide/semantic-parsing.gif similarity index 100% rename from emacs-tutor/static/c-ide/semantic-parsing.gif rename to html/static/c-ide/semantic-parsing.gif diff --git a/emacs-tutor/static/c-ide/semantic-sticky-func.gif b/html/static/c-ide/semantic-sticky-func.gif similarity index 100% rename from emacs-tutor/static/c-ide/semantic-sticky-func.gif rename to html/static/c-ide/semantic-sticky-func.gif diff --git a/emacs-tutor/static/c-ide/semantic-symref.gif b/html/static/c-ide/semantic-symref.gif similarity index 100% rename from emacs-tutor/static/c-ide/semantic-symref.gif rename to html/static/c-ide/semantic-symref.gif diff --git a/emacs-tutor/static/c-ide/senator-go-to-up-reference.gif b/html/static/c-ide/senator-go-to-up-reference.gif similarity index 100% rename from emacs-tutor/static/c-ide/senator-go-to-up-reference.gif rename to html/static/c-ide/senator-go-to-up-reference.gif diff --git a/emacs-tutor/static/c-ide/senator-jump.gif b/html/static/c-ide/senator-jump.gif similarity index 100% rename from emacs-tutor/static/c-ide/senator-jump.gif rename to html/static/c-ide/senator-jump.gif diff --git a/emacs-tutor/static/c-ide/senator-kill-yank-tag.gif b/html/static/c-ide/senator-kill-yank-tag.gif similarity index 100% rename from emacs-tutor/static/c-ide/senator-kill-yank-tag.gif rename to html/static/c-ide/senator-kill-yank-tag.gif diff --git a/emacs-tutor/static/c-ide/senator-next-previous-tag.gif b/html/static/c-ide/senator-next-previous-tag.gif similarity index 100% rename from emacs-tutor/static/c-ide/senator-next-previous-tag.gif rename to html/static/c-ide/senator-next-previous-tag.gif diff --git a/emacs-tutor/static/c-ide/senator-yank-tag.gif b/html/static/c-ide/senator-yank-tag.gif similarity index 100% rename from emacs-tutor/static/c-ide/senator-yank-tag.gif rename to html/static/c-ide/senator-yank-tag.gif diff --git a/emacs-tutor/static/c-ide/sr-speedbar.gif b/html/static/c-ide/sr-speedbar.gif similarity index 100% rename from emacs-tutor/static/c-ide/sr-speedbar.gif rename to html/static/c-ide/sr-speedbar.gif diff --git a/emacs-tutor/static/c-x-3.gif b/html/static/c-x-3.gif similarity index 100% rename from emacs-tutor/static/c-x-3.gif rename to html/static/c-x-3.gif diff --git a/emacs-tutor/static/c-x-c-x.gif b/html/static/c-x-c-x.gif similarity index 100% rename from emacs-tutor/static/c-x-c-x.gif rename to html/static/c-x-c-x.gif diff --git a/emacs-tutor/static/candidates.jpg b/html/static/candidates.jpg similarity index 100% rename from emacs-tutor/static/candidates.jpg rename to html/static/candidates.jpg diff --git a/emacs-tutor/static/comment.gif b/html/static/comment.gif similarity index 100% rename from emacs-tutor/static/comment.gif rename to html/static/comment.gif diff --git a/emacs-tutor/static/dired-subdir.gif b/html/static/dired-subdir.gif similarity index 100% rename from emacs-tutor/static/dired-subdir.gif rename to html/static/dired-subdir.gif diff --git a/emacs-tutor/static/emacs-manual-toc.gif b/html/static/emacs-manual-toc.gif similarity index 100% rename from emacs-tutor/static/emacs-manual-toc.gif rename to html/static/emacs-manual-toc.gif diff --git a/emacs-tutor/static/emacs-read-pdf.gif b/html/static/emacs-read-pdf.gif similarity index 100% rename from emacs-tutor/static/emacs-read-pdf.gif rename to html/static/emacs-read-pdf.gif diff --git a/emacs-tutor/static/ffap.gif b/html/static/ffap.gif similarity index 100% rename from emacs-tutor/static/ffap.gif rename to html/static/ffap.gif diff --git a/emacs-tutor/static/find-file-ido.gif b/html/static/find-file-ido.gif similarity index 100% rename from emacs-tutor/static/find-file-ido.gif rename to html/static/find-file-ido.gif diff --git a/emacs-tutor/static/find-file-normal.gif b/html/static/find-file-normal.gif similarity index 100% rename from emacs-tutor/static/find-file-normal.gif rename to html/static/find-file-normal.gif diff --git a/emacs-tutor/static/frames-gui.gif b/html/static/frames-gui.gif similarity index 100% rename from emacs-tutor/static/frames-gui.gif rename to html/static/frames-gui.gif diff --git a/emacs-tutor/static/frames-term.gif b/html/static/frames-term.gif similarity index 100% rename from emacs-tutor/static/frames-term.gif rename to html/static/frames-term.gif diff --git a/emacs-tutor/static/func_args.jpg b/html/static/func_args.jpg similarity index 100% rename from emacs-tutor/static/func_args.jpg rename to html/static/func_args.jpg diff --git a/emacs-tutor/static/gdb-many-windows1.png b/html/static/gdb-many-windows1.png similarity index 100% rename from emacs-tutor/static/gdb-many-windows1.png rename to html/static/gdb-many-windows1.png diff --git a/emacs-tutor/static/gdb-many-windows2.png b/html/static/gdb-many-windows2.png similarity index 100% rename from emacs-tutor/static/gdb-many-windows2.png rename to html/static/gdb-many-windows2.png diff --git a/emacs-tutor/static/ggtags-create-tags.gif b/html/static/ggtags-create-tags.gif similarity index 100% rename from emacs-tutor/static/ggtags-create-tags.gif rename to html/static/ggtags-create-tags.gif diff --git a/emacs-tutor/static/ggtags-find-file-bug.gif b/html/static/ggtags-find-file-bug.gif similarity index 100% rename from emacs-tutor/static/ggtags-find-file-bug.gif rename to html/static/ggtags-find-file-bug.gif diff --git a/emacs-tutor/static/ggtags-find-file.gif b/html/static/ggtags-find-file.gif similarity index 100% rename from emacs-tutor/static/ggtags-find-file.gif rename to html/static/ggtags-find-file.gif diff --git a/emacs-tutor/static/ggtags-rerun.gif b/html/static/ggtags-rerun.gif similarity index 100% rename from emacs-tutor/static/ggtags-rerun.gif rename to html/static/ggtags-rerun.gif diff --git a/emacs-tutor/static/ggtags-view-tag-history.gif b/html/static/ggtags-view-tag-history.gif similarity index 100% rename from emacs-tutor/static/ggtags-view-tag-history.gif rename to html/static/ggtags-view-tag-history.gif diff --git a/emacs-tutor/static/gnu-global-dir-struct.jpg b/html/static/gnu-global-dir-struct.jpg similarity index 100% rename from emacs-tutor/static/gnu-global-dir-struct.jpg rename to html/static/gnu-global-dir-struct.jpg diff --git a/emacs-tutor/static/grep.gif b/html/static/grep.gif similarity index 100% rename from emacs-tutor/static/grep.gif rename to html/static/grep.gif diff --git a/emacs-tutor/static/helm-buffer-list.gif b/html/static/helm-buffer-list.gif similarity index 100% rename from emacs-tutor/static/helm-buffer-list.gif rename to html/static/helm-buffer-list.gif diff --git a/emacs-tutor/static/helm-new-file-buffer.gif b/html/static/helm-new-file-buffer.gif similarity index 100% rename from emacs-tutor/static/helm-new-file-buffer.gif rename to html/static/helm-new-file-buffer.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-1.gif b/html/static/helm-projectile/helm-projectile-1.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-1.gif rename to html/static/helm-projectile/helm-projectile-1.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif b/html/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif rename to html/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-complete-at-point.gif b/html/static/helm-projectile/helm-projectile-complete-at-point.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-complete-at-point.gif rename to html/static/helm-projectile/helm-projectile-complete-at-point.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif b/html/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif rename to html/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-etags.gif b/html/static/helm-projectile/helm-projectile-etags.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-etags.gif rename to html/static/helm-projectile/helm-projectile-etags.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-file-as-root.gif b/html/static/helm-projectile/helm-projectile-find-file-as-root.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-file-as-root.gif rename to html/static/helm-projectile/helm-projectile-find-file-as-root.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-file-copy.gif b/html/static/helm-projectile/helm-projectile-find-file-copy.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-file-copy.gif rename to html/static/helm-projectile/helm-projectile-find-file-copy.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-file-delete.gif b/html/static/helm-projectile/helm-projectile-find-file-delete.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-file-delete.gif rename to html/static/helm-projectile/helm-projectile-find-file-delete.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-file-ediff.gif b/html/static/helm-projectile/helm-projectile-find-file-ediff.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-file-ediff.gif rename to html/static/helm-projectile/helm-projectile-find-file-ediff.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-file-other-window.gif b/html/static/helm-projectile/helm-projectile-find-file-other-window.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-file-other-window.gif rename to html/static/helm-projectile/helm-projectile-find-file-other-window.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-files-1.gif b/html/static/helm-projectile/helm-projectile-find-files-1.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-files-1.gif rename to html/static/helm-projectile/helm-projectile-find-files-1.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-files-dwim-1.gif b/html/static/helm-projectile/helm-projectile-find-files-dwim-1.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-files-dwim-1.gif rename to html/static/helm-projectile/helm-projectile-find-files-dwim-1.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-find-other-file.gif b/html/static/helm-projectile/helm-projectile-find-other-file.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-find-other-file.gif rename to html/static/helm-projectile/helm-projectile-find-other-file.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-grep.gif b/html/static/helm-projectile/helm-projectile-grep.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-grep.gif rename to html/static/helm-projectile/helm-projectile-grep.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-new-virtual-dir.gif b/html/static/helm-projectile/helm-projectile-new-virtual-dir.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-new-virtual-dir.gif rename to html/static/helm-projectile/helm-projectile-new-virtual-dir.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-remove-project.gif b/html/static/helm-projectile/helm-projectile-remove-project.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-remove-project.gif rename to html/static/helm-projectile/helm-projectile-remove-project.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-rename-file.gif b/html/static/helm-projectile/helm-projectile-rename-file.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-rename-file.gif rename to html/static/helm-projectile/helm-projectile-rename-file.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-serial-rename-file.gif b/html/static/helm-projectile/helm-projectile-serial-rename-file.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-serial-rename-file.gif rename to html/static/helm-projectile/helm-projectile-serial-rename-file.gif diff --git a/emacs-tutor/static/helm-projectile/helm-projectile-switch-project.gif b/html/static/helm-projectile/helm-projectile-switch-project.gif similarity index 100% rename from emacs-tutor/static/helm-projectile/helm-projectile-switch-project.gif rename to html/static/helm-projectile/helm-projectile-switch-project.gif diff --git a/emacs-tutor/static/helm_projectile.gif b/html/static/helm_projectile.gif similarity index 100% rename from emacs-tutor/static/helm_projectile.gif rename to html/static/helm_projectile.gif diff --git a/emacs-tutor/static/ibuffer-dired-group.gif b/html/static/ibuffer-dired-group.gif similarity index 100% rename from emacs-tutor/static/ibuffer-dired-group.gif rename to html/static/ibuffer-dired-group.gif diff --git a/emacs-tutor/static/ibuffer-filter-major.gif b/html/static/ibuffer-filter-major.gif similarity index 100% rename from emacs-tutor/static/ibuffer-filter-major.gif rename to html/static/ibuffer-filter-major.gif diff --git a/emacs-tutor/static/insert_buf2_macro.gif b/html/static/insert_buf2_macro.gif similarity index 100% rename from emacs-tutor/static/insert_buf2_macro.gif rename to html/static/insert_buf2_macro.gif diff --git a/emacs-tutor/static/jump_headers.gif b/html/static/jump_headers.gif similarity index 100% rename from emacs-tutor/static/jump_headers.gif rename to html/static/jump_headers.gif diff --git a/emacs-tutor/static/linux-dir.gif b/html/static/linux-dir.gif similarity index 100% rename from emacs-tutor/static/linux-dir.gif rename to html/static/linux-dir.gif diff --git a/emacs-tutor/static/live_grep.gif b/html/static/live_grep.gif similarity index 100% rename from emacs-tutor/static/live_grep.gif rename to html/static/live_grep.gif diff --git a/emacs-tutor/static/macro.gif b/html/static/macro.gif similarity index 100% rename from emacs-tutor/static/macro.gif rename to html/static/macro.gif diff --git a/emacs-tutor/static/macro2_full.gif b/html/static/macro2_full.gif similarity index 100% rename from emacs-tutor/static/macro2_full.gif rename to html/static/macro2_full.gif diff --git a/emacs-tutor/static/magit.gif b/html/static/magit.gif similarity index 100% rename from emacs-tutor/static/magit.gif rename to html/static/magit.gif diff --git a/emacs-tutor/static/modeline.jpg b/html/static/modeline.jpg similarity index 100% rename from emacs-tutor/static/modeline.jpg rename to html/static/modeline.jpg diff --git a/emacs-tutor/static/multiple-windows.gif b/html/static/multiple-windows.gif similarity index 100% rename from emacs-tutor/static/multiple-windows.gif rename to html/static/multiple-windows.gif diff --git a/emacs-tutor/static/occur-edit.gif b/html/static/occur-edit.gif similarity index 100% rename from emacs-tutor/static/occur-edit.gif rename to html/static/occur-edit.gif diff --git a/emacs-tutor/static/occur.gif b/html/static/occur.gif similarity index 100% rename from emacs-tutor/static/occur.gif rename to html/static/occur.gif diff --git a/emacs-tutor/static/part3/backward-sexp.gif b/html/static/part3/backward-sexp.gif similarity index 100% rename from emacs-tutor/static/part3/backward-sexp.gif rename to html/static/part3/backward-sexp.gif diff --git a/emacs-tutor/static/part3/customize.jpg b/html/static/part3/customize.jpg similarity index 100% rename from emacs-tutor/static/part3/customize.jpg rename to html/static/part3/customize.jpg diff --git a/emacs-tutor/static/part3/diff-hl-buffer.png b/html/static/part3/diff-hl-buffer.png similarity index 100% rename from emacs-tutor/static/part3/diff-hl-buffer.png rename to html/static/part3/diff-hl-buffer.png diff --git a/emacs-tutor/static/part3/diff-hl-dired.png b/html/static/part3/diff-hl-dired.png similarity index 100% rename from emacs-tutor/static/part3/diff-hl-dired.png rename to html/static/part3/diff-hl-dired.png diff --git a/emacs-tutor/static/part3/diff-hl-margin.png b/html/static/part3/diff-hl-margin.png similarity index 100% rename from emacs-tutor/static/part3/diff-hl-margin.png rename to html/static/part3/diff-hl-margin.png diff --git a/emacs-tutor/static/part3/dired-plus.jpg b/html/static/part3/dired-plus.jpg similarity index 100% rename from emacs-tutor/static/part3/dired-plus.jpg rename to html/static/part3/dired-plus.jpg diff --git a/emacs-tutor/static/part3/discover-my-major.png b/html/static/part3/discover-my-major.png similarity index 100% rename from emacs-tutor/static/part3/discover-my-major.png rename to html/static/part3/discover-my-major.png diff --git a/emacs-tutor/static/part3/forward-sexp.gif b/html/static/part3/forward-sexp.gif similarity index 100% rename from emacs-tutor/static/part3/forward-sexp.gif rename to html/static/part3/forward-sexp.gif diff --git a/emacs-tutor/static/part3/golden-ratio.gif b/html/static/part3/golden-ratio.gif similarity index 100% rename from emacs-tutor/static/part3/golden-ratio.gif rename to html/static/part3/golden-ratio.gif diff --git a/emacs-tutor/static/part3/helm-all-mark-rings.gif b/html/static/part3/helm-all-mark-rings.gif similarity index 100% rename from emacs-tutor/static/part3/helm-all-mark-rings.gif rename to html/static/part3/helm-all-mark-rings.gif diff --git a/emacs-tutor/static/part3/helm-autoresize-fix.gif b/html/static/part3/helm-autoresize-fix.gif similarity index 100% rename from emacs-tutor/static/part3/helm-autoresize-fix.gif rename to html/static/part3/helm-autoresize-fix.gif diff --git a/emacs-tutor/static/part3/helm-autoresize-mode.gif b/html/static/part3/helm-autoresize-mode.gif similarity index 100% rename from emacs-tutor/static/part3/helm-autoresize-mode.gif rename to html/static/part3/helm-autoresize-mode.gif diff --git a/emacs-tutor/static/part3/helm-calc.gif b/html/static/part3/helm-calc.gif similarity index 100% rename from emacs-tutor/static/part3/helm-calc.gif rename to html/static/part3/helm-calc.gif diff --git a/emacs-tutor/static/part3/helm-color.gif b/html/static/part3/helm-color.gif similarity index 100% rename from emacs-tutor/static/part3/helm-color.gif rename to html/static/part3/helm-color.gif diff --git a/emacs-tutor/static/part3/helm-eshell-history.gif b/html/static/part3/helm-eshell-history.gif similarity index 100% rename from emacs-tutor/static/part3/helm-eshell-history.gif rename to html/static/part3/helm-eshell-history.gif diff --git a/emacs-tutor/static/part3/helm-eval-expression.gif b/html/static/part3/helm-eval-expression.gif similarity index 100% rename from emacs-tutor/static/part3/helm-eval-expression.gif rename to html/static/part3/helm-eval-expression.gif diff --git a/emacs-tutor/static/part3/helm-find-files.gif b/html/static/part3/helm-find-files.gif similarity index 100% rename from emacs-tutor/static/part3/helm-find-files.gif rename to html/static/part3/helm-find-files.gif diff --git a/emacs-tutor/static/part3/helm-find.gif b/html/static/part3/helm-find.gif similarity index 100% rename from emacs-tutor/static/part3/helm-find.gif rename to html/static/part3/helm-find.gif diff --git a/emacs-tutor/static/part3/helm-google-suggest.gif b/html/static/part3/helm-google-suggest.gif similarity index 100% rename from emacs-tutor/static/part3/helm-google-suggest.gif rename to html/static/part3/helm-google-suggest.gif diff --git a/emacs-tutor/static/part3/helm-kill-ring.gif b/html/static/part3/helm-kill-ring.gif similarity index 100% rename from emacs-tutor/static/part3/helm-kill-ring.gif rename to html/static/part3/helm-kill-ring.gif diff --git a/emacs-tutor/static/part3/helm-locate.gif b/html/static/part3/helm-locate.gif similarity index 100% rename from emacs-tutor/static/part3/helm-locate.gif rename to html/static/part3/helm-locate.gif diff --git a/emacs-tutor/static/part3/helm-m-x.gif b/html/static/part3/helm-m-x.gif similarity index 100% rename from emacs-tutor/static/part3/helm-m-x.gif rename to html/static/part3/helm-m-x.gif diff --git a/emacs-tutor/static/part3/helm-man-woman.gif b/html/static/part3/helm-man-woman.gif similarity index 100% rename from emacs-tutor/static/part3/helm-man-woman.gif rename to html/static/part3/helm-man-woman.gif diff --git a/emacs-tutor/static/part3/helm-mini.gif b/html/static/part3/helm-mini.gif similarity index 100% rename from emacs-tutor/static/part3/helm-mini.gif rename to html/static/part3/helm-mini.gif diff --git a/emacs-tutor/static/part3/helm-occur.gif b/html/static/part3/helm-occur.gif similarity index 100% rename from emacs-tutor/static/part3/helm-occur.gif rename to html/static/part3/helm-occur.gif diff --git a/emacs-tutor/static/part3/helm-regexp.gif b/html/static/part3/helm-regexp.gif similarity index 100% rename from emacs-tutor/static/part3/helm-regexp.gif rename to html/static/part3/helm-regexp.gif diff --git a/emacs-tutor/static/part3/helm-registers.gif b/html/static/part3/helm-registers.gif similarity index 100% rename from emacs-tutor/static/part3/helm-registers.gif rename to html/static/part3/helm-registers.gif diff --git a/emacs-tutor/static/part3/helm-semantic-or-imenu-2.gif b/html/static/part3/helm-semantic-or-imenu-2.gif similarity index 100% rename from emacs-tutor/static/part3/helm-semantic-or-imenu-2.gif rename to html/static/part3/helm-semantic-or-imenu-2.gif diff --git a/emacs-tutor/static/part3/helm-semantic-or-imenu.gif b/html/static/part3/helm-semantic-or-imenu.gif similarity index 100% rename from emacs-tutor/static/part3/helm-semantic-or-imenu.gif rename to html/static/part3/helm-semantic-or-imenu.gif diff --git a/emacs-tutor/static/part3/helm-surfraw.gif b/html/static/part3/helm-surfraw.gif similarity index 100% rename from emacs-tutor/static/part3/helm-surfraw.gif rename to html/static/part3/helm-surfraw.gif diff --git a/emacs-tutor/static/part3/helm-top.gif b/html/static/part3/helm-top.gif similarity index 100% rename from emacs-tutor/static/part3/helm-top.gif rename to html/static/part3/helm-top.gif diff --git a/emacs-tutor/static/part3/ibuffer-vc.png b/html/static/part3/ibuffer-vc.png similarity index 100% rename from emacs-tutor/static/part3/ibuffer-vc.png rename to html/static/part3/ibuffer-vc.png diff --git a/emacs-tutor/static/part3/kill-sexp.gif b/html/static/part3/kill-sexp.gif similarity index 100% rename from emacs-tutor/static/part3/kill-sexp.gif rename to html/static/part3/kill-sexp.gif diff --git a/emacs-tutor/static/part3/mark-sexp.gif b/html/static/part3/mark-sexp.gif similarity index 100% rename from emacs-tutor/static/part3/mark-sexp.gif rename to html/static/part3/mark-sexp.gif diff --git a/emacs-tutor/static/part3/nyan-mode.png b/html/static/part3/nyan-mode.png similarity index 100% rename from emacs-tutor/static/part3/nyan-mode.png rename to html/static/part3/nyan-mode.png diff --git a/emacs-tutor/static/part3/projectile.png b/html/static/part3/projectile.png similarity index 100% rename from emacs-tutor/static/part3/projectile.png rename to html/static/part3/projectile.png diff --git a/emacs-tutor/static/part3/rainbow-mode.png b/html/static/part3/rainbow-mode.png similarity index 100% rename from emacs-tutor/static/part3/rainbow-mode.png rename to html/static/part3/rainbow-mode.png diff --git a/emacs-tutor/static/part3/smex.png b/html/static/part3/smex.png similarity index 100% rename from emacs-tutor/static/part3/smex.png rename to html/static/part3/smex.png diff --git a/emacs-tutor/static/part3/transpose-sexp.gif b/html/static/part3/transpose-sexp.gif similarity index 100% rename from emacs-tutor/static/part3/transpose-sexp.gif rename to html/static/part3/transpose-sexp.gif diff --git a/emacs-tutor/static/part3/undo-tree.jpg b/html/static/part3/undo-tree.jpg similarity index 100% rename from emacs-tutor/static/part3/undo-tree.jpg rename to html/static/part3/undo-tree.jpg diff --git a/emacs-tutor/static/part3/ztree-diff.png b/html/static/part3/ztree-diff.png similarity index 100% rename from emacs-tutor/static/part3/ztree-diff.png rename to html/static/part3/ztree-diff.png diff --git a/emacs-tutor/static/part3/ztree-dir.png b/html/static/part3/ztree-dir.png similarity index 100% rename from emacs-tutor/static/part3/ztree-dir.png rename to html/static/part3/ztree-dir.png diff --git a/emacs-tutor/static/path-variable-windows.jpg b/html/static/path-variable-windows.jpg similarity index 100% rename from emacs-tutor/static/path-variable-windows.jpg rename to html/static/path-variable-windows.jpg diff --git a/emacs-tutor/static/performance.gif b/html/static/performance.gif similarity index 100% rename from emacs-tutor/static/performance.gif rename to html/static/performance.gif diff --git a/emacs-tutor/static/prepare_macro.gif b/html/static/prepare_macro.gif similarity index 100% rename from emacs-tutor/static/prepare_macro.gif rename to html/static/prepare_macro.gif diff --git a/emacs-tutor/static/proglang/aggressive-indent.gif b/html/static/proglang/aggressive-indent.gif similarity index 100% rename from emacs-tutor/static/proglang/aggressive-indent.gif rename to html/static/proglang/aggressive-indent.gif diff --git a/emacs-tutor/static/proglang/emacs_home.png b/html/static/proglang/emacs_home.png similarity index 100% rename from emacs-tutor/static/proglang/emacs_home.png rename to html/static/proglang/emacs_home.png diff --git a/emacs-tutor/static/proglang/emacs_path.png b/html/static/proglang/emacs_path.png similarity index 100% rename from emacs-tutor/static/proglang/emacs_path.png rename to html/static/proglang/emacs_path.png diff --git a/emacs-tutor/static/proglang/forward-backward-parens.gif b/html/static/proglang/forward-backward-parens.gif similarity index 100% rename from emacs-tutor/static/proglang/forward-backward-parens.gif rename to html/static/proglang/forward-backward-parens.gif diff --git a/emacs-tutor/static/proglang/geiser-demo.gif b/html/static/proglang/geiser-demo.gif similarity index 100% rename from emacs-tutor/static/proglang/geiser-demo.gif rename to html/static/proglang/geiser-demo.gif diff --git a/emacs-tutor/static/proglang/monokai.png b/html/static/proglang/monokai.png similarity index 100% rename from emacs-tutor/static/proglang/monokai.png rename to html/static/proglang/monokai.png diff --git a/emacs-tutor/static/proglang/repl-autodoc.png b/html/static/proglang/repl-autodoc.png similarity index 100% rename from emacs-tutor/static/proglang/repl-autodoc.png rename to html/static/proglang/repl-autodoc.png diff --git a/emacs-tutor/static/proglang/repl-mod.png b/html/static/proglang/repl-mod.png similarity index 100% rename from emacs-tutor/static/proglang/repl-mod.png rename to html/static/proglang/repl-mod.png diff --git a/emacs-tutor/static/proglang/sml-completion.gif b/html/static/proglang/sml-completion.gif similarity index 100% rename from emacs-tutor/static/proglang/sml-completion.gif rename to html/static/proglang/sml-completion.gif diff --git a/emacs-tutor/static/proglang/sml-helm-imenu.gif b/html/static/proglang/sml-helm-imenu.gif similarity index 100% rename from emacs-tutor/static/proglang/sml-helm-imenu.gif rename to html/static/proglang/sml-helm-imenu.gif diff --git a/emacs-tutor/static/proglang/sml-send-buffer.gif b/html/static/proglang/sml-send-buffer.gif similarity index 100% rename from emacs-tutor/static/proglang/sml-send-buffer.gif rename to html/static/proglang/sml-send-buffer.gif diff --git a/emacs-tutor/static/proglang/sml-send-region.gif b/html/static/proglang/sml-send-region.gif similarity index 100% rename from emacs-tutor/static/proglang/sml-send-region.gif rename to html/static/proglang/sml-send-region.gif diff --git a/emacs-tutor/static/proglang/sml-start-proc.gif b/html/static/proglang/sml-start-proc.gif similarity index 100% rename from emacs-tutor/static/proglang/sml-start-proc.gif rename to html/static/proglang/sml-start-proc.gif diff --git a/emacs-tutor/static/proglang/zenburn.png b/html/static/proglang/zenburn.png similarity index 100% rename from emacs-tutor/static/proglang/zenburn.png rename to html/static/proglang/zenburn.png diff --git a/emacs-tutor/static/reg_a.gif b/html/static/reg_a.gif similarity index 100% rename from emacs-tutor/static/reg_a.gif rename to html/static/reg_a.gif diff --git a/emacs-tutor/static/reg_b.gif b/html/static/reg_b.gif similarity index 100% rename from emacs-tutor/static/reg_b.gif rename to html/static/reg_b.gif diff --git a/emacs-tutor/static/reg_c.gif b/html/static/reg_c.gif similarity index 100% rename from emacs-tutor/static/reg_c.gif rename to html/static/reg_c.gif diff --git a/emacs-tutor/static/reg_d.gif b/html/static/reg_d.gif similarity index 100% rename from emacs-tutor/static/reg_d.gif rename to html/static/reg_d.gif diff --git a/emacs-tutor/static/register-windows.gif b/html/static/register-windows.gif similarity index 100% rename from emacs-tutor/static/register-windows.gif rename to html/static/register-windows.gif diff --git a/static/setup-emacs-windows/cygwin_example_install.png b/html/static/setup-emacs-windows/cygwin_example_install.png similarity index 100% rename from static/setup-emacs-windows/cygwin_example_install.png rename to html/static/setup-emacs-windows/cygwin_example_install.png diff --git a/emacs-tutor/static/setup-emacs-windows/emacs_xwidgets_windows.png b/html/static/setup-emacs-windows/emacs_xwidgets_windows.png similarity index 100% rename from emacs-tutor/static/setup-emacs-windows/emacs_xwidgets_windows.png rename to html/static/setup-emacs-windows/emacs_xwidgets_windows.png diff --git a/emacs-tutor/static/setup-emacs-windows/pdf_tools_windows_latex.gif b/html/static/setup-emacs-windows/pdf_tools_windows_latex.gif similarity index 100% rename from emacs-tutor/static/setup-emacs-windows/pdf_tools_windows_latex.gif rename to html/static/setup-emacs-windows/pdf_tools_windows_latex.gif diff --git a/emacs-tutor/static/setup-emacs-windows/xserver_example.png b/html/static/setup-emacs-windows/xserver_example.png similarity index 100% rename from emacs-tutor/static/setup-emacs-windows/xserver_example.png rename to html/static/setup-emacs-windows/xserver_example.png diff --git a/emacs-tutor/static/vc-diff.jpg b/html/static/vc-diff.jpg similarity index 100% rename from emacs-tutor/static/vc-diff.jpg rename to html/static/vc-diff.jpg diff --git a/emacs-tutor/static/worg.css b/html/static/worg.css similarity index 100% rename from emacs-tutor/static/worg.css rename to html/static/worg.css diff --git a/emacs-tutor/c-ide-irony_bak.org b/org/c-ide-irony_bak.org similarity index 100% rename from emacs-tutor/c-ide-irony_bak.org rename to org/c-ide-irony_bak.org diff --git a/emacs-tutor/c-ide.org b/org/c-ide.org similarity index 100% rename from emacs-tutor/c-ide.org rename to org/c-ide.org diff --git a/emacs-tutor/cedet.org b/org/cedet.org similarity index 100% rename from emacs-tutor/cedet.org rename to org/cedet.org diff --git a/emacs-tutor/ebrowse.org b/org/ebrowse.org similarity index 100% rename from emacs-tutor/ebrowse.org rename to org/ebrowse.org diff --git a/emacs-tutor/emacs-for-proglang.org b/org/emacs-for-proglang.org similarity index 100% rename from emacs-tutor/emacs-for-proglang.org rename to org/emacs-for-proglang.org diff --git a/emacs-tutor/emacs-tutor.org b/org/emacs-tutor.org similarity index 100% rename from emacs-tutor/emacs-tutor.org rename to org/emacs-tutor.org diff --git a/emacs-tutor/emacs-tutor2.org b/org/emacs-tutor2.org similarity index 100% rename from emacs-tutor/emacs-tutor2.org rename to org/emacs-tutor2.org diff --git a/emacs-tutor/emacs-tutor3.org b/org/emacs-tutor3.org similarity index 100% rename from emacs-tutor/emacs-tutor3.org rename to org/emacs-tutor3.org diff --git a/emacs-tutor/helm-intro.org b/org/helm-intro.org similarity index 100% rename from emacs-tutor/helm-intro.org rename to org/helm-intro.org diff --git a/emacs-tutor/helm-projectile.org b/org/helm-projectile.org similarity index 100% rename from emacs-tutor/helm-projectile.org rename to org/helm-projectile.org diff --git a/emacs-tutor/index.org b/org/index.org similarity index 100% rename from emacs-tutor/index.org rename to org/index.org diff --git a/emacs-tutor/planet.css b/org/planet.css similarity index 100% rename from emacs-tutor/planet.css rename to org/planet.css diff --git a/emacs-tutor/publish.el b/org/publish.el similarity index 100% rename from emacs-tutor/publish.el rename to org/publish.el diff --git a/emacs-tutor/setup-emacs-windows.org b/org/setup-emacs-windows.org similarity index 100% rename from emacs-tutor/setup-emacs-windows.org rename to org/setup-emacs-windows.org diff --git a/static/auto_complete.gif b/org/static/auto_complete.gif similarity index 100% rename from static/auto_complete.gif rename to org/static/auto_complete.gif diff --git a/static/c-ide/backward-func.gif b/org/static/c-ide/backward-func.gif similarity index 100% rename from static/c-ide/backward-func.gif rename to org/static/c-ide/backward-func.gif diff --git a/static/c-ide/beginning-of-defun.gif b/org/static/c-ide/beginning-of-defun.gif similarity index 100% rename from static/c-ide/beginning-of-defun.gif rename to org/static/c-ide/beginning-of-defun.gif diff --git a/static/c-ide/company-c-header.png b/org/static/c-ide/company-c-header.png similarity index 100% rename from static/c-ide/company-c-header.png rename to org/static/c-ide/company-c-header.png diff --git a/static/c-ide/company-clang-company-gtags.gif b/org/static/c-ide/company-clang-company-gtags.gif similarity index 100% rename from static/c-ide/company-clang-company-gtags.gif rename to org/static/c-ide/company-clang-company-gtags.gif diff --git a/static/c-ide/company-clang-project-completion.gif b/org/static/c-ide/company-clang-project-completion.gif similarity index 100% rename from static/c-ide/company-clang-project-completion.gif rename to org/static/c-ide/company-clang-project-completion.gif diff --git a/static/c-ide/compilation-compile.gif b/org/static/c-ide/compilation-compile.gif similarity index 100% rename from static/c-ide/compilation-compile.gif rename to org/static/c-ide/compilation-compile.gif diff --git a/static/c-ide/compilation-mode.gif b/org/static/c-ide/compilation-mode.gif similarity index 100% rename from static/c-ide/compilation-mode.gif rename to org/static/c-ide/compilation-mode.gif diff --git a/static/c-ide/ede-project.gif b/org/static/c-ide/ede-project.gif similarity index 100% rename from static/c-ide/ede-project.gif rename to org/static/c-ide/ede-project.gif diff --git a/static/c-ide/ede-rearrange-project-dir.gif b/org/static/c-ide/ede-rearrange-project-dir.gif similarity index 100% rename from static/c-ide/ede-rearrange-project-dir.gif rename to org/static/c-ide/ede-rearrange-project-dir.gif diff --git a/static/c-ide/ede-same-dir-completion.gif b/org/static/c-ide/ede-same-dir-completion.gif similarity index 100% rename from static/c-ide/ede-same-dir-completion.gif rename to org/static/c-ide/ede-same-dir-completion.gif diff --git a/static/c-ide/end-of-defun.gif b/org/static/c-ide/end-of-defun.gif similarity index 100% rename from static/c-ide/end-of-defun.gif rename to org/static/c-ide/end-of-defun.gif diff --git a/emacs-tutor/static/c-ide/fa-show b/org/static/c-ide/fa-show similarity index 100% rename from emacs-tutor/static/c-ide/fa-show rename to org/static/c-ide/fa-show diff --git a/static/c-ide/forward-func.gif b/org/static/c-ide/forward-func.gif similarity index 100% rename from static/c-ide/forward-func.gif rename to org/static/c-ide/forward-func.gif diff --git a/static/c-ide/function-args-demo.gif b/org/static/c-ide/function-args-demo.gif similarity index 100% rename from static/c-ide/function-args-demo.gif rename to org/static/c-ide/function-args-demo.gif diff --git a/static/c-ide/function-args-jump.gif b/org/static/c-ide/function-args-jump.gif similarity index 100% rename from static/c-ide/function-args-jump.gif rename to org/static/c-ide/function-args-jump.gif diff --git a/static/c-ide/gdb-many-windows.gif b/org/static/c-ide/gdb-many-windows.gif similarity index 100% rename from static/c-ide/gdb-many-windows.gif rename to org/static/c-ide/gdb-many-windows.gif diff --git a/static/c-ide/gdb-prompt.gif b/org/static/c-ide/gdb-prompt.gif similarity index 100% rename from static/c-ide/gdb-prompt.gif rename to org/static/c-ide/gdb-prompt.gif diff --git a/static/c-ide/ggtags-definitions.png b/org/static/c-ide/ggtags-definitions.png similarity index 100% rename from static/c-ide/ggtags-definitions.png rename to org/static/c-ide/ggtags-definitions.png diff --git a/static/c-ide/gud.gif b/org/static/c-ide/gud.gif similarity index 100% rename from static/c-ide/gud.gif rename to org/static/c-ide/gud.gif diff --git a/static/c-ide/helm-files-insertion.gif b/org/static/c-ide/helm-files-insertion.gif similarity index 100% rename from static/c-ide/helm-files-insertion.gif rename to org/static/c-ide/helm-files-insertion.gif diff --git a/static/c-ide/helm-gtags-definitions.png b/org/static/c-ide/helm-gtags-definitions.png similarity index 100% rename from static/c-ide/helm-gtags-definitions.png rename to org/static/c-ide/helm-gtags-definitions.png diff --git a/static/c-ide/helm-gtags-jump-dwim.gif b/org/static/c-ide/helm-gtags-jump-dwim.gif similarity index 100% rename from static/c-ide/helm-gtags-jump-dwim.gif rename to org/static/c-ide/helm-gtags-jump-dwim.gif diff --git a/static/c-ide/helm-gtags-select.gif b/org/static/c-ide/helm-gtags-select.gif similarity index 100% rename from static/c-ide/helm-gtags-select.gif rename to org/static/c-ide/helm-gtags-select.gif diff --git a/static/c-ide/helm-semantic-or-imenu-with-struct.gif b/org/static/c-ide/helm-semantic-or-imenu-with-struct.gif similarity index 100% rename from static/c-ide/helm-semantic-or-imenu-with-struct.gif rename to org/static/c-ide/helm-semantic-or-imenu-with-struct.gif diff --git a/static/c-ide/hs-toggle-hiding.gif b/org/static/c-ide/hs-toggle-hiding.gif similarity index 100% rename from static/c-ide/hs-toggle-hiding.gif rename to org/static/c-ide/hs-toggle-hiding.gif diff --git a/static/c-ide/kill-func-body.gif b/org/static/c-ide/kill-func-body.gif similarity index 100% rename from static/c-ide/kill-func-body.gif rename to org/static/c-ide/kill-func-body.gif diff --git a/static/c-ide/mark-defun.gif b/org/static/c-ide/mark-defun.gif similarity index 100% rename from static/c-ide/mark-defun.gif rename to org/static/c-ide/mark-defun.gif diff --git a/static/c-ide/mark-func-body.gif b/org/static/c-ide/mark-func-body.gif similarity index 100% rename from static/c-ide/mark-func-body.gif rename to org/static/c-ide/mark-func-body.gif diff --git a/static/c-ide/moo-complete.png b/org/static/c-ide/moo-complete.png similarity index 100% rename from static/c-ide/moo-complete.png rename to org/static/c-ide/moo-complete.png diff --git a/static/c-ide/moo-jump-local.gif b/org/static/c-ide/moo-jump-local.gif similarity index 100% rename from static/c-ide/moo-jump-local.gif rename to org/static/c-ide/moo-jump-local.gif diff --git a/static/c-ide/projectile-find-other-file.gif b/org/static/c-ide/projectile-find-other-file.gif similarity index 100% rename from static/c-ide/projectile-find-other-file.gif rename to org/static/c-ide/projectile-find-other-file.gif diff --git a/static/c-ide/semantic-boost-demo.gif b/org/static/c-ide/semantic-boost-demo.gif similarity index 100% rename from static/c-ide/semantic-boost-demo.gif rename to org/static/c-ide/semantic-boost-demo.gif diff --git a/static/c-ide/semantic-idle-summary-lambda.gif b/org/static/c-ide/semantic-idle-summary-lambda.gif similarity index 100% rename from static/c-ide/semantic-idle-summary-lambda.gif rename to org/static/c-ide/semantic-idle-summary-lambda.gif diff --git a/static/c-ide/semantic-idle-summary-variable.gif b/org/static/c-ide/semantic-idle-summary-variable.gif similarity index 100% rename from static/c-ide/semantic-idle-summary-variable.gif rename to org/static/c-ide/semantic-idle-summary-variable.gif diff --git a/static/c-ide/semantic-parsing.gif b/org/static/c-ide/semantic-parsing.gif similarity index 100% rename from static/c-ide/semantic-parsing.gif rename to org/static/c-ide/semantic-parsing.gif diff --git a/static/c-ide/semantic-sticky-func.gif b/org/static/c-ide/semantic-sticky-func.gif similarity index 100% rename from static/c-ide/semantic-sticky-func.gif rename to org/static/c-ide/semantic-sticky-func.gif diff --git a/static/c-ide/semantic-symref.gif b/org/static/c-ide/semantic-symref.gif similarity index 100% rename from static/c-ide/semantic-symref.gif rename to org/static/c-ide/semantic-symref.gif diff --git a/static/c-ide/senator-go-to-up-reference.gif b/org/static/c-ide/senator-go-to-up-reference.gif similarity index 100% rename from static/c-ide/senator-go-to-up-reference.gif rename to org/static/c-ide/senator-go-to-up-reference.gif diff --git a/static/c-ide/senator-jump.gif b/org/static/c-ide/senator-jump.gif similarity index 100% rename from static/c-ide/senator-jump.gif rename to org/static/c-ide/senator-jump.gif diff --git a/static/c-ide/senator-kill-yank-tag.gif b/org/static/c-ide/senator-kill-yank-tag.gif similarity index 100% rename from static/c-ide/senator-kill-yank-tag.gif rename to org/static/c-ide/senator-kill-yank-tag.gif diff --git a/static/c-ide/senator-next-previous-tag.gif b/org/static/c-ide/senator-next-previous-tag.gif similarity index 100% rename from static/c-ide/senator-next-previous-tag.gif rename to org/static/c-ide/senator-next-previous-tag.gif diff --git a/static/c-ide/senator-yank-tag.gif b/org/static/c-ide/senator-yank-tag.gif similarity index 100% rename from static/c-ide/senator-yank-tag.gif rename to org/static/c-ide/senator-yank-tag.gif diff --git a/static/c-ide/sr-speedbar.gif b/org/static/c-ide/sr-speedbar.gif similarity index 100% rename from static/c-ide/sr-speedbar.gif rename to org/static/c-ide/sr-speedbar.gif diff --git a/static/c-x-3.gif b/org/static/c-x-3.gif similarity index 100% rename from static/c-x-3.gif rename to org/static/c-x-3.gif diff --git a/static/c-x-c-x.gif b/org/static/c-x-c-x.gif similarity index 100% rename from static/c-x-c-x.gif rename to org/static/c-x-c-x.gif diff --git a/static/candidates.jpg b/org/static/candidates.jpg similarity index 100% rename from static/candidates.jpg rename to org/static/candidates.jpg diff --git a/static/comment.gif b/org/static/comment.gif similarity index 100% rename from static/comment.gif rename to org/static/comment.gif diff --git a/static/dired-subdir.gif b/org/static/dired-subdir.gif similarity index 100% rename from static/dired-subdir.gif rename to org/static/dired-subdir.gif diff --git a/static/emacs-manual-toc.gif b/org/static/emacs-manual-toc.gif similarity index 100% rename from static/emacs-manual-toc.gif rename to org/static/emacs-manual-toc.gif diff --git a/static/emacs-read-pdf.gif b/org/static/emacs-read-pdf.gif similarity index 100% rename from static/emacs-read-pdf.gif rename to org/static/emacs-read-pdf.gif diff --git a/static/ffap.gif b/org/static/ffap.gif similarity index 100% rename from static/ffap.gif rename to org/static/ffap.gif diff --git a/static/find-file-ido.gif b/org/static/find-file-ido.gif similarity index 100% rename from static/find-file-ido.gif rename to org/static/find-file-ido.gif diff --git a/static/find-file-normal.gif b/org/static/find-file-normal.gif similarity index 100% rename from static/find-file-normal.gif rename to org/static/find-file-normal.gif diff --git a/static/frames-gui.gif b/org/static/frames-gui.gif similarity index 100% rename from static/frames-gui.gif rename to org/static/frames-gui.gif diff --git a/static/frames-term.gif b/org/static/frames-term.gif similarity index 100% rename from static/frames-term.gif rename to org/static/frames-term.gif diff --git a/static/func_args.jpg b/org/static/func_args.jpg similarity index 100% rename from static/func_args.jpg rename to org/static/func_args.jpg diff --git a/static/gdb-many-windows1.png b/org/static/gdb-many-windows1.png similarity index 100% rename from static/gdb-many-windows1.png rename to org/static/gdb-many-windows1.png diff --git a/static/gdb-many-windows2.png b/org/static/gdb-many-windows2.png similarity index 100% rename from static/gdb-many-windows2.png rename to org/static/gdb-many-windows2.png diff --git a/static/ggtags-create-tags.gif b/org/static/ggtags-create-tags.gif similarity index 100% rename from static/ggtags-create-tags.gif rename to org/static/ggtags-create-tags.gif diff --git a/static/ggtags-find-file-bug.gif b/org/static/ggtags-find-file-bug.gif similarity index 100% rename from static/ggtags-find-file-bug.gif rename to org/static/ggtags-find-file-bug.gif diff --git a/static/ggtags-find-file.gif b/org/static/ggtags-find-file.gif similarity index 100% rename from static/ggtags-find-file.gif rename to org/static/ggtags-find-file.gif diff --git a/static/ggtags-rerun.gif b/org/static/ggtags-rerun.gif similarity index 100% rename from static/ggtags-rerun.gif rename to org/static/ggtags-rerun.gif diff --git a/static/ggtags-view-tag-history.gif b/org/static/ggtags-view-tag-history.gif similarity index 100% rename from static/ggtags-view-tag-history.gif rename to org/static/ggtags-view-tag-history.gif diff --git a/static/gnu-global-dir-struct.jpg b/org/static/gnu-global-dir-struct.jpg similarity index 100% rename from static/gnu-global-dir-struct.jpg rename to org/static/gnu-global-dir-struct.jpg diff --git a/static/grep.gif b/org/static/grep.gif similarity index 100% rename from static/grep.gif rename to org/static/grep.gif diff --git a/static/helm-buffer-list.gif b/org/static/helm-buffer-list.gif similarity index 100% rename from static/helm-buffer-list.gif rename to org/static/helm-buffer-list.gif diff --git a/static/helm-new-file-buffer.gif b/org/static/helm-new-file-buffer.gif similarity index 100% rename from static/helm-new-file-buffer.gif rename to org/static/helm-new-file-buffer.gif diff --git a/static/helm-projectile/helm-projectile-1.gif b/org/static/helm-projectile/helm-projectile-1.gif similarity index 100% rename from static/helm-projectile/helm-projectile-1.gif rename to org/static/helm-projectile/helm-projectile-1.gif diff --git a/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif b/org/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif similarity index 100% rename from static/helm-projectile/helm-projectile-add-files-virtual-dir.gif rename to org/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif diff --git a/static/helm-projectile/helm-projectile-complete-at-point.gif b/org/static/helm-projectile/helm-projectile-complete-at-point.gif similarity index 100% rename from static/helm-projectile/helm-projectile-complete-at-point.gif rename to org/static/helm-projectile/helm-projectile-complete-at-point.gif diff --git a/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif b/org/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif similarity index 100% rename from static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif rename to org/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif diff --git a/static/helm-projectile/helm-projectile-etags.gif b/org/static/helm-projectile/helm-projectile-etags.gif similarity index 100% rename from static/helm-projectile/helm-projectile-etags.gif rename to org/static/helm-projectile/helm-projectile-etags.gif diff --git a/static/helm-projectile/helm-projectile-find-file-as-root.gif b/org/static/helm-projectile/helm-projectile-find-file-as-root.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-file-as-root.gif rename to org/static/helm-projectile/helm-projectile-find-file-as-root.gif diff --git a/static/helm-projectile/helm-projectile-find-file-copy.gif b/org/static/helm-projectile/helm-projectile-find-file-copy.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-file-copy.gif rename to org/static/helm-projectile/helm-projectile-find-file-copy.gif diff --git a/static/helm-projectile/helm-projectile-find-file-delete.gif b/org/static/helm-projectile/helm-projectile-find-file-delete.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-file-delete.gif rename to org/static/helm-projectile/helm-projectile-find-file-delete.gif diff --git a/static/helm-projectile/helm-projectile-find-file-ediff.gif b/org/static/helm-projectile/helm-projectile-find-file-ediff.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-file-ediff.gif rename to org/static/helm-projectile/helm-projectile-find-file-ediff.gif diff --git a/static/helm-projectile/helm-projectile-find-file-other-window.gif b/org/static/helm-projectile/helm-projectile-find-file-other-window.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-file-other-window.gif rename to org/static/helm-projectile/helm-projectile-find-file-other-window.gif diff --git a/static/helm-projectile/helm-projectile-find-files-1.gif b/org/static/helm-projectile/helm-projectile-find-files-1.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-files-1.gif rename to org/static/helm-projectile/helm-projectile-find-files-1.gif diff --git a/static/helm-projectile/helm-projectile-find-files-dwim-1.gif b/org/static/helm-projectile/helm-projectile-find-files-dwim-1.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-files-dwim-1.gif rename to org/static/helm-projectile/helm-projectile-find-files-dwim-1.gif diff --git a/static/helm-projectile/helm-projectile-find-other-file.gif b/org/static/helm-projectile/helm-projectile-find-other-file.gif similarity index 100% rename from static/helm-projectile/helm-projectile-find-other-file.gif rename to org/static/helm-projectile/helm-projectile-find-other-file.gif diff --git a/static/helm-projectile/helm-projectile-grep.gif b/org/static/helm-projectile/helm-projectile-grep.gif similarity index 100% rename from static/helm-projectile/helm-projectile-grep.gif rename to org/static/helm-projectile/helm-projectile-grep.gif diff --git a/static/helm-projectile/helm-projectile-new-virtual-dir.gif b/org/static/helm-projectile/helm-projectile-new-virtual-dir.gif similarity index 100% rename from static/helm-projectile/helm-projectile-new-virtual-dir.gif rename to org/static/helm-projectile/helm-projectile-new-virtual-dir.gif diff --git a/static/helm-projectile/helm-projectile-remove-project.gif b/org/static/helm-projectile/helm-projectile-remove-project.gif similarity index 100% rename from static/helm-projectile/helm-projectile-remove-project.gif rename to org/static/helm-projectile/helm-projectile-remove-project.gif diff --git a/static/helm-projectile/helm-projectile-rename-file.gif b/org/static/helm-projectile/helm-projectile-rename-file.gif similarity index 100% rename from static/helm-projectile/helm-projectile-rename-file.gif rename to org/static/helm-projectile/helm-projectile-rename-file.gif diff --git a/static/helm-projectile/helm-projectile-serial-rename-file.gif b/org/static/helm-projectile/helm-projectile-serial-rename-file.gif similarity index 100% rename from static/helm-projectile/helm-projectile-serial-rename-file.gif rename to org/static/helm-projectile/helm-projectile-serial-rename-file.gif diff --git a/static/helm-projectile/helm-projectile-switch-project.gif b/org/static/helm-projectile/helm-projectile-switch-project.gif similarity index 100% rename from static/helm-projectile/helm-projectile-switch-project.gif rename to org/static/helm-projectile/helm-projectile-switch-project.gif diff --git a/static/helm_projectile.gif b/org/static/helm_projectile.gif similarity index 100% rename from static/helm_projectile.gif rename to org/static/helm_projectile.gif diff --git a/static/ibuffer-dired-group.gif b/org/static/ibuffer-dired-group.gif similarity index 100% rename from static/ibuffer-dired-group.gif rename to org/static/ibuffer-dired-group.gif diff --git a/static/ibuffer-filter-major.gif b/org/static/ibuffer-filter-major.gif similarity index 100% rename from static/ibuffer-filter-major.gif rename to org/static/ibuffer-filter-major.gif diff --git a/static/insert_buf2_macro.gif b/org/static/insert_buf2_macro.gif similarity index 100% rename from static/insert_buf2_macro.gif rename to org/static/insert_buf2_macro.gif diff --git a/static/jump_headers.gif b/org/static/jump_headers.gif similarity index 100% rename from static/jump_headers.gif rename to org/static/jump_headers.gif diff --git a/static/linux-dir.gif b/org/static/linux-dir.gif similarity index 100% rename from static/linux-dir.gif rename to org/static/linux-dir.gif diff --git a/static/live_grep.gif b/org/static/live_grep.gif similarity index 100% rename from static/live_grep.gif rename to org/static/live_grep.gif diff --git a/static/macro.gif b/org/static/macro.gif similarity index 100% rename from static/macro.gif rename to org/static/macro.gif diff --git a/static/macro2_full.gif b/org/static/macro2_full.gif similarity index 100% rename from static/macro2_full.gif rename to org/static/macro2_full.gif diff --git a/static/magit.gif b/org/static/magit.gif similarity index 100% rename from static/magit.gif rename to org/static/magit.gif diff --git a/static/modeline.jpg b/org/static/modeline.jpg similarity index 100% rename from static/modeline.jpg rename to org/static/modeline.jpg diff --git a/static/multiple-windows.gif b/org/static/multiple-windows.gif similarity index 100% rename from static/multiple-windows.gif rename to org/static/multiple-windows.gif diff --git a/static/occur-edit.gif b/org/static/occur-edit.gif similarity index 100% rename from static/occur-edit.gif rename to org/static/occur-edit.gif diff --git a/static/occur.gif b/org/static/occur.gif similarity index 100% rename from static/occur.gif rename to org/static/occur.gif diff --git a/static/part3/backward-sexp.gif b/org/static/part3/backward-sexp.gif similarity index 100% rename from static/part3/backward-sexp.gif rename to org/static/part3/backward-sexp.gif diff --git a/static/part3/customize.jpg b/org/static/part3/customize.jpg similarity index 100% rename from static/part3/customize.jpg rename to org/static/part3/customize.jpg diff --git a/static/part3/diff-hl-buffer.png b/org/static/part3/diff-hl-buffer.png similarity index 100% rename from static/part3/diff-hl-buffer.png rename to org/static/part3/diff-hl-buffer.png diff --git a/static/part3/diff-hl-dired.png b/org/static/part3/diff-hl-dired.png similarity index 100% rename from static/part3/diff-hl-dired.png rename to org/static/part3/diff-hl-dired.png diff --git a/static/part3/diff-hl-margin.png b/org/static/part3/diff-hl-margin.png similarity index 100% rename from static/part3/diff-hl-margin.png rename to org/static/part3/diff-hl-margin.png diff --git a/static/part3/dired-plus.jpg b/org/static/part3/dired-plus.jpg similarity index 100% rename from static/part3/dired-plus.jpg rename to org/static/part3/dired-plus.jpg diff --git a/static/part3/discover-my-major.png b/org/static/part3/discover-my-major.png similarity index 100% rename from static/part3/discover-my-major.png rename to org/static/part3/discover-my-major.png diff --git a/static/part3/forward-sexp.gif b/org/static/part3/forward-sexp.gif similarity index 100% rename from static/part3/forward-sexp.gif rename to org/static/part3/forward-sexp.gif diff --git a/static/part3/golden-ratio.gif b/org/static/part3/golden-ratio.gif similarity index 100% rename from static/part3/golden-ratio.gif rename to org/static/part3/golden-ratio.gif diff --git a/static/part3/helm-all-mark-rings.gif b/org/static/part3/helm-all-mark-rings.gif similarity index 100% rename from static/part3/helm-all-mark-rings.gif rename to org/static/part3/helm-all-mark-rings.gif diff --git a/static/part3/helm-autoresize-fix.gif b/org/static/part3/helm-autoresize-fix.gif similarity index 100% rename from static/part3/helm-autoresize-fix.gif rename to org/static/part3/helm-autoresize-fix.gif diff --git a/static/part3/helm-autoresize-mode.gif b/org/static/part3/helm-autoresize-mode.gif similarity index 100% rename from static/part3/helm-autoresize-mode.gif rename to org/static/part3/helm-autoresize-mode.gif diff --git a/static/part3/helm-calc.gif b/org/static/part3/helm-calc.gif similarity index 100% rename from static/part3/helm-calc.gif rename to org/static/part3/helm-calc.gif diff --git a/static/part3/helm-color.gif b/org/static/part3/helm-color.gif similarity index 100% rename from static/part3/helm-color.gif rename to org/static/part3/helm-color.gif diff --git a/helm-eshell-history.gif b/org/static/part3/helm-eshell-history.gif similarity index 100% rename from helm-eshell-history.gif rename to org/static/part3/helm-eshell-history.gif diff --git a/static/part3/helm-eval-expression.gif b/org/static/part3/helm-eval-expression.gif similarity index 100% rename from static/part3/helm-eval-expression.gif rename to org/static/part3/helm-eval-expression.gif diff --git a/static/part3/helm-find-files.gif b/org/static/part3/helm-find-files.gif similarity index 100% rename from static/part3/helm-find-files.gif rename to org/static/part3/helm-find-files.gif diff --git a/static/part3/helm-find.gif b/org/static/part3/helm-find.gif similarity index 100% rename from static/part3/helm-find.gif rename to org/static/part3/helm-find.gif diff --git a/static/part3/helm-google-suggest.gif b/org/static/part3/helm-google-suggest.gif similarity index 100% rename from static/part3/helm-google-suggest.gif rename to org/static/part3/helm-google-suggest.gif diff --git a/static/part3/helm-kill-ring.gif b/org/static/part3/helm-kill-ring.gif similarity index 100% rename from static/part3/helm-kill-ring.gif rename to org/static/part3/helm-kill-ring.gif diff --git a/static/part3/helm-locate.gif b/org/static/part3/helm-locate.gif similarity index 100% rename from static/part3/helm-locate.gif rename to org/static/part3/helm-locate.gif diff --git a/static/part3/helm-m-x.gif b/org/static/part3/helm-m-x.gif similarity index 100% rename from static/part3/helm-m-x.gif rename to org/static/part3/helm-m-x.gif diff --git a/static/part3/helm-man-woman.gif b/org/static/part3/helm-man-woman.gif similarity index 100% rename from static/part3/helm-man-woman.gif rename to org/static/part3/helm-man-woman.gif diff --git a/static/part3/helm-mini.gif b/org/static/part3/helm-mini.gif similarity index 100% rename from static/part3/helm-mini.gif rename to org/static/part3/helm-mini.gif diff --git a/static/part3/helm-occur.gif b/org/static/part3/helm-occur.gif similarity index 100% rename from static/part3/helm-occur.gif rename to org/static/part3/helm-occur.gif diff --git a/static/part3/helm-regexp.gif b/org/static/part3/helm-regexp.gif similarity index 100% rename from static/part3/helm-regexp.gif rename to org/static/part3/helm-regexp.gif diff --git a/static/part3/helm-registers.gif b/org/static/part3/helm-registers.gif similarity index 100% rename from static/part3/helm-registers.gif rename to org/static/part3/helm-registers.gif diff --git a/static/part3/helm-semantic-or-imenu-2.gif b/org/static/part3/helm-semantic-or-imenu-2.gif similarity index 100% rename from static/part3/helm-semantic-or-imenu-2.gif rename to org/static/part3/helm-semantic-or-imenu-2.gif diff --git a/static/part3/helm-semantic-or-imenu.gif b/org/static/part3/helm-semantic-or-imenu.gif similarity index 100% rename from static/part3/helm-semantic-or-imenu.gif rename to org/static/part3/helm-semantic-or-imenu.gif diff --git a/static/part3/helm-surfraw.gif b/org/static/part3/helm-surfraw.gif similarity index 100% rename from static/part3/helm-surfraw.gif rename to org/static/part3/helm-surfraw.gif diff --git a/static/part3/helm-top.gif b/org/static/part3/helm-top.gif similarity index 100% rename from static/part3/helm-top.gif rename to org/static/part3/helm-top.gif diff --git a/static/part3/ibuffer-vc.png b/org/static/part3/ibuffer-vc.png similarity index 100% rename from static/part3/ibuffer-vc.png rename to org/static/part3/ibuffer-vc.png diff --git a/static/part3/kill-sexp.gif b/org/static/part3/kill-sexp.gif similarity index 100% rename from static/part3/kill-sexp.gif rename to org/static/part3/kill-sexp.gif diff --git a/static/part3/mark-sexp.gif b/org/static/part3/mark-sexp.gif similarity index 100% rename from static/part3/mark-sexp.gif rename to org/static/part3/mark-sexp.gif diff --git a/static/part3/nyan-mode.png b/org/static/part3/nyan-mode.png similarity index 100% rename from static/part3/nyan-mode.png rename to org/static/part3/nyan-mode.png diff --git a/static/part3/projectile.png b/org/static/part3/projectile.png similarity index 100% rename from static/part3/projectile.png rename to org/static/part3/projectile.png diff --git a/static/part3/rainbow-mode.png b/org/static/part3/rainbow-mode.png similarity index 100% rename from static/part3/rainbow-mode.png rename to org/static/part3/rainbow-mode.png diff --git a/static/part3/smex.png b/org/static/part3/smex.png similarity index 100% rename from static/part3/smex.png rename to org/static/part3/smex.png diff --git a/static/part3/transpose-sexp.gif b/org/static/part3/transpose-sexp.gif similarity index 100% rename from static/part3/transpose-sexp.gif rename to org/static/part3/transpose-sexp.gif diff --git a/static/part3/undo-tree.jpg b/org/static/part3/undo-tree.jpg similarity index 100% rename from static/part3/undo-tree.jpg rename to org/static/part3/undo-tree.jpg diff --git a/static/part3/ztree-diff.png b/org/static/part3/ztree-diff.png similarity index 100% rename from static/part3/ztree-diff.png rename to org/static/part3/ztree-diff.png diff --git a/static/part3/ztree-dir.png b/org/static/part3/ztree-dir.png similarity index 100% rename from static/part3/ztree-dir.png rename to org/static/part3/ztree-dir.png diff --git a/static/path-variable-windows.jpg b/org/static/path-variable-windows.jpg similarity index 100% rename from static/path-variable-windows.jpg rename to org/static/path-variable-windows.jpg diff --git a/static/performance.gif b/org/static/performance.gif similarity index 100% rename from static/performance.gif rename to org/static/performance.gif diff --git a/static/prepare_macro.gif b/org/static/prepare_macro.gif similarity index 100% rename from static/prepare_macro.gif rename to org/static/prepare_macro.gif diff --git a/static/proglang/aggressive-indent.gif b/org/static/proglang/aggressive-indent.gif similarity index 100% rename from static/proglang/aggressive-indent.gif rename to org/static/proglang/aggressive-indent.gif diff --git a/static/proglang/emacs_home.png b/org/static/proglang/emacs_home.png similarity index 100% rename from static/proglang/emacs_home.png rename to org/static/proglang/emacs_home.png diff --git a/static/proglang/emacs_path.png b/org/static/proglang/emacs_path.png similarity index 100% rename from static/proglang/emacs_path.png rename to org/static/proglang/emacs_path.png diff --git a/static/proglang/forward-backward-parens.gif b/org/static/proglang/forward-backward-parens.gif similarity index 100% rename from static/proglang/forward-backward-parens.gif rename to org/static/proglang/forward-backward-parens.gif diff --git a/static/proglang/geiser-demo.gif b/org/static/proglang/geiser-demo.gif similarity index 100% rename from static/proglang/geiser-demo.gif rename to org/static/proglang/geiser-demo.gif diff --git a/static/proglang/monokai.png b/org/static/proglang/monokai.png similarity index 100% rename from static/proglang/monokai.png rename to org/static/proglang/monokai.png diff --git a/static/proglang/repl-autodoc.png b/org/static/proglang/repl-autodoc.png similarity index 100% rename from static/proglang/repl-autodoc.png rename to org/static/proglang/repl-autodoc.png diff --git a/static/proglang/repl-mod.png b/org/static/proglang/repl-mod.png similarity index 100% rename from static/proglang/repl-mod.png rename to org/static/proglang/repl-mod.png diff --git a/static/proglang/sml-completion.gif b/org/static/proglang/sml-completion.gif similarity index 100% rename from static/proglang/sml-completion.gif rename to org/static/proglang/sml-completion.gif diff --git a/static/proglang/sml-helm-imenu.gif b/org/static/proglang/sml-helm-imenu.gif similarity index 100% rename from static/proglang/sml-helm-imenu.gif rename to org/static/proglang/sml-helm-imenu.gif diff --git a/static/proglang/sml-send-buffer.gif b/org/static/proglang/sml-send-buffer.gif similarity index 100% rename from static/proglang/sml-send-buffer.gif rename to org/static/proglang/sml-send-buffer.gif diff --git a/static/proglang/sml-send-region.gif b/org/static/proglang/sml-send-region.gif similarity index 100% rename from static/proglang/sml-send-region.gif rename to org/static/proglang/sml-send-region.gif diff --git a/static/proglang/sml-start-proc.gif b/org/static/proglang/sml-start-proc.gif similarity index 100% rename from static/proglang/sml-start-proc.gif rename to org/static/proglang/sml-start-proc.gif diff --git a/static/proglang/zenburn.png b/org/static/proglang/zenburn.png similarity index 100% rename from static/proglang/zenburn.png rename to org/static/proglang/zenburn.png diff --git a/static/reg_a.gif b/org/static/reg_a.gif similarity index 100% rename from static/reg_a.gif rename to org/static/reg_a.gif diff --git a/static/reg_b.gif b/org/static/reg_b.gif similarity index 100% rename from static/reg_b.gif rename to org/static/reg_b.gif diff --git a/static/reg_c.gif b/org/static/reg_c.gif similarity index 100% rename from static/reg_c.gif rename to org/static/reg_c.gif diff --git a/static/reg_d.gif b/org/static/reg_d.gif similarity index 100% rename from static/reg_d.gif rename to org/static/reg_d.gif diff --git a/static/register-windows.gif b/org/static/register-windows.gif similarity index 100% rename from static/register-windows.gif rename to org/static/register-windows.gif diff --git a/static/setup-emacs-windows/emacs_xwidgets_windows.png b/org/static/setup-emacs-windows/emacs_xwidgets_windows.png similarity index 100% rename from static/setup-emacs-windows/emacs_xwidgets_windows.png rename to org/static/setup-emacs-windows/emacs_xwidgets_windows.png diff --git a/static/setup-emacs-windows/pdf_tools_windows_latex.gif b/org/static/setup-emacs-windows/pdf_tools_windows_latex.gif similarity index 100% rename from static/setup-emacs-windows/pdf_tools_windows_latex.gif rename to org/static/setup-emacs-windows/pdf_tools_windows_latex.gif diff --git a/static/setup-emacs-windows/xserver_example.png b/org/static/setup-emacs-windows/xserver_example.png similarity index 100% rename from static/setup-emacs-windows/xserver_example.png rename to org/static/setup-emacs-windows/xserver_example.png diff --git a/static/vc-diff.jpg b/org/static/vc-diff.jpg similarity index 100% rename from static/vc-diff.jpg rename to org/static/vc-diff.jpg diff --git a/static/worg.css b/org/static/worg.css similarity index 100% rename from static/worg.css rename to org/static/worg.css diff --git a/static/part3/helm-eshell-history.gif b/static/part3/helm-eshell-history.gif deleted file mode 100644 index 2b9957cd611b34c1c784bf4e322f12ac6e23bc4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112704 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

GJn6?1rvV?gC`}RNm~Yz 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 z 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 Date: Mon, 5 Dec 2016 10:18:11 -0500 Subject: [PATCH 05/11] rename `html' folder to `docs' for 'github pages' auto-publishing --- {html => docs}/c-ide.html | 0 {html => docs}/emacs-for-proglang.html | 0 {html => docs}/emacs-tutor.html | 0 {html => docs}/emacs-tutor2.html | 0 {html => docs}/emacs-tutor3.html | 0 {html => docs}/helm-intro.html | 0 {html => docs}/helm-projectile.html | 0 {html => docs}/index.html | 0 {html => docs}/setup-emacs-windows.html | 0 {html => docs}/static/auto_complete.gif | Bin {html => docs}/static/c-ide/backward-func.gif | Bin {html => docs}/static/c-ide/beginning-of-defun.gif | Bin {html => docs}/static/c-ide/company-c-header.png | Bin .../static/c-ide/company-clang-company-gtags.gif | Bin .../c-ide/company-clang-project-completion.gif | Bin {html => docs}/static/c-ide/compilation-compile.gif | Bin {html => docs}/static/c-ide/compilation-mode.gif | Bin {html => docs}/static/c-ide/ede-project.gif | Bin .../static/c-ide/ede-rearrange-project-dir.gif | Bin .../static/c-ide/ede-same-dir-completion.gif | Bin {html => docs}/static/c-ide/end-of-defun.gif | Bin {html => docs}/static/c-ide/forward-func.gif | Bin {html => docs}/static/c-ide/function-args-demo.gif | Bin {html => docs}/static/c-ide/function-args-jump.gif | Bin {html => docs}/static/c-ide/gdb-many-windows.gif | Bin {html => docs}/static/c-ide/gdb-prompt.gif | Bin {html => docs}/static/c-ide/ggtags-definitions.png | Bin {html => docs}/static/c-ide/gud.gif | Bin .../static/c-ide/helm-files-insertion.gif | Bin .../static/c-ide/helm-gtags-definitions.png | Bin .../static/c-ide/helm-gtags-jump-dwim.gif | Bin {html => docs}/static/c-ide/helm-gtags-select.gif | Bin .../c-ide/helm-semantic-or-imenu-with-struct.gif | Bin {html => docs}/static/c-ide/hs-toggle-hiding.gif | Bin {html => docs}/static/c-ide/kill-func-body.gif | Bin {html => docs}/static/c-ide/mark-defun.gif | Bin {html => docs}/static/c-ide/mark-func-body.gif | Bin {html => docs}/static/c-ide/moo-complete.png | Bin {html => docs}/static/c-ide/moo-jump-local.gif | Bin .../static/c-ide/projectile-find-other-file.gif | Bin {html => docs}/static/c-ide/semantic-boost-demo.gif | Bin .../static/c-ide/semantic-idle-summary-lambda.gif | Bin .../static/c-ide/semantic-idle-summary-variable.gif | Bin {html => docs}/static/c-ide/semantic-parsing.gif | Bin .../static/c-ide/semantic-sticky-func.gif | Bin {html => docs}/static/c-ide/semantic-symref.gif | Bin .../static/c-ide/senator-go-to-up-reference.gif | Bin {html => docs}/static/c-ide/senator-jump.gif | Bin .../static/c-ide/senator-kill-yank-tag.gif | Bin .../static/c-ide/senator-next-previous-tag.gif | Bin {html => docs}/static/c-ide/senator-yank-tag.gif | Bin {html => docs}/static/c-ide/sr-speedbar.gif | Bin {html => docs}/static/c-x-3.gif | Bin {html => docs}/static/c-x-c-x.gif | Bin {html => docs}/static/candidates.jpg | Bin {html => docs}/static/comment.gif | Bin {html => docs}/static/dired-subdir.gif | Bin {html => docs}/static/emacs-manual-toc.gif | Bin {html => docs}/static/emacs-read-pdf.gif | Bin {html => docs}/static/ffap.gif | Bin {html => docs}/static/find-file-ido.gif | Bin {html => docs}/static/find-file-normal.gif | Bin {html => docs}/static/frames-gui.gif | Bin {html => docs}/static/frames-term.gif | Bin {html => docs}/static/func_args.jpg | Bin {html => docs}/static/gdb-many-windows1.png | Bin {html => docs}/static/gdb-many-windows2.png | Bin {html => docs}/static/ggtags-create-tags.gif | Bin {html => docs}/static/ggtags-find-file-bug.gif | Bin {html => docs}/static/ggtags-find-file.gif | Bin {html => docs}/static/ggtags-rerun.gif | Bin {html => docs}/static/ggtags-view-tag-history.gif | Bin {html => docs}/static/gnu-global-dir-struct.jpg | Bin {html => docs}/static/grep.gif | Bin {html => docs}/static/helm-buffer-list.gif | Bin {html => docs}/static/helm-new-file-buffer.gif | Bin .../static/helm-projectile/helm-projectile-1.gif | Bin .../helm-projectile-add-files-virtual-dir.gif | Bin .../helm-projectile-complete-at-point.gif | Bin .../helm-projectile-delete-files-virtual-dir.gif | Bin .../helm-projectile/helm-projectile-etags.gif | Bin .../helm-projectile-find-file-as-root.gif | Bin .../helm-projectile-find-file-copy.gif | Bin .../helm-projectile-find-file-delete.gif | Bin .../helm-projectile-find-file-ediff.gif | Bin .../helm-projectile-find-file-other-window.gif | Bin .../helm-projectile-find-files-1.gif | Bin .../helm-projectile-find-files-dwim-1.gif | Bin .../helm-projectile-find-other-file.gif | Bin .../static/helm-projectile/helm-projectile-grep.gif | Bin .../helm-projectile-new-virtual-dir.gif | Bin .../helm-projectile-remove-project.gif | Bin .../helm-projectile/helm-projectile-rename-file.gif | Bin .../helm-projectile-serial-rename-file.gif | Bin .../helm-projectile-switch-project.gif | Bin {html => docs}/static/helm_projectile.gif | Bin {html => docs}/static/ibuffer-dired-group.gif | Bin {html => docs}/static/ibuffer-filter-major.gif | Bin {html => docs}/static/insert_buf2_macro.gif | Bin {html => docs}/static/jump_headers.gif | Bin {html => docs}/static/linux-dir.gif | Bin {html => docs}/static/live_grep.gif | Bin {html => docs}/static/macro.gif | Bin {html => docs}/static/macro2_full.gif | Bin {html => docs}/static/magit.gif | Bin {html => docs}/static/modeline.jpg | Bin {html => docs}/static/multiple-windows.gif | Bin {html => docs}/static/occur-edit.gif | Bin {html => docs}/static/occur.gif | Bin {html => docs}/static/part3/backward-sexp.gif | Bin {html => docs}/static/part3/customize.jpg | Bin {html => docs}/static/part3/diff-hl-buffer.png | Bin {html => docs}/static/part3/diff-hl-dired.png | Bin {html => docs}/static/part3/diff-hl-margin.png | Bin {html => docs}/static/part3/dired-plus.jpg | Bin {html => docs}/static/part3/discover-my-major.png | Bin {html => docs}/static/part3/forward-sexp.gif | Bin {html => docs}/static/part3/golden-ratio.gif | Bin {html => docs}/static/part3/helm-all-mark-rings.gif | Bin {html => docs}/static/part3/helm-autoresize-fix.gif | Bin .../static/part3/helm-autoresize-mode.gif | Bin {html => docs}/static/part3/helm-calc.gif | Bin {html => docs}/static/part3/helm-color.gif | Bin {html => docs}/static/part3/helm-eshell-history.gif | Bin .../static/part3/helm-eval-expression.gif | Bin {html => docs}/static/part3/helm-find-files.gif | Bin {html => docs}/static/part3/helm-find.gif | Bin {html => docs}/static/part3/helm-google-suggest.gif | Bin {html => docs}/static/part3/helm-kill-ring.gif | Bin {html => docs}/static/part3/helm-locate.gif | Bin {html => docs}/static/part3/helm-m-x.gif | Bin {html => docs}/static/part3/helm-man-woman.gif | Bin {html => docs}/static/part3/helm-mini.gif | Bin {html => docs}/static/part3/helm-occur.gif | Bin {html => docs}/static/part3/helm-regexp.gif | Bin {html => docs}/static/part3/helm-registers.gif | Bin .../static/part3/helm-semantic-or-imenu-2.gif | Bin .../static/part3/helm-semantic-or-imenu.gif | Bin {html => docs}/static/part3/helm-surfraw.gif | Bin {html => docs}/static/part3/helm-top.gif | Bin {html => docs}/static/part3/ibuffer-vc.png | Bin {html => docs}/static/part3/kill-sexp.gif | Bin {html => docs}/static/part3/mark-sexp.gif | Bin {html => docs}/static/part3/nyan-mode.png | Bin {html => docs}/static/part3/projectile.png | Bin {html => docs}/static/part3/rainbow-mode.png | Bin {html => docs}/static/part3/smex.png | Bin {html => docs}/static/part3/transpose-sexp.gif | Bin {html => docs}/static/part3/undo-tree.jpg | Bin {html => docs}/static/part3/ztree-diff.png | Bin {html => docs}/static/part3/ztree-dir.png | Bin {html => docs}/static/path-variable-windows.jpg | Bin {html => docs}/static/performance.gif | Bin {html => docs}/static/prepare_macro.gif | Bin .../static/proglang/aggressive-indent.gif | Bin {html => docs}/static/proglang/emacs_home.png | Bin {html => docs}/static/proglang/emacs_path.png | Bin .../static/proglang/forward-backward-parens.gif | Bin {html => docs}/static/proglang/geiser-demo.gif | Bin {html => docs}/static/proglang/monokai.png | Bin {html => docs}/static/proglang/repl-autodoc.png | Bin {html => docs}/static/proglang/repl-mod.png | Bin {html => docs}/static/proglang/sml-completion.gif | Bin {html => docs}/static/proglang/sml-helm-imenu.gif | Bin {html => docs}/static/proglang/sml-send-buffer.gif | Bin {html => docs}/static/proglang/sml-send-region.gif | Bin {html => docs}/static/proglang/sml-start-proc.gif | Bin {html => docs}/static/proglang/zenburn.png | Bin {html => docs}/static/reg_a.gif | Bin {html => docs}/static/reg_b.gif | Bin {html => docs}/static/reg_c.gif | Bin {html => docs}/static/reg_d.gif | Bin {html => docs}/static/register-windows.gif | Bin .../setup-emacs-windows/cygwin_example_install.png | Bin .../setup-emacs-windows/emacs_xwidgets_windows.png | Bin .../setup-emacs-windows/pdf_tools_windows_latex.gif | Bin .../static/setup-emacs-windows/xserver_example.png | Bin {html => docs}/static/vc-diff.jpg | Bin {html => docs}/static/worg.css | 0 179 files changed, 0 insertions(+), 0 deletions(-) rename {html => docs}/c-ide.html (100%) rename {html => docs}/emacs-for-proglang.html (100%) rename {html => docs}/emacs-tutor.html (100%) rename {html => docs}/emacs-tutor2.html (100%) rename {html => docs}/emacs-tutor3.html (100%) rename {html => docs}/helm-intro.html (100%) rename {html => docs}/helm-projectile.html (100%) rename {html => docs}/index.html (100%) rename {html => docs}/setup-emacs-windows.html (100%) rename {html => docs}/static/auto_complete.gif (100%) rename {html => docs}/static/c-ide/backward-func.gif (100%) rename {html => docs}/static/c-ide/beginning-of-defun.gif (100%) rename {html => docs}/static/c-ide/company-c-header.png (100%) rename {html => docs}/static/c-ide/company-clang-company-gtags.gif (100%) rename {html => docs}/static/c-ide/company-clang-project-completion.gif (100%) rename {html => docs}/static/c-ide/compilation-compile.gif (100%) rename {html => docs}/static/c-ide/compilation-mode.gif (100%) rename {html => docs}/static/c-ide/ede-project.gif (100%) rename {html => docs}/static/c-ide/ede-rearrange-project-dir.gif (100%) rename {html => docs}/static/c-ide/ede-same-dir-completion.gif (100%) rename {html => docs}/static/c-ide/end-of-defun.gif (100%) rename {html => docs}/static/c-ide/forward-func.gif (100%) rename {html => docs}/static/c-ide/function-args-demo.gif (100%) rename {html => docs}/static/c-ide/function-args-jump.gif (100%) rename {html => docs}/static/c-ide/gdb-many-windows.gif (100%) rename {html => docs}/static/c-ide/gdb-prompt.gif (100%) rename {html => docs}/static/c-ide/ggtags-definitions.png (100%) rename {html => docs}/static/c-ide/gud.gif (100%) rename {html => docs}/static/c-ide/helm-files-insertion.gif (100%) rename {html => docs}/static/c-ide/helm-gtags-definitions.png (100%) rename {html => docs}/static/c-ide/helm-gtags-jump-dwim.gif (100%) rename {html => docs}/static/c-ide/helm-gtags-select.gif (100%) rename {html => docs}/static/c-ide/helm-semantic-or-imenu-with-struct.gif (100%) rename {html => docs}/static/c-ide/hs-toggle-hiding.gif (100%) rename {html => docs}/static/c-ide/kill-func-body.gif (100%) rename {html => docs}/static/c-ide/mark-defun.gif (100%) rename {html => docs}/static/c-ide/mark-func-body.gif (100%) rename {html => docs}/static/c-ide/moo-complete.png (100%) rename {html => docs}/static/c-ide/moo-jump-local.gif (100%) rename {html => docs}/static/c-ide/projectile-find-other-file.gif (100%) rename {html => docs}/static/c-ide/semantic-boost-demo.gif (100%) rename {html => docs}/static/c-ide/semantic-idle-summary-lambda.gif (100%) rename {html => docs}/static/c-ide/semantic-idle-summary-variable.gif (100%) rename {html => docs}/static/c-ide/semantic-parsing.gif (100%) rename {html => docs}/static/c-ide/semantic-sticky-func.gif (100%) rename {html => docs}/static/c-ide/semantic-symref.gif (100%) rename {html => docs}/static/c-ide/senator-go-to-up-reference.gif (100%) rename {html => docs}/static/c-ide/senator-jump.gif (100%) rename {html => docs}/static/c-ide/senator-kill-yank-tag.gif (100%) rename {html => docs}/static/c-ide/senator-next-previous-tag.gif (100%) rename {html => docs}/static/c-ide/senator-yank-tag.gif (100%) rename {html => docs}/static/c-ide/sr-speedbar.gif (100%) rename {html => docs}/static/c-x-3.gif (100%) rename {html => docs}/static/c-x-c-x.gif (100%) rename {html => docs}/static/candidates.jpg (100%) rename {html => docs}/static/comment.gif (100%) rename {html => docs}/static/dired-subdir.gif (100%) rename {html => docs}/static/emacs-manual-toc.gif (100%) rename {html => docs}/static/emacs-read-pdf.gif (100%) rename {html => docs}/static/ffap.gif (100%) rename {html => docs}/static/find-file-ido.gif (100%) rename {html => docs}/static/find-file-normal.gif (100%) rename {html => docs}/static/frames-gui.gif (100%) rename {html => docs}/static/frames-term.gif (100%) rename {html => docs}/static/func_args.jpg (100%) rename {html => docs}/static/gdb-many-windows1.png (100%) rename {html => docs}/static/gdb-many-windows2.png (100%) rename {html => docs}/static/ggtags-create-tags.gif (100%) rename {html => docs}/static/ggtags-find-file-bug.gif (100%) rename {html => docs}/static/ggtags-find-file.gif (100%) rename {html => docs}/static/ggtags-rerun.gif (100%) rename {html => docs}/static/ggtags-view-tag-history.gif (100%) rename {html => docs}/static/gnu-global-dir-struct.jpg (100%) rename {html => docs}/static/grep.gif (100%) rename {html => docs}/static/helm-buffer-list.gif (100%) rename {html => docs}/static/helm-new-file-buffer.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-1.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-complete-at-point.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-etags.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-file-as-root.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-file-copy.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-file-delete.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-file-ediff.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-file-other-window.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-files-1.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-files-dwim-1.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-find-other-file.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-grep.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-new-virtual-dir.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-remove-project.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-rename-file.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-serial-rename-file.gif (100%) rename {html => docs}/static/helm-projectile/helm-projectile-switch-project.gif (100%) rename {html => docs}/static/helm_projectile.gif (100%) rename {html => docs}/static/ibuffer-dired-group.gif (100%) rename {html => docs}/static/ibuffer-filter-major.gif (100%) rename {html => docs}/static/insert_buf2_macro.gif (100%) rename {html => docs}/static/jump_headers.gif (100%) rename {html => docs}/static/linux-dir.gif (100%) rename {html => docs}/static/live_grep.gif (100%) rename {html => docs}/static/macro.gif (100%) rename {html => docs}/static/macro2_full.gif (100%) rename {html => docs}/static/magit.gif (100%) rename {html => docs}/static/modeline.jpg (100%) rename {html => docs}/static/multiple-windows.gif (100%) rename {html => docs}/static/occur-edit.gif (100%) rename {html => docs}/static/occur.gif (100%) rename {html => docs}/static/part3/backward-sexp.gif (100%) rename {html => docs}/static/part3/customize.jpg (100%) rename {html => docs}/static/part3/diff-hl-buffer.png (100%) rename {html => docs}/static/part3/diff-hl-dired.png (100%) rename {html => docs}/static/part3/diff-hl-margin.png (100%) rename {html => docs}/static/part3/dired-plus.jpg (100%) rename {html => docs}/static/part3/discover-my-major.png (100%) rename {html => docs}/static/part3/forward-sexp.gif (100%) rename {html => docs}/static/part3/golden-ratio.gif (100%) rename {html => docs}/static/part3/helm-all-mark-rings.gif (100%) rename {html => docs}/static/part3/helm-autoresize-fix.gif (100%) rename {html => docs}/static/part3/helm-autoresize-mode.gif (100%) rename {html => docs}/static/part3/helm-calc.gif (100%) rename {html => docs}/static/part3/helm-color.gif (100%) rename {html => docs}/static/part3/helm-eshell-history.gif (100%) rename {html => docs}/static/part3/helm-eval-expression.gif (100%) rename {html => docs}/static/part3/helm-find-files.gif (100%) rename {html => docs}/static/part3/helm-find.gif (100%) rename {html => docs}/static/part3/helm-google-suggest.gif (100%) rename {html => docs}/static/part3/helm-kill-ring.gif (100%) rename {html => docs}/static/part3/helm-locate.gif (100%) rename {html => docs}/static/part3/helm-m-x.gif (100%) rename {html => docs}/static/part3/helm-man-woman.gif (100%) rename {html => docs}/static/part3/helm-mini.gif (100%) rename {html => docs}/static/part3/helm-occur.gif (100%) rename {html => docs}/static/part3/helm-regexp.gif (100%) rename {html => docs}/static/part3/helm-registers.gif (100%) rename {html => docs}/static/part3/helm-semantic-or-imenu-2.gif (100%) rename {html => docs}/static/part3/helm-semantic-or-imenu.gif (100%) rename {html => docs}/static/part3/helm-surfraw.gif (100%) rename {html => docs}/static/part3/helm-top.gif (100%) rename {html => docs}/static/part3/ibuffer-vc.png (100%) rename {html => docs}/static/part3/kill-sexp.gif (100%) rename {html => docs}/static/part3/mark-sexp.gif (100%) rename {html => docs}/static/part3/nyan-mode.png (100%) rename {html => docs}/static/part3/projectile.png (100%) rename {html => docs}/static/part3/rainbow-mode.png (100%) rename {html => docs}/static/part3/smex.png (100%) rename {html => docs}/static/part3/transpose-sexp.gif (100%) rename {html => docs}/static/part3/undo-tree.jpg (100%) rename {html => docs}/static/part3/ztree-diff.png (100%) rename {html => docs}/static/part3/ztree-dir.png (100%) rename {html => docs}/static/path-variable-windows.jpg (100%) rename {html => docs}/static/performance.gif (100%) rename {html => docs}/static/prepare_macro.gif (100%) rename {html => docs}/static/proglang/aggressive-indent.gif (100%) rename {html => docs}/static/proglang/emacs_home.png (100%) rename {html => docs}/static/proglang/emacs_path.png (100%) rename {html => docs}/static/proglang/forward-backward-parens.gif (100%) rename {html => docs}/static/proglang/geiser-demo.gif (100%) rename {html => docs}/static/proglang/monokai.png (100%) rename {html => docs}/static/proglang/repl-autodoc.png (100%) rename {html => docs}/static/proglang/repl-mod.png (100%) rename {html => docs}/static/proglang/sml-completion.gif (100%) rename {html => docs}/static/proglang/sml-helm-imenu.gif (100%) rename {html => docs}/static/proglang/sml-send-buffer.gif (100%) rename {html => docs}/static/proglang/sml-send-region.gif (100%) rename {html => docs}/static/proglang/sml-start-proc.gif (100%) rename {html => docs}/static/proglang/zenburn.png (100%) rename {html => docs}/static/reg_a.gif (100%) rename {html => docs}/static/reg_b.gif (100%) rename {html => docs}/static/reg_c.gif (100%) rename {html => docs}/static/reg_d.gif (100%) rename {html => docs}/static/register-windows.gif (100%) rename {html => docs}/static/setup-emacs-windows/cygwin_example_install.png (100%) rename {html => docs}/static/setup-emacs-windows/emacs_xwidgets_windows.png (100%) rename {html => docs}/static/setup-emacs-windows/pdf_tools_windows_latex.gif (100%) rename {html => docs}/static/setup-emacs-windows/xserver_example.png (100%) rename {html => docs}/static/vc-diff.jpg (100%) rename {html => docs}/static/worg.css (100%) diff --git a/html/c-ide.html b/docs/c-ide.html similarity index 100% rename from html/c-ide.html rename to docs/c-ide.html diff --git a/html/emacs-for-proglang.html b/docs/emacs-for-proglang.html similarity index 100% rename from html/emacs-for-proglang.html rename to docs/emacs-for-proglang.html diff --git a/html/emacs-tutor.html b/docs/emacs-tutor.html similarity index 100% rename from html/emacs-tutor.html rename to docs/emacs-tutor.html diff --git a/html/emacs-tutor2.html b/docs/emacs-tutor2.html similarity index 100% rename from html/emacs-tutor2.html rename to docs/emacs-tutor2.html diff --git a/html/emacs-tutor3.html b/docs/emacs-tutor3.html similarity index 100% rename from html/emacs-tutor3.html rename to docs/emacs-tutor3.html diff --git a/html/helm-intro.html b/docs/helm-intro.html similarity index 100% rename from html/helm-intro.html rename to docs/helm-intro.html diff --git a/html/helm-projectile.html b/docs/helm-projectile.html similarity index 100% rename from html/helm-projectile.html rename to docs/helm-projectile.html diff --git a/html/index.html b/docs/index.html similarity index 100% rename from html/index.html rename to docs/index.html diff --git a/html/setup-emacs-windows.html b/docs/setup-emacs-windows.html similarity index 100% rename from html/setup-emacs-windows.html rename to docs/setup-emacs-windows.html diff --git a/html/static/auto_complete.gif b/docs/static/auto_complete.gif similarity index 100% rename from html/static/auto_complete.gif rename to docs/static/auto_complete.gif diff --git a/html/static/c-ide/backward-func.gif b/docs/static/c-ide/backward-func.gif similarity index 100% rename from html/static/c-ide/backward-func.gif rename to docs/static/c-ide/backward-func.gif diff --git a/html/static/c-ide/beginning-of-defun.gif b/docs/static/c-ide/beginning-of-defun.gif similarity index 100% rename from html/static/c-ide/beginning-of-defun.gif rename to docs/static/c-ide/beginning-of-defun.gif diff --git a/html/static/c-ide/company-c-header.png b/docs/static/c-ide/company-c-header.png similarity index 100% rename from html/static/c-ide/company-c-header.png rename to docs/static/c-ide/company-c-header.png diff --git a/html/static/c-ide/company-clang-company-gtags.gif b/docs/static/c-ide/company-clang-company-gtags.gif similarity index 100% rename from html/static/c-ide/company-clang-company-gtags.gif rename to docs/static/c-ide/company-clang-company-gtags.gif diff --git a/html/static/c-ide/company-clang-project-completion.gif b/docs/static/c-ide/company-clang-project-completion.gif similarity index 100% rename from html/static/c-ide/company-clang-project-completion.gif rename to docs/static/c-ide/company-clang-project-completion.gif diff --git a/html/static/c-ide/compilation-compile.gif b/docs/static/c-ide/compilation-compile.gif similarity index 100% rename from html/static/c-ide/compilation-compile.gif rename to docs/static/c-ide/compilation-compile.gif diff --git a/html/static/c-ide/compilation-mode.gif b/docs/static/c-ide/compilation-mode.gif similarity index 100% rename from html/static/c-ide/compilation-mode.gif rename to docs/static/c-ide/compilation-mode.gif diff --git a/html/static/c-ide/ede-project.gif b/docs/static/c-ide/ede-project.gif similarity index 100% rename from html/static/c-ide/ede-project.gif rename to docs/static/c-ide/ede-project.gif diff --git a/html/static/c-ide/ede-rearrange-project-dir.gif b/docs/static/c-ide/ede-rearrange-project-dir.gif similarity index 100% rename from html/static/c-ide/ede-rearrange-project-dir.gif rename to docs/static/c-ide/ede-rearrange-project-dir.gif diff --git a/html/static/c-ide/ede-same-dir-completion.gif b/docs/static/c-ide/ede-same-dir-completion.gif similarity index 100% rename from html/static/c-ide/ede-same-dir-completion.gif rename to docs/static/c-ide/ede-same-dir-completion.gif diff --git a/html/static/c-ide/end-of-defun.gif b/docs/static/c-ide/end-of-defun.gif similarity index 100% rename from html/static/c-ide/end-of-defun.gif rename to docs/static/c-ide/end-of-defun.gif diff --git a/html/static/c-ide/forward-func.gif b/docs/static/c-ide/forward-func.gif similarity index 100% rename from html/static/c-ide/forward-func.gif rename to docs/static/c-ide/forward-func.gif diff --git a/html/static/c-ide/function-args-demo.gif b/docs/static/c-ide/function-args-demo.gif similarity index 100% rename from html/static/c-ide/function-args-demo.gif rename to docs/static/c-ide/function-args-demo.gif diff --git a/html/static/c-ide/function-args-jump.gif b/docs/static/c-ide/function-args-jump.gif similarity index 100% rename from html/static/c-ide/function-args-jump.gif rename to docs/static/c-ide/function-args-jump.gif diff --git a/html/static/c-ide/gdb-many-windows.gif b/docs/static/c-ide/gdb-many-windows.gif similarity index 100% rename from html/static/c-ide/gdb-many-windows.gif rename to docs/static/c-ide/gdb-many-windows.gif diff --git a/html/static/c-ide/gdb-prompt.gif b/docs/static/c-ide/gdb-prompt.gif similarity index 100% rename from html/static/c-ide/gdb-prompt.gif rename to docs/static/c-ide/gdb-prompt.gif diff --git a/html/static/c-ide/ggtags-definitions.png b/docs/static/c-ide/ggtags-definitions.png similarity index 100% rename from html/static/c-ide/ggtags-definitions.png rename to docs/static/c-ide/ggtags-definitions.png diff --git a/html/static/c-ide/gud.gif b/docs/static/c-ide/gud.gif similarity index 100% rename from html/static/c-ide/gud.gif rename to docs/static/c-ide/gud.gif diff --git a/html/static/c-ide/helm-files-insertion.gif b/docs/static/c-ide/helm-files-insertion.gif similarity index 100% rename from html/static/c-ide/helm-files-insertion.gif rename to docs/static/c-ide/helm-files-insertion.gif diff --git a/html/static/c-ide/helm-gtags-definitions.png b/docs/static/c-ide/helm-gtags-definitions.png similarity index 100% rename from html/static/c-ide/helm-gtags-definitions.png rename to docs/static/c-ide/helm-gtags-definitions.png diff --git a/html/static/c-ide/helm-gtags-jump-dwim.gif b/docs/static/c-ide/helm-gtags-jump-dwim.gif similarity index 100% rename from html/static/c-ide/helm-gtags-jump-dwim.gif rename to docs/static/c-ide/helm-gtags-jump-dwim.gif diff --git a/html/static/c-ide/helm-gtags-select.gif b/docs/static/c-ide/helm-gtags-select.gif similarity index 100% rename from html/static/c-ide/helm-gtags-select.gif rename to docs/static/c-ide/helm-gtags-select.gif diff --git a/html/static/c-ide/helm-semantic-or-imenu-with-struct.gif b/docs/static/c-ide/helm-semantic-or-imenu-with-struct.gif similarity index 100% rename from html/static/c-ide/helm-semantic-or-imenu-with-struct.gif rename to docs/static/c-ide/helm-semantic-or-imenu-with-struct.gif diff --git a/html/static/c-ide/hs-toggle-hiding.gif b/docs/static/c-ide/hs-toggle-hiding.gif similarity index 100% rename from html/static/c-ide/hs-toggle-hiding.gif rename to docs/static/c-ide/hs-toggle-hiding.gif diff --git a/html/static/c-ide/kill-func-body.gif b/docs/static/c-ide/kill-func-body.gif similarity index 100% rename from html/static/c-ide/kill-func-body.gif rename to docs/static/c-ide/kill-func-body.gif diff --git a/html/static/c-ide/mark-defun.gif b/docs/static/c-ide/mark-defun.gif similarity index 100% rename from html/static/c-ide/mark-defun.gif rename to docs/static/c-ide/mark-defun.gif diff --git a/html/static/c-ide/mark-func-body.gif b/docs/static/c-ide/mark-func-body.gif similarity index 100% rename from html/static/c-ide/mark-func-body.gif rename to docs/static/c-ide/mark-func-body.gif diff --git a/html/static/c-ide/moo-complete.png b/docs/static/c-ide/moo-complete.png similarity index 100% rename from html/static/c-ide/moo-complete.png rename to docs/static/c-ide/moo-complete.png diff --git a/html/static/c-ide/moo-jump-local.gif b/docs/static/c-ide/moo-jump-local.gif similarity index 100% rename from html/static/c-ide/moo-jump-local.gif rename to docs/static/c-ide/moo-jump-local.gif diff --git a/html/static/c-ide/projectile-find-other-file.gif b/docs/static/c-ide/projectile-find-other-file.gif similarity index 100% rename from html/static/c-ide/projectile-find-other-file.gif rename to docs/static/c-ide/projectile-find-other-file.gif diff --git a/html/static/c-ide/semantic-boost-demo.gif b/docs/static/c-ide/semantic-boost-demo.gif similarity index 100% rename from html/static/c-ide/semantic-boost-demo.gif rename to docs/static/c-ide/semantic-boost-demo.gif diff --git a/html/static/c-ide/semantic-idle-summary-lambda.gif b/docs/static/c-ide/semantic-idle-summary-lambda.gif similarity index 100% rename from html/static/c-ide/semantic-idle-summary-lambda.gif rename to docs/static/c-ide/semantic-idle-summary-lambda.gif diff --git a/html/static/c-ide/semantic-idle-summary-variable.gif b/docs/static/c-ide/semantic-idle-summary-variable.gif similarity index 100% rename from html/static/c-ide/semantic-idle-summary-variable.gif rename to docs/static/c-ide/semantic-idle-summary-variable.gif diff --git a/html/static/c-ide/semantic-parsing.gif b/docs/static/c-ide/semantic-parsing.gif similarity index 100% rename from html/static/c-ide/semantic-parsing.gif rename to docs/static/c-ide/semantic-parsing.gif diff --git a/html/static/c-ide/semantic-sticky-func.gif b/docs/static/c-ide/semantic-sticky-func.gif similarity index 100% rename from html/static/c-ide/semantic-sticky-func.gif rename to docs/static/c-ide/semantic-sticky-func.gif diff --git a/html/static/c-ide/semantic-symref.gif b/docs/static/c-ide/semantic-symref.gif similarity index 100% rename from html/static/c-ide/semantic-symref.gif rename to docs/static/c-ide/semantic-symref.gif diff --git a/html/static/c-ide/senator-go-to-up-reference.gif b/docs/static/c-ide/senator-go-to-up-reference.gif similarity index 100% rename from html/static/c-ide/senator-go-to-up-reference.gif rename to docs/static/c-ide/senator-go-to-up-reference.gif diff --git a/html/static/c-ide/senator-jump.gif b/docs/static/c-ide/senator-jump.gif similarity index 100% rename from html/static/c-ide/senator-jump.gif rename to docs/static/c-ide/senator-jump.gif diff --git a/html/static/c-ide/senator-kill-yank-tag.gif b/docs/static/c-ide/senator-kill-yank-tag.gif similarity index 100% rename from html/static/c-ide/senator-kill-yank-tag.gif rename to docs/static/c-ide/senator-kill-yank-tag.gif diff --git a/html/static/c-ide/senator-next-previous-tag.gif b/docs/static/c-ide/senator-next-previous-tag.gif similarity index 100% rename from html/static/c-ide/senator-next-previous-tag.gif rename to docs/static/c-ide/senator-next-previous-tag.gif diff --git a/html/static/c-ide/senator-yank-tag.gif b/docs/static/c-ide/senator-yank-tag.gif similarity index 100% rename from html/static/c-ide/senator-yank-tag.gif rename to docs/static/c-ide/senator-yank-tag.gif diff --git a/html/static/c-ide/sr-speedbar.gif b/docs/static/c-ide/sr-speedbar.gif similarity index 100% rename from html/static/c-ide/sr-speedbar.gif rename to docs/static/c-ide/sr-speedbar.gif diff --git a/html/static/c-x-3.gif b/docs/static/c-x-3.gif similarity index 100% rename from html/static/c-x-3.gif rename to docs/static/c-x-3.gif diff --git a/html/static/c-x-c-x.gif b/docs/static/c-x-c-x.gif similarity index 100% rename from html/static/c-x-c-x.gif rename to docs/static/c-x-c-x.gif diff --git a/html/static/candidates.jpg b/docs/static/candidates.jpg similarity index 100% rename from html/static/candidates.jpg rename to docs/static/candidates.jpg diff --git a/html/static/comment.gif b/docs/static/comment.gif similarity index 100% rename from html/static/comment.gif rename to docs/static/comment.gif diff --git a/html/static/dired-subdir.gif b/docs/static/dired-subdir.gif similarity index 100% rename from html/static/dired-subdir.gif rename to docs/static/dired-subdir.gif diff --git a/html/static/emacs-manual-toc.gif b/docs/static/emacs-manual-toc.gif similarity index 100% rename from html/static/emacs-manual-toc.gif rename to docs/static/emacs-manual-toc.gif diff --git a/html/static/emacs-read-pdf.gif b/docs/static/emacs-read-pdf.gif similarity index 100% rename from html/static/emacs-read-pdf.gif rename to docs/static/emacs-read-pdf.gif diff --git a/html/static/ffap.gif b/docs/static/ffap.gif similarity index 100% rename from html/static/ffap.gif rename to docs/static/ffap.gif diff --git a/html/static/find-file-ido.gif b/docs/static/find-file-ido.gif similarity index 100% rename from html/static/find-file-ido.gif rename to docs/static/find-file-ido.gif diff --git a/html/static/find-file-normal.gif b/docs/static/find-file-normal.gif similarity index 100% rename from html/static/find-file-normal.gif rename to docs/static/find-file-normal.gif diff --git a/html/static/frames-gui.gif b/docs/static/frames-gui.gif similarity index 100% rename from html/static/frames-gui.gif rename to docs/static/frames-gui.gif diff --git a/html/static/frames-term.gif b/docs/static/frames-term.gif similarity index 100% rename from html/static/frames-term.gif rename to docs/static/frames-term.gif diff --git a/html/static/func_args.jpg b/docs/static/func_args.jpg similarity index 100% rename from html/static/func_args.jpg rename to docs/static/func_args.jpg diff --git a/html/static/gdb-many-windows1.png b/docs/static/gdb-many-windows1.png similarity index 100% rename from html/static/gdb-many-windows1.png rename to docs/static/gdb-many-windows1.png diff --git a/html/static/gdb-many-windows2.png b/docs/static/gdb-many-windows2.png similarity index 100% rename from html/static/gdb-many-windows2.png rename to docs/static/gdb-many-windows2.png diff --git a/html/static/ggtags-create-tags.gif b/docs/static/ggtags-create-tags.gif similarity index 100% rename from html/static/ggtags-create-tags.gif rename to docs/static/ggtags-create-tags.gif diff --git a/html/static/ggtags-find-file-bug.gif b/docs/static/ggtags-find-file-bug.gif similarity index 100% rename from html/static/ggtags-find-file-bug.gif rename to docs/static/ggtags-find-file-bug.gif diff --git a/html/static/ggtags-find-file.gif b/docs/static/ggtags-find-file.gif similarity index 100% rename from html/static/ggtags-find-file.gif rename to docs/static/ggtags-find-file.gif diff --git a/html/static/ggtags-rerun.gif b/docs/static/ggtags-rerun.gif similarity index 100% rename from html/static/ggtags-rerun.gif rename to docs/static/ggtags-rerun.gif diff --git a/html/static/ggtags-view-tag-history.gif b/docs/static/ggtags-view-tag-history.gif similarity index 100% rename from html/static/ggtags-view-tag-history.gif rename to docs/static/ggtags-view-tag-history.gif diff --git a/html/static/gnu-global-dir-struct.jpg b/docs/static/gnu-global-dir-struct.jpg similarity index 100% rename from html/static/gnu-global-dir-struct.jpg rename to docs/static/gnu-global-dir-struct.jpg diff --git a/html/static/grep.gif b/docs/static/grep.gif similarity index 100% rename from html/static/grep.gif rename to docs/static/grep.gif diff --git a/html/static/helm-buffer-list.gif b/docs/static/helm-buffer-list.gif similarity index 100% rename from html/static/helm-buffer-list.gif rename to docs/static/helm-buffer-list.gif diff --git a/html/static/helm-new-file-buffer.gif b/docs/static/helm-new-file-buffer.gif similarity index 100% rename from html/static/helm-new-file-buffer.gif rename to docs/static/helm-new-file-buffer.gif diff --git a/html/static/helm-projectile/helm-projectile-1.gif b/docs/static/helm-projectile/helm-projectile-1.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-1.gif rename to docs/static/helm-projectile/helm-projectile-1.gif diff --git a/html/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif b/docs/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif rename to docs/static/helm-projectile/helm-projectile-add-files-virtual-dir.gif diff --git a/html/static/helm-projectile/helm-projectile-complete-at-point.gif b/docs/static/helm-projectile/helm-projectile-complete-at-point.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-complete-at-point.gif rename to docs/static/helm-projectile/helm-projectile-complete-at-point.gif diff --git a/html/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif b/docs/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif rename to docs/static/helm-projectile/helm-projectile-delete-files-virtual-dir.gif diff --git a/html/static/helm-projectile/helm-projectile-etags.gif b/docs/static/helm-projectile/helm-projectile-etags.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-etags.gif rename to docs/static/helm-projectile/helm-projectile-etags.gif diff --git a/html/static/helm-projectile/helm-projectile-find-file-as-root.gif b/docs/static/helm-projectile/helm-projectile-find-file-as-root.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-file-as-root.gif rename to docs/static/helm-projectile/helm-projectile-find-file-as-root.gif diff --git a/html/static/helm-projectile/helm-projectile-find-file-copy.gif b/docs/static/helm-projectile/helm-projectile-find-file-copy.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-file-copy.gif rename to docs/static/helm-projectile/helm-projectile-find-file-copy.gif diff --git a/html/static/helm-projectile/helm-projectile-find-file-delete.gif b/docs/static/helm-projectile/helm-projectile-find-file-delete.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-file-delete.gif rename to docs/static/helm-projectile/helm-projectile-find-file-delete.gif diff --git a/html/static/helm-projectile/helm-projectile-find-file-ediff.gif b/docs/static/helm-projectile/helm-projectile-find-file-ediff.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-file-ediff.gif rename to docs/static/helm-projectile/helm-projectile-find-file-ediff.gif diff --git a/html/static/helm-projectile/helm-projectile-find-file-other-window.gif b/docs/static/helm-projectile/helm-projectile-find-file-other-window.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-file-other-window.gif rename to docs/static/helm-projectile/helm-projectile-find-file-other-window.gif diff --git a/html/static/helm-projectile/helm-projectile-find-files-1.gif b/docs/static/helm-projectile/helm-projectile-find-files-1.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-files-1.gif rename to docs/static/helm-projectile/helm-projectile-find-files-1.gif diff --git a/html/static/helm-projectile/helm-projectile-find-files-dwim-1.gif b/docs/static/helm-projectile/helm-projectile-find-files-dwim-1.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-files-dwim-1.gif rename to docs/static/helm-projectile/helm-projectile-find-files-dwim-1.gif diff --git a/html/static/helm-projectile/helm-projectile-find-other-file.gif b/docs/static/helm-projectile/helm-projectile-find-other-file.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-find-other-file.gif rename to docs/static/helm-projectile/helm-projectile-find-other-file.gif diff --git a/html/static/helm-projectile/helm-projectile-grep.gif b/docs/static/helm-projectile/helm-projectile-grep.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-grep.gif rename to docs/static/helm-projectile/helm-projectile-grep.gif diff --git a/html/static/helm-projectile/helm-projectile-new-virtual-dir.gif b/docs/static/helm-projectile/helm-projectile-new-virtual-dir.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-new-virtual-dir.gif rename to docs/static/helm-projectile/helm-projectile-new-virtual-dir.gif diff --git a/html/static/helm-projectile/helm-projectile-remove-project.gif b/docs/static/helm-projectile/helm-projectile-remove-project.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-remove-project.gif rename to docs/static/helm-projectile/helm-projectile-remove-project.gif diff --git a/html/static/helm-projectile/helm-projectile-rename-file.gif b/docs/static/helm-projectile/helm-projectile-rename-file.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-rename-file.gif rename to docs/static/helm-projectile/helm-projectile-rename-file.gif diff --git a/html/static/helm-projectile/helm-projectile-serial-rename-file.gif b/docs/static/helm-projectile/helm-projectile-serial-rename-file.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-serial-rename-file.gif rename to docs/static/helm-projectile/helm-projectile-serial-rename-file.gif diff --git a/html/static/helm-projectile/helm-projectile-switch-project.gif b/docs/static/helm-projectile/helm-projectile-switch-project.gif similarity index 100% rename from html/static/helm-projectile/helm-projectile-switch-project.gif rename to docs/static/helm-projectile/helm-projectile-switch-project.gif diff --git a/html/static/helm_projectile.gif b/docs/static/helm_projectile.gif similarity index 100% rename from html/static/helm_projectile.gif rename to docs/static/helm_projectile.gif diff --git a/html/static/ibuffer-dired-group.gif b/docs/static/ibuffer-dired-group.gif similarity index 100% rename from html/static/ibuffer-dired-group.gif rename to docs/static/ibuffer-dired-group.gif diff --git a/html/static/ibuffer-filter-major.gif b/docs/static/ibuffer-filter-major.gif similarity index 100% rename from html/static/ibuffer-filter-major.gif rename to docs/static/ibuffer-filter-major.gif diff --git a/html/static/insert_buf2_macro.gif b/docs/static/insert_buf2_macro.gif similarity index 100% rename from html/static/insert_buf2_macro.gif rename to docs/static/insert_buf2_macro.gif diff --git a/html/static/jump_headers.gif b/docs/static/jump_headers.gif similarity index 100% rename from html/static/jump_headers.gif rename to docs/static/jump_headers.gif diff --git a/html/static/linux-dir.gif b/docs/static/linux-dir.gif similarity index 100% rename from html/static/linux-dir.gif rename to docs/static/linux-dir.gif diff --git a/html/static/live_grep.gif b/docs/static/live_grep.gif similarity index 100% rename from html/static/live_grep.gif rename to docs/static/live_grep.gif diff --git a/html/static/macro.gif b/docs/static/macro.gif similarity index 100% rename from html/static/macro.gif rename to docs/static/macro.gif diff --git a/html/static/macro2_full.gif b/docs/static/macro2_full.gif similarity index 100% rename from html/static/macro2_full.gif rename to docs/static/macro2_full.gif diff --git a/html/static/magit.gif b/docs/static/magit.gif similarity index 100% rename from html/static/magit.gif rename to docs/static/magit.gif diff --git a/html/static/modeline.jpg b/docs/static/modeline.jpg similarity index 100% rename from html/static/modeline.jpg rename to docs/static/modeline.jpg diff --git a/html/static/multiple-windows.gif b/docs/static/multiple-windows.gif similarity index 100% rename from html/static/multiple-windows.gif rename to docs/static/multiple-windows.gif diff --git a/html/static/occur-edit.gif b/docs/static/occur-edit.gif similarity index 100% rename from html/static/occur-edit.gif rename to docs/static/occur-edit.gif diff --git a/html/static/occur.gif b/docs/static/occur.gif similarity index 100% rename from html/static/occur.gif rename to docs/static/occur.gif diff --git a/html/static/part3/backward-sexp.gif b/docs/static/part3/backward-sexp.gif similarity index 100% rename from html/static/part3/backward-sexp.gif rename to docs/static/part3/backward-sexp.gif diff --git a/html/static/part3/customize.jpg b/docs/static/part3/customize.jpg similarity index 100% rename from html/static/part3/customize.jpg rename to docs/static/part3/customize.jpg diff --git a/html/static/part3/diff-hl-buffer.png b/docs/static/part3/diff-hl-buffer.png similarity index 100% rename from html/static/part3/diff-hl-buffer.png rename to docs/static/part3/diff-hl-buffer.png diff --git a/html/static/part3/diff-hl-dired.png b/docs/static/part3/diff-hl-dired.png similarity index 100% rename from html/static/part3/diff-hl-dired.png rename to docs/static/part3/diff-hl-dired.png diff --git a/html/static/part3/diff-hl-margin.png b/docs/static/part3/diff-hl-margin.png similarity index 100% rename from html/static/part3/diff-hl-margin.png rename to docs/static/part3/diff-hl-margin.png diff --git a/html/static/part3/dired-plus.jpg b/docs/static/part3/dired-plus.jpg similarity index 100% rename from html/static/part3/dired-plus.jpg rename to docs/static/part3/dired-plus.jpg diff --git a/html/static/part3/discover-my-major.png b/docs/static/part3/discover-my-major.png similarity index 100% rename from html/static/part3/discover-my-major.png rename to docs/static/part3/discover-my-major.png diff --git a/html/static/part3/forward-sexp.gif b/docs/static/part3/forward-sexp.gif similarity index 100% rename from html/static/part3/forward-sexp.gif rename to docs/static/part3/forward-sexp.gif diff --git a/html/static/part3/golden-ratio.gif b/docs/static/part3/golden-ratio.gif similarity index 100% rename from html/static/part3/golden-ratio.gif rename to docs/static/part3/golden-ratio.gif diff --git a/html/static/part3/helm-all-mark-rings.gif b/docs/static/part3/helm-all-mark-rings.gif similarity index 100% rename from html/static/part3/helm-all-mark-rings.gif rename to docs/static/part3/helm-all-mark-rings.gif diff --git a/html/static/part3/helm-autoresize-fix.gif b/docs/static/part3/helm-autoresize-fix.gif similarity index 100% rename from html/static/part3/helm-autoresize-fix.gif rename to docs/static/part3/helm-autoresize-fix.gif diff --git a/html/static/part3/helm-autoresize-mode.gif b/docs/static/part3/helm-autoresize-mode.gif similarity index 100% rename from html/static/part3/helm-autoresize-mode.gif rename to docs/static/part3/helm-autoresize-mode.gif diff --git a/html/static/part3/helm-calc.gif b/docs/static/part3/helm-calc.gif similarity index 100% rename from html/static/part3/helm-calc.gif rename to docs/static/part3/helm-calc.gif diff --git a/html/static/part3/helm-color.gif b/docs/static/part3/helm-color.gif similarity index 100% rename from html/static/part3/helm-color.gif rename to docs/static/part3/helm-color.gif diff --git a/html/static/part3/helm-eshell-history.gif b/docs/static/part3/helm-eshell-history.gif similarity index 100% rename from html/static/part3/helm-eshell-history.gif rename to docs/static/part3/helm-eshell-history.gif diff --git a/html/static/part3/helm-eval-expression.gif b/docs/static/part3/helm-eval-expression.gif similarity index 100% rename from html/static/part3/helm-eval-expression.gif rename to docs/static/part3/helm-eval-expression.gif diff --git a/html/static/part3/helm-find-files.gif b/docs/static/part3/helm-find-files.gif similarity index 100% rename from html/static/part3/helm-find-files.gif rename to docs/static/part3/helm-find-files.gif diff --git a/html/static/part3/helm-find.gif b/docs/static/part3/helm-find.gif similarity index 100% rename from html/static/part3/helm-find.gif rename to docs/static/part3/helm-find.gif diff --git a/html/static/part3/helm-google-suggest.gif b/docs/static/part3/helm-google-suggest.gif similarity index 100% rename from html/static/part3/helm-google-suggest.gif rename to docs/static/part3/helm-google-suggest.gif diff --git a/html/static/part3/helm-kill-ring.gif b/docs/static/part3/helm-kill-ring.gif similarity index 100% rename from html/static/part3/helm-kill-ring.gif rename to docs/static/part3/helm-kill-ring.gif diff --git a/html/static/part3/helm-locate.gif b/docs/static/part3/helm-locate.gif similarity index 100% rename from html/static/part3/helm-locate.gif rename to docs/static/part3/helm-locate.gif diff --git a/html/static/part3/helm-m-x.gif b/docs/static/part3/helm-m-x.gif similarity index 100% rename from html/static/part3/helm-m-x.gif rename to docs/static/part3/helm-m-x.gif diff --git a/html/static/part3/helm-man-woman.gif b/docs/static/part3/helm-man-woman.gif similarity index 100% rename from html/static/part3/helm-man-woman.gif rename to docs/static/part3/helm-man-woman.gif diff --git a/html/static/part3/helm-mini.gif b/docs/static/part3/helm-mini.gif similarity index 100% rename from html/static/part3/helm-mini.gif rename to docs/static/part3/helm-mini.gif diff --git a/html/static/part3/helm-occur.gif b/docs/static/part3/helm-occur.gif similarity index 100% rename from html/static/part3/helm-occur.gif rename to docs/static/part3/helm-occur.gif diff --git a/html/static/part3/helm-regexp.gif b/docs/static/part3/helm-regexp.gif similarity index 100% rename from html/static/part3/helm-regexp.gif rename to docs/static/part3/helm-regexp.gif diff --git a/html/static/part3/helm-registers.gif b/docs/static/part3/helm-registers.gif similarity index 100% rename from html/static/part3/helm-registers.gif rename to docs/static/part3/helm-registers.gif diff --git a/html/static/part3/helm-semantic-or-imenu-2.gif b/docs/static/part3/helm-semantic-or-imenu-2.gif similarity index 100% rename from html/static/part3/helm-semantic-or-imenu-2.gif rename to docs/static/part3/helm-semantic-or-imenu-2.gif diff --git a/html/static/part3/helm-semantic-or-imenu.gif b/docs/static/part3/helm-semantic-or-imenu.gif similarity index 100% rename from html/static/part3/helm-semantic-or-imenu.gif rename to docs/static/part3/helm-semantic-or-imenu.gif diff --git a/html/static/part3/helm-surfraw.gif b/docs/static/part3/helm-surfraw.gif similarity index 100% rename from html/static/part3/helm-surfraw.gif rename to docs/static/part3/helm-surfraw.gif diff --git a/html/static/part3/helm-top.gif b/docs/static/part3/helm-top.gif similarity index 100% rename from html/static/part3/helm-top.gif rename to docs/static/part3/helm-top.gif diff --git a/html/static/part3/ibuffer-vc.png b/docs/static/part3/ibuffer-vc.png similarity index 100% rename from html/static/part3/ibuffer-vc.png rename to docs/static/part3/ibuffer-vc.png diff --git a/html/static/part3/kill-sexp.gif b/docs/static/part3/kill-sexp.gif similarity index 100% rename from html/static/part3/kill-sexp.gif rename to docs/static/part3/kill-sexp.gif diff --git a/html/static/part3/mark-sexp.gif b/docs/static/part3/mark-sexp.gif similarity index 100% rename from html/static/part3/mark-sexp.gif rename to docs/static/part3/mark-sexp.gif diff --git a/html/static/part3/nyan-mode.png b/docs/static/part3/nyan-mode.png similarity index 100% rename from html/static/part3/nyan-mode.png rename to docs/static/part3/nyan-mode.png diff --git a/html/static/part3/projectile.png b/docs/static/part3/projectile.png similarity index 100% rename from html/static/part3/projectile.png rename to docs/static/part3/projectile.png diff --git a/html/static/part3/rainbow-mode.png b/docs/static/part3/rainbow-mode.png similarity index 100% rename from html/static/part3/rainbow-mode.png rename to docs/static/part3/rainbow-mode.png diff --git a/html/static/part3/smex.png b/docs/static/part3/smex.png similarity index 100% rename from html/static/part3/smex.png rename to docs/static/part3/smex.png diff --git a/html/static/part3/transpose-sexp.gif b/docs/static/part3/transpose-sexp.gif similarity index 100% rename from html/static/part3/transpose-sexp.gif rename to docs/static/part3/transpose-sexp.gif diff --git a/html/static/part3/undo-tree.jpg b/docs/static/part3/undo-tree.jpg similarity index 100% rename from html/static/part3/undo-tree.jpg rename to docs/static/part3/undo-tree.jpg diff --git a/html/static/part3/ztree-diff.png b/docs/static/part3/ztree-diff.png similarity index 100% rename from html/static/part3/ztree-diff.png rename to docs/static/part3/ztree-diff.png diff --git a/html/static/part3/ztree-dir.png b/docs/static/part3/ztree-dir.png similarity index 100% rename from html/static/part3/ztree-dir.png rename to docs/static/part3/ztree-dir.png diff --git a/html/static/path-variable-windows.jpg b/docs/static/path-variable-windows.jpg similarity index 100% rename from html/static/path-variable-windows.jpg rename to docs/static/path-variable-windows.jpg diff --git a/html/static/performance.gif b/docs/static/performance.gif similarity index 100% rename from html/static/performance.gif rename to docs/static/performance.gif diff --git a/html/static/prepare_macro.gif b/docs/static/prepare_macro.gif similarity index 100% rename from html/static/prepare_macro.gif rename to docs/static/prepare_macro.gif diff --git a/html/static/proglang/aggressive-indent.gif b/docs/static/proglang/aggressive-indent.gif similarity index 100% rename from html/static/proglang/aggressive-indent.gif rename to docs/static/proglang/aggressive-indent.gif diff --git a/html/static/proglang/emacs_home.png b/docs/static/proglang/emacs_home.png similarity index 100% rename from html/static/proglang/emacs_home.png rename to docs/static/proglang/emacs_home.png diff --git a/html/static/proglang/emacs_path.png b/docs/static/proglang/emacs_path.png similarity index 100% rename from html/static/proglang/emacs_path.png rename to docs/static/proglang/emacs_path.png diff --git a/html/static/proglang/forward-backward-parens.gif b/docs/static/proglang/forward-backward-parens.gif similarity index 100% rename from html/static/proglang/forward-backward-parens.gif rename to docs/static/proglang/forward-backward-parens.gif diff --git a/html/static/proglang/geiser-demo.gif b/docs/static/proglang/geiser-demo.gif similarity index 100% rename from html/static/proglang/geiser-demo.gif rename to docs/static/proglang/geiser-demo.gif diff --git a/html/static/proglang/monokai.png b/docs/static/proglang/monokai.png similarity index 100% rename from html/static/proglang/monokai.png rename to docs/static/proglang/monokai.png diff --git a/html/static/proglang/repl-autodoc.png b/docs/static/proglang/repl-autodoc.png similarity index 100% rename from html/static/proglang/repl-autodoc.png rename to docs/static/proglang/repl-autodoc.png diff --git a/html/static/proglang/repl-mod.png b/docs/static/proglang/repl-mod.png similarity index 100% rename from html/static/proglang/repl-mod.png rename to docs/static/proglang/repl-mod.png diff --git a/html/static/proglang/sml-completion.gif b/docs/static/proglang/sml-completion.gif similarity index 100% rename from html/static/proglang/sml-completion.gif rename to docs/static/proglang/sml-completion.gif diff --git a/html/static/proglang/sml-helm-imenu.gif b/docs/static/proglang/sml-helm-imenu.gif similarity index 100% rename from html/static/proglang/sml-helm-imenu.gif rename to docs/static/proglang/sml-helm-imenu.gif diff --git a/html/static/proglang/sml-send-buffer.gif b/docs/static/proglang/sml-send-buffer.gif similarity index 100% rename from html/static/proglang/sml-send-buffer.gif rename to docs/static/proglang/sml-send-buffer.gif diff --git a/html/static/proglang/sml-send-region.gif b/docs/static/proglang/sml-send-region.gif similarity index 100% rename from html/static/proglang/sml-send-region.gif rename to docs/static/proglang/sml-send-region.gif diff --git a/html/static/proglang/sml-start-proc.gif b/docs/static/proglang/sml-start-proc.gif similarity index 100% rename from html/static/proglang/sml-start-proc.gif rename to docs/static/proglang/sml-start-proc.gif diff --git a/html/static/proglang/zenburn.png b/docs/static/proglang/zenburn.png similarity index 100% rename from html/static/proglang/zenburn.png rename to docs/static/proglang/zenburn.png diff --git a/html/static/reg_a.gif b/docs/static/reg_a.gif similarity index 100% rename from html/static/reg_a.gif rename to docs/static/reg_a.gif diff --git a/html/static/reg_b.gif b/docs/static/reg_b.gif similarity index 100% rename from html/static/reg_b.gif rename to docs/static/reg_b.gif diff --git a/html/static/reg_c.gif b/docs/static/reg_c.gif similarity index 100% rename from html/static/reg_c.gif rename to docs/static/reg_c.gif diff --git a/html/static/reg_d.gif b/docs/static/reg_d.gif similarity index 100% rename from html/static/reg_d.gif rename to docs/static/reg_d.gif diff --git a/html/static/register-windows.gif b/docs/static/register-windows.gif similarity index 100% rename from html/static/register-windows.gif rename to docs/static/register-windows.gif diff --git a/html/static/setup-emacs-windows/cygwin_example_install.png b/docs/static/setup-emacs-windows/cygwin_example_install.png similarity index 100% rename from html/static/setup-emacs-windows/cygwin_example_install.png rename to docs/static/setup-emacs-windows/cygwin_example_install.png diff --git a/html/static/setup-emacs-windows/emacs_xwidgets_windows.png b/docs/static/setup-emacs-windows/emacs_xwidgets_windows.png similarity index 100% rename from html/static/setup-emacs-windows/emacs_xwidgets_windows.png rename to docs/static/setup-emacs-windows/emacs_xwidgets_windows.png diff --git a/html/static/setup-emacs-windows/pdf_tools_windows_latex.gif b/docs/static/setup-emacs-windows/pdf_tools_windows_latex.gif similarity index 100% rename from html/static/setup-emacs-windows/pdf_tools_windows_latex.gif rename to docs/static/setup-emacs-windows/pdf_tools_windows_latex.gif diff --git a/html/static/setup-emacs-windows/xserver_example.png b/docs/static/setup-emacs-windows/xserver_example.png similarity index 100% rename from html/static/setup-emacs-windows/xserver_example.png rename to docs/static/setup-emacs-windows/xserver_example.png diff --git a/html/static/vc-diff.jpg b/docs/static/vc-diff.jpg similarity index 100% rename from html/static/vc-diff.jpg rename to docs/static/vc-diff.jpg diff --git a/html/static/worg.css b/docs/static/worg.css similarity index 100% rename from html/static/worg.css rename to docs/static/worg.css From 54fc81ea02ce34ad6e7815e6f90539869119a55a Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Mon, 5 Dec 2016 10:32:37 -0500 Subject: [PATCH 06/11] update README.md --- README.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 81d4620..2fa7b0d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,30 @@ Emacs Mini Manual ================= -Check it out: http://tuhdo.github.io/emacs-tutor.html +1] Viewable at: https://boruch-baum.github.io/emacs_mini_manual/ -If you can improve, feel free to create pull request. The Org files are in emacs-tutor/ library. +2] The page names are: + + * Emacs Mini Manual (PART 1) - THE BASICS + + * Emacs Mini Manual (PART 2) - LISP PRIMER: WHY PARENTHESES MATTER + + * Emacs Mini Manual (PART 3) - CUSTOMIZING AND EXTENDING EMACS + + * Setup C/C++ Development Environment for Emacs + + + See also related repository + https://github.com/Boruch-Baum/emacs-c-ide-demo + + * A Package in a league of its own: Helm + + * Exploring large projects with Projectile and Helm Projectile + + * Emacs for Programming Languages course on Coursera + + * Setup Emacs with PDF Tools and Xwidgets web browser on Windows + +3] The pages are produced from emacs org files, which are in the `org' + folder. See `org/publish.el' for how to convert them to html. + +4] This is a fork of https://github.com/tuhdo/tuhdo.github.io From bd1f1bfacd7c02626e1a68830fbe807c5d434066 Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Mon, 5 Dec 2016 10:54:36 -0500 Subject: [PATCH 07/11] add CHANGELOG file, and update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2fa7b0d..0b1e5f6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ Emacs Mini Manual ================= -1] Viewable at: https://boruch-baum.github.io/emacs_mini_manual/ +1] The manual is viewable at: + https://boruch-baum.github.io/emacs_mini_manual/ 2] The page names are: @@ -28,3 +29,5 @@ Emacs Mini Manual folder. See `org/publish.el' for how to convert them to html. 4] This is a fork of https://github.com/tuhdo/tuhdo.github.io + + + Refer to CHANGELOG file for how I've altered it. From 3f77e0cc2fdd9cd883a2fa2044dfccb59197a019 Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Mon, 5 Dec 2016 12:36:21 -0500 Subject: [PATCH 08/11] * Rename emacs-tutor.{org,html} to emacs-tutor1.{org,html} * Publishing will not inject javascript for `statcounter' or `disqus comments'. * Update publish.el for all naming changes. * Compact publish.el and remove what seems to be cruft files 'ebrowse.html', c-ide-irony_bak.html', `planet.css'. The files were retained in the `org' folder just in case, pending more detailed review. * Re-publish html using new publish.el. * Remove cruft file `cedet.org'. * Add files TODO, CHANGELOG. * Add header and reference to `index.org'. --- CHANGELOG | 11 + TODO | 5 + docs/c-ide.html | 1658 ++++---- docs/emacs-for-proglang.html | 853 ++-- docs/{emacs-tutor.html => emacs-tutor1.html} | 3527 +++++++++-------- docs/emacs-tutor2.html | 214 +- docs/emacs-tutor3.html | 3184 ++++++++------- docs/helm-intro.html | 1231 +++--- docs/helm-projectile.html | 249 +- docs/index.html | 98 +- docs/setup-emacs-windows.html | 183 +- .../cygwin_example_install.png | Bin 138455 -> 0 bytes org/{c-ide-irony_bak.org => c-ide_old.org} | 0 org/cedet.org | 315 -- org/{ebrowse.org => ebrowse_old.org} | 0 org/{emacs-tutor.org => emacs-tutor1.org} | 0 org/index.org | 20 +- org/publish.el | 28 +- 18 files changed, 5675 insertions(+), 5901 deletions(-) create mode 100644 CHANGELOG create mode 100644 TODO rename docs/{emacs-tutor.html => emacs-tutor1.html} (61%) delete mode 100755 docs/static/setup-emacs-windows/cygwin_example_install.png rename org/{c-ide-irony_bak.org => c-ide_old.org} (100%) delete mode 100644 org/cedet.org rename org/{ebrowse.org => ebrowse_old.org} (100%) rename org/{emacs-tutor.org => emacs-tutor1.org} (100%) diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..27efee8 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,11 @@ +Changelog + +* Remove cruft files + +* Reorganize file structure + +* Add ability to publish html from emacs org files + +* Corrections / edits to c-ide.org + +* Remove javascript statcounter and disqus comments diff --git a/TODO b/TODO new file mode 100644 index 0000000..c21a5ee --- /dev/null +++ b/TODO @@ -0,0 +1,5 @@ +TODO + +* Determine whether ebrowse.org is cruft + +* Determine whether anything useful is in c-ide-irony_bak.org diff --git a/docs/c-ide.html b/docs/c-ide.html index ea45737..034fc89 100644 --- a/docs/c-ide.html +++ b/docs/c-ide.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - C/C++ Development Environment for Emacs + + - - + -

C/C++ Development Environment for Emacs

Table of Contents

@@ -274,16 +182,19 @@

Table of Contents

read it offline: https://github.com/tuhdo/tuhdo.github.io

-
-

Introductory demos

-
-
+
+

1 Introductory demos

+
+

+Here are some visual examples of the emacs IDE in action: +

  • Switching between .h and .c/.cpp anywhere in the project like Linux kernel. If more than one file exists, it displays a list of possible candidates. The command collects files of the same names -but different across the project:
  • +but different across the project: +
@@ -293,8 +204,9 @@

Introductory demos

    -
  • Jump around Linux kernel source with ease using helm-gtags. The -demo begins when "START" appears at the bottom:
  • +
  • Jumping around Linux kernel source with ease using helm-gtags. The +demo begins when "START" appears at the bottom: +
@@ -304,18 +216,18 @@

Introductory demos

    -
  • -Interactive outline tree using moo-jump-local from function-args +

  • Interactive outline tree using moo-jump-local from function-args package: -

    moo-jump-local.gif

    -
  • +
+ -
  • Static outline tree as a file browser:
  • +
  • Static outline tree as a file browser: +
  • @@ -325,7 +237,8 @@

    Introductory demos

      -
    • Symbol references:
    • +
    • Symbol references: +
    @@ -335,7 +248,8 @@

    Introductory demos

      -
    • Code completion 1:
    • +
    • Code completion 1: +
    @@ -345,7 +259,8 @@

    Introductory demos

      -
    • Code completion 2:
    • +
    • Code completion 2: +
    @@ -355,7 +270,8 @@

    Introductory demos

      -
    • Header completion:
    • +
    • Header completion: +
    @@ -365,7 +281,8 @@

    Introductory demos

      -
    • Show function interface and variable definition at the bottom:
    • +
    • Show function interface and variable definition at the bottom: +
    @@ -388,7 +305,8 @@

    Introductory demos

      -
    • Show current function your cursor is inside at the top:
    • +
    • Show current function your cursor is inside at the top: +
    @@ -398,7 +316,8 @@

    Introductory demos

      -
    • Compilation support:
    • +
    • Compilation support: +
    @@ -408,7 +327,8 @@

    Introductory demos

      -
    • Beautiful compile output:
    • +
    • Beautiful compile output: +
    @@ -418,7 +338,8 @@

    Introductory demos

      -
    • Fancy GDB debugging:
    • +
    • Fancy GDB debugging: +
    @@ -428,7 +349,8 @@

    Introductory demos

      -
    • Getting man pages for symbol at cursor:
    • +
    • Getting man pages for symbol at cursor: +
    @@ -436,270 +358,267 @@

    Introductory demos

    helm-man-woman.gif

    + + -
    -

    Quick setup

    -
    -
    - -

    -I've prepared an Emacs repository that is properly configured for -demonstration purposes. You can clone it and play with it without having to -manually copy and paste all the setup Elisp code -throughout the guide. When installed and run the first time, the demo -repository will download from melpa, install, and compile all the packages -it needs. Note that depending on your internet connection and processor speeds, -this may take a while. -

    - -
      -
    1. Install GNU Global from your distribution's package manager (Linux / Mac) or from the Win32 port (Windows). If none is available, download the sources here and manually build the package.

      -
    2. Backup your ~/.emacs.d elsewhere.

    3. -
    4. If emacs is not already running, start it.

    5. -
    6. Update your melpa database: M-x package-list-packages

    7. -
    8. Clone the repository into your ~/.emacs.d folder. -

      -
      git clone https://github.com/tuhdo/emacs-c-ide-demo.git ~/.emacs.d
      -  
      -

    9. -
    10. You may possibly want to edit your new ~/.emacs.d/init.el file for two options. -

        -
      1. The demo repository can use either helm-gtags (the default), or ggtags. - If you want to use ggtags, comment this line in init.el: -

        -
        (require 'setup-helm-gtags)
        -       
        -
        - And uncomment this line: -
        -
        ;; (require 'setup-ggtags)
        -       
        -
        -

      2. -
      3. The demo uses Helm. If you're not already familiar with Helm, read - my guide. - If you don't want to use Helm, also comment this line in init.el: -

        -
        (require 'setup-helm)
        -        
        -
        -

      4. -
      -
    - -

    That does it! To start using the demo, just type M-x load-file RET init.el. Continue reading this guide for its operational directions, without needing to bother to perform any more installations or elisp evaluations.

    - - -
    -

    Source code navigation

    -
    -
    -
    -

    Prerequisite:

    -
    -
      -
    • Know how to use package.el and MELPA. If you don't know how to -use, read the guide How to use Emacs package manager.
    • +
      +

      2 Quick setup

      +
      +

      +I've prepared an Emacs repository to properly install the components +of the emacs IDE and to perform a basic configuration for +demonstration purposes. When installed and run the first time, the +demo repository will download from MELPA, install and compile all the +packages it needs. Note that depending on your internet connection and +processor speeds, this may take a while, but that shouldn't stop you from continuing with this guide; the next section can be followed using a second instance of emacs, and without the IDE components. +

      +

      +If you don't wish to use the demo, you can manually install the components, and use the .el files of the demo as a reference sample configuration. +

      -
    • Install GNU Global from your distribution's package manager (Linux / Mac) or from the Win32 port (Windows). If none is available, download the sources here and manually build the package. Do be aware that it is remotely possible that your package manager might install an -outdated version that might impair some functionality of helm-gtags. -

    • +

      +Steps to install: +

      -
    • Install ggtags. After installing ggtags from MELPA, add this code -snippet to setup ggtags and key bindings:
    • +
        +
      • Install GNU Global from your distribution's package manager (Linux / +Mac) or from the Win32 port (Windows). If none is available, +download the source here and manually build the package. +
      • +
      • Backup your <code>~/.emacs.d</code> elsewhere. +
      • +
      • If emacs is not already running, start it. +
      • +
      • Update your MELPA database: M-x package-list-packages. (reference: +How to use Emacs package manager). +
      • +
      • Clone the repository into your ~/.emacs.d folder. +
      -
      (require 'ggtags)
      -(add-hook 'c-mode-common-hook
      -          (lambda ()
      -            (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
      -              (ggtags-mode 1))))
      -
      -(define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol)
      -(define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history)
      -(define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference)
      -(define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file)
      -(define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags)
      -(define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags)
      -
      -(define-key ggtags-mode-map (kbd "M-,") 'pop-tag-mark)
      +
      git clone https://github.com/tuhdo/emacs-c-ide-demo.git ~/.emacs.d
       
        -
      • Or, helm + helm-gtags. Helm is awesome and if you are going to use -Helm, please read the Helm guide. Remember to setup Helm before -using helm-gtags. You can use this sample configuration. When -includes the above file in your ~/.emacs.d, remember to add -(require 'setup-helm) to your init.el.
      • -
      - -
      - -
      (setq
      - helm-gtags-ignore-case t
      - helm-gtags-auto-update t
      - helm-gtags-use-input-at-cursor t
      - helm-gtags-pulse-at-cursor t
      - helm-gtags-prefix-key "\C-cg"
      - helm-gtags-suggested-key-mapping t
      - )
      -
      -(require 'helm-gtags)
      -;; Enable helm-gtags-mode
      -(add-hook 'dired-mode-hook 'helm-gtags-mode)
      -(add-hook 'eshell-mode-hook 'helm-gtags-mode)
      -(add-hook 'c-mode-hook 'helm-gtags-mode)
      -(add-hook 'c++-mode-hook 'helm-gtags-mode)
      -(add-hook 'asm-mode-hook 'helm-gtags-mode)
      -
      -(define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function)
      -(define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
      -(define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
      -(define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
      -(define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
      -(define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history)
      -
      -
      +
    • You may possibly want to make a change to your new +~/.emacs.d/init.el file. By default, the demo uses helm +(reference) and helm-gtags, which is what I recommend, but if you +don't want to use helm, the alternative is to use ggtags. Here's +how to make that change. -

      -Before using the ggtags or helm-gtags, remember to create a GTAGS -database by running gtags at your project root in terminal: -

      +
        +
      • comment these lines in init.el:
        -
        $ cd /path/to/project/root
        -$ gtags
        +
        (require 'setup-helm)
        +(require 'setup-helm-gtags)
         

        -After this, a few files are created: +And uncomment this line:

        -
        $ ls G*
        -GPATH   GRTAGS  GTAGS
        +
        ;; (require 'setup-ggtags)
         
        - -
          -
        • GTAGS: definition database
        • -
        • GRTAGS: reference database
        • -
        • GPATH: path name database
        • + +
        +

      -If you use ggtags, you have a command for creating GTAGS database, -that is ggtags-create-tags; this is recommended way when using -ggtags, to let it know where the project root is. +That does it! To start using the demo, just type M-x load-file RET +init.el. As mentioned earlier, the first time you use it, it will perform a series of downloads, installs and compiles, which may take a while, but you can still continue with the next section of this guide in a second instance of emacs, even without any of the IDE components.

    • +
      +

      3 Basic source code navigation

      +
      +

      +Even without any IDE components installed, emacs already has features useful for operating on source code. +

      -
      -

      Basic movements

      -
        -
      • -C-M-f runs forward-sexp, move forward over a balanced +

      • C-M-f runs forward-sexp, move forward over a balanced expression that can be a pair or a symbol. Demo: -

        forward-func.gif

        -
      • +
      + -
    • -C-M-b runs backward-sexp, move backward over a balanced +

    • C-M-b runs backward-sexp, move backward over a balanced expression that can be a pair or a symbol. Demo: -

      backward-func.gif

      -
    • +
      + -
    • -C-M-k runs kill-sexp, kill balanced expression +

    • C-M-k runs kill-sexp, kill balanced expression forward that can be a pair or a symbol. Demo: -

      kill-func-body.gif

      -
    • +
      + -
    • -C-M-<SPC> or C-M-@ runs mark-sexp, put mark after +

    • C-M-<SPC> or C-M-@ runs mark-sexp, put mark after following expression that can be a pair or a symbol. Demo: -

      mark-func-body.gif

      -
    • +
      + -
    • -C-M-a runs beginning-of-defun, which moves point to beginning of +

    • C-M-a runs beginning-of-defun, which moves point to beginning of a function. Demo: -

      beginning-of-defun.gif

      -
    • +
    + -
  • -C-M-e runs end-of-defun, which moves point to end of a +

  • C-M-e runs end-of-defun, which moves point to end of a function. Demo: -

    end-of-defun.gif

    -
  • +
    + -
  • -C-M-h runs mark-defun, which put a region around whole current +

  • C-M-h runs mark-defun, which put a region around whole current or following function. Demo: -

    mark-defun.gif

    -
  • +
    +
    -
    -

    Basic concepts of tag

    -
    +
    +

    4 Source code navigation

    +
    +

    +At this point, we begin using components of our emacs IDE, so if you're using the demo to perform its install, you'll need to wait for that to finish, and to close the second instance of emacs that you were using in the previous section. +

    +
    +
    +

    4.1 Package preparation

    +
    +

    +If you didn't use the the demo to install the emacs IDE components, +you'll now need to install GNU Global, and you'll need to install from +MELPA your choice of either ggtags or the pair of packages helm + +helm-gtags. +

    +

    -A tag is a name of an entity in source code. An entity can be a -variable, a method definition, an include-operator… A tag contains -information such as name of the tag (the name of the variable, -class, method), location of this tag in source code and which file it -belongs to. As an example, GNU Global generates three tag databases: +Regardless of whether or not you used the demo, here are some code +snippets you'll need to get the IDE working the way this guide +presents it.

      -
    • GTAGS: definition database
    • -
    • GRTAGS: reference database
    • -
    • GPATH: path name database
    • +
    • If you chose the defaults, helm + helm-gtags. +
    • +
    + +
    + +
    (setq
    + helm-gtags-ignore-case t
    + helm-gtags-auto-update t
    + helm-gtags-use-input-at-cursor t
    + helm-gtags-pulse-at-cursor t
    + helm-gtags-prefix-key "\C-cg"
    + helm-gtags-suggested-key-mapping t
    + )
    +
    +(require 'helm-gtags)
    +;; Enable helm-gtags-mode
    +(add-hook 'dired-mode-hook 'helm-gtags-mode)
    +(add-hook 'eshell-mode-hook 'helm-gtags-mode)
    +(add-hook 'c-mode-hook 'helm-gtags-mode)
    +(add-hook 'c++-mode-hook 'helm-gtags-mode)
    +(add-hook 'asm-mode-hook 'helm-gtags-mode)
    +
    +(define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function)
    +(define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
    +(define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
    +(define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
    +(define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
    +(define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history)
    +
    +
    + + +
    + +
    (require 'ggtags)
    +(add-hook 'c-mode-common-hook
    +          (lambda ()
    +            (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
    +              (ggtags-mode 1))))
    +
    +(define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol)
    +(define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history)
    +(define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference)
    +(define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file)
    +(define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags)
    +(define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags)
    +
    +(define-key ggtags-mode-map (kbd "M-,") 'pop-tag-mark)
    +
    +
    +
    +
    +
    +

    4.2 Basic concepts of tags

    +
    +

    +Source code navigation done by IDEs employs a concept called tags, a +term for an entity in source code. An entity can be a variable, a +method definition, an include-operator… A tag contains information +such as name of the tag (the name of the variable, class, method), +location of this tag in source code and which file it belongs to. As +an example, GNU Global generates three tag databases: +

    + +
      +
    • GTAGS: definition database +
    • +
    • GRTAGS: reference database +
    • +
    • GPATH: path name database +

    @@ -715,10 +634,46 @@

    Basic

    +
    +

    4.3 Tag database creation

    +
    +
      +
    • If you chose the defaults, helm + helm-gtags, create a GTAGS +database by running gtags at your project root in terminal: +
    • +
    +
    -
    -

    Find definitions in current buffer

    -
    +
    $ cd /path/to/project/root
    +$ gtags
    +
    +
    +
      +
    • If you chose ggtags, the recommended method for tag creation is to +use its own emacs command ggtags-create-tags. +
    • +
    • After running either command, a few files will be created: +
    • +
    +
    + +
    $ ls G*
    +GPATH   GRTAGS  GTAGS
    +
    +
    +
      +
    • GTAGS: definition database +
    • +
    • GRTAGS: reference database +
    • +
    • GPATH: path name database +
    • +
    +
    +
    +
    +

    4.4 Find definitions in current buffer

    +

    The Imenu facility offers a way to find the major definitions, such as function definitions, variable definitions in a file by name. ggtags @@ -727,7 +682,7 @@

    Find d
    -
    (setq-local imenu-create-index-function #'ggtags-build-imenu-index)
    +
    (setq-local imenu-create-index-function #'ggtags-build-imenu-index)
     
    @@ -744,9 +699,9 @@

    Find d

    -
    -

    Find definitions in project

    -
    +
    +

    4.5 Find definitions in project

    +
    • Using gtags: by default, M-. runs ggtags-find-tag-dwim when ggtags-mode is enabled. The command ggtags-find-tag-dwim jump to @@ -755,18 +710,22 @@

      Find d
      • If the tag at point is a definition, ggtags jumps to a reference. If there is more than one reference, it displays a list -of references.
      • +of references. +
      • If the tag at point is a reference, ggtags jumps to tag -definition.
      • +definition. + -
      • If the tag at point is an include header, it jumps to that header.
      • -

    • +
    • If the tag at point is an include header, it jumps to that header. +
    • +
    +

    You can jump back to original location where you invoked -ggtags-find-tag-dwim by M-,, which runs pop-tag-mark (if you +ggtags-find-tag-dwim by M-,=, which runs =pop-tag-mark (if you follow my key bindings).

    @@ -781,7 +740,7 @@

    Find d s to invoke Isearch on candidate buffer list.

    -
    +

    ggtags-definitions.png @@ -797,11 +756,12 @@

    Find d
  • Using helm-gtags: If key bindings are properly setup as above, M-. runs helm-gtags-dwim, which behaves the same as ggtags-find-tag-dwim. Similarly, you jump back to original -location by using M-,, which runs tags-loop-continue (Emacs -default).
  • +location by using M-,=, which runs =tags-loop-continue (Emacs +default). + -
    +

    helm-gtags-definitions.png @@ -835,12 +795,13 @@

    Find d

    -
    -

    Find references in project

    -
    +
    +

    4.6 Find references in project

    +
    • Using ggtags: Either run ggtags-find-tag-dwim or -ggtags-find-reference, which only finds references.
    • +ggtags-find-reference, which only finds references. +
    • Using helm-gtags: Either run helm-gtags-dwim or helm-gtags-find-rtags, bound to C-c g r, which only finds @@ -848,15 +809,19 @@

      Find r
      • if point is inside a function, the prompt will be default to the -function name.
      • +function name. +
      • If point is on a function, it lists references of that functions -immediately.
      • +immediately. +
      • If point is on a variable, helm-gtags-find-rtags won't have any effect. You should use helm-gtags-find-symbol, which is bound to -C-c g s.
      • -

    • +C-c g s. + +
    +

    @@ -866,9 +831,9 @@

    Find r

    -
    -

    Find functions that current functions call

    -
    +
    +

    4.7 Find functions that current functions call

    +

    If you want to list all the functions that the current function - the function that point is inside - calls, you can do that with @@ -878,17 +843,19 @@

    Find f

    -
    -

    Find files in project

    -
    +
    +

    4.8 Find files in project

    +
    • Using ggtags: Run ggtags-find-file to find a file from all the files indexed. If point is on an included header file, -ggtags-find-tag-dwim automatically jumps to the file.
    • +ggtags-find-tag-dwim automatically jumps to the file. +
    • Using helm-gtags: Run helm-gtags-find-files to find files matching regexp. If point is on an included header file, -helm-gtags-dwim automatically jumps to the file.
    • +helm-gtags-dwim automatically jumps to the file. +

    @@ -901,26 +868,28 @@

    Find f

    -
    -

    View visited tags with tag stack

    -
    +
    +

    4.9 View visited tags with tag stack

    +
    • Using ggtags: As you know that you can jump back with -pop-tag-mark (bound to M-,), you can also view a list of visited -tags using ggtags-view-tag-history, which is bound to C-c g +pop-tag-mark (bound to M-,=), you can also view a list of visited + tags using =ggtags-view-tag-history, which is bound to C-c g h. It displays visited tags from newest to oldest, that is from top -to bottom.
    • +to bottom. +
    • Using helm-gtags: Similarly, helm-gtags also has the command helm-gtags-show-stack that shows visited tags from newest to -oldest, from top to bottom.
    • +oldest, from top to bottom. +
    -
    -

    Browse source tree with Speedbar file browser

    -
    +
    +

    5 Browse source tree with Speedbar file browser

    +

    If you want a static outline tree, Emacs also has a more one: Speedbar. To use Speed bar, M-x speedbar and a frame that contains @@ -940,22 +909,29 @@

    Browse source tree with Speedb

      -
    • Use SPC to open the children of a node.
    • +
    • Use SPC to open the children of a node. +
    • RET to open the node in another window. If node is a file, open that file; if node is a directory, enter that directory; if node is -a tag in a file, jump to the location of that tag in the file.
    • +a tag in a file, jump to the location of that tag in the file. + -
    • U to go up parent directory.
    • +
    • U to go up parent directory. +
    • -
    • n or p moves to next or previous node.
    • +
    • n or p moves to next or previous node. +
    • -
    • M-n or M-p moves to next or previous node at the current level.
    • +
    • M-n or M-p moves to next or previous node at the current level. +
    • b switches to buffer list using Speedbar presentation. You can -also open children of each buffer.
    • +also open children of each buffer. + -
    • f switches back to file list.
    • +
    • f switches back to file list. +

    @@ -964,14 +940,15 @@

    Browse source tree with Speedb
    -
    (setq speedbar-show-unknown-files t)
    +
    (setq speedbar-show-unknown-files t)
     

    -
    -

    Package: sr-speedbar

    -
    +
    +

    5.1 Package: sr-speedbar

    +
    +

    However, you may feel that a frame is difficult to use. To solve this issue, you need sr-speedbar, which can be installed via @@ -980,10 +957,12 @@

    Packa
    • To open sr-speedbar, execute the command sr-speedbar-open or -sr-speedbar-toggle.
    • +sr-speedbar-toggle. +
    • To close sr-speedbar, execute the command sr-speedbar-close or -sr-speedbar-toggle again.
    • +sr-speedbar-toggle again. +

    @@ -996,13 +975,17 @@

    Packa
    • Automatically switches directory tree - when you switch buffer - to -the default-directory of current buffer.
    • -
    • Use an Emacs window instead of frame, make it easier to use.
    • +the default-directory of current buffer. + +
    • Use an Emacs window instead of frame, make it easier to use. +
    • C-x 1 deletes every window except Speedbar, so you won't have to -open again.
    • +open again. +
    • You can prevent C-x o to jump to sr-speedbar window by setting sr-speedbar-skip-other-window-p to `t`. You can still move to -sr-speedbar window using either the mouse or windmove.
    • +sr-speedbar window using either the mouse or windmove. +

    @@ -1014,9 +997,11 @@

    Packa

      -
    • The first child is always the return type, void.
    • +
    • The first child is always the return type, void. +
    • The subsequent children are function parameters. Inside each -function parameter node is its type.
    • +function parameter node is its type. +
    @@ -1027,9 +1012,9 @@

    Packa

    -
    -

    General completion with company-mode

    -
    +
    +

    6 General completion with company-mode

    +

    company-mode is a text completion framework for Emacs. The name stands for "complete anything". It uses pluggable back-ends and @@ -1048,8 +1033,8 @@

    General completion with company
    -
    (require 'company)
    -(add-hook 'after-init-hook 'global-company-mode)
    +
    (require 'company)
    +(add-hook 'after-init-hook 'global-company-mode)
     
    @@ -1075,9 +1060,9 @@

    General completion with company

    -
    -

    Demo project

    -
    +
    +

    7 Demo project

    +

    I uploaded a demo project for you to play with completion feature here. The project has this structure: @@ -1108,8 +1093,8 @@

    Demo project

    -
    void filename_func1();
    -int filename_func2(int a, int b);
    +
    void filename_func1();
    +int filename_func2(int a, int b);
     
    @@ -1119,11 +1104,11 @@

    Demo project

    -
    #include "filename.h"
    +
    #include "filename.h"
     
    -void filename_func1() { }
    +void filename_func1() { }
     
    -int filename_func2(int a, int b) { }
    +int filename_func2(int a, int b) { }
     
    @@ -1137,18 +1122,18 @@

    Demo project

    -
    -

    Source code completion using Clang

    -
    +
    +

    8 Source code completion using Clang

    +

    To use company-mode with Clang, add this configuration:

    -
    (setq company-backends (delete 'company-semantic company-backends))
    -(define-key c-mode-map  [(tab)] 'company-complete)
    -(define-key c++-mode-map  [(tab)] 'company-complete)
    +
    (setq company-backends (delete 'company-semantic company-backends))
    +(define-key c-mode-map  [(tab)] 'company-complete)
    +(define-key c++-mode-map  [(tab)] 'company-complete)
     
    @@ -1157,8 +1142,7 @@

    Source code completion using Cl

      -
    • -company-clang: use clang to retrieve completion candidates. You +

    • company-clang: use clang to retrieve completion candidates. You will have completion with system header files, but not your project. By default, company-complete already includes company-clang backend, so you can use company-complete to @@ -1168,7 +1152,6 @@

      Source code completion using Cl company-clang, because it has higher precedence in company-backends. company-semantic will be discuss in the CEDET section. -

      To retrieve completion candidates for your projects, you will have @@ -1178,10 +1161,11 @@

      Source code completion using Cl
      -
      ((nil . ((company-clang-arguments . ("-I/home/<user>/project_root/include1/"
      -                                     "-I/home/<user>/project_root/include2/")))))
      +
      ((nil . ((company-clang-arguments . ("-I/home/<user>/project_root/include1/"
      +                                     "-I/home/<user>/project_root/include2/")))))
       
      -

    • +

    +

    @@ -1218,7 +1202,8 @@

    Source code completion using Cl
  • company-gtags: use GTAGS database from GNU Global to retrieve completion candidates. It displays ALL completion candidates in GTAGS database regarding of scope. Use company-gtags to provide -code completion in your current project.
  • +code completion in your current project. +

    @@ -1226,17 +1211,17 @@

    Source code completion using Cl

      -
    • Create a .dir-locals.el at project_root.
    • -
    • -Add this Emacs Lisp code: -

      +
    • Create a .dir-locals.el at project_root. +
    • +
    • Add this Emacs Lisp code:
      -
      ((nil . ((company-clang-arguments . ("-I/home/<user>/project_root/include1/"
      -                                     "-I/home/<user>/project_root/include2/")))))
      +
      ((nil . ((company-clang-arguments . ("-I/home/<user>/project_root/include1/"
      +                                     "-I/home/<user>/project_root/include2/")))))
       
      -
    • +

    +

    @@ -1245,14 +1230,15 @@

    Source code completion using Cl
    • Enter any source file and start completion. You will see that -company-clang correctly retrieves completion candidates in those directories.
    • +company-clang correctly retrieves completion candidates in those directories. +

    -
    -

    Header file completion with company-c-headers package

    -
    +
    +

    9 Header file completion with company-c-headers package

    +

    company-c-headers provides auto-completion for C/C++ headers using Company. After installing from MELPA, set it up: @@ -1260,7 +1246,7 @@

    Heade
    -
    (add-to-list 'company-backends 'company-c-headers)
    +
    (add-to-list 'company-backends 'company-c-headers)
     
    @@ -1280,7 +1266,7 @@

    Heade
    -
    (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.8/")
    +
    (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.8/")
     
    @@ -1292,13 +1278,13 @@

    Heade

    -
    -

    CEDET

    -
    +
    +

    10 CEDET

    +
    -
    -

    What is CEDET?

    -
    +
    +

    10.1 What is CEDET?

    +

    CEDET is a (C)ollection of (E)macs (D)evelopment (E)nvironment (T)ools written with the end goal of creating an advanced development environment in @@ -1318,9 +1304,9 @@

    What is CEDET?

    -
    -

    Why use CEDET?

    -
    +
    +

    10.2 Why use CEDET?

    +

    CEDET is simple to setup and portable (right winthin Emacs and written entirely with Emacs Lisp). Without CEDET, you have to use external @@ -1366,9 +1352,9 @@

    Why use CEDET?

    -
    -

    Installation

    -
    +
    +

    10.3 Installation

    +

    CEDET was merged into Emacs since 23.2. You do not need to install CEDET manually. However, you can also use the development repository @@ -1397,9 +1383,9 @@

    Installation

    -
    cd cedet
    -make # wait for it to complete
    -cd contrib
    +
    cd cedet
    +make # wait for it to complete
    +cd contrib
     make
     
    @@ -1411,16 +1397,16 @@

    Installation

    -
    (load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
    -(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))
    +
    (load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
    +(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))
     
    -
    -

    Semantic minor modes

    -
    +
    +

    10.4 Semantic minor modes

    +

    Semantic is a package that provides language-aware editing commands based on source code parsers. Parsing is a process of analyzing source @@ -1437,25 +1423,26 @@

    Semantic minor modes

    -
    • Setup Semantic
      +
      1. Setup Semantic

        To enable code completion using Semantic, add the following code:

        -
        (require 'cc-mode)
        -(require 'semantic)
        +
        (require 'cc-mode)
        +(require 'semantic)
         
        -(global-semanticdb-minor-mode 1)
        -(global-semantic-idle-scheduler-mode 1)
        +(global-semanticdb-minor-mode 1)
        +(global-semantic-idle-scheduler-mode 1)
         
        -(semantic-mode 1)
        +(semantic-mode 1)
         
        -
      2. +
      +
    • -
    • Command: semantic-mode
      +
    • Command: semantic-mode

      This command activates semantic-mode. In Semantic mode, Emacs parses the buffers you visit for their semantic content. The parsing looks @@ -1484,9 +1471,10 @@

      Semantic minor modes

      -
    • +
    + -
  • Command: global-semanticdb-minor-mode
    +
  • Command: global-semanticdb-minor-mode

    As mentioned above, Semantic caches parsing result for future use. To do that, semanticdb-minor-mode must be activated. In @@ -1495,9 +1483,10 @@

    Semantic minor modes

    semanticdb-default-save-directory variable. The default directory is ~/.emacs.d/semanticdb.

    -
  • +
    + -
  • Command: global-semantic-idle-scheduler-mode
    +
  • Command: global-semantic-idle-scheduler-mode

    When semantic-idle-scheduler-mode is enabled, Emacs periodically checks to see if the buffer is out of date, and reparses while the @@ -1509,8 +1498,9 @@

    Semantic minor modes

    semantic-idle-scheduler-mode, Emacs keeps track live changes of your source code.

    -
  • -
  • Add more system include paths
    +
    +
  • +
  • Add more system include paths

    By default, Semantic automatically includes some default system include paths such as /usr/include, /usr/local/include… You can @@ -1522,9 +1512,9 @@

    Semantic minor modes

    -
    (semantic-add-system-include "/usr/include/boost" 'c++-mode)
    -(semantic-add-system-include "~/linux/kernel")
    -(semantic-add-system-include "~/linux/include")
    +
    (semantic-add-system-include "/usr/include/boost" 'c++-mode)
    +(semantic-add-system-include "~/linux/kernel")
    +(semantic-add-system-include "~/linux/include")
     
    @@ -1533,8 +1523,9 @@

    Semantic minor modes

    semantic-add-system-include
    .

    -
  • -
  • Completion using company-mode
    +
    +
  • +
  • Completion using company-mode

    company-mode provides a command called company-semantic that uses SemanticDB to retrieve completion candidates. Function interface of @@ -1545,12 +1536,13 @@

    Semantic minor modes

    -
  • +
    +
    -
    -

    CEDET can do more

    -
    +
    +

    10.5 CEDET can do more

    +

    This guide only covers a portion of CEDET. Since Semantic parses source code and creates a database for code completion, it would be @@ -1612,9 +1604,9 @@

    CEDET can do more

    -
    -

    Source code navigation using Senator

    -
    +
    +

    10.6 Source code navigation using Senator

    +

    Senator is a part of CEDET. Senator stands for SEmantic NAvigaTOR. Senator provides some useful commands for operating on @@ -1627,21 +1619,21 @@

    Source c

    -
    -

    Navigation

    -
    +
    +

    10.6.1 Navigation

    +
    +

    Senator provides commands for navigating by tag.

    • C-c , n runs senator-next-tag, navigate to the next Semantic -tag.
    • +tag. + -
    • -C-c , p runs senator-previous-tag, navigate to the previous +

    • C-c , p runs senator-previous-tag, navigate to the previous Semantic tag. -

      Here is how both of those commands work: @@ -1656,14 +1648,13 @@

      Navigation

      As you see,the C macro (in the screenshot, its DECLARE_COMPLETION) is not considered a tag. -

    • +

      + -
    • -senator-jump (only available in CEDET bzr), specify a tag to jump +

    • senator-jump (only available in CEDET bzr), specify a tag to jump to. TAB for a list of available Semantic tags in current buffer, similar to TAB in M-x in stock Emacs. If you use Helm, use moo-jump-local from the package function-args instead. -

      Demo (helm-mode is disabled): @@ -1673,16 +1664,15 @@

      Navigation

      senator-jump.gif

      -
    • +
    + -
  • -C-c , u runs senator-go-to-up-reference, move up one reference +

  • C-c , u runs senator-go-to-up-reference, move up one reference level from current tag. An upper reference level of a tag is the source that defines the tag or includes the tag. This is incredibly useful when you want to jump from a function declaration in a class to its definition, or jump to the class that a function belongs to, quickly. -

    @@ -1698,7 +1688,8 @@

    Navigation

    function belongs. Class PIC32F42 has its parent class Microcontrller, and I run C-c , u again to move point to Microcontrller class. At this point, I cannot move further. -

  • +

    +

    @@ -1711,19 +1702,19 @@

    Navigation

    -
    -

    Copy/Paste

    -
    +
    +

    10.6.2 Copy/Paste

    +
    +
    • C-c , M-w runs senator-copy-tag, take the current tag, and place -it in the tag ring.
    • +it in the tag ring. + -
    • -C-c , C-w runs senator-kill-tag, take the current tag, place it +

    • C-c , C-w runs senator-kill-tag, take the current tag, place it in the tag ring, and kill it. Killing the tag removes the text for that tag, and places it into the kill ring. Retrieve that text with C-y. -

      The above commands are basically like normal M-w and C-w, but are @@ -1743,33 +1734,34 @@

      Copy/Paste

      As you see, the function body and its interface is killed and yanked back with C-y. You can also see that the function parameter, aside from its name, its type is also removed when the command is executed. -

    • +

      + -
    • -C-c , C-y runs senator-yank-tag, yank a tag from the tag +

    • C-c , C-y runs senator-yank-tag, yank a tag from the tag ring. The form the tag takes is different depending on where it is being yanked to. For example, in previous example with C-c , C-w, when you run C-y, it yanks the whole thing including function interface and its body. C-c , C-y only yanks the function interface. -

      senator-yank-tag.gif

      -
    • +
    +
  • C-c , r runs senator-copy-tag-to-register, copy the current tag into a register. With prefix argument will delete the text of the -tag to the kill ring.
  • +tag to the kill ring. +
    -
    -

    Obsolete commands

    -
    +
    +

    10.6.3 Obsolete commands

    +

    Senator also provides commands for code completion: senator-complete-symbol and senator-completion-menu-popup. Code @@ -1783,9 +1775,9 @@

    Obsolete commands

    -
    -

    (Optional) Project management with EDE

    -
    +
    +

    10.7 (Optional) Project management with EDE

    +

    EDE, short for Emacs Development Environment, is a generic interface for managing projects. In EDE, a project hierarchy matches a directory @@ -1805,8 +1797,8 @@

    (Optional)
    -
    (require 'ede)
    -(global-ede-mode)
    +
    (require 'ede)
    +(global-ede-mode)
     
    @@ -1820,14 +1812,16 @@

    (Optional)

      -
    • Create a new file called cedet-projects.el in ~/.emacs.d/.
    • -
    • In this file, add a new ede-cpp-root-project in this form:
    • +
    • Create a new file called cedet-projects.el in ~/.emacs.d/. +
    • +
    • In this file, add a new ede-cpp-root-project in this form: +
    -
    (ede-cpp-root-project "project_root"
    -                      :file "/dir/to/project_root/Makefile")
    +
    (ede-cpp-root-project "project_root"
    +                      :file "/dir/to/project_root/Makefile")
     
    @@ -1840,17 +1834,18 @@

    (Optional)

      -
    • Add include directories specific to the project and in your system:
    • +
    • Add include directories specific to the project and in your system: +
    -
    (ede-cpp-root-project "project_root"
    -                      :file "/dir/to/project_root/Makefile"
    -                      :include-path '("/include1"
    -                                      "/include2") ;; add more include
    -                      ;; paths here
    -                      :system-include-path '("~/linux"))
    +
    (ede-cpp-root-project "project_root"
    +                      :file "/dir/to/project_root/Makefile"
    +                      :include-path '("/include1"
    +                                      "/include2") ;; add more include
    +                      ;; paths here
    +                      :system-include-path '("~/linux"))
     
    @@ -1897,28 +1892,33 @@

    (Optional)
    • EDE, short for Emacs Development Environment, is a generic interface -for managing projects.
    • +for managing projects. +
    • EDE enables Semantic to find sources and perform project level -completions.
    • +completions. +
    • To add a C/C++ project, simply create a project definition with this -template in a file, such as ede-projects.el:
    • +template in a file, such as ede-projects.el: +
    -
    (ede-cpp-root-project "project_root"
    -                      :file "/dir/to/project_root/Makefile"
    -                      :include-path '("/include1"
    -                                      "/include2") ;; add more include
    -                      ;; paths here
    -                      :system-include-path '("~/linux"))
    +
    (ede-cpp-root-project "project_root"
    +                      :file "/dir/to/project_root/Makefile"
    +                      :include-path '("/include1"
    +                                      "/include2") ;; add more include
    +                      ;; paths here
    +                      :system-include-path '("~/linux"))
     
      -
    • Load ede-projects.el when Emacs start.
    • +
    • Load ede-projects.el when Emacs start. +
    • If you have opening files, either close or refresh it with M-x - semantic-force-refresh to make Semantic aware of new changes.
    • + semantic-force-refresh to make Semantic aware of new changes. +

    @@ -1928,18 +1928,22 @@

    (Optional)

      -
    • EDE is older, Projectile appears recently.
    • +
    • EDE is older, Projectile appears recently. +
    • EDE manages project files to integrate with specific build system and generate corresponding build file (such as Makefile; these features are not covered in this guide). Projectile provides generic file management operations such as quickly jump to file/directory in -project, list buffers that belong to current project…
    • +project, list buffers that belong to current project… +
    • EDE is part of CEDET suite; it is geared toward Semantic. For example, we used EDE to tell Semantic where to retrieve correct include paths for current project to perform smart completion in previous section. Projectile provides a generic interface for -managing your project under a VCS or some supported build system.
    • -
    • Projectile is easier to learn than EDE.
    • +managing your project under a VCS or some supported build system. + +
    • Projectile is easier to learn than EDE. +

    @@ -1953,25 +1957,35 @@

    (Optional)

    -
    -

    Code refactoring

    -
    +
    +

    11 Code refactoring

    +

    You can use this package, Semantic Refactor for refactoring in small scale. The package offers the following feature:

      -
    • Context-sensitive menu offers appropriate refactoring actions
    • -
    • Generate class implementation (also handles nested class and class template)
    • -
    • Generate class getters and setters
    • -
    • Generate function implementation (also handles function template)
    • -
    • Generate function prototype
    • -
    • Convert function to function pointer
    • -
    • Convert function to function parameter
    • -
    • Move semantic units (class, function, variable)
    • -
    • Extract function with proper type information
    • -
    • Precise local variable rename
    • +
    • Context-sensitive menu offers appropriate refactoring actions +
    • +
    • Generate class implementation (also handles nested class and class template) +
    • +
    • Generate class getters and setters +
    • +
    • Generate function implementation (also handles function template) +
    • +
    • Generate function prototype +
    • +
    • Convert function to function pointer +
    • +
    • Convert function to function parameter +
    • +
    • Move semantic units (class, function, variable) +
    • +
    • Extract function with proper type information +
    • +
    • Precise local variable rename +

    @@ -1980,9 +1994,9 @@

    Code refactoring

    -
    -

    Navigate system include path

    -
    +
    +

    12 Navigate system include path

    +

    Up until now we were only navigating code in a project using GNU Global. How about jumping to system include headers? You have a few @@ -1990,9 +2004,9 @@

    Navigate system

    -
    -

    Using Semantic with semantic-ia-fast-jump command

    -
    +
    +

    12.1 Using Semantic with semantic-ia-fast-jump command

    +

    Semantic provides a jump command based on the parsed tags produced by the Semantic C/C++ parser. To jump to any code in system include path, @@ -2001,8 +2015,8 @@

    Using Semantic -
    (semantic-add-system-include "/usr/local/include")
    -(semantic-add-system-include "~/linux/include")
    +
    (semantic-add-system-include "/usr/local/include")
    +(semantic-add-system-include "~/linux/include")
     

    @@ -2031,9 +2045,9 @@

    Using Semantic

    -
    -

    Using generated database from GNU Global

    -
    +
    +

    12.2 Using generated database from GNU Global

    +

    GNU Global has an environment variable named GTAGSLIBPATH. This variable holds GTAGS database of external libraries that your project @@ -2052,30 +2066,32 @@

    Using gene
    • Export this environment variable in your shell init file, such as -.bashrc or .zshrc:
    • +.bashrc or .zshrc: +
    -
    export GTAGSLIBPATH=$HOME/.gtags/
    +
    export GTAGSLIBPATH=$HOME/.gtags/
     
      -
    • Execute these commands in your terminal:
    • +
    • Execute these commands in your terminal: +
    -
    # Create a directory for holding database, since
    -# you cannot create a database in your system paths
    +
    # Create a directory for holding database, since
    +# you cannot create a database in your system paths
     mkdir ~/.gtags
     
    -# Create symbolic links to your external libraries
    +# Create symbolic links to your external libraries
     ln -s /usr/include usr-include
     ln -s /usr/local/include/ usr-local-include
     
    -# Generate GNU Global database
    +# Generate GNU Global database
     gtags -c
     
    @@ -2109,9 +2125,9 @@

    Using gene

    -
    -

    Project management with Projectile

    -
    +
    +

    13 Project management with Projectile

    +

    Projectile is a project interaction library for Emacs. Its goal is to provide a nice set of features operating on a project level without @@ -2140,7 +2156,7 @@

    Project ma
    -
    (projectile-global-mode)
    +
    (projectile-global-mode)
     
    @@ -2149,14 +2165,22 @@

    Project ma

      -
    • Jump to any file in the project: C-c p f.
    • -
    • Jump to any directory in the project: C-c p d.
    • -
    • List buffers local to current project: C-c p b.
    • -
    • Jump to recently visited files in project: C-c p e.
    • -
    • Grep in project: C-c p g s
    • -
    • Multi-occur in project buffers: C-c p o.
    • -
    • Simple refactoring with text replace in current project: C-c p r.
    • -
    • Switch visited projects (visited once an Projectile remembers): C-c p p.
    • +
    • Jump to any file in the project: C-c p f. +
    • +
    • Jump to any directory in the project: C-c p d. +
    • +
    • List buffers local to current project: C-c p b. +
    • +
    • Jump to recently visited files in project: C-c p e. +
    • +
    • Grep in project: C-c p g s +
    • +
    • Multi-occur in project buffers: C-c p o. +
    • +
    • Simple refactoring with text replace in current project: C-c p r. +
    • +
    • Switch visited projects (visited once an Projectile remembers): C-c p p. +

    @@ -2165,13 +2189,15 @@

    Project ma
    • Run compilation command at project root: C-c p c. By default, -Projectile prompts the make command.
    • +Projectile prompts the make command. +
    • Switch between .h and .c or .cpp: C-c p a. If the filename - without file extension - of current editing buffer is part of other files, those files are listed as well. If there is only one file with the same name but different extension, switch immediately. Here -is a demo:
    • +is a demo: +
    @@ -2187,13 +2213,13 @@

    Project ma

    -
    -

    Source code information

    -
    +
    +

    14 Source code information

    +
    -
    -

    Command: global-semantic-idle-summary-mode

    -
    +
    +

    14.1 Command: global-semantic-idle-summary-mode

    +

    This mode, when enabled, displays function interface in the minibuffer: @@ -2218,15 +2244,15 @@

    Command: -
    (global-semantic-idle-summary-mode 1)
    +
    (global-semantic-idle-summary-mode 1)
     

    -
    -

    Command: global-semantic-stickyfunc-mode

    -
    +
    +

    14.2 Command: global-semantic-stickyfunc-mode

    +

    When enable, this mode shows the function point is currently in at the first line of the current buffer. This is useful when you have a very @@ -2245,7 +2271,7 @@

    Command: -
    (add-to-list 'semantic-default-submodes 'global-semantic-stickyfunc-mode)
    +
    (add-to-list 'semantic-default-submodes 'global-semantic-stickyfunc-mode)
     

    @@ -2264,16 +2290,16 @@

    Command: -
    (require 'stickyfunc-enhance)
    +
    (require 'stickyfunc-enhance)
     

    -
    -

    Using ggtags + eldoc

    -
    +
    +

    14.3 Using ggtags + eldoc

    +

    You can also use ggtags for displaying function interface at point in minibuffer: @@ -2281,7 +2307,7 @@

    Using ggtags +
    -
    (setq-local eldoc-documentation-function #'ggtags-eldoc-function)
    +
    (setq-local eldoc-documentation-function #'ggtags-eldoc-function)
     
    @@ -2291,22 +2317,22 @@

    Using ggtags +

    -
    -

    Source code documentation

    -
    +
    +

    15 Source code documentation

    +
    -
    -

    Command: man

    -
    +
    +

    15.1 Command: man

    +

    To read the documentation for symbol at point or a man entry of your choice, invoke M-x man.

    -
    -

    Command: helm-man-woman

    -
    +
    +

    15.2 Command: helm-man-woman

    +

    If you use Helm, you should be able to use the command helm-man-woman, which is bound to C-c h m if you follow my Helm @@ -2321,13 +2347,13 @@

    Command: h

    -
    -

    Source code editing

    -
    +
    +

    16 Source code editing

    +
    -
    -

    Folding

    -
    +
    +

    16.1 Folding

    +

    Emacs has a minor mode called hs-minor-mode that allows users to fold and hide blocks of text. Blocks are defined by regular @@ -2342,7 +2368,7 @@

    Folding

    -
    (add-hook 'c-mode-common-hook   'hs-minor-mode)
    +
    (add-hook 'c-mode-common-hook   'hs-minor-mode)
     
    @@ -2354,90 +2380,90 @@

    Folding

    - + - + -Key -Binding +Key +Binding -C-c @ C-c -Command: hs-toggle-hiding +C-c @ C-c +Command: hs-toggle-hiding -  -Toggle hiding/showing of a block +  +Toggle hiding/showing of a block -C-c @ C-h -Command: hs-hide-block +C-c @ C-h +Command: hs-hide-block -  -Select current block at point and hide it +  +Select current block at point and hide it -C-c @ C-l -Command: hs-hide-level +C-c @ C-l +Command: hs-hide-level -  -Hide all block with indentation levels +  +Hide all block with indentation levels -  -below this block +  +below this block -C-c @ C-s -Command: hs-show-block +C-c @ C-s +Command: hs-show-block -  -Select current block at point and show it. +  +Select current block at point and show it. -C-c @ C-M-h -Command: hs-hide-all +C-c @ C-M-h +Command: hs-hide-all -  -Hide all top level blocks, displaying +  +Hide all top level blocks, displaying -  -only first and last lines. +  +only first and last lines. -C-c @ C-M-s -Command: hs-show-all +C-c @ C-M-s +Command: hs-show-all -  -Show everything +  +Show everything @@ -2447,7 +2473,8 @@

    Folding

      -
    • Command: hs-toggle-hiding
    • +
    • Command: hs-toggle-hiding +
    @@ -2458,9 +2485,9 @@

    Folding

    -
    -

    Narrowing

    -
    +
    +

    16.2 Narrowing

    +

    Narrowing means making only a text portion in current buffer visible. Narrowing is useful when you want to perform text editing on @@ -2480,60 +2507,60 @@

    Narrowing

    - + - + -Key -Binding +Key +Binding -C-x n d -Command: narrow-to-defun +C-x n d +Command: narrow-to-defun -  -Narrow buffer to current function at point +  +Narrow buffer to current function at point -C-x n r -Command: narrow-to-region +C-x n r +Command: narrow-to-region -C-x n n -Narrow buffer to active region +C-x n n +Narrow buffer to active region -C-x n w -Command: widen +C-x n w +Command: widen -  -Widen buffer +  +Widen buffer
    -
    -

    Identation

    -
    +
    +

    16.3 Identation

    +
    -
    -

    Setup default C style

    -
    +
    +

    16.3.1 Setup default C style

    +

    Emacs offers some popular C coding styles. Select the one suitable for you: @@ -2541,28 +2568,28 @@

    Setup default C s
    -
    ;; Available C style:
    -;; “gnu”: The default style for GNU projects
    -;; “k&r”: What Kernighan and Ritchie, the authors of C used in their book
    -;; “bsd”: What BSD developers use, aka “Allman style” after Eric Allman.
    -;; “whitesmith”: Popularized by the examples that came with Whitesmiths C, an early commercial C compiler.
    -;; “stroustrup”: What Stroustrup, the author of C++ used in his book
    -;; “ellemtel”: Popular C++ coding standards as defined by “Programming in C++, Rules and Recommendations,” Erik Nyquist and Mats Henricson, Ellemtel
    -;; “linux”: What the Linux developers use for kernel development
    -;; “python”: What Python developers use for extension modules
    -;; “java”: The default style for java-mode (see below)
    -;; “user”: When you want to define your own style
    -(setq
    - c-default-style "linux" ;; set style to "linux"
    - )
    +
    ;; Available C style:
    +;; “gnu”: The default style for GNU projects
    +;; “k&r”: What Kernighan and Ritchie, the authors of C used in their book
    +;; “bsd”: What BSD developers use, aka “Allman style” after Eric Allman.
    +;; “whitesmith”: Popularized by the examples that came with Whitesmiths C, an early commercial C compiler.
    +;; “stroustrup”: What Stroustrup, the author of C++ used in his book
    +;; “ellemtel”: Popular C++ coding standards as defined by “Programming in C++, Rules and Recommendations,” Erik Nyquist and Mats Henricson, Ellemtel
    +;; “linux”: What the Linux developers use for kernel development
    +;; “python”: What Python developers use for extension modules
    +;; “java”: The default style for java-mode (see below)
    +;; “user”: When you want to define your own style
    +(setq
    + c-default-style "linux" ;; set style to "linux"
    + )
     

    -
    -

    Setup indentation

    -
    +
    +

    16.3.2 Setup indentation

    +

    By default, Emacs won't indent when press RET because the command bound to RET is newline. You can enable automatic indentation by @@ -2571,7 +2598,7 @@

    Setup indentation

    -
    (global-set-key (kbd "RET") 'newline-and-indent)  ; automatically indent when press RET
    +
    (global-set-key (kbd "RET") 'newline-and-indent)  ; automatically indent when press RET
     
    @@ -2583,17 +2610,17 @@

    Setup indentation

    -
    ;; activate whitespace-mode to view all whitespace characters
    -(global-set-key (kbd "C-c w") 'whitespace-mode)
    +
    ;; activate whitespace-mode to view all whitespace characters
    +(global-set-key (kbd "C-c w") 'whitespace-mode)
     
    -;; show unncessary whitespace that can mess up your diff
    -(add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
    +;; show unncessary whitespace that can mess up your diff
    +(add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
     
    -;; use space to indent by default
    -(setq-default indent-tabs-mode nil)
    +;; use space to indent by default
    +(setq-default indent-tabs-mode nil)
     
    -;; set appearance of a tab that is represented by 4 spaces
    -(setq-default tab-width 4)
    +;; set appearance of a tab that is represented by 4 spaces
    +(setq-default tab-width 4)
     
    @@ -2610,9 +2637,9 @@

    Setup indentation

    -
    -

    Package: clean-aindent-mode

    -
    +
    +

    16.3.3 Package: clean-aindent-mode

    +

    When you press RET to create a newline and got indented by eletric-indent-mode, you have appropriate whitespace for @@ -2627,17 +2654,17 @@

    Package: clean-ainde
    -
    ;; Package: clean-aindent-mode
    -(require 'clean-aindent-mode)
    -(add-hook 'prog-mode-hook 'clean-aindent-mode)
    +
    ;; Package: clean-aindent-mode
    +(require 'clean-aindent-mode)
    +(add-hook 'prog-mode-hook 'clean-aindent-mode)
     

    -
    -

    Package: dtrt-indent

    -
    +
    +

    16.3.4 Package: dtrt-indent

    +

    A minor mode that guesses the indentation offset originally used for creating source code files and transparently adjusts the corresponding @@ -2662,9 +2689,9 @@

    Package: dtrt-indent
    -
    ;; Package: dtrt-indent
    -(require 'dtrt-indent)
    -(dtrt-indent-mode 1)
    +
    ;; Package: dtrt-indent
    +(require 'dtrt-indent)
    +(dtrt-indent-mode 1)
     
    @@ -2677,15 +2704,15 @@

    Package: dtrt-indent
    -
    (setq dtrt-indent-verbosity 0)
    +
    (setq dtrt-indent-verbosity 0)
     

    -
    -

    Package: ws-butler

    -
    +
    +

    16.3.5 Package: ws-butler

    +

    ws-butler helps managing whitespace on every line of code written or edited, in an unobtrusive, help you write clean code without noisy @@ -2695,9 +2722,11 @@

    Package: ws-butler

  • Only lines touched get trimmed. If the white space at end of buffer is changed, then blank lines at the end of buffer are truncated -respecting require-final-newline.
  • +respecting require-final-newline. + -
  • Trimming only happens when saving.
  • +
  • Trimming only happens when saving. +
  • @@ -2713,18 +2742,18 @@

    Package: ws-butler

    -
      ;; Package: ws-butler
    -(require 'ws-butler)
    -(add-hook 'c-mode-common-hook 'ws-butler-mode)
    +
      ;; Package: ws-butler
    +(require 'ws-butler)
    +(add-hook 'c-mode-common-hook 'ws-butler-mode)
     
    -
    -

    Code template using yasnippet

    -
    +
    +

    16.4 Code template using yasnippet

    +

    YASnippet is a template system for Emacs. It allows you to type an abbreviation and automatically expand it into function @@ -2740,9 +2769,9 @@

    Code template using yasnippet
    -
    ;; Package: yasnippet
    -(require 'yasnippet)
    -(yas-global-mode 1)
    +
    ;; Package: yasnippet
    +(require 'yasnippet)
    +(yas-global-mode 1)
     
    @@ -2758,9 +2787,9 @@

    Code template using yasnippet
    -
    for (i = 0; i < N; i++) {
    +
    for (i = 0; i < N; i++) {
         ...point will be here....
    -}
    +}
     
    @@ -2770,9 +2799,9 @@

    Code template using yasnippet

    -
    -

    Package: smartparens

    -
    +
    +

    16.5 Package: smartparens

    +

    smartparens is a minor mode that provides many features for manipulating pairs. Pair can be simple as parentheses or brackets, or @@ -2783,17 +2812,17 @@

    Package: smartparens
    -
      ;; Package: smartparens
    -(require 'smartparens-config)
    -(show-smartparens-global-mode +1)
    -(smartparens-global-mode 1)
    -
    -;; when you press RET, the curly braces automatically
    -;; add another newline
    -(sp-with-modes '(c-mode c++-mode)
    -  (sp-local-pair "{" nil :post-handlers '(("||\n[i]" "RET")))
    -  (sp-local-pair "/*" "*/" :post-handlers '((" | " "SPC")
    -                                            ("* ||\n[i]" "RET"))))
    +
      ;; Package: smartparens
    +(require 'smartparens-config)
    +(show-smartparens-global-mode +1)
    +(smartparens-global-mode 1)
    +
    +;; when you press RET, the curly braces automatically
    +;; add another newline
    +(sp-with-modes '(c-mode c++-mode)
    +  (sp-local-pair "{" nil :post-handlers '(("||\n[i]" "RET")))
    +  (sp-local-pair "/*" "*/" :post-handlers '((" | " "SPC")
    +                                            ("* ||\n[i]" "RET"))))
     
    @@ -2804,9 +2833,9 @@

    Package: smartparens

    -
    -

    Compilation Support

    -
    +
    +

    17 Compilation Support

    +

    Compilation mode turns each error message in the buffer into a hyperlink. You can click on each error, or execute a key binding like @@ -2821,68 +2850,68 @@

    Compilation Support

    - + - + -Key -Description +Key +Description -C-o -Display matched location, but do not switch point to matched buffer +C-o +Display matched location, but do not switch point to matched buffer -M-n -Move to next error message, but do not visit error location +M-n +Move to next error message, but do not visit error location -M-p -Move to next previous message, but do not visit error location +M-p +Move to next previous message, but do not visit error location -M-g n -Move to next error message, visit error location +M-g n +Move to next error message, visit error location -M-g p -Move to previous error message, visit error location +M-g p +Move to previous error message, visit error location -RET -Visit location of error at poiint +RET +Visit location of error at poiint -M-{ -Move point to the next error message or match occurring in a different file +M-{ +Move point to the next error message or match occurring in a different file -M-} -Move point to the previous error message or match occurring in a different file +M-} +Move point to the previous error message or match occurring in a different file -q -Quit *compilation* buffer +q +Quit *compilation* buffer @@ -2895,10 +2924,10 @@

    Compilation Support

    -
    (global-set-key (kbd "<f5>") (lambda ()
    -                               (interactive)
    -                               (setq-local compilation-read-command nil)
    -                               (call-interactively 'compile)))
    +
    (global-set-key (kbd "<f5>") (lambda ()
    +                               (interactive)
    +                               (setq-local compilation-read-command nil)
    +                               (call-interactively 'compile)))
     
    @@ -2947,18 +2976,19 @@

    Compilation Support

    store a window configuration that contains it into a register, so you can always jump back to project root any where, any time and run compilation command. If you do not use know how to use registers to -store window configurations, read it here. +store window configurations, read it here.

    -
    -

    Debugging

    -
    +
    +

    18 Debugging

    +
    -
    -

    With GDB Many Windows

    -
    +
    +

    18.1 With GDB Many Windows

    +
    +

    Emacs has built-in frontend support for GDB that provides IDE-like interface. It has a layout like this: @@ -2977,13 +3007,13 @@

    With GDB Many Windows

    -
    (setq
    - ;; use gdb-many-windows by default
    +
    (setq
    + ;; use gdb-many-windows by default
      gdb-many-windows t
     
    - ;; Non-nil means display source file containing the main routine at startup
    + ;; Non-nil means display source file containing the main routine at startup
      gdb-show-main t
    - )
    + )
     
    @@ -3010,32 +3040,32 @@

    With GDB Many Windows

    - + - + -  -  +  +  -1. GUD interaction buffer -2. Locals/Registers buffer +1. GUD interaction buffer +2. Locals/Registers buffer -3. Primary Source buffer -4. I/O buffer for debugging program +3. Primary Source buffer +4. I/O buffer for debugging program -5. Stack buffer -6. Breakpoints/Threads buffer +5. Stack buffer +6. Breakpoints/Threads buffer @@ -3047,36 +3077,44 @@

    With GDB Many Windows

    • gdb-display-gdb-buffer (Cell 1): This is where you enter gdb commands, the same as in terminal. When you kill this buffer, other -GDb buffers are also killed and debugging session is terminated.
    • +GDb buffers are also killed and debugging session is terminated. +
    • gdb-display-locals-buffer (Cell 2): display local variables and its values in current stack frame. Please refer to GNU Manual - -Other GDB Buffers for usage of the buffer.
    • +Other GDB Buffers for usage of the buffer. +
    • gdb-display-registers-buffer (Cell 2): registers values are displayed here. Please refer to GNU Manual - Other GDB Buffers for -usage of the buffer.
    • +usage of the buffer. +
    • Your source buffer (Cell 3): Your source code for stepping through out the debugging session. Please refer to GNU Manual - Source -Buffers for usage of the buffer.
    • +Buffers for usage of the buffer. +
    • gdb-display-io-buffer (Cell 4): This is where your program displays output and accepts input. In stock GDB (Command Line Interface), you enter input whenever a program asks for one under GDB prompt. Using gdb-many-windows, you must enter program input -here.
    • +here. +
    • gdb-display-stack-buffer (Cell 5): Display function call -stack. Please refer to GNU Manual - Stack buffer for usage.
    • +stack. Please refer to GNU Manual - Stack buffer for usage. +
    • gdb-display-breakpoints-buffer (Cell 6): Display a list of breakpoints. Please refere to GNU Manual - Breakpoints Buffer for -usage of the buffer.
    • +usage of the buffer. +
    • gdb-display-threads-buffer (Cell 6): Display running threads in your programs. Please refer to GNU Manual - Threads Buffer and -Multithreaded Debugging for usage of the buffer.
    • +Multithreaded Debugging for usage of the buffer. +

    @@ -3086,8 +3124,10 @@

    With GDB Many Windows

    • gdb-display-disassembly-buffer: displays the current frame as -assembly code.
    • -
    • gdb-display-memory-buffer: displays a portion of program memory.
    • +assembly code. + +
    • gdb-display-memory-buffer: displays a portion of program memory. +

    @@ -3102,9 +3142,9 @@

    With GDB Many Windows

    -
    -

    With Grand Unified Debugger - GUD

    -
    +
    +

    18.2 With Grand Unified Debugger - GUD

    +

    The Grand Unified Debugger, or GUD for short, is an Emacs major mode for debugging. It works on top of command line debuggers. GUD handles @@ -3153,21 +3193,9 @@

    With Grand Unified Debugger - GUD

    - -
    - - - comments powered by Disqus +

    Created: 2016-12-05 Mon 12:21

    +

    Emacs 24.5.1 (Org mode 8.2.10)

    +

    Validate

    diff --git a/docs/emacs-for-proglang.html b/docs/emacs-for-proglang.html index 7d564d6..a0ccbe9 100644 --- a/docs/emacs-for-proglang.html +++ b/docs/emacs-for-proglang.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - Emacs for Programming Languages course on Coursera + + - - + - + - -
    - - - - -

    Back to Table of Contents

    -

    Emacs for Programming Languages course on Coursera

    @@ -260,13 +210,13 @@

    Table of Contents

    first. Racket and Ruby will come later.

    -
    -

    Before using Emacs:

    -
    +
    +

    1 Before using Emacs:

    +
    -
    -

    Emacs and SML in Linux:

    -
    +
    +

    1.1 Emacs and SML in Linux:

    +

    Easy way to install if you are using Ubuntu: sudo apt-get install emacs smlnj. If you use other Linux distributions, use the package @@ -285,16 +235,18 @@

    Emacs

    -
    -

    Emacs and SML Installation on Windows

    -
    +
    +

    1.2 Emacs and SML Installation on Windows

    +
    • If you don't have Emacs yet, download the 64 bit version here: http://sourceforge.net/projects/emacsbinw64/, unpackage it to C:\Program Files\ , then create a shortcut in your desktop to -runemacs.exe, an executable in the emacs\bin directory.
    • +runemacs.exe, an executable in the emacs\bin directory. + -
    • Now, clone my Emacs kit:
    • +
    • Now, clone my Emacs kit: +
    @@ -305,7 +257,8 @@

    Emacs
    • Or, if you don't have git, download release package in either zip or -tar.gz format at: https://github.com/tuhdo/emacs-proglang/releases.
    • +tar.gz format at: https://github.com/tuhdo/emacs-proglang/releases. +
    • You should unpackage into ~/.emacs.d. But before that, you must define your HOME and PATH directory.The path ~/ stands for $HOME @@ -313,10 +266,10 @@

      Emacs and the user can put whatever he/she wants there. PATH is an environment variable in Linux that makes the shell see executable programs, so you can execute them by specifying the program name -only. We can use the same thing in Windows.

    • +only. We can use the same thing in Windows. + -
    • -In Windows, to set your HOME variable: left clicking My Computer +

    • In Windows, to set your HOME variable: left clicking My Computer -> Properties -> Advanced System Settings -> Advanced -> Environment Variables -> New. Then enter HOME in Variable name, and a path of your choice in Variable value. After this, @@ -325,16 +278,15 @@

      Emacs directory. For example, if you home directory that you assigned to the HOME variable is C:\home\, then you must put .emacs.d there. -

      emacs_home.png

      -

    • +

    + -
  • -Now that you created a HOME variable, you need to create one more: +

  • Now that you created a HOME variable, you need to create one more: PATH variable. Emacs searches for any program in PATH variable. Click New, then enter PATH into Variable name. In Variable value, if you install SML using the standard installer, @@ -342,13 +294,13 @@

    Emacs into the text field. In the future, if you want to add more locations that contain programs Emacs can see, add more path and separate each path by a semicolon. -

    emacs_path.png

    -

  • +
    +

    @@ -359,9 +311,9 @@

    Emacs

    -
    -

    Optional but recommended: Swap Control and Capslock

    -
    +
    +

    1.3 Optional but recommended: Swap Control and Capslock

    +

    Swapping Control and Capslock, in general, is not required to make the best out of Emacs, if you at least use regular key PC keyboard or @@ -378,24 +330,24 @@

    Option

    -
    -

    Windows

    -
    +
    +

    1.3.1 Windows

    +
    -
    -

    Linux

    -
    +
    +

    1.3.2 Linux

    +

    Put this in your shell init file (.bashrc, .zshrc…):

    -
    /usr/bin/setxkbmap -option "ctrl:swapcaps"
    +
    /usr/bin/setxkbmap -option "ctrl:swapcaps"
     
    @@ -405,35 +357,38 @@

    Linux<

    -
    -

    Mac OS X

    -
    +
    +

    1.3.3 Mac OS X

    +

    Follow this answer on StackOverflow: Emacs on Mac OS X Leopard key bindings

    -
    -

    If you don't like to swap Capslock and Control…

    -
    +
    +

    1.3.4 If you don't like to swap Capslock and Control…

    +

    You can use your palm to press Control in standard PC keyboard.

    -
    -

    Optional: changing Emacs look and feel

    -
    +
    +

    1.4 Optional: changing Emacs look and feel

    +

    You can change Emacs look and feel easily:

      -
    • Press Alt + x.
    • -
    • Type customize-theme (you can press TAB to complete).
    • -
    • There are some default themes there, select the one you want.
    • +
    • Press Alt + x. +
    • +
    • Type customize-theme (you can press TAB to complete). +
    • +
    • There are some default themes there, select the one you want. +

    @@ -441,8 +396,10 @@

    Option

    @@ -450,31 +407,34 @@

    Option

      -
    • Press Alt + x.
    • -
    • Type list-packages.
    • +
    • Press Alt + x. +
    • +
    • Type list-packages. +
    • Search for the theme names using Control + s. After you press Control + s, enter the theme name and press Control + s again for it to jump to the matched text. The theme names are above the preview picture in the first website; for the second website, you replace the space by dash character. For example, if a theme named "Lush Theme", to search for this theme in package list, enter -"lush-theme".
    • +"lush-theme". +

    -
    -

    General basic Emacs commands

    -
    +
    +

    2 General basic Emacs commands

    +

    I took some parts from my other guide Emacs Mini Manual (PART 1) - THE BASICS. I recommend you to follow the mini manual when you have time.

    -
    -

    Command

    -
    +
    +

    2.1 Command

    +

    In Emacs, every user interaction is a function execution. You press a key to insert a character, Emacs runs self-insert-command. There are @@ -486,11 +446,13 @@

    Comma programming languages, and are used for implementing features in Emacs. Users do not need to care about these functions, unless they want to implement something or modifying the -implementations. +implementations. +
  • Commands: Commands are like functions, but interactive. It means, commands are features provided to users and users -directly use them.
  • +directly use them. +

    @@ -499,9 +461,9 @@

    Comma

    -
    -

    Emacs Key Notation

    -
    +
    +

    2.2 Emacs Key Notation

    +

    Taken from here: EmacsWiki

    @@ -510,67 +472,67 @@

    Emacs - + - + -Prefix -Meaning +Prefix +Meaning -C- -(press and hold) the Control key +C- +(press and hold) the Control key -M- -the Meta key (the Alt key, on most keyboards) +M- +the Meta key (the Alt key, on most keyboards) -S- -the Shift key (e.g.‘S-TAB’ means Shift Tab) +S- +the Shift key (e.g.‘S-TAB’ means Shift Tab) -DEL -the Backspace key (not the Delete key). Inside Emacs, DEL +DEL +the Backspace key (not the Delete key). Inside Emacs, DEL -  -is written as <backspace>. +  +is written as <backspace>. -RET -the Return or Enter key +RET +the Return or Enter key -SPC -the Space bar key +SPC +the Space bar key -ESC -the Escape key +ESC +the Escape key -TAB -the TAB key +TAB +the TAB key @@ -626,24 +588,28 @@

    Emacs

    -
    -

    Emacs Keys are easy to remember

    -
    +
    +

    2.3 Emacs Keys are easy to remember

    +

    The key bindings have a few simple and easy to remember rules:

    • C-x prefix is for default and global bindings that comes with -Emacs.
    • -
    • C-c prefix is for users to define.
    • +Emacs. + +
    • C-c prefix is for users to define. +
    • C-u is for altering behaviors of commands. That is, one command can behave differently depend on how many C-u you pressed first before executing a command. Mostly you just have to hit C-u -once.
    • +once. +
    • C-<number> like C-1, C-2… is similar to C-u, but passing a number to a command. Usually, the number specifies how many times -you want to repeat a command.
    • +you want to repeat a command. +

    @@ -656,20 +622,19 @@

    Emacs example, command like helm-do-grep (the command belongs to Helm, a 3rd party extension to Emacs) can have a key binding like C-c h g. The h stands for Helm and g stands for grep. So, key -bindings are not difficult to remember. +bindings are not difficult to remember.

    -
    -

    Some basic commands

    -
    +
    +

    2.4 Some basic commands

    +
    +
      -
    • -Open file: C-x C-f and browse to the file. You can fuzzy match +

    • Open file: C-x C-f and browse to the file. You can fuzzy match candidates in current directory, e.g "fob" or "fbr" will complete -"foobar". -

      +"foobar".

      C-l to go back to parent directory and C-j to go down to current @@ -678,7 +643,7 @@

      Some

      C-z to see a list of actions that you can apply on highlighting -candidate, TAB to view a file content without visiting it. +candidate, TAB to view a file content without visiting it.

      @@ -688,32 +653,39 @@

      Some

      C-c d on a file to delete it. -

    • +

      +
    • Open recently opened files: C-x b contains a list of opened files and recently opened files. To move between these lists, use left/right arrow keys or use C-o. You can type part of a desired filename and -narrow down.
    • +narrow down. +
    • Close file: C-x k, select a buffer to close. Buffers are simply your opened files, for now. By default, your current editing -buffer is at the top. Press RET to confirm killing the buffer.
    • +buffer is at the top. Press RET to confirm killing the buffer. +
    -
    -

    Basic motion commands

    -
    +
    +

    2.4.1 Basic motion commands

    +

    These key bindings are also used by popular shells such as bash or zsh. I highly recommended you to master these key bindings.

      -
    • Move forward one char: C-f (f stands for forward)
    • -
    • Move backward one char: C-b (b stands for backward)
    • -
    • Move upward one line: C-p (p stands for previous)
    • -
    • Move downward one line: C-n (n stands for next)
    • +
    • Move forward one char: C-f (f stands for forward) +
    • +
    • Move backward one char: C-b (b stands for backward) +
    • +
    • Move upward one line: C-p (p stands for previous) +
    • +
    • Move downward one line: C-n (n stands for next) +

    @@ -722,10 +694,14 @@

    Basic

      -
    • Move to beginning of line: C-a
    • -
    • Move to end of line: C-e
    • -
    • Move forward one word, M-f.
    • -
    • Move backward one word, M-b.
    • +
    • Move to beginning of line: C-a +
    • +
    • Move to end of line: C-e +
    • +
    • Move forward one word, M-f. +
    • +
    • Move backward one word, M-b. +

    @@ -733,18 +709,28 @@

    Basic

      -
    • Scroll forward one screen: C-v, page down
    • -
    • Scroll backward one screen: M-v, page up
    • -
    • Move to the beginning of a sentence: M-a
    • -
    • Move to the end of a sentence: M-e
    • -
    • Recenter a screen: M-l
    • +
    • Scroll forward one screen: C-v, page down +
    • +
    • Scroll backward one screen: M-v, page up +
    • +
    • Move to the beginning of a sentence: M-a +
    • +
    • Move to the end of a sentence: M-e +
    • +
    • Recenter a screen: M-l +
    • Re-position cursor to the top, middle and bottom of the current -screen: M-r
    • -
    • Move to top of the buffer: M-<
    • -
    • Move to end of the buffer: M->
    • -
    • Move to the nth character: M-g c (c stands for character)
    • +screen: M-r + +
    • Move to top of the buffer: M-< +
    • +
    • Move to end of the buffer: M-> +
    • +
    • Move to the nth character: M-g c (c stands for character) +
    • Move to the nth line: M-g l for Emacs < 23.2, M-g g for emacs >= -23.2) (l/g stands for line)
    • +23.2) (l/g stands for line) +

    @@ -764,9 +750,9 @@

    Basic

    -
    -

    Incremental search

    -
    +
    +

    2.4.2 Incremental search

    +

    So, you want to look for something in the buffer? C-s invokes isearch-forward, allows you to look forward from the current point @@ -787,30 +773,43 @@

    Incre

    -
    -

    Basic editing commands:

    -
    +
    +

    2.4.3 Basic editing commands:

    +

    In Emacs, kill means Cut in other editors. These key bindings also work under the terminal.

      -
    • Kill a character at the cursor: C-d
    • +
    • Kill a character at the cursor: C-d +
    • Kill entire line: C-S-DEL (remember, DEL is your <backspace> - key), or C-w (not in stock Emacs)
    • -
    • Kill forward to the end of a word from current cursor: M-d
    • + key), or C-w (not in stock Emacs) + +
    • Kill forward to the end of a word from current cursor: M-d +
    • Kill backward to the beginning of a word from the current cursor: -M-DEL
    • -
    • Kill all spaces at cursor: M-\
    • -
    • Kill all spaces except one at cursor: M-SPC
    • -
    • Kill to the end of line: C-k
    • -
    • Kill a sentence: M-k
    • -
    • Undo: C-/
    • -
    • Redo: C-?
    • -
    • Open a list of killed texts: M-y (not in stock Emacs)
    • -
    • Duplicate line/region: M-c (not in stock Emacs)
    • -
    • Indent whole buffer: C-c i (not in stock Emacs)
    • +M-DEL + +
    • Kill all spaces at cursor: M-\ +
    • +
    • Kill all spaces except one at cursor: M-SPC +
    • +
    • Kill to the end of line: C-k +
    • +
    • Kill a sentence: M-k +
    • +
    • Undo: C-/ +
    • +
    • Redo: C-? +
    • +
    • Open a list of killed texts: M-y (not in stock Emacs) +
    • +
    • Duplicate line/region: M-c (not in stock Emacs) +
    • +
    • Indent whole buffer: C-c i (not in stock Emacs) +

    @@ -824,20 +823,24 @@

    Basic
    • If you do not highlight a text region, M-; adds a comment to the -end of line.
    • +end of line. +
    • If you do not highlight a text region and comment is at the end of -line, M-; comments the whole line (not in stock Emacs).
    • +line, M-; comments the whole line (not in stock Emacs). +
    • If you do not highlight a text region and your current line is being -commented, M-; uncomments the whole line (not in stock Emacs).
    • +commented, M-; uncomments the whole line (not in stock Emacs). +
    • If you highlight a region (i.e. with a mouse), M-; comments out -the region.
    • +the region. +

    -
    -

    Buffer commands

    -
    +
    +

    2.4.4 Buffer commands

    +

    Buffer is where you edit your file content. Buffer holds content of a file temporarily. Anything you write into the buffer won't make @@ -874,72 +877,72 @@

    Buffe - + - + -Key -Binding +Key +Binding -C-x C-s -Command: save-buffer +C-x C-s +Command: save-buffer -  -Save the buffer at point +  +Save the buffer at point -C-x C-w -Command: write-file +C-x C-w +Command: write-file -  -Save the buffer to a different file +  +Save the buffer to a different file -C-x b -Command: switch-to-buffer +C-x b +Command: switch-to-buffer -  -Switch to a different buffer +  +Switch to a different buffer -C-x k -Command: kill-buffer +C-x k +Command: kill-buffer -  -Kill a buffer. RET to kill the +  +Kill a buffer. RET to kill the -  -currently active one +  +currently active one

    -
    -

    Window commands

    -
    +
    +

    2.4.5 Window commands

    +

    Unlike other editors, Emacs can split your frame area into multiple smaller areas. Each such area is called a window. You can divide a frame @@ -999,18 +1002,16 @@

    Windo

    -
    -

    Commands for SML

    -
    +
    +

    3 Commands for SML

    +

    You need these three essential commands to work with your SML assignments. All the demos begin when you see START at the bottom:

      -
    • -C-c C-s runs command sml-prog-proc-switch-to -

      +
    • C-c C-s runs command sml-prog-proc-switch-to

      Description: Start SML REPL. @@ -1020,11 +1021,10 @@

      Comma

      sml-start-proc.gif

      -

    • +
    + -
  • -C-c C-b runs command sml-prog-proc-send-buffer -

    +
  • C-c C-b runs command sml-prog-proc-send-buffer

    Description: Send the current editing buffer to SML REPL for @@ -1035,11 +1035,10 @@

    Comma

    sml-send-buffer.gif

    -

  • +
    + -
  • -C-c C-r runs Command: sml-prog-proc-send-region -

    +
  • C-c C-r runs Command: sml-prog-proc-send-region

    Description: Similar to sml-prog-proc-send-buffer, but instead @@ -1051,7 +1050,8 @@

    Comma

    sml-send-region.gif

    -

  • +
    +

    @@ -1059,66 +1059,64 @@

    Comma

      -
    • -C-c h i runs command helm-semantic-or-imenu that lists variable +

    • C-c h i runs command helm-semantic-or-imenu that lists variable and function definitions in current buffer. -

      sml-helm-imenu.gif

      -
    • +

    + -
  • -Auto-completion: pressing TAB brings up an interface for +

  • Auto-completion: pressing TAB brings up an interface for identifier completion. If you type a few characters and stop for a little moment, a completion popup appears with suitable candidates. -

    sml-completion.gif

    -
  • +
    +
    -
    -

    Commands for Racket

    -
    +
    +

    4 Commands for Racket

    +
    -
    -

    Editing support: You don't have to fight the parentheses

    -
    +
    +

    4.1 Editing support: You don't have to fight the parentheses

    +
    -
    -

    Automatic indentation

    -
    +
    +

    4.1.1 Automatic indentation

    +
      -
    • -aggressive-indent is a minor mode that keeps your code always +

    • aggressive-indent is a minor mode that keeps your code always indented. It reindents after every command. It is available for Lisp modes (such as Racket, Common Lisp, Emacs Lisp…) in this distribution for the course. -

      aggressive-indent.gif

      -
    • +
    +
  • You can also run C-c i to indents whole buffer. In Lisp modes, you won't need it; but for other programming modes, C-c i is always -useful.
  • +useful. +
    -
    -

    Automatic comment

    -
    +
    +

    4.1.2 Automatic comment

    +

    comment-dwim2 is a package that provides extended features compare with the original command comment-dwim. dwim stands for do what i @@ -1138,47 +1136,42 @@

    Autom

    -
    -

    Basic navigation for Lisp expressions

    -
    +
    +

    4.2 Basic navigation for Lisp expressions

    +
      -
    • -C-M-f binds to forward-sexp, move forward over a balanced; +

    • C-M-f binds to forward-sexp, move forward over a balanced; C-M-b binds to backward-sexp, move backward over a balanced expression. Demo: -

      forward-backward-parens.gif

      -
    • +
    + -
  • -C-M-k binds to kill-sexp, kill balanced expression +

  • C-M-k binds to kill-sexp, kill balanced expression forward. Demo: -

    kill-sexp.gif

    -
  • +
    + -
  • -C-M-t binds to transpose-sexps, transpose expressions. Demo: -

    +
  • C-M-t binds to transpose-sexps, transpose expressions. Demo:

    transpose-sexp.gif

    -
  • +
    + -
  • -C-M-<SPC> or C-M-@ binds to mark-sexp, put mark after +

  • C-M-<SPC> or C-M-@ binds to mark-sexp, put mark after following expression. Demo: -

    @@ -1195,7 +1188,8 @@

    Basic in this cheatsheet. In my prebuilt Emacs configuration for you, it uses smartparens package, but smartparens also includes all the features of ParEdit. -

  • +

    +
  • In my Emacs kit for this course, C-j is bound to helm-semantic-or-imenu. It is a convenient way to navigate between @@ -1204,7 +1198,8 @@

    Basic variable definition), the highlighter is positioned at the tag in the Helm buffer. This, in combination with C-<down> and C-<up> to move between definitions in your buffer. You can use this command -to move around buffer effectively.

  • +to move around buffer effectively. +

    @@ -1218,15 +1213,18 @@

    Basic
    • First, I use helm-semantic-or-imenu to move to the function -helm-define-key-with-subkeys and move point there.
    • +helm-define-key-with-subkeys and move point there. +
    • Then, I start helm-semantic-or-imenu again and -helm-define-key-with-subkeys is pre-selected.
    • +helm-define-key-with-subkeys is pre-selected. +
    • Then, I move point to the variable helm-map and execute helm-semantic-or-imenu again on two function: helm-next-source and helm-previous-source. This time, instead of showing the current definition I'm operating in (which is helm-map), it shows the other two definitions in Helm Semantic buffer. This is because -I supplied a prefix argument before running the command.
    • +I supplied a prefix argument before running the command. +
    @@ -1237,13 +1235,13 @@

    Basic

    -
    -

    Geiser commands

    -
    +
    +

    4.3 Geiser commands

    +
    -
    -

    What is Geiser?

    -
    +
    +

    4.3.1 What is Geiser?

    +

    From the homepage:

    @@ -1253,7 +1251,7 @@

    What with one or more Scheme interpreters to keep the Lisp Machine Spirit alive. It draws inspiration (and a bit more) from environments such as Common Lisp’s Slime, Factor’s FUEL, Squeak or Emacs itself, and does -its best to make Scheme hacking inside Emacs (even more) fun. +its best to make Scheme hacking inside Emacs (even more) fun.

    @@ -1262,21 +1260,33 @@

    What

      -
    • Form evaluation in the context of the current file’s module.
    • -
    • Macro expansion.
    • -
    • File/module loading and/or compilation.
    • +
    • Form evaluation in the context of the current file’s module. +
    • +
    • Macro expansion. +
    • +
    • File/module loading and/or compilation. +
    • Namespace-aware identifier completion (including local bindings, -names visible in the current module, and module names).
    • -
    • Autodoc: the echo area shows information about the signature of the procedure/macro around point automatically.
    • -
    • Jump to definition of identifier at point.
    • -
    • Access to documentation (including docstrings when the implementation provides it).
    • -
    • Listings of identifiers exported by a given module.
    • -
    • Listings of callers/callees of procedures (only available in Guile Scheme).
    • +names visible in the current module, and module names). + +
    • Autodoc: the echo area shows information about the signature of the procedure/macro around point automatically. +
    • +
    • Jump to definition of identifier at point. +
    • +
    • Access to documentation (including docstrings when the implementation provides it). +
    • +
    • Listings of identifiers exported by a given module. +
    • +
    • Listings of callers/callees of procedures (only available in Guile Scheme). +
    • Rudimentary support for debugging (when the REPL provides a -debugger) and error navigation.
    • -
    • Support for multiple, simultaneous REPLs.
    • +debugger) and error navigation. + +
    • Support for multiple, simultaneous REPLs. +
    • Support for image display in those Schemes that treat them as first -class values.
    • +class values. +

    @@ -1286,12 +1296,14 @@

    What

    -
    -

    Basic workflow

    -
    +
    +

    4.3.2 Basic workflow

    +
      -
    • Split your Emacs in two windows: one for source code, one for REPL
    • -
    • Write some code in source buffer.
    • +
    • Split your Emacs in two windows: one for source code, one for REPL +
    • +
    • Write some code in source buffer. +
    • Evaluate whole buffer and switch to the context of that buffer with C-c C-a. When you write a Racket file, you are writing a module. To use definitions in the module, you have to switch to that @@ -1301,8 +1313,10 @@

      Basic can also use C-c C-b to execute current file without switching to the REPL. This is useful when you want to write and run test continuously, i.e. write a few tests then execute, then write a few -more and test a few more etc…

    • -
    • Play with your code in the REPL and see the result instantly.
    • +more and test a few more etc… + +
    • Play with your code in the REPL and see the result instantly. +

    @@ -1324,102 +1338,103 @@

    Basic

    -
    -

    Programming assistance

    -
    +
    +

    4.3.3 Programming assistance

    +

    Geiser also provides common features found in IDE:

      -
    • -Autodoc: The minibuffer shows information about the signature of the +

    • Autodoc: The minibuffer shows information about the signature of the function/macro around point automatically. It is enabled by default when geiser-mode is activated. -

      repl-autodoc.png

      -
    • +
    +
  • Code completion: Geiser uses Emacs's default completion-at-point command to provide completion candidates. By default, it is bound to C-M-i (the equivalent of M-TAB); in my Emacs configuration for this guide, I bound it to TAB for buffers with Geiser mode for -convenience.
  • +convenience. +
  • Jump to definition: You can jump to any symbol at point in a Racket buffer while Geiser REPL is active with M-.. To go back to -where you were, use M-,.
  • +where you were, use *M-,*. + -
  • -Open documentation at point: For any symbol, you can execute C-c +

  • Open documentation at point: For any symbol, you can execute C-c C-d C-d to open a buffer that has a brief summary of that symbol, along with two buttons for accessing either its actual source code: [source] button or its HTML documentation in an external browser: [manual] button. -

    repl-mod.png

    -
  • +
    +
  • More evaluation commands: These commands works at expression -level.
  • +level. + -+-+-+ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
    KeyCommandDescriptionKeyCommandDescription
    C-M-xgeiser-eval-definitionEval definition around point. For example, ifC-M-xgeiser-eval-definitionEval definition around point. For example, if
      point is inside a variable or function definition,  point is inside a variable or function definition,
      this command evaluates the whole definition form  this command evaluates the whole definition form
    C-x C-egeiser-eval-last-sexpEval sexp before pointC-x C-egeiser-eval-last-sexpEval sexp before point
    C-c C-rgeiser-eval-regionEval regionC-c C-rgeiser-eval-regionEval region
    @@ -1433,9 +1448,9 @@

    Progr

    -
    -

    Conclusion

    -
    +
    +

    5 Conclusion

    +

    That's it for the basics. I hope it provides you a much better experience with SML and Geiser for the course. You can learn more about Emacs in @@ -1445,21 +1460,9 @@

    Concl

    - -
    - - - comments powered by Disqus +

    Created: 2016-12-05 Mon 12:21

    +

    Emacs 24.5.1 (Org mode 8.2.10)

    +

    Validate

    - \ No newline at end of file + diff --git a/docs/emacs-tutor.html b/docs/emacs-tutor1.html similarity index 61% rename from docs/emacs-tutor.html rename to docs/emacs-tutor1.html index 2c15848..de4fb12 100644 --- a/docs/emacs-tutor.html +++ b/docs/emacs-tutor1.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - Emacs Mini Manual (PART 1) - THE BASICS + + - - + - + - -
    - - - - -

    Back to Table of Contents

    -

    Emacs Mini Manual (PART 1) - THE BASICS

    Table of Contents

    @@ -316,26 +206,29 @@

    Table of Contents

    • Please remember that you can always access a section using the floating table of contents at the upper-right corner of your -screen.
    • +screen. +
    • Many people asked how this manual can be "mini", since it is pretty big for an online single page article. Yes, if this page is exported to PDF, it is more than 40 pages. However, this manual is "mini" relative to the size of the official Emacs manual, which is more -than 600 pages. That's why.
    • +than 600 pages. That's why. +
    • If you find the page is loading too slow for you, you can always clone the git repo of this mini manual and read it offline: -https://github.com/tuhdo/tuhdo.github.io
    • +https://github.com/tuhdo/tuhdo.github.io +
    -
    -

    Why Emacs?

    -
    +
    +

    1 Why Emacs?

    +

    In Emacs, you can do many things aside from editing. Emacs is a programming platform, not just another editor in the sense that people -think. For more details, read the Appendix. +think. For more details, read the Appendix.

    @@ -352,137 +245,126 @@

    Why Em

      -
    • -Performance: Editing a 39MB C source file with no problem. But well, +

    • Performance: Editing a 39MB C source file with no problem. But well, it's not your favorite editor's fault if it crashes from editing such a large source file. -

      performance.gif

      -
    • +

    +
  • Programming:
      -
    • -Jump to any header file: -

      +
    • Jump to any header file:

      jump_headers.gif

      -
    • +
  • + -
  • -Autocompletion: Pay attention to completion candidates when +

  • Autocompletion: Pay attention to completion candidates when include <linux/printk.h> is present and when it's not. -

    auto_complete.gif

    -
  • +
    + -
  • -Showing function arguments: -

    +
  • Showing function arguments:

    func_args.jpg

    -
  • +
    + -
  • -Quickly comment multiple lines: -

    +
  • Quickly comment multiple lines:

    comment.gif

    -
  • +
    + -
  • -GDB: -

    +
  • GDB: -
    +

    gdb-many-windows.gif

    -
  • - +
    + + + -
  • -Diff between current editing file and latest file revision: -

    +
  • Diff between current editing file and latest file revision:

    vc-diff.jpg

    -
  • +
    + -
  • -Magit: From unstage -> stage -> commit -> push -

    +
  • Magit: From unstage -> stage -> commit -> push

    magit.gif

    -
  • +
    + -
  • -Live Grep: -

    +
  • Live Grep:

    live_grep.gif

    -
  • +
    + -
  • -Quickly select any file in a directory under a Version Control +

  • Quickly select any file in a directory under a Version Control System, for example from the Linux kernel. Note that in the demos you may see me type in the commands. You can think of it like the start menu in Windows, but those commands can actually be executed quickly with a shortcut. -

    helm-projectile-find-files-1.gif

    -
  • +
    + -
  • -Quickly select any file/directory from a previous working session: -

    +
  • Quickly select any file/directory from a previous working session:

    helm-buffer-list.gif

    -
  • +
    + -
  • -Emacs is a PDF Reader: I can search text in the PDF file with +

  • Emacs is a PDF Reader: I can search text in the PDF file with highlighting and a table of contents side by side. All can be controlled with keyboard. -

    emacs-read-pdf.gif/ -

  • +

    +

    @@ -491,9 +373,9 @@

    Why Em

    -
    -

    Why this guide?

    -
    +
    +

    2 Why this guide?

    +

    Let's look at part of the Emacs manual:

    @@ -538,9 +420,9 @@

    Why th

    -
    -

    A bit of history

    -
    +
    +

    3 A bit of history

    +

    Quote from GNU Emacs homepage:

    @@ -564,9 +446,9 @@

    A bit

    -
    -

    "I don't want a complicated editor, I want something simple like Notepad"

    -
    +
    +

    4 "I don't want a complicated editor, I want something simple like Notepad"

    +

    Well, that's your choice. But I suggest that writing code without any support is harmful. @@ -642,13 +524,18 @@

    "I don

      -
    • Manually typing does not make you smarter. Not in any form.
    • -
    • Manually typing does not make you a better programmer.
    • +
    • Manually typing does not make you smarter. Not in any form. +
    • +
    • Manually typing does not make you a better programmer. +
    • Manually typing or other tedious tasks (navigating the file system, remembering changes you made to your files…) are a waste of time if -automating is possible. Automate as much as you can.
    • -
    • Good editors help you automate boring tasks.
    • -
    • Typing too much potentially leads to RSI.
    • +automating is possible. Automate as much as you can. + +
    • Good editors help you automate boring tasks. +
    • +
    • Typing too much potentially leads to RSI. +

    @@ -658,13 +545,13 @@

    "I don

    -
    -

    Installation

    -
    +
    +

    5 Installation

    +
    -
    -

    Linux:

    -
    +
    +

    5.1 Linux:

    +

    Easy way to install if you are using Ubuntu: sudo apt-get install emacs. If you use other Linux distributions, use the package manager @@ -678,27 +565,34 @@

    Linux:

      -
    • Install GTK 3: sudo apt-get install libgtk-3-dev libgtk-3-common libgtk-3-0
    • -
    • Download Emacs; or if you prefer the latest Emacs, get it from source: git clone http://repo.or.cz/r/emacs.git
    • +
    • Install GTK 3: sudo apt-get install libgtk-3-dev libgtk-3-common libgtk-3-0 +
    • +
    • Download Emacs; or if you prefer the latest Emacs, get it from source: git clone http://repo.or.cz/r/emacs.git +
    • If you download from the homepage, unpackage: tar xvf - emacs-*.tar.gz
    • + emacs-*.tar.gz +
    • Install GTK: sudo apt-get install libgtk-3-dev libgtk-3-common libgtk-3-0. You have to use gtk3 to be able to use true type -fonts.
    • -
    • cd emacs-<version>*
    • -
    • ./autogen.sh
    • -
    • -Add prefix and path to where you want to install. This is useful if +fonts. +

    • +
    • cd emacs-<version>* +
    • +
    • ./autogen.sh +
    • +
    • Add prefix and path to where you want to install. This is useful if you work on a remote server without root access: ./configure --with-x-toolkit=gtk3 [--prefix=/path/to/dir] -

      You should use GTKx 3, so you will be able to use true type fonts such as Inconsolata for a better Emacs experience. -

    • -
    • make
    • -
    • sudo make install
    • +

      + +
    • make +
    • +
    • sudo make install +

    @@ -717,10 +611,14 @@

    Linux:

      -
    • Download and unpackage as above.
    • -
    • ./configure --without-x [--prefix=/path/to/dir]
    • -
    • make
    • -
    • sudo make install
    • +
    • Download and unpackage as above. +
    • +
    • ./configure --without-x [--prefix=/path/to/dir] +
    • +
    • make +
    • +
    • sudo make install +

    @@ -734,7 +632,7 @@

    Linux:
    -
    alias em='emacs'
    +
    alias em='emacs'
     
    @@ -744,9 +642,9 @@

    Linux:

    -
    -

    Windows:

    -
    +
    +

    5.2 Windows:

    +

    You can either download it on GNU Emacs homepage or better, download the latest 64 bit version: @@ -760,9 +658,9 @@

    Window

    -
    -

    Mac OS X:

    -
    +
    +

    5.3 Mac OS X:

    +

    Download compiled Emacs for Mac OS X: http://emacsformacosx.com/.

    @@ -775,9 +673,9 @@

    Mac OS

    -
    -

    Swap Control and Capslock

    -
    +
    +

    6 Swap Control and Capslock

    +

    Swapping Control and Capslock, in general, is not required to make the best out of Emacs, if you at least use a regular key PC keyboard or @@ -794,24 +692,24 @@

    Swap

    -
    -

    Windows

    -
    +
    +

    6.1 Windows

    +
    -
    -

    Linux

    -
    +
    +

    6.2 Linux

    +

    Put this in your shell init file (.bashrc, .zshrc…):

    -
    /usr/bin/setxkbmap -option "ctrl:swapcaps"
    +
    /usr/bin/setxkbmap -option "ctrl:swapcaps"
     
    @@ -821,31 +719,31 @@

    Linux

    -
    -

    Mac OS X

    -
    +
    +

    6.3 Mac OS X

    +

    Follow this answer on StackOverflow: Emacs on Mac OS X Leopard key bindings

    -
    -

    If you don't like to swap Capslock and Control…

    -
    +
    +

    6.4 If you don't like to swap Capslock and Control…

    +

    You can use your palm to press Control in standard PC keyboard.

    -
    -

    Concepts

    -
    +
    +

    7 Concepts

    +
    -
    -

    Command

    -
    +
    +

    7.1 Command

    +

    In Emacs, every user interaction is a function execution. You press a key to insert a character, Emacs runs self-insert-command. There are @@ -857,11 +755,13 @@

    Comma programming languages, and are used for implementing features in Emacs. Users do not need to care about these functions, unless they want to implement something or modify an existing -implementation. +implementation. +
  • Commands: Commands are like functions, but interactive. It means, commands are features provided to users and users -directly use them.
  • +directly use them. +

    @@ -870,9 +770,9 @@

    Comma

    -
    -

    Emacs Key Notation

    -
    +
    +

    7.2 Emacs Key Notation

    +

    Taken from here: EmacsWiki

    @@ -881,67 +781,67 @@

    Emacs - + - + -Prefix -Meaning +Prefix +Meaning -C- -(press and hold) the Control key +C- +(press and hold) the Control key -M- -the Meta key (the Alt key, on most keyboards) +M- +the Meta key (the Alt key, on most keyboards) -S- -the Shift key (e.g.‘S-TAB’ means Shift Tab) +S- +the Shift key (e.g.‘S-TAB’ means Shift Tab) -DEL -the Backspace key (not the Delete key). Inside Emacs, DEL +DEL +the Backspace key (not the Delete key). Inside Emacs, DEL -  -is written as <backspace>. +  +is written as <backspace>. -RET -the Return or Enter key +RET +the Return or Enter key -SPC -the Space bar key +SPC +the Space bar key -ESC -the Escape key +ESC +the Escape key -TAB -the TAB key +TAB +the TAB key @@ -997,24 +897,28 @@

    Emacs

    -
    -

    Emacs Keys are easy to remember

    -
    +
    +

    7.3 Emacs Keys are easy to remember

    +

    The key bindings have a few simple and easy to remember rules:

    • C-x prefix is for default and global binding that come with -Emacs.
    • -
    • C-c prefix is for users to define.
    • +Emacs. + +
    • C-c prefix is for users to define. +
    • C-u is for altering behaviors of commands. That is, one command can behave differently depending on how many C-u you pressed first before executing a command. Mostly you just have to hit C-u -once.
    • +once. +
    • C-<number> like C-1, C-2… is similar to C-u, but passing a number to a command. Usually, the number specifies how many times -you want to repeat a command.
    • +you want to repeat a command. +

    @@ -1032,13 +936,13 @@

    Emacs

    -
    -

    Ask for help - from Emacs

    -
    +
    +

    7.4 Ask for help - from Emacs

    +
    -
    -

    Built-in help system

    -
    +
    +

    7.4.1 Built-in help system

    +

    I will describe some most useful commands based on my experience. I will not list all, so you have to rely on Emacs to get your @@ -1089,9 +993,9 @@

    Built

    -
    -

    Info

    -
    +
    +

    7.4.2 Info

    +

    M-x info or C-h i to see all the Info manual in Emacs. If you want to learn more about Emacs, after reading my series of manuals, @@ -1111,27 +1015,29 @@

    Info<

    -
    -

    Man

    -
    +
    +

    7.4.3 Man

    +

    You can view man pages with two commands:

      -
    • M-x man: Get a UNIX manual page and put it in a buffer.
    • +
    • M-x man: Get a UNIX manual page and put it in a buffer. +
    • M-x woman: Browse UN*X man page for TOPIC (Without using external Man program). It means, you can view man page without having the man program installed, while the man command above invokes -external man program.
    • +external man program. +
    -
    -

    Point

    -
    +
    +

    7.5 Point

    +

    Point is your current cursor position. From now on, instead of saying "current cursor", I say "point". @@ -1139,9 +1045,9 @@

    Point

    -
    -

    Opening files

    -
    +
    +

    7.6 Opening files

    +

    Let's learn one especially handy command. M-x find-, then press TAB. You will see Emacs offers you a list of possible commands with @@ -1158,12 +1064,18 @@

    Openi

      -
    • file_a_1.c
    • -
    • file_a_2.c
    • -
    • file_a_3.c
    • -
    • file_b_1.c
    • -
    • file_b_1.h
    • -
    • file_b_2.c
    • +
    • file_a_1.c +
    • +
    • file_a_2.c +
    • +
    • file_a_3.c +
    • +
    • file_b_1.c +
    • +
    • file_b_1.h +
    • +
    • file_b_2.c +

    @@ -1216,9 +1128,9 @@

    Openi

    -
    -

    Ido mode

    -
    +
    +

    7.7 Ido mode

    +

    Emacs has an interesting feature called Ido, short for Interactively Do Things. In essence, Ido is a superior interface @@ -1261,16 +1173,19 @@

    Ido m
    • If you want to use wildcard expression, you have to temporary revert -to ordinary find-file via C-f.
    • +to ordinary find-file via C-f. +
    • If you want to select the current directory, C-d. This invokes Dired file manager to open the directory and list the files in current directory. You will learn Dired in later section. For now, if you open the directory, close the current listing by C-x k and -press RET.
    • +press RET. +
    • You select a directory in find-file prompt by pressing RET, not -TAB like ordinary find-file.
    • +TAB like ordinary find-file. +

    @@ -1282,9 +1197,9 @@

    Ido m

    -
    -

    Buffer

    -
    +
    +

    7.8 Buffer

    +

    Buffer is where you edit your file content. Buffer holds content of a file temporarily. Anything you write into the buffer won't make @@ -1321,72 +1236,72 @@

    Buffe - + - + -Key -Binding +Key +Binding -C-x C-s -Command: save-buffer +C-x C-s +Command: save-buffer -  -Save the buffer at point +  +Save the buffer at point -C-x C-w -Command: write-file +C-x C-w +Command: write-file -  -Save the buffer to a different file +  +Save the buffer to a different file -C-x b -Command: switch-to-buffer +C-x b +Command: switch-to-buffer -  -Switch to a different buffer +  +Switch to a different buffer -C-x k -Command: kill-buffer +C-x k +Command: kill-buffer -  -Kill a buffer. RET to kill the +  +Kill a buffer. RET to kill the -  -currently active one +  +currently active one

    -
    -

    Major mode

    -
    +
    +

    7.9 Major mode

    +

    Major modes provide specialized facilities for working on a particular file type, such as syntax highlighting for a programming language. @@ -1404,9 +1319,9 @@

    Major

    -
    -

    Minor mode

    -
    +
    +

    7.10 Minor mode

    +

    Minor modes are optional features which you can turn on or off, not necessarily specific to a type of file or buffer. For example, Auto @@ -1417,9 +1332,9 @@

    Minor

    -
    -

    Basic buffer managements

    -
    +
    +

    7.11 Basic buffer managements

    +

    So, you learn how to open file and create buffer of that file. In other editors, you got something called "tabs". Every time you open a @@ -1456,7 +1371,7 @@

    Basic
    -
    (global-set-key (kbd "C-x C-b") 'ibuffer)
    +
    (global-set-key (kbd "C-x C-b") 'ibuffer)
     
    @@ -1477,15 +1392,19 @@

    Basic
  • First, open many files with different extensions. The Emacs source you used for installation is an great practice target. If you use a built binary, download it and unpackage. Let's assume you download -and unpackage it at ~/Downloads/emacs-24.3.
  • +and unpackage it at ~/Downloads/emacs-24.3. +
  • C-x C-f, navigate to emacs-24.3/lisp/ and open all Lisp files: -*.el. If you use Ido, remember to C-f before type into the prompt
  • +*.el. If you use Ido, remember to C-f before type into the prompt +
  • C-x C-f, navigate to emacs-24.3/src/ and open all C files: -*.c.
  • +*.c. + -
  • Open ibuffer by C-x C-b. You see a huge list of buffers.
  • +
  • Open ibuffer by C-x C-b. You see a huge list of buffers. +
  • @@ -1493,43 +1412,46 @@

    Basic

      -
    • -Suppose that you want to work with C code. / m and enter a major +

    • Suppose that you want to work with C code. / m and enter a major mode to select buffers that belong to this major mode. Prefix / in ibuffer groups filtering commands. TAB to see a list of major modes: -

      ibuffer-filter-major.gif

      -
    • +

    + -
  • Enter c-mode.
  • +
  • Enter c-mode. +
  • Only C buffers remain. But you open buffers in two major modes: c-mode and emacs-lisp-mode. You can create each group for one by pressing / g, and give the group a name. Only execute / g after -executing any filtering commands.
  • +executing any filtering commands. +
  • Up to this point, the filtering is still applied. Press / / to -remove previous filter and return the full buffer list.
  • +remove previous filter and return the full buffer list. +
  • Let's create another group based filtering. / m and enter emacs-lisp-mode. Create another group with / g and give it a name. Now, every time you open files that their buffers satisfy the -filtering criteria, the buffers are put into appropriate groups.
  • +filtering criteria, the buffers are put into appropriate groups. +
  • To open a buffer, o or C-o. o opens a buffer and switch point to it. C-o leaves point on the buffer list. Let's open a buffer with o and C-o. To switch back to the other buffer, do C-x o. C-x o executes other-window command, which cycles among the opening buffers (technically the buffers are in Emacs "windows", -and you are cycling "windows", but we will get to that later).
  • +and you are cycling "windows", but we will get to that later). + -
  • -Either using C-o or o creates another buffer below, leaving +

  • Either using C-o or o creates another buffer below, leaving you two horizontal buffers. You probably don't like the layout because you have a big screen. If you use o, C-x o to switch back to the list and C-x 1 to close other buffer. If you have multiple buffers @@ -1538,40 +1460,45 @@

    Basic active buffer, C-x 0. C-x 3 to create a vertical buffer to the right. It creates an exact duplicate of the active buffer. Now, o on any C buffer again, and point is in that buffer: -

    c-x-3.gif

    -

  • +
    +
  • Edit something in the buffer. Switch back to ibuffer and press g, which runs the command ibuffer-update to refresh the list. You will see an asterisk on the left of your just edited -buffer. It indicates that buffer has been modified.
  • +buffer. It indicates that buffer has been modified. + -
  • -You can also mark a buffer by pressing m on multiple entries to +

  • You can also mark a buffer by pressing m on multiple entries to perform various operations: -

      -
    • view: press A to view the marked buffers
    • +
    • view: press A to view the marked buffers +
    • -
    • save: press S to save the marked buffers
    • +
    • save: press S to save the marked buffers +
    • -
    • close: press D to close the marked buffers
    • +
    • close: press D to close the marked buffers +
    • -
    • revert: press V to discard changes to the marked buffers
    • +
    • revert: press V to discard changes to the marked buffers +

    To unmark a buffer, press u on the marked entries. -

  • +

    +
  • Another way to open the buffer: e (enter), f (find) or RET to bury and replace the list with selected buffer. Switch back to -the list using C-x C-b again.
  • +the list using C-x C-b again. +

    @@ -1580,11 +1507,15 @@

    Basic

      -
    • C-x C-b to open ibuffer.
    • -
    • o or C-o to open a buffer at point.
    • +
    • C-x C-b to open ibuffer. +
    • +
    • o or C-o to open a buffer at point. +
    • e, f or RET bury the buffer list and replace it with the -buffer content.
    • -
    • = to compare the current buffer content with its file.
    • +buffer content. + +
    • = to compare the current buffer content with its file. +

    @@ -1593,187 +1524,190 @@

    Basic

      -
    • Filtering commands:
    • +
    • Filtering commands: +
    -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingsKeyBindings
    / mAdd a filter by a major mode/ mAdd a filter by a major mode
    / nAdd a filter by buffer name./ nAdd a filter by buffer name.
    / cAdd a filter by buffer content./ cAdd a filter by buffer content.
    / fAdd a filter by filename/ fAdd a filter by filename
    / >Add a filter by buffer size/ >Add a filter by buffer size
    / <Add a filter by buffer size/ <Add a filter by buffer size
    / /Remove all filters in effect/ /Remove all filters in effect
      -
    • Filter group commands:
    • +
    • Filter group commands: +
    -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingsKeyBindings
    / gCreate a filter group from filters/ gCreate a filter group from filters
    TABMove to next filter groupTABMove to next filter group
    M-pMove to previous filter groupM-pMove to previous filter group
    / \Remove all active filter groups/ \Remove all active filter groups
    / SSave the current groups with a name/ SSave the current groups with a name
    / RRestore previously saved groups/ RRestore previously saved groups
    / XDelete previously saved groups/ XDelete previously saved groups
      -
    • Sorting commands:
    • +
    • Sorting commands: +
    -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingsKeyBindings
    ,Rotate between sorting modes=,=Rotate between sorting modes
    s iReverse current sorting orders iReverse current sorting order
    s aSort buffers by alphabets aSort buffers by alphabet
    s fSort buffers by filenames fSort buffers by filename
    s vSort buffers by last viewing times vSort buffers by last viewing time
    s sSort buffers by sizes sSort buffers by size
    s mSort buffers by major modess mSort buffers by major modes
    @@ -1784,9 +1718,9 @@

    Basic

    -
    -

    Bookmark: save locations across Emacs sessions

    -
    +
    +

    7.12 Bookmark: save locations across Emacs sessions

    +

    When you read books, you usually cannot read all at once and place a bookmark to go back to continue reading later. Emacs allows you to @@ -1797,57 +1731,57 @@

    Bookm - + - + -Key -Binding +Key +Binding -C-x r m -Command: bookmark-set +C-x r m +Command: bookmark-set -  -Set bookmark at point. After executing the command, a prompt asks for a name. +  +Set bookmark at point. After executing the command, a prompt asks for a name. -  -Enter the name and RET. +  +Enter the name and RET. -C-x r b -Command: bookmark-jump +C-x r b +Command: bookmark-jump -  -Jump to a saved bookmark, specified by user. TAB for getting bookmark list. +  +Jump to a saved bookmark, specified by user. TAB for getting bookmark list. -  -  +  +  -C-x r l -Command: bookmark-bmenu-list +C-x r l +Command: bookmark-bmenu-list -  -Open the list of all bookmarks. +  +Open the list of all bookmarks. @@ -1871,9 +1805,12 @@

    Bookm

      -
    • Dired buffers
    • -
    • Info buffers
    • -
    • Man pages
    • +
    • Dired buffers +
    • +
    • Info buffers +
    • +
    • Man pages +

    @@ -1884,112 +1821,112 @@

    Bookm - + - + -Key -Binding +Key +Binding -RET -Open a bookmark. +RET +Open a bookmark. -  -After you opened the bookmark, you can go back to bookmark list +  +After you opened the bookmark, you can go back to bookmark list -  -by C-x r l. +  +by C-x r l. -1 -Open a bookmark and close other buffers +1 +Open a bookmark and close other buffers -n -Go to next entry +n +Go to next entry -p -Go to previous entry +p +Go to previous entry -s -Save the current bookmark list to file. +s +Save the current bookmark list to file. -o -Open bookmark in other window and move point to it. If you +o +Open bookmark in other window and move point to it. If you -  -want to view side by side, C-x 3 to create a vertical buffer +  +want to view side by side, C-x 3 to create a vertical buffer -  -and bookmark will be opened in the vertical buffer. +  +and bookmark will be opened in the vertical buffer. -C-o -Similar to o but point remains on the bookmark list. +C-o +Similar to o but point remains on the bookmark list. -r -Rename bookmark at point. +r +Rename bookmark at point. -m -Mark bookmark at point for displaying. +m +Mark bookmark at point for displaying. -v -Display all marked bookmarks. +v +Display all marked bookmarks. -d -Flag bookmark for deletion. +d +Flag bookmark for deletion. -x -Delete flagged bookmarks. +x +Delete flagged bookmarks. -u -Unmark marked or flagged bookmarks. +u +Unmark marked or flagged bookmarks. @@ -2000,27 +1937,34 @@

    Bookm
    • Open files and create a few bookmarks. C-x r b to switch between -them.
    • +them. +
    • C-h i to open Info. Pick a node and enter as deep as you -want. Then bookmark and kill current Info buffer.
    • -
    • C-x r l to open the bookmark list and practice the key bindings in the table.
    • +want. Then bookmark and kill current Info buffer. + +
    • C-x r l to open the bookmark list and practice the key bindings in the table. +

    -
    -

    Basic motion commands

    -
    +
    +

    7.13 Basic motion commands

    +

    These key bindings are also used by popular shells such as bash or zsh. I highly recommended you to master these key bindings.

      -
    • Move forward one char: C-f (f stands for forward)
    • -
    • Move backward one char: C-b (b stands for backward)
    • -
    • Move upward one line: C-p (p stands for previous)
    • -
    • Move downward one line: C-n (n stands for next)
    • +
    • Move forward one char: C-f (f stands for forward) +
    • +
    • Move backward one char: C-b (b stands for backward) +
    • +
    • Move upward one line: C-p (p stands for previous) +
    • +
    • Move downward one line: C-n (n stands for next) +

    @@ -2029,10 +1973,14 @@

    Basic

      -
    • Move to beginning of line: C-a
    • -
    • Move to end of line: C-e
    • -
    • Move forward one word, M-f.
    • -
    • Move backward one word, M-b.
    • +
    • Move to beginning of line: C-a +
    • +
    • Move to end of line: C-e +
    • +
    • Move forward one word, M-f. +
    • +
    • Move backward one word, M-b. +

    @@ -2040,18 +1988,28 @@

    Basic

      -
    • Scroll forward one screen: C-v, page down
    • -
    • Scroll backward one screen: M-v, page up
    • -
    • Move to the beginning of a sentence: M-a
    • -
    • Move to the end of a sentence: M-e
    • -
    • Recenter a screen: C-l
    • +
    • Scroll forward one screen: C-v, page down +
    • +
    • Scroll backward one screen: M-v, page up +
    • +
    • Move to the beginning of a sentence: M-a +
    • +
    • Move to the end of a sentence: M-e +
    • +
    • Recenter a screen: C-l +
    • Re-position point to the top, middle and bottom of the current -screen: M-r
    • -
    • Move to top of the buffer: M-<
    • -
    • Move to end of the buffer: M->
    • -
    • Move to the nth character: M-g c (c stands for character)
    • +screen: M-r + +
    • Move to top of the buffer: M-< +
    • +
    • Move to end of the buffer: M-> +
    • +
    • Move to the nth character: M-g c (c stands for character) +
    • Move to the nth line: M-g l for Emacs < 23.2, M-g g for emacs >= -23.2) (l/g stands for line)
    • +23.2) (l/g stands for line) +

    @@ -2066,85 +2024,89 @@

    Basic

    -
    -

    Useful built-in key bindings for navigating pairs

    -
    +
    +

    7.14 Useful built-in key bindings for navigating pairs

    +
    +
      -
    • -C-M-f binds to forward-sexp, move forward over a balanced +

    • C-M-f binds to forward-sexp, move forward over a balanced expression. Demo: -

      forward-sexp.gif

      -
    • +
    + -
  • -C-M-b binds to backward-sexp, move backward over a balanced +

  • C-M-b binds to backward-sexp, move backward over a balanced expression. Demo: -

    backward-sexp.gif

    -
  • +
    + -
  • -C-M-k binds to kill-sexp, kill balanced expression +

  • C-M-k binds to kill-sexp, kill balanced expression forward. Demo: -

    kill-sexp.gif

    -
  • +
    + -
  • -C-M-t binds to transpose-sexps, transpose expressions. Demo: -

    +
  • C-M-t binds to transpose-sexps, transpose expressions. Demo:

    transpose-sexp.gif

    -
  • +
    + -
  • -C-M-<SPC> or C-M-@ binds to mark-sexp, put mark after +

  • C-M-<SPC> or C-M-@ binds to mark-sexp, put mark after following expression. Demo: -

    mark-sexp.gif

    -
  • +
    +
    -
    -

    Basic editing commands

    -
    +
    +

    7.15 Basic editing commands

    +

    In Emacs, kill means Cut in other editors. These key bindings also work under the terminal.

      -
    • Kill a character at the point: C-d
    • -
    • Kill entire line: C-S-DEL (remember, DEL is your <backspace> key)
    • -
    • Kill forward to the end of a word from current point: M-d
    • +
    • Kill a character at the point: C-d +
    • +
    • Kill entire line: C-S-DEL (remember, DEL is your <backspace> key) +
    • +
    • Kill forward to the end of a word from current point: M-d +
    • Kill backward to the beginning of a word from the current point: -M-DEL
    • -
    • Kill all spaces at point: M-\
    • -
    • Kill all spaces except one at point: M-SPC
    • -
    • Kill to the end of line: C-k
    • -
    • Kill a sentence: M-k
    • +M-DEL + +
    • Kill all spaces at point: M-\ +
    • +
    • Kill all spaces except one at point: M-SPC +
    • +
    • Kill to the end of line: C-k +
    • +
    • Kill a sentence: M-k +

    @@ -2158,16 +2120,18 @@

    Basic
    • If you do not highlight a text region, M-; adds a comment to the -end of line.
    • +end of line. +
    • If you highlight a region (i.e. with a mouse), M-; comments out -the region.
    • +the region. +

    -
    -

    Dynamic Abbreviations

    -
    +
    +

    7.16 Dynamic Abbreviations

    +

    Dynamic Abbreviations are a completion feature in Emacs, but work for text and is context-independent. After you type a word once, if you @@ -2181,20 +2145,26 @@

    Dynam

      -
    • Type "thisIsaVeryVeryVeryVeryLongWord" into a buffer of your choice.
    • -
    • Add newline or whitespace.
    • -
    • Type "thisIs" and M-/. Great, Emacs automatically completes for you.
    • +
    • Type "thisIsaVeryVeryVeryVeryLongWord" into a buffer of your choice. +
    • +
    • Add newline or whitespace. +
    • +
    • Type "thisIs" and M-/. Great, Emacs automatically completes for you. +
    • Type "random" into your buffer and M-/. You will see Emacs -tell your that no dynamic abbreviations found.
    • +tell your that no dynamic abbreviations found. +
    • Type "randomWord" and add a whitespace. Now, type "random" and M-/ again. Emacs can now happily complete "random" for you. Remember that -to let Emacs remember your words, you have to type a complete word.
    • +to let Emacs remember your words, you have to type a complete word. +

    -
    -

    Kill ring

    -
    +
    +

    7.17 Kill ring

    +
    +

    Kill ring is the list of previously killed contents. You can insert the most recently killed element by C-y. @@ -2222,22 +2192,29 @@

    Kill

      -
    • Kill the three lines with C-k, from top to bottom.
    • +
    • Kill the three lines with C-k, from top to bottom. +
    • -
    • C-y or C-1 C-y, you will see ccc got inserted.
    • +
    • C-y or C-1 C-y, you will see ccc got inserted. +
    • C-2 C-y, you will see bbb got inserted; C-y again, you will -see bbb got inserted again. bbb now becomes head of the list.
    • +see bbb got inserted again. bbb now becomes head of the list. +
    • C-2 C-y, you will see aaa got inserted; C-y again, you will -see aaa got inserted again. aaa now bedcomes head of the list.
    • +see aaa got inserted again. aaa now bedcomes head of the list. + -
    • Insert the 3 lines and kill all again.
    • +
    • Insert the 3 lines and kill all again. +
    • C-3 C-y, you will see aaa got inserted; C-y again, you will -see aaa got inserted again. aaa now bedcomes head of the list
    • +see aaa got inserted again. aaa now bedcomes head of the list + -
    • … and so on …
    • +
    • … and so on … +

    @@ -2265,9 +2242,9 @@

    Kill

    -
    -

    Mark and region

    -
    +
    +

    7.18 Mark and region

    +

    Mark is a record of a position in a buffer. It's like when reading a book, you record various places in a book and these records are called @@ -2288,37 +2265,46 @@

    Mark

      -
    • Place a mark in buffer with C-SPC C-SPC. Let's call this mark A.
    • +
    • Place a mark in buffer with C-SPC C-SPC. Let's call this mark A. +
    • Move to another place in the buffer, place another mark with C-SPC -C-SPC. this is mark B.
    • +C-SPC. this is mark B. + -
    • Move to another place and C-SPC C-SPC again. This is mark C.
    • +
    • Move to another place and C-SPC C-SPC again. This is mark C. +
    • Now press C-u C-SPC. You can see point goes back to mark -B.
    • +B. + -
    • C-u C-SPC again. Point goes back to mark A.
    • +
    • C-u C-SPC again. Point goes back to mark A. +
    • -
    • C-u C-SPC again. Point goes back to mark C.
    • +
    • C-u C-SPC again. Point goes back to mark C. +
    • Let's create a region: C-SPC, then move point forward. What -happened?
    • +happened? +
    • The highlighted area is called a region. You can perform editing commands on the region:
        -
      • C-w to kill the region
      • -
      • M-w to copy the region
      • -
      • C-y to yank (equivalent to paste) the region.
      • -
    • +
    • C-w to kill the region +
    • +
    • M-w to copy the region +
    • +
    • C-y to yank (equivalent to paste) the region. +
    • +
    + -
  • -Let's copy or kill a region; you should select a big region. Now +

  • Let's copy or kill a region; you should select a big region. Now yank (paste) it elsewhere. After yanking, you notice point is not at the original location anymore. If you want to return to the where you yanked, C-u C-SPC or C-x C-x. -

    When you yank, you create a mark at point before the new content is @@ -2356,13 +2342,14 @@

    Mark

    Practice until you get used to these two commands. -

  • +

    +

    -
    -

    Mark ring

    -
    +
    +

    7.19 Mark ring

    +

    Emacs stores buffer marks in a list, that's why you are able to cycle through various marks in the exercise above. You can cycle through the @@ -2373,9 +2360,9 @@

    Mark

    -
    -

    Global mark ring

    -
    +
    +

    7.20 Global mark ring

    +

    Mark ring is local to each buffer. If you switch to another buffer, you have a new local mark ring. @@ -2393,9 +2380,9 @@

    Globa

    -
    -

    Undo/redo

    -
    +
    +

    7.21 Undo/redo

    +

    To undo: C-/ or C-x u

    @@ -2416,9 +2403,12 @@

    Undo/

      -
    • insert: "aaa"
    • -
    • insert: "bbb"
    • -
    • insert: "ccc"
    • +
    • insert: "aaa" +
    • +
    • insert: "bbb" +
    • +
    • insert: "ccc" +

    @@ -2434,11 +2424,16 @@

    Undo/

      -
    • insert: "aaa"
    • -
    • insert: "bbb"
    • -
    • insert: "ccc"
    • -
    • undo insert: "ccc"
    • -
    • undo insert: "bbb"
    • +
    • insert: "aaa" +
    • +
    • insert: "bbb" +
    • +
    • insert: "ccc" +
    • +
    • undo insert: "ccc" +
    • +
    • undo insert: "bbb" +

    @@ -2470,17 +2465,17 @@

    Undo/

    -
    -

    Search for text

    -
    +
    +

    7.22 Search for text

    +

    Content search is an essential feature in every editor. Emacs has many built-in tools for this problem.

    -
    -

    Incremental search

    -
    +
    +

    7.22.1 Incremental search

    +

    So, you want to look for something in the buffer? C-s invokes isearch-forward, allows you to look forward from the current point @@ -2538,8 +2533,10 @@

    Incre

      -
    • M-p moves to the previous input.
    • -
    • M-n moves to the next input.
    • +
    • M-p moves to the previous input. +
    • +
    • M-n moves to the next input. +

    @@ -2555,99 +2552,99 @@

    Incre - + - + -Key -Binding +Key +Binding -M-s . -Command: isearch-forward-symbol-at-point +M-s . +Command: isearch-forward-symbol-at-point -  -Feed the symbol at point to C-s +  +Feed the symbol at point to C-s -  -perform search +  +perform search -M-s o -Command: occur +M-s o +Command: occur -  -Run occur +  +Run occur -M-s h . -Command: highlight-symbol-at-point +M-s h . +Command: highlight-symbol-at-point -  -Highlight the symbol at point +  +Highlight the symbol at point -M-s h l -Command: highlight-lines-matching-regexp +M-s h l +Command: highlight-lines-matching-regexp -  -Highlight lines that match input regexp +  +Highlight lines that match input regexp -M-s h r -Command: highlight-regexp +M-s h r +Command: highlight-regexp -  -Highlight according to regexp +  +Highlight according to regexp -M-s h u -Command: unhighlight-regexp +M-s h u +Command: unhighlight-regexp -  -Turn off highlighting strings that match +  +Turn off highlighting strings that match -  -regexp. +  +regexp.

    -
    -

    Occur

    -
    +
    +

    7.22.2 Occur

    +

    Command occur lists all line that match a string or a regexp and displays the search result in a buffer named *Occur*. occur is @@ -2670,10 +2667,13 @@

    Occur

      -
    • M-g n to go to next match.
    • -
    • C-x z to repeat previous command.
    • +
    • M-g n to go to next match. +
    • +
    • C-x z to repeat previous command. +
    • From now on, keep pressing z to repeat previous command until your -press a different character.
    • +press a different character. +

    @@ -2717,88 +2717,88 @@

    Occur - + - + -Key -Binding +Key +Binding -C-n -Go to next line +C-n +Go to next line -C-p -Go to previous line +C-p +Go to previous line -< -Go to beginning of buffer +< +Go to beginning of buffer -> -Go to end of buffer +> +Go to end of buffer -e -Edit current *Occur* buffer +e +Edit current *Occur* buffer -C-c C-c -When finish with editing, C-c C-c +C-c C-c +When finish with editing, C-c C-c -  -to exit editing mode +  +to exit editing mode -g -If your searching file is updated, +g +If your searching file is updated, -  -press g refreshes the *Occur* +  +press g refreshes the *Occur* -  -buffer to reflect the changes +  +buffer to reflect the changes -o -Jump to the match and switch point +o +Jump to the match and switch point -C-o -Jump to the match but point remain +C-o +Jump to the match but point remain -  -on *Occur* +  +on *Occur* @@ -2811,17 +2811,19 @@

    Occur

    -
    -

    Query replace

    -
    +
    +

    7.22.3 Query replace

    +

    To replace something, M-% to execute query-replace. M-% asks you two inputs:

      -
    • A string to be replaced.
    • -
    • A string to replace.
    • +
    • A string to be replaced. +
    • +
    • A string to replace. +

    @@ -2842,32 +2844,36 @@

    Query
    • It can be that left hand presses % (or S-5) and right hand presses -C-M-.
    • +C-M-. +
    • It can be that right hand presses C- first, then left hand presses -M-%.
    • +M-%. +

    -
    -

    Multi-occur

    -
    +
    +

    7.22.4 Multi-occur

    +

    It is the same as occur except it asks user for multiple buffers.

    • multi-occur asks for buffers to search. You enter buffer by buffer -until you give it empty input.
    • +until you give it empty input. +
    • multi-occur-in-matching-buffers requires a regexp, and it searches -for occurences in buffers that match the regexp.
    • +for occurences in buffers that match the regexp. +
    -
    -

    Grep

    -
    +
    +

    7.22.5 Grep

    +

    M-x rgrep allows you to search for text with external grep command and displays the results in a buffer. The good thing about running @@ -2909,103 +2915,103 @@

    Grep< - + - + -Key -Description +Key +Description -TAB -Go to next match, but do not display matched buffer +TAB +Go to next match, but do not display matched buffer -S-TAB -Go to previous match, but do not display matched buffer +S-TAB +Go to previous match, but do not display matched buffer -{ -Go to previous file, do not display matched buffer +{ +Go to previous file, do not display matched buffer -} -Go to next file, do not display matched buffer +} +Go to next file, do not display matched buffer -C-o -Display matched location, but do not switch point to matched buffer +C-o +Display matched location, but do not switch point to matched buffer -  -(Only available in Emacs > 24.3) +  +(Only available in Emacs > 24.3) -n -Display next matched buffer, but do not switch point +n +Display next matched buffer, but do not switch point -p -Display previous matched buffer, but do not switch point +p +Display previous matched buffer, but do not switch point -M-g n -Display next matched buffer, switch point to matched position +M-g n +Display next matched buffer, switch point to matched position -M-g p -Display previous matched buffer, switch point to matched position +M-g p +Display previous matched buffer, switch point to matched position -RET -Display matched location, switch point to matched bufer +RET +Display matched location, switch point to matched bufer -SPC -Scroll down, equivalent to C-v +SPC +Scroll down, equivalent to C-v -S-SPC -Scroll up, equivalent to M-v +S-SPC +Scroll up, equivalent to M-v -g -Refresh the *grep* buffer with previously executed command +g +Refresh the *grep* buffer with previously executed command -q -Quit *grep* buffer +q +Quit *grep* buffer @@ -3020,9 +3026,9 @@

    Grep<

    -
    -

    Modeline

    -
    +
    +

    7.23 Modeline

    +

    The mode line is the empty area below the buffer. It has useful summary information about the buffer shown in the window. @@ -3032,7 +3038,7 @@

    Model The text displayed in the mode line has the following format:

    -
    +

    cs:ch-fr | buf | pos line | (major minor)

    @@ -3071,10 +3077,12 @@

    Model
    • This shows two dashes (‘–’) if the buffer displayed in the window has the same contents as the corresponding file on the disk; i.e., -if the buffer is “unmodified”.
    • +if the buffer is “unmodified”. +
    • If the buffer is modified, it shows two stars (‘**’). For a read-only buffer, it shows ‘%*’ if the buffer is modified, and ‘%%’ -otherwise. You can see that in the picture, the buffer is modified.
    • +otherwise. You can see that in the picture, the buffer is modified. +

    @@ -3129,9 +3137,9 @@

    Model

    -
    -

    Minibuffer

    -
    +
    +

    7.24 Minibuffer

    +

    Minibuffer is the small area at the bottom of your Emacs screen.

    @@ -3154,9 +3162,12 @@

    Minib

      -
    • M-p moves to the previous input in minibuffer history.
    • -
    • M-n moves to the next input in minibuffer history.
    • -
    • M-r searches for an input that matches the supplied regexp.
    • +
    • M-p moves to the previous input in minibuffer history. +
    • +
    • M-n moves to the next input in minibuffer history. +
    • +
    • M-r searches for an input that matches the supplied regexp. +

    @@ -3166,9 +3177,9 @@

    Minib

    -
    -

    Echo area

    -
    +
    +

    7.25 Echo area

    +

    Minibuffer can be used for output as well. The echo area is used for displaying messages made with the message primitive, and for echoing @@ -3182,9 +3193,10 @@

    Echo

    -
    -

    Frames

    -
    +
    +

    7.26 Frames

    +
    +

    An application window in an operating system is called a Frame in Emacs. So, you execute Emacs from the command line and open Emacs, @@ -3215,155 +3227,155 @@

    Frame - + - + -Key -Binding +Key +Binding -C-x 5 C-f -Command: find-file-other-frame +C-x 5 C-f +Command: find-file-other-frame -  -Open file in a different frame +  +Open file in a different frame -C-x 5 f -Command: find-file-other-frame +C-x 5 f +Command: find-file-other-frame -  -Same as C-x 5 C-f +  +Same as C-x 5 C-f -C-x 5 C-o -Command: display-buffer-other-frame +C-x 5 C-o +Command: display-buffer-other-frame -  -Open buffer in a different frame and move point there +  +Open buffer in a different frame and move point there -C-x 5 . -Command: find-tag-other-frame +C-x 5 . +Command: find-tag-other-frame -  -Find tag at point in a different frame +  +Find tag at point in a different frame -C-x 5 0 -Command: delete-frame +C-x 5 0 +Command: delete-frame -  -Delete the current frame point is in +  +Delete the current frame point is in -C-x 5 1 -Command: delete-other-frames +C-x 5 1 +Command: delete-other-frames -  -Delete other frames except the one at point +  +Delete other frames except the one at point -C-x 5 2 -Command: make-frame-command +C-x 5 2 +Command: make-frame-command -  -Create a frame +  +Create a frame -C-x 5 b -Command: switch-to-buffer-other-frame +C-x 5 b +Command: switch-to-buffer-other-frame -  -Same as C-x 5 C-o +  +Same as C-x 5 C-o -C-x 5 d -Command: dired-other-frame +C-x 5 d +Command: dired-other-frame -  -Open a Dired buffer in another frame +  +Open a Dired buffer in another frame -C-x 5 m -Command: compose-mail-other-frame +C-x 5 m +Command: compose-mail-other-frame -  -Open another frame for composing email +  +Open another frame for composing email -C-x 5 o -Command: other-frame +C-x 5 o +Command: other-frame -  -Cycle through available frames +  +Cycle through available frames -C-x 5 r -Command: find-file-read-only-other-frame +C-x 5 r +Command: find-file-read-only-other-frame -  -Open file for read only in another frame +  +Open file for read only in another frame

    -
    -

    Window

    -
    +
    +

    7.27 Window

    +

    Unlike other editors, Emacs can split your frame area into multiple smaller areas. Each such area is called a window. You can divide a frame @@ -3428,207 +3440,207 @@

    Windo - + - + -Key -Binding +Key +Binding -C-x 4 C-f -Command: find-file-other-window +C-x 4 C-f +Command: find-file-other-window -  -Just like find-file discussed earlier, except open file +  +Just like find-file discussed earlier, except open file -  -in new window. If the current frame only has one window, +  +in new window. If the current frame only has one window, -  -a new window is created. +  +a new window is created. -C-x 4 C-o -Command: display-buffer +C-x 4 C-o +Command: display-buffer -  -Select a buffer from buffer list and display it in another +  +Select a buffer from buffer list and display it in another -  -window but not move point to that window. +  +window but not move point to that window. -C-x 4 . -Command: find-tag-other-window +C-x 4 . +Command: find-tag-other-window -  -Open the tag at point in another window (more on this later) +  +Open the tag at point in another window (more on this later) -C-x 4 0 -Command: kill-buffer-and-window +C-x 4 0 +Command: kill-buffer-and-window -  -Just like C-x 0 but kill the buffer in that window as well. +  +Just like C-x 0 but kill the buffer in that window as well. -C-x 4 a -Command: add-change-log-entry-other-window +C-x 4 a +Command: add-change-log-entry-other-window -  -Open another buffer and allow you to record the change of +  +Open another buffer and allow you to record the change of -  -the current editing file. These days, you use version control +  +the current editing file. These days, you use version control -  -system to manage file changes,and Emacs does this better. +  +system to manage file changes,and Emacs does this better. -  -Probably this feature exists when thing like Git does not exist. +  +Probably this feature exists when thing like Git does not exist. -C-x 4 b -Command: switch-to-buffer-other-window +C-x 4 b +Command: switch-to-buffer-other-window -  -Open a selected buffer in another window and move point to +  +Open a selected buffer in another window and move point to -  -that window. +  +that window. -C-x 4 c -Command: clone-indirect-buffer-other-window +C-x 4 c +Command: clone-indirect-buffer-other-window -  -Clone the current buffer in another window and give it a +  +Clone the current buffer in another window and give it a -  -different buffer name. +  +different buffer name. -C-x 4 d -Command: dired-other-window +C-x 4 d +Command: dired-other-window -  -Open a dired buffer in another window. Dired is a built-int +  +Open a dired buffer in another window. Dired is a built-int -  -file manager in Emacs. We will discuss later. +  +file manager in Emacs. We will discuss later. -C-x 4 f -Command: find-file-other-window +C-x 4 f +Command: find-file-other-window -  -Same as C-x 4 C-f +  +Same as C-x 4 C-f -C-x 4 m -Command: compose-mail-other-window +C-x 4 m +Command: compose-mail-other-window -  -Write mail in other window. You can write email and send it +  +Write mail in other window. You can write email and send it -  -directly from Emacs. +  +directly from Emacs. -C-x 4 r -Command: find-file-read-only-other-window +C-x 4 r +Command: find-file-read-only-other-window -  -Similar to find-file-other-window, but open for read-only. +  +Similar to find-file-other-window, but open for read-only. -M-<next> -Command: scroll-other-window +M-<next> +Command: scroll-other-window -  -Scroll other window forward. +  +Scroll other window forward. -M-<prior> -Command: scroll-other-window-down +M-<prior> +Command: scroll-other-window-down -  -Scroll the other window backward. +  +Scroll the other window backward. @@ -3638,14 +3650,16 @@

    Windo

      -
    • Visit my manual again :)
    • +
    • Visit my manual again :) +
    • Or much faster, access it directly from Emacs with it amazing help system. So, if you want to know all key bindings to prefix C-x 4, just C-x 4 and then C-h. If you enter a prefix key and enter C-h after it, it will list all of the key bindings and commands start with that prefix. This is really nice, compare to other -editors that hide all this information deep within layers of menus.
    • +editors that hide all this information deep within layers of menus. +

    @@ -3654,9 +3668,9 @@

    Windo

    -
    -

    Prefix Arguments

    -
    +
    +

    7.28 Prefix Arguments

    +

    In Emacs, behind anything is a function. Functions can accept arguments. You can also pass arguments into Emacs commands to modify @@ -3728,9 +3742,9 @@

    Prefi

    -
    -

    Basic file management with Dired

    -
    +
    +

    7.29 Basic file management with Dired

    +

    Emacs has a built-in one called Dired, short for (Dir)ectory (Ed)itor. @@ -3742,39 +3756,40 @@

    Basic

    -
    -

    Enter Dired

    -
    +
    +

    7.29.1 Enter Dired

    +
    + -+-+ - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-x dSelect directory of your choice and start Dired in that directoryC-x dSelect directory of your choice and start Dired in that directory
    C-x 4 dSelect directory of your choice and start Dired in another windows.C-x 4 dSelect directory of your choice and start Dired in another windows.
    C-x C-fSelect a directory to enter DiredC-x C-fSelect a directory to enter Dired
    @@ -3786,39 +3801,39 @@

    Enter

    -
    -

    Navigation

    -
    +
    +

    7.29.2 Navigation

    +
    -+-+ - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    nMove to next entry below point.nMove to next entry below point.
    pMove to previous entry above point.pMove to previous entry above point.
    C-sFind text using Isearch; useful for searching entries in DiredC-sFind text using Isearch; useful for searching entries in Dired
    @@ -3834,9 +3849,10 @@

    Navig

    -
    -

    Create files

    -
    +
    +

    7.29.3 Create files

    +
    +

    To create a new file in Dired, you use the same C-x C-f and C-x 4 C-f variant. @@ -3846,26 +3862,26 @@

    Creat - + - + -Key -Binding +Key +Binding -+ -Prompts for a directory name and create one after RET. ++ +Prompts for a directory name and create one after RET. -C-x C-f -Create a new file. This is your regular find-file. +C-x C-f +Create a new file. This is your regular find-file. @@ -3876,56 +3892,59 @@

    Creat
    • Create a new directory called dired_practice or a name of your -choice.
    • -
    • Create a new file of your choice.
    • +choice. + +
    • Create a new file of your choice. +

    -
    -

    Visit files

    -
    +
    +

    7.29.4 Visit files

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    f or e or RETOpen current file at point.f or e or RETOpen current file at point.
    oOpen file at point in another window.oOpen file at point in another window.
    C-oOpen file at point in another window, but do not select that window.C-oOpen file at point in another window, but do not select that window.
    vOpen file for read only.vOpen file for read only.
    ^Open parent directory and create another Dired buffer of parent directory^Open parent directory and create another Dired buffer of parent directory
    @@ -3934,30 +3953,33 @@

    Visit Exercise:

      -
    • Assume you are in your newly created directory in previous section.
    • -
    • Go up to the parent directory using ^.
    • +
    • Assume you are in your newly created directory in previous section. +
    • +
    • Go up to the parent directory using ^. +
    • Open another directory. You will enter that directory, and a new -buffer is created for listing the content of that directory.
    • -
    • Go up to the parent directory using ^.
    • -
    • Repeat opening and go up parent directory a few times.
    • -
    • -C-x b and TAB. You will see a bunch of opened directory through +buffer is created for listing the content of that directory. +

    • +
    • Go up to the parent directory using ^. +
    • +
    • Repeat opening and go up parent directory a few times. +
    • +
    • C-x b and TAB. You will see a bunch of opened directory through your filesystem navigation. Whenever you open a file or directory, using Dired or other methods, you have a buffer of that directory. -

      At this point, you may feel annoyed that Dired opens too many buffers and it will go out of control at some point. Worry not! That's why you have ibuffer. -

    • +

      + -
    • M-x ibuffer or C-x C-b if you've already replaced list-buffers.
    • -
    • -/ m and select dired-mode. / g and name the group Dired and +

    • M-x ibuffer or C-x C-b if you've already replaced list-buffers. +
    • +
    • / m and select dired-mode. / g and name the group Dired and you have a separate group for managing directories. No more cluttered view with other buffers. You can stop worrying now. -

      @@ -3972,10 +3994,14 @@

      Visit

        -
      • directory_root/dir1/dir2/dir3/dir4/
      • -
      • directory_root/dir2/dir2/dir3/dir4/
      • -
      • directory_root/dir5/dir6/dir7/dir8/
      • -
      • ….
      • +
      • directory_root/dir1/dir2/dir3/dir4/ +
      • +
      • directory_root/dir2/dir2/dir3/dir4/ +
      • +
      • directory_root/dir5/dir6/dir7/dir8/ +
      • +
      • …. +

      The layouts of top two directories are common when you have to @@ -3994,14 +4020,15 @@

      Visit can freely navigate the filesytem without having to remember the working directory to get back later, because you can easily go back to it quick and easy. -

    • +

      +

    -
    -

    File Marking

    -
    +
    +

    7.29.5 File Marking

    +

    You flag files for deletion. You mark files for everything else (i.e. copy, move, link files…). There are many marking commands for @@ -4014,42 +4041,42 @@

    File - + - + -Key -Binding +Key +Binding -m -mark the entry at point. You can mark more than one, either +m +mark the entry at point. You can mark more than one, either -  -downward or upward with prefix argument. +  +downward or upward with prefix argument. -% m -mark all files whose names match supplied regexp. +% m +mark all files whose names match supplied regexp. -% g -match all files whose contents match the supplied +% g +match all files whose contents match the supplied -  -regexp. This is the same as using Grep. +  +regexp. This is the same as using Grep. @@ -4061,9 +4088,9 @@

    File

    -
    -

    Operating on files

    -
    +
    +

    7.29.6 Operating on files

    +

    These commands use uppercase character. If you see an uppercase character for a command, it means S-<character>. @@ -4073,59 +4100,59 @@

    Opera - + - + -Key -Binding +Key +Binding -C -Prompt for a location to copy the file at point (if no file +C +Prompt for a location to copy the file at point (if no file -  -is marked) or marked files. +  +is marked) or marked files. -R -Prompt for a location to rename or move file at point (if no +R +Prompt for a location to rename or move file at point (if no -  -file is marked) or marked files. This is the same as mv +  +file is marked) or marked files. This is the same as mv -  -command in shell. +  +command in shell. -H -Prompt for a location to create a hard link. +H +Prompt for a location to create a hard link. -S -Prompt for a location to create a symbolic link. +S +Prompt for a location to create a symbolic link. -M -Change permission bits of file at point or marked files. +M +Change permission bits of file at point or marked files. @@ -4134,95 +4161,104 @@

    Opera Exercise:

      -
    • Create a new directory at the current directory.
    • +
    • Create a new directory at the current directory. +
    • Assume that your still keep the marked file in the above section; C and prompt for the directory you have created. RET to confirm -copying.
    • +copying. +
    • If you want to move marked files/directories, use R. If you want to rename, mark only a single file/directory and put a new name in -the rename prompt.
    • -
    • Enter the directory you have just copied the files.
    • +the rename prompt. + +
    • Enter the directory you have just copied the files. +
    • Move your cursor on a file and H to create a hard link. A prompt ask for destination and the link name. Create a link at the current -location with different name from the original file.
    • +location with different name from the original file. +
    • Move your cursor on a file and S to create a symolic link. A prompt ask for destination and the link name. Create a link at the current -location with different name from the original file.
    • +location with different name from the original file. +
    • Move your cursor on either the hardlink or symlink you created and -M and change the bit permission; set it to something like 000.
    • +M and change the bit permission; set it to something like 000. +
    • After that, press g to refresh the Dired buffer. Look at the original files the links point to, you will see the permission -attributes are cleared and you won't be able to access those files.
    • +attributes are cleared and you won't be able to access those files. +

    -
    -

    Deleting files

    -
    +
    +

    7.29.7 Deleting files

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    dflags file for deletion.dflags file for deletion.
    uremove flagged files.uremove flagged files.
    #flag all auto-save files (files whose names start and end with ‘#’).#flag all auto-save files (files whose names start and end with ‘#’).
    ~flag all backup files~flag all backup files
    % &*flag for deletion all files that match dired-garbage-files-regexp.% &*flag for deletion all files that match dired-garbage-files-regexp.
    % dflag files which matches a regexp.% dflag files which matches a regexp.
    xconfirm and delete flagged files.xconfirm and delete flagged files.
    -
    -

    Execute shell commands in Dired

    -
    +
    +

    7.29.8 Execute shell commands in Dired

    +

    Just like in a shell, you can execute commands in the current directory in Dired too. @@ -4232,67 +4268,68 @@

    Execu - + - + -Key -Binding +Key +Binding -! -execute a command on selected file or files. +! +execute a command on selected file or files. -& -execute a command on selected file or files asynchronously. +& +execute a command on selected file or files asynchronously.

    -
    -

    Compare files

    -
    +
    +

    7.29.9 Compare files

    +
    + -+-+ - - + + - - + + - - + +
    KeyBindingKeyBinding
    =compares the file at point with another file supplied by user from=compares the file at point with another file supplied by user from
     a file prompt in the minibuffer. a file prompt in the minibuffer.
    -
    -

    Subdirectories

    -
    +
    +

    7.29.10 Subdirectories

    +

    This is an exciting feature of Dired. In other file explorers, you get a tree to browse your directory. If you have a deep directory @@ -4326,22 +4363,27 @@

    Subdi

      -
    • Open a directory with subdirectories inside it.
    • -
    • Insert subdirectories with i.
    • +
    • Open a directory with subdirectories inside it. +
    • +
    • Insert subdirectories with i. +
    • Remember Bookmark? You can save Dired buffers with Bookmark for -later access. C-x r m and save the current Dired buffer with subdirectories.
    • -
    • Kill the current Dired buffer with subdirectories.
    • +later access. C-x r m and save the current Dired buffer with subdirectories. + +
    • Kill the current Dired buffer with subdirectories. +
    • Open the Dired buffer via the bookmark list C-x r l. You will see that not only your Dired buffer is fully restored, but your -subdirectories too.
    • +subdirectories too. +

    -
    -

    Registers

    -
    +
    +

    7.30 Registers

    +

    When I first heard about registers in Emacs, it scared me. I thought "Wow, what is this "register" thing? Am I going to work directly with @@ -4376,9 +4418,9 @@

    Regis

    -
    -

    Save window configuration

    -
    +
    +

    7.30.1 Save window configuration

    +

    One of the best uses of registers. It simply saves your current window configuration and restores the layout later. @@ -4408,47 +4450,47 @@

    Save - + - + -Key -Binding +Key +Binding -C-x r w REG -Command: window-configuration-to-register +C-x r w REG +Command: window-configuration-to-register -  -Save the window configuration of current frame into register REG +  +Save the window configuration of current frame into register REG -C-x r f REG -Command: frame-configuration-to-register +C-x r f REG +Command: frame-configuration-to-register -  -Save the state of all frames, including all their windows, in register REG +  +Save the state of all frames, including all their windows, in register REG -C-x r j REG -Command: jump-to-register +C-x r j REG +Command: jump-to-register -  -Jump to a register REG. +  +Jump to a register REG. @@ -4486,35 +4528,38 @@

    Save
    • Save a few window configurations into registers. I suggest that each window configuration should represent a workspace of a project. But -it could be anything you like, up to your imagination.
    • +it could be anything you like, up to your imagination. +
    • Go back and forth between window configurations by jumping into -appropriate registers.
    • +appropriate registers. +

    -
    -

    Save frame configuration

    -
    +
    +

    7.30.2 Save frame configuration

    +
    + -+-+ - - + + - - + +
    KeyBindingKeyBinding
    C-x r f REGSave current frame configuration into register REGC-x r f REGSave current frame configuration into register REG
    @@ -4534,18 +4579,22 @@

    Save

      -
    • Create a few frames with C-x 5 2, C-x 5 d, C-x 5 f
    • -
    • Save the frameset into a register.
    • -
    • Close all the frames except the main one.
    • +
    • Create a few frames with C-x 5 2, C-x 5 d, C-x 5 f… +
    • +
    • Save the frameset into a register. +
    • +
    • Close all the frames except the main one. +
    • Restore the frames by jumping to the register that stores the -frameset.
    • +frameset. +

    -
    -

    Save text

    -
    +
    +

    7.30.3 Save text

    +

    You can also save a region in registers.

    @@ -4554,36 +4603,36 @@

    Save - + - + -Key -Binding +Key +Binding -C-x r s REG -Command: copy-to-register +C-x r s REG +Command: copy-to-register -  -Copy region into register REG +  +Copy region into register REG -C-x r i REG -Command: insert-register +C-x r i REG +Command: insert-register -  -Insert text from register REG +  +Insert text from register REG @@ -4604,15 +4653,14 @@

    Save when registers are handy for storing many pieces of text without affecting the kill ring. For example, you read a manual (man page or info page), and you want to remember many keywords and paste it -somewhere later. Registers can help you with this use case. +somewhere later. Registers can help you with this use case. + -
  • -You can also use registers to save many code templates. For example, +

  • You can also use registers to save many code templates. For example, you can save a for loop template into register f, if template into register i, function definition into register F… This is really handy when you are learning a new language and keep forgetting syntax all the time. -

    For example, this C++11 code snippet would be hard to remember if @@ -4621,9 +4669,9 @@

    Save
    -
      auto it = find_if (vertices.begin(), vertices.end(), [&v_idx] (const Vertex& o) -> bool {
    -    return o.id == v_idx;
    -});
    +
    auto it = find_if (vertices.begin(), vertices.end(), [&v_idx] (const Vertex& o) -> bool {
    +    return o.id == v_idx;
    +});
     
    @@ -4632,7 +4680,8 @@

    Save until I remember it. This is much faster than to go back to the previous source location to look it up again, and would be time consuming if your source code is large. -

  • +

    +

    @@ -4640,43 +4689,46 @@

    Save

      -
    • Copy a few text snippets into registers.
    • -
    • Re-insert it in a buffer.
    • +
    • Copy a few text snippets into registers. +
    • +
    • Re-insert it in a buffer. +

    -
    -

    Save rectangles

    -
    +
    +

    7.30.4 Save rectangles

    +
    + -+-+ - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-x r r REGCommand: copy-rectangle-to-registerC-x r r REGCommand: copy-rectangle-to-register
     Copy the region-rectangle into register REG Copy the region-rectangle into register REG
     With C-u prefix, delete it as well With C-u prefix, delete it as well
    @@ -4690,54 +4742,57 @@

    Save

      -
    • Save a few rectangles in registers a few times to get used to it.
    • -
    • Insert the rectangles in the registers into some buffer.
    • +
    • Save a few rectangles in registers a few times to get used to it. +
    • +
    • Insert the rectangles in the registers into some buffer. +

    -
    -

    Save position

    -
    +
    +

    7.30.5 Save position

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-x r <SPC> REGCommand: point-to-registerC-x r <SPC> REGCommand: point-to-register
     Record the position of point and the current buffer in register REG Record the position of point and the current buffer in register REG
    C-x r j REGCommand: jump-to-registerC-x r j REGCommand: jump-to-register
     Jump to the position and buffer saved in register REG. If the buffer Jump to the position and buffer saved in register REG. If the buffer
     is killed, revisit the file and open the buffer, then jump. is killed, revisit the file and open the buffer, then jump.
    @@ -4767,65 +4822,76 @@

    Save

      -
    • Save a buffer position into register a with C-x r SPC a.
    • -
    • Move point else where.
    • -
    • Jump back to previous position with C-x r j a.
    • -
    • Move point backward a few characters.
    • -
    • Add some characters.
    • -
    • Jump back to position in register a with C-x r j a.
    • +
    • Save a buffer position into register a with C-x r SPC a. +
    • +
    • Move point else where. +
    • +
    • Jump back to previous position with C-x r j a. +
    • +
    • Move point backward a few characters. +
    • +
    • Add some characters. +
    • +
    • Jump back to position in register a with C-x r j a. +
    • You see that point does not jump to original position, but away from the original position a number of characters that is equal to the -number of your added characters.
    • -
    • Go to the beginning of line and RET to add a newline.
    • -
    • Jump back to position in register a with C-x r j a.
    • +number of your added characters. + +
    • Go to the beginning of line and RET to add a newline. +
    • +
    • Jump back to position in register a with C-x r j a. +
    • You see that point jumps to position in register a, but one line -below.
    • +below. +

    -
    -

    Save numbers

    -
    +
    +

    7.30.6 Save numbers

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-u number C-x r n REGCommand: number-to-registerC-u number C-x r n REGCommand: number-to-register
     Store number into register REG Store number into register REG
    C-u number C-x r + REGCommand: increment-registerC-u number C-x r + REGCommand: increment-register
     If REG contains a number, increment the If REG contains a number, increment the
     number in that register by number. number in that register by number.
    @@ -4840,18 +4906,21 @@

    Save

      -
    • Save a few numbers into registers.
    • -
    • Add a number of your choice into numbers saved in the registers.
    • +
    • Save a few numbers into registers. +
    • +
    • Add a number of your choice into numbers saved in the registers. +
    • Insert back the number in registers into a buffer, and see the -result.
    • +result. +

    -
    -

    Macro

    -
    +
    +

    7.31 Macro

    +

    Macro records your actions in Emacs and play back later.

    @@ -4860,32 +4929,32 @@

    Macro - + - + -Key -Binding +Key +Binding -f3 or C-x ( -Start recording macro +f3 or C-x ( +Start recording macro -f4 or C-x ) -Stop recording macro +f4 or C-x ) +Stop recording macro -C-x e or f4 -Playback macro +C-x e or f4 +Playback macro @@ -4937,17 +5006,23 @@

    Macro

      -
    • Place point at the beginning of the first line.
    • -
    • Press <f3>.
    • -
    • Use C-s to search-and-jump to the beginning of each character group (or C-f if you want something simple) and add whitespace.
    • -
    • Return to the beginning of next line. Press <f4> to finish recording.
    • +
    • Place point at the beginning of the first line. +
    • +
    • Press <f3>. +
    • +
    • Use C-s to search-and-jump to the beginning of each character group (or C-f if you want something simple) and add whitespace. +
    • +
    • Return to the beginning of next line. Press <f4> to finish recording. +
    • Continuously press <f4> and see Emacs playbacks the whole action -sequence you've just recorded.
    • +sequence you've just recorded. +
    • If you want to repeat more than 1 time, using prefix argument. If you want to repeat until the end of file, use prefix argument 0: C-u 0 <f4>. Alternatively, highlight the region of remaining lines, and C-x C-k r: run the last keyboard macro on each line -that begins in the region (apply-macro-to-region-lines).
    • +that begins in the region (apply-macro-to-region-lines). +
    @@ -5013,11 +5088,10 @@

    Macro
    • Create two buffers side by side with C-x b. Name the left buffer -buf1 and right buffer buf2.
    • -
    • -Yank the original data into buf1. Move point back to +buf1 and right buffer buf2. +

    • +
    • Yank the original data into buf1. Move point back to beginning of buffer. -

      That's set and done. Here is how it should look like: @@ -5027,90 +5101,91 @@

      Macro

      prepare_macro.gif

      -

    • -
    +

    + + + -
  • -Record: -

    +
  • Record:

    Point should be at buf1, at the first line of the data.

      -
    • Press <f3> to start.
    • -
    • -C-SPC then M-f. This marks the word machine1. Store this word +

    • Press <f3> to start. +
    • +
    • C-SPC then M-f. This marks the word machine1. Store this word into register a with C-x r s a. -

      reg_a.gif

      -
    • +
  • + -
  • -Move point to the beginning of the first MAC address. C-SPC then +

  • Move point to the beginning of the first MAC address. C-SPC then C-s and search to the first delimiter, which is an empty space " " in this case. C-b to move back to the end of the first MAC address. Store this region into register b with C-x r s b. -

    reg_b.gif

    -
  • +
    + -
  • -After that, move point to the beginning of the 2nd MAC address, +

  • After that, move point to the beginning of the 2nd MAC address, C-s to space and C-b to go back one character. Save the region into register c with C-x r s c. -

    reg_c.gif

    -
  • +
    + -
  • -Repeat for the last MAC address and save it in register d. -

    +
  • Repeat for the last MAC address and save it in register d.

    reg_d.gif

    -
  • +
    + -
  • Switch to the second buffer with C-x o:
  • -
  • -Insert the register from a to d according to the template: -

    +
  • Switch to the second buffer with C-x o: +
  • +
  • Insert the register from a to d according to the template:

    insert_buf2_macro.gif

    -
  • +
    + -
  • After inserting, move point to the next empty line.
  • -
  • Switch back to buf1 with C-x o.
  • -
  • Move to the beginning of next line.
  • -
  • Press <f4> to stop.
  • - +
  • After inserting, move point to the next empty line. +
  • +
  • Switch back to buf1 with C-x o. +
  • +
  • Move to the beginning of next line. +
  • +
  • Press <f4> to stop. +
  • + + -
  • -Play: -

    +
  • Play:

    Now you can play back your new keyboard macro to transform the remaining entries. -

  • +

    +

    @@ -5124,64 +5199,65 @@

    Macro

    -
    -

    Keyboard macro ring

    -
    +
    +

    7.31.1 Keyboard macro ring

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-x C-k C-kCommand: kmacro-end-or-call-macro-repeatC-x C-k C-kCommand: kmacro-end-or-call-macro-repeat
     Execute the keyboard macro at the head of the ring Execute the keyboard macro at the head of the ring
    C-x C-k C-nCommand: kmacro-cycle-ring-nextC-x C-k C-nCommand: kmacro-cycle-ring-next
     Rotate the keyboard macro ring to the next macro Rotate the keyboard macro ring to the next macro
     (defined earlier). (defined earlier).
    C-x C-k C-pCommand: kmacro-cycle-ring-previousC-x C-k C-pCommand: kmacro-cycle-ring-previous
     Rotate the keyboard macro ring to the previous macro Rotate the keyboard macro ring to the previous macro
     (defined later) (defined later)
    @@ -5196,9 +5272,9 @@

    Keybo

    -
    -

    The Keyboard Macro Counter

    -
    +
    +

    7.31.2 The Keyboard Macro Counter

    +

    Each macro has a counter which is initialized to 0. Everytime a counter is inserted into the buffer, its value is incremented by 1. @@ -5208,84 +5284,84 @@

    The K - + - + -Key -Binding +Key +Binding -<f3> -Command: kmacro-start-macro-or-insert-counter +<f3> +Command: kmacro-start-macro-or-insert-counter -  -Insert the counter into the buffer and increase the counter +  +Insert the counter into the buffer and increase the counter -  -by 1. This is only applicable when a macro is recording +  +by 1. This is only applicable when a macro is recording -C-x C-k C-i -Command: kmacro-insert-counter +C-x C-k C-i +Command: kmacro-insert-counter -  -Insert the counter of current macro into the buffer +  +Insert the counter of current macro into the buffer -C-x C-k C-c -Command: kmacro-set-counter +C-x C-k C-c +Command: kmacro-set-counter -  -Change the counter value of current macro +  +Change the counter value of current macro -C-x C-k C-a -Command: kmacro-add-counter +C-x C-k C-a +Command: kmacro-add-counter -  -Add a number to the current keyboard macro counter. C-u +  +Add a number to the current keyboard macro counter. C-u -  -before running this command resets the counter back to +  +before running this command resets the counter back to -  -previous value +  +previous value -C-x C-k C-f -Command: kmacro-set-format +C-x C-k C-f +Command: kmacro-set-format -  -Specify the format for inserting the keyboard macro counter +  +Specify the format for inserting the keyboard macro counter @@ -5298,77 +5374,77 @@

    The K - + - + -Specification -Description +Specification +Description -%o -Insert base-eight representation of an integer. +%o +Insert base-eight representation of an integer. -%d -Insert base-ten representation of an integer. +%d +Insert base-ten representation of an integer. -%x -Insert base-sixteen representation of an integer. +%x +Insert base-sixteen representation of an integer. -%X -‘%x’ uses lower case and ‘%X’ uses upper case. +%X +‘%x’ uses lower case and ‘%X’ uses upper case. -%c -Insert the character which is the numerical value given. +%c +Insert the character which is the numerical value given. -%e -Insert exponential notation for a floating point number. +%e +Insert exponential notation for a floating point number. -%f -Insert decimal-point notation for a floating point number. +%f +Insert decimal-point notation for a floating point number. -%g -Insert notation for a floating point number, using either exponential notation or +%g +Insert notation for a floating point number, using either exponential notation or -  -decimal-point notation, whichever is shorter. +  +decimal-point notation, whichever is shorter. -%% -Insert a single ‘%’. This format specification is unusual in in that it does not use +%% +Insert a single ‘%’. This format specification is unusual in in that it does not use -  -a value. For example, (format "%% %d" 30) returns "% 30". +  +a value. For example, (format "%% %d" 30) returns "% 30". @@ -5379,9 +5455,12 @@

    The K

      -
    • 0x%x
    • -
    • Project %d:
    • -
    • Plain text
    • +
    • 0x%x +
    • +
    • Project %d: +
    • +
    • Plain text +

    @@ -5410,16 +5489,23 @@

    The K

      -
    • C-x C-k C-f and enter this format: - Step %d of 5:
    • -
    • <f3> to start recording.
    • +
    • C-x C-k C-f and enter this format: - Step %d of 5: +
    • +
    • <f3> to start recording. +
    • <f3> again to insert the first counter value, which is - Step 0 - of 5:
    • -
    • RET to move to the next line.
    • -
    • <f4> to stop recording.
    • + of 5: + +
    • RET to move to the next line. +
    • +
    • <f4> to stop recording. +
    • Now press <f4> as many time as you want and see header prefix got -inserted with incremental values.
    • +inserted with incremental values. +
    • You can insert the text any value by simply set the counter with -C-x C-k C-c.
    • +C-x C-k C-c. +

    @@ -5438,24 +5524,32 @@

    The K
    • C-x C-k C-f and enter a format like this: %d (or a base number -of your choice).
    • -
    • Initialize the macro counter to a number of your choice.
    • -
    • <f3> to start recording.
    • +of your choice). + +
    • Initialize the macro counter to a number of your choice. +
    • +
    • <f3> to start recording. +
    • If you want the numbers to be 5 units (or any number greater than 1) apart from each other, C-x C-k a to add a number to the counter. If you only want to increase by 1, skip this step because -the default is 1.
    • -
    • <f3> to insert the first number.
    • -
    • SPC to create a separator.
    • -
    • <f4> to stop recording.
    • -
    • Now <f4> repeatedly to see numbers getting generated.
    • +the default is 1. + +
    • <f3> to insert the first number. +
    • +
    • SPC to create a separator. +
    • +
    • <f4> to stop recording. +
    • +
    • Now <f4> repeatedly to see numbers getting generated. +

    -
    -

    Macros with Variations

    -
    +
    +

    7.31.3 Macros with Variations

    +

    Macro is excellent for repetitive editing tasks. However, sometimes you have a repetitive task that can make use of macro, but not always @@ -5474,44 +5568,44 @@

    Macro - + - + -Response -Action +Response +Action -Y -Finish this iteration normally and continue with the next. +Y +Finish this iteration normally and continue with the next. -N: -Skip the rest of this iteration, and start the next. +N: +Skip the rest of this iteration, and start the next. -RET -Stop the macro entirely right now. +RET +Stop the macro entirely right now. -C-l -Redisplay the screen, then ask again. +C-l +Redisplay the screen, then ask again. -C-r -Start editing at point. C-M-c to go back to macro execution +C-r +Start editing at point. C-M-c to go back to macro execution @@ -5540,7 +5634,8 @@

    Macro

      -
    • First, copy this template:
    • +
    • First, copy this template: +
    @@ -5550,68 +5645,77 @@

    Macro

      -
    • <f3> to start recording.
    • -
    • C-y to yank the template.
    • -
    • Move point to positions that need modifications, then C-x q.
    • -
    • <f4> to stop recording.
    • +
    • <f3> to start recording. +
    • +
    • C-y to yank the template. +
    • +
    • Move point to positions that need modifications, then C-x q. +
    • +
    • <f4> to stop recording. +
    • Now <f4> and you will see the macro stops at the positions where -you pressed C-x q before and ask for your action.
    • -
    • C-r to edit. After done editing, C-M-c to go back.
    • +you pressed C-x q before and ask for your action. + +
    • C-r to edit. After done editing, C-M-c to go back. +
    • You are asked the same question as before. If you still miss something, C-r to edit again. Otherwise, press y to proceed to -the next point.
    • -
    • Continue until the end of macro.
    • +the next point. + +
    • Continue until the end of macro. +

    -
    -

    Naming and Saving Macro

    -
    +
    +

    7.31.4 Naming and Saving Macro

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-x C-k nCommand: kmacro-name-last-macrC-x C-k nCommand: kmacro-name-last-macr
     Give a command name (for the duration of the Emacs session) Give a command name (for the duration of the Emacs session)
     to themost recently defined keyboard macro. to themost recently defined keyboard macro.
    C-x C-k bCommand: kmacro-bind-to-keyC-x C-k bCommand: kmacro-bind-to-key
     Bind the most recently defined keyboard macro to a key sequence Bind the most recently defined keyboard macro to a key sequence
     (for the duration of the session) (for the duration of the session)
    @@ -5639,34 +5743,40 @@

    Namin

      -
    • Record some keyboard macros.
    • -
    • Give the macros names with C-x C-k n.
    • -
    • Bind the macros to C-x C-k 1, C-x C-k 2… with C-x C-k b.
    • +
    • Record some keyboard macros. +
    • +
    • Give the macros names with C-x C-k n. +
    • +
    • Bind the macros to C-x C-k 1, C-x C-k 2… with C-x C-k b. +
    • Create the file ~/.emacs.d/init.el. If you do not have the -directory and the file, create it with find-file.
    • +directory and the file, create it with find-file. +
    • Create the file ~/.emacs.d/macros with find-file. You should be -inside the buffer of this file after creating it.
    • -
    • Save the macros with M-x insert-kbd-macro.
    • -
    • -To save you trouble of reloading the macro file manually, put this +inside the buffer of this file after creating it. +

    • +
    • Save the macros with M-x insert-kbd-macro. +
    • +
    • To save you trouble of reloading the macro file manually, put this Emacs Lisp code inside ~/.emacs.d/init.el: -

      -
      (load-file "~/.emacs.d/macros")
      +
      (load-file "~/.emacs.d/macros")
       

      The above code essentially loads a file at a path. Only files that are Emacs Lisp source code are valid. -

    • +

      +
    • Now, every time Emacs starts, it will automatically load the macros file. By default, Emacs loads any Emacs Lisp code at ~/.emacs.d/init.el when it starts. Since you put the above code in -init.el, your macros file is also loaded.
    • +init.el, your macros file is also loaded. +

    @@ -5688,10 +5798,13 @@

    Namin
    • Create two buffers side by side with C-x b. Name the left buffer -buf1 and right buffer buf2.
    • +buf1 and right buffer buf2. +
    • Yank the original data into buf1, then move point back to -beginning of buffer:
    • -
    +beginning of buffer: + + +
    @@ -5716,9 +5829,7 @@

    Namin

      -
    • -Record: -

      +
    • Record:

      Point should be at buf1, at the first line of the data. Let's @@ -5727,77 +5838,79 @@

      Namin

        -
      • <f3> to start.
      • -
      • -C-SPC then M-f. This mark the word machine1. Store this word +

      • <f3> to start. +
      • +
      • C-SPC then M-f. This mark the word machine1. Store this word into register a with C-x r s a. -

        reg_a.gif

        -
      • +

    + -
  • -Move point to the beginning of the first MAC address. C-SPC then +

  • Move point to the beginning of the first MAC address. C-SPC then C-s and search to the first delimiter, which is an empty space " " in this case. C-b to move back to the end of the first MAC address. Store this region into register b with C-x r s b. -

    reg_b.gif

    -
  • +
    + -
  • -After that, move point to the beginning of the 2nd MAC address, +

  • After that, move point to the beginning of the 2nd MAC address, C-s to space and C-b to go back one character. Save the region into register c with C-x r s c. -

    reg_c.gif

    -
  • +
    + -
  • -Repeat for the last MAC address and save it in register d. -

    +
  • Repeat for the last MAC address and save it in register d.

    reg_d.gif

    -
  • +
    + -
  • Move point to the beginning of next line.
  • +
  • Move point to the beginning of next line. +
  • <f4> to stop. C-x C-k n and save the macro with the name -save-macs.
  • +save-macs. +

    Let's create the second macro command, insert-macs:

      -
    • Switch to the second buffer with C-x o:
    • -
    • <f3> to start recording.
    • -
    • -Insert the register from a to d according to the template: -

      +
    • Switch to the second buffer with C-x o: +
    • +
    • <f3> to start recording. +
    • +
    • Insert the register from a to d according to the template:

      insert_buf2_macro.gif

      -
    • +
    + -
  • After inserting, move point to the next empty line.
  • -
  • <f4> to stop. C-x C-k n and save the macro with the name insert-macs.
  • +
  • After inserting, move point to the next empty line. +
  • +
  • <f4> to stop. C-x C-k n and save the macro with the name insert-macs. +
  • We have two important macros now. Let's put them back together: @@ -5805,78 +5918,86 @@

    Namin
    • Switch back to buf1 with C-x o. Point should be on the second -entry.
    • -
    • <f3> to start recording.
    • +entry. + +
    • <f3> to start recording. +
    • M-x save-macs; after executing this command, point moves to the -next line.
    • +next line. +
    • C-x o to switch to buf2. Point should be after the first -insertion of machine1.
    • +insertion of machine1. +
    • M-x insert-macs; data get inserted into the buffer after this -command.
    • -
    • C-x o to switch back to buf1.
    • -
    • Press <f4> to stop.
    • -
    +command. + +
  • C-x o to switch back to buf1. +
  • +
  • Press <f4> to stop. +
  • + + -
  • -Play: -

    +
  • Play:

    You can play back your new keyboard macro to transform the remaining entries. -

  • +

    +

    -
    -

    Edit Keyboard Macro

    -
    +
    +

    7.31.5 Edit Keyboard Macro

    +
    + -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyBindingKeyBinding
    C-x C-k C-eCommand: kmacro-edit-macroC-x C-k C-eCommand: kmacro-edit-macro
     Edit the last defined keyboard macro Edit the last defined keyboard macro
    C-x C-k e name <RET>Command: edit-kbd-macroC-x C-k e name <RET>Command: edit-kbd-macro
     Edit a previously defined keyboard macro name Edit a previously defined keyboard macro name
    C-x C-k lCommand: kmacro-edit-lossageC-x C-k lCommand: kmacro-edit-lossage
     Treat the last 300 keystrokes as a keyboard macro Treat the last 300 keystrokes as a keyboard macro
    @@ -5892,16 +6013,18 @@

    Edit
    • C-u <f3>: Re-execute last keyboard macro, then append keys to its -definition.
    • +definition. +
    • C-u C-u <f3>: Append keys to the last keyboard macro without -re-executing it.
    • +re-executing it. +

    -
    -

    Interactive Keyboard Macro Editing:

    -
    +
    +

    7.31.6 Interactive Keyboard Macro Editing:

    +

    C-x C-k SPC runs kmacro-step-edit-macro that allows you to view commands of the last keyboard macro, one by one at a time, like a @@ -5912,9 +6035,10 @@

    Inter

    -
    -

    Tips for using macro effectively

    -
    +
    +

    7.31.7 Tips for using macro effectively

    +
    +
    • Find a pattern: after going through all the exercises, you can see that a successful macro is a macro that is repeatable, when a @@ -5923,26 +6047,31 @@

      Tips condition. If you data does not have a pattern, try to organize it in a repeatable way. As you can see in the exercises, data are laid out in a way that macro can be repeatable naturally: each line is an -iteration.

    • +iteration. +
    • You can also use a macro for almost anything unrelated to text in Emacs. For example, you can create a macro to run find-file and to -go to ~/Downloads.
    • +go to ~/Downloads. +
    • Use registers: As you see in the exercises, macro is a fine way to store information. You can use registers as a temporary information holder and organize those information into an arbitrary structure -later.
    • +later. +
    • Do it slowly and think before you do: Don't rush yourself. Do it slowly enough that you are sure when you press some keys and execute -some commands, it is correct.
    • -
    • Break large macro into smaller macros.
    • +some commands, it is correct. + +
    • Break large macro into smaller macros. +
    -
    -

    Version Control

    -
    +
    +

    7.32 Version Control

    +

    This section is taken directly from GNU Emacs Tour, with improvements. @@ -5981,109 +6110,109 @@

    Versi - + - + -Key -Binding +Key +Binding -C-x v = -Command: vc-diff +C-x v = +Command: vc-diff -  -Displays a diff showing the changes you've made to the current files. +  +Displays a diff showing the changes you've made to the current files. -C-x v ~ -Commmand: vc-revision-other-window +C-x v ~ +Commmand: vc-revision-other-window -  -Prompts you for a version number and shows you that version of the current +  +Prompts you for a version number and shows you that version of the current -  -file in another window. +  +file in another window. -C-x v g -Command: vc-annotate +C-x v g +Command: vc-annotate -  -Displays an annotated version of the file showing, for each line, +  +Displays an annotated version of the file showing, for each line, -  -the commit where that line was last changed and by whom. On any +  +the commit where that line was last changed and by whom. On any -  -line you can press l to view the log message for that commit or d +  +line you can press l to view the log message for that commit or d -  -to view the associated diff. +  +to view the associated diff. -C-x v l -Command: vc-print-log +C-x v l +Command: vc-print-log -  -Displays a log of previous changes to the file. When point is +  +Displays a log of previous changes to the file. When point is -  -on a particular log entry, you can press d to view the diff +  +on a particular log entry, you can press d to view the diff -  -associated with that change or f to view that version of the file. +  +associated with that change or f to view that version of the file. -C-x v u -Command: vc-revert +C-x v u +Command: vc-revert -  -Revert working copies of the selected fileset to their repository +  +Revert working copies of the selected fileset to their repository -  -contents. This asks for confirmation if the buffer contents are not +  +contents. This asks for confirmation if the buffer contents are not -  -identical to the working revision (except for keyword expansion). +  +identical to the working revision (except for keyword expansion). @@ -6111,24 +6240,32 @@

    Versi

      -
    • First, download a random Git repository.
    • -
    • Open any file in the repository.
    • +
    • First, download a random Git repository. +
    • +
    • Open any file in the repository. +
    • Edit that file and save. Do it in various places, so we have many -hunks.
    • -
    • C-x v = to know precise what changes you made.
    • -
    • C-x v g to view who changes what line on what commit.
    • +hunks. + +
    • C-x v = to know precise what changes you made. +
    • +
    • C-x v g to view who changes what line on what commit. +
    • C-x v ~, select a commit. After selecting, the version of that -revision will be displayed in another buffer.
    • +revision will be displayed in another buffer. +
    • C-x v u to revert the buffer back to its original state, after you -done playing with it.
    • -
    • Rinse and repeat until it becomes part of your workflow.
    • +done playing with it. + +
    • Rinse and repeat until it becomes part of your workflow. +

    -
    -

    Shell

    -
    +
    +

    7.33 Shell

    +

    In Emacs, you have 3 types of shell commands: shell, term and eshell. @@ -6179,13 +6316,14 @@

    Shell

    -
    -

    Project: Browsing Linux kernel source code like a pro

    -
    +
    +

    8 Project: Browsing Linux kernel source code like a pro

    +
    -
    -

    Setup

    -
    +
    +

    8.1 Setup

    +
    +

    You have learned quite a bit about Emacs. Now, you can immediately use Emacs to do practical thing like jumping around a big source tree like @@ -6198,9 +6336,7 @@

    Setup

      -
    • -Linux: -

      +
    • Linux:

      Click here and download the latest stable GNU Global. Then change to @@ -6208,18 +6344,22 @@

      Setup steps:

        -
      • tar xvf global-<version>.tar.gz
      • -
      • cd global-<version>/
      • +
      • tar xvf global-<version>.tar.gz +
      • +
      • cd global-<version>/ +
      • If you have ctags installed, add the option --with-exuberant-ctags and supply the installed path: ./configure - [--with-exuberant-ctags=/usr/local/bin/ctags]
      • -
      • make
      • -
      • sudo make install
      • -

    • + [--with-exuberant-ctags=/usr/local/bin/ctags] + +
    • make +
    • +
    • sudo make install +
    • +
    + -
  • -Windows: -

    +
  • Windows:

    Click here and click "DOS and Windows 32 version" to download the @@ -6255,10 +6395,12 @@

    Setup

    path-variable-windows.jpg

    -

  • +

    +
  • Mac OSX: -Mac OSX version is distributed by MacPorts.
  • +Mac OSX version is distributed by MacPorts. +

    @@ -6274,9 +6416,9 @@

    Setup
    -
    (require 'package)
    -(add-to-list 'package-archives
    -       '("melpa" . "http://melpa.milkbox.net/packages/") t)
    +
    (require 'package)
    +(add-to-list 'package-archives
    +         '("melpa" . "http://melpa.milkbox.net/packages/") t)
     
    @@ -6314,10 +6456,10 @@

    Setup
    -
    (add-hook 'c-mode-common-hook
    -    (lambda ()
    -      (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
    -  (ggtags-mode 1))))
    +
    (add-hook 'c-mode-common-hook
    +      (lambda ()
    +        (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
    +      (ggtags-mode 1))))
     
    @@ -6337,18 +6479,17 @@

    Setup

    -
    -

    Browsing the kernel source tree

    -
    +
    +

    8.2 Browsing the kernel source tree

    +

    You can enjoy exploring the kernel source tree by following these steps:

      -
    • Clone the kernel source: git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux
    • -
    • -C-x d and navigate to ~/linux, then press Enter. -

      +
    • Clone the kernel source: git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux +
    • +
    • C-x d and navigate to ~/linux, then press Enter.
      @@ -6358,10 +6499,12 @@

      Brows

      Then, turn on ggtags: M-x ggtags-mode . -

    • +

      +
    • Emacs has a file explorer, as you've seen above, called Dired, -short for (Dir)ectory (Ed)it.
    • +short for (Dir)ectory (Ed)it. +
    • Before start browsing the kernel, you need to create a database for quick searching. Press M-x, type ggtags-create-tags. It asks for @@ -6369,7 +6512,8 @@

      Brows press Enter; ggtags asks whether you use ctags (which is another tag generating program, works with more languages but has less features). Type no, press Enter and wait for ggtags to -generate the database.

    • +generate the database. +
    @@ -6382,20 +6526,22 @@

    Brows
  • After the tag database is done generating, a message at the bottom of your Emacs prints a message GTAGS generated in ~/linux. Now you can start going anywhere in Linux source tree in an instant instead -of spending hours to grep!
  • +of spending hours to grep! +
  • Let's find a file in Linux. Every C program, whether large or small must have a main() function, and a file containing the -function. Let's find out where the main() of Linux kernel is.
  • +function. Let's find out where the main() of Linux kernel is. +
  • M-x, type ggtags-find-file. C-c M-f also executes ggtags-find-file. A prompt ask for a file to find. You can also -invoke ggtags-find-file with C-c M-f.
  • +invoke ggtags-find-file with C-c M-f. + -
  • Enter main.c to the prompt and press Enter.
  • -
  • -You will see a list of main.c files below in various directory: -

    +
  • Enter main.c to the prompt and press Enter. +
  • +
  • You will see a list of main.c files below in various directory:
    @@ -6411,24 +6557,24 @@

    Brows

    Press M-s s. A prompt appears waiting for something to search; type init/main.c. As you type, the candidate buffer got highlighted gradually. -

  • +

    +
  • Finally you get into the correct file. This is where Linux -starts after the bootloader stage.
  • +starts after the bootloader stage. + -
  • -Now, you see a lot of names in this file: variable names, function +

  • Now, you see a lot of names in this file: variable names, function names… Now, you want to find where all of these names are defined and where they are used. Let's scroll down a bit, either with Page Down key or scrolling with the mouse or search for it. If you want to search, press C-s and type kernel_init and press C-s repeatedly. C-s is available everywhere in Emacs. M-s s is just available in ggtags. You see a function declaration like this: -

    -
    static int kernel_init(void *);
    +
    static int kernel_init(void *);
     
    @@ -6470,7 +6616,7 @@

    Brows
    -
    #include <linux/kernel.h>
    +
    #include <linux/kernel.h>
     
    @@ -6540,15 +6686,16 @@

    Brows After this demo, are you convinced now? If you want to harness the power of Emacs even further, you need to learn Emacs properly. Finally, close everything you don't need with C-x k -

  • +

    +

    -
    -

    Extending Emacs Primer

    -
    +
    +

    9 Extending Emacs Primer

    +

    To let Emacs automatically load your configuration, save it to either of these three files: @@ -6568,17 +6715,17 @@

    Exten
    -
    (require 'package)
    -(add-to-list 'package-archives
    -       '("melpa" . "http://melpa.milkbox.net/packages/") t)
    +
    (require 'package)
    +(add-to-list 'package-archives
    +         '("melpa" . "http://melpa.milkbox.net/packages/") t)
     
    -(add-hook 'c-mode-common-hook
    -    (lambda ()
    -      (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
    -  (ggtags-mode 1))))
    +(add-hook 'c-mode-common-hook
    +      (lambda ()
    +        (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
    +      (ggtags-mode 1))))
     
     
    -(add-hook 'dired-mode-hook 'ggtags-mode)
    +(add-hook 'dired-mode-hook 'ggtags-mode)
     
    @@ -6589,9 +6736,9 @@

    Exten
    -
    (setq ido-enable-flex-matching t)
    -(setq ido-everywhere t)
    -(ido-mode 1)
    +
    (setq ido-enable-flex-matching t)
    +(setq ido-everywhere t)
    +(ido-mode 1)
     
    @@ -6607,19 +6754,23 @@

    Exten
    • Create a new file ~/.emacs.d/init.el with C-x C-f. After this, -the buffer is created for this new file.
    • +the buffer is created for this new file. +
    • M-w (copy) the above code snippet from *scratch* buffer and -C-y (paste) into the init.el buffer.
    • -
    • C-x C-s to save the buffer into file.
    • +C-y (paste) into the init.el buffer. + +
    • C-x C-s to save the buffer into file. +
    • Restart Emacs and test if it is effective. Try list-package to see if melpa is available. Try M-. in any source file in your linux kernel -directory to see if it works properly.
    • +directory to see if it works properly. +

    -
    -

    Conclusion

    -
    +
    +

    10 Conclusion

    +

    That's it. Now you can start using Emacs for many things, from editing source code to managing files and reading documentation. I hope you @@ -6638,13 +6789,13 @@

    Concl

    -
    -

    Appendix

    -
    +
    +

    11 Appendix

    +
    -
    -

    Why Emacs? (Extended)

    -
    +
    +

    11.1 Why Emacs? (Extended)

    +

    Emacs allows you to do much more than just editing. Emacs is not a mere editor like others, either in terminal or in GUI. Emacs is a @@ -6667,9 +6818,9 @@

    Why E
    -
    (defun hello ()
    -  (interactive)
    -  (message "Hello World"))
    +
    (defun hello ()
    +  (interactive)
    +  (message "Hello World"))
     
    @@ -6699,9 +6850,9 @@

    Why E

    -
    -

    Other people's "Why Emacs?"

    -
    +
    +

    11.2 Other people's "Why Emacs?"

    +

    "Why Emacs?" by Fabrice Popinea. He is the maintainer of Emacs 64 bit on Windows. @@ -6727,9 +6878,9 @@

    Other

    -
    -

    More on Emacs history

    -
    +
    +

    11.3 More on Emacs history

    +

    Ever heard of a computing system called Lisp Machine? I bet many of you don't. Me, too, until I started using Emacs and gradually learned @@ -6821,21 +6972,9 @@

    More

    - -
    - - - comments powered by Disqus +

    Created: 2016-12-05 Mon 12:21

    +

    Emacs 24.5.1 (Org mode 8.2.10)

    +

    Validate

    - \ No newline at end of file + diff --git a/docs/emacs-tutor2.html b/docs/emacs-tutor2.html index 2a58a8e..8966b1a 100644 --- a/docs/emacs-tutor2.html +++ b/docs/emacs-tutor2.html @@ -4,10 +4,9 @@ Emacs Mini Manual (PART 2) - LISP PRIMER: WHY PARENTHESES MATTER - + - - + -
    - - - - -

    Back to Table of Contents

    -

    Emacs Mini Manual (PART 2) - LISP PRIMER: WHY PARENTHESES MATTER

    -

    Introduction - and why you should learn Lisp

    +

    1 Introduction - and why you should learn Lisp

    In this section, you can try out code by M-x ielm, then paste code @@ -194,7 +164,7 @@

    -

    Before we start

    +

    1.1 Before we start

    @@ -364,21 +334,21 @@

    -
    (1 2 3 4) ;;is a list that holds 4 numbers from 1 to 4
    +
    ’(1 2 3 4) ;;is a list that holds 4 numbers from 1 to 4
     
    -’("aa" "bb" "cc" "dd") ;;is a list that holds 4 strings: "aa", "bb", "cc", "dd"
    +’("aa" "bb" "cc" "dd") ;;is a list that holds 4 strings: "aa", "bb", "cc", "dd"
     
    - '() ;; an empty list, which is also an atom
    + '() ;; an empty list, which is also an atom
     
    -’(if a b c) ;;  a list that hold 4 symbol: if, a, b and c
    +’(if a b c) ;;  a list that hold 4 symbol: if, a, b and c
     
    - (if a b c) ;; is an if expression that executes if..then..else
    -           ;; logic in common programming languages. Expressions like if are
    -           ;; called *special form*
    + (if a b c) ;; is an if expression that executes if..then..else
    +           ;; logic in common programming languages. Expressions like if are
    +           ;; called *special form*
     
    -’(+ 1 2 3) ;; is a list consists of 4 elements: +, 1, 2 and 3
    +’(+ 1 2 3) ;; is a list consists of 4 elements: +, 1, 2 and 3
     
    - (+ 1 2 3)  ;; is a function call to function "+" (yes, "+" is a function)
    + (+ 1 2 3)  ;; is a function call to function "+" (yes, "+" is a function)
     

    @@ -403,7 +373,7 @@

    -
    if (condition) {
    -    ...statements...
    -} else {
    -    ...statements...
    -}
    +
    if (condition) {
    +    ...statements...
    +} else {
    +    ...statements...
    +}
     

    @@ -429,10 +399,10 @@

    -
    if condition:
    -    ...statements...
    -else:
    -    ...statements...
    +
    if condition:
    +    ...statements...
    +else:
    +    ...statements...
     

    @@ -445,10 +415,10 @@

    -
    '(if condition:
    -    ...statements
    -  else:
    -    ...statements...)
    +
    '(if condition:
    +    ...statements
    +  else:
    +    ...statements...)
     

    @@ -508,9 +478,9 @@

    -
    (if condition  ;; condition is a valid Lisp form
    -    ...do something if true...
    -  ...do something if false...)
    +
    (if condition  ;; condition is a valid Lisp form
    +    ...do something if true...
    +  ...do something if false...)
     

    @@ -543,10 +513,10 @@

    -
    '(if condition:
    -     ...statements...
    -  else:
    -     ...statements...)
    +
    '(if condition:
    +     ...statements...
    +  else:
    +     ...statements...)
     

    @@ -559,10 +529,10 @@

    -
    (if condition:
    -     ...statements...
    - else:
    -     ...statements...)
    +
    (if condition:
    +     ...statements...
    + else:
    +     ...statements...)
     

    @@ -573,9 +543,9 @@

    -
    (if condition
    -     ...statements...
    -     ...statements...)
    +
    (if condition
    +     ...statements...
    +     ...statements...)
     

    @@ -613,7 +583,7 @@

    -

    Beyond parentheses

    +

    1.4 Beyond parentheses

    You may ask, can you to create syntax without parentheses in Lisp? Of @@ -644,7 +614,7 @@

    -

    Syntax error

    +

    2 Syntax error

    Lisp syntax is simple: it's just a pair of parentheses, with things in @@ -653,7 +623,7 @@

    -

    Unbalanced parentheses:

    +

    2.1 Unbalanced parentheses:

    Do you miss an opening or closing parentheses, or do you insert @@ -664,9 +634,9 @@

    -
    for {set i 0} {$i < $n} {incr i} {
    -    ...do something...
    -}
    +
    for {set i 0} {$i < $n} {incr i} {
    +    ...do something...
    +}
     

    @@ -678,8 +648,8 @@

    -
    array set balloon {color red}
    -array get balloon
    +
    array set balloon {color red}
    +array get balloon
     

    @@ -691,7 +661,7 @@

    -

    Mini-language syntax error:

    +

    2.2 Mini-language syntax error:

    @@ -758,16 +728,16 @@

    -
    void add(int a, int b) {
    -    return a + b;
    -}
    +
    void add(int a, int b) {
    +    return a + b;
    +}
     
    -void main(int argc, const char* argv[]) {
    -    int a = 1;
    +void main(int argc, const char* argv[]) {
    +    int a = 1;
     
    -    add(a);
    -    add(a,b);
    -}
    +    add(a);
    +    add(a,b);
    +}
     

    @@ -785,7 +755,7 @@

    -

    Lisp Machine

    +

    4 Lisp Machine

    It would be a mistake when mention about history of Lisp without @@ -890,7 +860,7 @@

    -

    Conclusion

    +

    5 Conclusion

    diff --git a/docs/emacs-tutor3.html b/docs/emacs-tutor3.html index 6f120e3..7539db5 100644 --- a/docs/emacs-tutor3.html +++ b/docs/emacs-tutor3.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - Emacs Mini Manual (PART 3) - CUSTOMIZING AND EXTENDING EMACS + + - - + -
    - - - - -

    Back to Table of Contents

    -

    Emacs Mini Manual (PART 3) - CUSTOMIZING AND EXTENDING EMACS

    Table of Contents

    -
    -

    Why customize and extend Emacs?

    -
    +
    +

    1 Why customize and extend Emacs?

    +

    Emacs comes with default settings. Some interesting features are disabled and hidden, i.e. ibuffer, Semantic, electric @@ -326,9 +200,9 @@

    Why cu

    -
    -

    Just enough Emacs Lisp

    -
    +
    +

    2 Just enough Emacs Lisp

    +

    In this section, you only need to read and understand. I will list the commonly used function used for customizing Emacs that we will use in @@ -347,13 +221,12 @@

    Just e
  • Code that get executed is a pair of parentheses, with things in it: (...). The first element always gets evaluated; your Lisp environment (in our case, Emacs) determines which of the following 3 -forms the symbol in the first slot is, then acts accordingly:
  • +forms the symbol in the first slot is, then acts accordingly: + -
  • -Function form: if the first element points to a function definition, +

  • Function form: if the first element points to a function definition, then the following elements get evaluated from left to right and finally passed into the function as arguments. -

    For example: @@ -361,7 +234,7 @@

    Just e
    -
    (message "Hello word %d" (+ 10 10))
    +
    (message "Hello word %d" (+ 10 10))
     
    @@ -373,16 +246,15 @@

    Just e 10), it evaluates the form and return 20. Then the string "Hello world %d" and the number 20 are passed into message, and finally output "Hello world 20" in the echo area and *Message* buffer. -

  • +

    + -
  • -Special form: if the first element is one of predefined functions in +

  • Special form: if the first element is one of predefined functions in Emacs Lisp that need special rules and/or syntax, then the remaining elements are evaluated depend on the rule of the predefined functions. Special form is just function form, but handle the remaining in its own way rather than using the default in function -form. That's why we call it special. -

    +form. That's why we call it special.

    For example, if is a special form as we learned in previous part: @@ -390,9 +262,9 @@

    Just e
    -
    (if condition
    +
    (if condition
         true-case
    -  false-case)
    +  false-case)
     
    @@ -408,7 +280,8 @@

    Just e element is and special form, then it keeps evaluating the remaining elements from left to right until one of the element return false. If all elements get evaluated, and returns true. -

  • +

    +
  • Macro form: if the first element is created by the function defmacro (which you do not need to know at this stage), then Emacs @@ -418,7 +291,8 @@

    Just e Emacs (function form and special form). If you read a form that is not a function form or any predefined special form, don't panic! It's a macro form. Programmers always provide documentations on how -to use their mini-languages.

  • +to use their mini-languages. +

    @@ -429,19 +303,20 @@

    Just e

      -
    • Data: has two types:
    • +
    • Data: has two types: +
    • -
    • Atom: primitives such as number, string, symbol and NIL.
    • +
    • Atom: primitives such as number, string, symbol and NIL. +
    • -
    • -Non-atom: if you put a just before a form, it becomes +

    • Non-atom: if you put a just before a form, it becomes a list. Emacs treats these quoted forms as data. -

      Emacs also has other data types like array, hash-table… but list is the most popular, used when performance is not needed. -

    • +

      +

    @@ -452,9 +327,9 @@

    Just e

    -
    -

    Function: (setq [ SYM VAL ]…)

    -
    +
    +

    2.1 Function: (setq [ SYM VAL ]…)

    +

    Comment: A really fundamental function for customizing Emacs settings. An Emacs setting is really just a variable. Emacs has GUI @@ -467,7 +342,7 @@

    Functi
    -
    (setq global-mark-ring-max 50000)
    +
    (setq global-mark-ring-max 50000)
     
    @@ -482,16 +357,16 @@

    Functi The values VAL are expressions; they are evaluated. Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'. The second VAL is not computed until after the first SYM is set, and so on; -each VAL can use the new value of variables set earlier in the `setq_'. -The return value of the `setq_' form is the value of the last VAL. +each VAL can use the new value of variables set earlier in the `setq'. +The return value of the `setq' form is the value of the last VAL.

    -
    -

    Function: (load FILE &optional NOERROR NOMESSAGE NOSUFFIX MUST-SUFFIX)

    -
    +
    +

    2.2 Function: (load FILE &optional NOERROR NOMESSAGE NOSUFFIX MUST-SUFFIX)

    +

    Comment: This function allows you to load a file. FILE is the a filename that is looked up in the variable load-path. Do you @@ -513,10 +388,10 @@

    Functi
    -
    (load (substitute-in-file-name "$HOME/.emacs.d/module")) ;; first try to load module.elc; if not found, try to load module.el
    -(load (substitute-in-file-name "$HOME/.emacs.d/module.el")) ;; only load module.el
    -(load (substitute-in-file-name "$HOME/.emacs.d/module.elc")) ;; only load module.elc
    -(load "module") ; search for the file module.el or module.elc in variable load-path
    +
    (load (substitute-in-file-name "$HOME/.emacs.d/module")) ;; first try to load module.elc; if not found, try to load module.el
    +(load (substitute-in-file-name "$HOME/.emacs.d/module.el")) ;; only load module.el
    +(load (substitute-in-file-name "$HOME/.emacs.d/module.elc")) ;; only load module.elc
    +(load "module") ; search for the file module.el or module.elc in variable load-path
     
    @@ -531,7 +406,7 @@

    Functi FILE unmodified (the exact suffixes in the exact order are determined by `load-suffixes'). Environment variable references in FILE are replaced with their values by calling `substitute-in-file-name'. This -function searches the directories in `load-path'. +function searches the directories in `load-path'.

    @@ -540,9 +415,9 @@

    Functi

    -
    -

    Function: (require FEATURE &optional FILENAME NOERROR)

    -
    +
    +

    2.3 Function: (require FEATURE &optional FILENAME NOERROR)

    +

    Comment: If you install a package from M-x list-packages, to load that package, use (require 'installed-package). @@ -555,7 +430,7 @@

    Functi
    -
    (require 'volatile-highlights)
    +
    (require 'volatile-highlights)
     
    @@ -587,9 +462,9 @@

    Functi

    -
    -

    Function: (provide FEATURE &optional SUBFEATURES)

    -
    +
    +

    2.4 Function: (provide FEATURE &optional SUBFEATURES)

    +

    Comment: You can use this function at the end of a file to turn the file into a loadable module that is only loaded when called with @@ -607,7 +482,7 @@

    Functi
    -
    (provide 'setup-editing)
    +
    (provide 'setup-editing)
     
    @@ -630,9 +505,9 @@

    Functi

    -
    -

    Function: (add-to-list LIST-VAR ELEMENT &optional APPEND COMPARE-FN)

    -
    +
    +

    2.5 Function: (add-to-list LIST-VAR ELEMENT &optional APPEND COMPARE-FN)

    +

    Comment: Add an element ELEMENT to a list named LIST-VAR.

    @@ -643,8 +518,8 @@

    Functi
    -
    (add-to-list 'load-path "~/.emacs.d/personal") ; add personal to load-path,
    -                                               ; so "load" function can search for files in it
    +
    (add-to-list 'load-path "~/.emacs.d/personal") ; add personal to load-path,
    +                                               ; so "load" function can search for files in it
     
    @@ -684,9 +559,9 @@

    Functi

    -
    -

    Function: (add-hook HOOK FUNCTION &optional APPEND LOCAL)

    -
    +
    +

    2.6 Function: (add-hook HOOK FUNCTION &optional APPEND LOCAL)

    +

    Comment: A hook is a Lisp variable which holds a list of functions, to be called on some well-defined occasion. (This is called @@ -700,7 +575,7 @@

    Functi
    -
    (add-hook 'prog-mode-hook 'linum-mode)
    +
    (add-hook 'prog-mode-hook 'linum-mode)
     
    @@ -742,9 +617,9 @@

    Functi

    -
    -

    Function: (global-set-key KEY COMMAND)

    -
    +
    +

    2.7 Function: (global-set-key KEY COMMAND)

    +

    Comment: This function binds a command to a key, as you can see in the function interface. @@ -760,10 +635,10 @@

    Functi
    -
    (global-set-key (kbd "C-x C-b") 'ibuffer) ;; bind "C-x C-b" to ibuffer command
    -(global-set-key "\C-x\C-b" 'ibuffer)  ;; bind "C-x C-b to ibuffer command, but modifier 
    -                                      ;; keys must be escaped with the backslash
    -(global-set-key [?\C-x?\C-b] 'ibuffer) ;; use vector instead of a string
    +
    (global-set-key (kbd "C-x C-b") 'ibuffer) ;; bind "C-x C-b" to ibuffer command
    +(global-set-key "\C-x\C-b" 'ibuffer)  ;; bind "C-x C-b to ibuffer command, but modifier 
    +                                      ;; keys must be escaped with the backslash
    +(global-set-key [?\C-x?\C-b] 'ibuffer) ;; use vector instead of a string
     
    @@ -778,7 +653,7 @@

    Functi
    -
    (global-set-key (kbd "<f3>") 'kmacro-start-macro-or-insert-counter)
    +
    (global-set-key (kbd "<f3>") 'kmacro-start-macro-or-insert-counter)
     
    @@ -791,94 +666,94 @@

    Functi - + - + -Key -Description +Key +Description -left, up, right, down -Cursor arrow keys +left, up, right, down +Cursor arrow keys -begin, end, home, next, prior -Other cursor re-positioning keys +begin, end, home, next, prior +Other cursor re-positioning keys -  -prior means PageUp +  +prior means PageUp -  -next means PageDOwn +  +next means PageDOwn -select, print, execute, backtab -Miscellaneous keys +select, print, execute, backtab +Miscellaneous keys -insert, undo, redo, clearline -backtab means S-TAB or C-iso-tab +insert, undo, redo, clearline +backtab means S-TAB or C-iso-tab -insertline, deleteline, insertchar, deletechar -  +insertline, deleteline, insertchar, deletechar +  -f1, f2, ... F35 -Numbered function keys on top of your keyboard +f1, f2, ... F35 +Numbered function keys on top of your keyboard -kp-add, kp-subtract, kp-multiply, kp-divide -Keypad keys (to the right of the regular keyboard) +kp-add, kp-subtract, kp-multiply, kp-divide +Keypad keys (to the right of the regular keyboard) -kp-backtab, kp-space, kp-tab, kp-enter -, with names or punctuation. +kp-backtab, kp-space, kp-tab, kp-enter +, with names or punctuation. -kp-separator, kp-decimal, kp-equal -  +kp-separator, kp-decimal, kp-equal +  -  -  +  +  -kp-0, kp-1, ... kp-9 -Keypad keys with digits. +kp-0, kp-1, ... kp-9 +Keypad keys with digits. -  -  +  +  -kp-f1, kp-f2, kp-f3, kp-f4 -Keypad PF keys. +kp-f1, kp-f2, kp-f3, kp-f4 +Keypad PF keys. @@ -905,9 +780,9 @@

    Functi

    -
    -

    Function: (define-key KEYMAP KEY DEF)

    -
    +
    +

    2.8 Function: (define-key KEYMAP KEY DEF)

    +

    Comment:

    @@ -941,16 +816,16 @@

    Funct
    -
    ;; Dired uses "e", "f" or RET to open a file
    -;; you can reuse one of these keys for different purpose
    -;; for example, you can bind it to wdired-change-to-wdired-mode
    -;; wdired-change-to-wdired-mode allows you to edit your Dired buffer
    -;; like a normal text buffer, such as edit file/directory names,
    -;; permission bits.. and then commit the changes to disk.
    -;;
    -;; "e" is short for "edit"
    -;; After finish your editing, "C-c C-c" to commit, "C-c C-k" to abort
    -(define-key dired-mode-map (kbd "e") 'wdired-change-to-wdired-mode)
    +
    ;; Dired uses "e", "f" or RET to open a file
    +;; you can reuse one of these keys for different purpose
    +;; for example, you can bind it to wdired-change-to-wdired-mode
    +;; wdired-change-to-wdired-mode allows you to edit your Dired buffer
    +;; like a normal text buffer, such as edit file/directory names,
    +;; permission bits.. and then commit the changes to disk.
    +;;
    +;; "e" is short for "edit"
    +;; After finish your editing, "C-c C-c" to commit, "C-c C-k" to abort
    +(define-key dired-mode-map (kbd "e") 'wdired-change-to-wdired-mode)
     
    @@ -998,9 +873,9 @@

    Funct

    -
    -

    Function: (defalias SYMBOL DEFINITION &optional DOCSTRING)

    -
    +
    +

    2.9 Function: (defalias SYMBOL DEFINITION &optional DOCSTRING)

    +

    Comment: defalias allows you to rename a command. It is usually used to abbreviate command name. @@ -1012,16 +887,16 @@

    Funct
    -
    (defalias 'yes-or-no-p 'y-or-n-p) ; y or n is enough
    -(defalias 'list-buffers 'ibuffer) ; always use ibuffer
    +
    (defalias 'yes-or-no-p 'y-or-n-p) ; y or n is enough
    +(defalias 'list-buffers 'ibuffer) ; always use ibuffer
     
    -                                        ; elisp
    -(defalias 'eb 'eval-buffer)
    -(defalias 'er 'eval-region)
    -(defalias 'ed 'eval-defun)
    +                                        ; elisp
    +(defalias 'eb 'eval-buffer)
    +(defalias 'er 'eval-region)
    +(defalias 'ed 'eval-defun)
     
    -                                        ; minor modes
    -(defalias 'wsm 'whitespace-mode)
    +                                        ; minor modes
    +(defalias 'wsm 'whitespace-mode)
     
    @@ -1050,9 +925,9 @@

    Funct

    -
    -

    Function: (mapc FUNCTION SEQUENCE)

    -
    +
    +

    2.10 Function: (mapc FUNCTION SEQUENCE)

    +

    Comment: mapc calls the function FUNCTION on each element of the sequence SEQUENCE. @@ -1064,8 +939,8 @@

    Funct
    -
    ;; load every .el file inside ~/.emacs.d/custom/
    -(mapc 'load (directory-files "~/.emacs.d/custom" t ".*\.el"))
    +
    ;; load every .el file inside ~/.emacs.d/custom/
    +(mapc 'load (directory-files "~/.emacs.d/custom" t ".*\.el"))
     
    @@ -1083,9 +958,9 @@

    Funct

    -
    -

    Macro: (defun NAME ARGLIST &optional DOCSTRING DECL &rest BODY)

    -
    +
    +

    2.11 Macro: (defun NAME ARGLIST &optional DOCSTRING DECL &rest BODY)

    +

    Comment: defun is a Lisp macro that allows you to define a function, like any other language. A function is a collection of @@ -1097,24 +972,26 @@

    Macro

      -
    • Create a normal function (Not available in M-x):
    • +
    • Create a normal function (Not available in M-x): +
    -
    (defun demo ()
    -  (message "Hello World" number string))
    +
    (defun demo ()
    +  (message "Hello World" number string))
     
      -
    • Create a command (Available in M-x):
    • +
    • Create a command (Available in M-x): +
    -
    (defun demo ()
    -  (interactive)
    -  (message "Hello World"))
    +
    (defun demo ()
    +  (interactive)
    +  (message "Hello World"))
     
    @@ -1144,70 +1021,66 @@

    Macro

    -
    -

    Useful built-in key bindings for navigating pairs

    -
    +
    +

    3 Useful built-in key bindings for navigating pairs

    +
    +
      -
    • -C-M-f binds to forward-sexp, move forward over a balanced +

    • C-M-f binds to forward-sexp, move forward over a balanced expression. Demo: -

      forward-sexp.gif

      -
    • +
    + -
  • -C-M-b binds to backward-sexp, move backward over a balanced +

  • C-M-b binds to backward-sexp, move backward over a balanced expression. Demo: -

    backward-sexp.gif

    -
  • +
    + -
  • -C-M-k binds to kill-sexp, kill balanced expression +

  • C-M-k binds to kill-sexp, kill balanced expression forward. Demo: -

    kill-sexp.gif

    -
  • +
    + -
  • -C-M-t binds to transpose-sexps, transpose expressions. Demo: -

    +
  • C-M-t binds to transpose-sexps, transpose expressions. Demo:

    transpose-sexp.gif

    -
  • +
    + -
  • -C-M-<SPC> or C-M-@ binds to mark-sexp, put mark after +

  • C-M-<SPC> or C-M-@ binds to mark-sexp, put mark after following expression. Demo: -

    mark-sexp.gif

    -
  • +
    +
    -
    -

    Let's supercharge Emacs

    -
    +
    +

    4 Let's supercharge Emacs

    +

    Throughout this section I will help you to extend Emacs with packages that improves general Emacs features, such as Info, Dired, buffer @@ -1231,7 +1104,7 @@

    Let's

    Don't be intimidated if you see many packages down there. Adding -packages and see it extends your Emacs is fun and addictive, like +packages and see it extends your Emacs is fun and addictive, like playing video games.

    @@ -1241,9 +1114,12 @@

    Let's

      -
    • ~/.emacs
    • -
    • ~/.emacs.d/init
    • -
    • ~/.emacs.d/init.el
    • +
    • ~/.emacs +
    • +
    • ~/.emacs.d/init +
    • +
    • ~/.emacs.d/init.el +

    @@ -1256,7 +1132,7 @@

    Let's When you want to complete function names in Emacs Lisp: C-M-i, which runs completion-at-point. It will display a list of possible candidates available in Emacs. As a reminder, if you want to quickly -complete some text, you can M-/, which runs dabbrev-expand. +complete some text, you can M-/, which runs dabbrev-expand.

    @@ -1270,22 +1146,25 @@

    Let's

    -
    -

    How to use Emacs package manager

    -
    +
    +

    4.1 How to use Emacs package manager

    +

    Emacs has a package manager to make the task of installing, update and removing easier, as well as inform users new packages created by the community. Emacs gets a list of packages from sources, called package archive. Package archive is the same as repository in -Linux. Currently, there are 3 package archives in Emacs: +Linux. Currently, there are 3 package archives in Emacs:

      -
    • built-in: limited number of packages, and not always up to date.
    • -
    • Marmalade: more packages, but mostly outdated since people moved to MELPA.
    • +
    • built-in: limited number of packages, and not always up to date. +
    • +
    • Marmalade: more packages, but mostly outdated since people moved to MELPA. +
    • MELPA: the most popular and most up to date package archive, with -most number of packages.
    • +most number of packages. +

    @@ -1297,9 +1176,9 @@

    How t
    -
    (require 'package)
    -(add-to-list 'package-archives
    -  '("melpa" . "http://melpa.milkbox.net/packages/") t)
    +
    (require 'package)
    +(add-to-list 'package-archives
    +  '("melpa" . "http://melpa.milkbox.net/packages/") t)
     
    @@ -1309,21 +1188,31 @@

    How t

    To open the package manager, M-x list-package. You will see a list -of packages. +of packages.

      -
    • To navigate the package list down and up using n and p.
    • -
    • To view information of a package, press RET.
    • -
    • To mark a package for install, press i.
    • -
    • To mark a package for delete, press d.
    • -
    • To unmark a package, press u.
    • -
    • To execute the marked packages (either for install or delete), press x.
    • -
    • To refresh and update the latest package list, press r.
    • -
    • To update all packages, press U.
    • +
    • To navigate the package list down and up using n and p. +
    • +
    • To view information of a package, press RET. +
    • +
    • To mark a package for install, press i. +
    • +
    • To mark a package for delete, press d. +
    • +
    • To unmark a package, press u. +
    • +
    • To execute the marked packages (either for install or delete), press x. +
    • +
    • To refresh and update the latest package list, press r. +
    • +
    • To update all packages, press U. +
    • To filter to a group of packages, press f. Press TAB to display -possible groups.
    • -
    • To display these key bindings, press h.
    • +possible groups. + +
    • To display these key bindings, press h. +

    @@ -1332,20 +1221,23 @@

    How t

      -
    • volatile-highlights
    • -
    • undo-tree
    • -
    • yasnippet
    • +
    • volatile-highlights +
    • +
    • undo-tree +
    • +
    • yasnippet +

    -
    -

    Customize Emacs

    -
    +
    +

    4.2 Customize Emacs

    +
    -
    -

    Using GUI

    -
    +
    +

    4.2.1 Using GUI

    +

    If you want to change a specific setting, you need to change a variable value. You wonder, there are so many variables to set. How do @@ -1365,19 +1257,23 @@

    Using

    You will see various categories for customizing Emacs. These categories are called Customization Groups in Emacs. Let's try -setting something in Emacs: +setting something in Emacs:

      -
    • Go to Editing -> Editing Basics -> move point to "Global
    • +
    • Go to Editing -> Editing Basics -> move point to "Global +

    Mark ring Max: ".

      -
    • Change the value to 5000.
    • -
    • Move point on State button. Press RET.
    • -
    • A menu appears with the following choice:
    • +
    • Change the value to 5000. +
    • +
    • Move point on State button. Press RET. +
    • +
    • A menu appears with the following choice: +

    @@ -1395,18 +1291,18 @@

    Using
    -
    (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.
    - '(global-mark-ring-max 5000))
    +
    (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.
    + '(global-mark-ring-max 5000))
     

    2 = Undo Edits: Undo to the previous value of a particular setting, if you haven't -set. +set.

    @@ -1451,9 +1347,9 @@

    Using

    -
    -

    Using Emacs Lisp

    -
    +
    +

    4.2.2 Using Emacs Lisp

    +

    The above approach uses GUI, which makes Emacs look familiar to normal users from other editors: using GUI to change the editors. However, it @@ -1465,12 +1361,12 @@

    Using
    -
    (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.
    - '(global-mark-ring-max 5000 nil nil "test"))
    +
    (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.
    + '(global-mark-ring-max 5000 nil nil "test"))
     
    @@ -1490,21 +1386,36 @@

    Using

      -
    • setup-editing.el for Editing group.
    • -
    • setup-convenience.el for Convenience group.
    • -
    • setup-files.el for Files group.
    • -
    • setup-text.el for Text group.
    • -
    • setup-data.el for Data group.
    • -
    • setup-external.el for External group.
    • -
    • setup-communication.el for Communication group.
    • -
    • setup-programming.el for Programming group.
    • -
    • setup-applications.el for Application group.
    • -
    • setup-development.el for Development group.
    • -
    • setup-environment.el for Environment group.
    • -
    • setup-faces.el for Faces group.
    • -
    • setup-help.el for Help group.
    • -
    • setup-multimedia.el for Multimedia group.
    • -
    • setup-local.el for Local group.
    • +
    • setup-editing.el for Editing group. +
    • +
    • setup-convenience.el for Convenience group. +
    • +
    • setup-files.el for Files group. +
    • +
    • setup-text.el for Text group. +
    • +
    • setup-data.el for Data group. +
    • +
    • setup-external.el for External group. +
    • +
    • setup-communication.el for Communication group. +
    • +
    • setup-programming.el for Programming group. +
    • +
    • setup-applications.el for Application group. +
    • +
    • setup-development.el for Development group. +
    • +
    • setup-environment.el for Environment group. +
    • +
    • setup-faces.el for Faces group. +
    • +
    • setup-help.el for Help group. +
    • +
    • setup-multimedia.el for Multimedia group. +
    • +
    • setup-local.el for Local group. +

    @@ -1516,24 +1427,27 @@

    Using

    -Exercise: +Exercise:

      -
    • Create a directory: ~/.emacs.d/custom/
    • -
    • Create the above setup-*.el files under it.
    • -
    • Load the files above using mapc:
    • +
    • Create a directory: ~/.emacs.d/custom/ +
    • +
    • Create the above setup-*.el files under it. +
    • +
    • Load the files above using mapc: +
    -
    (mapc 'load (directory-files "~/.emacs.d/custom" t ".*\.el"))
    +
    (mapc 'load (directory-files "~/.emacs.d/custom" t ".*\.el"))
     

    -You already installed the package rebox2 in How to use Emacs package -manager section. When you mark a region and M-q, you can create the +You already installed the package rebox2 in How to use Emacs package +manager section. When you mark a region and M-q, you can create the above comment box. There are many styles, you can cycle by pressing M-q repeatedly.

    @@ -1550,19 +1464,21 @@

    Using
    • Copy the sample configurations into your files and look back later -or just don't care.
    • +or just don't care. +
    • Really control the customization process and make the customizations actually yours, by reading the customization code and understand -what it does.
    • +what it does. +

    -
    -

    init.el

    -
    +
    +

    4.3 init.el

    +

    Sample init.el:

    @@ -1570,37 +1486,38 @@

    init.
    -
    ;; Add and enable MELPA
    -(require 'package)
    -(add-to-list 'package-archives
    -             '("melpa" . "http://melpa.milkbox.net/packages/") t)
    -(package-initialize)
    -
    -;; add your modules path
    -(add-to-list 'load-path "~/.emacs.d/custom/")
    -
    -;; load your modules
    -(require 'setup-applications)
    -(require 'setup-communication)
    -(require 'setup-convenience)
    -(require 'setup-data)
    -(require 'setup-development)
    -(require 'setup-editing)
    -(require 'setup-environment)
    -(require 'setup-external)
    -(require 'setup-faces-and-ui)
    -(require 'setup-files)
    -(require 'setup-help)
    -(require 'setup-programming)
    -(require 'setup-text)
    -(require 'setup-local)
    +
    ;; Add and enable MELPA
    +(require 'package)
    +(add-to-list 'package-archives
    +             '("melpa" . "http://melpa.milkbox.net/packages/") t)
    +(package-initialize)
    +
    +;; add your modules path
    +(add-to-list 'load-path "~/.emacs.d/custom/")
    +
    +;; load your modules
    +(require 'setup-applications)
    +(require 'setup-communication)
    +(require 'setup-convenience)
    +(require 'setup-data)
    +(require 'setup-development)
    +(require 'setup-editing)
    +(require 'setup-environment)
    +(require 'setup-external)
    +(require 'setup-faces-and-ui)
    +(require 'setup-files)
    +(require 'setup-help)
    +(require 'setup-programming)
    +(require 'setup-text)
    +(require 'setup-local)
     

    -
    -

    Package: workgroups2

    -
    +
    +

    4.3.1 Package: workgroups2

    +
    +

    Author:

    @@ -1627,9 +1544,11 @@

    Packa
    • It saves all your opened buffers, their location and sizes on disk -to restore later.
    • +to restore later. + -
    • You can create several workspaces.
    • +
    • You can create several workspaces. +

    @@ -1649,14 +1568,14 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: workgroups2               ;;
    -;;                                    ;;
    -;; GROUP: Convenience -> Workgroups   ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'workgroups2)
    -;; Change some settings
    -(workgroups-mode 1)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: workgroups2               ;;
    +;;                                    ;;
    +;; GROUP: Convenience -> Workgroups   ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'workgroups2)
    +;; Change some settings
    +(workgroups-mode 1)
     
    @@ -1710,9 +1629,10 @@

    Packa

    -
    -

    setup-editing.el

    -
    +
    +

    4.4 setup-editing.el

    +
    +

    Let's use setq to change Emacs the way we want. You should type in the snippet below and use the completion key bindings until you get @@ -1722,36 +1642,36 @@

    setup
    -
    (provide 'setup-editing)
    +
    (provide 'setup-editing)
     
    -;; GROUP: Editing -> Editing Basics
    -(setq global-mark-ring-max 5000         ; increase mark ring to contains 5000 entries
    -      mark-ring-max 5000                ; increase kill ring to contains 5000 entries
    -      mode-require-final-newline t      ; add a newline to end of file
    -      )
    +;; GROUP: Editing -> Editing Basics
    +(setq global-mark-ring-max 5000         ; increase mark ring to contains 5000 entries
    +      mark-ring-max 5000                ; increase kill ring to contains 5000 entries
    +      mode-require-final-newline t      ; add a newline to end of file
    +      )
     
    -;; default to 4 visible spaces to display a tab
    -(setq-default tab-width 4)
    +;; default to 4 visible spaces to display a tab
    +(setq-default tab-width 4)
     
    -(set-terminal-coding-system 'utf-8)
    -(set-keyboard-coding-system 'utf-8)
    -(set-language-environment "UTF-8")
    -(prefer-coding-system 'utf-8)
    +(set-terminal-coding-system 'utf-8)
    +(set-keyboard-coding-system 'utf-8)
    +(set-language-environment "UTF-8")
    +(prefer-coding-system 'utf-8)
     
    -(setq-default indent-tabs-mode nil)
    -(delete-selection-mode)
    -(global-set-key (kbd "RET") 'newline-and-indent)
    +(setq-default indent-tabs-mode nil)
    +(delete-selection-mode)
    +(global-set-key (kbd "RET") 'newline-and-indent)
     
    -;; GROUP: Editing -> Killing
    -(setq
    - kill-ring-max 5000 ; increase kill-ring capacity
    - kill-whole-line t  ; if NIL, kill whole line and move the next line up
    - )
    +;; GROUP: Editing -> Killing
    +(setq
    + kill-ring-max 5000 ; increase kill-ring capacity
    + kill-whole-line t  ; if NIL, kill whole line and move the next line up
    + )
     
    -;; show important whitespace in diff-mode
    -(add-hook 'diff-mode-hook (lambda ()
    -                            (setq-local whitespace-style
    -                                        '(face
    +;; show important whitespace in diff-mode
    +(add-hook 'diff-mode-hook (lambda ()
    +                            (setq-local whitespace-style
    +                                        '(face
                                               tabs
                                               tab-mark
                                               spaces
    @@ -1760,210 +1680,210 @@ 

    setup indentation::space indentation::tab newline - newline-mark)) - (whitespace-mode 1))) + newline-mark)) + (whitespace-mode 1)))

    -
    -

    Customize built-in functions

    -
    +
    +

    4.4.1 Customize built-in functions

    +

    Sometimes, we want to adjust or improve the behaviours of some commands in certain contexts. Consider this situation: C-a, which runs move-beginning-of-line, always move to the beginning of -line. However, sometimes we don't always to move to the beginning of +line. However, sometimes we don't always to move to the beginning of line, but move to the first non-whitespace character of that line.

    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Customized functions                ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(defun prelude-move-beginning-of-line (arg)
    -  "Move point back to indentation of beginning of line.
    -
    -Move point to the first non-whitespace character on this line.
    -If point is already there, move to the beginning of the line.
    -Effectively toggle between the first non-whitespace character and
    -the beginning of the line.
    -
    -If ARG is not nil or 1, move forward ARG - 1 lines first. If
    -point reaches the beginning or end of the buffer, stop there."
    -  (interactive "^p")
    -  (setq arg (or arg 1))
    -
    -  ;; Move lines first
    -  (when (/= arg 1)
    -    (let ((line-move-visual nil))
    -      (forward-line (1- arg))))
    -
    -  (let ((orig-point (point)))
    -    (back-to-indentation)
    -    (when (= orig-point (point))
    -      (move-beginning-of-line 1))))
    -
    -(global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
    -
    -(defadvice kill-ring-save (before slick-copy activate compile)
    -  "When called interactively with no active region, copy a single
    -line instead."
    -  (interactive
    -   (if mark-active (list (region-beginning) (region-end))
    -     (message "Copied line")
    -     (list (line-beginning-position)
    -           (line-beginning-position 2)))))
    -
    -(defadvice kill-region (before slick-cut activate compile)
    -  "When called interactively with no active region, kill a single
    -  line instead."
    -  (interactive
    -   (if mark-active (list (region-beginning) (region-end))
    -     (list (line-beginning-position)
    -           (line-beginning-position 2)))))
    -
    -;; kill a line, including whitespace characters until next non-whiepsace character
    -;; of next line
    -(defadvice kill-line (before check-position activate)
    -  (if (member major-mode
    -              '(emacs-lisp-mode scheme-mode lisp-mode
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Customized functions                ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(defun prelude-move-beginning-of-line (arg)
    +  "Move point back to indentation of beginning of line.
    +
    +Move point to the first non-whitespace character on this line.
    +If point is already there, move to the beginning of the line.
    +Effectively toggle between the first non-whitespace character and
    +the beginning of the line.
    +
    +If ARG is not nil or 1, move forward ARG - 1 lines first. If
    +point reaches the beginning or end of the buffer, stop there."
    +  (interactive "^p")
    +  (setq arg (or arg 1))
    +
    +  ;; Move lines first
    +  (when (/= arg 1)
    +    (let ((line-move-visual nil))
    +      (forward-line (1- arg))))
    +
    +  (let ((orig-point (point)))
    +    (back-to-indentation)
    +    (when (= orig-point (point))
    +      (move-beginning-of-line 1))))
    +
    +(global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
    +
    +(defadvice kill-ring-save (before slick-copy activate compile)
    +  "When called interactively with no active region, copy a single
    +line instead."
    +  (interactive
    +   (if mark-active (list (region-beginning) (region-end))
    +     (message "Copied line")
    +     (list (line-beginning-position)
    +           (line-beginning-position 2)))))
    +
    +(defadvice kill-region (before slick-cut activate compile)
    +  "When called interactively with no active region, kill a single
    +  line instead."
    +  (interactive
    +   (if mark-active (list (region-beginning) (region-end))
    +     (list (line-beginning-position)
    +           (line-beginning-position 2)))))
    +
    +;; kill a line, including whitespace characters until next non-whiepsace character
    +;; of next line
    +(defadvice kill-line (before check-position activate)
    +  (if (member major-mode
    +              '(emacs-lisp-mode scheme-mode lisp-mode
                                     c-mode c++-mode objc-mode
    -                                latex-mode plain-tex-mode))
    -      (if (and (eolp) (not (bolp)))
    -          (progn (forward-char 1)
    -                 (just-one-space 0)
    -                 (backward-char 1)))))
    -
    -;; taken from prelude-editor.el
    -;; automatically indenting yanked text if in programming-modes
    -(defvar yank-indent-modes
    -  '(LaTeX-mode TeX-mode)
    -  "Modes in which to indent regions that are yanked (or yank-popped).
    -Only modes that don't derive from `prog-mode' should be listed here.")
    -
    -(defvar yank-indent-blacklisted-modes
    -  '(python-mode slim-mode haml-mode)
    -  "Modes for which auto-indenting is suppressed.")
    -
    -(defvar yank-advised-indent-threshold 1000
    -  "Threshold (# chars) over which indentation does not automatically occur.")
    -
    -(defun yank-advised-indent-function (beg end)
    -  "Do indentation, as long as the region isn't too large."
    -  (if (<= (- end beg) yank-advised-indent-threshold)
    -      (indent-region beg end nil)))
    -
    -(defadvice yank (after yank-indent activate)
    -  "If current mode is one of 'yank-indent-modes,
    -indent yanked text (with prefix arg don't indent)."
    -  (if (and (not (ad-get-arg 0))
    -           (not (member major-mode yank-indent-blacklisted-modes))
    -           (or (derived-mode-p 'prog-mode)
    -               (member major-mode yank-indent-modes)))
    -      (let ((transient-mark-mode nil))
    -        (yank-advised-indent-function (region-beginning) (region-end)))))
    -
    -(defadvice yank-pop (after yank-pop-indent activate)
    -  "If current mode is one of `yank-indent-modes',
    -indent yanked text (with prefix arg don't indent)."
    -  (when (and (not (ad-get-arg 0))
    -             (not (member major-mode yank-indent-blacklisted-modes))
    -             (or (derived-mode-p 'prog-mode)
    -                 (member major-mode yank-indent-modes)))
    -    (let ((transient-mark-mode nil))
    -      (yank-advised-indent-function (region-beginning) (region-end)))))
    -
    -;; prelude-core.el
    -(defun prelude-duplicate-current-line-or-region (arg)
    -  "Duplicates the current line or region ARG times.
    -If there's no region, the current line will be duplicated. However, if
    -there's a region, all lines that region covers will be duplicated."
    -  (interactive "p")
    -  (pcase-let* ((origin (point))
    -               (`(,beg . ,end) (prelude-get-positions-of-line-or-region))
    -               (region (buffer-substring-no-properties beg end)))
    -    (-dotimes arg
    -      (lambda (n)
    -        (goto-char end)
    -        (newline)
    -        (insert region)
    -        (setq end (point))))
    -    (goto-char (+ origin (* (length region) arg) arg))))
    -
    -;; prelude-core.el
    -(defun indent-buffer ()
    -  "Indent the currently visited buffer."
    -  (interactive)
    -  (indent-region (point-min) (point-max)))
    -
    -;; prelude-editing.el
    -(defcustom prelude-indent-sensitive-modes
    -  '(coffee-mode python-mode slim-mode haml-mode yaml-mode)
    -  "Modes for which auto-indenting is suppressed."
    -  :type 'list)
    -
    -(defun indent-region-or-buffer ()
    -  "Indent a region if selected, otherwise the whole buffer."
    -  (interactive)
    -  (unless (member major-mode prelude-indent-sensitive-modes)
    -    (save-excursion
    -      (if (region-active-p)
    -          (progn
    -            (indent-region (region-beginning) (region-end))
    -            (message "Indented selected region."))
    -        (progn
    -          (indent-buffer)
    -          (message "Indented buffer.")))
    -      (whitespace-cleanup))))
    -
    -(global-set-key (kbd "C-c i") 'indent-region-or-buffer)
    -
    -;; add duplicate line function from Prelude
    -;; taken from prelude-core.el
    -(defun prelude-get-positions-of-line-or-region ()
    -  "Return positions (beg . end) of the current line
    -or region."
    -  (let (beg end)
    -    (if (and mark-active (> (point) (mark)))
    -        (exchange-point-and-mark))
    -    (setq beg (line-beginning-position))
    -    (if mark-active
    -        (exchange-point-and-mark))
    -    (setq end (line-end-position))
    -    (cons beg end)))
    -
    -(defun kill-default-buffer ()
    -  "Kill the currently active buffer -- set to C-x k so that users are not asked which buffer they want to kill."
    -  (interactive)
    -  (let (kill-buffer-query-functions) (kill-buffer)))
    -
    -(global-set-key (kbd "C-x k") 'kill-default-buffer)
    -
    -;; smart openline
    -(defun prelude-smart-open-line (arg)
    -  "Insert an empty line after the current line.
    -Position the cursor at its beginning, according to the current mode.
    -With a prefix ARG open line above the current line."
    -  (interactive "P")
    -  (if arg
    -      (prelude-smart-open-line-above)
    -    (progn
    -      (move-end-of-line nil)
    -      (newline-and-indent))))
    -
    -(defun prelude-smart-open-line-above ()
    -  "Insert an empty line above the current line.
    -Position the cursor at it's beginning, according to the current mode."
    -  (interactive)
    -  (move-beginning-of-line nil)
    -  (newline-and-indent)
    -  (forward-line -1)
    -  (indent-according-to-mode))
    -
    -(global-set-key (kbd "C-o") 'prelude-smart-open-line)
    -(global-set-key (kbd "M-o") 'open-line)
    +                                latex-mode plain-tex-mode))
    +      (if (and (eolp) (not (bolp)))
    +          (progn (forward-char 1)
    +                 (just-one-space 0)
    +                 (backward-char 1)))))
    +
    +;; taken from prelude-editor.el
    +;; automatically indenting yanked text if in programming-modes
    +(defvar yank-indent-modes
    +  '(LaTeX-mode TeX-mode)
    +  "Modes in which to indent regions that are yanked (or yank-popped).
    +Only modes that don't derive from `prog-mode' should be listed here.")
    +
    +(defvar yank-indent-blacklisted-modes
    +  '(python-mode slim-mode haml-mode)
    +  "Modes for which auto-indenting is suppressed.")
    +
    +(defvar yank-advised-indent-threshold 1000
    +  "Threshold (# chars) over which indentation does not automatically occur.")
    +
    +(defun yank-advised-indent-function (beg end)
    +  "Do indentation, as long as the region isn't too large."
    +  (if (<= (- end beg) yank-advised-indent-threshold)
    +      (indent-region beg end nil)))
    +
    +(defadvice yank (after yank-indent activate)
    +  "If current mode is one of 'yank-indent-modes,
    +indent yanked text (with prefix arg don't indent)."
    +  (if (and (not (ad-get-arg 0))
    +           (not (member major-mode yank-indent-blacklisted-modes))
    +           (or (derived-mode-p 'prog-mode)
    +               (member major-mode yank-indent-modes)))
    +      (let ((transient-mark-mode nil))
    +        (yank-advised-indent-function (region-beginning) (region-end)))))
    +
    +(defadvice yank-pop (after yank-pop-indent activate)
    +  "If current mode is one of `yank-indent-modes',
    +indent yanked text (with prefix arg don't indent)."
    +  (when (and (not (ad-get-arg 0))
    +             (not (member major-mode yank-indent-blacklisted-modes))
    +             (or (derived-mode-p 'prog-mode)
    +                 (member major-mode yank-indent-modes)))
    +    (let ((transient-mark-mode nil))
    +      (yank-advised-indent-function (region-beginning) (region-end)))))
    +
    +;; prelude-core.el
    +(defun prelude-duplicate-current-line-or-region (arg)
    +  "Duplicates the current line or region ARG times.
    +If there's no region, the current line will be duplicated. However, if
    +there's a region, all lines that region covers will be duplicated."
    +  (interactive "p")
    +  (pcase-let* ((origin (point))
    +               (`(,beg . ,end) (prelude-get-positions-of-line-or-region))
    +               (region (buffer-substring-no-properties beg end)))
    +    (-dotimes arg
    +      (lambda (n)
    +        (goto-char end)
    +        (newline)
    +        (insert region)
    +        (setq end (point))))
    +    (goto-char (+ origin (* (length region) arg) arg))))
    +
    +;; prelude-core.el
    +(defun indent-buffer ()
    +  "Indent the currently visited buffer."
    +  (interactive)
    +  (indent-region (point-min) (point-max)))
    +
    +;; prelude-editing.el
    +(defcustom prelude-indent-sensitive-modes
    +  '(coffee-mode python-mode slim-mode haml-mode yaml-mode)
    +  "Modes for which auto-indenting is suppressed."
    +  :type 'list)
    +
    +(defun indent-region-or-buffer ()
    +  "Indent a region if selected, otherwise the whole buffer."
    +  (interactive)
    +  (unless (member major-mode prelude-indent-sensitive-modes)
    +    (save-excursion
    +      (if (region-active-p)
    +          (progn
    +            (indent-region (region-beginning) (region-end))
    +            (message "Indented selected region."))
    +        (progn
    +          (indent-buffer)
    +          (message "Indented buffer.")))
    +      (whitespace-cleanup))))
    +
    +(global-set-key (kbd "C-c i") 'indent-region-or-buffer)
    +
    +;; add duplicate line function from Prelude
    +;; taken from prelude-core.el
    +(defun prelude-get-positions-of-line-or-region ()
    +  "Return positions (beg . end) of the current line
    +or region."
    +  (let (beg end)
    +    (if (and mark-active (> (point) (mark)))
    +        (exchange-point-and-mark))
    +    (setq beg (line-beginning-position))
    +    (if mark-active
    +        (exchange-point-and-mark))
    +    (setq end (line-end-position))
    +    (cons beg end)))
    +
    +(defun kill-default-buffer ()
    +  "Kill the currently active buffer -- set to C-x k so that users are not asked which buffer they want to kill."
    +  (interactive)
    +  (let (kill-buffer-query-functions) (kill-buffer)))
    +
    +(global-set-key (kbd "C-x k") 'kill-default-buffer)
    +
    +;; smart openline
    +(defun prelude-smart-open-line (arg)
    +  "Insert an empty line after the current line.
    +Position the cursor at its beginning, according to the current mode.
    +With a prefix ARG open line above the current line."
    +  (interactive "P")
    +  (if arg
    +      (prelude-smart-open-line-above)
    +    (progn
    +      (move-end-of-line nil)
    +      (newline-and-indent))))
    +
    +(defun prelude-smart-open-line-above ()
    +  "Insert an empty line above the current line.
    +Position the cursor at it's beginning, according to the current mode."
    +  (interactive)
    +  (move-beginning-of-line nil)
    +  (newline-and-indent)
    +  (forward-line -1)
    +  (indent-according-to-mode))
    +
    +(global-set-key (kbd "C-o") 'prelude-smart-open-line)
    +(global-set-key (kbd "M-o") 'open-line)
     
    @@ -1974,42 +1894,42 @@

    Custo
    -
    (defadvice kill-ring-save (before slick-copy activate compile)
    -  "When called interactively with no active region, copy a single
    -line instead."
    -  (interactive
    -   (if mark-active (list (region-beginning) (region-end))
    -     (message "Copied line")
    -     (list (line-beginning-position)
    -           (line-beginning-position 2)))))
    -
    -(defadvice kill-region (before slick-cut activate compile)
    -  "When called interactively with no active region, kill a single
    -  line instead."
    -  (interactive
    -   (if mark-active (list (region-beginning) (region-end))
    -     (list (line-beginning-position)
    -           (line-beginning-position 2)))))
    -
    -;; kill a line, including whitespace characters until next non-whiepsace character
    -;; of next line
    -(defadvice kill-line (before check-position activate)
    -  (if (member major-mode
    -              '(emacs-lisp-mode scheme-mode lisp-mode
    +
    (defadvice kill-ring-save (before slick-copy activate compile)
    +  "When called interactively with no active region, copy a single
    +line instead."
    +  (interactive
    +   (if mark-active (list (region-beginning) (region-end))
    +     (message "Copied line")
    +     (list (line-beginning-position)
    +           (line-beginning-position 2)))))
    +
    +(defadvice kill-region (before slick-cut activate compile)
    +  "When called interactively with no active region, kill a single
    +  line instead."
    +  (interactive
    +   (if mark-active (list (region-beginning) (region-end))
    +     (list (line-beginning-position)
    +           (line-beginning-position 2)))))
    +
    +;; kill a line, including whitespace characters until next non-whiepsace character
    +;; of next line
    +(defadvice kill-line (before check-position activate)
    +  (if (member major-mode
    +              '(emacs-lisp-mode scheme-mode lisp-mode
                                     c-mode c++-mode objc-mode
    -                                latex-mode plain-tex-mode))
    -      (if (and (eolp) (not (bolp)))
    -          (progn (forward-char 1)
    -                 (just-one-space 0)
    -                 (backward-char 1)))))
    +                                latex-mode plain-tex-mode))
    +      (if (and (eolp) (not (bolp)))
    +          (progn (forward-char 1)
    +                 (just-one-space 0)
    +                 (backward-char 1)))))
     

    -
    -

    Package: duplicate-thing

    -
    +
    +

    4.4.2 Package: duplicate-thing

    +

    Author: ongaeshi, ongaeshi0621@gmail.com

    @@ -2027,10 +1947,14 @@

    Packa

      -
    • Duplicate current line.
    • -
    • Duplicate a selection when selection is active.
    • -
    • Only C-u, replicate, comment out the range.
    • -
    • Numerical prefix is specified as 'C-u 5': do multiple times repeatedly.
    • +
    • Duplicate current line. +
    • +
    • Duplicate a selection when selection is active. +
    • +
    • Only C-u, replicate, comment out the range. +
    • +
    • Numerical prefix is specified as 'C-u 5': do multiple times repeatedly. +

    @@ -2039,8 +1963,8 @@

    Packa
    -
    (require 'duplicate-thing)
    -(global-set-key (kbd "M-c") 'duplicate-thing)
    +
    (require 'duplicate-thing)
    +(global-set-key (kbd "M-c") 'duplicate-thing)
     
    @@ -2052,9 +1976,9 @@

    Packa

    -
    -

    Package: volatile-highlights

    -
    +
    +

    4.4.3 Package: volatile-highlights

    +

    Author: Keitalo Miyazaki, Keitaro.Miyazaki@gmail.com

    @@ -2086,18 +2010,18 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: volatile-highlights          ;;
    -;;                                       ;;
    -;; GROUP: Editing -> Volatile Highlights ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'volatile-highlights)
    -(volatile-highlights-mode t)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: volatile-highlights          ;;
    +;;                                       ;;
    +;; GROUP: Editing -> Volatile Highlights ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'volatile-highlights)
    +(volatile-highlights-mode t)
     

    -Usage: +Usage:

    @@ -2106,9 +2030,9 @@

    Packa

    -
    -

    Package: smartparens

    -
    +
    +

    4.4.4 Package: smartparens

    +

    Author: Matus Goljer, matus.goljer@gmail.com

    @@ -2149,12 +2073,12 @@

    Packa
    -
    ;; Package: smartparens
    -(require 'smartparens-config)
    -(setq sp-base-key-bindings 'paredit)
    -(setq sp-autoskip-closing-pair 'always)
    -(setq sp-hybrid-kill-entire-symbol nil)
    -(sp-use-paredit-bindings)
    +
    ;; Package: smartparens
    +(require 'smartparens-config)
    +(setq sp-base-key-bindings 'paredit)
    +(setq sp-autoskip-closing-pair 'always)
    +(setq sp-hybrid-kill-entire-symbol nil)
    +(sp-use-paredit-bindings)
     
    @@ -2173,9 +2097,9 @@

    Packa

    -
    -

    Package: clean-aindent-mode

    -
    +
    +

    4.4.5 Package: clean-aindent-mode

    +

    Author: Peter Marinov

    @@ -2212,18 +2136,18 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: clean-aindent-mode               ;;
    -;;                                           ;;
    -;; GROUP: Editing -> Indent -> Clean Aindent ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'clean-aindent-mode)
    -(add-hook 'prog-mode-hook 'clean-aindent-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: clean-aindent-mode               ;;
    +;;                                           ;;
    +;; GROUP: Editing -> Indent -> Clean Aindent ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'clean-aindent-mode)
    +(add-hook 'prog-mode-hook 'clean-aindent-mode)
     

    -Usage: +Usage:

    @@ -2232,9 +2156,9 @@

    Packa

    -
    -

    Package: undo-tree

    -
    +
    +

    4.4.6 Package: undo-tree

    +

    Author: Toby Cubitt, toby-undo-tree@dr-qubit.org

    @@ -2244,7 +2168,7 @@

    Packa

    -Features: +Features:

    @@ -2272,13 +2196,13 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: undo-tree                  ;;
    -;;                                     ;;
    -;; GROUP: Editing -> Undo -> Undo Tree ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'undo-tree)
    -(global-undo-tree-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: undo-tree                  ;;
    +;;                                     ;;
    +;; GROUP: Editing -> Undo -> Undo Tree ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'undo-tree)
    +(global-undo-tree-mode)
     
    @@ -2293,9 +2217,9 @@

    Packa

    -
    -

    Package: yasnippet

    -
    +
    +

    4.4.7 Package: yasnippet

    +

    Author: João Távora

    @@ -2329,13 +2253,13 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: yasnippet                 ;;
    -;;                                    ;;
    -;; GROUP: Editing -> Yasnippet        ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'yasnippet)
    -(yas-global-mode 1)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: yasnippet                 ;;
    +;;                                    ;;
    +;; GROUP: Editing -> Yasnippet        ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'yasnippet)
    +(yas-global-mode 1)
     
    @@ -2351,9 +2275,9 @@

    Packa
    -
    for (i = 0; i < N; i++) {
    +
    for (i = 0; i < N; i++) {
         ...point will be here....
    -}
    +}
     
    @@ -2364,9 +2288,9 @@

    Packa

    -
    -

    setup-convenience.el

    -
    +
    +

    4.5 setup-convenience.el

    +

    Remember to include the line (provide 'setup-convenience), otherwise Emacs won't be able to load your module. Here is my sample @@ -2375,67 +2299,69 @@

    setup
    -
    (provide 'setup-convenience)
    +
    (provide 'setup-convenience)
     
    -;; GROUP: Convenience -> Revert
    +;; GROUP: Convenience -> Revert
     
    -;; update any change made on file to the current buffer
    -(global-auto-revert-mode)
    +;; update any change made on file to the current buffer
    +(global-auto-revert-mode)
     
    -;; GROUP: Convenience -> Hippe Expand
    -;; hippie-expand is a better version of dabbrev-expand.
    -;; While dabbrev-expand searches for words you already types, in current;; buffers and other buffers, hippie-expand includes more sources,
    -;; such as filenames, klll ring...
    -(global-set-key (kbd "M-/") 'hippie-expand) ;; replace dabbrev-expand
    -(setq
    +;; GROUP: Convenience -> Hippe Expand
    +;; hippie-expand is a better version of dabbrev-expand.
    +;; While dabbrev-expand searches for words you already types, in current;; buffers and other buffers, hippie-expand includes more sources,
    +;; such as filenames, klll ring...
    +(global-set-key (kbd "M-/") 'hippie-expand) ;; replace dabbrev-expand
    +(setq
      hippie-expand-try-functions-list
    - '(try-expand-dabbrev ;; Try to expand word "dynamically", searching the current buffer.
    -   try-expand-dabbrev-all-buffers ;; Try to expand word "dynamically", searching all other buffers.
    -   try-expand-dabbrev-from-kill ;; Try to expand word "dynamically", searching the kill ring.
    -   try-complete-file-name-partially ;; Try to complete text as a file name, as many characters as unique.
    -   try-complete-file-name ;; Try to complete text as a file name.
    -   try-expand-all-abbrevs ;; Try to expand word before point according to all abbrev tables.
    -   try-expand-list ;; Try to complete the current line to an entire line in the buffer.
    -   try-expand-line ;; Try to complete the current line to an entire line in the buffer.
    -   try-complete-lisp-symbol-partially ;; Try to complete as an Emacs Lisp symbol, as many characters as unique.
    -   try-complete-lisp-symbol) ;; Try to complete word as an Emacs Lisp symbol.
    - )
    + '(try-expand-dabbrev ;; Try to expand word "dynamically", searching the current buffer.
    +   try-expand-dabbrev-all-buffers ;; Try to expand word "dynamically", searching all other buffers.
    +   try-expand-dabbrev-from-kill ;; Try to expand word "dynamically", searching the kill ring.
    +   try-complete-file-name-partially ;; Try to complete text as a file name, as many characters as unique.
    +   try-complete-file-name ;; Try to complete text as a file name.
    +   try-expand-all-abbrevs ;; Try to expand word before point according to all abbrev tables.
    +   try-expand-list ;; Try to complete the current line to an entire line in the buffer.
    +   try-expand-line ;; Try to complete the current line to an entire line in the buffer.
    +   try-complete-lisp-symbol-partially ;; Try to complete as an Emacs Lisp symbol, as many characters as unique.
    +   try-complete-lisp-symbol) ;; Try to complete word as an Emacs Lisp symbol.
    + )
     
    -;; GROUP: Convenience -> HL Line
    -(global-hl-line-mode)
    +;; GROUP: Convenience -> HL Line
    +(global-hl-line-mode)
     
    -;; GROUP: Convenience -> Ibuffer
    -(setq ibuffer-use-other-window t) ;; always display ibuffer in another window
    +;; GROUP: Convenience -> Ibuffer
    +(setq ibuffer-use-other-window t) ;; always display ibuffer in another window
     
    -;; GROUP: Convenience -> Linum
    -(add-hook 'prog-mode-hook 'linum-mode) ;; enable linum only in programming modes
    +;; GROUP: Convenience -> Linum
    +(add-hook 'prog-mode-hook 'linum-mode) ;; enable linum only in programming modes
     
    -;; GROUP: Convenience -> Whitespace
    +;; GROUP: Convenience -> Whitespace
     
    -;; whenever you create useless whitespace, the whitespace is highlighted
    -(add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
    +;; whenever you create useless whitespace, the whitespace is highlighted
    +(add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
     
    -;; activate whitespace-mode to view all whitespace characters
    -(global-set-key (kbd "C-c w") 'whitespace-mode)
    +;; activate whitespace-mode to view all whitespace characters
    +(global-set-key (kbd "C-c w") 'whitespace-mode)
     
    -;; GROUP: Convenience -> Windmove
    +;; GROUP: Convenience -> Windmove
     
    -;; easier window navigation
    -(windmove-default-keybindings)
    +;; easier window navigation
    +(windmove-default-keybindings)
     

    -
    -

    Package: company

    -
    +
    +

    4.5.1 Package: company

    +

    -Author: +Author:

      -
    • Nikolaj Schumacher (original author)
    • -
    • Dmitry Gutov (current maintainer), dgutov@yandex.ru
    • +
    • Nikolaj Schumacher (original author) +
    • +
    • Dmitry Gutov (current maintainer), dgutov@yandex.ru +

    @@ -2476,12 +2402,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: company              ;;
    -;;                               ;;
    -;; GROUP: Convenience -> Company ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(add-hook 'after-init-hook 'global-company-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: company              ;;
    +;;                               ;;
    +;; GROUP: Convenience -> Company ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(add-hook 'after-init-hook 'global-company-mode)
     
    @@ -2499,9 +2425,9 @@

    Packa

    -
    -

    Package: expand-region

    -
    +
    +

    4.5.2 Package: expand-region

    +

    Author: Magnar Sveen

    @@ -2512,7 +2438,7 @@

    Packa

    Features: -expand-region allows you to select text objects incrementally. +expand-region allows you to select text objects incrementally.

    @@ -2527,13 +2453,13 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: expand-region                       ;;
    -;;                                              ;;
    -;; GROUP: Convenience -> Abbreviation -> Expand ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'expand-region)
    -(global-set-key (kbd "M-m") 'er/expand-region)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: expand-region                       ;;
    +;;                                              ;;
    +;; GROUP: Convenience -> Abbreviation -> Expand ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'expand-region)
    +(global-set-key (kbd "M-m") 'er/expand-region)
     
    @@ -2543,7 +2469,7 @@

    Packa

    -Usage: +Usage:

    @@ -2552,9 +2478,9 @@

    Packa

    -
    -

    Package: ibuffer-vc

    -
    +
    +

    4.5.3 Package: ibuffer-vc

    +

    Author: Steve Purcell

    @@ -2568,9 +2494,12 @@

    Packa

      -
    • Group your buffers by their parent vc root directory
    • -
    • See the VC status of the associated files
    • -
    • Sort buffers by their VC status
    • +
    • Group your buffers by their parent vc root directory +
    • +
    • See the VC status of the associated files +
    • +
    • Sort buffers by their VC status +
    @@ -2591,28 +2520,28 @@

    Packa
    -
    (add-hook 'ibuffer-hook
    -          (lambda ()
    -            (ibuffer-vc-set-filter-groups-by-vc-root)
    -            (unless (eq ibuffer-sorting-mode 'alphabetic)
    -              (ibuffer-do-sort-by-alphabetic))))
    -
    -(setq ibuffer-formats
    -      '((mark modified read-only vc-status-mini " "
    -              (name 18 18 :left :elide)
    -              " "
    -              (size 9 -1 :right)
    -              " "
    -              (mode 16 16 :left :elide)
    -              " "
    -              (vc-status 16 16 :left)
    -              " "
    -              filename-and-process)))
    +
    (add-hook 'ibuffer-hook
    +          (lambda ()
    +            (ibuffer-vc-set-filter-groups-by-vc-root)
    +            (unless (eq ibuffer-sorting-mode 'alphabetic)
    +              (ibuffer-do-sort-by-alphabetic))))
    +
    +(setq ibuffer-formats
    +      '((mark modified read-only vc-status-mini " "
    +              (name 18 18 :left :elide)
    +              " "
    +              (size 9 -1 :right)
    +              " "
    +              (mode 16 16 :left :elide)
    +              " "
    +              (vc-status 16 16 :left)
    +              " "
    +              filename-and-process)))
     

    -Usage: +Usage:

    @@ -2622,9 +2551,9 @@

    Packa

    -
    -

    Package: projectile

    -
    +
    +

    4.5.4 Package: projectile

    +

    Author: Bozhidar Batsov, bozhidar@batsov.com

    @@ -2643,13 +2572,13 @@

    Packa introducing external dependencies(when feasible). For instance - finding project files has a portable implementation written in pure Emacs Lisp without the use of GNU find (but for performance sake an -indexing mechanism backed by external commands exists as well). +indexing mechanism backed by external commands exists as well).

    Projectile tries to be practical - portability is great, but if some external tools could speed up some task substantially and the tools -are available, Projectile will leverage them. +are available, Projectile will leverage them.

    @@ -2663,21 +2592,36 @@

    Packa

      -
    • jump to a file in project
    • -
    • jump to a directory in project
    • -
    • jump to a file in a directory
    • -
    • jump to a project buffer
    • -
    • jump to a test in project
    • -
    • toggle between code and its test
    • -
    • jump to recently visited files in the project
    • -
    • switch between projects you have worked on
    • -
    • kill all project buffers
    • -
    • replace in project
    • -
    • multi-occur in project buffers
    • -
    • grep in project
    • -
    • regenerate project etags or gtags (requires gtags).
    • -
    • visit project in dired
    • -
    • run make in a project with a single key chord
    • +
    • jump to a file in project +
    • +
    • jump to a directory in project +
    • +
    • jump to a file in a directory +
    • +
    • jump to a project buffer +
    • +
    • jump to a test in project +
    • +
    • toggle between code and its test +
    • +
    • jump to recently visited files in the project +
    • +
    • switch between projects you have worked on +
    • +
    • kill all project buffers +
    • +
    • replace in project +
    • +
    • multi-occur in project buffers +
    • +
    • grep in project +
    • +
    • regenerate project etags or gtags (requires gtags). +
    • +
    • visit project in dired +
    • +
    • run make in a project with a single key chord +

    @@ -2696,16 +2640,16 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGES: projectile             ;;
    -;;                                  ;;
    -;; GROUP: Convenience -> Projectile ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(projectile-global-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGES: projectile             ;;
    +;;                                  ;;
    +;; GROUP: Convenience -> Projectile ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(projectile-global-mode)
     

    -Usage: +Usage:

    @@ -2715,9 +2659,9 @@

    Packa

    -
    -

    Package in a league of its own: helm

    -
    +
    +

    4.6 Package in a league of its own: helm

    +

    Helm is an awesome package. Please refer to the whole guide. You should give Helm its own file: setup-helm.el. @@ -2725,9 +2669,9 @@

    Packa

    -
    -

    Alternative to Helm: ido + ido-ubiquitous + flx-ido + smex

    -
    +
    +

    4.7 Alternative to Helm: ido + ido-ubiquitous + flx-ido + smex

    +

    If you want to use Ido, at replace Helm configuration with this sample configuration that you can place in setup-environment.el: @@ -2735,27 +2679,27 @@

    Alter
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Development -> Extensions -> Ido ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'ido)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Development -> Extensions -> Ido ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'ido)
     
    -(setq ido-enable-prefix nil
    +(setq ido-enable-prefix nil
           ido-enable-flex-matching t
           ido-create-new-buffer 'always
           ido-use-filename-at-point 'guess
    -      ido-max-prospects 10
    +      ido-max-prospects 10
           ido-default-file-method 'selected-window
    -      ido-auto-merge-work-directories-length -1)
    +      ido-auto-merge-work-directories-length -1)
     
    -(ido-mode +1)
    +(ido-mode +1)
     

    -
    -

    Package: ido-ubiquitous

    -
    +
    +

    4.7.1 Package: ido-ubiquitous

    +

    Author: Ryan C. Thompson, rct+github@thompsonclan.org

    @@ -2765,7 +2709,7 @@

    Packa

    -Features: +Features:

    @@ -2795,12 +2739,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: ido-ubiquitous                                   ;;
    -;;                                                           ;;
    -;; GROUP: Development -> Extensions -> Ido -> Ido Ubiquitous ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(ido-ubiquitous-mode +1)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: ido-ubiquitous                                   ;;
    +;;                                                           ;;
    +;; GROUP: Development -> Extensions -> Ido -> Ido Ubiquitous ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(ido-ubiquitous-mode +1)
     
    @@ -2815,9 +2759,9 @@

    Packa

    -
    -

    Package: flx-ido

    -
    +
    +

    4.7.2 Package: flx-ido

    +

    Author: Le Wang

    @@ -2835,15 +2779,15 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: flx-ido                                          ;;
    -;;                                                           ;;
    -;; GROUP: Development -> Extensions -> Ido                   ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;;; smarter fuzzy matching for ido
    -(flx-ido-mode +1)
    -;; disable ido faces to see flx highlights
    -(setq ido-use-faces nil)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: flx-ido                                          ;;
    +;;                                                           ;;
    +;; GROUP: Development -> Extensions -> Ido                   ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;;; smarter fuzzy matching for ido
    +(flx-ido-mode +1)
    +;; disable ido faces to see flx highlights
    +(setq ido-use-faces nil)
     
    @@ -2860,9 +2804,9 @@

    Packa

    -
    -

    Package: smex

    -
    +
    +

    4.7.3 Package: smex

    +

    Author: Cornelius Mika, cornelius.mika@gmail.com

    @@ -2899,15 +2843,15 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: smex                                             ;;
    -;;                                                           ;;
    -;; GROUP: Convenience -> Extensions -> Smex                  ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'smex)
    -(smex-initialize)
    -(global-set-key (kbd "M-x") 'smex)
    -(global-set-key (kbd "M-X") 'smex-major-mode-commands)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: smex                                             ;;
    +;;                                                           ;;
    +;; GROUP: Convenience -> Extensions -> Smex                  ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'smex)
    +(smex-initialize)
    +(global-set-key (kbd "M-x") 'smex)
    +(global-set-key (kbd "M-X") 'smex-major-mode-commands)
     
    @@ -2922,9 +2866,9 @@

    Packa

    -
    -

    setup-files.el

    -
    +
    +

    4.8 setup-files.el

    +

    Remember to include the line (provide 'setup-files), otherwise Emacs won't be able to load your module. My sample customization: @@ -2932,93 +2876,93 @@

    setup
    -
    (provide 'setup-files)
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; group: Files                      ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(setq large-file-warning-threshold 100000000) ;; size in bytes
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Files -> Back up            ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(defvar backup-directory "~/.backups")
    -(if (not (file-exists-p backup-directory))
    -    (make-directory backup-directory t))
    -(setq
    - make-backup-files t        ; backup a file the first time it is saved
    - backup-directory-alist `((".*" . ,backup-directory)) ; save backup files in ~/.backups
    - backup-by-copying t     ; copy the current file into backup directory
    - version-control t   ; version numbers for backup files
    - delete-old-versions t   ; delete unnecessary versions
    - kept-old-versions 6     ; oldest versions to keep when a new numbered backup is made (default: 2)
    - kept-new-versions 9 ; newest versions to keep when a new numbered backup is made (default: 2)
    - auto-save-default t ; auto-save every buffer that visits a file
    - auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
    - auto-save-interval 200 ; number of keystrokes between auto-saves (default: 300)
    - )
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Files -> Dired              ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(setq
    - dired-dwim-target t            ; if another Dired buffer is visible in another window, use that directory as target for Rename/Copy
    - dired-recursive-copies 'always         ; "always" means no asking
    - dired-recursive-deletes 'top           ; "top" means ask once for top level directory
    - dired-listing-switches "-lha"          ; human-readable listing
    - )
    -
    -;; automatically refresh dired buffer on changes
    -(add-hook 'dired-mode-hook 'auto-revert-mode)
    -
    -;; if it is not Windows, use the following listing switches
    -(when (not (eq system-type 'windows-nt))
    -  (setq dired-listing-switches "-lha --group-directories-first"))
    -
    -;;; KEY BINDINGS.
    -;; (define-key ctl-x-map "\C-j" 'dired-jump)
    -;; (define-key ctl-x-4-map "\C-j" 'dired-jump-other-window))
    -;; (define-key dired-mode-map "\C-x\M-o" 'dired-omit-mode)
    -;; (define-key dired-mode-map "*O" 'dired-mark-omitted)
    -;; (define-key dired-mode-map "\M-(" 'dired-mark-sexp)
    -;; (define-key dired-mode-map "*(" 'dired-mark-sexp)
    -;; (define-key dired-mode-map "*." 'dired-mark-extension)
    -;; (define-key dired-mode-map "\M-!" 'dired-smart-shell-command)
    -;; (define-key dired-mode-map "\M-G" 'dired-goto-subdir)
    -;; (define-key dired-mode-map "F" 'dired-do-find-marked-files)
    -;; (define-key dired-mode-map "Y"  'dired-do-relsymlink)
    -;; (define-key dired-mode-map "%Y" 'dired-do-relsymlink-regexp)
    -;; (define-key dired-mode-map "V" 'dired-do-run-mail)
    -(require 'dired-x) ; provide extra commands for Dired
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Files -> Dired -> Wdired    ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; wdired allows you to edit a Dired buffer and write changes to disk
    -;; - Switch to Wdired by C-x C-q
    -;; - Edit the Dired buffer, i.e. change filenames
    -;; - Commit by C-c C-c, abort by C-c C-k
    -(require 'wdired)
    -(setq
    - wdired-allow-to-change-permissions t   ; allow to edit permission bits
    - wdired-allow-to-redirect-links t       ; allow to edit symlinks
    - )
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Files -> Recentf            ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(recentf-mode)
    -(setq
    - recentf-max-menu-items 30
    - recentf-max-saved-items 5000
    - )
    +
    (provide 'setup-files)
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; group: Files                      ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(setq large-file-warning-threshold 100000000) ;; size in bytes
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Files -> Back up            ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(defvar backup-directory "~/.backups")
    +(if (not (file-exists-p backup-directory))
    +    (make-directory backup-directory t))
    +(setq
    + make-backup-files t        ; backup a file the first time it is saved
    + backup-directory-alist `((".*" . ,backup-directory)) ; save backup files in ~/.backups
    + backup-by-copying t     ; copy the current file into backup directory
    + version-control t   ; version numbers for backup files
    + delete-old-versions t   ; delete unnecessary versions
    + kept-old-versions 6     ; oldest versions to keep when a new numbered backup is made (default: 2)
    + kept-new-versions 9 ; newest versions to keep when a new numbered backup is made (default: 2)
    + auto-save-default t ; auto-save every buffer that visits a file
    + auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
    + auto-save-interval 200 ; number of keystrokes between auto-saves (default: 300)
    + )
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Files -> Dired              ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(setq
    + dired-dwim-target t            ; if another Dired buffer is visible in another window, use that directory as target for Rename/Copy
    + dired-recursive-copies 'always         ; "always" means no asking
    + dired-recursive-deletes 'top           ; "top" means ask once for top level directory
    + dired-listing-switches "-lha"          ; human-readable listing
    + )
    +
    +;; automatically refresh dired buffer on changes
    +(add-hook 'dired-mode-hook 'auto-revert-mode)
    +
    +;; if it is not Windows, use the following listing switches
    +(when (not (eq system-type 'windows-nt))
    +  (setq dired-listing-switches "-lha --group-directories-first"))
    +
    +;;; KEY BINDINGS.
    +;; (define-key ctl-x-map "\C-j" 'dired-jump)
    +;; (define-key ctl-x-4-map "\C-j" 'dired-jump-other-window))
    +;; (define-key dired-mode-map "\C-x\M-o" 'dired-omit-mode)
    +;; (define-key dired-mode-map "*O" 'dired-mark-omitted)
    +;; (define-key dired-mode-map "\M-(" 'dired-mark-sexp)
    +;; (define-key dired-mode-map "*(" 'dired-mark-sexp)
    +;; (define-key dired-mode-map "*." 'dired-mark-extension)
    +;; (define-key dired-mode-map "\M-!" 'dired-smart-shell-command)
    +;; (define-key dired-mode-map "\M-G" 'dired-goto-subdir)
    +;; (define-key dired-mode-map "F" 'dired-do-find-marked-files)
    +;; (define-key dired-mode-map "Y"  'dired-do-relsymlink)
    +;; (define-key dired-mode-map "%Y" 'dired-do-relsymlink-regexp)
    +;; (define-key dired-mode-map "V" 'dired-do-run-mail)
    +(require 'dired-x) ; provide extra commands for Dired
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Files -> Dired -> Wdired    ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; wdired allows you to edit a Dired buffer and write changes to disk
    +;; - Switch to Wdired by C-x C-q
    +;; - Edit the Dired buffer, i.e. change filenames
    +;; - Commit by C-c C-c, abort by C-c C-k
    +(require 'wdired)
    +(setq
    + wdired-allow-to-change-permissions t   ; allow to edit permission bits
    + wdired-allow-to-redirect-links t       ; allow to edit symlinks
    + )
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Files -> Recentf            ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(recentf-mode)
    +(setq
    + recentf-max-menu-items 30
    + recentf-max-saved-items 5000
    + )
     

    -
    -

    Package: dired+

    -
    +
    +

    4.8.1 Package: dired+

    +

    Author: Drew Adams, drew.adams@oracle.com

    @@ -3053,12 +2997,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: dired+                     ;;
    -;;                                     ;;
    -;; GROUP: Files -> Dired -> Dired Plus ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'dired+)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: dired+                     ;;
    +;;                                     ;;
    +;; GROUP: Files -> Dired -> Dired Plus ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'dired+)
     
    @@ -3074,9 +3018,9 @@

    Packa

    -
    -

    Package: recentf-ext

    -
    +
    +

    4.8.2 Package: recentf-ext

    +

    Features:

    @@ -3086,8 +3030,10 @@

    Packa

      -
    • `dired' buffers can be handled.
    • -
    • Switching to file buffer considers it as most recent file.
    • +
    • `dired' buffers can be handled. +
    • +
    • Switching to file buffer considers it as most recent file. +

    @@ -3102,12 +3048,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: recentf-ext    ;;
    -;;                         ;;
    -;; GROUP: Files -> Recentf ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'recentf-ext)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: recentf-ext    ;;
    +;;                         ;;
    +;; GROUP: Files -> Recentf ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'recentf-ext)
     
    @@ -3121,9 +3067,9 @@

    Packa

    -
    -

    Package: ztree

    -
    +
    +

    4.8.3 Package: ztree

    +

    Author: Alexey Veretennikov, alexey.veretennikov@gmail.com

    @@ -3144,7 +3090,8 @@

    Packa
    • ztree-diff: Perform diff on two directories. Really handy when you -want to create a big patch between two directories.
    • +want to create a big patch between two directories. +
    @@ -3154,7 +3101,8 @@

    Packa

      -
    • ztree-dir: a simple tree explorer.
    • +
    • ztree-dir: a simple tree explorer. +
    @@ -3175,15 +3123,15 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: ztree  ;;
    -;;                 ;;
    -;; GROUP: No group ;;
    -;;;;;;;;;;;;;;;;;;;;;
    -;; since ztree works with files and directories, let's consider it in
    -;; group Files
    -(require 'ztree-diff)
    -(require 'ztree-dir)
    +
    ;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: ztree  ;;
    +;;                 ;;
    +;; GROUP: No group ;;
    +;;;;;;;;;;;;;;;;;;;;;
    +;; since ztree works with files and directories, let's consider it in
    +;; group Files
    +(require 'ztree-diff)
    +(require 'ztree-dir)
     
    @@ -3201,17 +3149,20 @@

    Packa

      -
    • Open/close directories with double-click, RET or Space keys.
    • -
    • To jump to the parent directory, hit the Backspace key.
    • +
    • Open/close directories with double-click, RET or Space keys. +
    • +
    • To jump to the parent directory, hit the Backspace key. +
    • To toggle open/closed state of the subtree of the current directory, -hit the x key.
    • +hit the x key. +

    -
    -

    Package: vlf

    -
    +
    +

    4.8.4 Package: vlf

    +

    Author: Andrey Kotlarski, m00naticus@gmail.com

    @@ -3240,21 +3191,33 @@

    Packa
    • regular expression search on whole file (in constant memory -determined by current batch size)
    • +determined by current batch size) +
    • chunk editing (if size has changed, saving is done in constant -memory determined by current batch size)
    • -
    • Occur like indexing
    • -
    • options to jump to beginning, end or arbitrary file chunk
    • -
    • ability to jump/insert given number of batches at once
    • +memory determined by current batch size) + +
    • Occur like indexing +
    • +
    • options to jump to beginning, end or arbitrary file chunk +
    • +
    • ability to jump/insert given number of batches at once +
    • newly added content is acknowledged if file has changed size -meanwhile
    • -
    • automatic scrolling of batches
    • +meanwhile + +
    • automatic scrolling of batches +
    • as a minor mode, font locking and functionality of the respective -major mode is also present
    • -
    • by batch Ediff comparison
    • -
    • can be added as option to automatically open large files
    • -
    • smooth integration with hexl-mode
    • -
    • works with TRAMP so accessing network files is fine
    • +major mode is also present + +
    • by batch Ediff comparison +
    • +
    • can be added as option to automatically open large files +
    • +
    • smooth integration with hexl-mode +
    • +
    • works with TRAMP so accessing network files is fine +

    @@ -3273,14 +3236,14 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: vlf        ;;
    -;;                     ;;
    -;; GROUP: Files -> Vlf ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'vlf-integrate)
    -(setq vlf-application 'dont-ask) ;; automatically use vlf on large file,
    -                                 ;; when the file exceed large-file-warning-threshold
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: vlf        ;;
    +;;                     ;;
    +;; GROUP: Files -> Vlf ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'vlf-integrate)
    +(setq vlf-application 'dont-ask) ;; automatically use vlf on large file,
    +                                 ;; when the file exceed large-file-warning-threshold
     
    @@ -3295,9 +3258,9 @@

    Packa

    -
    -

    setup-text.el

    -
    +
    +

    4.9 setup-text.el

    +

    I only use default configuration for "Text" group. You can customize it if you want or leave this file blank, so you can add customizations @@ -3307,15 +3270,15 @@

    setup
    -
    (provide 'setup-text)
    +
    (provide 'setup-text)
     

    -
    -

    setup-data.el

    -
    +
    +

    4.10 setup-data.el

    +

    Remember to include the line (provide 'setup-data), otherwise Emacs won't be able to load your module. Sample configuration: @@ -3323,23 +3286,23 @@

    setup
    -
    (provide 'setup-data)
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Data -> Saveplace ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +
    (provide 'setup-data)
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Data -> Saveplace ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     
    -;; saveplace remembers your location in a file when saving files
    -(require 'saveplace)
    -(setq-default save-place t)
    -;; use (toggle-save-place-globally 1) in Emacs above 24.4
    +;; saveplace remembers your location in a file when saving files
    +(require 'saveplace)
    +(setq-default save-place t)
    +;; use (toggle-save-place-globally 1) in Emacs above 24.4
     

    -
    -

    setup-external.el

    -
    +
    +

    4.11 setup-external.el

    +

    Remember to include the line (provide 'setup-external), otherwise Emacs won't be able to load your module. Sample configuration: @@ -3347,95 +3310,95 @@

    setup
    -
    (provide 'setup-external)
    -
    -;; GROUP: Processes -> Flyspell
    -(if (executable-find "aspell")
    -    (progn
    -      (setq ispell-program-name "aspell")
    -      (setq ispell-extra-args '("--sug-mode=ultra")))
    -  (setq ispell-program-name "ispell"))
    -
    -(add-hook 'text-mode-hook 'flyspell-mode)
    -(add-hook 'org-mode-hook 'flyspell-mode)
    -(add-hook 'prog-mode-hook 'flyspell-prog-mode)
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Processes -> Gud            ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(setq gud-chdir-before-run nil)
    -
    -;; term-mode, used in M-x term
    -(defun my-term-setup ()
    -  (interactive)
    -  (define-key term-raw-map (kbd "C-y") 'term-send-raw)
    -  (define-key term-raw-map (kbd "C-p") 'term-send-raw)
    -  (define-key term-raw-map (kbd "C-n") 'term-send-raw)
    -  (define-key term-raw-map (kbd "C-s") 'term-send-raw)
    -  (define-key term-raw-map (kbd "C-r") 'term-send-raw)
    -  (define-key term-raw-map (kbd "M-w") 'kill-ring-save)
    -  (define-key term-raw-map (kbd "M-y") 'helm-show-kill-ring)
    -  (define-key term-raw-map (kbd "M-d") (lambda () (interactive) (term-send-raw-string "\ed")))
    -  (define-key term-raw-map (kbd "<C-backspace>") (lambda () (interactive) (term-send-raw-string "\e\C-?")))
    -  (define-key term-raw-map (kbd "M-p") (lambda () (interactive) (term-send-raw-string "\ep")))
    -  (define-key term-raw-map (kbd "M-n") (lambda () (interactive) (term-send-raw-string "\en")))
    -  (define-key term-raw-map (kbd "M-,") 'term-send-input)
    -  (define-key term-raw-map (kbd "C-c y") 'term-paste)
    -  (define-key term-raw-map (kbd "C-S-y") 'term-paste)
    -  (define-key term-raw-map (kbd "C-h") nil) ; unbind C-h
    -  (define-key term-raw-map (kbd "M-x") nil) ; unbind M-x
    -  (define-key term-raw-map (kbd "C-c C-b") 'helm-mini)
    -  (define-key term-raw-map (kbd "C-1") 'zygospore-toggle-delete-other-windows)
    -  (define-key term-raw-map (kbd "C-2") 'split-window-below)
    -  (define-key term-raw-map (kbd "C-3") 'split-window-right)
    -  (define-key term-mode-map (kbd "C-0") 'delete-window))
    -(add-hook 'term-mode-hook 'my-term-setup t)
    -(setq term-buffer-maximum-size 0)
    -
    -(require 'term)
    -
    -;; taken from here: http://www.enigmacurry.com/2008/12/26/emacs-ansi-term-tricks/
    -(defun visit-ansi-term ()
    -  "If the current buffer is:
    -     1) a running ansi-term named *ansi-term*, rename it.
    -     2) a stopped ansi-term, kill it and create a new one.
    -     3) a non ansi-term, go to an already running ansi-term
    -        or start a new one while killing a defunt one"
    -  (interactive)
    -  (let ((is-term (string= "term-mode" major-mode))
    -        (is-running (term-check-proc (buffer-name)))
    -        (term-cmd "/bin/zsh")
    -        (anon-term (get-buffer "*ansi-term*")))
    -    (if is-term
    -        (if is-running
    -            (if (string= "*ansi-term*" (buffer-name))
    -                ;; (call-interactively 'rename-buffer)
    -                (ansi-term term-cmd)
    -              (if anon-term
    -                  (switch-to-buffer "*ansi-term*")
    -                (ansi-term term-cmd)))
    -          (kill-buffer (buffer-name))
    -          (ansi-term term-cmd))
    -      (if anon-term
    -          (if (term-check-proc "*ansi-term*")
    -              (switch-to-buffer "*ansi-term*")
    -            (kill-buffer "*ansi-term*")
    -            (ansi-term term-cmd))
    -        (ansi-term term-cmd)))))
    -
    -(global-set-key (kbd "<f2>") 'visit-ansi-term)
    -
    -;; PACKAGE: shell-pop
    -;; GROUP: Processes -> Shell -> Shell Pop
    -(require 'shell-pop)
    -(global-set-key (kbd "C-c t") 'shell-pop)
    +
    (provide 'setup-external)
    +
    +;; GROUP: Processes -> Flyspell
    +(if (executable-find "aspell")
    +    (progn
    +      (setq ispell-program-name "aspell")
    +      (setq ispell-extra-args '("--sug-mode=ultra")))
    +  (setq ispell-program-name "ispell"))
    +
    +(add-hook 'text-mode-hook 'flyspell-mode)
    +(add-hook 'org-mode-hook 'flyspell-mode)
    +(add-hook 'prog-mode-hook 'flyspell-prog-mode)
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Processes -> Gud            ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(setq gud-chdir-before-run nil)
    +
    +;; term-mode, used in M-x term
    +(defun my-term-setup ()
    +  (interactive)
    +  (define-key term-raw-map (kbd "C-y") 'term-send-raw)
    +  (define-key term-raw-map (kbd "C-p") 'term-send-raw)
    +  (define-key term-raw-map (kbd "C-n") 'term-send-raw)
    +  (define-key term-raw-map (kbd "C-s") 'term-send-raw)
    +  (define-key term-raw-map (kbd "C-r") 'term-send-raw)
    +  (define-key term-raw-map (kbd "M-w") 'kill-ring-save)
    +  (define-key term-raw-map (kbd "M-y") 'helm-show-kill-ring)
    +  (define-key term-raw-map (kbd "M-d") (lambda () (interactive) (term-send-raw-string "\ed")))
    +  (define-key term-raw-map (kbd "<C-backspace>") (lambda () (interactive) (term-send-raw-string "\e\C-?")))
    +  (define-key term-raw-map (kbd "M-p") (lambda () (interactive) (term-send-raw-string "\ep")))
    +  (define-key term-raw-map (kbd "M-n") (lambda () (interactive) (term-send-raw-string "\en")))
    +  (define-key term-raw-map (kbd "M-,") 'term-send-input)
    +  (define-key term-raw-map (kbd "C-c y") 'term-paste)
    +  (define-key term-raw-map (kbd "C-S-y") 'term-paste)
    +  (define-key term-raw-map (kbd "C-h") nil) ; unbind C-h
    +  (define-key term-raw-map (kbd "M-x") nil) ; unbind M-x
    +  (define-key term-raw-map (kbd "C-c C-b") 'helm-mini)
    +  (define-key term-raw-map (kbd "C-1") 'zygospore-toggle-delete-other-windows)
    +  (define-key term-raw-map (kbd "C-2") 'split-window-below)
    +  (define-key term-raw-map (kbd "C-3") 'split-window-right)
    +  (define-key term-mode-map (kbd "C-0") 'delete-window))
    +(add-hook 'term-mode-hook 'my-term-setup t)
    +(setq term-buffer-maximum-size 0)
    +
    +(require 'term)
    +
    +;; taken from here: http://www.enigmacurry.com/2008/12/26/emacs-ansi-term-tricks/
    +(defun visit-ansi-term ()
    +  "If the current buffer is:
    +     1) a running ansi-term named *ansi-term*, rename it.
    +     2) a stopped ansi-term, kill it and create a new one.
    +     3) a non ansi-term, go to an already running ansi-term
    +        or start a new one while killing a defunt one"
    +  (interactive)
    +  (let ((is-term (string= "term-mode" major-mode))
    +        (is-running (term-check-proc (buffer-name)))
    +        (term-cmd "/bin/zsh")
    +        (anon-term (get-buffer "*ansi-term*")))
    +    (if is-term
    +        (if is-running
    +            (if (string= "*ansi-term*" (buffer-name))
    +                ;; (call-interactively 'rename-buffer)
    +                (ansi-term term-cmd)
    +              (if anon-term
    +                  (switch-to-buffer "*ansi-term*")
    +                (ansi-term term-cmd)))
    +          (kill-buffer (buffer-name))
    +          (ansi-term term-cmd))
    +      (if anon-term
    +          (if (term-check-proc "*ansi-term*")
    +              (switch-to-buffer "*ansi-term*")
    +            (kill-buffer "*ansi-term*")
    +            (ansi-term term-cmd))
    +        (ansi-term term-cmd)))))
    +
    +(global-set-key (kbd "<f2>") 'visit-ansi-term)
    +
    +;; PACKAGE: shell-pop
    +;; GROUP: Processes -> Shell -> Shell Pop
    +(require 'shell-pop)
    +(global-set-key (kbd "C-c t") 'shell-pop)
     

    -
    -

    setup-communication.el

    -
    +
    +

    4.12 setup-communication.el

    +

    This group allows to customize communications, networking, and remote access to files. For example, ftp, ldap, dig, whois, netstat… I only @@ -3445,90 +3408,90 @@

    setup
    -
    (provide 'setup-communication)
    +
    (provide 'setup-communication)
     
    -;; go-to-address-mode
    -(add-hook 'prog-mode-hook 'goto-address-mode)
    -(add-hook 'text-mode-hook 'goto-address-mode)
    +;; go-to-address-mode
    +(add-hook 'prog-mode-hook 'goto-address-mode)
    +(add-hook 'text-mode-hook 'goto-address-mode)
     

    -
    -

    setup-programming.el

    -
    +
    +

    4.13 setup-programming.el

    +

    Remember to include the line (provide 'setup-programming), otherwise -Emacs won't be able to load your module. Sample configuration: +Emacs won't be able to load your module. Sample configuration:

    -
    (provide 'setup-programming)
    -;; GROUP: Programming -> Languages -> C
    -
    -;; Available C style:
    -;; “gnu”: The default style for GNU projects
    -;; “k&r”: What Kernighan and Ritchie, the authors of C used in their book
    -;; “bsd”: What BSD developers use, aka “Allman style” after Eric Allman.
    -;; “whitesmith”: Popularized by the examples that came with Whitesmiths C, an early commercial C compiler.
    -;; “stroustrup”: What Stroustrup, the author of C++ used in his book
    -;; “ellemtel”: Popular C++ coding standards as defined by “Programming in C++, Rules and Recommendations,” Erik Nyquist and Mats Henricson, Ellemtel
    -;; “linux”: What the Linux developers use for kernel development
    -;; “python”: What Python developers use for extension modules
    -;; “java”: The default style for java-mode (see below)
    -;; “user”: When you want to define your own style
    -(setq c-default-style "linux" ; set style to "linux"
    -      c-basic-offset 4)
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Programming -> Tools -> Gdb ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(setq gdb-many-windows t        ; use gdb-many-windows by default
    -      gdb-show-main t)          ; Non-nil means display source file containing the main routine at startup
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Programming -> Tools -> Compilation ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Compilation from Emacs
    -(defun prelude-colorize-compilation-buffer ()
    -  "Colorize a compilation mode buffer."
    -  (interactive)
    -  ;; we don't want to mess with child modes such as grep-mode, ack, ag, etc
    -  (when (eq major-mode 'compilation-mode)
    -    (let ((inhibit-read-only t))
    -      (ansi-color-apply-on-region (point-min) (point-max)))))
    -
    -;; setup compilation-mode used by `compile' command
    -(require 'compile)
    -(setq compilation-ask-about-save nil          ; Just save before compiling
    -      compilation-always-kill t               ; Just kill old compile processes before starting the new one
    -      compilation-scroll-output 'first-error) ; Automatically scroll to first
    -(global-set-key (kbd "<f5>") 'compile)
    -
    -;; GROUP: Programming -> Tools -> Makefile
    -;; takenn from prelude-c.el:48: https://github.com/bbatsov/prelude/blob/master/modules/prelude-c.el
    -(defun prelude-makefile-mode-defaults ()
    -  (whitespace-toggle-options '(tabs))
    -  (setq indent-tabs-mode t))
    -
    -(setq prelude-makefile-mode-hook 'prelude-makefile-mode-defaults)
    -
    -(add-hook 'makefile-mode-hook (lambda ()
    -                                (run-hooks 'prelude-makefile-mode-hook)))
    -
    -;; GROUP: Programming -> Tools -> Ediff
    -(setq ediff-diff-options "-w"
    +
    (provide 'setup-programming)
    +;; GROUP: Programming -> Languages -> C
    +
    +;; Available C style:
    +;; “gnu”: The default style for GNU projects
    +;; “k&r”: What Kernighan and Ritchie, the authors of C used in their book
    +;; “bsd”: What BSD developers use, aka “Allman style” after Eric Allman.
    +;; “whitesmith”: Popularized by the examples that came with Whitesmiths C, an early commercial C compiler.
    +;; “stroustrup”: What Stroustrup, the author of C++ used in his book
    +;; “ellemtel”: Popular C++ coding standards as defined by “Programming in C++, Rules and Recommendations,” Erik Nyquist and Mats Henricson, Ellemtel
    +;; “linux”: What the Linux developers use for kernel development
    +;; “python”: What Python developers use for extension modules
    +;; “java”: The default style for java-mode (see below)
    +;; “user”: When you want to define your own style
    +(setq c-default-style "linux" ; set style to "linux"
    +      c-basic-offset 4)
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Programming -> Tools -> Gdb ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(setq gdb-many-windows t        ; use gdb-many-windows by default
    +      gdb-show-main t)          ; Non-nil means display source file containing the main routine at startup
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Programming -> Tools -> Compilation ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Compilation from Emacs
    +(defun prelude-colorize-compilation-buffer ()
    +  "Colorize a compilation mode buffer."
    +  (interactive)
    +  ;; we don't want to mess with child modes such as grep-mode, ack, ag, etc
    +  (when (eq major-mode 'compilation-mode)
    +    (let ((inhibit-read-only t))
    +      (ansi-color-apply-on-region (point-min) (point-max)))))
    +
    +;; setup compilation-mode used by `compile' command
    +(require 'compile)
    +(setq compilation-ask-about-save nil          ; Just save before compiling
    +      compilation-always-kill t               ; Just kill old compile processes before starting the new one
    +      compilation-scroll-output 'first-error) ; Automatically scroll to first
    +(global-set-key (kbd "<f5>") 'compile)
    +
    +;; GROUP: Programming -> Tools -> Makefile
    +;; takenn from prelude-c.el:48: https://github.com/bbatsov/prelude/blob/master/modules/prelude-c.el
    +(defun prelude-makefile-mode-defaults ()
    +  (whitespace-toggle-options '(tabs))
    +  (setq indent-tabs-mode t))
    +
    +(setq prelude-makefile-mode-hook 'prelude-makefile-mode-defaults)
    +
    +(add-hook 'makefile-mode-hook (lambda ()
    +                                (run-hooks 'prelude-makefile-mode-hook)))
    +
    +;; GROUP: Programming -> Tools -> Ediff
    +(setq ediff-diff-options "-w"
           ediff-split-window-function 'split-window-horizontally
    -      ediff-window-setup-function 'ediff-setup-windows-plain)
    +      ediff-window-setup-function 'ediff-setup-windows-plain)
     
    -
    -

    Package: diff-hl

    -
    +
    +

    4.13.1 Package: diff-hl

    +

    Author: Dmitry Gutov, dgutov@yandex.ru

    @@ -3538,7 +3501,7 @@

    Packa

    -Features: +Features:

    @@ -3567,28 +3530,27 @@

    Packa

      -
    • -diff-hl-dired-mode provides similar functionality in Dired. -

      +
    • diff-hl-dired-mode provides similar functionality in Dired.

      diff-hl-dired.png

      -
    • +

    + -
  • -diff-hl-margin-mode changes the highlighting function to use the +

  • diff-hl-margin-mode changes the highlighting function to use the margin instead of the fringe. -

    diff-hl-margin.png

    -
  • +
    + -
  • diff-hl-amend-mode shifts the reference revision back by one.
  • +
  • diff-hl-amend-mode shifts the reference revision back by one. +
  • @@ -3603,18 +3565,18 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: diff-hl                             ;;
    -;;                                              ;;
    -;; GROUP: Programming -> Tools -> Vc -> Diff Hl ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(global-diff-hl-mode)
    -(add-hook 'dired-mode-hook 'diff-hl-dired-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: diff-hl                             ;;
    +;;                                              ;;
    +;; GROUP: Programming -> Tools -> Vc -> Diff Hl ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(global-diff-hl-mode)
    +(add-hook 'dired-mode-hook 'diff-hl-dired-mode)
     

    -Usage: +Usage:

    @@ -3629,11 +3591,11 @@

    Packa

    -
    -

    Package: magit

    -
    +
    +

    4.13.2 Package: magit

    +

    -Author: +Author:

    @@ -3648,11 +3610,16 @@

    Packa Former-Maintainers:

      -
    • Nicolas Dudebout, nicolas.dudebout@gatech.edu
    • -
    • Peter J. Weisberg, pj@irregularexpressions.net
    • -
    • Phil Jackson, phil@shellarchive.co.uk
    • -
    • Rémi Vanicat, vanicat@debian.org
    • -
    • Yann Hodique, yann.hodique@gmail.com
    • +
    • Nicolas Dudebout, nicolas.dudebout@gatech.edu +
    • +
    • Peter J. Weisberg, pj@irregularexpressions.net +
    • +
    • Phil Jackson, phil@shellarchive.co.uk +
    • +
    • Rémi Vanicat, vanicat@debian.org +
    • +
    • Yann Hodique, yann.hodique@gmail.com +

    @@ -3691,30 +3658,30 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: magit                       ;;
    -;;                                      ;;
    -;; GROUP: Programming -> Tools -> Magit ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'magit)
    -(set-default 'magit-stage-all-confirm nil)
    -(add-hook 'magit-mode-hook 'magit-load-config-extensions)
    -
    -;; full screen magit-status
    -(defadvice magit-status (around magit-fullscreen activate)
    -  (window-configuration-to-register :magit-fullscreen)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: magit                       ;;
    +;;                                      ;;
    +;; GROUP: Programming -> Tools -> Magit ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'magit)
    +(set-default 'magit-stage-all-confirm nil)
    +(add-hook 'magit-mode-hook 'magit-load-config-extensions)
    +
    +;; full screen magit-status
    +(defadvice magit-status (around magit-fullscreen activate)
    +  (window-configuration-to-register :magit-fullscreen)
       ad-do-it
    -  (delete-other-windows))
    -
    -(global-unset-key (kbd "C-x g"))
    -(global-set-key (kbd "C-x g h") 'magit-log)
    -(global-set-key (kbd "C-x g f") 'magit-file-log)
    -(global-set-key (kbd "C-x g b") 'magit-blame-mode)
    -(global-set-key (kbd "C-x g m") 'magit-branch-manager)
    -(global-set-key (kbd "C-x g c") 'magit-branch)
    -(global-set-key (kbd "C-x g s") 'magit-status)
    -(global-set-key (kbd "C-x g r") 'magit-reflog)
    -(global-set-key (kbd "C-x g t") 'magit-tag)
    +  (delete-other-windows))
    +
    +(global-unset-key (kbd "C-x g"))
    +(global-set-key (kbd "C-x g h") 'magit-log)
    +(global-set-key (kbd "C-x g f") 'magit-file-log)
    +(global-set-key (kbd "C-x g b") 'magit-blame-mode)
    +(global-set-key (kbd "C-x g m") 'magit-branch-manager)
    +(global-set-key (kbd "C-x g c") 'magit-branch)
    +(global-set-key (kbd "C-x g s") 'magit-status)
    +(global-set-key (kbd "C-x g r") 'magit-reflog)
    +(global-set-key (kbd "C-x g t") 'magit-tag)
     
    @@ -3727,12 +3694,16 @@

    Packa

      -
    • M-x magit-status to see git status, and in the status buffer:
    • -
    • s to stage files
    • +
    • M-x magit-status to see git status, and in the status buffer: +
    • +
    • s to stage files +
    • c c to commit, type in your commit message then C-c C-c to save the message and commit, C-c C-k to abort current commit message -and go back magit-status.
    • -
    • b b to switch to a branch.
    • +and go back magit-status. + +
    • b b to switch to a branch. +

    @@ -3740,9 +3711,12 @@

    Packa

      -
    • P P to do a git push
    • -
    • F F to do a git pull
    • -
    • try to press TAB on entries.
    • +
    • P P to do a git push +
    • +
    • F F to do a git pull +
    • +
    • try to press TAB on entries. +

    @@ -3756,9 +3730,9 @@

    Packa

    -
    -

    Package: flycheck

    -
    +
    +

    4.13.3 Package: flycheck

    +

    Author: Sebastian Wiesner, swiesner@lunaryorn.com

    @@ -3772,15 +3746,24 @@

    Packa

      -
    • Supports over 30 programming and markup languages with more than 60 different syntax checking tools
    • -
    • Fully automatic, fail-safe, on-the-fly syntax checking in background
    • -
    • Nice error indication and highlighting
    • -
    • Optional error list popup
    • -
    • Many customization options
    • -
    • A comprehensive manual
    • -
    • A simple interface to define new syntax checkers
    • -
    • A “doesn't get in your way” guarantee
    • -
    • Many 3rd party extensions
    • +
    • Supports over 30 programming and markup languages with more than 60 different syntax checking tools +
    • +
    • Fully automatic, fail-safe, on-the-fly syntax checking in background +
    • +
    • Nice error indication and highlighting +
    • +
    • Optional error list popup +
    • +
    • Many customization options +
    • +
    • A comprehensive manual +
    • +
    • A simple interface to define new syntax checkers +
    • +
    • A “doesn't get in your way” guarantee +
    • +
    • Many 3rd party extensions +

    @@ -3795,18 +3778,18 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: flycheck                       ;;
    -;;                                         ;;
    -;; GROUP: Programming -> Tools -> Flycheck ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'flycheck)
    -(add-hook 'after-init-hook #'global-flycheck-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: flycheck                       ;;
    +;;                                         ;;
    +;; GROUP: Programming -> Tools -> Flycheck ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'flycheck)
    +(add-hook 'after-init-hook #'global-flycheck-mode)
     

    -Usage: +Usage:

    @@ -3817,9 +3800,9 @@

    Packa

    -
    -

    Package: flycheck-tip

    -
    +
    +

    4.13.4 Package: flycheck-tip

    +

    Author: Yuta Yamada, cokesboy@gmail.com

    @@ -3845,13 +3828,13 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: flycheck-tip                                      ;;
    -;;                                                            ;;
    -;; GROUP: Flycheck Tip, but just consider it part of Flycheck ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'flycheck-tip)
    -(flycheck-tip-use-timer 'verbose)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: flycheck-tip                                      ;;
    +;;                                                            ;;
    +;; GROUP: Flycheck Tip, but just consider it part of Flycheck ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'flycheck-tip)
    +(flycheck-tip-use-timer 'verbose)
     
    @@ -3868,9 +3851,9 @@

    Packa

    -
    -

    setup-applications.el

    -
    +
    +

    4.14 setup-applications.el

    +

    Remember to include the line (provide 'setup-applications), otherwise Emacs won't be able to load your module.Sample configuration: @@ -3878,48 +3861,48 @@

    setup
    -
    (provide 'setup-applications)
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Applications-> Eshell       ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'eshell)
    -(require 'em-alias)
    -(require 'cl)
    -
    -;; Advise find-file-other-window to accept more than one file
    -(defadvice find-file-other-window (around find-files activate)
    -  "Also find all files within a list of files. This even works recursively."
    -  (if (listp filename)
    -      (loop for f in filename do (find-file-other-window f wildcards))
    -    ad-do-it))
    -
    -;; In Eshell, you can run the commands in M-x
    -;; Here are the aliases to the commands.
    -;; $* means accepts all arguments.
    -(eshell/alias "o" "")
    -(eshell/alias "o" "find-file-other-window $*")
    -(eshell/alias "vi" "find-file-other-window $*")
    -(eshell/alias "vim" "find-file-other-window $*")
    -(eshell/alias "emacs" "find-file-other-windpow $*")
    -(eshell/alias "em" "find-file-other-window $*")
    -
    -(add-hook
    +
    (provide 'setup-applications)
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Applications-> Eshell       ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'eshell)
    +(require 'em-alias)
    +(require 'cl)
    +
    +;; Advise find-file-other-window to accept more than one file
    +(defadvice find-file-other-window (around find-files activate)
    +  "Also find all files within a list of files. This even works recursively."
    +  (if (listp filename)
    +      (loop for f in filename do (find-file-other-window f wildcards))
    +    ad-do-it))
    +
    +;; In Eshell, you can run the commands in M-x
    +;; Here are the aliases to the commands.
    +;; $* means accepts all arguments.
    +(eshell/alias "o" "")
    +(eshell/alias "o" "find-file-other-window $*")
    +(eshell/alias "vi" "find-file-other-window $*")
    +(eshell/alias "vim" "find-file-other-window $*")
    +(eshell/alias "emacs" "find-file-other-windpow $*")
    +(eshell/alias "em" "find-file-other-window $*")
    +
    +(add-hook
      'eshell-mode-hook
    - (lambda ()
    -   (setq pcomplete-cycle-completions nil)))
    + (lambda ()
    +   (setq pcomplete-cycle-completions nil)))
     
    -;; change listing switches based on OS
    -(when (not (eq system-type 'windows-nt))
    -  (eshell/alias "ls" "ls --color -h --group-directories-first $*"))
    +;; change listing switches based on OS
    +(when (not (eq system-type 'windows-nt))
    +  (eshell/alias "ls" "ls --color -h --group-directories-first $*"))
     

    -
    -

    setup-development.el

    -
    +
    +

    4.15 setup-development.el

    +

    Remember to include the line (provide 'setup-development), otherwise Emacs won't be able to load your module. Sample configuration: @@ -3927,28 +3910,28 @@

    setup
    -
    (provide 'setup-development)
    +
    (provide 'setup-development)
     
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Development -> Extensions -> Eldoc  ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
    -(add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode)
    -(add-hook 'ielm-mode-hook 'turn-on-eldoc-mode)
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Development -> Extensions -> Eldoc  ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
    +(add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode)
    +(add-hook 'ielm-mode-hook 'turn-on-eldoc-mode)
     
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Development -> Internal     ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Start garbage collection every 100MB to improve Emacs performance
    -(setq gc-cons-threshold 100000000)
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Development -> Internal     ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Start garbage collection every 100MB to improve Emacs performance
    +(setq gc-cons-threshold 100000000)
     

    -
    -

    setup-environment.el

    -
    +
    +

    4.16 setup-environment.el

    +

    Remember to include the line (provide 'setup-environment), otherwise Emacs won't be able to load your module. Sample configuration: @@ -3956,44 +3939,45 @@

    setup
    -
    (provide 'setup-environment)
    +
    (provide 'setup-environment)
     
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Environment -> Initialization ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(setq
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Environment -> Initialization ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(setq
      inhibit-startup-screen t
    - )
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Environment -> Minibuffer   ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; (icomplete-mode)
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Environment -> Minibuffer -> Savehist ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; savehist saves minibuffer history by defaults
    -(setq savehist-additional-variables '(search ring regexp-search-ring) ; also save your regexp search queries
    -      savehist-autosave-interval 60     ; save every minute
    -      )
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Environment -> Windows -> Winner ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(winner-mode 1)
    -
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Environment -> Mode Line    ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(column-number-mode 1)
    + )
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Environment -> Minibuffer   ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; (icomplete-mode)
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Environment -> Minibuffer -> Savehist ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; savehist saves minibuffer history by defaults
    +(setq savehist-additional-variables '(search ring regexp-search-ring) ; also save your regexp search queries
    +      savehist-autosave-interval 60     ; save every minute
    +      )
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Environment -> Windows -> Winner ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(winner-mode 1)
    +
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Environment -> Mode Line    ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(column-number-mode 1)
     

    -
    -

    Package: nyan-mode

    -
    +
    +

    4.16.1 Package: nyan-mode

    +
    +

    Author: Jacek "TeMPOraL" Zlydach, temporal.pl@gmail.com

    @@ -4020,11 +4004,15 @@

    Packa
      -
    • Mind dumbing content included,
    • +
    • Mind dumbing content included, +
    • Experimental animation (M-x nyan-start-animation, M-x -nyan-stop-animation),
    • -
    • Wavy rainbow (M-x set-variable <ret> nyan-wavy-trail <ret> t),
    • -
    • Customizable properties.
    • +nyan-stop-animation), + +
    • Wavy rainbow (M-x set-variable <ret> nyan-wavy-trail <ret> t), +
    • +
    • Customizable properties. +

    @@ -4043,15 +4031,15 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: nyan-mode                    ;;
    -;;                                       ;;
    -;; GROUOP: Environment -> Frames -> Nyan ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; only turn on if a window system is available
    -;; this prevents error under terminal that does not support X
    -(case window-system
    -  ((x w32) (nyan-mode)))
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: nyan-mode                    ;;
    +;;                                       ;;
    +;; GROUOP: Environment -> Frames -> Nyan ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; only turn on if a window system is available
    +;; this prevents error under terminal that does not support X
    +(case window-system
    +  ((x w32) (nyan-mode)))
     
    @@ -4066,9 +4054,9 @@

    Packa

    -
    -

    Package: golden-ratio

    -
    +
    +

    4.16.2 Package: golden-ratio

    +

    Author: Roman Gonzalez, romanandreg@gmail.com

    @@ -4116,42 +4104,42 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: golden-ratio                         ;;
    -;;                                               ;;
    -;; GROUP: Environment -> Windows -> Golden Ratio ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'golden-ratio)
    -
    -(add-to-list 'golden-ratio-exclude-modes "ediff-mode")
    -(add-to-list 'golden-ratio-exclude-modes "helm-mode")
    -(add-to-list 'golden-ratio-exclude-modes "dired-mode")
    -(add-to-list 'golden-ratio-inhibit-functions 'pl/helm-alive-p)
    -
    -(defun pl/helm-alive-p ()
    -  (if (boundp 'helm-alive-p)
    -      (symbol-value 'helm-alive-p)))
    -
    -;; do not enable golden-raio in thses modes
    -(setq golden-ratio-exclude-modes '("ediff-mode"
    -                                   "gud-mode"
    -                                   "gdb-locals-mode"
    -                                   "gdb-registers-mode"
    -                                   "gdb-breakpoints-mode"
    -                                   "gdb-threads-mode"
    -                                   "gdb-frames-mode"
    -                                   "gdb-inferior-io-mode"
    -                                   "gud-mode"
    -                                   "gdb-inferior-io-mode"
    -                                   "gdb-disassembly-mode"
    -                                   "gdb-memory-mode"
    -                                   "magit-log-mode"
    -                                   "magit-reflog-mode"
    -                                   "magit-status-mode"
    -                                   "IELM"
    -                                   "eshell-mode" "dired-mode"))
    -
    -(golden-ratio-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: golden-ratio                         ;;
    +;;                                               ;;
    +;; GROUP: Environment -> Windows -> Golden Ratio ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'golden-ratio)
    +
    +(add-to-list 'golden-ratio-exclude-modes "ediff-mode")
    +(add-to-list 'golden-ratio-exclude-modes "helm-mode")
    +(add-to-list 'golden-ratio-exclude-modes "dired-mode")
    +(add-to-list 'golden-ratio-inhibit-functions 'pl/helm-alive-p)
    +
    +(defun pl/helm-alive-p ()
    +  (if (boundp 'helm-alive-p)
    +      (symbol-value 'helm-alive-p)))
    +
    +;; do not enable golden-raio in thses modes
    +(setq golden-ratio-exclude-modes '("ediff-mode"
    +                                   "gud-mode"
    +                                   "gdb-locals-mode"
    +                                   "gdb-registers-mode"
    +                                   "gdb-breakpoints-mode"
    +                                   "gdb-threads-mode"
    +                                   "gdb-frames-mode"
    +                                   "gdb-inferior-io-mode"
    +                                   "gud-mode"
    +                                   "gdb-inferior-io-mode"
    +                                   "gdb-disassembly-mode"
    +                                   "gdb-memory-mode"
    +                                   "magit-log-mode"
    +                                   "magit-reflog-mode"
    +                                   "magit-status-mode"
    +                                   "IELM"
    +                                   "eshell-mode" "dired-mode"))
    +
    +(golden-ratio-mode)
     
    @@ -4166,9 +4154,9 @@

    Packa

    -
    -

    setup-faces-and-ui.el

    -
    +
    +

    4.17 setup-faces-and-ui.el

    +

    Remember to include the line (provide 'setup-faces-and-ui), otherwise Emacs won't be able to load your module. Sample configuration: @@ -4176,45 +4164,45 @@

    setup
    -
    (provide 'setup-faces-and-ui)
    -
    -;; you won't need any of the bar thingies
    -;; turn it off to save screen estate
    -(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
    -(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
    -(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
    -
    -;; the blinking cursor is nothing, but an annoyance
    -(blink-cursor-mode -1)
    -
    -(setq scroll-margin 0
    -      scroll-conservatively 100000
    -      scroll-preserve-screen-position 1)
    -
    -(size-indication-mode t)
    -
    -;; more useful frame title, that show either a file or a
    -;; buffer name (if the buffer isn't visiting a file)
    -;; taken from prelude-ui.el
    -(setq frame-title-format
    -      '("" invocation-name " - " (:eval (if (buffer-file-name)
    -                                                    (abbreviate-file-name (buffer-file-name))
    -                                                  "%b"))))
    -
    -;; change font to Inconsolata for better looking text
    -;; remember to install the font Inconsolata first
    -(setq default-frame-alist '((font . "Inconsolata-11")))
    -;; set italic font for italic face, since Emacs does not set italic
    -;; face automatically
    -(set-face-attribute 'italic nil
    -                    :family "Inconsolata-Italic")
    +
    (provide 'setup-faces-and-ui)
    +
    +;; you won't need any of the bar thingies
    +;; turn it off to save screen estate
    +(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
    +(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
    +(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
    +
    +;; the blinking cursor is nothing, but an annoyance
    +(blink-cursor-mode -1)
    +
    +(setq scroll-margin 0
    +      scroll-conservatively 100000
    +      scroll-preserve-screen-position 1)
    +
    +(size-indication-mode t)
    +
    +;; more useful frame title, that show either a file or a
    +;; buffer name (if the buffer isn't visiting a file)
    +;; taken from prelude-ui.el
    +(setq frame-title-format
    +      '("" invocation-name " - " (:eval (if (buffer-file-name)
    +                                                    (abbreviate-file-name (buffer-file-name))
    +                                                  "%b"))))
    +
    +;; change font to Inconsolata for better looking text
    +;; remember to install the font Inconsolata first
    +(setq default-frame-alist '((font . "Inconsolata-11")))
    +;; set italic font for italic face, since Emacs does not set italic
    +;; face automatically
    +(set-face-attribute 'italic nil
    +                    :family "Inconsolata-Italic")
     

    -
    -

    Package: highlight-numbers

    -
    +
    +

    4.17.1 Package: highlight-numbers

    +

    Author: Fanael Linithien, fanael4@gmail.com

    @@ -4244,17 +4232,17 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: highlight-numbers         ;;
    -;;                                    ;;
    -;; GROUP: Faces -> Number Font Lock   ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(add-hook 'prog-mode-hook 'highlight-numbers-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: highlight-numbers         ;;
    +;;                                    ;;
    +;; GROUP: Faces -> Number Font Lock   ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(add-hook 'prog-mode-hook 'highlight-numbers-mode)
     

    -Usage: +Usage:

    @@ -4263,9 +4251,9 @@

    Packa

    -
    -

    Package: highlight-symbol

    -
    +
    +

    4.17.2 Package: highlight-symbol

    +

    Author: Nikolaj Schumacher, me@nschum.de

    @@ -4294,24 +4282,24 @@

    Packa
    -
    (require 'highlight-symbol)
    +
    (require 'highlight-symbol)
     
    -(highlight-symbol-nav-mode)
    +(highlight-symbol-nav-mode)
     
    -(add-hook 'prog-mode-hook (lambda () (highlight-symbol-mode)))
    -(add-hook 'org-mode-hook (lambda () (highlight-symbol-mode)))
    +(add-hook 'prog-mode-hook (lambda () (highlight-symbol-mode)))
    +(add-hook 'org-mode-hook (lambda () (highlight-symbol-mode)))
     
    -(setq highlight-symbol-idle-delay 0.2
    -      highlight-symbol-on-navigation-p t)
    +(setq highlight-symbol-idle-delay 0.2
    +      highlight-symbol-on-navigation-p t)
     
    -(global-set-key [(control shift mouse-1)]
    -                (lambda (event)
    -                  (interactive "e")
    -                  (goto-char (posn-point (event-start event)))
    -                  (highlight-symbol-at-point)))
    +(global-set-key [(control shift mouse-1)]
    +                (lambda (event)
    +                  (interactive "e")
    +                  (goto-char (posn-point (event-start event)))
    +                  (highlight-symbol-at-point)))
     
    -(global-set-key (kbd "M-n") 'highlight-symbol-next)
    -(global-set-key (kbd "M-p") 'highlight-symbol-prev)
    +(global-set-key (kbd "M-n") 'highlight-symbol-next)
    +(global-set-key (kbd "M-p") 'highlight-symbol-prev)
     
    @@ -4326,9 +4314,9 @@

    Packa

    -
    -

    Change Emacs appearance by using color theme

    -
    +
    +

    4.17.3 Change Emacs appearance by using color theme

    +

    Emacs has many color themes available for you to use. My personal one is color-theme-sanityinc-tomorrow or grandshell-theme or @@ -4339,9 +4327,9 @@

    Chang

    -
    -

    setup-help.el

    -
    +
    +

    4.18 setup-help.el

    +

    Remember to include the line (provide 'setup-help), otherwise Emacs won't be able to load your module. @@ -4349,14 +4337,14 @@

    setup
    -
    (provide 'setup-help)
    +
    (provide 'setup-help)
     

    -
    -

    Package: info+

    -
    +
    +

    4.18.1 Package: info+

    +

    Author: Drew Adams, drew.adams@oracle.com

    @@ -4383,18 +4371,18 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; GROUP: Help -> Info+               ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'info+)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; GROUP: Help -> Info+               ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'info+)
     

    -
    -

    Package: discover-my-major

    -
    +
    +

    4.18.2 Package: discover-my-major

    +

    Author: steckerhalter

    @@ -4429,9 +4417,9 @@

    Packa
    -
    ;; A quick major mode help with discover-my-major
    -(global-unset-key (kbd "C-h h"))        ; original "C-h h" displays "hello world" in different languages
    -(define-key 'help-command (kbd "h m") 'discover-my-major)
    +
    ;; A quick major mode help with discover-my-major
    +(global-unset-key (kbd "C-h h"))        ; original "C-h h" displays "hello world" in different languages
    +(define-key 'help-command (kbd "h m") 'discover-my-major)
     
    @@ -4448,9 +4436,9 @@

    Packa

    -
    -

    Package: rainbow-mode

    -
    +
    +

    4.18.3 Package: rainbow-mode

    +

    Author: Julien Danjou, julien@danjou.info

    @@ -4483,13 +4471,13 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: rainbow-mode              ;;
    -;;                                    ;;
    -;; GROUP: Help -> Rainbow             ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(add-hook 'html-mode-hook 'rainbow-mode)
    -(add-hook 'css-mode-hook 'rainbow-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: rainbow-mode              ;;
    +;;                                    ;;
    +;; GROUP: Help -> Rainbow             ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(add-hook 'html-mode-hook 'rainbow-mode)
    +(add-hook 'css-mode-hook 'rainbow-mode)
     
    @@ -4510,9 +4498,9 @@

    Packa

    -
    -

    Package: help+

    -
    +
    +

    4.18.4 Package: help+

    +

    Author: Drew Adams, drew.adams@oracle.com

    @@ -4526,7 +4514,7 @@

    Packa

    -Extensions to `help.el' for Emacs +Extensions to `help.el' for Emacs

    @@ -4541,12 +4529,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: help+                     ;;
    -;;                                    ;;
    -;; GROUP: Help                        ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'help+)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: help+                     ;;
    +;;                                    ;;
    +;; GROUP: Help                        ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'help+)
     
    @@ -4572,9 +4560,9 @@

    Packa

    -
    -

    Package: help-fns+

    -
    +
    +

    4.18.5 Package: help-fns+

    +

    Author: Drew Adams, drew.adams@oracle.com

    @@ -4603,12 +4591,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: help-fns+                 ;;
    -;;                                    ;;
    -;; GROUP: Help                        ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'help-fns+)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: help-fns+                 ;;
    +;;                                    ;;
    +;; GROUP: Help                        ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'help-fns+)
     
    @@ -4624,77 +4612,77 @@

    Packa - + - + -Keys -Bindings +Keys +Bindings -C-h B -describe-buffer +C-h B +describe-buffer -C-h c -describe-command (replaces describe-key-briefly) +C-h c +describe-command (replaces describe-key-briefly) -C-h o -describe-option +C-h o +describe-option -C-h C-c -describe-key-briefly (replaces C-h c) +C-h C-c +describe-key-briefly (replaces C-h c) -C-h C-o -describe-option-of-type +C-h C-o +describe-option-of-type -C-h M-c -describe-copying (replaces C-h C-c) +C-h M-c +describe-copying (replaces C-h C-c) -C-h M-f -describe-file +C-h M-f +describe-file -C-h M-k -describe-keymap +C-h M-k +describe-keymap -C-h M-l -find-function-on-key +C-h M-l +find-function-on-key

    -
    -

    Package: help-mode+

    -
    +
    +

    4.18.6 Package: help-mode+

    +

    Author: Drew Adams, drew.adams@oracle.com

    @@ -4714,7 +4702,7 @@

    Packa

    Links to libraries are provided whenever library names appear in buffer ‘*Help*’. After loading help-mode+.el, library names in buffer -Help have mouse-over links to the corresponding library code. +Help have mouse-over links to the corresponding library code.

    @@ -4727,11 +4715,13 @@

    Packa are not linked, unless a library (such as ‘grep’) happens to have the same name as an Emacs function or variable, in which case clicking the name displays the function or variable description in -buffer Help. +buffer Help. +
  • With help-mode+.el loaded, each library name in the ‘C-h v features’ list is linked to the library (code) itself. Click a name to -edit/view the library file.
  • +edit/view the library file. +

    @@ -4746,12 +4736,12 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; Package: help-mode+                ;;
    -;;                                    ;;
    -;; GROUP: Help                        ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'help-mode+)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; Package: help-mode+                ;;
    +;;                                    ;;
    +;; GROUP: Help                        ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'help-mode+)
     
    @@ -4767,9 +4757,9 @@

    Packa

    -
    -

    setup-local.el

    -
    +
    +

    4.19 setup-local.el

    +

    If you define your own Customization Group locally to your computer, your Customization Group should be added under Local @@ -4780,9 +4770,9 @@

    setup

    -
    -

    More Emacs Lisp resources

    -
    +
    +

    5 More Emacs Lisp resources

    +

    If you want to learn more about Emacs Lisp programming, GNU Emacs Lisp Manual is great to start real Lisp programming. @@ -4791,21 +4781,9 @@

    More

    - -
    - - - comments powered by Disqus +

    Created: 2016-12-05 Mon 12:21

    +

    Emacs 24.5.1 (Org mode 8.2.10)

    +

    Validate

    - \ No newline at end of file + diff --git a/docs/helm-intro.html b/docs/helm-intro.html index bcebbb9..2a8823f 100644 --- a/docs/helm-intro.html +++ b/docs/helm-intro.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - A Package in a league of its own: <code>Helm</code> + + - - + -
    - - - - -

    Back to Table of Contents

    -

    A Package in a league of its own: Helm

    Table of Contents

    @@ -209,12 +185,15 @@

    Table of Contents

    • Tamas Patrovic (original author), from 2007. At this time, Helm was -named Anything.
    • +named Anything. +
    • rubikitch rubikitch@ruby-lang.org, from 2008-2011. Helm was still -named Anything
    • +named Anything +
    • Thierry Volpiatto (current maintainer). thierry.volpiatto@gmail.com, from 2011-present. Anything was -renamed to Helm during this period.
    • +renamed to Helm during this period. +

    @@ -262,8 +241,8 @@

    Table of Contents

    -
    (require 'helm-config)
    -(helm-mode 1)
    +
    (require 'helm-config)
    +(helm-mode 1)
     
    @@ -273,54 +252,55 @@

    Table of Contents

    -
    (require 'helm)
    -(require 'helm-config)
    +
    (require 'helm)
    +(require 'helm-config)
     
    -;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
    -;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
    -;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
    -(global-set-key (kbd "C-c h") 'helm-command-prefix)
    -(global-unset-key (kbd "C-x c"))
    +;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
    +;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
    +;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
    +(global-set-key (kbd "C-c h") 'helm-command-prefix)
    +(global-unset-key (kbd "C-x c"))
     
    -(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to run persistent action
    -(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB work in terminal
    -(define-key helm-map (kbd "C-z")  'helm-select-action) ; list actions using C-z
    +(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to run persistent action
    +(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB work in terminal
    +(define-key helm-map (kbd "C-z")  'helm-select-action) ; list actions using C-z
     
    -(when (executable-find "curl")
    -  (setq helm-google-suggest-use-curl-p t))
    +(when (executable-find "curl")
    +  (setq helm-google-suggest-use-curl-p t))
     
    -(setq helm-split-window-in-side-p           t ; open helm buffer inside current window, not occupy whole other window
    -      helm-move-to-line-cycle-in-source     t ; move to end or beginning of source when reaching top or bottom of source.
    -      helm-ff-search-library-in-sexp        t ; search for library in `require' and `declare-function' sexp.
    -      helm-scroll-amount                    8 ; scroll 8 lines other window using M-<next>/M-<prior>
    +(setq helm-split-window-in-side-p           t ; open helm buffer inside current window, not occupy whole other window
    +      helm-move-to-line-cycle-in-source     t ; move to end or beginning of source when reaching top or bottom of source.
    +      helm-ff-search-library-in-sexp        t ; search for library in `require' and `declare-function' sexp.
    +      helm-scroll-amount                    8 ; scroll 8 lines other window using M-<next>/M-<prior>
           helm-ff-file-name-history-use-recentf t
    -      helm-echo-input-in-header-line t)
    +      helm-echo-input-in-header-line t)
     
    -(defun spacemacs//helm-hide-minibuffer-maybe ()
    -  "Hide minibuffer in Helm session if we use the header line as input field."
    -  (when (with-helm-buffer helm-echo-input-in-header-line)
    -    (let ((ov (make-overlay (point-min) (point-max) nil nil t)))
    -      (overlay-put ov 'window (selected-window))
    -      (overlay-put ov 'face
    -                   (let ((bg-color (face-background 'default nil)))
    -                     `(:background ,bg-color :foreground ,bg-color)))
    -      (setq-local cursor-type nil))))
    +(defun spacemacs//helm-hide-minibuffer-maybe ()
    +  "Hide minibuffer in Helm session if we use the header line as input field."
    +  (when (with-helm-buffer helm-echo-input-in-header-line)
    +    (let ((ov (make-overlay (point-min) (point-max) nil nil t)))
    +      (overlay-put ov 'window (selected-window))
    +      (overlay-put ov 'face
    +                   (let ((bg-color (face-background 'default nil)))
    +                     `(:background ,bg-color :foreground ,bg-color)))
    +      (setq-local cursor-type nil))))
     
     
    -(add-hook 'helm-minibuffer-set-up-hook
    -          'spacemacs//helm-hide-minibuffer-maybe)
    +(add-hook 'helm-minibuffer-set-up-hook
    +          'spacemacs//helm-hide-minibuffer-maybe)
     
    -(setq helm-autoresize-max-height 0)
    -(setq helm-autoresize-min-height 20)
    -(helm-autoresize-mode 1)
    +(setq helm-autoresize-max-height 0)
    +(setq helm-autoresize-min-height 20)
    +(helm-autoresize-mode 1)
     
    -(helm-mode 1)
    +(helm-mode 1)
     
    -
    -

    Usage:

    -
    +
    +

    1 Usage:

    +
    +

    After using Helm, you are going to have a big change in the way you use Emacs. After you get used to the Helm way, you won't want to leave @@ -335,33 +315,40 @@

    Usage:

      -
    • You type something.
    • +
    • You type something. +
    • Instead of TAB to expand the common part until you find your candidates, in Helm, you type parts of the candidate you want to search for, separated by spaces. In Helm, these strings are called -patterns. Patterns can also be regexps.
    • +patterns. Patterns can also be regexps. +
    • Helm will try to search and sort according to highest match, from top to bottom. The best match is at the top, so you can press RET -and select it.
    • +and select it. +
    • You can navigate the buffer with C-n and C-p or <up> and <down> to move up/down, C-v and M-v to move to next/previous pages, and M-< and M-> to move to the top and bottom of the Helm -buffer.
    • +buffer. +
    • You can mark candidates with C-SPC; this is useful when you need to perform an action on many candidates of your choice. M-a to -select all.
    • +select all. +
    • You can insert marked candidates into the current buffer with C-c C-i. This is useful when you have narrowed to a list of candidates, -i.e. files, and then you want to save such candidates.
    • +i.e. files, and then you want to save such candidates. +
    • If you find the current horizontal Helm window is small, you can always switch it to a vertical window with C-t. Running C-t again -returns the Helm window back to horizontal and so on.
    • +returns the Helm window back to horizontal and so on. +

    @@ -397,15 +384,18 @@

    Usage: marked candidates (one or more) and quits the current Helm session; an action menu is a text-based menu that lists actions you can take. For example, Find File (open file), Find File in Dired, -Grep File… +Grep File… +
  • C-z executes helm-execute-persistent-action; a persistent action is an action that you use in a Helm session that does not quit the -session.
  • +session. +
  • In some Helm sessions, such as helm-find-files or helm-mini, you can select more than one candidates and execute actions on them, -such as grep or open.
  • +such as grep or open. +

    @@ -417,9 +407,9 @@

    Usage:
    -
    (define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to do persistent action
    -(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal
    -(define-key helm-map (kbd "C-z")  'helm-select-action) ; list actions using C-z
    +
    (define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to do persistent action
    +(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal
    +(define-key helm-map (kbd "C-z")  'helm-select-action) ; list actions using C-z
     
    @@ -431,20 +421,22 @@

    Usage:

    -
    -

    Why is Helm powerful?

    -
    +
    +

    2 Why is Helm powerful?

    +
    • Simple and Consistent interface: Every Helm session starts with the same, simple interface: a prompt for entering search patterns and a Helm buffer for displying results as the user types. Because of the -consistent and simple interface, new people use Helm with ease.
    • +consistent and simple interface, new people use Helm with ease. +
    • Interactivity: By nature, Helm is very interactive: as a user types, results get updated immediately in the Helm buffer. Because of this feature, Helm provides a unique interactive version of many commmands that do not exist outside of Helm. For example, -helm-ff-run-grep, which updates grep results as you type.
    • +helm-ff-run-grep, which updates grep results as you type. +
    • Focus on finding what you want first, decide what to do with it later: With Helm, you don't have to think about what you are going to @@ -460,10 +452,10 @@

      Why is have a second thought that opening the file in another window is better. Then you press C-g to cancel the command and re-execute the C-x 4 C-f version and have to start your navigating session all over -again!

    • +again! + -
    • -Matching mechanism: This is a powerful feature in Helm that I +

    • Matching mechanism: This is a powerful feature in Helm that I haven't seen in other packages: out of order matching, with regular expression. That's right, you can enter every search pattern as a regexp!. A really powerful concept: it enhances explanatory power @@ -477,7 +469,6 @@

      Why is tried it in Helm Projectile (a package that makes use of Helm framework, which does not come with stock Helm. You can read more about it in my Helm Projectile guide): -

      @@ -518,17 +509,19 @@

      Why is

      Starting from Helm 1.6.5, Helm includes fuzzy matching for many commands and a way for a package writer to activate fuzzy matching. -

    • +

      +
    • Performance: Helm can work with over 30000 candidates or more with no -problems.
    • +problems. +
    -
    -

    Operate on text at point:

    -
    +
    +

    3 Operate on text at point:

    +

    If you are already in a Helm session, you can still get input from the current editing buffer by the following key bindings: @@ -536,8 +529,10 @@

    Operat
    • C-w yanks word at point, starting from point to the end of the -word, into the Helm prompt (the minibuffer).
    • -
    • M-n yanks symbol at point
    • +word, into the Helm prompt (the minibuffer). + +
    • M-n yanks symbol at point +

    @@ -548,13 +543,17 @@

    Operat
    • C-h f, which runs describe-function, automatically takes the -symbol at point as the default for searching function.
    • +symbol at point as the default for searching function. +
    • C-h v, which runs describe-variable, automatically takes the -symbol at point as the default for searching variable.
    • +symbol at point as the default for searching variable. +
    • C-h w, which runs where-is, automatically takes the symbol at point as the default for showing the key binding for a -command.
    • -
    • … and so on… (C-h C-h to view all commands)
    • +command. + +
    • … and so on… (C-h C-h to view all commands) +

    @@ -563,9 +562,9 @@

    Operat

    -
    -

    Autoresize

    -
    +
    +

    4 Autoresize

    +

    Helm can resize its buffer automatically to fit the number of candidates if you enable helm-autoresize-mode: @@ -573,18 +572,20 @@

    Autoresize

    -
    (helm-autoresize-mode t)
    +
    (helm-autoresize-mode t)
     

    You can customize the minimum and maximum height that Helm can resize -with these two variable: +with these two variable:

      -
    • helm-autoresize-max-height
    • -
    • helm-autoresize-min-height
    • +
    • helm-autoresize-max-height +
    • +
    • helm-autoresize-min-height +

    @@ -607,11 +608,11 @@

    Autoresize

    -
    (defun pl/helm-alive-p ()
    -  (if (boundp 'helm-alive-p)
    -      (symbol-value 'helm-alive-p)))
    +
    (defun pl/helm-alive-p ()
    +  (if (boundp 'helm-alive-p)
    +      (symbol-value 'helm-alive-p)))
     
    -(add-to-list 'golden-ratio-inhibit-functions 'pl/helm-alive-p)
    +(add-to-list 'golden-ratio-inhibit-functions 'pl/helm-alive-p)
     
    @@ -641,9 +642,9 @@

    Autoresize

    -
    -

    Command: helm-M-x

    -
    +
    +

    5 Command: helm-M-x

    +

    Key binding:

    @@ -654,7 +655,7 @@

    Comman
    -
    (global-set-key (kbd "M-x") 'helm-M-x)
    +
    (global-set-key (kbd "M-x") 'helm-M-x)
     
    @@ -690,7 +691,7 @@

    Comman
    -
    (setq helm-M-x-fuzzy-match t) ;; optional fuzzy matching for helm-M-x
    +
    (setq helm-M-x-fuzzy-match t) ;; optional fuzzy matching for helm-M-x
     
    @@ -717,9 +718,9 @@

    Comman

    -
    -

    Command: helm-show-kill-ring

    -
    +
    +

    6 Command: helm-show-kill-ring

    +

    Key binding:

    @@ -730,7 +731,7 @@

    Comman
    -
    (global-set-key (kbd "M-y") 'helm-show-kill-ring)
    +
    (global-set-key (kbd "M-y") 'helm-show-kill-ring)
     
    @@ -775,9 +776,9 @@

    Comman

    -
    -

    Command: helm-mini

    -
    +
    +

    7 Command: helm-mini

    +

    Key binding:

    @@ -788,7 +789,7 @@

    Comman
    -
    (global-set-key (kbd "C-x b") 'helm-mini)
    +
    (global-set-key (kbd "C-x b") 'helm-mini)
     
    @@ -798,8 +799,8 @@

    Comman
    -
    (setq helm-buffers-fuzzy-matching t
    -      helm-recentf-fuzzy-match    t)
    +
    (setq helm-buffers-fuzzy-matching t
    +      helm-recentf-fuzzy-match    t)
     
    @@ -808,10 +809,13 @@

    Comman

      -
    • Current open buffers, under the header Buffers.
    • -
    • Recently opened files, under the header Recentf.
    • +
    • Current open buffers, under the header Buffers. +
    • +
    • Recently opened files, under the header Recentf. +
    • Allows you to create a new buffer by pressing RET, under the header -Create Buffer.
    • +Create Buffer. +

    @@ -856,12 +860,17 @@

    Comman

      -
    • Remote buffers are prefixed with '@'.
    • +
    • Remote buffers are prefixed with '@'. +
    • Red => Buffer has had its file modified on disk by an external -process.
    • -
    • Indianred2 => Buffer exists but its file has been deleted.
    • -
    • Orange => Buffer is modified and its file has not been saved to disk.
    • -
    • Italic => A non-file buffer.
    • +process. + +
    • Indianred2 => Buffer exists but its file has been deleted. +
    • +
    • Orange => Buffer is modified and its file has not been saved to disk. +
    • +
    • Italic => A non-file buffer. +

    @@ -876,27 +885,30 @@

    Comman
    • If I enter the pattern: *lisp ^helm @moc, Helm will narrow down the list by selecting only buffers that are in lisp mode, start -by helm and match "moc" in their contents.
    • +by helm and match "moc" in their contents. +
    • If I want to specify more than one major-mode, separate them with -,, e.g *!lisp,!sh,!fun will list all buffers but the ones in -lisp-mode, sh-mode and fundamental-mode.
    • +=,=, e.g *!lisp,!sh,!fun will list all buffers but the ones in +lisp-mode, sh-mode and fundamental-mode. +
    • If I enter the pattern: *lisp ^helm moc. Notice there is no @ this time helm will look for lisp mode buffers starting by -"helm" and have "moc" in their name.
    • +"helm" and have "moc" in their name. +
    • If I enter the pattern: *!lisp !helm Helm will narrow down -to buffers that are not in "lisp" mode and that do not match "helm".
    • +to buffers that are not in "lisp" mode and that do not match "helm". + -
    • -If I enter the pattern: /helm/ w3 Helm will narrow down +

    • If I enter the pattern: /helm/ w3 Helm will narrow down buffers that are in any "helm" sub-directory and matching w3. -

      helm-mini is like an interactive version of ibuffer. -

    • +

      +

    @@ -919,8 +931,9 @@

    Comman
    • All the C buffers are selected using the pattern *C. In the demo, -I also select Tcl buffers with *Tcl and then switched back to C -buffers with *C.
    • +I also select Tcl buffers with *Tcl and then switched back to C +buffers with *C. +
    • I only want to have buffers that contain only the string crash. To do that, I add a space, then add the pattern @@ -930,12 +943,14 @@

      Comman patterns, e.g., I added memory to filter down to buffers that contain the string "memory" among the buffers that contain crash. You can also mark multiple with C-SPC or mark all buffers -with M-a to search all buffers listed in helm-mini.

    • +with M-a to search all buffers listed in helm-mini. +
    • As you can see, as I filtered, the number of candidates decreased, as displayed in the modeline. At the end, there were 12 buffers remained as the result of filtering, down from the total 253 -buffers.
    • +buffers. +

    @@ -947,12 +962,10 @@

    Comman

      -
    • -helm-multi-files: this command lists buffers and recent files and +

    • helm-multi-files: this command lists buffers and recent files and files in current directory. However, when no match is found, helm-mini asks if you want to create a new buffer by highlighting the only entry, which look like this: -

      @@ -965,7 +978,8 @@

      Comman start a helm-locate session to search the whole file system for the desired file by pressing C-c p. By default, helm-for-files is bound to <prefix> f (current prefix is C-c h). -

    • +

      +
    • helm-buffer-list: similar to helm-mini, but instead of listing recent files from recentf, it uses ido-virtual-buffers, which is @@ -973,14 +987,15 @@

      Comman buffers do not contain paths. Depending on your preference, you can use this command in place of helm-mini. To enable fuzzy matching ido-virtual-buffers, if you set helm-buffers-fuzzy-matching to -t already, you also get fuzzy matching for ido-virtual-buffers.

    • +t already, you also get fuzzy matching for ido-virtual-buffers. +

    -
    -

    Command: helm-find-files

    -
    +
    +

    8 Command: helm-find-files

    +

    Key binding:

    @@ -993,7 +1008,7 @@

    Comman
    -
    (global-set-key (kbd "C-x C-f") 'helm-find-files)
    +
    (global-set-key (kbd "C-x C-f") 'helm-find-files)
     
    @@ -1007,44 +1022,55 @@

    Comman
    • helm-find-files can fuzzy match candidates in the current -directory. e.g "fob" or "fbr" will complete "foobar".
    • +directory. e.g "fob" or "fbr" will complete "foobar". +
    • You can also execute a persistent action, which is bound to C-z (by default) or TAB if you use my configuration, to narrow the current highlighting candidate; C-z or TAB again to view the contents of the buffer. You can scroll the other buffer up/down with M-<next> and -M-<prior>.
    • +M-<prior>. +
    • Alternatively, you can hit C-j to narrow to the highlighting candidate and C-j again to view the content of the other buffer. C-l goes -back.
    • +back. +
    • You can also go up one directory level with C-l. NOTE: if you use C-l, Helm goes up one level and places the cursor on the directory you've just exited. If you want to go up and have the cursor on -the parent directory, in Helm prompt, enter ../.
    • +the parent directory, in Helm prompt, enter ../. +
    • After you go up with C-l, you can go back to the exact visited -directories with C-r.
    • +directories with C-r. +
    • To create a directory, enter a new name that does not exist in the current directory and append / at the end. After you create a -directory, Helm continues in that directory.
    • +directory, Helm continues in that directory. +
    • To create a new file, enter a name and select the top row that has the symbol [?] next to it. By default, Helm always selects the -first match in the directory.
    • +first match in the directory. +
    • You can invoke grep on the currently highlighted entry with -C-s. C-u C-s performs a recursive grep.
    • +C-s. C-u C-s performs a recursive grep. + -
    • Enter ~/ at the end of the pattern to quickly reach home directory.
    • +
    • Enter ~/ at the end of the pattern to quickly reach home directory. +
    • -
    • Enter / at the end of the pattern to quickly reach root of your file system.
    • +
    • Enter / at the end of the pattern to quickly reach root of your file system. +
    • Enter ./ at the end of the pattern to quickly reach `default-directory' (initial start of session). If you are in `default-directory' move -cursor on top.
    • +cursor on top. +

    @@ -1059,7 +1085,7 @@

    Comman

    -Demo: +Demo:

    @@ -1075,7 +1101,8 @@

    Comman

    -
    • Find file at point:
      +
      1. Find file at point:
        +

        Did you know the command ffap? It was introduced in part 1, but here is the demo: @@ -1094,9 +1121,11 @@

        Comman separate command to open the file at point, but using the same C-x C-f. It's really convenient.

        -

      2. +
      +
    • + +
    • File and directory histories:
      -
    • File and directory histories:

      With a prefix argument, helm-find-files displays a list of visited directories. If one is selected at point, @@ -1115,14 +1144,16 @@

      Comman You can use M-p and M-n to move back and forth between previously visited directory.

      -

    +
    +
    -
    -

    Command: helm-ff-do-grep, live grep in Helm

    -
    +
    +

    9 Command: helm-ff-do-grep, live grep in Helm

    +
    +

    -Key binding: +Key binding:

    @@ -1152,9 +1183,9 @@

    Comma
    -
    (when (executable-find "ack-grep")
    -  (setq helm-grep-default-command "ack-grep -Hn --no-group --no-color %e %p %f"
    -        helm-grep-default-recurse-command "ack-grep -H --no-group --no-color %e %p %f"))
    +
    (when (executable-find "ack-grep")
    +  (setq helm-grep-default-command "ack-grep -Hn --no-group --no-color %e %p %f"
    +        helm-grep-default-recurse-command "ack-grep -H --no-group --no-color %e %p %f"))
     
    @@ -1170,9 +1201,9 @@

    Comma

    -
    -

    Command: helm-semantic-or-imenu

    -
    +
    +

    10 Command: helm-semantic-or-imenu

    +

    Key binding:

    @@ -1220,8 +1251,8 @@

    Comma
    -
    (setq helm-semantic-fuzzy-match t
    -      helm-imenu-fuzzy-match    t)
    +
    (setq helm-semantic-fuzzy-match t
    +      helm-imenu-fuzzy-match    t)
     
    @@ -1230,18 +1261,21 @@

    Comma

      -
    • Invoke the command (by default, C-c h i).
    • +
    • Invoke the command (by default, C-c h i). +
    • You can use the arrow keys or C-p/C-n to move up and down between candidates. You can also use C-<down> and C-<up>; as you move the selection between tags inside the Helm Semantic buffer, the point moves -between tag locations as well.
    • +between tag locations as well. +
    • A nice feature of helm-semantic-or-imenu is that whenever you activate the command, if point is inside a Semantic tag (such as a function definition), the selection is positioned at the tag in the Helm buffer. This works nicely in combination with -C-<down> and C-<up> to move between definitions in your buffer.
    • +C-<down> and C-<up> to move between definitions in your buffer. +

    @@ -1259,7 +1293,7 @@

    Comma

    -helm-semantic-or-imenu provides these types of Semantic tags: +helm-semantic-or-imenu provides these types of Semantic tags:

      @@ -1267,12 +1301,16 @@

      Comma the current major mode. For example, Dependencies in C/C++ include header files. When you execute a persistent action on a dependency, the point moves to the location of that dependency in the current -window. +window. + -
    • Variables: variables defined in current buffer.
    • -
    • Functions: function defined in current buffer
    • +
    • Variables: variables defined in current buffer. +
    • +
    • Functions: function defined in current buffer +
    • Provides: modules that this buffer provides; for example, (provide - ...) expression in Emacs Lisp.
    • + ...) expression in Emacs Lisp. +

    @@ -1292,25 +1330,26 @@

    Comma
    • First, I use helm-semantic-or-imenu to move to the function -helm-define-key-with-subkeys and move point there.
    • +helm-define-key-with-subkeys and move point there. +
    • Then, I start helm-semantic-or-imenu again and -helm-define-key-with-subkeys is pre-selected.
    • +helm-define-key-with-subkeys is pre-selected. + -
    • -Then, I move point to the variable helm-map and execute +

    • Then, I move point to the variable helm-map and execute helm-semantic-or-imenu again on two function: helm-next-source and helm-previous-source. This time, instead of showing the current semantic tag I'm operating in (which is helm-map), it shows the other two tags in Helm Semantic buffer. This is because I supplied a prefix argument before running the command. -

      helm-semantic-or-imenu-2.gif

      -
    • +

    +

    @@ -1324,27 +1363,29 @@

    Comma
    • At first, I narrow to candidates that are functions with this -pattern in the prompt: Functi.
    • +pattern in the prompt: Functi. +
    • Then, I narrow to candidates that are functions and contain void in them with this pattern: functi void, effectively -selecting functions that have type void or accept void arguments.
    • +selecting functions that have type void or accept void arguments. +
    • Then, I narrow to candidates that are functions and contain int in them with this pattern: functi int, effectively selecting functions -that have type int or accept int arguments.
    • +that have type int or accept int arguments. + -
    • -Then, I narrow to candidates that are variables and contain u16 +

    • Then, I narrow to candidates that are variables and contain u16 in them, effectively selecting only variables that have type u16; the same for u32 in the demo. -

      helm-semantic-or-imenu.gif

      -
    • +

    +

    @@ -1362,9 +1403,9 @@

    Comma

    -
    -

    Command: helm-man-woman

    -
    +
    +

    11 Command: helm-man-woman

    +

    Key binding:

    @@ -1386,7 +1427,7 @@

    Comma
    -
    (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
    +
    (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
     
    @@ -1402,9 +1443,9 @@

    Comma

    -
    -

    Command: helm-find

    -
    +
    +

    12 Command: helm-find

    +

    Key binding:

    @@ -1459,9 +1500,9 @@

    Comma

    -
    -

    Command: helm-locate

    -
    +
    +

    13 Command: helm-locate

    +

    Key binding:

    @@ -1501,7 +1542,7 @@

    Comma
    -
    (setq helm-locate-fuzzy-match t)
    +
    (setq helm-locate-fuzzy-match t)
     
    @@ -1522,9 +1563,9 @@

    Comma

    -
    -

    Command: helm-occur

    -
    +
    +

    14 Command: helm-occur

    +

    Key binding:

    @@ -1537,7 +1578,7 @@

    Comma
    -
    (global-set-key (kbd "C-c h o") 'helm-occur)
    +
    (global-set-key (kbd "C-c h o") 'helm-occur)
     
    @@ -1572,9 +1613,9 @@

    Comma

    -
    -

    Command: helm-apropos

    -
    +
    +

    15 Command: helm-apropos

    +

    Key binding:

    @@ -1595,16 +1636,23 @@

    Comma

      -
    • Commands: Lists all available commands.
    • -
    • Fucntion: Lists all available functions.
    • +
    • Commands: Lists all available commands. +
    • +
    • Fucntion: Lists all available functions. +
    • Classes: Lists all classes created by defclass. See Building -Classes.
    • +Classes. +
    • Generic Functions: Lists all functions created by defmethod. See -Writing Methods
    • -
    • Variables: Lists all available variables.
    • -
    • Faces: Lists all available faces.
    • +Writing Methods + +
    • Variables: Lists all available variables. +
    • +
    • Faces: Lists all available faces. +
    • Helm attributes: Lists all attributes that you can use to build a -Helm source. Useful if you want to write extension with Helm.
    • +Helm source. Useful if you want to write extension with Helm. +

    @@ -1613,15 +1661,15 @@

    Comma
    -
    (setq helm-apropos-fuzzy-match t)
    +
    (setq helm-apropos-fuzzy-match t)
     

    -
    -

    Command: helm-info-*

    -
    +
    +

    16 Command: helm-info-*

    +

    Key binding:

    @@ -1635,30 +1683,30 @@

    Comma - + - + -Key -Binding +Key +Binding -<prefix> h g -Command: helm-info-gnus +<prefix> h g +Command: helm-info-gnus -<prefix> h i -Command: helm-info-at-point +<prefix> h i +Command: helm-info-at-point -<prefix> h r -Command: helm-info-emacs +<prefix> h r +Command: helm-info-emacs @@ -1686,9 +1734,12 @@

    Comma

      -
    • helm-info-gdb.
    • -
    • helm-info-find.
    • -
    • helm-info-elisp.
    • +
    • helm-info-gdb. +
    • +
    • helm-info-find. +
    • +
    • helm-info-elisp. +

    …. @@ -1701,9 +1752,9 @@

    Comma

    -
    -

    Command: helm-lisp-completion-at-point

    -
    +
    +

    17 Command: helm-lisp-completion-at-point

    +

    Key binding:

    @@ -1726,15 +1777,15 @@

    Command: helm-lisp-completion-at-point

    -
    (setq helm-lisp-fuzzy-completion t)
    +
    (setq helm-lisp-fuzzy-completion t)
     
    -
    -

    Command: helm-resume

    -
    +
    +

    18 Command: helm-resume

    +

    Key binding:

    @@ -1775,9 +1826,9 @@

    Comma

    -
    -

    Command: helm-all-mark-rings

    -
    +
    +

    19 Command: helm-all-mark-rings

    +

    Key binding:

    @@ -1790,7 +1841,7 @@

    Comma
    -
    (global-set-key (kbd "C-h SPC") 'helm-all-mark-rings)
    +
    (global-set-key (kbd "C-h SPC") 'helm-all-mark-rings)
     
    @@ -1825,9 +1876,9 @@

    Comma

    -
    -

    Command: helm-regexp

    -
    +
    +

    20 Command: helm-regexp

    +

    Key binding: <prefix> r (prefix is C-x c by default, or C-c h if set). @@ -1847,47 +1898,47 @@

    Comma - + - + -Key -Action +Key +Action -[f1] -Kill regexp as sexp +[f1] +Kill regexp as sexp -  -Saves the regexp as a string in kill-ring +  +Saves the regexp as a string in kill-ring -[f2] -Query Replace Regexp +[f2] +Query Replace Regexp -  -Invoke query-replace with current regexp to be replaced +  +Invoke query-replace with current regexp to be replaced -[f3] -Kill regexp +[f3] +Kill regexp -  -Saves the regexp as is in the current Helm prompt +  +Saves the regexp as is in the current Helm prompt @@ -1904,9 +1955,9 @@

    Comma

    -
    -

    Command: helm-register

    -
    +
    +

    21 Command: helm-register

    +

    Key binding:

    @@ -1918,7 +1969,7 @@

    Comma
    -
    (global-set-key (kbd "C-c h x") 'helm-register)
    +
    (global-set-key (kbd "C-c h x") 'helm-register)
     
    @@ -1932,57 +1983,57 @@

    Comma - + - + -Key -Action +Key +Action -[f1] -Insert Register +[f1] +Insert Register -  -Insert register content into buffer +  +Insert register content into buffer -[f2] -Append Region to Register +[f2] +Append Region to Register -  -Append an active region to current content +  +Append an active region to current content -  -in selected register +  +in selected register -[f3] -Prepend Region to Register +[f3] +Prepend Region to Register -  -Prepend an active region to current content +  +Prepend an active region to current content -  -in selected register +  +in selected register @@ -1999,9 +2050,9 @@

    Comma

    -
    -

    Command: helm-top

    -
    +
    +

    22 Command: helm-top

    +

    Key binding:

    @@ -2023,38 +2074,38 @@

    Comma - + - + -Key -Binding +Key +Binding -[f1] -kill (SIGTERM) +[f1] +kill (SIGTERM) -[f2] -kill (SIGKILL) +[f2] +kill (SIGKILL) -[f3] -kill (SIGINT) +[f3] +kill (SIGINT) -[f4] -kill (Choose signal) +[f4] +kill (Choose signal) @@ -2067,44 +2118,44 @@

    Comma - + - + -Key -Binding +Key +Binding -C-c C-u -Refresh helm-top +C-c C-u +Refresh helm-top -M-C -Sort by shell commands +M-C +Sort by shell commands -M-P -Sort by CPU usage +M-P +Sort by CPU usage -M-U -Sort by user +M-U +Sort by user -M-M -Sort by memory +M-M +Sort by memory @@ -2125,9 +2176,9 @@

    Comma

    -
    -

    Command: helm-surfraw

    -
    +
    +

    23 Command: helm-surfraw

    +

    Key binding:

    @@ -2166,11 +2217,11 @@

    Comma

    -
    -

    Command: helm-google-suggest

    -
    +
    +

    24 Command: helm-google-suggest

    +

    -Key binding: +Key binding:

    @@ -2180,7 +2231,7 @@

    Comma
    -
    (global-set-key (kbd "C-c h g") 'helm-google-suggest)
    +
    (global-set-key (kbd "C-c h g") 'helm-google-suggest)
     
    @@ -2209,9 +2260,9 @@

    Comma

    -
    -

    Command: helm-color

    -
    +
    +

    25 Command: helm-color

    +

    Key binding:

    @@ -2240,107 +2291,109 @@

    Comma

      -
    • Colors:
    • +
    • Colors: +
    -+-+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    KeyActionKeyAction
    [f1] or C-c NCopy Name[f1] or C-c NCopy Name
     Copy color name into kill-ring Copy color name into kill-ring
    [f2] or C-c RCopy RGB[f2] or C-c RCopy RGB
     Copy hex value into kill-ring Copy hex value into kill-ring
    [f3] or C-c nInsert Name[f3] or C-c nInsert Name
     Insert color name into current buffer Insert color name into current buffer
    [f4] or C-c rInsert RGB[f4] or C-c rInsert RGB
     Insert hex value into current buffer Insert hex value into current buffer
      -
    • Customize Face:
    • +
    • Customize Face: +
    -+-+ - - + + - - + + - - + + - - + + - - + +
    KeyActionKeyAction
    [f1]Customize[f1]Customize
     Open Customization window Open Customization window
    [f2]Copy Name[f2]Copy Name
     Copy face name Copy face name
    @@ -2357,9 +2410,9 @@

    Comma

    -
    -

    Command: helm-eval-expression-with-eldoc

    -
    +
    +

    26 Command: helm-eval-expression-with-eldoc

    +

    Key binding:

    @@ -2371,7 +2424,7 @@

    Comma
    -
    (global-set-key (kbd "C-c h M-:") 'helm-eval-expression-with-eldoc)
    +
    (global-set-key (kbd "C-c h M-:") 'helm-eval-expression-with-eldoc)
     
    @@ -2402,15 +2455,15 @@

    Comma

    -
    -

    Command: helm-calcul-expression

    -
    +
    +

    27 Command: helm-calcul-expression

    +

    Key binding:

    -<prefix> C-, (prefix is C-x c by default, or C-c h if set). +<prefix> C-,* (prefix is *C-x c by default, or C-c h if set).

    @@ -2430,21 +2483,33 @@

    Comma

      -
    • Choice of algebraic or RPN (stack-based) entry of calculations.
    • -
    • Arbitrary precision integers and floating-point numbers.
    • +
    • Choice of algebraic or RPN (stack-based) entry of calculations. +
    • +
    • Arbitrary precision integers and floating-point numbers. +
    • Arithmetic on rational numbers, complex numbers (rectangular and polar), error forms with standard deviations, open and closed intervals, vectors and matrices, dates and times, infinities, sets, -quantities with units, and algebraic formulas.
    • -
    • Mathematical operations such as logarithms and trigonometric functions.
    • -
    • Programmer's features (bitwise operations, non-decimal numbers).
    • -
    • Financial functions such as future value and internal rate of return.
    • -
    • Number theoretical features such as prime factorization and arithmetic modulo m for any m.
    • -
    • Algebraic manipulation features, including symbolic calculus.
    • -
    • Moving data to and from regular editing buffers.
    • -
    • Embedded mode for manipulating Calc formulas and data directly inside any editing buffer.
    • -
    • Graphics using GNUPLOT, a versatile (and free) plotting program.
    • -
    • Easy programming using keyboard macros, algebraic formulas, algebraic rewrite rules, or extended Emacs Lisp.
    • +quantities with units, and algebraic formulas. + +
    • Mathematical operations such as logarithms and trigonometric functions. +
    • +
    • Programmer's features (bitwise operations, non-decimal numbers). +
    • +
    • Financial functions such as future value and internal rate of return. +
    • +
    • Number theoretical features such as prime factorization and arithmetic modulo m for any m. +
    • +
    • Algebraic manipulation features, including symbolic calculus. +
    • +
    • Moving data to and from regular editing buffers. +
    • +
    • Embedded mode for manipulating Calc formulas and data directly inside any editing buffer. +
    • +
    • Graphics using GNUPLOT, a versatile (and free) plotting program. +
    • +
    • Easy programming using keyboard macros, algebraic formulas, algebraic rewrite rules, or extended Emacs Lisp. +
    @@ -2466,9 +2531,10 @@

    Comma

    -
    -

    Command: helm-eshell-history

    -
    +
    +

    28 Command: helm-eshell-history

    +
    +

    Key binding:

    @@ -2479,11 +2545,11 @@

    Comma
    -
    (require 'helm-eshell)
    +
    (require 'helm-eshell)
     
    -(add-hook 'eshell-mode-hook
    -          #'(lambda ()
    -              (define-key eshell-mode-map (kbd "C-c C-l")  'helm-eshell-history)))
    +(add-hook 'eshell-mode-hook
    +          #'(lambda ()
    +              (define-key eshell-mode-map (kbd "C-c C-l")  'helm-eshell-history)))
     
    @@ -2514,24 +2580,24 @@

    Comma

    -
    -

    Command: helm-comint-input-ring

    -
    +
    +

    29 Command: helm-comint-input-ring

    +

    Similar to helm-eshell-history, but used for M-x shell.

    -
    (define-key shell-mode-map (kbd "C-c C-l") 'helm-comint-input-ring)
    +
    (define-key shell-mode-map (kbd "C-c C-l") 'helm-comint-input-ring)
     
    -
    -

    Command: helm-mini-buffer-history

    -
    +
    +

    30 Command: helm-mini-buffer-history

    +

    Do you ever feel uneasy operating on the minibuffer history when it's getting large (say, hundreds of history items)? If so, Helm can @@ -2541,15 +2607,15 @@

    Comma
    -
    (define-key minibuffer-local-map (kbd "C-c C-l") 'helm-minibuffer-history)
    +
    (define-key minibuffer-local-map (kbd "C-c C-l") 'helm-minibuffer-history)
     

    -
    -

    Package: helm-projectile

    -
    +
    +

    31 Package: helm-projectile

    +

    Author: Bozhidar Batsov, bozhidar@batsov.com

    @@ -2594,17 +2660,20 @@

    Packa

    -
    -

    Package: helm-descbinds

    -
    +
    +

    32 Package: helm-descbinds

    +

    Author

      -
    • 2008-2010: Taiki SUGAWARA, buzz.taiki@gmail.com
    • -
    • 2012-2013 Michael Markert, markert.michael@googlemail.com
    • -
    • 2013-present: Daniel Hackney dan@haxney.org
    • +
    • 2008-2010: Taiki SUGAWARA, buzz.taiki@gmail.com +
    • +
    • 2012-2013 Michael Markert, markert.michael@googlemail.com +
    • +
    • 2013-present: Daniel Hackney dan@haxney.org +

    @@ -2623,9 +2692,12 @@

    Packa

      -
    • Execute the command
    • -
    • Describe the command
    • -
    • Find the command
    • +
    • Execute the command +
    • +
    • Describe the command +
    • +
    • Find the command +

    @@ -2640,13 +2712,13 @@

    Packa
    -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -;; PACKAGE: helm-descbinds                      ;;
    -;;                                              ;;
    -;; GROUP: Convenience -> Helm -> Helm Descbinds ;;
    -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    -(require 'helm-descbinds)
    -(helm-descbinds-mode)
    +
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +;; PACKAGE: helm-descbinds                      ;;
    +;;                                              ;;
    +;; GROUP: Convenience -> Helm -> Helm Descbinds ;;
    +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    +(require 'helm-descbinds)
    +(helm-descbinds-mode)
     
    @@ -2661,9 +2733,10 @@

    Packa

    -
    -

    Summary of Keybindings

    -
    +
    +

    33 Summary of Keybindings

    +
    +

    This chapter summarizes the key bindings introduced in the above chapters.

    @@ -2672,186 +2745,186 @@

    Summa - + - + - + -Key Binding -Command -Description +Key Binding +Command +Description -M-x -helm-M-x -List commands +M-x +helm-M-x +List commands -M-y -helm-show-kill-ring -Shows the content of the kill ring +M-y +helm-show-kill-ring +Shows the content of the kill ring -C-x b -helm-mini -Shows open buffers, recently opened files +C-x b +helm-mini +Shows open buffers, recently opened files -C-x C-f -helm-find-files -The helm version of find-file +C-x C-f +helm-find-files +The helm version of find-file -C-s -helm-ff-run-grep -Run grep from within helm-find-files +C-s +helm-ff-run-grep +Run grep from within helm-find-files -C-c h i -helm-semantic-or-imenu -Helm interface to semantic/imenu +C-c h i +helm-semantic-or-imenu +Helm interface to semantic/imenu -C-c h m -helm-man-woman -Jump to any man entry +C-c h m +helm-man-woman +Jump to any man entry -C-c h / -helm-find -Helm interface to find +C-c h / +helm-find +Helm interface to find -C-c h l -helm-locate -Helm interface to locate +C-c h l +helm-locate +Helm interface to locate -C-c h o -helm-occur -Helm interface for occur +C-c h o +helm-occur +Helm interface for occur -C-c h a -helm-apropos -Describes commands, functions, variables, … +C-c h a +helm-apropos +Describes commands, functions, variables, … -C-c h h g -helm-info-gnus -  +C-c h h g +helm-info-gnus +  -C-c h h i -helm-info-at-point -  +C-c h h i +helm-info-at-point +  -C-c h h r -helm-info-emacs -  +C-c h h r +helm-info-emacs +  -C-c h <tab> -helm-lisp-completion-at-point -Provides a list of available functions +C-c h <tab> +helm-lisp-completion-at-point +Provides a list of available functions -C-c h b -helm-resume -Resumes a previous helm session +C-c h b +helm-resume +Resumes a previous helm session -C-h SPC -helm-all-mark-rings -Views contents of local and global mark rings +C-h SPC +helm-all-mark-rings +Views contents of local and global mark rings -C-c h r -helm-regex -Visualizes regex matches +C-c h r +helm-regex +Visualizes regex matches -C-c h x -helm-register -Shows content of registers +C-c h x +helm-register +Shows content of registers -C-c h t -helm-top -Helm interface to top +C-c h t +helm-top +Helm interface to top -C-c h s -helm-surfraw -Command line interface to many web search engines +C-c h s +helm-surfraw +Command line interface to many web search engines -C-c h g -helm-google-suggest -Interactively enter search terms and get results from Google in helm buffer +C-c h g +helm-google-suggest +Interactively enter search terms and get results from Google in helm buffer -C-c h c -helm-color -Lists all available faces +C-c h c +helm-color +Lists all available faces -C-c h M-: -helm-eval-expression-with-eldoc -Get instant results for Emacs lisp expressions in the helm buffer +C-c h M-: +helm-eval-expression-with-eldoc +Get instant results for Emacs lisp expressions in the helm buffer -C-c h C-, -helm-calcul-expression -Helm interface to calc +=C-c h C-,= +helm-calcul-expression +Helm interface to calc -C-c C-l -helm-eshell-history -Interface to eshell history +C-c C-l +helm-eshell-history +Interface to eshell history -C-c C-l -helm-comint-input-ring -Interface to shell history +C-c C-l +helm-comint-input-ring +Interface to shell history -C-c C-l -helm-mini-buffer-history -Interface to mini-buffer history +C-c C-l +helm-mini-buffer-history +Interface to mini-buffer history @@ -2859,21 +2932,9 @@

    Summa

    - -
    - - - comments powered by Disqus +

    Created: 2016-12-05 Mon 12:20

    +

    Emacs 24.5.1 (Org mode 8.2.10)

    +

    Validate

    - \ No newline at end of file + diff --git a/docs/helm-projectile.html b/docs/helm-projectile.html index 20862c5..e140a6b 100644 --- a/docs/helm-projectile.html +++ b/docs/helm-projectile.html @@ -4,10 +4,9 @@ Exploring large projects with Projectile and Helm Projectile - + - - + -
    - - - - -

    Back to Table of Contents

    -

    Exploring large projects with Projectile and Helm Projectile

    Table of Contents

    @@ -226,11 +161,11 @@

    Table of Contents

    -

    Demos

    +

    1 Demos

    -

    Select and open multiple files

    +

    1.1 Select and open multiple files

    Demo (begins when START DEMO appears in minibuffer): @@ -250,7 +185,7 @@

    -

    Open file at point anywhere

    +

    1.2 Open file at point anywhere

    @@ -283,7 +218,7 @@

    -

    Copy files anywhere

    +

    1.3 Copy files anywhere

    Demo (begins when START DEMO appears in minibuffer): @@ -308,7 +243,7 @@

    -

    Delete files anywhere

    +

    1.4 Delete files anywhere

    Demo (begins when START DEMO appears in minibuffer): @@ -328,7 +263,7 @@

    -

    Switch between current file and other files with same names but different extensions

    +

    1.5 Switch between current file and other files with same names but different extensions

    @@ -370,7 +305,7 @@

    -

    What is Projectile?

    +

    2 What is Projectile?

    @@ -481,7 +416,7 @@

    -

    All-in-one command: helm-projectile, C-c p h

    +

    4 All-in-one command: helm-projectile, C-c p h

    @@ -619,14 +554,14 @@

    -

    File management

    +

    6 File management

    -

    Command: helm-projectile-find-file, C-c p f

    +

    6.1 Command: helm-projectile-find-file, C-c p f

    -Usage: This command lists all files in a project for users to narrow +Usage: This command lists all files in a project for users to narrow down to wanted files. Some frequently used actions that cover open, rename, copy, delete,search and other miscelaneous operations. Once you mastered the actions of helm-projectile-find-file, you master @@ -647,7 +582,7 @@

    -

    Open

    +

    6.1.1 Open

    • Find File (default action bound to RET): open files; if multiple @@ -690,7 +625,7 @@

      Tramp syntax to open file as root. Just browse file to anywhere, and when needed, open it as root -instantly. +instantly.

      Demo (begins when START DEMO appears in minibuffer): @@ -730,7 +665,7 @@

      -

      Move and Rename

      +

      6.1.2 Move and Rename

      • Rename file(s) (M-R): Rename marked files. To mark files, press @@ -784,7 +719,7 @@

        -

        Copy and Delete

        +

        6.1.3 Copy and Delete

        • Copy file(s) (M-C): similar to Rename File(s) action but copy @@ -804,7 +739,7 @@

          -

          Search and Replace

          +

          6.1.4 Search and Replace

            @@ -827,7 +762,7 @@

            -

            Miscelaneous

            +

            6.1.5 Miscelaneous

            • Insert as org link (C-c @): Insert the current file that @@ -911,7 +846,7 @@

              -

              Command: helm-projectile-find-file-in-known-projects, C-c p F

              +

              6.2 Command: helm-projectile-find-file-in-known-projects, C-c p F

              This command is another one that can be used outside of any @@ -933,7 +868,7 @@

              -

              Command: helm-projectile-find-file-dwim, C-c p g

              +

              6.3 Command: helm-projectile-find-file-dwim, C-c p g

              Usage: Find file based on context at point (do what you mean): @@ -973,10 +908,10 @@

              -

              Command: helm-projectile-find-dir, C-c p d

              +

              6.4 Command: helm-projectile-find-dir, C-c p d

              -Usage: List available directories in the current project. +Usage: List available directories in the current project.

              @@ -997,7 +932,7 @@

              -

              Command: helm-projectile-recentf, C-c p e

              +

              6.5 Command: helm-projectile-recentf, C-c p e

              @@ -1076,7 +1011,7 @@

              -

              Caching

              +

              6.7 Caching

              Usage: In large projects, caching can significantly speedup file and @@ -1086,7 +1021,7 @@

              -
              (setq projectile-enable-caching t)
              +
              (setq projectile-enable-caching t)
               

              @@ -1104,7 +1039,7 @@

              -

              Command: projectile-invalidate-cache, C-c p i

              +

              6.7.1 Command: projectile-invalidate-cache, C-c p i

              Usage: As the command name suggests, it invalidates the current cache and @@ -1114,7 +1049,7 @@

              -

              Command: projectile-cache-current-file, C-c p z

              +

              6.7.2 Command: projectile-cache-current-file, C-c p z

              Usage: Add the file of current selected buffer to cache. @@ -1123,7 +1058,7 @@

              -

              Command: projectile-purge-file-from-cache

              +

              6.7.3 Command: projectile-purge-file-from-cache

              Usage: Remove a file from the cache. Once removed, you won't see it @@ -1134,7 +1069,7 @@

              -

              Command: projectile-purge-dir-from-cache

              +

              6.7.4 Command: projectile-purge-dir-from-cache

              Usage: Remove a directory from the cache. @@ -1144,7 +1079,7 @@

              -

              Virtual directory manager

              +

              7 Virtual directory manager

              Now that you know how to manage your project files with Helm and @@ -1236,14 +1171,14 @@

              -

              Store virtual directories with Bookmark (or Bookmark+)

              +

              7.1 Store virtual directories with Bookmark (or Bookmark+)

              Using Bookmark (or Bookmark+), you can actually save your virtual Dired buffers and preserve this knowledge for future reference, when you want to quickly review related files to improve or fix bug. You won't have to reconnect related files again, and often it takes quite some -time since you could forget many things. +time since you could forget many things.

              @@ -1260,11 +1195,11 @@

              -

              Buffer management

              +

              8 Buffer management

              -

              Command: helm-projectile-switch-to-buffer, C-c p b

              +

              8.1 Command: helm-projectile-switch-to-buffer, C-c p b

              Usage: List all opened buffers in current project. The command has a @@ -1276,11 +1211,11 @@

              -

              Search in project

              +

              9 Search in project

              -

              Command: helm-projectile-grep, C-c p s g

              +

              9.1 Command: helm-projectile-grep, C-c p s g

              @@ -1363,7 +1298,7 @@

              -

              Command: helm-projectile-ack, C-c p s a

              +

              9.2 Command: helm-projectile-ack, C-c p s a

              This is a replacement command for projectile-ack. Similar to @@ -1403,7 +1338,7 @@

              -

              Command: helm-projectile-ag, C-c p s s

              +

              9.3 Command: helm-projectile-ag, C-c p s s

              This is a replacement command for projectile-ag. Similar to @@ -1441,7 +1376,7 @@

              -

              Summary of Keybindings

              +

              10 Summary of Keybindings

              diff --git a/docs/index.html b/docs/index.html index cb00139..4d8849e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Emacs Mini Manual + - -Table of Contents - - + -
              - - - - -
              +
              +

              Created: 2016-12-05 Mon 12:23

              +

              Emacs 24.5.1 (Org mode 8.2.10)

              +

              Validate

              - \ No newline at end of file + diff --git a/docs/setup-emacs-windows.html b/docs/setup-emacs-windows.html index cbb36ce..6a04721 100644 --- a/docs/setup-emacs-windows.html +++ b/docs/setup-emacs-windows.html @@ -3,30 +3,22 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - Setup Emacs with PDF Tools and Xwidgets web browser on Windows + + - - + -
              - - - - -

              Back to Table of Contents

              -

              Setup Emacs with PDF Tools and Xwidgets web browser on Windows

              @@ -177,22 +153,24 @@

              Table of Contents

              Installation instructions:

              -
              -

              Prerequisite

              -
              +
              +

              1 Prerequisite

              +
                -
              • Download Cywing setup from Cygwin's Install page.
              • +
              • Download Cywing setup from Cygwin's Install page. +
              • If you want only the PDF reader, you can install the Emacs shipped by Cygwin. However, if you also want the web browser, then you need to compile your own -Emacs 25 from source.
              • +Emacs 25 from source. +
              -
              -

              With PDF reader

              -
              +
              +

              2 With PDF reader

              +

              DEMO (Notice how I press some text in PDF file and Latex buffer jumps to corresponding automatically). @@ -209,7 +187,8 @@

              With PDF reader

                -
              • emacs-w32 (Editors category)
              • +
              • emacs-w32 (Editors category) +

              @@ -217,12 +196,18 @@

              With PDF reader

                -
              • make (Devel category)
              • -
              • gcc-core (Devel category)
              • -
              • gcc-g++ (Devel category)
              • -
              • autoconf (Devel category)
              • -
              • automake (Devel category)
              • -
              • perl (Perl category)
              • +
              • make (Devel category) +
              • +
              • gcc-core (Devel category) +
              • +
              • gcc-g++ (Devel category) +
              • +
              • autoconf (Devel category) +
              • +
              • automake (Devel category) +
              • +
              • perl (Perl category) +

              @@ -230,8 +215,10 @@

              With PDF reader

                -
              • libpoppler-devel (Lib category)
              • -
              • libpoppler-glib-devel (Lib category)
              • +
              • libpoppler-devel (Lib category) +
              • +
              • libpoppler-glib-devel (Lib category) +

              @@ -276,9 +263,12 @@

              With PDF reader

                -
              • M-x package-install-file
              • -
              • Press RET
              • -
              • Select pdf-tools-${VERSION}.tar RET (the tar file is in your repository).
              • +
              • M-x package-install-file +
              • +
              • Press RET +
              • +
              • Select pdf-tools-${VERSION}.tar RET (the tar file is in your repository). +

              @@ -288,16 +278,16 @@

              With PDF reader

              -
              (pdf-tools-install)
              -(setq pdf-info-epdfinfo-program "/usr/bin/epdfinfo.exe")
              +
              (pdf-tools-install)
              +(setq pdf-info-epdfinfo-program "/usr/bin/epdfinfo.exe")
               
              -
              -

              With Xwidgets browser

              -
              +
              +

              3 With Xwidgets browser

              +

              DEMO

              @@ -307,15 +297,24 @@

              With Xwidgets browser

                -
              • libgif-devel (Graphics category)
              • -
              • libtiff-devel (Lib category)
              • -
              • libjpeg-devel (Devel category)
              • -
              • libxpm-devel (Devel category)
              • -
              • libgnutls-devel (Devel category)
              • -
              • libpng-devel (Devel category)
              • -
              • libncurses-devel (Lib category)
              • -
              • libgtk3-drivel (Lib category)
              • -
              • libwebkitgtk3.0-devel (Lib category)
              • +
              • libgif-devel (Graphics category) +
              • +
              • libtiff-devel (Lib category) +
              • +
              • libjpeg-devel (Devel category) +
              • +
              • libxpm-devel (Devel category) +
              • +
              • libgnutls-devel (Devel category) +
              • +
              • libpng-devel (Devel category) +
              • +
              • libncurses-devel (Lib category) +
              • +
              • libgtk3-drivel (Lib category) +
              • +
              • libwebkitgtk3.0-devel (Lib category) +

              @@ -323,8 +322,10 @@

              With Xwidgets browser

                -
              • xorg-server (X11 category)
              • -
              • xinit (X11 category)
              • +
              • xorg-server (X11 category) +
              • +
              • xinit (X11 category) +

              @@ -345,7 +346,7 @@

              With Xwidgets browser

              -
              echo "export DISPLAY=:0.0" >> .bash_profile
              +
              echo "export DISPLAY=:0.0" >> .bash_profile
               
              @@ -372,21 +373,9 @@

              With Xwidgets browser

              - -
              - - - comments powered by Disqus +

              Created: 2016-12-05 Mon 12:20

              +

              Emacs 24.5.1 (Org mode 8.2.10)

              +

              Validate

              - \ No newline at end of file + diff --git a/docs/static/setup-emacs-windows/cygwin_example_install.png b/docs/static/setup-emacs-windows/cygwin_example_install.png deleted file mode 100755 index 482a7aea7aa68114458e7c96dd6cbbd72cfc1b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138455 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 (LL)...=. This is common behavior of -=Semantic=: when you perform a jump to a symbol or perform a -completion, =Semantic= tries to be accurate by parsing all the -included files and all the included files in the included files and so -on, until it reaches the end. - -You may worry that this process would take a long time. Indeed, it -does. However, this is just a one time process. Once it is parsed, -Semantic will cache the parsing result for future use. The next time -you perform some action on the parsed code, you will get your desired -output instantly. - -** Command: =global-semanticdb-minor-mode= -:PROPERTIES: -:ID: 668b4f56-2977-4783-b7cb-b5d84a0dd769 -:END: -As mentioned above, Semantic caches parsing output for future -use. To do that, =semanticdb-minor-mode= must be activated. In -Semantic DB mode, Semantic parsers store results in a database, which -can be saved for future Emacs sessions. The cache is saved in -directory specified by =semanticdb-default-save-directory= -variable. The default directory is =~/.emacs.d/semanticdb=. - -** Command: =global-semantic-idle-scheduler-mode= -:PROPERTIES: -:ID: fb0dd2f4-78c0-4e9c-b9d7-0ec4caa3fde3 -:END: -When =semantic-idle-scheduler-mode= is enabled, Emacs periodically -checks to see if the buffer is out of date, and reparses while the -user is idle (not typing). When this mode is off, a buffer is only -reparsed when user explicitly issue some command. - -With =semantic-idle-scheduler-mode=, Emacs keeps track live changes of -your source code. - -** Command: =global-semantic-idle-summary-mode= -:PROPERTIES: -:ID: 3988c0b5-5cd2-409f-9825-54ac476bca7a -:END: -...[screenshot]... -When this minor mode is enabled, the echo area displays a summary of -the symbol at point whenever Emacs is idle. For example, in the above -picture, the function interface is displayed because the symbol at -point is a function name. - -** Command: =global-semantic-decoration-mode= -:PROPERTIES: -:ID: fd13b113-2460-4dea-8bae-aadc7bcf8d1d -:END: -...screenshot]... - -This mode "decorates" certain type of tags, i.e. included header, -function name, class... This can be defined by users. - -** Command: =global-semantic-idle-completions-mode= -:PROPERTIES: -:ID: b6630c63-04b2-4ddc-a209-273384b1f8f9 -:END: -When enabled, Emacs displays a list of possible completions at idle -time. - -While a completion is displayed, RET accepts the completion; M-n and -M-p cycle through completion alternatives; TAB attempts to complete as -far as possible, and cycles if no additional completion is possible; -and any other command cancels the completion: - -...[screenshot]... - -** Command: =global-semantic-highlight-func-mode= -:PROPERTIES: -:ID: 42e31b85-90de-4bf8-99fb-8778d312178d -:END: -...[screenshot]... -** Command: =global-semantic-stickyfunc-mode= -:PROPERTIES: -:ID: d5bd8f70-92c2-4143-8be1-2d5be650ea28 -:END: -...[screenshot]... -** Command: =global-semantic-mru-bookmark-mode= -:PROPERTIES: -:ID: fe4d8d37-0455-4a7d-8a18-6ddb1226a046 -:END: -...[screenshot]... - -** Command: =global-cedet-m3-minor-mode= -:PROPERTIES: -:ID: e6ccdc02-c5ca-45a3-9114-bdc6bcc8ac7d -:END: -...[screenshot]... - -** Command: =global-semantic-idle-local-symbol-highlight-mode= -:PROPERTIES: -:ID: 67b03c99-46dc-4c30-940e-de842949447f -:END: -...[screenshot]... - -** Command: =global-semantic-highlight-edits-mode= -:PROPERTIES: -:ID: 4f2ee6d4-e10d-40c6-b5fd-78712946b312 -:END: -...[screenshot]... - -** Command: =global-semantic-show-unmatched-syntax-mode= -:PROPERTIES: -:ID: 84a2c5de-45ca-4788-988e-3ad3739725b5 -:END: -...[screenshot]... - -** Command: =global-semantic-show-parser-state-mode= -:PROPERTIES: -:ID: 06bd6895-c58c-460a-ac10-465acd03a6fd -:END: -...[screenshot]... - -* Setup and manage project with EDE -:PROPERTIES: -:ID: 243bfa47-475a-41fb-8f2f-78af150c95eb -:END: -* Source code navigation -:PROPERTIES: -:ID: 2b850804-a33b-4f37-96fd-5bb4e422dbee -:END: -** System include path -:PROPERTIES: -:ID: 754d6360-f8ee-4985-8a0b-794b59435123 -:END: - -** Project include path -:PROPERTIES: -:ID: ca17991f-1d1f-4767-b8fc-e9c06c44c25a -:END: - -** Find definitions in current buffer -:PROPERTIES: -:ID: d146d5d0-092c-4e62-a362-9dcb02a64a39 -:END: - -** Find definitions in project -:PROPERTIES: -:ID: 0331265b-7c3f-457e-ba1d-ef6c3cd24208 -:END: -** Find references in project -:PROPERTIES: -:ID: 410cfad4-a08d-4139-8c37-cb1bff5bd44e -:END: -* Source code completion -:PROPERTIES: -:ID: 419c04f5-95b6-4457-83fe-9288361e7bcf -:END: -* Source code manipulation -:PROPERTIES: -:ID: 0fa2afe0-728c-49f6-86f1-7769cebc5de0 -:END: -** Folding -:PROPERTIES: -:ID: 48b6ad5f-24e2-41c3-9a44-c1decdde6910 -:END: -** Narrowing -:PROPERTIES: -:ID: 000644fa-84e8-42a2-b780-6ff1b0c84a5a -:END: -** Semantically kill/copy/yank (copy/cut/paste) -:PROPERTIES: -:ID: 21edcf89-82dc-476c-ae5d-714cdce1c7b4 -:END: -* Integration with other tools -:PROPERTIES: -:ID: 4b5a5bfe-4589-4c7e-9f0d-4e24ad37153b -:END: -** GNU Global -:PROPERTIES: -:ID: 21ea863a-a4be-4f96-b83c-1d1cf1417621 -:END: -** Exuberant Ctags -:PROPERTIES: -:ID: 846ea88b-da99-4102-b909-136b9a6aefcd -:END: - -* Senator -:PROPERTIES: -:ID: 1b5ad129-a77f-4dd5-b9de-97a16f0126d3 -:END: -** Copy/Paste -:PROPERTIES: -:ID: a7861142-010c-4640-9ec7-d201dc918f92 -:END: - -- =C-c , M-w= runs =senator-copy-tag=, take the current tag, and place - it in the tag ring. - -- =C-c , C-w= runs =senator-kill-tag=, take the current tag, place it - in the tag ring, and kill it. Killing the tag removes the text for - that tag, and places it into the kill ring. Retrieve that text with - *C-y*. - - The above commands are basically like normal =M-w= and =C-w=, but are - used for tags. For example, run =C-c , C-w= with point inside a - function definition kills the whole function body and its - interface, and can be yanked back with *C-y*: - - - -- =C-c , C-y= runs =senator-yank-tag=, yank a tag from the tag - ring. The form the tag takes is different depending on where it is - being yanked to. - -- =C-c , r= runs =senator-copy-tag-to-register=, copy the current tag - into a register. - - - - with prefix argument will delete the text of the tag to the kill - ring. diff --git a/org/ebrowse.org b/org/ebrowse_old.org similarity index 100% rename from org/ebrowse.org rename to org/ebrowse_old.org diff --git a/org/emacs-tutor.org b/org/emacs-tutor1.org similarity index 100% rename from org/emacs-tutor.org rename to org/emacs-tutor1.org diff --git a/org/index.org b/org/index.org index 13f8f80..6a75403 100644 --- a/org/index.org +++ b/org/index.org @@ -1,11 +1,13 @@ -#+TITLE: Table of Contents +#+TITLE: Emacs Mini Manual - + [[file:emacs-tutor.org][Emacs Mini Manual (PART 1) - THE BASICS]] - + [[file:emacs-tutor2.org][Emacs Mini Manual (PART 2) - LISP PRIMER: WHY PARENTHESES MATTER]] - + [[file:emacs-tutor3.org][Emacs Mini Manual (PART 3) - CUSTOMIZING AND EXTENDING EMACS]] - + [[file:c-ide.org][Setup C/C++ Development Environment for Emacs]] - + [[file:helm-intro.org][A Package in a league of its own: =Helm=]] - + [[file:helm-projectile.org][Exploring large projects with Projectile and Helm Projectile]] - + [[file:emacs-for-proglang.org][Emacs for Programming Languages course on Coursera]] - + [[file:setup-emacs-windows.org][Setup Emacs with PDF Tools and Xwidgets web browser on Windows]] ++ Pages + + [[file:emacs-tutor.org][Emacs Mini Manual (PART 1) - The Basics]] + + [[file:emacs-tutor2.org][Emacs Mini Manual (PART 2) - Lisp Primer: Why Parentheses Matter]] + + [[file:emacs-tutor3.org][Emacs Mini Manual (PART 3) - Customizing And Extending Emacs]] + + [[file:c-ide.org][Setup C/C++ Development Environment for Emacs]] + + [[file:helm-intro.org][A Package in a league of its own: =Helm=]] + + [[file:helm-projectile.org][Exploring large projects with Projectile and Helm Projectile]] + + [[file:emacs-for-proglang.org][Emacs for Programming Languages course on Coursera]] + + [[file:setup-emacs-windows.org][Setup Emacs with PDF Tools and Xwidgets web browser on Windows]] +(source: https://boruch-baum.github.io/emacs_mini_manual/) diff --git a/org/publish.el b/org/publish.el index 000bb0a..5ebfe95 100644 --- a/org/publish.el +++ b/org/publish.el @@ -12,27 +12,21 @@ (setq org-publish-project-alist '(("orgfiles" :base-directory "./" - :base-extension "org" - :publishing-directory "../" + :base-extension "org" + :exclude "c-ide-irony_bak.org\\|ebrowse.org" + :publishing-directory "../docs/" :publishing-function org-html-publish-to-html :headline-levels 3 :section-numbers t - :with-toc 1 + :with-toc 1 :html-head "" - :html-preamble t) - - ("images" + href=\"./static/worg.css\" type=\"text/css\"/>" + :html-preamble t) + ("images+css" :base-directory "./" - :recursive t + :recursive t :base-extension "jpg\\|gif\\|png" - :publishing-directory "../" + :include ("static/worg.css") + :publishing-directory "../docs/" :publishing-function org-publish-attachment) - - ("other" - :base-directory "./" - :base-extension "css" - :recursive t - :publishing-directory "../" - :publishing-function org-publish-attachment) - ("website" :components ("orgfiles" "images" "other")))) + ("website" :components ("orgfiles" "images+css")))) From 34f2d5d6e27c1a6a1d4234c6691d79ff39ee1a3d Mon Sep 17 00:00:00 2001 From: Boruch Baum Date: Tue, 6 Dec 2016 00:27:36 -0500 Subject: [PATCH 09/11] c-ide.org - correct "git clone" command * As written, the git clone command would produce a fatal error 'folder exists'. * Added alternatives to git clone. * Other fixes to demo install process. * Updates to publish.el for filenames and documentation. * README.md formatting. --- README.md | 14 +++--- docs/c-ide.html | 83 +++++++++++++++++------------------ docs/emacs-for-proglang.html | 4 +- docs/emacs-tutor1.html | 4 +- docs/emacs-tutor2.html | 4 +- docs/emacs-tutor3.html | 4 +- docs/helm-intro.html | 6 +-- docs/helm-projectile.html | 4 +- docs/index.html | 4 +- docs/setup-emacs-windows.html | 4 +- org/c-ide.org | 61 +++++++++++++------------ org/publish.el | 6 +-- 12 files changed, 101 insertions(+), 97 deletions(-) diff --git a/README.md b/README.md index 0b1e5f6..e696899 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ Emacs Mini Manual ================= -1] The manual is viewable at: +1. The manual is viewable at: https://boruch-baum.github.io/emacs_mini_manual/ -2] The page names are: +2. The page names are: - * Emacs Mini Manual (PART 1) - THE BASICS + * Emacs Mini Manual (Part 1) - The Basics - * Emacs Mini Manual (PART 2) - LISP PRIMER: WHY PARENTHESES MATTER + * Emacs Mini Manual (Part 2) - Lisp Primer: Why Parentheses Matter - * Emacs Mini Manual (PART 3) - CUSTOMIZING AND EXTENDING EMACS + * Emacs Mini Manual (Part 3) - Customizing And Extending Emacs * Setup C/C++ Development Environment for Emacs @@ -25,9 +25,9 @@ Emacs Mini Manual * Setup Emacs with PDF Tools and Xwidgets web browser on Windows -3] The pages are produced from emacs org files, which are in the `org' +3. The pages are produced from emacs org files, which are in the `org' folder. See `org/publish.el' for how to convert them to html. -4] This is a fork of https://github.com/tuhdo/tuhdo.github.io +4. This is a fork of https://github.com/tuhdo/tuhdo.github.io + Refer to CHANGELOG file for how I've altered it. diff --git a/docs/c-ide.html b/docs/c-ide.html index 034fc89..e98cd87 100644 --- a/docs/c-ide.html +++ b/docs/c-ide.html @@ -4,7 +4,7 @@ C/C++ Development Environment for Emacs - + + href="./static/worg.css" type="text/css"/>