(setq user-full-name "Giuseppe Coviello")
(setq user-mail-address "cjg@cruxppc.org")
(setq load-path (cons "~/.emacs.d/" load-path))
(setq load-path (cons "~/.emacs.d/color-theme/" load-path))
(server-start)
(defun console-interface()
(menu-bar-mode nil)
(color-theme-pok-wob)
(display-time-mode)
(require 'battery)
(display-battery-mode)
)
(defun x-interface()
(setq x-select-enable-clipboard t)
(tool-bar-mode nil)
(color-theme-blippblopp)
(setq frame-title-format "Emacs: %b %+%+ %f")
(setq icon-title-format "Emacs - %b")
(pc-bindings-mode)
(pc-selection-mode)
(set-scroll-bar-mode 'right)
(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
(define-key-after (lookup-key global-map [menu-bar tools])
[speedbar] '("Speedbar" . speedbar-frame-mode) [calendar])
(setq php-speedbar-config 1)
(defun up-slightly () (interactive) (scroll-up 5))
(defun down-slightly () (interactive) (scroll-down 5))
(global-set-key [mouse-4] 'down-slightly)
(global-set-key [mouse-5] 'up-slightly)
(defun up-one () (interactive) (scroll-up 1))
(defun down-one () (interactive) (scroll-down 1))
(global-set-key [S-mouse-4] 'down-one)
(global-set-key [S-mouse-5] 'up-one)
(defun up-a-lot () (interactive) (scroll-up))
(defun down-a-lot () (interactive) (scroll-down))
(global-set-key [C-mouse-4] 'down-a-lot)
(global-set-key [C-mouse-5] 'up-a-lot)
(require 'avoid)
(if (display-mouse-p) (mouse-avoidance-mode 'animate))
)
(defun mac-interface()
(setq mac-allow-anti-aliasing t)
(x-interface)
(custom-set-faces
'(hl-line ((t (:background "lightgray")))))
)
(require 'font-lock)
(require 'color-theme)
(color-theme-initialize)
(setq inhibit-startup-message t)
(fset 'yes-or-no-p 'y-or-n-p)
(setq-default transient-mark-mode t)
(blink-cursor-mode nil)
(setq track-eol t)
(line-number-mode t)
(setq column-number-mode t)
(setq scroll-step 1)
(setq query-replace-highlight t)
(setq search-highlight t)
(show-paren-mode t)
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t
font-lock-mode-maximum-decoration t
font-lock-maximum-size nil)
(setq-default enable-multibyte-characters t)
(setq default-input-method "rfc1345")
(toggle-uniquify-buffer-names)
(setq gdb-many-windows t)
(require 'hl-line)
(global-hl-line-mode)
(defun shell-mode-customize()
"Customize the shell-mode"
(load-library 'ansi-color)
(ansi-color-for-comint-mode-on)
)
(add-hook 'shell-mode-hook 'shell-mode-customize)
(if (not window-system)
(console-interface)
)
(if (eq window-system 'x)
(x-interface)
)
(if (eq window-system 'mac)
(mac-interface)
)
(require 'completion)
(dynamic-completion-mode)
(require 'generic-x)
(recentf-mode t)
(toggle-save-place-globally)
(set-input-mode nil nil 1)
(set-default 'truncate-lines 1)
(setq-default fill-column 80)
(setq-default auto-fill-function 'do-auto-fill)
(setq next-line-add-newlines nil)
(delete-selection-mode t)
(setq require-final-newline 't)
(require 'htmlize)
(global-set-key "\C-a" 'mark-whole-buffer)
(global-set-key "\C-z" 'undo)
(global-set-key "\C-cg" 'goto-line)
(global-set-key "\C-b" 'buffer-menu)
(global-set-key "\M-a" 'yic-next-buffer)
(global-set-key "\M-d" 'yic-prev-buffer)
(global-set-key "\M-\S-a" 'previous-multiframe-window)
(global-set-key "\M-\S-d" 'next-multiframe-window)
(global-set-key "\M-s" 'delete-other-windows)
(global-set-key "\M-\S-s" 'kill-buffer-and-window)
(global-set-key "\M-c" 'clipboard-kill-ring-save)
(global-set-key "\M-v" 'clipboard-yank)
(global-set-key "\M-f" 'clipboard-kill-region)
(global-set-key "\M-w" 'set-mark-command)
(global-set-key "\M-q" 'comment-region)
(global-set-key "\M-e" 'uncomment-region)
(global-set-key (kbd "(") 'insert-round-brackets)
(global-set-key (kbd "[") 'insert-square-brackets)
(global-set-key (kbd "{") 'insert-brackets)
(defun latex-mode-fix ()
(local-unset-key "\M-s")
(local-unset-key (kbd "<tab>"))
(local-set-key "\M-s" 'delete-other-windows)
(local-set-key (kbd "<tab>") 'indent-or-complete)
)
(add-hook 'LaTeX-mode-hook 'latex-mode-fix)
(defun python-mode-fix ()
(setq py-smart-indentation nil
py-indent-offset 4
tab-width 4
indent-tabs-mode nil
current-language-environment "UTF-8"
)
(global-set-key [f5] 'py-execute-buffer)
(local-set-key (kbd "<tab>") 'indent-or-complete)
)
(add-hook 'python-mode-hook 'python-mode-fix)
(add-to-list 'auto-mode-alist '("/etc/rc.d/*" . sh-mode))
(add-to-list 'auto-mode-alist '("Pkgfile" . sh-mode))
(add-to-list 'auto-mode-alist '("\\.a68$" . asm-mode))
(defun linux-c-mode ()
"C mode with adjusted defaults for use with the Linux kernel."
(interactive)
(c-mode)
(setq c-indent-level 8)
(setq c-brace-imaginary-offset 0)
(setq c-brace-offset -8)
(setq c-argdecl-indent 8)
(setq c-label-offset -8)
(setq c-continued-statement-offset 8)
(setq indent-tabs-mode nil)
(setq tab-width 8))
(setq auto-mode-alist (cons '("*\\.[ch]$" . linux-c-mode)
auto-mode-alist))
(defconst linux-c-style
'(
(c-set-style . "k&r")
(c-indent-level 8)
(c-brace-imaginary-offset 0)
(c-brace-offset -8)
(c-argdecl-indent 8)
(c-label-offset -8)
(c-continued-statement-offset 8)
(indent-tabs-mode nil)
(c-tab-width . 8)
(c-basic-offset . 8)
(comment-multi-line t)
)
"Linux C Style"
)
(defun linux-c-mode-common-hook ()
(c-add-style "Linux" linux-c-style t)
(cwarn-mode 1)
(which-function-mode t)
(setq which-func-unknown "TOP LEVEL")
(setq compile-command "make CC=gcc")
(local-set-key "\C-c\C-c" 'compile)
(local-set-key "\C-c\C-d" 'gdb)
(local-set-key "\M-m" 'man-follow)
(local-set-key (kbd "<tab>") 'indent-or-complete)
(local-set-key (kbd "(") 'insert-round-brackets)
(local-set-key (kbd "[") 'insert-square-brackets)
(local-set-key (kbd "{") 'insert-brackets)
(require 'compile)
(unless (file-exists-p "Makefile")
(set (make-local-variable 'compile-command)
(let ((file (file-name-nondirectory buffer-file-name)))
(concat "gcc -g -W -Wall -o "
(file-name-sans-extension file) " " file))))
)
(add-hook 'c-mode-common-hook 'linux-c-mode-common-hook)
(add-hook 'c-mode-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
("\\<\\(TODO\\):" 1 font-lock-type-face prepend)))
)
)
(autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t)
(setq auto-mode-alist
(append '(("\\.cs$" . csharp-mode)) auto-mode-alist))
(defconst csharp-style
'(
(c-set-style . "java")
(c-indent-level 4)
(c-brace-imaginary-offset 0)
(c-brace-offset -4)
(c-argdecl-indent 4)
(c-label-offset -4)
(c-continued-statement-offset 4)
(indent-tabs-mode nil)
(c-tab-width . 4)
(c-basic-offset . 4)
(comment-multi-line t)
)
"C# Style"
)
(defun csharp-mode-fix ()
(interactive)
(c-add-style "C#" csharp-style t)
(setq tab-width 4
current-language-environment "UTF-8"
)
(local-set-key (kbd "<tab>") 'indent-or-complete)
(require 'compile)
(unless (file-exists-p "Makefile")
(set (make-local-variable 'compile-command)
(let ((file (file-name-nondirectory buffer-file-name)))
(concat "mcs " file))))
)
(add-hook 'csharp-mode-hook 'csharp-mode-fix)
(define-skeleton c-skeleton
"Inserts a C file skeleton into current buffer.
This only makes sense for empty buffers."\n
"/* " (buffer-name) " */"\n
"
/* <project_name> -- <project_description>
*
* Copyright (C) 2006 - 2007
* "(insert user-full-name)" <"(insert user-mail-address)">
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
"\n
)
(define-skeleton h-skeleton
"Inserts a C include file skeleton into current buffer.
This only makes sense for empty buffers."\n
"/* " (buffer-name) " */"\n
"
/* <project_name> -- <project_description>
*
* Copyright (C) 2006 - 2007
* "(insert user-full-name)" <"(insert user-mail-address)">
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _" (upcase (replace-regexp-in-string "\\." "_" (buffer-name))) "
#define _" (upcase (replace-regexp-in-string "\\." "_" (buffer-name))) "
#endif /* _" (upcase (replace-regexp-in-string "\\." "_" (buffer-name))) " */
"\n
)
(define-skeleton python-skeleton
"Inserts a Python file skeleton into current buffer.
This only makes sense for empty buffers."\n
"\"\"\"
" (buffer-name) "
<project_name> -- <project_description>
Copyright (C) 2006 - 2007
"(insert user-full-name)" <"(insert user-mail-address)">
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\"\"\"
"\n
)
(defun yic-ignore (str)
(or
(string-match "\\*Buffer List\\*" str)
(string-match "\\*scratch\\*" str)
(string-match "^TAGS" str)
(string-match "^\\*Messages\\*$" str)
(string-match "^\\*Completions\\*$" str)
(string-match "^ " str)
(memq str
(mapcar
(lambda (x)
(buffer-name
(window-buffer
(frame-selected-window x))))
(visible-frame-list)))
))
(defun yic-next (ls)
"Switch to next buffer in ls skipping unwanted ones."
(let* ((ptr ls)
bf bn go
)
(while (and ptr (null go))
(setq bf (car ptr) bn (buffer-name bf))
(if (null (yic-ignore bn))
(setq go bf)
(setq ptr (cdr ptr))
)
)
(if go
(switch-to-buffer go))))
(defun yic-prev-buffer ()
"Switch to previous buffer in current window."
(interactive)
(yic-next (reverse (buffer-list))))
(defun yic-next-buffer ()
"Switch to the other buffer (2nd in list-buffer) in current window."
(interactive)
(bury-buffer (current-buffer))
(yic-next (buffer-list)))
(defun indent-or-complete ()
"Complete if point is at end of a word, otherwise indent line."
(interactive)
(if (looking-at "\\>")
(complete-symbol)
(indent-for-tab-command)))
(defun insert-round-brackets ()
"Insert round brackets"
(interactive)
(insert "()")
(backward-char)
(print (current-word))
)
(defun insert-square-brackets ()
"Insert square brackets"
(interactive)
(insert "[]")
(backward-char)
)
(defun insert-brackets ()
"Insert brackets"
(interactive)
(if (and (not (eq (char-before) nil)) (not (= (char-before) ?\ )))
(insert " "))
(insert "{")
(reindent-then-newline-and-indent)
(newline)
(insert "}")
(indent-according-to-mode)
(backward-to-indentation)
)
(defun todo-list ()
"Find TODOs"
(interactive)
(grep (concat "grep -nH -e 'TODO:' -e *.[ch] "
"| awk '{ sub(/\\/\\//, \"\"); sub(/\\/\\*/, \"\"); "
"gsub (/:[\\ \\t]*TODO/, \": TODO\"); print }' 1>&2 | true")
)
)
(defun fixme-list ()
"Find FIXMEs"
(interactive)
(grep (concat "grep -nH -e 'FIXME:' *.[ch] "
"| awk '{ sub(/\\/\\//, \"\"); sub(/\\/\\*/, \"\"); "
"gsub (/:[\\ \\t]*FIXME/, \":\ FIXME\"); print }' 1>&2 | true")
)
)
(defun todo-and-fixme-list ()
"Find TODOs and FIXMEs"
(interactive)
(grep (concat "grep -nH -e 'TODO:' -e 'FIXME:' *.[ch] "
"| awk '{ sub(/\\/\\//, \"\"); sub(/\\/\\*/, \"\"); "
"gsub (/:[\\ \\t]*TODO/, \": TODO\"); "
"gsub (/:[\\ \\t]*FIXME/, \":\ FIXME\"); print }' 1>&2 | true")
)
)