Move my eshell prompt to separate module

To help with autoloading, also update the Makefile to create a
`site-lisp/site-autoloads.el' file which is loaded by emacs.
This commit is contained in:
Tom Willemse 2015-07-08 12:38:23 +02:00
parent e390a5dae4
commit f54d8a5930
3 changed files with 80 additions and 20 deletions

View file

@ -1,7 +1,10 @@
.PHONY: all site-lisp SITE_LISPS = site-lisp/oni-smt.elc site-lisp/appt-init.elc \
all: init2.elc init.elc site-lisp/oni-smt.elc site-lisp/appt-init.elc \
site-lisp/jabber-init.elc site-lisp/org-init.elc \ site-lisp/jabber-init.elc site-lisp/org-init.elc \
site-lisp/gnus-init.elc site-lisp/drd.elc site-lisp/gnus-init.elc site-lisp/drd.elc \
site-lisp/oni-eshell-prompt.elc
.PHONY: all site-lisp
all: init2.elc init.elc $(SITE_LISPS) site-lisp/site-autoloads.el
%.elc: %.el %.elc: %.el
@echo "ELC $<" @echo "ELC $<"
@ -12,15 +15,29 @@ init2.el: init.org org/intro.org
@echo "OBT $<" @echo "OBT $<"
@emacs -Q -batch -l "ob-tangle" -eval "(org-babel-tangle-file \"init.org\")" @emacs -Q -batch -l "ob-tangle" -eval "(org-babel-tangle-file \"init.org\")"
site-lisp/site-autoloads.el: $(SITE_LISPS)
@echo "GEN $@"
@cask exec emacs -Q -batch \
-eval "(setq generated-autoload-file \"$(CURDIR)/$@\")" \
-eval "(update-directory-autoloads \"$(CURDIR)/site-lisp/\")"
rudel: rudel:
git clone git://github.com/scymtym/rudel.git packages/rudel git clone git://github.com/scymtym/rudel.git packages/rudel
emacs -Q --batch --visit packages/rudel/rudel-compile.el \ emacs -Q --batch --visit packages/rudel/rudel-compile.el \
--eval "(eval-buffel)" --eval "(eval-buffel)"
clean: clean-byte-compiled:
rm -f $(SITE_LISPS) init2.elc init.elc
clean-autoloads:
rm -f site-lisp/site-autoloads.el init2.el
clean-export:
rm -rf _publish/*.* rm -rf _publish/*.*
export: clean clean: clean-export clean-byte-compiled clean-generated
export: clean-export
emacs -L $(CURDIR) -L ~/.emacs.d/vendor-lisp/org/lisp \ emacs -L $(CURDIR) -L ~/.emacs.d/vendor-lisp/org/lisp \
-L ~/.emacs.d/vendor-lisp/org/contrib/lisp -batch -l project.el \ -L ~/.emacs.d/vendor-lisp/org/contrib/lisp -batch -l project.el \
-f org-publish-all -f org-publish-all

View file

@ -251,12 +251,6 @@ But only if it is a maildir inbox."
'action (lambda (button) 'action (lambda (button)
(browse-url (button-label button))))))) (browse-url (button-label button)))))))
(defun oni:eshell-prompt ()
"Show a pretty shell prompt."
(concat (if (not (looking-back "\n" nil)) "\n")
(oni:shorten-dir (abbreviate-file-name (eshell/pwd)))
" > "))
(defun oni:go-mode-func () (defun oni:go-mode-func ()
"Function for `go-mode-hook'." "Function for `go-mode-hook'."
(setq indent-tabs-mode nil)) (setq indent-tabs-mode nil))
@ -710,12 +704,6 @@ For `python-mode' I prefer `python-imenu-create-flat-index'."
(insert "`" command "':\n")) (insert "`" command "':\n"))
(shell-command command output-buffer)) (shell-command command output-buffer))
(defun oni:shorten-dir (dir)
"Shorten a directory, (almost) like fish does it."
(while (string-match "\\(\\.?[^./]\\)[^/]+/" dir)
(setq dir (replace-match "\\1/" nil nil dir)))
dir)
(defun oni:show-buffer-position () (defun oni:show-buffer-position ()
"Show the position in the current buffer." "Show the position in the current buffer."
(interactive) (interactive)
@ -1011,9 +999,7 @@ from myaethon2.core.decorators import (
(setq eltuki-blog-dir "~/documents/blog")) (setq eltuki-blog-dir "~/documents/blog"))
(stante-after em-prompt (stante-after em-prompt
(setq eshell-highlight-prompt nil) (setq eshell-highlight-prompt nil))
(setq eshell-prompt-function 'oni:eshell-prompt)
(setq eshell-prompt-regexp "^[~/].* > "))
(stante-after em-term (stante-after em-term
(add-to-list 'eshell-visual-commands "unison")) (add-to-list 'eshell-visual-commands "unison"))
@ -1287,6 +1273,7 @@ from myaethon2.core.decorators import (
;;;; Hooks ;;;; Hooks
(add-hook 'eshell-first-time-mode-hook 'oni-eshell-set-prompt)
(add-hook 'after-save-hook 'oni:after-save-func t) (add-hook 'after-save-hook 'oni:after-save-func t)
(add-hook 'before-save-hook 'oni:before-save-func) (add-hook 'before-save-hook 'oni:before-save-func)
(add-hook 'css-mode-hook #'rainbow-mode) (add-hook 'css-mode-hook #'rainbow-mode)
@ -1504,6 +1491,7 @@ from myaethon2.core.decorators import (
(windmove-default-keybindings) (windmove-default-keybindings)
(load (system-name) :noerror) (load (system-name) :noerror)
(load "site-autoloads")
;;; Test ;;; Test

View file

@ -0,0 +1,55 @@
;;; oni-eshell-prompt.el --- Oni's eshell prompt functions -*- lexical-binding: t; -*-
;; Copyright (C) 2015 Tom Willemse
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords:
;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; These are the functions I use to provide my eshell prompt.
;; You can use it by adding `oni-eshell-set-prompt' to the
;; `eshell-first-time-mode-hook'.
;;; Code:
(require 'em-dirs)
(require 'em-prompt)
(defvar oni:eshell-prompt-regexp "^[~/].* > "
"A regular expression that matches the prompt.")
(defun oni:shorten-dir (dir)
"Shorten a directory, (almost) like fish does it."
(while (string-match "\\(\\.?[^./]\\)[^/]+/" dir)
(setq dir (replace-match "\\1/" nil nil dir)))
dir)
(defun oni:eshell-prompt ()
"Show a pretty shell prompt."
(concat (if (not (looking-back "\n" nil)) "\n")
(oni:shorten-dir (abbreviate-file-name (eshell/pwd)))
" > "))
;;;###autoload
(defun oni-eshell-set-prompt ()
"Prepare eshell for using the prompt."
(setq eshell-prompt-function #'oni:eshell-prompt
eshell-prompt-regexp oni:eshell-prompt-regexp))
(provide 'oni-eshell-prompt)
;;; oni-eshell-prompt.el ends here