;;-*-Emacs-Lisp-*-
;;
;; grudat.emacs
;;
;; Testad i GNU Emacs 20 och 21.
;;
;; Semikolon inleder kommentar till slutet av raden.
;;
;; Syntaxen för uttryck som till exempel C-k finns beskriven i Emacs
;; tutorial som nås genom att trycka F1 F1 t

;;----------------------------------------
;; Inställningar
;;----------------------------------------

;; Färglägg automatiskt
(global-font-lock-mode t)

;; pc-selection-mode: gör regionen synlig, markera med
;; skift+piltangenter etc. För mer detaljer, tryck C-h f pc-sel <RET>
(pc-selection-mode)

;; Om man trycker pil-ner kan man aldrig göra filen större
(setq next-line-add-newlines nil)

;; Se till att alla filer sparas med avslutande radmatningstecken
(setq require-final-newline t)

;; Skärmen blinkar när man gör något otillåtet
(setq visible-bell t)

;; Visa (matchande) och felaktiga) parenteser.
;; Vad som räknas som parenteser beror på i vilken mode man befinner
;; sig: i t.ex. Java-buffertar räknas också {måsvingar} och
;; [hakparenteser] som parenteser.
(show-paren-mode t)
(setq show-paren-ring-bell-on-mismatch t)

;; C-k (kill-line) tar bort radmatningstecknet också
(setq kill-whole-line t)

;; Använd blanka för indentering i stället för TAB, eftersom
;; TAB-tecken kan visas olika stora
(setq-default indent-tabs-mode nil)

;; Använd JDE för Java-filer om det finns. JDE laddas när det behövs
(when (locate-library "jde")
  (autoload 'jde-mode "jde" "JDE mode." t)
  (add-to-list 'auto-mode-alist '("\\.java\\'" . jde-mode))
  ;; Fix för inkompatibilitet mellan Emacs 20 and 21
  (defvar browse-url-new-window-p browse-url-new-window-flag))

;; c-mode-common-hook körs av c-mode och härledda modes,
;; t.ex. jde-mode
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
(defun my-c-mode-common-hook ()
  ;; Indentera automatiskt vid ny rad
  (define-key c-mode-base-map "\r" 'reindent-then-newline-and-indent))

;; Modulen desktop håller reda på vilka filer som var öppna senast.
;; Första gången du vill använda desktop måste du skapa en tom fil som
;; heter .emacs.desktop i din hemkatalog. 
(if (require 'desktop nil t)
    (setq desktop-enable t))

;;----------------------------------------
;; Bortkommenterade inställningar
;;
;; Att pröva på
;;----------------------------------------

;; Om man vill att Backstegs-tangenten ska ta bort många 
;; blanka på en gång kan man sätta 'hungry
;;(setq backward-delete-char-untabify-method 'hungry)

;; Nedanstående rad gör att Emacs frågar (y or n) i stället för 
;; (yes or no). Viss försiktighet anbefalles!
;;(fset 'yes-or-no-p 'y-or-n-p)


;;----------------------------------------
;; Snabbtangenter
;;
;; Definiera snabbtangenter för ofta använda funktioner
;;----------------------------------------

;; Från NADA's default.el tar vi funktionen indent-buffer och binder
;; den till C-c b
(defun indent-buffer ()
  "Indent every line in the buffer."
  (interactive)
  (indent-region (point-min) (point-max) nil))
(global-set-key "\C-cb" 'indent-buffer)

;; Användbara kommandon vid kompilering
(global-set-key [f7] 'previous-error)
(global-set-key [f8] 'next-error)

;; dabbrev-expand är en mycket användbar funktion som försöker
;; fullborda ett ofullständigt ord. Då behöver man bara skriva de
;; första tecknen av ett långt variabelnamn och därefter använda
;; dabbrev-expand. Funktionen finns redan som M-/ men det ligger så
;; knöligt på svenska tangentbord, så vi lägger till M-< som
;; snabbtangent.
(global-set-key "\M-<" 'dabbrev-expand)

;;(global-set-key [f4] 'kill-this-buffer)
;;(global-set-key [f5] 'delete-other-windows)

;;----------------------------------------
;; Customize
;;
;; Variabler som sätts med customize
;;----------------------------------------
(custom-set-variables
 '(jde-jdk-doc-url "/public/www/javadoc/jdk-1.3/docs/api/index.html"))