diff options
-rw-r--r-- | dotfiles/.emacs.d/erc.el | 82 | ||||
-rw-r--r-- | dotfiles/.emacs.d/init.el | 518 |
2 files changed, 215 insertions, 385 deletions
diff --git a/dotfiles/.emacs.d/erc.el b/dotfiles/.emacs.d/erc.el deleted file mode 100644 index 3f26d16..0000000 --- a/dotfiles/.emacs.d/erc.el +++ /dev/null @@ -1,82 +0,0 @@ -(require 'erc) -(require 'erc-log) -(require 'erc-notify) -;;(require 'erc-spelling) -(require 'erc-autoaway) -(require 'erc-services) -(require 'notifications) -(require 'tls) - -;; Notify the user of private messages -(defun erc-private-message-notify (proc parsed) - (let ((nick (car (erc-parse-user (erc-response.sender parsed)))) - (target (car (erc-response.command-args parsed))) - (msg (erc-response.contents parsed))) - (notifications-notify :title nick :body msg))) - -;; (add-hook 'erc-server-PRIVMSG-functions 'erc-private-message-notify) - -;; Interpret mIRC-style color commands in IRC chats -(setq erc-interpret-mirc-color t) - -;; The following are commented out by default, but users of other -;; non-Emacs IRC clients might find them useful. -;; Kill buffers for channels after /part -(setq erc-kill-buffer-on-part t) -;; Kill buffers for private queries after quitting the server -(setq erc-kill-queries-on-quit t) -;; Kill buffers for server messages after quitting the server -(setq erc-kill-server-buffer-on-quit t) - -;; exclude boring stuff from tracking -(erc-track-mode t) -(setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE" - "324" "329" "332" "333" "353" "477")) - -;; logging -(setq erc-log-channels-directory "~/.erc/logs/") - -(if (not (file-exists-p erc-log-channels-directory)) - (mkdir erc-log-channels-directory t)) - -(setq erc-save-buffer-on-part t) - -;; utf-8 always and forever -(setq erc-server-coding-system '(utf-8 . utf-8)) - -;; Auto-join channels -(erc-autojoin-mode t) -(setq erc-autojoin-channels-alist - '(("freenode.net" "#guile" "#guix" "#lispgames" "#librelounge"))) - -;; Don't open channel buffers in place of the current buffer because -;; that drives me fucking crazy. -(setq erc-join-buffer 'bury) - -;; Secret password file -(defvar freenode-password nil) -(let ((password-file "~/.emacs.d/.ercpasswords")) - (when (file-exists-p password-file) - (load password-file))) - -;; Start and stop erc -(defun start-irc () - "Connect to IRC." - (interactive) - (erc-tls :server "irc.freenode.net" - :port 6697 - :nick "davexunit")) - -(defun filter-erc-server-buffers () - (delq nil - (mapcar - (lambda (x) (and (erc-server-buffer-p x) x)) - (buffer-list)))) - -(defun stop-irc () - "Disconnects from all irc servers" - (interactive) - (dolist (buffer (filter-erc-server-buffers)) - (message "Server buffer: %s" (buffer-name buffer)) - (with-current-buffer buffer - (erc-quit-server "Later")))) diff --git a/dotfiles/.emacs.d/init.el b/dotfiles/.emacs.d/init.el index eba9d62..afdb6b4 100644 --- a/dotfiles/.emacs.d/init.el +++ b/dotfiles/.emacs.d/init.el @@ -1,5 +1,3 @@ -(require 'cl) - ;; Added by Package.el. This must come before configurations of ;; installed packages. Don't delete this line. If you don't want it, ;; just comment it out by adding a semicolon to the start of the line. @@ -8,39 +6,38 @@ (add-to-list 'package-archives (cons "melpa-stable" "https://stable.melpa.org/packages/") t) (package-initialize) -(if (fboundp 'tool-bar-mode) (tool-bar-mode -1)) -(if (fboundp 'menu-bar-mode) (menu-bar-mode -1)) -(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) +;; Remove UI clutter. +(tool-bar-mode -1) +(menu-bar-mode -1) +(scroll-bar-mode -1) +(tooltip-mode -1) +(set-fringe-mode 10) +(setq inhibit-startup-message t) ; no splash screen -;; No splash screen. -(setf inhibit-startup-message t) +(setq visible-bell t) ;; Maximize frames (add-to-list 'default-frame-alist '(fullscreen . maximized)) ;; Stop customize from writing to my init file. Who thought this was ;; a good idea? -(setf custom-file "~/.emacs.d/custom.el") - -(defmacro when-require (package &rest body) - "Evaluate BODY if and only if PACKAGE can be imported." - (declare (indent 1)) - `(when (require ,package nil t) ,@body)) +(setq custom-file "~/.emacs.d/custom.el") (defun home-file (file-name) "Prefix FILE-NAME with the current home directory." (concat (getenv "HOME") file-name)) + ;;; ;;; Packages ;;; +(require 'use-package) + (add-to-list 'load-path (home-file "/.guix-profile/share/emacs/site-lisp")) -(when-require 'guix-autoloads - (setf guix-dot-program (concat (getenv "HOME") "/.guix-profile/bin/dot"))) - + ;;; ;;; Look and Feel ;;; @@ -52,82 +49,108 @@ ;; Use Inconsolata font. (add-to-list 'default-frame-alist '(font . "Inconsolata-12")) -(load-theme 'wombat t) +(use-package doom-themes + :config + (load-theme 'doom-vibrant t) + ;; Enable flashing mode-line on errors + (doom-themes-visual-bell-config) + ;; Enable custom neotree theme (all-the-icons must be installed!) + (doom-themes-neotree-config) + ;; Corrects (and improves) org-mode's native fontification. + (doom-themes-org-config)) + +(use-package doom-modeline + :init (doom-modeline-mode 1) + :custom ((doom-modeline-irc t) + (doom-modeline-irc-buffers t))) + (column-number-mode t) (which-function-mode t) +(add-hook 'prog-mode-hook (lambda () (display-line-numbers-mode t))) -(defun change-theme (theme) - "Disable all active themes and load THEME." - (interactive - (lexical-let ((themes (mapcar 'symbol-name (custom-available-themes)))) - (list (intern (completing-read "Load custom theme: " themes))))) - (mapc 'disable-theme custom-enabled-themes) - (load-theme theme t)) +(use-package which-key + :init (which-key-mode) + :diminish which-key-mode + :custom (which-key-idle-delay 0.3)) + ;;; ;;; Dired ;;; -(require 'dired-x) +(use-package dired-x) + ;;; ;;; TRAMP ;;; -(when-require 'tramp-sh +(use-package tramp-sh ;; Include the current path for the system to TRAMP's remote path. ;; This is necessary for GuixSD, where the usual /usr/bin, ;; /usr/local/bin, etc. do not exist. - (push 'tramp-own-remote-path tramp-remote-path)) + :config (push 'tramp-own-remote-path tramp-remote-path)) + ;;; ;;; Battery ;;; -(require 'battery) - -;; Display battery level in modeline only if a battery is present, -;; otherwise display-battery-mode will throw an error. -(when (and (boundp 'battery-status-function) - (not (null battery-status-function)) - (not (string-match-p - "N/A" - (battery-format - "%B" - (funcall battery-status-function))))) - (display-battery-mode t)) +(use-package battery + :init + ;; Display battery level in modeline only if a battery is present, + ;; otherwise display-battery-mode will throw an error. + (when (and (boundp 'battery-status-function) + (not (null battery-status-function)) + (not (string-match-p + "N/A" + (battery-format + "%B" + (funcall battery-status-function))))) + (display-battery-mode t))) + ;;; -;;; Minibuffer +;;; Minibuffer and completion ;;; -(setf ido-everywhere t - ido-enable-flex-matching t) +(use-package swiper + :bind (("C-s" . swiper) + ("C-r" . swiper-backward))) -(ido-mode t) +(use-package ivy + :config (ivy-mode t) + :custom ((ivy-initial-inputs-alist nil))) -(when-require 'ido-ubiquitous - (ido-ubiquitous-mode t)) +(use-package ivy-rich + :init (ivy-rich-mode 1)) -;; Ignore compiled Guile files. This has the side-effect of looking -;; like I hate GoLang. -(setf ido-ignore-files (cons "\\.go$" ido-ignore-files)) +(use-package counsel + :bind (("M-x" . counsel-M-x) + ("C-x b" . counsel-switch-buffer) + ("C-x C-f" . counsel-find-file) + ("C-h f" . counsel-describe-function) + ("C-h v" . counsel-describe-variable) + :map minibuffer-local-map + ("C-r" . counsel-minibuffer-history))) -;; Much improved M-x prompt. -(when-require 'smex - (global-set-key (kbd "M-x") 'smex)) +(use-package helpful + :bind (("C-h k" . helpful-key)) + :custom ((counsel-describe-function-function 'helpful-callable) + (counsel-describe-variable-function 'helpful-variable))) + ;;; ;;; Buffers ;;; ;; Kill buffers that haven't been modified in awhile. -(require 'midnight) +(use-package midnight) ;; Save point position between sessions -(require 'saveplace) -(setq-default save-place t) -(setq save-place-file (expand-file-name ".places" user-emacs-directory)) +(use-package saveplace + :custom ((save-place t) + (save-place-file (expand-file-name ".places" user-emacs-directory)))) (defun cleanup-buffer-safe () "Perform a bunch of safe operations on the whitespace content of a buffer. @@ -140,55 +163,70 @@ might be bad." ;; Various superfluous white-space. Just say no. (add-hook 'before-save-hook 'cleanup-buffer-safe) -(setq ibuffer-saved-filter-groups - '(("default" - ("guile-2d" (filename . "Code/guile-2d/")) - ("dired" (mode . dired-mode)) - ("org" (mode . org-mode)) - ("erc" (mode . erc-mode))))) +(use-package ibuffer + :init (add-hook 'ibuffer-mode-hook + (lambda () + (ibuffer-switch-to-saved-filter-groups "default"))) + :custom ((ibuffer-saved-filter-groups + '(("default" + ("dired" (mode . dired-mode)) + ("org" (mode . org-mode)) + ("erc" (mode . erc-mode))))))) -(add-hook 'ibuffer-mode-hook - (lambda () - (ibuffer-switch-to-saved-filter-groups "default"))) +(setq view-read-only t) + ;;; ;;; Tabs and Newlines ;;; (setq-default indent-tabs-mode nil) -(setf indent-tabs-mode nil - tab-width 2 - require-final-newline t) -(electric-indent-mode t) +(setq indent-tabs-mode nil) +(setq tab-width 2) +(setq require-final-newline t) +(setq electric-indent-mode t) + ;;; ;;; Version Control ;;; -(when-require 'magit - (require 'magit-blame) +(use-package magit + :bind (("C-c g" . magit-status)) + :config (use-package magit-blame) + :custom + ;; I don't like magit's default local tracking branch naming + ;; strategy. + ((magit-default-tracking-name-function 'magit-default-tracking-name-branch-only) + (magit-last-seen-setup-instructions "1.4.0") + (magit-completing-read-function #'magit-ido-completing-read))) - ;; I don't like magit's default local tracking branch naming strategy. - (setf magit-default-tracking-name-function - 'magit-default-tracking-name-branch-only) - (setf magit-last-seen-setup-instructions "1.4.0") - (setf magit-completing-read-function #'magit-ido-completing-read) +;; Follow symlinks automatically instead of asking each time. +(setq vc-follow-symlinks t) - (global-set-key (kbd "C-c g") 'magit-status)) + +;;; +;;; Project Management +;;; -;; Follow symlinks automatically instead of asking each time. -(setf vc-follow-symlinks t) +(use-package projectile + :init (projectile-mode 1) + :bind-keymap (("C-c p" . projectile-command-map)) + :custom ((projectile-completion-system 'ivy))) -(when-require 'projectile (projectile-global-mode)) +(use-package neotree + :bind (("C-c n" . neotree))) + ;;; ;;; Ediff ;;; ;; Don't break out a separate frame for ediff. -(setf ediff-window-setup-function 'ediff-setup-windows-plain - ediff-split-window-function 'split-window-horizontally) +(setq ediff-window-setup-function 'ediff-setup-windows-plain) +(setq ediff-split-window-function 'split-window-horizontally) + ;;; ;;; C ;;; @@ -197,71 +235,57 @@ might be bad." (setq-default c-basic-offset 2) (setq-default c-basic-indent 2) + ;;; ;;; Javascript ;;; -(setf js-indent-level 2 - js2-basic-offset 2) -(when-require 'js2-mode - (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))) +(setq js-indent-level 2) + +(use-package js2-mode + :init (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode)) + :custom ((js2-basic-offset 2))) + ;;; ;;; Web ;;; -(when-require 'web-mode - (add-hook 'web-mode-hook (lambda () (setq web-mode-markup-indent-offset 2))) +(use-package web-mode + :init (add-to-list 'auto-mode-alist '("\\.html$" . web-mode)) (add-to-list 'auto-mode-alist '("\\.tpl$" . web-mode)) - (add-to-list 'auto-mode-alist '("\\.erb$" . web-mode))) - -;;; -;;; PHP -;;; - -(when-require 'php-mode - (add-hook 'php-mode-hook (lambda () (setf c-basic-offset 2)))) + (add-to-list 'auto-mode-alist '("\\.erb$" . web-mode)) + (add-hook 'web-mode-hook + (lambda () + (setq web-mode-markup-indent-offset 2)))) + ;;; ;;; Lisp ;;; (show-paren-mode t) -(defmacro use-mode-for-lisp (mode) - `(progn - (add-hook 'emacs-lisp-mode-hook (lambda () (,mode t))) - (add-hook 'lisp-mode-hook (lambda () (,mode t))) - (add-hook 'lisp-interaction-mode-hook (lambda () (,mode t))) - (add-hook 'scheme-mode-hook (lambda () (,mode t))))) - -(when-require 'rainbow-delimiters - (use-mode-for-lisp rainbow-delimiters-mode)) +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) -(when-require 'paredit - (use-mode-for-lisp paredit-mode)) +(use-package scheme) -(when-require 'geiser - (require 'geiser-guile) - (setf geiser-active-implementations '(guile)) +(use-package paredit + :config + (add-hook 'emacs-lisp-mode-hook (lambda () (paredit-mode t))) + (add-hook 'lisp-mode-hook (lambda () (paredit-mode t))) + (add-hook 'lisp-interaction-mode-hook (lambda () (paredit-mode t))) + (add-hook 'scheme-mode-hook (lambda () (paredit-mode t)))) - (global-set-key (kbd "C-c s") 'connect-to-guile)) +(use-package geiser + :config (use-package geiser-guile) + :custom ((geiser-active-implementations '(guile)))) ;; Use scheme-mode for Skribe documents. (add-to-list 'auto-mode-alist '("\\.skr$" . scheme-mode)) -(when-require 'skribe - ;; Activate Skribe minor mode on .skr files. - (add-hook 'scheme-mode-hook - (lambda () - (when (string-match "\\.skr$" (buffer-file-name)) - (skribe-mode t) - (when-require 'typo - (typo-mode t)))))) - -(require 'scheme) - ;; Hacked to properly indent keywords. Thanks to mark_weaver. (defun scheme-indent-function (indent-point state) "Scheme mode function for the value of the variable `lisp-indent-function'. @@ -315,20 +339,7 @@ indentation." (method (funcall method state indent-point normal-indent))))))) -(defun connect-to-guile-wm () - "Connect to guile-wm's REPL server." - (interactive) - (geiser-connect 'guile "localhost" "37147")) - -(put 'run-script 'scheme-indent-function 1) -(put 'and-let* 'scheme-indent-function 1) -(put 'syntax-parameterize 'scheme-indent-function 1) -(put 'with-mutex 'scheme-indent-function 1) -(put 'test-group 'scheme-indent-function 1) -(put 'sxml-match 'scheme-indent-function 1) -(put 'substitute-keyword-arguments 'scheme-indent-function 1) -(put 'modify-phases 'scheme-indent-function 1) - + ;;; ;;; Ruby ;;; @@ -340,10 +351,10 @@ indentation." (add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode)) (add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode)) -;; Use ruby-test-mode -(when-require 'ruby-test-mode - (add-hook 'ruby-mode-hook 'ruby-test-mode)) +(use-package ruby-test-mode + :hook ruby-mode) + ;;; ;;; SQL ;;; @@ -353,11 +364,12 @@ indentation." (add-hook 'sql-interactive-mode-hook (lambda () (setq truncate-lines t))) + ;;; ;;; Org ;;; -(require 'ox-beamer) +(use-package ox-beamer) (defun org-sort-by-priority-and-todo () "Sort org entries first by priority, and then by TODO status." @@ -375,195 +387,95 @@ indentation." (lambda () (local-set-key (kbd "C-c o") 'org-sort-by-priority-and-todo))) + ;;; ;;; RSS ;;; -(when-require 'elfeed - (setf elfeed-feeds - '("http://planet.gnu.org/rss20.xml" - "http://cs.worcester.edu/blog/feed/" - "https://hacks.mozilla.org/feed/" - "http://ebb.org/bkuhn/blog/rss.xml")) - - (global-set-key (kbd "C-c f") 'elfeed)) - -;;; -;;; Mail -;;; - -(when-require 'notmuch - ;; (when-require 'notmuch-unread - ;; (notmuch-unread-mode 1)) - - (setf notmuch-crypto-process-mime t) - - (global-set-key (kbd "C-c m") 'notmuch) - - (setf notmuch-fcc-dirs - '(("dthompson2@worcester.edu" . "WSU/Sent") - ("davet@fsf.org" . "FSF/INBOX.Sent") - ("davet@gnu.org" . "FSF/INBOX.Sent") - ("dthompson@vistahigherlearning.com" . "VHL/Sent Items") - (".*" . "sent"))) - - (defun recent-mail-by-tag (tag) - `(:name ,tag - :query ,(concat "tag:" tag " AND date:today..today") - :sort-order newest-first)) - - (defun unread-mail-by-tag (tag) - `(:name ,tag - :query ,(concat "tag:" tag " AND tag:unread") - :sort-order newest-first)) - - (defun unarchived-mail-by-tag (tag) - `(:name ,tag - :query ,(concat "tag:" tag " AND NOT tag:archive") - :sort-order newest-first)) - - (setf notmuch-saved-searches - `((:name "inbox" - :query "tag:inbox" - :sort-order newest-first) - ,(unarchived-mail-by-tag "guix") - ,(unarchived-mail-by-tag "guile") - ,@(mapcar 'recent-mail-by-tag - '("nagios" "semaphore" "airbrake" "newrelic" - "rackspace" "vividcortex" "aws" "papertrail" - "codeclimate" "basecamp")))) - - (define-key notmuch-search-mode-map "u" - (lambda () - "Remove 'unread' tag from message." - (interactive) - (notmuch-search-tag '("-unread")) - (notmuch-search-next-thread))) - - (define-key notmuch-search-mode-map "a" - (lambda () - "Remove 'unread' and 'inbox' tags from message and add -'archive' tag." - (interactive) - (notmuch-search-tag '("-unread" "-inbox" "+archive")) - (notmuch-search-next-thread))) - - (define-key notmuch-search-mode-map "d" - (lambda () - "Add 'deleted' tag to message." - (interactive) - (notmuch-search-tag '("+deleted")) - (notmuch-search-next-thread))) - - (define-key notmuch-search-mode-map "i" - (lambda () - "Remove 'unread' and 'archive' tags from message, and add -the 'inbox' tag." - (interactive) - (notmuch-search-tag '("-unread" "-archive" "+inbox")) - (notmuch-search-next-thread))) - - (define-key notmuch-search-mode-map "s" - (lambda () - "Remove 'unread' and 'inbox' tags from message, and add the -'spam' tag." - (interactive) - (notmuch-search-tag '("-unread" "-inbox" "+spam")) - (notmuch-search-next-thread)))) - -(setf send-mail-function 'smtpmail-send-it - smtpmail-smtp-server "smtp.gmail.com" - smtpmail-smtp-service 587 - smtpmail-stream-type 'starttls) - -;; Work email -;; (when (equalp system-name "7VWJD42") -;; (setf send-mail-function 'smtpmail-send-it -;; smtpmail-smtp-server "EXCHANGE02.vhl.dom" -;; smtpmail-smtp-service 587 -;; smtpmail-stream-type 'starttls)) - -;;; -;;; Calendar -;;; - -(when-require 'org-caldav - (setf org-caldav-url - "https://my.owndrive.com/remote.php/caldav/calendars/davexunit" - org-caldav-calendar-id "defaultcalendar" - org-caldav-inbox "~/Documents/calendar.org" - org-caldav-files '() - org-icalendar-timezone "America/New_York")) - -;;; -;;; Music -;;; - -(when-require 'emms - (require 'emms-player-mpd) - (require 'emms-mode-line) - (require 'emms-browser) - - (emms-standard) - (emms-mode-line 1) - (setf emms-player-mpd-server-name "localhost" - emms-player-mpd-server-port "6600" - emms-volume-change-function 'emms-volume-mpd-change) - (add-to-list 'emms-info-functions 'emms-info-mpd) - (add-to-list 'emms-player-list 'emms-player-mpd) - - (global-set-key (kbd "C-c e e") 'emms) - (global-set-key (kbd "C-c e b") 'emms-browser)) +(use-package elfeed + :bind (("C-c f" . elfeed)) + :custom (elfeed-feeds + '("http://planet.gnu.org/rss20.xml" + "http://cs.worcester.edu/blog/feed/" + "https://hacks.mozilla.org/feed/" + "http://ebb.org/bkuhn/blog/rss.xml"))) + ;;; ;;; GPG ;;; -(setf epg-gpg-program "gpg") -(setf epa-pinentry-mode 'loopback) +(setq epg-gpg-program "gpg") +(setq epa-pinentry-mode 'loopback) + ;;; -;;; Other +;;; IRC ;;; -;; Load machine specific emacs configuration -(defvar local-config-filename "~/.emacs.d/local.el") -(if (file-exists-p local-config-filename) - (load local-config-filename)) +(use-package erc + :init + (erc-autojoin-mode t) + (erc-track-mode t) + :custom ((erc-interpret-mirc-color t) + (erc-kill-buffer-on-part t) + (erc-kill-queries-on-quit t) + (erc-kill-server-buffer-on-quit t) + (erc-server-coding-system '(utf-8 . utf-8)) + (erc-autojoin-channels-alist + '(("freenode.net" "#guile" "#guix" "#lispgames"))) + ;; Don't open channel buffers in place of the current + ;; buffer because that drives me fucking crazy. + (erc-join-buffer 'bury) + (erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE" + "324" "329" "332" "333" "353" "477")) + (erc-save-buffer-on-part t))) -;; IRC configuration -(load "~/.emacs.d/erc.el") +(use-package erc-log + :custom ((erc-log-channels-directory "~/.erc/logs/"))) -;;; -;;; Keybindings -;;; +(if (not (file-exists-p erc-log-channels-directory)) + (mkdir erc-log-channels-directory t)) -;; Handy functions courtesy of whattheemacs.d -(defun open-line-below () +(use-package erc-notify) +(use-package erc-autoaway) +(use-package erc-services) +(use-package tls) + +;; Start and stop erc +(defun start-irc () + "Connect to IRC." (interactive) - (if (eolp) - (newline) - (end-of-line) - (newline)) - (indent-for-tab-command)) + (erc-tls :server "irc.freenode.net" + :port 6697 + :nick "davexunit" + :password (read-passwd "Password: "))) -(defun open-line-above () +(defun stop-irc () + "Disconnects from all irc servers" (interactive) - (beginning-of-line) - (newline) - (forward-line -1) - (indent-for-tab-command)) + (dolist (buffer (delq nil + (mapcar + (lambda (x) + (and (erc-server-buffer-p x) x)) + (buffer-list)))) + (message "Server buffer: %s" (buffer-name buffer)) + (with-current-buffer buffer + (erc-quit-server "Later")))) -(global-set-key (kbd "RET") 'newline-and-indent) -(global-set-key (kbd "<C-return>") 'open-line-below) -(global-set-key (kbd "<C-M-return>") 'open-line-above) (global-set-key (kbd "C-c i") 'start-irc) + + +;;; +;;; Keybindings +;;; + +(global-set-key (kbd "RET") 'newline-and-indent) (global-set-key (kbd "C-c p") 'package-list-packages) (global-set-key (kbd "C-c C-f") 'ff-find-other-file) (global-set-key (kbd "M-%") 'query-replace-regexp) ;; No more minimizing Emacs by accident. (global-unset-key (kbd "C-z")) - -;; Enable some disabled-by-default functions +;; Enable some disabled-by-default functions. (put 'upcase-region 'disabled nil) (put 'downcase-region 'disabled nil) |