Should have committed a long time ago.
This commit is contained in:
parent
8dc6802e29
commit
5efebc68b8
@ -1,42 +1,53 @@
|
||||
;; no splash screen
|
||||
(setq inhibit-splash-screen t)
|
||||
;; we can require features
|
||||
(require 'cl)
|
||||
(require 'package)
|
||||
|
||||
;; show matching parenthesis
|
||||
(show-paren-mode t)
|
||||
|
||||
;; answer with y/n
|
||||
(fset 'yes-or-no-p 'y-or-n-p)
|
||||
|
||||
;; stop blinking cursor
|
||||
(blink-cursor-mode 0)
|
||||
|
||||
;; overwrite marked text
|
||||
(delete-selection-mode t)
|
||||
|
||||
;; show column number in mode-line
|
||||
(column-number-mode t)
|
||||
;; add mirrors for list-packages
|
||||
(add-to-list 'package-archives
|
||||
'("melpa" . "http://melpa.milkbox.net/packages/"))
|
||||
|
||||
;; needed to use things downloaded with the package manager
|
||||
(package-initialize)
|
||||
|
||||
;; add mirrors for list-packages
|
||||
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
|
||||
("marmalade" . "http://marmalade-repo.org/packages/")
|
||||
("melpa" . "http://melpa.milkbox.net/packages/")))
|
||||
;; install some packages if missing
|
||||
(let* ((packages '(auto-complete
|
||||
ido-vertical-mode
|
||||
monokai-theme
|
||||
multiple-cursors
|
||||
undo-tree
|
||||
;; if you want more packages, add them here
|
||||
))
|
||||
(packages (remove-if 'package-installed-p packages)))
|
||||
(when packages
|
||||
(package-refresh-contents)
|
||||
(mapc 'package-install packages)))
|
||||
|
||||
;; choose a color-theme
|
||||
(load-theme 'wombat t)
|
||||
;; no splash screen
|
||||
(setq inhibit-splash-screen t)
|
||||
|
||||
;; get the default config for auto-complete (downloaded with
|
||||
;; package-manager)
|
||||
(require 'auto-complete-config)
|
||||
;; show matching parenthesis
|
||||
(show-paren-mode 1)
|
||||
|
||||
;; load the default config of auto-complete
|
||||
(ac-config-default)
|
||||
;; show column number in mode-line
|
||||
(column-number-mode 1)
|
||||
|
||||
;; enable ido-mode, this changes the way files are selected in the
|
||||
;; minibuffer
|
||||
(ido-mode t)
|
||||
;; overwrite marked text
|
||||
(delete-selection-mode 1)
|
||||
|
||||
;; changes selection in the minibuffer
|
||||
(ido-mode 1)
|
||||
|
||||
;; use ido everywhere
|
||||
(ido-everywhere 1)
|
||||
|
||||
;; show vertically
|
||||
(ido-vertical-mode 1)
|
||||
|
||||
;; use undo-tree-mode globally
|
||||
(global-undo-tree-mode 1)
|
||||
|
||||
;; stop blinking cursor
|
||||
(blink-cursor-mode 0)
|
||||
|
||||
;; no menubar
|
||||
(menu-bar-mode 0)
|
||||
@ -51,12 +62,25 @@
|
||||
;; with 1 to enable this feature
|
||||
(global-linum-mode 0)
|
||||
|
||||
;; answer with y/n
|
||||
(fset 'yes-or-no-p 'y-or-n-p)
|
||||
|
||||
;; choose a color-theme
|
||||
(load-theme 'monokai t)
|
||||
|
||||
;; get the default config for auto-complete (downloaded with
|
||||
;; package-manager)
|
||||
(require 'auto-complete-config)
|
||||
|
||||
;; load the default config of auto-complete
|
||||
(ac-config-default)
|
||||
|
||||
;; kills the active buffer, not asking what buffer to kill.
|
||||
(global-set-key (kbd "C-x k") 'kill-this-buffer)
|
||||
|
||||
;; adds all autosave-files (i.e #test.txt#, test.txt~) in one
|
||||
;; directory, avoid clutter in filesystem.
|
||||
(defvar emacs-autosave-directory "~/.emacs.d/autosaves/")
|
||||
(defvar emacs-autosave-directory (concat user-emacs-directory "autosaves/"))
|
||||
(setq backup-directory-alist
|
||||
`((".*" . ,emacs-autosave-directory))
|
||||
auto-save-file-name-transforms
|
||||
@ -65,14 +89,12 @@
|
||||
;; defining a function that sets more accessible keyboard-bindings to
|
||||
;; hiding/showing code-blocs
|
||||
(defun hideshow-on ()
|
||||
(interactive)
|
||||
(local-set-key (kbd "<backtab>") 'hs-toggle-hiding)
|
||||
(local-set-key (kbd "C-c <right>") 'hs-show-block)
|
||||
(local-set-key (kbd "C-c C-<right>") 'hs-show-block)
|
||||
(local-set-key (kbd "C-c <left>") 'hs-hide-block)
|
||||
(local-set-key (kbd "C-c C-<left>") 'hs-hide-block)
|
||||
(local-set-key (kbd "C-c <up>") 'hs-hide-all)
|
||||
(local-set-key (kbd "C-c C-<up>") 'hs-hide-all)
|
||||
(local-set-key (kbd "C-c <down>") 'hs-show-all)
|
||||
(local-set-key (kbd "C-c C-<down>") 'hs-show-all)
|
||||
(hs-minor-mode t))
|
||||
|
||||
;; now we have to tell emacs where to load these functions. Showing
|
||||
@ -110,10 +132,10 @@
|
||||
"Ident, untabify and unwhitespacify current buffer, or region if active."
|
||||
(interactive)
|
||||
(let ((beg (if (region-active-p) (region-beginning) (point-min)))
|
||||
(end (if (region-active-p) (region-end) (point-max))))
|
||||
(end (if (region-active-p) (region-end) (point-max))))
|
||||
(whitespace-cleanup)
|
||||
(indent-region beg end nil)
|
||||
(untabify beg end)))
|
||||
|
||||
(untabify beg end)))
|
||||
;; bindes the tidy-function to C-TAB
|
||||
(global-set-key (kbd "<C-tab>") 'tidy)
|
||||
|
@ -1,250 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>emacs-init.el</title>
|
||||
<meta name="generator" content="emacs 24.2.1; htmlfontify 0.21" />
|
||||
<style type="text/css"><!--
|
||||
body { font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; color: #eeeeec; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.default { font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; color: #eeeeec; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.default a { font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; color: #eeeeec; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.doc { color: #888a85; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.doc a { color: #888a85; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.function-name { color: #edd400; font-style: italic; font-weight: 700; font-family: Inconsolata; font-stretch: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.function-name a { color: #edd400; font-style: italic; font-weight: 700; font-family: Inconsolata; font-stretch: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.variable-name { color: #eeeeec; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.variable-name a { color: #eeeeec; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.constant { color: #8ae234; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.constant a { color: #8ae234; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.keyword { color: #729fcf; font-weight: 700; font-family: Inconsolata; font-stretch: normal; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.keyword a { color: #729fcf; font-weight: 700; font-family: Inconsolata; font-stretch: normal; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.string { color: #ad7fa8; font-style: italic; font-family: Inconsolata; font-stretch: normal; font-weight: 500; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.string a { color: #ad7fa8; font-style: italic; font-family: Inconsolata; font-stretch: normal; font-weight: 500; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.comment { color: #888a85; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.comment a { color: #888a85; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
span.comment-delimiter { color: #888a85; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: none; }
|
||||
span.comment-delimiter a { color: #888a85; font-family: Inconsolata; font-stretch: normal; font-weight: 500; font-style: normal; background: #1d282b; font-size: 11pt; text-decoration: underline; }
|
||||
--></style>
|
||||
|
||||
<script type="text/javascript"><!--
|
||||
// this function is needed to work around
|
||||
// a bug in IE related to element attributes
|
||||
function hasClass(obj)
|
||||
{
|
||||
var result = false;
|
||||
if (obj.getAttributeNode("class") != null)
|
||||
{
|
||||
result = obj.getAttributeNode("class").value;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function stripe(id)
|
||||
{
|
||||
// the flag we'll use to keep track of
|
||||
// whether the current row is odd or even
|
||||
var even = false;
|
||||
|
||||
// if arguments are provided to specify the colors
|
||||
// of the even & odd rows, then use the them;
|
||||
// otherwise use the following defaults:
|
||||
var evenColor = arguments[1] ? arguments[1] : "#fff";
|
||||
var oddColor = arguments[2] ? arguments[2] : "#ddd";
|
||||
|
||||
// obtain a reference to the desired table
|
||||
// if no such table exists, abort
|
||||
var table = document.getElementById(id);
|
||||
if (! table) { return; }
|
||||
|
||||
// by definition, tables can have more than one tbody
|
||||
// element, so we'll have to get the list of child
|
||||
// <tbody>s
|
||||
var tbodies = table.getElementsByTagName("tbody");
|
||||
|
||||
// and iterate through them...
|
||||
for (var h = 0; h < tbodies.length; h++)
|
||||
{
|
||||
// find all the <tr> elements...
|
||||
var trs = tbodies[h].getElementsByTagName("tr");
|
||||
|
||||
// ... and iterate through them
|
||||
for (var i = 0; i < trs.length; i++)
|
||||
{
|
||||
// avoid rows that have a class attribute
|
||||
// or backgroundColor style
|
||||
if (! hasClass(trs[i]) &&
|
||||
! trs[i].style.backgroundColor)
|
||||
{
|
||||
// get all the cells in this row...
|
||||
var tds = trs[i].getElementsByTagName("td");
|
||||
|
||||
// and iterate through them...
|
||||
for (var j = 0; j < tds.length; j++)
|
||||
{
|
||||
var mytd = tds[j];
|
||||
|
||||
// avoid cells that have a class attribute
|
||||
// or backgroundColor style
|
||||
if (! hasClass(mytd) &&
|
||||
! mytd.style.backgroundColor)
|
||||
{
|
||||
mytd.style.backgroundColor =
|
||||
even ? evenColor : oddColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
// flip from odd to even, or vice-versa
|
||||
even = ! even;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function toggle_invis( name )
|
||||
{
|
||||
var filter =
|
||||
{ acceptNode:
|
||||
function( node )
|
||||
{ var classname = node.id;
|
||||
if( classname )
|
||||
{ var classbase = classname.substr( 0, name.length );
|
||||
if( classbase == name ) { return NodeFilter.FILTER_ACCEPT; } }
|
||||
return NodeFilter.FILTER_SKIP; } };
|
||||
var walker = document.createTreeWalker( document.body ,
|
||||
NodeFilter.SHOW_ELEMENT ,
|
||||
filter ,
|
||||
false );
|
||||
while( walker.nextNode() )
|
||||
{
|
||||
var e = walker.currentNode;
|
||||
if( e.style.display == "none" ) { e.style.display = "inline"; }
|
||||
else { e.style.display = "none"; }
|
||||
}
|
||||
}
|
||||
--> </script>
|
||||
</head>
|
||||
<body onload="stripe('index'); return true;">
|
||||
|
||||
<pre><span class="comment-delimiter">;; </span><span class="comment">no splash screen
|
||||
</span>(setq inhibit-splash-screen t)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">show matching parenthesis
|
||||
</span>(show-paren-mode t)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">answer with y/n
|
||||
</span>(fset 'yes-or-no-p 'y-or-n-p)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">stop blinking cursor
|
||||
</span>(blink-cursor-mode 0)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">overwrite marked text
|
||||
</span>(delete-selection-mode t)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">show column number in mode-line
|
||||
</span>(column-number-mode t)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">needed to use things downloaded with the package manager
|
||||
</span>(package-initialize)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">add mirrors for list-packages
|
||||
</span>(setq package-archives '((<span class="string">"gnu"</span> . <span class="string">"http://elpa.gnu.org/packages/"</span>)
|
||||
(<span class="string">"marmalade"</span> . <span class="string">"http://marmalade-repo.org/packages/"</span>)
|
||||
(<span class="string">"melpa"</span> . <span class="string">"http://melpa.milkbox.net/packages/"</span>)))
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">choose a color-theme
|
||||
</span>(load-theme 'wombat t)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">get the default config for auto-complete (downloaded with
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">package-manager)
|
||||
</span>(<span class="keyword">require</span> '<span class="constant">auto-complete-config</span>)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">load the default config of auto-complete
|
||||
</span>(ac-config-default)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">enable ido-mode, this changes the way files are selected in the
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">minibuffer
|
||||
</span>(ido-mode t)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">no menubar
|
||||
</span>(menu-bar-mode 0)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">no toolbar either
|
||||
</span>(tool-bar-mode 0)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">scrollbar? no
|
||||
</span>(scroll-bar-mode 0)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">global-linum-mode shows line numbers in all buffers, exchange 0
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">with 1 to enable this feature
|
||||
</span>(global-linum-mode 0)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">kills the active buffer, not asking what buffer to kill.
|
||||
</span>(global-set-key (kbd <span class="string">"C-x k"</span>) 'kill-this-buffer)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">adds all autosave-files (i.e #test.txt#, test.txt~) in one
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">directory, avoid clutter in filesystem.
|
||||
</span>(<span class="keyword">defvar</span> <span class="variable-name">emacs-autosave-directory</span> <span class="string">"~/.emacs.d/autosaves/"</span>)
|
||||
(setq backup-directory-alist
|
||||
`((<span class="string">".*"</span> . ,emacs-autosave-directory))
|
||||
auto-save-file-name-transforms
|
||||
`((<span class="string">".*"</span> ,emacs-autosave-directory t)))
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">defining a function that sets more accessible keyboard-bindings to
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">hiding/showing code-blocs
|
||||
</span>(<span class="keyword">defun</span> <span class="function-name">hideshow-on</span> ()
|
||||
(local-set-key (kbd <span class="string">"C-c <right>"</span>) 'hs-show-block)
|
||||
(local-set-key (kbd <span class="string">"C-c C-<right>"</span>) 'hs-show-block)
|
||||
(local-set-key (kbd <span class="string">"C-c <left>"</span>) 'hs-hide-block)
|
||||
(local-set-key (kbd <span class="string">"C-c C-<left>"</span>) 'hs-hide-block)
|
||||
(local-set-key (kbd <span class="string">"C-c <up>"</span>) 'hs-hide-all)
|
||||
(local-set-key (kbd <span class="string">"C-c C-<up>"</span>) 'hs-hide-all)
|
||||
(local-set-key (kbd <span class="string">"C-c <down>"</span>) 'hs-show-all)
|
||||
(local-set-key (kbd <span class="string">"C-c C-<down>"</span>) 'hs-show-all)
|
||||
(hs-minor-mode t))
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">now we have to tell emacs where to load these functions. Showing
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">and hiding codeblocks could be useful for all c-like programming
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">(java is c-like) languages, so we add it to the c-mode-common-hook.
|
||||
</span>(add-hook 'c-mode-common-hook 'hideshow-on)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">adding shortcuts to java-mode, writing the shortcut folowed by a
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">non-word character will cause an expansion.
|
||||
</span>(<span class="keyword">defun</span> <span class="function-name">java-shortcuts</span> ()
|
||||
(define-abbrev-table 'java-mode-abbrev-table
|
||||
'((<span class="string">"psv"</span> <span class="string">"public static void main(String[] args) {"</span> nil 0)
|
||||
(<span class="string">"sop"</span> <span class="string">"System.out.printf"</span> nil 0)
|
||||
(<span class="string">"sopl"</span> <span class="string">"System.out.println"</span> nil 0)))
|
||||
(abbrev-mode t))
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">the shortcuts are only useful in java-mode so we'll load them to
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">java-mode-hook.
|
||||
</span>(add-hook 'java-mode-hook 'java-shortcuts)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">defining a function that guesses a compile command and bindes the
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">compile-function to C-c C-c
|
||||
</span>(<span class="keyword">defun</span> <span class="function-name">java-setup</span> ()
|
||||
(set (make-variable-buffer-local 'compile-command)
|
||||
(concat <span class="string">"javac "</span> (buffer-name)))
|
||||
(local-set-key (kbd <span class="string">"C-c C-c"</span>) 'compile))
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">this is a java-spesific function, so we only load it when entering
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">java-mode
|
||||
</span>(add-hook 'java-mode-hook 'java-setup)
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">defining a function that sets the right indentation to the marked
|
||||
</span><span class="comment-delimiter">;; </span><span class="comment">text, or the entire buffer if no text is selected.
|
||||
</span>(<span class="keyword">defun</span> <span class="function-name">tidy</span> ()
|
||||
<span class="doc">"Ident, untabify and unwhitespacify current buffer, or region if active."</span>
|
||||
(interactive)
|
||||
(<span class="keyword">let</span> ((beg (<span class="keyword">if</span> (region-active-p) (region-beginning) (point-min)))
|
||||
(end (<span class="keyword">if</span> (region-active-p) (region-end) (point-max))))
|
||||
(whitespace-cleanup)
|
||||
(indent-region beg end nil)
|
||||
(untabify beg end)))
|
||||
|
||||
<span class="comment-delimiter">;; </span><span class="comment">bindes the tidy-function to C-TAB
|
||||
</span>(global-set-key (kbd <span class="string">"<C-tab>"</span>) 'tidy)
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,39 +1,42 @@
|
||||
;; we can require features
|
||||
|
||||
|
||||
|
||||
;; add mirrors for list-packages
|
||||
|
||||
|
||||
;; needed to use downloaded packages
|
||||
|
||||
|
||||
;; install some packages if missing
|
||||
;; (auto-complete ido-vertical-mode monokai-theme multiple-cursors undo-tree)
|
||||
|
||||
|
||||
;; no splash screen
|
||||
|
||||
|
||||
;; show matching parenthesis
|
||||
|
||||
|
||||
;; answer with y/n
|
||||
|
||||
|
||||
;; stop blinking cursor
|
||||
;; show column number in mode-line
|
||||
|
||||
|
||||
;; overwrite marked text
|
||||
|
||||
|
||||
;; show column number in mode-line
|
||||
;; enable ido-mode, changes the way files are selected in the minibuffer
|
||||
|
||||
|
||||
;; needed to use things downloaded with the package manager
|
||||
;; use ido everywhere
|
||||
|
||||
|
||||
;; add mirrors for list-packages
|
||||
;; show vertically
|
||||
|
||||
|
||||
;; choose a color-theme (downloaded with package-manager)
|
||||
;; use undo-tree-mode globally
|
||||
|
||||
|
||||
;; get the default config for auto-complete (downloaded with
|
||||
;; package-manager)
|
||||
|
||||
|
||||
;; load the default config of auto-complete
|
||||
|
||||
|
||||
;; enable ido-mode, this changes the way files are selected in the
|
||||
;; minibuffer
|
||||
;; stop blinking cursor
|
||||
|
||||
|
||||
;; no menubar
|
||||
@ -49,6 +52,19 @@
|
||||
;; with 1 to enable this feature
|
||||
|
||||
|
||||
;; answer with y/n
|
||||
|
||||
|
||||
;; choose a color-theme
|
||||
|
||||
|
||||
;; get the default config for auto-complete (downloaded with
|
||||
;; package-manager)
|
||||
|
||||
|
||||
;; load the default config of auto-complete
|
||||
|
||||
|
||||
;; kills the active buffer, not asking what buffer to kill.
|
||||
|
||||
|
||||
@ -56,6 +72,7 @@
|
||||
;; directory, avoid clutter in filesystem.
|
||||
|
||||
|
||||
|
||||
;; defining a function that sets more accessible keyboard-bindings to
|
||||
;; hiding/showing code-blocs
|
||||
|
||||
@ -86,3 +103,4 @@
|
||||
|
||||
|
||||
;; bindes the tidy-function to C-TAB
|
||||
|
||||
|
1219
emacskurs.html
1219
emacskurs.html
File diff suppressed because it is too large
Load Diff
494
emacskurs.org
494
emacskurs.org
@ -1,268 +1,368 @@
|
||||
* Emacskurs
|
||||
** Intro
|
||||
*** Hva er Emacs?
|
||||
|
||||
- Teksteditor
|
||||
- Utvidbar (Elisp)
|
||||
- Over 30 år gammel
|
||||
- Over 2500 innebygde kommandoer
|
||||
- Fri programvare
|
||||
#+Title: Emacskurs
|
||||
#+Email: larstvei@ifi.uio.no
|
||||
|
||||
*** Buffere, vinduer og rammer
|
||||
#+OPTIONS: toc:1 num:nil \n:1
|
||||
#+REVEAL_TRANS: linear
|
||||
#+REVEAL_THEME: night
|
||||
#+REVEAL_THEME: moon
|
||||
#+REVEAL_SPEED: fast
|
||||
#+REVEAL_HLEVEL: 1
|
||||
|
||||
- Tekst vises i buffere
|
||||
- Du kan ha så mange åpene buffere du vil
|
||||
- En fil åpnes i et nytt buffer
|
||||
- Minibufferet (nederste linje), brukes til å skrive inn filnavn,
|
||||
buffernavn, etc...
|
||||
* Intro
|
||||
** Plan for kurset
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Før pause:
|
||||
- Innføring i Emacs
|
||||
- Nyttige kommander
|
||||
|
||||
- Emacs åpnes i en ramme
|
||||
- En kan ha flere vinduer i samme ramme
|
||||
- Etter pause:
|
||||
- Sette opp Emacs på Ifi's maskiner
|
||||
- Skrive en enkel konfigurasjonsfil
|
||||
- Bruke det vi lærte før pause
|
||||
|
||||
*** Modes
|
||||
** Hva er Emacs?
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Teksteditor
|
||||
- Utvidbar (Emacs Lisp)
|
||||
- Over 30 år gammel
|
||||
- Over 2500 innebygde kommandoer
|
||||
- Fri programvare
|
||||
|
||||
- Major modes
|
||||
- hvert buffer har kun én aktiv major mode
|
||||
- en major mode gir deg funksjonalitet for en bestemt type
|
||||
tekstredigering
|
||||
- de fleste programmeringsspråk har sin egen major mode
|
||||
** Rammer, vinduer og buffere
|
||||
|
||||
- Minor modes
|
||||
- du kan ha så mange aktive minor modes du ønsker
|
||||
- en minor mode tilbyr tilleggsfunksjonalitet
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Emacs åpnes i en ramme
|
||||
- Man kan ha flere vinduer i samme ramme
|
||||
- Tekst vises i buffere
|
||||
- Du kan ha så mange åpne buffere du vil
|
||||
- En fil åpnes i et nytt buffer
|
||||
- Minibufferet (nederste linje), brukes til å skrive inn filnavn, buffernavn, etc...
|
||||
|
||||
Modes tilføyer ofte egne tastekombinasjoner!
|
||||
** Modes
|
||||
|
||||
*** Tips
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Major modes
|
||||
- hvert buffer har kun én aktiv major mode
|
||||
- en major mode gir deg funksjonalitet for en bestemt type
|
||||
tekstredigering
|
||||
- de fleste programmeringsspråk har sin egen major mode
|
||||
|
||||
Emacs er annerledes å bruke enn mange andre programmer, så det
|
||||
krever tilvenning.
|
||||
- Minor modes
|
||||
- du kan ha så mange aktive minor modes du ønsker
|
||||
- en minor mode tilbyr tilleggsfunksjonalitet
|
||||
|
||||
- i begynnelsen
|
||||
- les og gjør «learn-by-doing tutorial» (C-h t)
|
||||
- tving deg selv til å bruke de kommandoene du lærer til de
|
||||
sitter i fingrene
|
||||
- unngå «pek og klikk»
|
||||
- Modes tilføyer ofte egne tastekombinasjoner!
|
||||
|
||||
- etter hvert (for spesielt interesserte)
|
||||
- skriv din egen configfil
|
||||
- lær litt elisp, og skriv dine egne funksjoner
|
||||
** Tips
|
||||
|
||||
- annet
|
||||
- gjør CAPS-LOCK om til en ekstra Control (Ctrl)
|
||||
- Emacs er annerledes å bruke enn mange andre programmer, så det krever tilvenning.
|
||||
|
||||
** Taster
|
||||
*** Terminologi for taster
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- i begynnelsen:
|
||||
- les og gjør «learn-by-doing tutorial» (=C-h t=)
|
||||
- tving deg selv til å bruke de kommandoene du lærer til de sitter i fingrene
|
||||
- unngå «pek og klikk»
|
||||
|
||||
- C-<any>
|
||||
Control
|
||||
- etter hvert (for spesielt interesserte):
|
||||
- skriv din egen config-fil
|
||||
- lær litt Emacs lisp, og skriv dine egne funksjoner
|
||||
|
||||
- M-<any>
|
||||
Meta er Alt på de fleste maskiner (alternativt ESC)
|
||||
- annet:
|
||||
- gjør =CAPS-LOCK= om til en ekstra Control (=Ctrl=)
|
||||
|
||||
<any> betyr et vilkårlig tegn (eller tastekombinasjon)
|
||||
* Taster
|
||||
** Terminologi for taster
|
||||
|
||||
*** Prefikstaster
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-<any>=
|
||||
Control
|
||||
|
||||
- C-x <any>
|
||||
prefiks for globale kommandoer
|
||||
- =M-<any>=
|
||||
Meta er =Alt= på de fleste maskiner (alternativt =ESC=)
|
||||
|
||||
- C-c <any>
|
||||
prefiks for lokale kommandoer
|
||||
(har ikke alltid samme funksjon!)
|
||||
- =<any>= betyr et vilkårlig tegn (eller tastekombinasjon)
|
||||
|
||||
- C-h <any>
|
||||
prefiks for hjelp
|
||||
** Prefikstaster
|
||||
|
||||
Alle tastekombinasjon som ikke er en prefiks er bundet til en
|
||||
kommando!
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-x <any>=
|
||||
prefiks for globale kommandoer
|
||||
|
||||
- =C-c <any>=
|
||||
prefiks for lokale kommandoer
|
||||
(har ikke alltid samme funksjon!)
|
||||
|
||||
- =C-h <any>=
|
||||
prefiks for hjelp
|
||||
|
||||
- Alle tastekombinasjoner som ikke er en prefiks er bundet til en kommando!
|
||||
|
||||
** Komme seg ut
|
||||
|
||||
- C-x C-c
|
||||
avslutt emacs
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-x C-c=
|
||||
avslutt Emacs
|
||||
|
||||
- C-g
|
||||
avbryt
|
||||
(bruk hvis du ikke skjønner hva emacs holder på med!)
|
||||
- =C-g=
|
||||
avbryt
|
||||
(bruk hvis du ikke skjønner hva Emacs holder på med!)
|
||||
|
||||
- ESC ESC ESC
|
||||
(bruk hvis C-g ikke hjalp)
|
||||
- =ESC ESC ESC=
|
||||
(bruk hvis =C-g= ikke hjalp)
|
||||
|
||||
- C-<prefix> C-g
|
||||
er udefinert
|
||||
(Dvs. C-g kan brukes til å avbryte prefiks)
|
||||
- =C-<prefix> C-g=
|
||||
er udefinert
|
||||
(Dvs. =C-g= kan brukes til å avbryte prefiks)
|
||||
|
||||
** Tekstredigering
|
||||
*** Flytte markør
|
||||
|
||||
- C-f, C-b
|
||||
flytt markøren ett tegn frem/tilbake
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-f=, =C-b=
|
||||
flytt markøren ett tegn frem/tilbake
|
||||
|
||||
- M-f, M-b
|
||||
flytt markøren ett ord frem/tilbake
|
||||
- =M-f=, =M-b=
|
||||
flytt markøren ett ord frem/tilbake
|
||||
|
||||
- C-a, C-e
|
||||
flytt markøren til begynnelsen/slutten av linja
|
||||
- =C-a=, =C-e=
|
||||
flytt markøren til begynnelsen/slutten av linja
|
||||
|
||||
- C-p, C-n
|
||||
flytt markøren til forrige/neste linje
|
||||
- =C-p=, =C-n=
|
||||
flytt markøren til forrige/neste linje
|
||||
|
||||
*** Bla rundt
|
||||
** Bla rundt
|
||||
|
||||
- C-v, M-v
|
||||
scroll ned/opp en side
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-v=, =M-v=
|
||||
scroll ned/opp en side
|
||||
|
||||
- M-<, M->
|
||||
gå til begynnelsen/slutten av bufferet
|
||||
- =M-<=, =M->=
|
||||
gå til begynnelsen/slutten av bufferet
|
||||
|
||||
- C-l
|
||||
vis slik at markøren er i senter/toppen/bunnen
|
||||
- =C-l=
|
||||
vis slik at markøren er i senter/toppen/bunnen
|
||||
|
||||
*** Kill og yank
|
||||
** Kill og yank
|
||||
|
||||
- C-w
|
||||
kill, tilsvarer cut
|
||||
|
||||
- C-y
|
||||
yank, tilsvarer paste
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-w=
|
||||
kill, tilsvarer cut
|
||||
|
||||
- M-w
|
||||
lagre til kill-ring, tilsvarer copy
|
||||
- =C-y=
|
||||
yank, tilsvarer paste
|
||||
|
||||
- C-k
|
||||
kill, drepe resten av en linje
|
||||
- =M-w=
|
||||
lagre til kill-ring, tilsvarer copy
|
||||
|
||||
- M-y, må etterfølges av C-y
|
||||
yank-pop, går lenger tilbake på kill-ring
|
||||
- =C-k=
|
||||
kill, drepe resten av en linje
|
||||
|
||||
*** Feiloppretting
|
||||
- =M-y=, må etterfølges av =C-y=
|
||||
yank-pop, går lenger tilbake på kill-ring
|
||||
|
||||
- C-d, M-d
|
||||
fjern neste bokstav/ord
|
||||
** Feiloppretting
|
||||
|
||||
- C-_
|
||||
undo!
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-d=, =M-d=
|
||||
fjern neste bokstav/ord
|
||||
|
||||
- C-t, M-t
|
||||
bytt om to bokstaver/ord
|
||||
- =C-_=, =C-/=, =C-x u=
|
||||
undo!
|
||||
|
||||
- C-x C-t
|
||||
bytt om to linjer
|
||||
- =C-t=, =M-t=
|
||||
bytt om to bokstaver/ord
|
||||
|
||||
- M-q
|
||||
plasserer om tekst i en paragraf slik at linjene ikke overstiger
|
||||
70 tegn (den ødelegger ikke syntaks i programmeringsmodes)
|
||||
- =C-x C-t=
|
||||
bytt om to linjer
|
||||
|
||||
- M-u, M-l, M-c
|
||||
gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
||||
|
||||
*** Markering av tekst
|
||||
- =M-q=
|
||||
plasserer om tekst i en paragraf slik at linjene ikke overstiger 70 tegn (den ødelegger ikke syntaks i programmeringmodes)
|
||||
|
||||
- C-SPC
|
||||
marker tekst
|
||||
- =M-u=, =M-l=, =M-c=
|
||||
gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
||||
|
||||
- C-x h
|
||||
marker all tekst
|
||||
** Markering av tekst
|
||||
|
||||
Bruk i kombinasjon med M-w, C-w og TAB
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-SPC=
|
||||
markerer tekst
|
||||
|
||||
** Filer, vinduer og buffere
|
||||
*** Filer
|
||||
- =C-x h=
|
||||
markerer all tekst
|
||||
|
||||
- =M-h=
|
||||
markerer en paragraf
|
||||
|
||||
- Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
||||
|
||||
* Filer, vinduer og buffere
|
||||
** Filer
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-x C-f=
|
||||
åpne fil
|
||||
(hvis den ikke finnes fra før åpnes et tomt buffer med det nye filnavnet)
|
||||
|
||||
- =C-x C-s=
|
||||
lagre buffer
|
||||
|
||||
- =C-x C-w=
|
||||
skrive til fil (tilsvarende «lagre som...»)
|
||||
|
||||
** Vinduer
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-x 2=, =C-x 3=
|
||||
splitt et vindu horisontalt/vertikalt
|
||||
|
||||
- =C-x 1=
|
||||
gjør det aktive vinduet til det eneste vinduet
|
||||
|
||||
- =C-x 0=
|
||||
lukk det aktive vinduet
|
||||
|
||||
- =C-x o=
|
||||
bytt fokus til et annet vindu
|
||||
|
||||
** Buffere
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-x b RET=
|
||||
bytt buffer
|
||||
(siste besøkte buffer er default)
|
||||
|
||||
- =C-x k RET=
|
||||
drep (kill) buffer
|
||||
(det aktive bufferet er default)
|
||||
|
||||
- =C-x left=, =C-x right=
|
||||
en annen måte å bytter buffer på
|
||||
|
||||
* Kommandoer
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =M-x function RET=
|
||||
lar deg kalle en vilkårlig kommando med navn
|
||||
|
||||
- =M-x replace-string RET erstatt RET med RET=
|
||||
tilsvarer «search and replace»
|
||||
|
||||
- =M-x query-replace RET erstatt RET med RET= ... =y/n=
|
||||
samme som replace-string, men du kan velge hva som skal erstattes (kan også kjøres med =M-%=!)
|
||||
|
||||
- Bruk =TAB= for autocomplete!
|
||||
|
||||
* Søking
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-s=
|
||||
søk fremover i bufferet
|
||||
|
||||
- =C-r=
|
||||
søk bakover i bufferet
|
||||
|
||||
- Dette er en /svært/ effektiv måte å flytte markøren på!
|
||||
|
||||
* Hjelp til selvhjelp
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =C-h k=
|
||||
bruk hvis du lurer på hva en tastekombinasjon gjør
|
||||
|
||||
- =C-h f=
|
||||
bruk hvis du kjenner navnet på en funksjon, men ikke vet hva den gjør
|
||||
|
||||
- =C-h m=
|
||||
gir deg informasjon om moden du er i (bl.a. tastekombinasjoner som er spesielle for moden)
|
||||
|
||||
- =C-h a=
|
||||
apropos, lar deg søke i hjelpen
|
||||
|
||||
- =C-h C-h= (eller: =C-h ?=)
|
||||
gir deg hjelp om hjelpen
|
||||
|
||||
* Programmering
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- =TAB=
|
||||
indenterer riktig (dersom indenteringen er gal er det et tegn på at det er noe galt i koden!)
|
||||
|
||||
- =M-;=
|
||||
kommenterer ut et markert område
|
||||
|
||||
- =M-x compile RET compile-command RET=
|
||||
lar deg kompilere i Emacs
|
||||
(gir trykkbare linker til der feil oppstod)
|
||||
|
||||
- =M-g g <nr> RET=
|
||||
flytter markøren til linjenummer =<nr>=
|
||||
|
||||
* Makroer
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Makroer er en måte å "ta opp" en rekke kommandoer på
|
||||
|
||||
- =C-x (=
|
||||
definer en makro
|
||||
|
||||
- C-x C-f
|
||||
åpne fil
|
||||
(hvis den ikke finnes fra før opprettes den)
|
||||
- =<f3>=
|
||||
definer en makro /eller/ sett inn løpenummer
|
||||
|
||||
- C-x C-s
|
||||
lagre buffer
|
||||
- =C-x )=, =<f4>=
|
||||
ferdigstill makroen
|
||||
|
||||
- C-x C-w
|
||||
skrive til fil (tilsvarende «lagre som...»)
|
||||
- =C-x e=
|
||||
utfør makroen
|
||||
|
||||
*** Vinduer
|
||||
- =e=
|
||||
gjenta makroen
|
||||
|
||||
- C-x 2, C-x 3
|
||||
splitt et vindu vertikalt/horisontalt
|
||||
* Pakker
|
||||
|
||||
- C-x 1
|
||||
gjør det aktive vinduet til det eneste vinduet
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Emacs 24 kommer med innebygd pakkebehandler
|
||||
|
||||
- C-x 0
|
||||
lukk det aktive vinduet
|
||||
- det finnes tusenvis av pakker
|
||||
|
||||
- C-x o
|
||||
bytt fokus til et annet vindu
|
||||
- =M-x list-packages=
|
||||
bla gjennom pakker
|
||||
|
||||
*** Buffere
|
||||
- =i= installere
|
||||
|
||||
- =U= oppgrader alle
|
||||
|
||||
- =d= slett
|
||||
|
||||
- =x= utfør installering/oppgradering/sletting
|
||||
|
||||
- C-x b RET
|
||||
bytt buffer
|
||||
(siste besøkte buffer er default)
|
||||
** Anbefalinger
|
||||
|
||||
- C-x k RET
|
||||
drep (kill) buffer
|
||||
(det aktive bufferet er default)
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
|
||||
- C-x left, C-x right
|
||||
en annen måte å bytter buffer
|
||||
|
||||
** Kommandoer
|
||||
|
||||
- M-x function RET
|
||||
lar deg kalle en hvilken som helst kommando med navn
|
||||
|
||||
- M-x replace-string RET erstatt RET med RET
|
||||
tilsvarer «search and replace»
|
||||
|
||||
- M-x query-replace RET erstatt RET med RET ... y/n
|
||||
samme som replace-string, men du kan velge hva som skal
|
||||
erstattes
|
||||
|
||||
Bruk TAB for autocomplete!
|
||||
- [[https://github.com/auto-complete/auto-complete][Auto-Complete]]
|
||||
viser mulige fullføringer
|
||||
|
||||
** Søking
|
||||
- [[https://github.com/emacsmirror/undo-tree][Undo-Tree]]
|
||||
et mer standard undo-system, med trestruktur
|
||||
|
||||
- [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]])
|
||||
lar deg kontrollere flere markører samtidig!
|
||||
|
||||
- C-s
|
||||
søk fremover i bufferet
|
||||
- [[https://github.com/oneKelvinSmith/monokai-emacs][Monokai]]
|
||||
et fargetema (hentet fra Sublime)
|
||||
|
||||
- C-r
|
||||
søk bakover i bufferet
|
||||
* Til slutt
|
||||
|
||||
Dette er en effektiv måte å flytte markøren!
|
||||
** Nyttige lenker
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs manualen]]
|
||||
- [[http://termvakt.ifi.uio.no/Emacs][Termvaktens guide til Emacs]]
|
||||
- [[http://www.masteringemacs.org/reading-guide/][En flott blogg om Emacs]]
|
||||
- [[http://www.ic.unicamp.br/%7Ehelio/disciplinas/MC102/Emacs_Reference_Card.pdf][En cheat-sheet for Emacs]]
|
||||
- [[https://github.com/larstvei/dot-emacs][Min konfigurasjonsfil]]
|
||||
|
||||
** Hjelp til selvhjelp
|
||||
|
||||
- C-h k
|
||||
bruk hvis du lurer på hva en tastekombinasjon gjør
|
||||
|
||||
- C-h f
|
||||
bruk hvis du kjenner navnet på en funksjon, men ikke vet hva hva
|
||||
den gjør
|
||||
|
||||
- C-h m
|
||||
gir deg informasjon om moden du er i
|
||||
(bl.a tastekombinasjoner som er spesielle for moden)
|
||||
|
||||
- C-h a
|
||||
apropos, lar deg søke i hjelpen
|
||||
|
||||
- C-h C-h, C-h ?
|
||||
gir deg hjelp om hjelpen
|
||||
|
||||
** Programmering
|
||||
|
||||
- TAB indenterer riktig
|
||||
(dersom indenteringen er gal er det et tegn på at det er noe galt
|
||||
i koden!)
|
||||
|
||||
- M-;
|
||||
kommenterer ut et markert område
|
||||
|
||||
- M-x compile RET compile-command RET
|
||||
lar deg kompilere i Emacs
|
||||
(gir trykkbare linker til der feil oppstod)
|
||||
|
||||
- M-g g <nr> RET
|
||||
flytter markøren til linjenummer <nr>
|
||||
** Spørsmål?
|
||||
|
||||
#+ATTR_REVEAL: :frag roll-in
|
||||
- Noen spørsmål nå?
|
||||
- Kom ned i pausen hvis dere har spørsmål eller ønske for neste time!
|
||||
- Gjerne send mail til [[mailto:larstvei@ifi.uio.no][larstvei@ifi.uio.no]]!
|
||||
|
Loading…
Reference in New Issue
Block a user