joestar

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | LICENSE

commit df1692c6efb46981e492fa59ec7da686bbcfcfa3
parent 0b1c5824cfe8a26b141e853c7cdbb07a0f6aad87
Author: Ryan Jeffrey <pwishie@gmail.com>
Date:   Tue, 14 May 2019 02:13:45 -0700

made joejoe into a real mode

Diffstat:
MREADME.md | 6+++++-
Mjoejoe.el | 158++++++++++++++++++++++++++++++++++++++++++-------------------------------------
2 files changed, 90 insertions(+), 74 deletions(-)

diff --git a/README.md b/README.md @@ -1,4 +1,8 @@ # joejoe -joejoe is a minor mode for Emacs that seeks to emulate [Joe's Own Editor](https://github.com/jhallen/joe-editor) Wordstar-like keybindings and features. Because Joe does not have some of the same features as Emacs, joejoe also features some new keybindings to make things easier. +joejoe is a minor mode for Emacs that seeks to emulate [Joe's Own Editor's](https://github.com/jhallen/joe-editor) Wordstar-like keybindings and features. Because Joe does not have some of the same features as Emacs, joejoe also features some new keybindings to make things easier. The current version of joejoe is incomplete as not all of Joe's features and keybindings have been implemented yet. + +# joejoe and other modes + +Joejoe exists in-part to be an alternative to evil-mode, which is rather invasive to Emacs and makes it difficult to use specific modes. Currently, joejoe has issues with some modes because of its redefinition of the backspace character, in particular with vterm-mode. These modes unfortunately require that joejoe be turned off at this point, but this bug will be fixed in the future. diff --git a/joejoe.el b/joejoe.el @@ -6,6 +6,8 @@ ;;; TODO: remake with lambdas ;;; Code: + +;;; functions to change the behavior of keymaps (defun joe/save-file (file-path) "Prompt the minibuffer to save the current buffer as FILE-PATH." (interactive "FName of file to save: ") @@ -23,9 +25,10 @@ (kill-emacs)) (delete-window))) -(defun joe/move-cursor-through-page (direction) - "Move the cursor through the page in DIRECTION more akin to joe." - (interactive)) +(defun joe/insert-file (file-path) + "Prompt the minibuffer to save the current buffer as FILE-PATH." + (interactive "FName of file to insert: ") + (insert-file-contents file-path)) (defun joe/scroll-down () "Scroll down while preserving the cursor point." @@ -66,88 +69,97 @@ (let ((backward-delete-char-untabify-method 'hungry)) (call-interactively 'backward-delete-char-untabify))))) -;; smooth scroll. -;; https://www.emacswiki.org/emacs/SmoothScrolling -(setq scroll-margin 1 - scroll-conservatively 0 - scroll-up-aggressively 0.01 - scroll-down-aggressively 0.01) -(setq-default scroll-up-aggressively 0.01 - scroll-down-aggressively 0.01) -;; keep cursor position while scrolling -(setq scroll-preserve-screen-position 'always) ;; TODO fix behavior so that it always scrolls perfectly -(setq scroll-error-top-bottom t) - -;;; some wordstar keybindings to make manipulating the editor itself a bit easier -(defvar my-keys-minor-mode-map - (let ((map (make-sparse-keymap))) + +;;; setting joejoe's wordstar-like keybindings +(defvar joejoe-mode-map + (let ((joe-map (make-sparse-keymap))) ;; buffer movement - (define-key map (kbd "C-u") 'scroll-down) - (define-key map (kbd "C-v") 'scroll-up) - (define-key map (kbd "C-e") 'end-of-line) - (define-key map (kbd "C-a") 'beginning-of-line-text) - (define-key map (kbd "C-k u") 'beginning-of-buffer) - (define-key map (kbd "C-k C-u") 'beginning-of-buffer) - (define-key map (kbd "C-k v") 'end-of-buffer) - (define-key map (kbd "C-k C-v") 'end-of-buffer) - (define-key map (kbd "C-z") 'backward-word) - (define-key map (kbd "C-x") 'forward-word) - (define-key map (kbd "C-k C-l") 'joe/goto-abosolute-line) - (define-key map (kbd "C-k l") 'joe/goto-abosolute-line) + (define-key joe-map (kbd "C-u") 'scroll-down) + (define-key joe-map (kbd "C-v") 'scroll-up) + (define-key joe-map (kbd "C-e") 'end-of-line) + (define-key joe-map (kbd "C-a") 'beginning-of-line-text) + (define-key joe-map (kbd "C-k u") 'beginning-of-buffer) + (define-key joe-map (kbd "C-k C-u") 'beginning-of-buffer) + (define-key joe-map (kbd "C-k v") 'end-of-buffer) + (define-key joe-map (kbd "C-k C-v") 'end-of-buffer) + (define-key joe-map (kbd "C-z") 'backward-word) + (define-key joe-map (kbd "C-x") 'forward-word) + (define-key joe-map (kbd "C-k C-l") 'joe/goto-abosolute-line) + (define-key joe-map (kbd "C-k l") 'joe/goto-abosolute-line) ;; buffer manipulation - (define-key map (kbd "C-k e") 'find-file) - (define-key map (kbd "C-k C-e") 'find-file) - (define-key map (kbd "C-y") 'kill-whole-line) - (define-key map (kbd "C-j") 'kill-line) - (define-key map (kbd "C-[ C-o") 'kill-line) ;; TODO - (define-key map (kbd "C-[ o") 'kill-line) ;; TODO - (define-key map (kbd "C-W") 'kill-word) ; Test - (define-key map (kbd "C-O") 'kill-word) ;; TODO, Test - (define-key map (kbd "C-^") 'redo) - (define-key map (kbd "C-k C-x") 'save-buffers-kill-emacs) - (define-key map (kbd "C-f") 'search-forward) - (define-key map (kbd "C-j") 'kill-line) - (define-key map (kbd "C-k r") 'insert-file-contents) - (define-key map (kbd "C-k C-r") 'insert-file-contents) - (define-key map (kbd "<backspace>") 'joe/backward-delete-char) + (define-key joe-map (kbd "C-k e") 'find-file) + (define-key joe-map (kbd "C-k C-e") 'find-file) + (define-key joe-map (kbd "C-y") 'kill-whole-line) + (define-key joe-map (kbd "C-j") 'kill-line) + (define-key joe-map (kbd "C-[ C-o") 'kill-line) ;; TODO + (define-key joe-map (kbd "C-[ o") 'kill-line) ;; TODO + (define-key joe-map (kbd "C-W") 'kill-word) ; Test + (define-key joe-map (kbd "C-O") 'kill-word) ;; TODO, Test + (define-key joe-map (kbd "C-^") 'redo) + (define-key joe-map (kbd "C-k C-x") 'save-buffers-kill-emacs) + (define-key joe-map (kbd "C-f") 'search-forward) + (define-key joe-map (kbd "C-j") 'kill-line) + (define-key joe-map (kbd "C-k r") 'joe/insert-file) + (define-key joe-map (kbd "C-k C-r") 'joe/insert-file) + (define-key joe-map (kbd "<backspace>") 'joe/backward-delete-char) ;; editor manipulation - (define-key map (kbd "C-c") 'joe/delete-window) - (define-key map (kbd "C-k o") 'split-window-vertically) - (define-key map (kbd "C-k C-c") 'joe/delete-window) - (define-key map (kbd "C-k c") 'joe/delete-window) - (define-key map (kbd "C-k C-o") 'split-window-vertically) - (define-key map (kbd "C-k b") 'kill-buffer) - (define-key map (kbd "C-k n") 'other-window) - (define-key map (kbd "C-k C-b") 'kill-buffer) ;; ??? - (define-key map (kbd "C-k C-n") 'other-window) - (define-key map (kbd "C-k C-d") 'joe/save-file) - (define-key map (kbd "C-k d") 'joe/save-file) - (define-key map (kbd "C-k g") 'enlarge-window) - (define-key map (kbd "C-k C-g") 'enlarge-window) - (define-key map (kbd "C-k t") 'shrink-window) - (define-key map (kbd "C-k C-t") 'shrink-window) + (define-key joe-map (kbd "C-c") 'joe/delete-window) + (define-key joe-map (kbd "C-k o") 'split-window-vertically) + (define-key joe-map (kbd "C-k C-c") 'joe/delete-window) + (define-key joe-map (kbd "C-k c") 'joe/delete-window) + (define-key joe-map (kbd "C-k C-o") 'split-window-vertically) + (define-key joe-map (kbd "C-k b") 'kill-buffer) + (define-key joe-map (kbd "C-k n") 'other-window) + (define-key joe-map (kbd "C-k C-b") 'kill-buffer) ;; ??? + (define-key joe-map (kbd "C-k C-n") 'other-window) + (define-key joe-map (kbd "C-k C-d") 'joe/save-file) + (define-key joe-map (kbd "C-k d") 'joe/save-file) + (define-key joe-map (kbd "C-k g") 'enlarge-window) + (define-key joe-map (kbd "C-k C-g") 'enlarge-window) + (define-key joe-map (kbd "C-k t") 'shrink-window) + (define-key joe-map (kbd "C-k C-t") 'shrink-window) - ;; additions for features that joe does not support - (define-key map (kbd "M-+") 'text-scale-increase) - (define-key map (kbd "M--") 'text-scale-decrease) - (define-key map (kbd "C-k ;") 'split-window-horizontally) - (define-key map (kbd "C-k C-;") 'split-window-horizontally) + ;; additions for features tha + (define-key joe-map (kbd "M-+") 'text-scale-increase) + (define-key joe-map (kbd "M--") 'text-scale-decrease) + (define-key joe-map (kbd "C-k ;") 'split-window-horizontally) + (define-key joe-map (kbd "C-k C-;") 'split-window-horizontally) ;; region - (define-key map (kbd "<C-right>") 'highlight) + (define-key joe-map (kbd "<C-right>") 'highlight) - ;; spellcheck TODO - map) - "My-keys-minor-mode keymap.") + ;; spellcheck TODO + joe-map) + "The joejoe-mode keymaps.") + +;;; defining the minor modes -(define-minor-mode my-keys-minor-mode +(define-minor-mode joejoe-mode "A minor mode so that my key settings override annoying major modes." - :init-value t - :lighter " my-keys") -(my-keys-minor-mode t) + :init-value nil + :lighter " joe" + :global t + + ;;; setting default Emacs behaviour + + ;; smooth scroll. + ;; https://www.emacswiki.org/emacs/SmoothScrolling + (setq scroll-margin 1 + scroll-conservatively 0 + scroll-up-aggressively 0.01 + scroll-down-aggressively 0.01) + (setq-default scroll-up-aggressively 0.01 + scroll-down-aggressively 0.01) + + ;; keep cursor position while scrolling + (setq scroll-preserve-screen-position 'always) ;; TODO fix behavior so that it always scrolls perfectly + (setq scroll-error-top-bottom t)) + +(define-globalized-minor-mode global-joejoe-mode joejoe-mode + (lambda () (joejoe-mode 1))) (provide 'joejoe) ;;; joejoe.el ends here