I’ve recently started using Emacs at work. I have used that
at school earlier and then had to go to VI because none of the platforms that I
worked on had enough space to support an Emacs editor. Emacs need some basic
customisation before it can be used efficiently.
Here is a sample configuration file that I use. The comments
provide explanation of the function of the various lines.
;;; Emacs Load Path
(setq load-path (cons "~/emacs-config" load-path))
;;;(keyboard-translate ?\C-h ?\C-?)
(global-set-key [(control h)] 'delete-backward-char)
(global-set-key (kbd "C-^") 'help-command)
(load "~/emacs-config/line-number")
(load "~/emacs-config/whitespace-mode")
(require 'whitespace)
(setq whitespace-style '(face empty tabs lines-tail trailing))
(global-whitespace-mode t)
;; Set emacs default C style to linux
;; Recommended https://www.kernel.org/doc/Documentation/CodingStyle
(setq c-default-style "k&r")
;; Rationalize the undo operation in emacs
(require 'redo+)
(define-key global-map (kbd "C-q") 'undo)
(define-key global-map (kbd "C-x C-q") 'redo)
;;; always print line numbers in the left margin
(global-linum-mode t)
;;; Put backup files in a temp directory
(setq backup-directory-alist
`((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
`((".*" ,temporary-file-directory t)))
(show-paren-mode 1)
;;; Use spaces instead of tabs
(setq-default indent-tabs-mode nil)
;; save desktop
(desktop-save-mode 1)
;; speedbar in the same frame
(require 'sr-speedbar)
(load "~/emacs-config/sr-speedbar")
;; open speedbar on startup
(sr-speedbar-open)
;; Make speedbar list C functions
(add-to-list 'speedbar-fetch-etags-parse-list
'("\\.c" . speedbar-parse-c-or-c++tag))
;; windmove for easier switch between windows
(when (fboundp 'windmove-default-keybindings)
(windmove-default-keybindings))
;; emacs dev IDE
(global-ede-mode 1)
(require 'semantic/sb)
(semantic-mode 1)
;;;; This snippet enables lua-mode
;; This line is not necessary, if lua-mode.el is already on your load-path
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)
(add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode))
(add-to-list 'interpreter-mode-alist '("lua" . lua-mode))
;; set tab width
(setq default-tab-width 4)
(setq tab-stop-list (number-sequence 4 200 4))
;; Goto a particular line
(global-set-key "\C-xg" 'goto-line)
(add-to-list 'load-path "~/emacs-config/anything-config")
(require 'anything-config)
(setq anything-sources
(list anything-c-source-buffers
anything-c-source-file-name-history
anything-c-source-locate))
(setq frame-title-format '("USER1"))
;;(setq frame-title-format (list "%b - " (getenv "USERNAME") "@" (getenv "USERDOMAIN")))
;; prevent checking for files changed on disk because vmplayer does not sync
;; http://stackoverflow.com/questions/2284703/emacs-how-to-disable-file-changed-on-disk-checking
(defun ask-user-about-supersession-threat (fn)
"blatantly ignore files that changed on disk"
)
(defun ask-user-about-lock (file opponent)
"always grab lock"
t)
(global-set-key (kbd "<S-tab>") 'un-indent-by-removing-4-spaces)
(defun un-indent-by-removing-4-spaces ()
"remove 4 spaces from beginning of of line"
(interactive)
(save-excursion
(save-match-data
(beginning-of-line)
;; get rid of tabs at beginning of line
(when (looking-at "^\\s-+")
(untabify (match-beginning 0) (match-end 0)))
(when (looking-at "^ ")
(replace-match "")))))
(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.
'(column-number-mode t)
'(show-paren-mode t)
'(tool-bar-mode nil))
(custom-set-faces
;; custom-set-faces 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.
'(default ((t (:inherit nil :stipple nil :background "black" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 98 :width normal :foundry "unknown" :family "DejaVu Sans Mono"))))