Emacs

Small picture of me

Websida - CV/PDF - Kontak


Innehåll

1 Introduktion

  1. Nedanstående dokument är gjort för den som redan kan lite om Emacs. Samtidigt är det bara ett axplock av vad som finns i emacs och vad man kan göra i emacs. När själv gör något som vill komma ihåg och ev. komma åt lätt från en browser, burkar jag lägga det på den här sidan.
  2. Den som inte känner till Emacs över huvud taget gör bäst i att börjar läsa introduktionen.
  3. För att en kortfattad lathund över vanliga kommandon, kolla in min Emacs Lathund
  4. En av Emacs intressantaste oråden/mode:s är OrgMode. För den som är intresserad har jag skrivit en kort introduktio.

2 Konfiguration

Emacs configureras i .emacs -fil som normalt ligger i home kattalogen.

2.1 Exempel på .emacs-fil

<2014-03-11 tis>

(garbage-collect)

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

(setq inhibit-startup-message t)
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode 0)
(display-time-mode)
(global-font-lock-mode 1)
(show-paren-mode 1)  
(blink-cursor-mode 1)
(global-hl-line-mode 0)

(add-hook 'org-mode-hook (lambda () (hl-line-mode 1)))
(add-hook 'python-mode-hook (lambda () (hl-line-mode 1)))
(add-hook 'xml-mode-hook (lambda () (hl-line-mode 1)))
(add-hook 'html-mode-hook (lambda () (hl-line-mode 1)))
(add-hook 'web-mode-hook (lambda () (hl-line-mode 1)))

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

(add-to-list 'load-path  "~/.emacs.d/elpa/web-mode-8.0.4/")
(require 'web-mode)
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))

(require 'php-mode)

;; CODING
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

(add-to-list 'load-path  "~/.emacs.d/elpa/sr-speedbar-0.1.8/")
(require 'sr-speedbar)
(global-set-key (kbd "<f9>") 'sr-speedbar-toggle)


(require 'calendar)
(calendar-set-date-style 'european)

(setq browse-url-generic-program (executable-find "/usr/bin/google-chrome")  browse-url-browser-function 'browse-url-generic)

(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)

(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.
 '(user-full-name "Johan Sandén")
 '(user-mail-address "johan.sanden@gmail.com"))

(define-key global-map "\C-x\C-a" 'rgrep)

(global-set-key [C-tab] 'hippie-expand)

(require 'edit-server) 
(edit-server-start) 

(load-theme 'leuven t)                 



;;
;;  REMEMBER!
;;

(require 'org-remember)
(org-remember-insinuate)
(setq org-directory "~/doc/")
(setq org-file (concat org-directory "org.org"))
(setq org-remember-templates
      '(("Org" ?o             "* %?\n%T\n%i\n%a" "org.org"                       "Anteckningar")
    ("Empty" ?e  "* %?" "privat/privat.org"           "Anteckningar")
        ("Default privat" ?c  "* %?\n%T\n%i\n" "privat/privat.org"           "Anteckningar")
    ("Privat" ?p          "* %?\n%T\n%i\n%a" "privat/privat.org"           "Anteckningar")))

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


;; IDO MODE
(require 'ido)
(ido-mode t)
(setq ido-everywhere t)
'(ido-create-new-buffer (quote never))
'(ido-enable-flex-matching t)
'(ido-enable-last-directory-history nil)
'(ido-enable-regexp nil)
'(ido-max-directory-size 300000)
'(ido-max-file-prompt-width 0.1)
'(ido-use-filename-at-point (quote guess))
'(ido-use-url-at-point t)
'(ido-use-virtual-buffers t)

 (require 'org-crypt)
     (org-crypt-use-before-save-magic)
     (setq org-tags-exclude-from-inheritance (quote ("crypt")))
     
     (setq org-crypt-key nil)
       ;; GPG key to use for encryption
       ;; Either the Key ID or set to nil to use symmetric encryption.
     
     (setq auto-save-default nil)
       ;; Auto-saving does not cooperate with org-crypt.el: so you need
       ;; to turn it off if you plan to use org-crypt.el quite often.
       ;; Otherwise, you'll get an (annoying) message each time you
       ;; start Org.
     
       ;; To turn it off only locally, you can insert this:
       ;;
       ;; # -*- buffer-auto-save-file-name: nil; -*-



(global-set-key (kbd "C-x <SPC>") 'eshell)

;; ORG-MODE COMMENT MACRO
(add-to-list 'org-structure-template-alist '("z" "#+BEGIN_COMMENT\n?\n#+END_COMMENT"))

;; ORG-BABEL
(org-babel-do-load-languages
 'org-babel-load-languages
 '(
   ;;(R . t)
   (python . t)
   (sh . t)
   (emacs-lisp . t)
   (java . t)
   ))

; Babel
(setq org-src-preserve-indentation t)
(setq org-src-fontify-natively t)
(setq org-src-window-setup 'current-window)

;; ACE-JUMP-MODE
(autoload
   'ace-jump-mode
   "ace-jump-mode"
   "Emacs quick move minor mode"
   t)

 (define-key global-map (kbd "C-c s") 'ace-jump-mode)

;; WINDMOVE DEF
 (define-key global-map (kbd "C-c <C-up>") 'windmove-up)
 (define-key global-map (kbd "C-c <C-left>") 'windmove-left)
 (define-key global-map (kbd "C-c <C-right>") 'windmove-right)
 (define-key global-map (kbd "C-c <C-down>") 'windmove-down)



(require 'package)
(add-to-list 'package-archives 
    '("marmalade" .
      "http://marmalade-repo.org/packages/"))
(package-initialize)

2.2 Marmelade-repo

http://marmalade-repo.org/

(require 'package)
(add-to-list 'package-archives 
         '("marmalade" .
           "http://marmalade-repo.org/packages/"))
(package-initialize)

2.3 Default browser

;; Set default browser
 (setq browse-url-generic-program (executable-find "chromium-browser")  browse-url-browser-function 'browse-url-generic)

2.4 Viuellt meddelande

Emacs är normalt "tyst". Den här gör att man ser lite bättre vad som händer.

Welcome to the Emacs shell

~/doc/privat/websida $ (setq visible-bell t)

2.5 display-time

(setq display-time-24hr-format 1)
(display-time)

2.6 ÅÄÖ

;;; ÅÄÖ -tecken
(standard-display-european t)
(set-input-mode (car (current-input-mode))
                (nth 1 (current-input-mode))
                0)

2.7 Twitter-this

(defun twitter-this (begin end)
  "Send marked text as msg to twitter"
  (interactive "r")
  (setq instring (buffer-substring begin end))
  (setq sendstring (replace-regexp-in-string " [ ]+" " " (replace-regexp-in-string "\n" " " instring)))
  (setq runstring (concat "echo -e " sendstring " | bti ;"))
  (message runstring)
  (shell-command runstring)      
)
(global-set-key (kbd "C-x C-j t") 'twitter-this)

2.8 Color-theme

(require 'color-theme)
(setq color-theme-is-global t)
(color-theme-initialize)
;;(color-theme-raspopovic)
;;(color-theme-high-contrast) 
(require 'color-theme-leuven)
(color-theme-leuven)

2.9 lock-screen (i linux)

(defun lock-screen ()
  "Lock screen using (zone) and xtrlock
 calls M-x zone on all frames and runs xtrlock"
  (interactive)
  (save-excursion
    (start-process "xtrlock" nil "xtrlock")
    (zone)
    )
  )

2.10 count-word-region

 ;;; Final version: while
(defun count-words-region (beginning end)
  "Print number of words in the region."
  (interactive "r")
  (message "Counting words in region ... ")
  
     ;;; 1. Set up appropriate conditions.
  (save-excursion
    (let ((count 0))
      (goto-char beginning)
      
     ;;; 2. Run the while loop.
      (while (and (< (point) end)
          (re-search-forward "\\w+\\W*" end t))
    (setq count (1+ count)))
      
     ;;; 3. Send a message to the user.
      (cond ((zerop count)
         (message
          "The region does NOT have any words."))
        ((= 1 count)
         (message
          "The region has 1 word."))
        (t
         (message
          "The region has %d words." count))))))

2.11 Shift-arrow to shift window

;; shift arrow-keys to shift window instead of C-x o
(windmove-default-keybindings)
;; Make windmove work in org-mode:
(add-hook 'org-shiftup-final-hook 'windmove-up)
(add-hook 'org-shiftleft-final-hook 'windmove-left)
(add-hook 'org-shiftdown-final-hook 'windmove-down)
(add-hook 'org-shiftright-final-hook 'windmove-right)

3 Teckenkodning

  • För att ta reda på hur teckenkodning för en fil.
    C-x [ENTER] c 
    
  • För att ta att sätta kodning
    C-x [Enter] c <coding> [ENTER]
    

4 Elisp

  • Lisp är inbyggt
    • (* (random 50) 5 456) C-x C-e

4.2 bug#13963: 24.3;

eshell: "Text is read-only" and unresponsive eshell to kill-buffer, C-x C-c and C-x C-q

  • Enklaste lösningen på problemet är köra uttrycket:
      (let ((inhibit-read-only t)) (kill-this-buffer))
    
  • Kör med
    eval-expression
    
  • eller:
    M-:
    

5 Org-mode

Grunden till Org-mode är ett system att ta strukturerade anteckningar. Att inte säga mer vore att underdriva å det grövsta. Org-mode har tillägg och möjligheter som är går långt utanför alla andra anteckningssystem.

  • Strukturerade anteckningar
    • Menyer
    • Listor
  • Dekorering
    • Understycket, italic, code, verbatim, stryk
  • Länkar
  • Tabeller
  • TODO
  • Taggar
  • Sökfunktioner
  • Datum/Tider
    • Stämpelklocka
    • Agenda
    • Påminnselse
    • Kallender
    • Dagbok
  • Exportering
    • Till html, pdf och många andra format.
  • Programmera (via org-babel)
    • Prototyp
    • Poc
    • Test
    • Literate programming

5.1 Org-remember

För att göra snabba anteckningar i Emacs som snabbt sorteras in där man vill ha dem.

(org-remember-insinuate)

(setq org-directory "/media/KEY/doc/")

(setq org-file (concat org-directory "org.org"))

(setq org-remember-templates
      '(("Org" ?o             "* %?\n%t\n\n  %i\n  %a" "org.org"                       "Anteckningar")
        ("Privat" ?p          "* %?\n%t\n\n  %i\n  %a" "privat/privat.org"           "Anteckningar")
    ("Blawg" ?b          "** %?\n%t\n\n  %i\n  %a" "privat/tankar.org"           "Blogga")
        ("Lantmäteriet" ?l    "** %?\n%t\n\n  %i\n  %a" "lantmateriet/lantmateriet.org" "Anteckningar")
    ("Diktkonst" ?d    "* %?\n%t\n\n  %i\n  %a" "privat/diktkonst.org" top)
        ("Knowit" ?k          "* %?\n%t\n\n  %i\n  %a" "knowit/knowit.org"             "Anteckningar")))

5.2 org-stuck-projects

This is a list of four items:

  1. A tags/todo/property matcher string that is used to identify a project. See the manual for a description of tag and property searches. The entire tree below a headline matched by this is considered one project.
  2. A list of TODO keywords identifying non-stuck projects. If the project subtree contains any headline with one of these todo keywords, the project is considered to be not stuck. If you specify "*" as a keyword, any TODO keyword will mark the project unstuck.
  3. A list of tags identifying non-stuck projects. If the project subtree contains any headline with one of these tags, the project is considered to be not stuck. If you specify "*" as a tag, any tag will mark the project unstuck. Note that this is about the explicit presence of a tag somewhere in the subtree, inherited tags to not count here. If inherited tags make a project not stuck, use "-TAG" in the tags part of the matcher under (1.) above.
  4. An arbitrary regular expression matching non-stuck projects.

If the project turns out to be not stuck, search continues also in the subtree to see if any of the subtasks have project status.

See also the variable `org-tags-match-list-sublevels' which applies to projects matched by this search as well.

After defining this variable, you may use M-x org-agenda-list-stuck-projects or `C-c a #' to produce the list.

5.3 Org-Crypt

Org-crypt används för att kryptera en del av org-filen. Lägg följade i din .emacs så fungera med org-decrypt-entry. När du sparar så krypteras de rubriker som märkts för kryptering.

(require 'org-crypt)
(org-crypt-use-before-save-magic)

(setq org-tags-exclude-from-inheritance (quote ("crypt")))

(setq org-crypt-key nil)

6 Org-babel

6.1 Programmering

6.1.1 Ett sätt att programmera i org-mode

  • Man lägger in taggar för det språk man vill använda.
apa=[1,2,3,4,5,6,12]
for a in ["a",5,345.3,9]:
    b=a*26
    print b

c=[d*3 for d in [2,3,"johan",apa]]
print c

6.1.2 Fler olika program i samma fil.

6.2 Literate-programming

6.3 Ditaa

7 ETAG

  • Ladda ner etag från internet, om det inte redan finns installerat.
  • Skriver etag –recursive=yes för att skapa en ETAG fil.
  • I emacs kör man M-x visit-etag-table för att läsa in etag-filen
  • M-. för att söka efter taggarna
  • Works like a sharm.
  • Kommandorad:
    • etags ./* -a –lang=html
      • "-a" append
      • Vill man ha flera typer av filer, t.ex. –lang=php så får man göra om. Kom då ihåg "-a"

8 Workgroups2

  • Ett sätt att konfigurera windows, buffers, size, place osv.

9 Ace-jump

(require 'ace-jump-mode)
(define-key global-map (kbd "C-c s") 'ace-jump-mode)

10 Move-dup

Ett mini-mode som gör att enkelt att flytta och kopiera rader. Inspirerat av Eclips.

11 Darkroom

12 Minimap mode

Ett mode some ger samma typ av sido-vy (överblick) som Sublime. http://www.emacswiki.org/emacs/MiniMap

13 Stavning

13.2 Flyspell

Ett tillägg till ispell som visar ev. stavfel medans man skriver.

;; A way to disable flyspell mode.
(defun disable-flyspell-mode  () (interactive) (flyspell-mode 0))
(global-set-key (kbd "<f9>") 'disable-flyspell-mode)

14 Programmering

14.1 c/C++

  • CDET

14.2 nxml-mode

14.3 web-mode

14.4 php-mode

14.5 sql-mode

14.6 Pascal-mode

14.7 Java-mode

14.8 Python-mode

15 Processer

För att kolla processer kör:

M-x proced

När den är kör en gång kan mängder av kommandon för att automatiskt uppdatera listan, döda processer osv.

16 Filsystem

16.1 Dired

16.2 Ansi-term

ansi-term mode är en lite bättre terminal-mode.

C-x C-j
activate term-line-mode, more like a normal text-buffer in which you can move the cursor and yank text.
C-c C-k
Switch back to character mode.
M-x
C-x M-x för att kunna skriva vanliga M-x kommandon.

16.3 Eshell

16.4 Shell

17 Tid

17.1 Calendar

17.2 Chronos

17.3 Diary

18 Narrowing

Narrowing är ett sätt att skydda en fil från förändringar. Att bara editera i en del av en fil. På så sätt behöver man inte vara orolig för att skada en fil man ändrar i.

  • Narrow (markera de rader du vill ändra i och)
    C-x n n
    
  • Widen (för att gå tillbaka och ändra i hela dokumentet)
    C-x n w
    
  • Gör Narrow till ett subtree i ORG-MODE
    C-x n s
    

19 Artist mode

  • M-x Artist-Mode
  • Mittenknappen fungerar som som meny
  • Högermusknapp suddar
  • Vänster musknapp ritar

20 Spel

21 Pressentation

Det finns flera sätt att pressentera emacs-filer.

21.2 Org-reveal - snygga pressentationer.

22 Follow-mode

Använd "follow-mode" för att se samma buffer i två windows.

23 Speedbar

sr-speedbar.el - för att få speedbar i ett nytt fönster man i samma ram.

Prova det här i .emacs om du får "Wrong type argument: stringp, nil" vid installation

(defconst my-speedbar-buffer-name " SPEEDBAR")

24 Zone

För att sätta vilken vilken zone-varriant man vill ha. Sätt variabeln zone-programs till en array med en eller några av följande värden. Detta inte en fullständig lista. Det finns många zone på internet.

(setq zone-programs [zone-pgm-explode])

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; zone-pgm-jitter        ;;
;; zone-pgm-putz-with-case    ;;
;; zone-pgm-dissolve          ;;
;; zone-pgm-explode       ;;
;; zone-pgm-whack-chars       ;;
;; zone-pgm-rotate        ;;
;; zone-pgm-rotate-LR-lockstep    ;;
;; zone-pgm-rotate-RL-lockstep    ;;
;; zone-pgm-rotate-LR-variable    ;;
;; zone-pgm-rotate-RL-variable    ;;
;; zone-pgm-drip          ;;
;; zone-pgm-drip-fretfully    ;;
;; zone-pgm-five-oclock-swan-dive ;;
;; zone-pgm-martini-swan-dive     ;;
;; zone-pgm-rat-race          ;;
;; zone-pgm-paragraph-spaz    ;;
;; zone-pgm-stress        ;;
;; zone-pgm-stress-destress   ;;
;; zone-pgm-random-life       ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

25 Ido-mode

(require 'ido)
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
(ido-mode 1)
 
 (defun ido-find-file-in-tag-files ()
      (interactive)
      (save-excursion
        (let ((enable-recursive-minibuffers t))
          (visit-tags-table-buffer))
        (find-file
         (expand-file-name
          (ido-completing-read
           "Project file: " (tags-table-files) nil t)))))

26 Multiple cursors

Riktigt roligt och betydligt mer användbart än jag kunnat ana.

https://github.com/emacsmirror/multiple-cursors

(require 'multiple-cursors)
(global-set-key (kbd "C-S-<mouse-1>") 'mc/add-cursor-on-click)

27 Mer information

Datum: <2014-03-11 tis>

Författare: Johan Sandén

Created: 2016-06-28 Tue 21:25

Emacs 24.3.1 (Org mode 8.2.5h)

Validate