;; -*- emacs-lisp -*- ;; This is Glyn's file for Emacs resurrected for his 40th birthday in 1997. ;;;;;;;;;;;;; ;;PATHS ETC. ;; Setting the load-path (setq load-path (cons "~/elisp" load-path)) (add-to-list 'load-path "/home/glyn/elisp/roman-calendar") (add-to-list 'load-path "~/elisp/bbdb-2.35/lisp") (add-to-list 'load-path "~/elisp/bbdb-2.35/texinfo") (setq load-path (cons "~/elisp/org/lisp" load-path)) (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/muse") (add-to-list 'load-path "~/.emacs.d/plugins/yasnippet") (require 'yasnippet) (yas/initialize) (yas/load-directory "~/.emacs.d/plugins//yasnippet/snippets") ;; Info-path stuff (require 'info) (add-to-list 'Info-default-directory-list "/usr/local/texlive/2009/texmf/doc/info") (setq Info-directory-list (cons "~/info" Info-default-directory-list)) ;; and for bitmaps (setq x-bitmap-file-path "~/bitmaps") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ESSENTIAL PRELIMINARY STUFF - makng it usable. (require 'cl) ; common lisp support (setq warning-suppress-types nil) ;; to enable byte-compilation of code (setq line-move-visual nil) ;; Corrects a blunder made in emacs 23 (windmove-default-keybindings) ;; window hopping with Shift arrow keys (setq gnus-agent nil) (setq inhibit-startup-message t) ; tidy up the screen (if (fboundp 'tool-bar-mode) (tool-bar-mode -1)) (scroll-bar-mode -1) (display-time) ;tell me the time (setq debug-on-error t) ;; useful when testing, (put 'downcase-region 'disabled nil) (setq minibuffer-max-depth nil) (setq default-frame-plist '(width 104 height 46)) ;; make new frames nice and wide (setq visible-bell t) ;; get rid of annoying bleeps (require 'smooth-scrolling) (require 'font-lock) ;;; Don't quit unless you mean it! (defun maybe-save-buffers-kill-emacs (really) "If REALLY is 'yes', call save-buffers-kill-emacs." (interactive "sAre you sure about this? ") (if (equal really "yes") (save-buffers-kill-emacs))) (global-set-key [(control x)(control c)] 'maybe-save-buffers-kill-emacs) ;;; Place my domain name in the title bar! (setq frame-title-format `("@" ,(system-name) ": " (buffer-file-name "%f" (dired-directory dired-directory)))) ;; Preserve the owner and group of the file you’re editing (this is ;; especially important if you edit files as root). (setq backup-by-copying-when-mismatch t) ;; Get rid of that awful spraying of backup files! (setq backup-by-copying t ; don't clobber symlinks backup-directory-alist '(("." . "~/.saves")) ; don't litter my fs tree delete-old-versions t kept-new-versions 6 kept-old-versions 2 version-control t) ; use versioned backups ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Modeline stuff (setq display-time-day-and-date t ; Display the day and date in the mode line display-time-form-list '(date time-text load) display-time-interval 30 ; Redisplay every thirty seconds display-time-24hr-format t ; Use 24hr format display-time-use-mail-icon t) ; tell me if mail is waiting. (when (fboundp size-indication-mode) (size-indication-mode t)) (line-number-mode t) ; show line numbers (column-number-mode t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Set up my own menu! (easy-menu-define gtb-menu global-map "GlynMenu" '("GlynMenu" ("Templates" ;; submenu ["Sermon" (insert-file-contents "/home/glyn/templates/sermon.tex")] ["Org-article" (insert-file-contents "/home/glyn/templates/article.org")] ["Beamer Slide" (insert-file-contents "/home/glyn/templates/slideshow.tex")] ["Org-slides" (insert-file-contents "/home/glyn/templates/beamer.org")] ["Glyn Letter" (insert-file-contents "/home/glyn/templates/glynletter.tex")] ["Church Letter" (insert-file-contents "/home/glyn/templates/churchletter.tex")] ["Ars-Classica" (insert-file-contents "/home/glyn/templates/arsclassica.tex")] ["Handout-Tufte" (insert-file-contents "/home/glyn/templates/tufte.tex")]) ("Services" ["Morning Worship" (insert-file-contents "/home/glyn/templates/morningworship.txt")] ["Evening Worship" (insert-file-contents "/home/glyn/templates/eveningworship.txt")] ["Morning Communion" (insert-file-contents "/home/glyn/templates/morningcommunion.txt")] ["Evening Communion" (insert-file-contents "/home/glyn/templates/eveningcommunion.txt")] ["Funeral" (insert-file-contents "/home/glyn/templates/funeral.tex")]))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; KEYS ETC ;; Glyn's Keybinding Table - for function keys. NB the "C-function" ;; keys are used by the window manager. ;; One can use the left hand windows key like this - ;;;;; (global-set-key (kbd "s-a") 'org-agenda-list That opens up all ;;;;; sortf of possibilities. (global-set-key (kbd "TAB") 'smart-tab) (global-set-key [f1] 'undo) (global-set-key [f2] 'kill-region) ;; ;;; does commenting for various languages (autoload 'comment-out-region "comment" nil t) (global-set-key [f3] 'comment-dwim) (global-set-key [f4] 'gnus) (require 'boxquote) (global-set-key (kbd "C-c b y") 'boxquote-yank) (global-set-key (kbd "C-c b r") 'boxquote-region) (global-set-key (kbd "C-c b u") 'boxquote-unbox-region) (global-set-key (kbd "C-c b t") 'boxquote-title) (global-set-key (kbd "C-c b i") 'boxquote-insert-file) (global-set-key (kbd "C-c b k") 'boxquote-kill) (global-set-key (kbd "C-c b s") 'boxquote-shell-command) (global-set-key (kbd "C-c b b") 'boxquote-buffer) (global-set-key (kbd "C-c b p") 'boxquote-paragraph) (global-set-key (kbd "C-c b n") 'boxquote-narrow-to-boxquote) ;;NOTE THE FORMAT HERE!! (require 'scissors) ;; just an example (global-set-key [(control f11)] 'scissors) ;for snipping! (global-set-key [f8] 'scissors) ;; Fire up org's table mode (global-set-key [f9] 'orgtbl-mode) ;;; Handy macro keys (global-set-key [f10] 'start-kbd-macro) (global-set-key [f11] 'end-kbd-macro) (global-set-key [f12] 'call-last-kbd-macro) ;; Fantastically useful function with an awful default binding (global-set-key [(meta f2)] 'query-replace-regexp) ;; Useful - kill entire line wherever you are on it! ;; ;;; kill entire line. (defun Init-kill-entire-line (&optional arg) "Kill the entire line. With prefix argument, kill that many lines from point. Negative arguments kill lines backward. When calling from a program, nil means \"no arg\", a number counts as a prefix arg." (interactive "*P") (let ((kill-whole-line t)) (beginning-of-line) (call-interactively 'kill-line))) ;; ;;:* bind key to Init-kill- (global-set-key (quote [67108925]) (quote Init-kill-entire-line)) ;;; Why this doesn;'t work out of the box I don't know - but lets see ;;; if setting it here works any better (global-set-key (kbd "C-p") 'previous-line) ;;;;;;;;;;;; ;; Bookmarks ;; (setq bookmark-default-file "~/.emacs.d/bookmarks" ;; keep my ~/ clean bookmark-save-flag 1) ;; autosave each change) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; stark-frame ;; http://www.emacswiki.org/cgi-bin/wiki/Rick_Bielawski ;; This toggles on/off the menu and tool bars for more editing space. (defvar stark-frame ()) (defun stark-frame () "Toggle toobar & menu bar on/off." (interactive) (setq stark-frame (not stark-frame)) (tool-bar-mode (if stark-frame 0 1)) (menu-bar-mode (if stark-frame 0 1)) (if stark-frame (set-frame-size (selected-frame) (frame-width) (+ (frame-height) 1)) (set-frame-size (selected-frame) (frame-width) (- (frame-height) 1)))) (global-set-key (kbd "<S-f10>") 'stark-frame) ;; List recent files edited. ;;recentf (require 'recentf) (recentf-mode 1) (setq recentf-max-saved-items 30) (setq recentf-max-menu-items 30) ;;; save place in files being edited. (setq save-place-file "~/.emacs.d/saveplace") ;; keep my ~/ clean (setq-default save-place t) ;; activate it for all buffers (require 'saveplace) ;; get the package ;;; WINDOW SPLITTING (global-set-key (kbd "M-2") 'split-window-horizontally) (global-set-key (kbd "M-1") 'delete-other-windows) (global-set-key (kbd "M-0") 'delete-window) (global-set-key (kbd "M-o") 'other-window) ;; Dedicated windows in Emacs (defun toggle-window-dedicated-p () (interactive) (let ((s (selected-window))) (set-window-dedicated-p s (not (window-dedicated-p s))))) (global-set-key (kbd "C-c d") 'toggle-window-dedicated-p) ;; Swap windows - (defun swap-windows () "If you have 2 windows, it swaps them." (interactive) (cond ((/= (count-windows) 2) (message "You need exactly 2 windows to do this.")) (t (let* ((w1 (first (window-list))) (w2 (second (window-list))) (b1 (window-buffer w1)) (b2 (window-buffer w2)) (s1 (window-start w1)) (s2 (window-start w2))) (set-window-buffer w1 b2) (set-window-buffer w2 b1) (set-window-start w1 s2) (set-window-start w2 s1)))) (other-window 1)) (global-set-key (kbd "C-c s") 'swap-windows) ;; cua-mode (setq cua-enable-cua-keys nil) ;; only for rectangles (cua-mode t) ;; buffer management (require 'ibuffer) (setq ibuffer-saved-filter-groups (quote (("default" ("Org" ;; all org-related buffers (mode . org-mode)) ("Mail" (or ;; mail-related buffers (mode . message-mode) (mode . mail-mode) ;; etc.; all your mail related modes )) ("LaTeX" (or (mode . latex-mode) (mode . LaTeX-mode) (mode . bibtex-mode) (mode . reftex-mode))) ;; ("MyProject1" ;; (filename . "src/myproject1/")) ;; ("MyProject2" ;; (filename . "src/myproject2/")) ("Programming" ;; prog stuff not already in MyProjectX (or (mode . c-mode) (mode . perl-mode) (mode . python-mode) (mode . emacs-lisp-mode) ;; etc )))))) (add-hook 'ibuffer-mode-hook (lambda () (ibuffer-switch-to-saved-filter-groups "default"))) (global-set-key (kbd "C-x C-b") 'ibuffer) (when (fboundp 'show-paren-mode) (show-paren-mode t) (setq show-paren-style 'parenthesis)) ;; (require 'uniquify) ;; (setq uniquify-buffer-name-style 'forward) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; MESSAGING ;; Gnus (setq mail-user-agent 'gnus-user-agent) (setq message-mail-user-agent t) (autoload 'footnote-mode "footnote" nil t) ;; Example for Gnus. (add-hook 'message-mode-hook 'footnote-mode) ;; If you would like to attach all marked files from dired to a new ;; Gnus message then put the following in your .emacs: (require 'gnus-dired) (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode) ;; Then, from dired, you can mark files as normal and then hit C-c ;; C-m C-a to attach the files (as attachments, not inline) to a ;; message. If you would like to have an easier to get to binding I ;; would suggest the following: (define-key dired-mode-map "a" 'gnus-dired-attach) (put 'rmail 'disabled t) ; avoid mbox destruction - make certain rmail ;; doesn't start by mistake! ;; run Gnus in another frame (defun gmgnus () "run Gnus in another frame without too much typing" (interactive) (gnus-other-frame)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; TEXT STUFF ;;;this line sets word-wrap right (add-hook 'text-mode-hook (lambda () (setq fill-column 73))) (add-hook 'latex-mode-hook (lambda () (setq fill-column 73))) (add-hook 'text-mode-hook 'turn-on-auto-fill) (add-hook 'latex-mode-hook 'turn-on-auto-fill) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LOAD UP PACKAGES ;; ; General Emacs UI improvements. ;; ;(require 'uniquify) ;; ;(require 'icomplete) (require 'uptimes) ;; ;; (require 'links) ;; ;;; Funky citation package for Gnus (autoload 'trivial-cite "tc" t t) ;;;;;;;;;;;;;;;;; Remote editing with tramp ;; C-x C-f /remotehost:filename RET (or /method:user@remotehost:filename) ;; ;; Using su to edit stuff as root ;; ;; C-x C-f /su::/etc/hosts RET (require 'tramp) (setq tramp-default-method "ssh") ;;;;;; Python-mode. This is a major mode for editing Python programs. (setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist)) (setq interpreter-mode-alist (cons '("python" . python-mode) interpreter-mode-alist)) (autoload 'python-mode "python-mode" "Python editing mode." t) ;;;;; Extra poke for dired with dired-ex (setq dired-recursive-deletes 'top) (add-hook 'dired-load-hook (lambda () (load "dired-x") ;; Set dired-x global variables here. For example: ;; (setq dired-guess-shell-gnutar "gtar") ;; (setq dired-x-hands-off-my-keys nil) )) (add-hook 'dired-mode-hook (lambda () ;; Set dired-x buffer-local variables here. For example: ;; (dired-omit-mode 1) )) ;;; Even more poke for dired with dired+.el (require 'dired+) ;;; AUCTEX STUFF. ;; (require 'tex-site) (load "auctex.el" nil t t) (load "preview-latex.el" nil t t) (setq TeX-auto-save t) (setq TeX-parse-self t) (setq-default TeX-master nil) (setq reftex-plug-into-AUCTeX t) ;; ;;; set up ASPELL ;; (setq ispell-process-directory (expand-file-name "~/")) ;; (setq-default ispell-program-name "/usr/local/bin/aspell") ;; (setq ispell-really-aspell t) ;;;;;;;;;;; MUSE Mode - funky authoring (require 'outline) (require 'muse) (require 'muse-mode) ; load authoring mode (require 'muse-colors) ; load coloring/font-lock module (require 'muse-project) (require 'muse-html) ; load publishing styles I use (require 'muse-journal) (require 'muse-latex) ;; ;; ;; My own styles for various publications. (setq muse-html-style-sheet "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"/home/glyn/templates/muse/mystyle.css\" />") (setq muse-latex-header "/home/glyn/templates/muse/ltxheader.tex") (setq muse-latex-footer "/home/glyn/templates/muse/ltxfooter.tex") (setq muse-latex-slides-header "/home/glyn/templates/muse/ltxslideheader.tex") (setq muse-latex-slides-footer "/home/glyn/templates/muse/ltxslidefooter.tex") ;;; How to set up different cascading style sheets for different ;;; projects - REALLY hard to track this down in the docs etc because ;;; it isn't there The technique is to derive a new style from "html" ;;; and use that instead, using muse-derive-style (muse-derive-style "glynweb-html" "html" :style-sheet "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"../css/mystyle.css\" />") (muse-derive-style "central-html" "html" :style-sheet "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"../css/centralmain.css\" />") ;; note the use of base: to set the per-project style-sheet :-) (setq muse-project-alist '(("glynweb" ("~/html/glynweb/glyn" :default "index" ) (:base "glynweb-html" :path "~/html/glynweb/glyn")) ("central" ("~/html/glynweb/central" :default "index") (:base "central-html" :path "~/html/glynweb/central")))) ;;; If these fail then Muse will use the default stylesheet ;; CSS-mode (add-to-list 'auto-mode-alist '("\\.css\\'" . css-mode)) (autoload 'css-mode "css-mode" nil t) ;; ;; FVWM mode ;; Mode for editing config files for the wonderful Fvwm window manager (require 'fvwm-mode) (setq auto-mode-alist (cons '("config" . fvwm-mode) (cons '("FvwmApplet-" . fvwm-mode) (cons '("FvwmScript-" . fvwm-mode) auto-mode-alist)))) ;; this one from Dave Pearson (require 'thinks) ;; ;;;;;;; liturgical calendar stuff (require 'cal-catholic) ;; ;;;;;;;;;; Diary adjustments for liturgy (add-hook 'diary-display-hook 'fancy-diary-display) ;; ; ;;fire up bbdb put this last (require 'bbdb) (bbdb-initialize 'gnus 'message) (setq bbdb-sounds-directory nil) ;; ;;; next line vital to make bbdb work with aliases (add-hook 'message-setup-hook 'bbdb-define-all-aliases) ;; ;;; ;;; filladapt (require 'filladapt) (setq-default filladapt-mode t) (add-hook 'text-mode-hook 'turn-on-filladapt-mode) ;; ;;;;;; LILYPOND THE MUSIC TYPESETTER!!!! ;;;;;; (autoload 'LilyPond-mode "lilypond-mode") (setq auto-mode-alist (cons '("\\.ly$" . LilyPond-mode) auto-mode-alist)) (add-hook 'LilyPond-mode-hook (lambda () (turn-on-font-lock))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Diary stuff (setq diary-file "~/.emacs.d/diary") (setq cal-tex-diary t calendar-date-display-form ' ((if dayname (concat dayname ", ")) day " " monthname " " year) calendar-time-display-form '(24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")")) calendar-week-start-day 1 diary-mail-addr "glyn" diary-mail-days 7 european-calendar-style t ;; I live there!! mark-diary-entries-in-calendar t number-of-diary-entries 7 view-diary-entries-initially t) ;;; Shakespeare!! (autoload 'shq-insert-quote "shakespeare-quote" "" t) (autoload 'shakespeare-signature "shakespeare-quote" "" t) ;; all.el -!! Edit all lines matching a given regexp. Priceless! (require 'all) ;;; Htmlize - convert elisp buffers into html code. (require 'htmlize) (setq htmlize-output-type 'font) ;;;;;;;; Org Mode (require 'org-install) (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (add-hook 'org-mode-hook 'turn-on-font-lock) ;; helps with timings (setq org-log-done t) ;; The agenda view is nifty! ;; (setq org-agenda-files (list "~/org/")) (setq org-agenda-files (quote ("~/org/glyn.org" "~/org/notes.org" "~/org/tech.org" "~/org/god.org" "~/org/politics.org" "~/org/journal.org" ))) ;; lets include diary entries (setq org-agenda-include-diary t) (setq org-todo-keywords '("TODO" "NEXT" "STARTED" "WAITING" "DONE")) ; hopefully cures clash between org and yasnippet (add-hook 'org-mode-hook (lambda () (org-set-local 'yas/trigger-key [tab]) (define-key yas/keymap [tab] 'yas/next-field-group))) ;; useful function for rapid access to main org file M-x gorg brings ;; it up immediately (defun gorg () (interactive) (find-file "/home/glyn/org/glyn.org")) ;;; Org-capture and file - fantastic note-making kit!! (setq org-default-notes-file "~/org/notes.org") (define-key global-map "\C-cc" 'org-capture) (setq org-capture-templates '(("t" "Todo" entry (file+headline "~/org/glyn.org" "Tasks") "* TODO %?\n %i\n %a") ("j" "Journal" entry (file+datetree "~/org/journal.org" "Journal") "* %?\nEntered on %U\n %i\n %a") ("n" "Notes" entry (file+headline "~/org/notes.org" "Notes") "* %?\n%^T\n%i\n %a") ("c" "Technical" entry (file+headline "~/org/tech.org" "Technical") "* %?\n%^T\n%i\n %a"))) ; refile setup. ; Use IDO for target completion (setq org-completion-use-ido t) ; Targets include this file and any file contributing to the agenda - ; up to 5 levels deep. (setq org-refile-targets (quote ((org-agenda-files :maxlevel . 5) ("/home/glyn/org/god.org" :maxlevel . 5) ("/home/glyn/org/tech.org" :maxlevel . 5) ("/home/glyn/org/journal.org" :maxlevel . 5)))) ; Targets start with the file name - allows creating level 1 tasks (setq org-refile-use-outline-path (quote file)) ; Targets complete in steps so we start with filename, TAB shows the next level of targets etc (setq org-outline-path-complete-in-steps t) ; Allow refile to create parent tasks with confirmation (setq org-refile-allow-creating-parent-nodes (quote confirm)) ; Use IDO only for buffers ; set ido-mode to buffer and ido-everywhere to t via the customize interface ; '(ido-mode (quote both) nil (ido)) ; '(ido-everywhere t) ;;;;;;;;;;;;; Flyspell mode ;; Flyspell enables on-the-fly spell checking in Emacs by the means ;; of a minor mode. (autoload 'flyspell-mode "flyspell" "On-the-fly spelling checker." t) (autoload 'flyspell-delay-command "flyspell" "Delay on command." t) (autoload 'tex-mode-flyspell-verify "flyspell" "" t) ; (setq ispell-parser 'tex) ; (add-hook 'LaTeX-mode-hook 'flyspell-mode) ;;;; LaTeX hooks (add-hook 'LaTeX-mode-hook (lambda () (require 'reftex) (turn-on-reftex) (setq reftex-plug-into-AUCTeX t) (outline-minor-mode 1) (turn-on-auto-fill) (setq ispell-parser 'tex) (flyspell-mode 1) (setq TeX-auto-save t) (setq TeX-parse-self t) (setq-default TeX-master nil))) ;; Tags file creation (defun create-tags (dir-name) "Create tags file." (interactive "DDirectory: ") (eshell-command (format "find %s -type f -name \"*el\" | etags -" dir-name))) ;;;;;;;;;;;;;; HTML-helper mode ;; (autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t) ;; (setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist)) ;; clean out buffers except scratch,and maybe agenda and org (defun restart () "This one kills of all buffers except scratch and the others named" (interactive) (let ((list (buffer-list))) (while list (let* ((buffer (car list)) (name (buffer-name buffer))) (and (not (string-equal name "*scratch*")) ;; ;(not (string-equal name "*Org Agenda*")) ;; ;(not (string-equal name "greg.org")) (kill-buffer buffer))) (setq list (cdr list))))) ;;; anything.el ;; While normal Emacs way is specifying action then selecting ;; candidates, the anything way is narrowing and selecting candidates ;; then executing action for selected candidates. It is something like ;; “QuickSilver? for emacs”. (require 'anything-config) (defun my-anything () (interactive) (anything-other-buffer '(anything-c-source-buffers anything-c-source-buffer-not-found anything-c-source-file-name-history anything-c-source-files-in-current-dir anything-c-source-occur anything-c-source-bookmarks anything-c-source-info-pages anything-c-source-info-elisp anything-c-source-man-pages anything-c-source-locate anything-c-source-emacs-commands anything-c-source-emacs-functions anything-c-source-kill-ring) " *my-anything*")) (global-set-key [f7] 'my-anything) ;; deeply nifty!! (require 'winring) (winring-initialize) ;; (add-to-list 'load-path "~/elisp/slime/") ;; (setq inferior-lisp-program "/usr/bin/clisp") ; your Lisp system ;; (require 'slime) ;; ; (slime-setup) ;; (slime-setup '(slime-repl)) ;; Change cursor color according to mode; inspired by ;; http://www.emacswiki.org/emacs/ChangingCursorDynamically (setq djcb-read-only-color "pink") ;; valid values are t, nil, box, hollow, bar, (bar . WIDTH), hbar, ;; (hbar. HEIGHT); see the docs for set-cursor-type (setq djcb-read-only-cursor-type 'box) (setq djcb-overwrite-color "yellow") (setq djcb-overwrite-cursor-type 'box) (setq djcb-normal-color "red") (setq djcb-normal-cursor-type 'bar) (defun djcb-set-cursor-according-to-mode () "change cursor color and type according to some minor modes." (cond (buffer-read-only (set-cursor-color djcb-read-only-color) (setq cursor-type djcb-read-only-cursor-type)) (overwrite-mode (set-cursor-color djcb-overwrite-color) (setq cursor-type djcb-overwrite-cursor-type)) (t (set-cursor-color djcb-normal-color) (setq cursor-type djcb-normal-cursor-type)))) (add-hook 'post-command-hook 'djcb-set-cursor-according-to-mode) ;;;;;;;;;; TRANSIT CAMP try out new stuff ;; This browse-kill-ring thing could be fantastically useful!! (require 'browse-kill-ring) (browse-kill-ring-default-keybindings) ;; transit camp ends here. ;; detach custom file (setq custom-file "~/.emacs.d/custom.el") (load custom-file 'noerror) (put 'upcase-region 'disabled nil) (put 'narrow-to-region 'disabled nil) ;; The Big Emacs Welcome. (let ((string "Welcome aboard - hang on to your hat.")) (message string) (sit-for 2))