Should have committed a long time ago.

This commit is contained in:
Lars Tveito 2015-03-06 21:14:27 +01:00
parent 8dc6802e29
commit 5efebc68b8
5 changed files with 972 additions and 1139 deletions

View File

@ -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)

View File

@ -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
// &lt;tbody&gt;s
var tbodies = table.getElementsByTagName("tbody");
// and iterate through them...
for (var h = 0; h < tbodies.length; h++)
{
// find all the &lt;tr&gt; 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">&quot;gnu&quot;</span> . <span class="string">&quot;http://elpa.gnu.org/packages/&quot;</span>)
(<span class="string">&quot;marmalade&quot;</span> . <span class="string">&quot;http://marmalade-repo.org/packages/&quot;</span>)
(<span class="string">&quot;melpa&quot;</span> . <span class="string">&quot;http://melpa.milkbox.net/packages/&quot;</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">&quot;C-x k&quot;</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">&quot;~/.emacs.d/autosaves/&quot;</span>)
(setq backup-directory-alist
`((<span class="string">&quot;.*&quot;</span> . ,emacs-autosave-directory))
auto-save-file-name-transforms
`((<span class="string">&quot;.*&quot;</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">&quot;C-c &lt;right&gt;&quot;</span>) 'hs-show-block)
(local-set-key (kbd <span class="string">&quot;C-c C-&lt;right&gt;&quot;</span>) 'hs-show-block)
(local-set-key (kbd <span class="string">&quot;C-c &lt;left&gt;&quot;</span>) 'hs-hide-block)
(local-set-key (kbd <span class="string">&quot;C-c C-&lt;left&gt;&quot;</span>) 'hs-hide-block)
(local-set-key (kbd <span class="string">&quot;C-c &lt;up&gt;&quot;</span>) 'hs-hide-all)
(local-set-key (kbd <span class="string">&quot;C-c C-&lt;up&gt;&quot;</span>) 'hs-hide-all)
(local-set-key (kbd <span class="string">&quot;C-c &lt;down&gt;&quot;</span>) 'hs-show-all)
(local-set-key (kbd <span class="string">&quot;C-c C-&lt;down&gt;&quot;</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">&quot;psv&quot;</span> <span class="string">&quot;public static void main(String[] args) {&quot;</span> nil 0)
(<span class="string">&quot;sop&quot;</span> <span class="string">&quot;System.out.printf&quot;</span> nil 0)
(<span class="string">&quot;sopl&quot;</span> <span class="string">&quot;System.out.println&quot;</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">&quot;javac &quot;</span> (buffer-name)))
(local-set-key (kbd <span class="string">&quot;C-c C-c&quot;</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">&quot;Ident, untabify and unwhitespacify current buffer, or region if active.&quot;</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">&quot;&lt;C-tab&gt;&quot;</span>) 'tidy)
</pre>
</body>
</html>

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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]]!