From 2018709128c9a21ee1b8b1a356d5e0616c070479 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Wed, 7 Dec 2011 22:21:32 +0200 Subject: [PATCH] refactored prog-mode related config into a separate module --- init.el | 1 + modules/prelude-core.el | 72 --------------------- modules/prelude-programming.el | 113 +++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 72 deletions(-) create mode 100644 modules/prelude-programming.el diff --git a/init.el b/init.el index 3c54dff..5317cce 100644 --- a/init.el +++ b/init.el @@ -67,6 +67,7 @@ by Prelude.") (require 'prelude-global-keybindings) ;; programming & markup languages support +(require 'prelude-programming) (require 'prelude-c) (require 'prelude-clojure) (require 'prelude-coffee) diff --git a/modules/prelude-core.el b/modules/prelude-core.el index d7b31f0..8398cd2 100644 --- a/modules/prelude-core.el +++ b/modules/prelude-core.el @@ -34,7 +34,6 @@ (require 'cl) (require 'thingatpt) -(require 'imenu) (defun prelude-add-subfolders-to-load-path (parent-dir) "Adds all first level `parent-dir' subdirs to the @@ -244,63 +243,11 @@ there's a region, all lines that region covers will be duplicated." (cond ((search-forward " +;; URL: http://www.emacswiki.org/cgi-bin/wiki/Prelude +;; Version: 1.0.0 +;; Keywords: convenience + +;; This file is not part of GNU Emacs. + +;;; Commentary: + +;; Some basic prog-mode configuration and programming related utilities. + +;;; License: + +;; 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 3 +;; 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Code: + +(require 'imenu) + +(defun prelude-ido-goto-symbol (&optional symbol-list) + "Refresh imenu and jump to a place in the buffer using Ido." + (interactive) + (unless (featurep 'imenu) + (require 'imenu nil t)) + (cond + ((not symbol-list) + (let ((ido-mode ido-mode) + (ido-enable-flex-matching + (if (boundp 'ido-enable-flex-matching) + ido-enable-flex-matching t)) + name-and-pos symbol-names position) + (unless ido-mode + (ido-mode 1) + (setq ido-enable-flex-matching t)) + (while (progn + (imenu--cleanup) + (setq imenu--index-alist nil) + (prelude-ido-goto-symbol (imenu--make-index-alist)) + (setq selected-symbol + (ido-completing-read "Symbol? " symbol-names)) + (string= (car imenu--rescan-item) selected-symbol))) + (unless (and (boundp 'mark-active) mark-active) + (push-mark nil t nil)) + (setq position (cdr (assoc selected-symbol name-and-pos))) + (cond + ((overlayp position) + (goto-char (overlay-start position))) + (t + (goto-char position))))) + ((listp symbol-list) + (dolist (symbol symbol-list) + (let (name position) + (cond + ((and (listp symbol) (imenu--subalist-p symbol)) + (prelude-ido-goto-symbol symbol)) + ((listp symbol) + (setq name (car symbol)) + (setq position (cdr symbol))) + ((stringp symbol) + (setq name symbol) + (setq position + (get-text-property 1 'org-imenu-marker symbol)))) + (unless (or (null position) (null name) + (string= (car imenu--rescan-item) name)) + (add-to-list 'symbol-names name) + (add-to-list 'name-and-pos (cons name position)))))))) + +(defun prelude-local-comment-auto-fill () + (set (make-local-variable 'comment-auto-fill-only-comments) t) + (auto-fill-mode t)) + +(defun prelude-add-watchwords () + (font-lock-add-keywords + nil '(("\\<\\(FIX\\|TODO\\|FIXME\\|HACK\\|REFACTOR\\):" + 1 font-lock-warning-face t)))) + +;; show the name of the current function definition in the modeline +(require 'which-func) +(which-func-mode 1) + +(defun prelude-prog-mode-hook () + "Default coding hook, useful with any programming language." + (flyspell-prog-mode) + (prelude-local-comment-auto-fill) + (prelude-turn-on-whitespace) + (prelude-turn-on-abbrev) + (prelude-add-watchwords) + ;; keep the whitespace decent all the time + (add-hook 'before-save-hook 'whitespace-cleanup nil t)) + +;; in Emacs 24 programming major modes generally derive +;; from a common mode named prog-mode +(add-hook 'prog-mode-hook 'prelude-prog-mode-hook) + +(provide 'prelude-programming) +;;; prelude-programming.el ends here