moved back the prelude modules into the main Prelude project
This commit is contained in:
parent
207d21b5cd
commit
b01492e7ea
32 changed files with 1512 additions and 22 deletions
358
core/prelude-core.el
Normal file
358
core/prelude-core.el
Normal file
|
@ -0,0 +1,358 @@
|
|||
;;; prelude-core.el --- Emacs Prelude: core Prelude defuns.
|
||||
;;
|
||||
;; Copyright (c) 2011-2012 Bozhidar Batsov
|
||||
;;
|
||||
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
||||
;; URL: http://batsov.com/emacs-prelude
|
||||
;; Version: 1.0.0
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Here are the definitions of most of the functions added by Prelude.
|
||||
|
||||
;;; 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 'thingatpt)
|
||||
|
||||
(defun prelude-open-with ()
|
||||
"Simple function that allows us to open the underlying
|
||||
file of a buffer in an external program."
|
||||
(interactive)
|
||||
(when buffer-file-name
|
||||
(shell-command (concat
|
||||
(if (eq system-type 'darwin)
|
||||
"open"
|
||||
(read-shell-command "Open current file with: "))
|
||||
" "
|
||||
buffer-file-name))))
|
||||
|
||||
(defun prelude-buffer-mode (buffer-or-name)
|
||||
(with-current-buffer buffer-or-name major-mode))
|
||||
|
||||
(defun prelude-visit-term-buffer ()
|
||||
(interactive)
|
||||
(if (not (get-buffer "*ansi-term*"))
|
||||
(ansi-term (getenv "SHELL"))
|
||||
(switch-to-buffer "*ansi-term*")))
|
||||
|
||||
(defun prelude-google ()
|
||||
"Googles a query or region if any."
|
||||
(interactive)
|
||||
(browse-url
|
||||
(concat
|
||||
"http://www.google.com/search?ie=utf-8&oe=utf-8&q="
|
||||
(url-hexify-string (if mark-active
|
||||
(buffer-substring (region-beginning) (region-end))
|
||||
(read-string "Google: "))))))
|
||||
|
||||
(defun prelude-indent-rigidly-and-copy-to-clipboard (begin end indent)
|
||||
"Copy the selected code region to the clipboard, indented according
|
||||
to Markdown blockquote rules."
|
||||
(let ((buffer (current-buffer)))
|
||||
(with-temp-buffer
|
||||
(insert-buffer-substring-no-properties buffer begin end)
|
||||
(indent-rigidly (point-min) (point-max) indent)
|
||||
(clipboard-kill-ring-save (point-min) (point-max)))))
|
||||
|
||||
(defun prelude-indent-blockquote-and-copy-to-clipboard (begin end)
|
||||
"Copy the selected code region to the clipboard, indented according
|
||||
to markdown blockquote rules (useful to copy snippets to StackOverflow, Assembla, Github."
|
||||
(interactive "r")
|
||||
(prelude-indent-rigidly-and-copy-to-clipboard begin end 4))
|
||||
|
||||
(defun prelude-indent-nested-blockquote-and-copy-to-clipboard (begin end)
|
||||
"Copy the selected code region to the clipboard, indented according
|
||||
to markdown blockquote rules. Useful to add snippets under bullet points."
|
||||
(interactive "r")
|
||||
(prelude-indent-rigidly-and-copy-to-clipboard begin end 6))
|
||||
|
||||
(defun prelude-insert-empty-line ()
|
||||
"Insert an empty line after the current line and positon
|
||||
the curson at its beginning, according to the current mode."
|
||||
(interactive)
|
||||
(move-end-of-line nil)
|
||||
(open-line 1)
|
||||
(forward-line 1)
|
||||
(indent-according-to-mode))
|
||||
|
||||
(defun prelude-move-line-up ()
|
||||
"Move up the current line."
|
||||
(interactive)
|
||||
(transpose-lines 1)
|
||||
(forward-line -2))
|
||||
|
||||
(defun prelude-move-line-down ()
|
||||
"Move down the current line."
|
||||
(interactive)
|
||||
(forward-line 1)
|
||||
(transpose-lines 1)
|
||||
(forward-line -1))
|
||||
|
||||
(defun prelude-indent-buffer ()
|
||||
"Indents the entire buffer."
|
||||
(interactive)
|
||||
(indent-region (point-min) (point-max)))
|
||||
|
||||
(defun prelude-indent-region-or-buffer ()
|
||||
"Indents a region if selected, otherwise the whole buffer."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(if (region-active-p)
|
||||
(progn
|
||||
(indent-region (region-beginning) (region-end))
|
||||
(message "Indented selected region."))
|
||||
(progn
|
||||
(prelude-indent-buffer)
|
||||
(message "Indented buffer.")))))
|
||||
|
||||
(defun prelude-annotate-todo ()
|
||||
"Put fringe marker on TODO: lines in the curent buffer."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "TODO:" nil t)
|
||||
(let ((overlay (make-overlay (- (point) 5) (point))))
|
||||
(overlay-put overlay
|
||||
'before-string
|
||||
(propertize (format "A")
|
||||
'display '(left-fringe right-triangle)))))))
|
||||
|
||||
(defun prelude-copy-file-name-to-clipboard ()
|
||||
"Copy the current buffer file name to the clipboard."
|
||||
(interactive)
|
||||
(let ((filename (if (equal major-mode 'dired-mode)
|
||||
default-directory
|
||||
(buffer-file-name))))
|
||||
(when filename
|
||||
(kill-new filename)
|
||||
(message "Copied buffer file name '%s' to the clipboard." filename))))
|
||||
|
||||
(defun prelude-duplicate-current-line-or-region (arg)
|
||||
"Duplicates the current line or region ARG times.
|
||||
If there's no region, the current line will be duplicated. However, if
|
||||
there's a region, all lines that region covers will be duplicated."
|
||||
(interactive "p")
|
||||
(let (beg end (origin (point)))
|
||||
(if (and mark-active (> (point) (mark)))
|
||||
(exchange-point-and-mark))
|
||||
(setq beg (line-beginning-position))
|
||||
(if mark-active
|
||||
(exchange-point-and-mark))
|
||||
(setq end (line-end-position))
|
||||
(let ((region (buffer-substring-no-properties beg end)))
|
||||
(-dotimes arg
|
||||
(lambda ()
|
||||
(goto-char end)
|
||||
(newline)
|
||||
(insert region)
|
||||
(setq end (point))))
|
||||
(goto-char (+ origin (* (length region) arg) arg)))))
|
||||
|
||||
;; TODO doesn't work with uniquify
|
||||
(defun prelude-rename-file-and-buffer ()
|
||||
"Renames current buffer and file it is visiting."
|
||||
(interactive)
|
||||
(let ((name (buffer-name))
|
||||
(filename (buffer-file-name)))
|
||||
(if (not (and filename (file-exists-p filename)))
|
||||
(message "Buffer '%s' is not visiting a file!" name)
|
||||
(let ((new-name (read-file-name "New name: " filename)))
|
||||
(cond ((get-buffer new-name)
|
||||
(message "A buffer named '%s' already exists!" new-name))
|
||||
(t
|
||||
(rename-file name new-name 1)
|
||||
(rename-buffer new-name)
|
||||
(set-visited-file-name new-name)
|
||||
(set-buffer-modified-p nil)))))))
|
||||
|
||||
(defun prelude-delete-file-and-buffer ()
|
||||
"Kills the current buffer and deletes the file it is visiting"
|
||||
(interactive)
|
||||
(let ((filename (buffer-file-name)))
|
||||
(when filename
|
||||
(delete-file filename)
|
||||
(message "Deleted file %s" filename)))
|
||||
(kill-buffer))
|
||||
|
||||
(defun prelude-view-url ()
|
||||
"Open a new buffer containing the contents of URL."
|
||||
(interactive)
|
||||
(let* ((default (thing-at-point-url-at-point))
|
||||
(url (read-from-minibuffer "URL: " default)))
|
||||
(switch-to-buffer (url-retrieve-synchronously url))
|
||||
(rename-buffer url t)
|
||||
;; TODO: switch to nxml/nxhtml mode
|
||||
(cond ((search-forward "<?xml" nil t) (xml-mode))
|
||||
((search-forward "<html" nil t) (html-mode)))))
|
||||
|
||||
(defun prelude-untabify-buffer ()
|
||||
(interactive)
|
||||
(untabify (point-min) (point-max)))
|
||||
|
||||
(defun prelude-cleanup-buffer ()
|
||||
"Perform a bunch of operations on the whitespace content of a buffer."
|
||||
(interactive)
|
||||
(prelude-indent-buffer)
|
||||
(prelude-untabify-buffer)
|
||||
(whitespace-cleanup))
|
||||
|
||||
(defun prelude-eval-and-replace ()
|
||||
"Replace the preceding sexp with its value."
|
||||
(interactive)
|
||||
(backward-kill-sexp)
|
||||
(condition-case nil
|
||||
(prin1 (eval (read (current-kill 0)))
|
||||
(current-buffer))
|
||||
(error (message "Invalid expression")
|
||||
(insert (current-kill 0)))))
|
||||
|
||||
(defun prelude-recompile-init ()
|
||||
"Byte-compile all your dotfiles again."
|
||||
(interactive)
|
||||
(byte-recompile-directory prelude-dir 0))
|
||||
|
||||
(defun prelude-sudo-edit (&optional arg)
|
||||
(interactive "p")
|
||||
(if (or arg (not buffer-file-name))
|
||||
(find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
|
||||
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
|
||||
|
||||
(defun prelude-switch-or-start (function buffer)
|
||||
"If the buffer is current, bury it, otherwise invoke the function."
|
||||
(if (equal (buffer-name (current-buffer)) buffer)
|
||||
(bury-buffer)
|
||||
(if (get-buffer buffer)
|
||||
(switch-to-buffer buffer)
|
||||
(funcall function))))
|
||||
|
||||
(defun prelude-insert-date ()
|
||||
"Insert a time-stamp according to locale's date and time format."
|
||||
(interactive)
|
||||
(insert (format-time-string "%c" (current-time))))
|
||||
|
||||
(defun prelude-conditionally-enable-paredit-mode ()
|
||||
"Enable paredit-mode in the minibuffer, during eval-expression."
|
||||
(if (eq this-command 'eval-expression)
|
||||
(paredit-mode 1)))
|
||||
|
||||
(add-hook 'minibuffer-setup-hook 'prelude-conditionally-enable-paredit-mode)
|
||||
|
||||
(defun prelude-recentf-ido-find-file ()
|
||||
"Find a recent file using ido."
|
||||
(interactive)
|
||||
(let ((file (ido-completing-read "Choose recent file: " recentf-list nil t)))
|
||||
(when file
|
||||
(find-file file))))
|
||||
|
||||
(defun prelude-swap-windows ()
|
||||
"If you have 2 windows, it swaps them."
|
||||
(interactive)
|
||||
(if (/= (count-windows) 2)
|
||||
(message "You need exactly 2 windows to do this.")
|
||||
(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))
|
||||
|
||||
(defun prelude-kill-other-buffers ()
|
||||
"Kill all buffers but the current one. Doesn't mess with special buffers."
|
||||
(interactive)
|
||||
(-each
|
||||
(->> (buffer-list)
|
||||
(-filter #'buffer-file-name)
|
||||
(--remove (eql (current-buffer) it)))
|
||||
#'kill-buffer))
|
||||
|
||||
(require 'repeat)
|
||||
|
||||
(defun make-repeatable-command (cmd)
|
||||
"Returns a new command that is a repeatable version of CMD.
|
||||
The new command is named CMD-repeat. CMD should be a quoted
|
||||
command.
|
||||
|
||||
This allows you to bind the command to a compound keystroke andб
|
||||
repeat it with just the final key. For example:
|
||||
|
||||
(global-set-key (kbd \"C-c a\") (make-repeatable-command 'foo))
|
||||
|
||||
will create a new command called foo-repeat. Typing C-c a will
|
||||
just invoke foo. Typing C-c a a a will invoke foo three times,
|
||||
and so on."
|
||||
(fset (intern (concat (symbol-name cmd) "-repeat"))
|
||||
`(lambda ,(help-function-arglist cmd) ;; arg list
|
||||
,(format "A repeatable version of `%s'."
|
||||
(symbol-name cmd)) ;; doc string
|
||||
,(interactive-form cmd) ;; interactive form
|
||||
;; see also repeat-message-function
|
||||
(setq last-repeatable-command ',cmd)
|
||||
(repeat nil)))
|
||||
(intern (concat (symbol-name cmd) "-repeat")))
|
||||
|
||||
(defun prelude-create-scratch-buffer ()
|
||||
"Create a new scratch buffer."
|
||||
(interactive)
|
||||
(progn
|
||||
(switch-to-buffer
|
||||
(get-buffer-create (generate-new-buffer-name "*scratch*")))
|
||||
(emacs-lisp-mode)))
|
||||
|
||||
(defvar prelude-tips
|
||||
'("Press <C-c o> to open a file with external program."
|
||||
"Press <C-c p f> to navigate a project's files with ido."
|
||||
"Press <C-c h> to navigate a project in Helm."
|
||||
"Press <C-c g> to search in Google."
|
||||
"Press <C-c r> to rename the current buffer and file it's visiting."
|
||||
"Press <C-c t> to open a terminal in Emacs."
|
||||
"Explore the Prelude menu to find out about some of Prelude extensions to Emacs."
|
||||
"Access the official Emacs manual by pressing <C-h r>."
|
||||
"Visit WikEmacs at http://wikemacs.org to find out even more about Emacs."))
|
||||
|
||||
(defun prelude-tip-of-the-day ()
|
||||
(interactive)
|
||||
(message
|
||||
(concat "Prelude tip: " (nth (random (length prelude-tips)) prelude-tips))))
|
||||
|
||||
(defun prelude-eval-after-init (form)
|
||||
"Add `(lambda () FORM)' to `after-init-hook'.
|
||||
|
||||
If Emacs has already finished initialization, also eval FORM immediately."
|
||||
(let ((func (list 'lambda nil form)))
|
||||
(add-hook 'after-init-hook func)
|
||||
(when after-init-time
|
||||
(eval form))))
|
||||
|
||||
(defun prelude-exchange-point-and-mark ()
|
||||
"Identical to `exchange-point-and-mark' but will not activate the region."
|
||||
(interactive)
|
||||
(exchange-point-and-mark)
|
||||
(deactivate-mark nil))
|
||||
|
||||
(provide 'prelude-core)
|
||||
;;; prelude-core.el ends here
|
339
core/prelude-editor.el
Normal file
339
core/prelude-editor.el
Normal file
|
@ -0,0 +1,339 @@
|
|||
;;; prelude-editor.el --- Emacs Prelude: enhanced core editing experience.
|
||||
;;
|
||||
;; Copyright (c) 2011-2012 Bozhidar Batsov
|
||||
;;
|
||||
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
||||
;; URL: http://batsov.com/emacs-prelude
|
||||
;; Version: 1.0.0
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Refinements of the core editing experience in Emacs.
|
||||
|
||||
;;; 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:
|
||||
|
||||
;; customize
|
||||
(defgroup prelude nil
|
||||
"Emacs Prelude configuration."
|
||||
:prefix "prelude-"
|
||||
:group 'convenience)
|
||||
|
||||
(defcustom prelude-auto-save t
|
||||
"Non-nil values enable Prelude's auto save."
|
||||
:type 'boolean
|
||||
:group 'prelude)
|
||||
|
||||
(defcustom prelude-guru t
|
||||
"Non-nil values enable guru-mode"
|
||||
:type 'boolean
|
||||
:group 'prelude)
|
||||
|
||||
(defcustom prelude-whitespace nil
|
||||
"Non-nil values enable Prelude's whitespace visualization."
|
||||
:type 'boolean
|
||||
:group 'prelude)
|
||||
|
||||
(defcustom prelude-flyspell t
|
||||
"Non-nil values enable Prelude's flyspell support."
|
||||
:type 'boolean
|
||||
:group 'prelude)
|
||||
|
||||
;; Death to the tabs! However, tabs historically indent to the next
|
||||
;; 8-character offset; specifying anything else will cause *mass*
|
||||
;; confusion, as it will change the appearance of every existing file.
|
||||
;; In some cases (python), even worse -- it will change the semantics
|
||||
;; (meaning) of the program.
|
||||
;;
|
||||
;; Emacs modes typically provide a standard means to change the
|
||||
;; indentation width -- eg. c-basic-offset: use that to adjust your
|
||||
;; personal indentation width, while maintaining the style (and
|
||||
;; meaning) of any files you load.
|
||||
(setq-default indent-tabs-mode nil) ;; don't use tabs to indent
|
||||
(setq-default tab-width 8) ;; but maintain correct appearance
|
||||
|
||||
;; delete the selection with a keypress
|
||||
(delete-selection-mode t)
|
||||
|
||||
;; store all backup and autosave files in the tmp dir
|
||||
(setq backup-directory-alist
|
||||
`((".*" . ,temporary-file-directory)))
|
||||
(setq auto-save-file-name-transforms
|
||||
`((".*" ,temporary-file-directory t)))
|
||||
|
||||
;; revert buffers automatically when underlying files are changed externally
|
||||
(global-auto-revert-mode t)
|
||||
|
||||
;; hippie expand is dabbrev expand on steroids
|
||||
(setq hippie-expand-try-functions-list '(try-expand-dabbrev
|
||||
try-expand-dabbrev-all-buffers
|
||||
try-expand-dabbrev-from-kill
|
||||
try-complete-file-name-partially
|
||||
try-complete-file-name
|
||||
try-expand-all-abbrevs
|
||||
try-expand-list
|
||||
try-expand-line
|
||||
try-complete-lisp-symbol-partially
|
||||
try-complete-lisp-symbol))
|
||||
|
||||
;; smart pairing for all
|
||||
(electric-pair-mode t)
|
||||
|
||||
;; meaningful names for buffers with the same name
|
||||
(require 'uniquify)
|
||||
(setq uniquify-buffer-name-style 'forward)
|
||||
(setq uniquify-separator "/")
|
||||
(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified
|
||||
(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers
|
||||
|
||||
;; saveplace remembers your location in a file when saving files
|
||||
(setq save-place-file (expand-file-name "saveplace" prelude-savefile-dir))
|
||||
;; activate it for all buffers
|
||||
(setq-default save-place t)
|
||||
(require 'saveplace)
|
||||
|
||||
;; savehist keeps track of some history
|
||||
(setq savehist-additional-variables
|
||||
;; search entries
|
||||
'(search ring regexp-search-ring)
|
||||
;; save every minute
|
||||
savehist-autosave-interval 60
|
||||
;; keep the home clean
|
||||
savehist-file (expand-file-name "savehist" prelude-savefile-dir))
|
||||
(savehist-mode t)
|
||||
|
||||
;; save recent files
|
||||
(setq recentf-save-file (expand-file-name "recentf" prelude-savefile-dir)
|
||||
recentf-max-saved-items 200
|
||||
recentf-max-menu-items 15)
|
||||
(recentf-mode t)
|
||||
|
||||
;; time-stamps
|
||||
;; when there's "Time-stamp: <>" in the first 10 lines of the file
|
||||
(setq time-stamp-active t
|
||||
;; check first 10 buffer lines for Time-stamp: <>
|
||||
time-stamp-line-limit 10
|
||||
time-stamp-format "%04y-%02m-%02d %02H:%02M:%02S (%u)") ; date format
|
||||
(add-hook 'write-file-hooks 'time-stamp) ; update when saving
|
||||
|
||||
;; use shift + arrow keys to switch between visible buffers
|
||||
(require 'windmove)
|
||||
(windmove-default-keybindings)
|
||||
|
||||
;; automatically save buffers associated with files on buffer switch
|
||||
;; and on windows switch
|
||||
(defun prelude-auto-save-command ()
|
||||
(when (and prelude-auto-save
|
||||
buffer-file-name
|
||||
(buffer-modified-p (current-buffer)))
|
||||
(save-buffer)))
|
||||
|
||||
(defadvice switch-to-buffer (before save-buffer-now activate)
|
||||
(prelude-auto-save-command))
|
||||
(defadvice other-window (before other-window-now activate)
|
||||
(prelude-auto-save-command))
|
||||
(defadvice windmove-up (before other-window-now activate)
|
||||
(prelude-auto-save-command))
|
||||
(defadvice windmove-down (before other-window-now activate)
|
||||
(prelude-auto-save-command))
|
||||
(defadvice windmove-left (before other-window-now activate)
|
||||
(prelude-auto-save-command))
|
||||
(defadvice windmove-right (before other-window-now activate)
|
||||
(prelude-auto-save-command))
|
||||
|
||||
(add-hook 'mouse-leave-buffer-hook 'prelude-auto-save-command)
|
||||
|
||||
;; show-paren-mode: subtle highlighting of matching parens (global-mode)
|
||||
(show-paren-mode +1)
|
||||
(setq show-paren-style 'parenthesis)
|
||||
|
||||
;; highlight the current line
|
||||
(global-hl-line-mode +1)
|
||||
|
||||
(require 'volatile-highlights)
|
||||
(volatile-highlights-mode t)
|
||||
|
||||
;; note - this should be after volatile-highlights is required
|
||||
;; add the ability to copy and cut the current line, without marking it
|
||||
(defadvice kill-ring-save (before slick-copy activate compile)
|
||||
"When called interactively with no active region, copy a single line instead."
|
||||
(interactive
|
||||
(if mark-active (list (region-beginning) (region-end))
|
||||
(message "Copied line")
|
||||
(list (line-beginning-position)
|
||||
(line-beginning-position 2)))))
|
||||
|
||||
(defadvice kill-region (before slick-cut activate compile)
|
||||
"When called interactively with no active region, kill a single line instead."
|
||||
(interactive
|
||||
(if mark-active (list (region-beginning) (region-end))
|
||||
(list (line-beginning-position)
|
||||
(line-beginning-position 2)))))
|
||||
|
||||
;; tramp, for sudo access
|
||||
(require 'tramp)
|
||||
;; keep in mind known issues with zsh - see emacs wiki
|
||||
(setq tramp-default-method "ssh")
|
||||
|
||||
;; ido-mode
|
||||
(ido-mode t)
|
||||
(setq ido-enable-prefix nil
|
||||
ido-enable-flex-matching t
|
||||
ido-create-new-buffer 'always
|
||||
ido-use-filename-at-point 'guess
|
||||
ido-max-prospects 10
|
||||
ido-save-directory-list-file (expand-file-name "ido.hist" prelude-savefile-dir)
|
||||
ido-default-file-method 'selected-window)
|
||||
|
||||
;; auto-completion in minibuffer
|
||||
(icomplete-mode +1)
|
||||
|
||||
(set-default 'imenu-auto-rescan t)
|
||||
|
||||
;; flyspell-mode does spell-checking on the fly as you type
|
||||
(setq ispell-program-name "aspell" ; use aspell instead of ispell
|
||||
ispell-extra-args '("--sug-mode=ultra"))
|
||||
(autoload 'flyspell-mode "flyspell" "On-the-fly spelling checker." t)
|
||||
|
||||
(defun prelude-enable-flyspell ()
|
||||
(when (and prelude-flyspell (executable-find ispell-program-name))
|
||||
(flyspell-mode +1)))
|
||||
|
||||
(add-hook 'message-mode-hook 'prelude-enable-flyspell)
|
||||
(add-hook 'text-mode-hook 'prelude-enable-flyspell)
|
||||
|
||||
;; enable narrowing commands
|
||||
(put 'narrow-to-region 'disabled nil)
|
||||
(put 'narrow-to-page 'disabled nil)
|
||||
(put 'narrow-to-defun 'disabled nil)
|
||||
|
||||
;; enabled change region case commands
|
||||
(put 'upcase-region 'disabled nil)
|
||||
(put 'downcase-region 'disabled nil)
|
||||
|
||||
(require 'expand-region)
|
||||
|
||||
;; bookmarks
|
||||
(setq bookmark-default-file (expand-file-name "bookmarks" prelude-savefile-dir)
|
||||
bookmark-save-flag 1)
|
||||
|
||||
;; load yasnippet
|
||||
;(require 'yasnippet)
|
||||
;(add-to-list 'yas-snippet-dirs prelude-snippets-dir)
|
||||
;(add-to-list 'yas-snippet-dirs prelude-personal-snippets-dir)
|
||||
;(yas-global-mode 1)
|
||||
|
||||
;; projectile is a project management mode
|
||||
(require 'projectile)
|
||||
(setq projectile-cache-file (expand-file-name "projectile.cache" prelude-savefile-dir))
|
||||
(projectile-global-mode t)
|
||||
|
||||
(require 'helm-misc)
|
||||
(require 'helm-projectile)
|
||||
|
||||
(defun helm-prelude ()
|
||||
"Preconfigured `helm'."
|
||||
(interactive)
|
||||
(condition-case nil
|
||||
(if (projectile-project-root)
|
||||
;; add project files and buffers when in project
|
||||
(helm-other-buffer '(helm-c-source-projectile-files-list
|
||||
helm-c-source-projectile-buffers-list
|
||||
helm-c-source-buffers-list
|
||||
helm-c-source-recentf
|
||||
helm-c-source-buffer-not-found)
|
||||
"*helm prelude*")
|
||||
;; otherwise fallback to helm-mini
|
||||
(helm-mini))
|
||||
;; fall back to helm mini if an error occurs (usually in projectile-project-root)
|
||||
(error (helm-mini))))
|
||||
|
||||
;; shorter aliases for ack-and-a-half commands
|
||||
(defalias 'ack 'ack-and-a-half)
|
||||
(defalias 'ack-same 'ack-and-a-half-same)
|
||||
(defalias 'ack-find-file 'ack-and-a-half-find-file)
|
||||
(defalias 'ack-find-file-same 'ack-and-a-half-find-file-same)
|
||||
|
||||
;; dired - reuse current buffer by pressing 'a'
|
||||
(put 'dired-find-alternate-file 'disabled nil)
|
||||
|
||||
;; ediff - don't start another frame
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
|
||||
;; clean up obsolete buffers automatically
|
||||
(require 'midnight)
|
||||
|
||||
;; automatically indenting yanked text if in programming-modes
|
||||
(defvar yank-indent-modes
|
||||
'(clojure-mode scala-mode python-mode LaTeX-mode TeX-mode)
|
||||
"Modes in which to indent regions that are yanked (or yank-popped). Only
|
||||
modes that don't derive from `prog-mode' should be listed here.")
|
||||
|
||||
(defvar yank-advised-indent-threshold 1000
|
||||
"Threshold (# chars) over which indentation does not automatically occur.")
|
||||
|
||||
(defun yank-advised-indent-function (beg end)
|
||||
"Do indentation, as long as the region isn't too large."
|
||||
(if (<= (- end beg) yank-advised-indent-threshold)
|
||||
(indent-region beg end nil)))
|
||||
|
||||
(defadvice yank (after yank-indent activate)
|
||||
"If current mode is one of 'yank-indent-modes,
|
||||
indent yanked text (with prefix arg don't indent)."
|
||||
(if (and (not (ad-get-arg 0))
|
||||
(or (derived-mode-p 'prog-mode)
|
||||
(member major-mode yank-indent-modes)))
|
||||
(let ((transient-mark-mode nil))
|
||||
(yank-advised-indent-function (region-beginning) (region-end)))))
|
||||
|
||||
(defadvice yank-pop (after yank-pop-indent activate)
|
||||
"If current mode is one of 'yank-indent-modes,
|
||||
indent yanked text (with prefix arg don't indent)."
|
||||
(if (and (not (ad-get-arg 0))
|
||||
(or (derived-mode-p 'prog-mode)
|
||||
(member major-mode yank-indent-modes)))
|
||||
(let ((transient-mark-mode nil))
|
||||
(yank-advised-indent-function (region-beginning) (region-end)))))
|
||||
|
||||
;; abbrev config
|
||||
(add-hook 'text-mode-hook 'abbrev-mode)
|
||||
|
||||
;; make a shell script executable automatically on save
|
||||
(add-hook 'after-save-hook
|
||||
'executable-make-buffer-file-executable-if-script-p)
|
||||
|
||||
;; saner regex syntax
|
||||
(require 're-builder)
|
||||
(setq reb-re-syntax 'string)
|
||||
|
||||
(require 'eshell)
|
||||
(setq eshell-directory-name (expand-file-name "eshell" prelude-savefile-dir))
|
||||
|
||||
(setq semanticdb-default-save-directory
|
||||
(expand-file-name "semanticdb" prelude-savefile-dir))
|
||||
|
||||
;; enable Prelude's keybindings
|
||||
(prelude-global-mode t)
|
||||
|
||||
(provide 'prelude-editor)
|
||||
|
||||
;;; prelude-editor.el ends here
|
100
core/prelude-global-keybindings.el
Normal file
100
core/prelude-global-keybindings.el
Normal file
|
@ -0,0 +1,100 @@
|
|||
;;; prelude-global-keybindings.el --- Emacs Prelude: some useful keybindings.
|
||||
;;
|
||||
;; Copyright (c) 2011-2012 Bozhidar Batsov
|
||||
;;
|
||||
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
||||
;; URL: http://batsov.com/emacs-prelude
|
||||
;; Version: 1.0.0
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Lots of useful keybindings.
|
||||
|
||||
;;; 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:
|
||||
|
||||
;; You know, like Readline.
|
||||
(global-set-key (kbd "C-M-h") 'backward-kill-word)
|
||||
|
||||
;; Align your code in a pretty way.
|
||||
(global-set-key (kbd "C-x \\") 'align-regexp)
|
||||
|
||||
;; Font size
|
||||
(global-set-key (kbd "C-+") 'text-scale-increase)
|
||||
(global-set-key (kbd "C--") 'text-scale-decrease)
|
||||
|
||||
;; Window switching. (C-x o goes to the next window)
|
||||
(global-set-key (kbd "C-x O") (lambda ()
|
||||
(interactive)
|
||||
(other-window -1))) ;; back one
|
||||
|
||||
;; Indentation help
|
||||
(global-set-key (kbd "C-x ^") 'join-line)
|
||||
|
||||
;; Start proced in a similar manner to dired
|
||||
(global-set-key (kbd "C-x p") 'proced)
|
||||
|
||||
;; Start eshell or switch to it if it's active.
|
||||
(global-set-key (kbd "C-x m") 'eshell)
|
||||
|
||||
;; Start a new eshell even if one is active.
|
||||
(global-set-key (kbd "C-x M") (lambda () (interactive) (eshell t)))
|
||||
|
||||
;; Start a regular shell if you prefer that.
|
||||
(global-set-key (kbd "C-x M-m") 'shell)
|
||||
|
||||
;; If you want to be able to M-x without meta
|
||||
(global-set-key (kbd "C-x C-m") 'execute-extended-command)
|
||||
|
||||
;; A complementary binding to the apropos-command (C-h a)
|
||||
(define-key 'help-command "A" 'apropos)
|
||||
|
||||
;; Activate occur easily inside isearch
|
||||
(define-key isearch-mode-map (kbd "C-o")
|
||||
(lambda () (interactive)
|
||||
(let ((case-fold-search isearch-case-fold-search))
|
||||
(occur (if isearch-regexp
|
||||
isearch-string
|
||||
(regexp-quote isearch-string))))))
|
||||
|
||||
;; use hippie-expand instead of dabbrev
|
||||
(global-set-key (kbd "M-/") 'hippie-expand)
|
||||
|
||||
;; replace buffer-menu with ibuffer
|
||||
(global-set-key (kbd "C-x C-b") 'ibuffer)
|
||||
|
||||
;; toggle menu-bar visibility
|
||||
(global-set-key (kbd "<f12>") 'menu-bar-mode)
|
||||
|
||||
(global-set-key (kbd "C-x g") 'magit-status)
|
||||
|
||||
(global-set-key (kbd "C-=") 'er/expand-region)
|
||||
(global-set-key (kbd "C-c w") (make-repeatable-command 'er/expand-region))
|
||||
|
||||
;; make C-x C-x usable with transient-mark-mode
|
||||
(define-key global-map
|
||||
[remap exchange-point-and-mark]
|
||||
'prelude-exchange-point-and-mark)
|
||||
|
||||
(provide 'prelude-global-keybindings)
|
||||
|
||||
;;; prelude-global-keybindings.el ends here
|
113
core/prelude-mode.el
Normal file
113
core/prelude-mode.el
Normal file
|
@ -0,0 +1,113 @@
|
|||
;;; prelude-mode.el --- Emacs Prelude: minor mode
|
||||
;;
|
||||
;; Copyright (c) 2011-2012 Bozhidar Batsov
|
||||
;;
|
||||
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
||||
;; URL: http://batsov.com/emacs-prelude
|
||||
;; Version: 1.0.0
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; A minor mode defining a local keymap, plus a menu.
|
||||
|
||||
;;; 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:
|
||||
|
||||
(defvar prelude-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "C-c o") 'prelude-open-with)
|
||||
(define-key map (kbd "C-c g") 'prelude-google)
|
||||
;; mimic popular IDEs binding, note that it doesn't work in a terminal session
|
||||
(define-key map [(shift return)] 'prelude-insert-empty-line)
|
||||
(define-key map [(control shift up)] 'prelude-move-line-up)
|
||||
(define-key map [(control shift down)] 'prelude-move-line-down)
|
||||
(define-key map (kbd "C-c n") 'prelude-cleanup-buffer)
|
||||
(define-key map (kbd "C-c f") 'prelude-recentf-ido-find-file)
|
||||
(define-key map (kbd "C-M-\\") 'prelude-indent-region-or-buffer)
|
||||
(define-key map (kbd "C-c u") 'prelude-view-url)
|
||||
(define-key map (kbd "C-c e") 'prelude-eval-and-replace)
|
||||
(define-key map (kbd "C-c s") 'prelude-swap-windows)
|
||||
(define-key map (kbd "C-c d") 'prelude-duplicate-current-line-or-region)
|
||||
(define-key map (kbd "C-c r") 'prelude-rename-file-and-buffer)
|
||||
(define-key map (kbd "C-c t") 'prelude-visit-term-buffer)
|
||||
(define-key map (kbd "C-c k") 'prelude-kill-other-buffers)
|
||||
(define-key map (kbd "C-c h") 'helm-prelude)
|
||||
map)
|
||||
"Keymap for Prelude mode.")
|
||||
|
||||
(easy-menu-define prelude-mode-menu prelude-mode-map
|
||||
"Menu for Prelude mode"
|
||||
'("Prelude"
|
||||
("Files"
|
||||
["Open with..." prelude-open-with]
|
||||
["Delete file and buffer" prelude-delete-file-and-buffer]
|
||||
["Rename file and buffer" prelude-rename-file-and-buffer]
|
||||
["Copy file name to clipboard" prelude-copy-file-name-to-clipboard])
|
||||
|
||||
("Buffers"
|
||||
["Clean up buffer" prelude-cleanup-buffer]
|
||||
["Kill other buffers" prelude-kill-other-buffers])
|
||||
|
||||
("Editing"
|
||||
["Insert empty line" prelude-insert-empty-line]
|
||||
["Move line up" prelude-move-line-up]
|
||||
["Move line down" prelude-move-line-down]
|
||||
["Indent buffer" prelude-indent-buffer]
|
||||
["Indent buffer or region" prelude-indent-buffer-or-region]
|
||||
["Duplicate line or region" prelude-duplicate-current-line-or-region]
|
||||
["Copy to clipboard as blockquote" prelude-indent-blockquote-and-copy-to-clipboard]
|
||||
["Copy to clipboard as nested blockqoute" prelude-indent-nested-blockquote-and-copy-to-clipboard]
|
||||
["Insert date" prelude-insert-date]
|
||||
["Eval and replace" prelude-eval-and-replace])
|
||||
|
||||
("Navigation"
|
||||
["Helm" helm-prelude])
|
||||
|
||||
("Windows"
|
||||
["Swap windows" prelude-swap-windows])
|
||||
|
||||
("General"
|
||||
["Visit term buffer" prelude-visit-term-buffer]
|
||||
["Search in Google" prelude-google]
|
||||
["View URL" prelude-view-url])))
|
||||
|
||||
;; define minor mode
|
||||
(define-globalized-minor-mode prelude-global-mode prelude-mode prelude-on)
|
||||
|
||||
(defun prelude-on ()
|
||||
(prelude-mode t))
|
||||
|
||||
(defun prelude-off ()
|
||||
(easy-menu-remove))
|
||||
|
||||
(define-minor-mode prelude-mode
|
||||
"Minor mode to consolidate Emacs Prelude extensions."
|
||||
:lighter " Prelude"
|
||||
:keymap prelude-mode-map
|
||||
(if prelude-mode
|
||||
;; on start
|
||||
(easy-menu-add prelude-mode-menu prelude-mode-map)
|
||||
;; on stop
|
||||
(prelude-off)))
|
||||
|
||||
(provide 'prelude-mode)
|
||||
;;; prelude-mode.el ends here
|
26
core/prelude-osx.el
Normal file
26
core/prelude-osx.el
Normal file
|
@ -0,0 +1,26 @@
|
|||
;; On OS X Emacs doesn't use the shell PATH if it's not started from
|
||||
;; the shell. Let's fix that:
|
||||
(exec-path-from-shell-initialize)
|
||||
|
||||
;; Emacs users obviously have little need for Command and Option keys,
|
||||
;; but they do need Meta and Super
|
||||
(setq mac-command-modifier 'super)
|
||||
(setq mac-option-modifier 'meta)
|
||||
|
||||
(defun prelude-swap-meta-and-super ()
|
||||
"Swap the mapping of meta and super. Very useful for people using their Mac
|
||||
with a Windows external keyboard from time to time."
|
||||
(interactive)
|
||||
(if (eq mac-command-modifier 'super)
|
||||
(progn
|
||||
(setq mac-command-modifier 'meta)
|
||||
(setq mac-option-modifier 'super)
|
||||
(message "Command is now bound to META and Option is bound to SUPER."))
|
||||
(progn
|
||||
(setq mac-command-modifier 'super)
|
||||
(setq mac-option-modifier 'meta)
|
||||
(message "Command is now bound to SUPER and Option is bound to META."))))
|
||||
|
||||
(define-key prelude-mode-map (kbd "C-c w") 'prelude-swap-meta-and-super)
|
||||
|
||||
(provide 'prelude-osx)
|
112
core/prelude-packages.el
Normal file
112
core/prelude-packages.el
Normal file
|
@ -0,0 +1,112 @@
|
|||
;;; prelude-packages.el --- Emacs Prelude: default package selection.
|
||||
;;
|
||||
;; Copyright (c) 2011-2012 Bozhidar Batsov
|
||||
;;
|
||||
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
||||
;; URL: http://batsov.com/emacs-prelude
|
||||
;; Version: 1.0.0
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Takes care of the automatic installation of all the packages required by
|
||||
;; Emacs Prelude.
|
||||
|
||||
;;; 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 'package)
|
||||
(add-to-list 'package-archives
|
||||
'("melpa" . "http://melpa.milkbox.net/packages/") t)
|
||||
;; set package-user-dir to be relative to Prelude install path
|
||||
(setq package-user-dir (expand-file-name "elpa" prelude-dir))
|
||||
(package-initialize)
|
||||
|
||||
;; required because of a package.el bug
|
||||
(setq url-http-attempt-keepalives nil)
|
||||
|
||||
(defvar prelude-packages
|
||||
'(ack-and-a-half exec-path-from-shell expand-region gist guru-mode helm helm-projectile magit magithub melpa
|
||||
rainbow-mode volatile-highlights yasnippet solarized-theme zenburn-theme)
|
||||
"A list of packages to ensure are installed at launch.")
|
||||
|
||||
(defun prelude-packages-installed-p ()
|
||||
(-all? #'package-installed-p prelude-packages))
|
||||
|
||||
(defun prelude-install-packages ()
|
||||
(unless (prelude-packages-installed-p)
|
||||
;; check for new packages (package versions)
|
||||
(message "%s" "Emacs Prelude is now refreshing its package database...")
|
||||
(package-refresh-contents)
|
||||
(message "%s" " done.")
|
||||
;; install the missing packages
|
||||
(-each
|
||||
(-reject #'package-installed-p prelude-packages)
|
||||
#'package-install-p)))
|
||||
|
||||
(prelude-install-packages)
|
||||
|
||||
(defmacro prelude-auto-install (extension package mode)
|
||||
`(add-to-list 'auto-mode-alist
|
||||
`(,extension . (lambda ()
|
||||
(unless (package-installed-p ',package)
|
||||
(package-install ',package))
|
||||
(,mode)))))
|
||||
|
||||
(defvar prelude-auto-install-alist
|
||||
'(("\\.clj\\'" clojure-mode clojure-mode)
|
||||
("\\.coffee\\'" coffee-mode coffee-mode)
|
||||
("\\.css\\'" css-mode css-mode)
|
||||
("\\.erl\\'" erlang erlang-mode)
|
||||
("\\.feature\\'" feature-mode feature-mode)
|
||||
("\\.groovy\\'" groovy-mode groovy-mode)
|
||||
("\\.haml\\'" haml-mode haml-mode)
|
||||
("\\.hs\\'" haskell-mode haskell-mode)
|
||||
("\\.latex\\'" auctex LaTeX-mode)
|
||||
("\\.less\\'" less-css-mode less-css-mode)
|
||||
("\\.lua\\'" lua-mode lua-mode)
|
||||
("\\.markdown\\'" markdown-mode markdown-mode)
|
||||
("\\.md\\'" markdown-mode markdown-mode)
|
||||
("\\.php\\'" php-mode php-mode)
|
||||
("\\.py\\'" python python-mode)
|
||||
("\\.sass\\'" sass-mode sass-mode)
|
||||
("\\.scala\\'" scala-mode scala-mode)
|
||||
("\\.scss\\'" scss-mode scss-mode)
|
||||
("\\.yml\\'" yaml-mode yaml-mode)))
|
||||
|
||||
;; markdown-mode doesn't have autoloads for the auto-mode-alist
|
||||
;; so we add them manually if it's already installed
|
||||
(when (package-installed-p 'markdown-mode)
|
||||
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)))
|
||||
|
||||
(-each prelude-auto-install-alist
|
||||
(lambda (entry)
|
||||
(let ((extension (first entry))
|
||||
(package (second entry))
|
||||
(mode (third entry)))
|
||||
(unless (package-installed-p package)
|
||||
(prelude-auto-install extension package mode)))))
|
||||
|
||||
(defun prelude-ensure-module-deps (packages)
|
||||
(-each (-remove #'package-installed-p packages) #'package-install))
|
||||
|
||||
(provide 'prelude-packages)
|
||||
;;; prelude-packages.el ends here
|
101
core/prelude-ui.el
Normal file
101
core/prelude-ui.el
Normal file
|
@ -0,0 +1,101 @@
|
|||
;;; prelude-ui.el --- Emacs Prelude: UI optimizations and tweaks.
|
||||
;;
|
||||
;; Copyright (c) 2011-2012 Bozhidar Batsov
|
||||
;;
|
||||
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
||||
;; URL: http://batsov.com/emacs-prelude
|
||||
;; Version: 1.0.0
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; We dispense with most of the point and click UI, reduce the startup noise,
|
||||
;; configure smooth scolling and a nice theme that's easy on the eyes (zenburn).
|
||||
|
||||
;;; 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:
|
||||
|
||||
;; the toolbar is just a waste of valuable screen estate
|
||||
;; in a tty tool-bar-mode does not properly auto-load, and is
|
||||
;; already disabled anyway
|
||||
(when (fboundp 'tool-bar-mode)
|
||||
(tool-bar-mode -1))
|
||||
|
||||
;; the menu bar is mostly useless as well
|
||||
;; but removing it under OS X doesn't make much sense
|
||||
|
||||
;; For daemon mode, with-selected-frame seems to be required. Normal
|
||||
;; mode seems to require with-selected-frame to be absent.
|
||||
(require 'server) ;;for server-running-p
|
||||
(defun prelude-frame-config (frame)
|
||||
"Custom behaviours for new frames."
|
||||
(if (eq system-type 'darwin)
|
||||
(if (server-running-p)
|
||||
(with-selected-frame frame
|
||||
(if (display-graphic-p)
|
||||
(modify-frame-parameters frame '((menu-bar-lines . 1)))
|
||||
(modify-frame-parameters frame '((menu-bar-lines . 0)))))
|
||||
(if (display-graphic-p)
|
||||
(modify-frame-parameters frame '((menu-bar-lines . 1)))
|
||||
(modify-frame-parameters frame '((menu-bar-lines . 0)))))
|
||||
(menu-bar-mode -1)))
|
||||
|
||||
;; run now
|
||||
(prelude-frame-config (selected-frame))
|
||||
;; and later
|
||||
(add-hook 'after-make-frame-functions 'prelude-frame-config)
|
||||
|
||||
;; the blinking cursor is nothing, but an annoyance
|
||||
(blink-cursor-mode -1)
|
||||
|
||||
;; disable startup screen
|
||||
(setq inhibit-startup-screen t)
|
||||
|
||||
;; nice scrolling
|
||||
(setq scroll-margin 0
|
||||
scroll-conservatively 100000
|
||||
scroll-preserve-screen-position 1)
|
||||
|
||||
;; mode line settings
|
||||
(line-number-mode t)
|
||||
(column-number-mode t)
|
||||
(size-indication-mode t)
|
||||
|
||||
;; make the fringe (gutter) smaller
|
||||
;; the argument is a width in pixels (the default is 8)
|
||||
(if (fboundp 'fringe-mode)
|
||||
(fringe-mode 4))
|
||||
|
||||
;; enable y/n answers
|
||||
(fset 'yes-or-no-p 'y-or-n-p)
|
||||
|
||||
;; more useful frame title, that show either a file or a
|
||||
;; buffer name (if the buffer isn't visiting a file)
|
||||
(setq frame-title-format
|
||||
'("" invocation-name " Prelude - " (:eval (if (buffer-file-name)
|
||||
(abbreviate-file-name (buffer-file-name))
|
||||
"%b"))))
|
||||
|
||||
;; use zenburn as the default theme
|
||||
(load-theme 'zenburn t)
|
||||
|
||||
(provide 'prelude-ui)
|
||||
;;; prelude-ui.el ends here
|
Loading…
Add table
Add a link
Reference in a new issue