joestar

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

commit 9a1b401ecccdc86a69b483fec1383dee2d5435b6
parent aa4cc3af8e43dd3955e5a45b2eee81c30ae58de3
Author: Ryan Jeffrey <pwishie@gmail.com>
Date:   Sat, 25 May 2019 18:04:24 -0700

restructured

Diffstat:
MREADME.org | 36+++++++++++++++++++++++++++++-------
Mjoestar.el | 273+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
2 files changed, 191 insertions(+), 118 deletions(-)

diff --git a/README.org b/README.org @@ -17,10 +17,32 @@ However, Emacs considers these to be different key sequences. In joestar mode, just like in joe, these are the same sequence. ** Help Type *C-k h* for help. -** Buffer manipulation. -- *C-y* -Kill the entire line. -- *C-j* -Kill the rest of the line from point. -- *ESC-o* -Kill the to the beginning of the line from point. +** Region +- *C-<arrow>* +Control selection. +- *C-k c* +Copy region. +- *C-k w* +Write to file. +- *C-k y* +Delete region +** Goto +- *C-z* +Back one word. +- *C-x* +Forward one word. +- *C-k C-u* +Top of file. +- *C-k C-v* +End of file. +- *C-a* +Beginning of line (first non-indentation character). +- *C-e* +End of line. +- *C-k l* +To line number. +- *C-u* +Up one screen. +- *C-v* +Down one screen. + diff --git a/joestar.el b/joestar.el @@ -82,43 +82,97 @@ ;;; setting joestar's wordstar-like keybindings (defvar joestar-mode-map (let ((joe-map (make-sparse-keymap))) + ;; region + (define-key joe-map (kbd "<C-right>") '(lambda () + "Control selection to right char." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'forward-char))) + (define-key joe-map (kbd "<C-left>") '(lambda () + "Control selection to left char." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'backward-char))) + (define-key joe-map (kbd "<C-up>") '(lambda () + "Control selection up one line." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'previous-line))) + (define-key joe-map (kbd "<C-down>") '(lambda () + "Control selection down one line." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'next-line))) + (define-key joe-map (kbd "C-k C-y") 'delete-region) + (define-key joe-map (kbd "C-k y") (kbd "C-k C-y")) + (define-key joe-map (kbd "C-k C-m") '(lambda () + "Move the current block to point." + (interactive))) ; TODO + (define-key joe-map (kbd "C-k m") (kbd "C-k C-m")) + (define-key joe-map (kbd "C-k C-c") 'copy-region-as-kill) ;; TODO test + (define-key joe-map (kbd "C-k c") (kbd "C-k C-c")) + (define-key joe-map (kbd "C-k C-/") '(lambda () + (interactive))) ; TODO + (define-key joe-map (kbd "C-k /") (kbd "C-k C-/")) + (define-key joe-map (kbd "C-k C-w") '(lambda (file-path) + "Writes the region to FILE-PATH." + (write-region (region-beginning) (region-end) file-path))) ; TODO test + (define-key joe-map (kbd "C-k w") (kbd "C-k C-w")) - ;; buffer movement - (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) - + ;; goto + (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-u") 'beginning-of-buffer) (define-key joe-map (kbd "C-k u") (kbd "C-k C-u")) - (define-key joe-map (kbd "C-k C-v") 'end-of-buffer) (define-key joe-map (kbd "C-k v") (kbd "C-k C-v")) - - (define-key joe-map (kbd "C-k C-f") '(lambda () - "Joe-style find function." - (interactive))) ; TODO - (define-key joe-map (kbd "C-k C-f") (kbd "C-k C-f")) - - (define-key joe-map (kbd "C-z") 'backward-word) - (define-key joe-map (kbd "C-x") 'forward-word) - + (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 C-l") '(lambda (num) "Goto absolute line number NUM." (interactive "sGo to line: ") (forward-line (* -1 (count-lines 1 (point)))) (forward-line (1- (string-to-number num))))) (define-key joe-map (kbd "C-k l") (kbd "C-k C-l")) + (define-key joe-map (kbd "C-g") '(lambda () + (interactive))) ; TODO - ;; buffer manipulation + ;; misc + (define-key joe-map (kbd "C-k C-j") '(lambda () + "Turns a really long line into a paragraph of multiple lines." + (interactive))) ; TODO + (define-key joe-map (kbd "C-k j") (kbd "C-k C-j")) (define-key joe-map (kbd "C-k C-a") 'center-line) (define-key joe-map (kbd "C-k a") (kbd "C-k C-a")) + (define-key joe-map (kbd "<C-k C-space>") '(lambda () + "Print current buffer information to the minibuffer." + (interactive))) ; TODO + (define-key joe-map (kbd "<C-k space>") (kbd "<C-k C-space>")) - (define-key joe-map (kbd "C-k C-e") 'find-file) - (define-key joe-map (kbd "C-k e") 'find-file) - + ;; spell + (define-key joe-map (kbd "<escape> n") 'flyspell-word) + (define-key joe-map (kbd "<escape> l") 'flyspell-buffer) + + ;; delete + (define-key joe-map (kbd "<backspace>") '(lambda () + "Redefine the what the backspace key does to mimic vim." + (interactive) + (cond ((bolp) + (delete-char -1) + (indent-according-to-mode) + (when (looking-at "\\([ \t]+\\)[^ \t]") + (delete-region (point) (match-end 1)))) + ((<= (point) (save-excursion (back-to-indentation) (point))) + (let ((backward-delete-char-untabify-method 'hungry)) + (call-interactively 'backward-delete-char-untabify) + (delete-char -1)) + (indent-according-to-mode)) + (t + (let ((backward-delete-char-untabify-method 'hungry)) + (call-interactively 'backward-delete-char-untabify)))))) (define-key joe-map (kbd "C-y") 'kill-whole-line) - (define-key joe-map (kbd "C-w") 'kill-word) (define-key joe-map (kbd "C-o") '(lambda () "Kill the word before point." @@ -126,7 +180,10 @@ (interactive) (call-interactively 'backward-word) (call-interactively 'kill-word))) ;; TODO, Test - + (define-key joe-map (kbd "C-j") 'kill-line) + (define-key joe-map (kbd "<escape> o") '(lambda () + "Kill to the beginning of the line before point." + (kill-line 0))) (define-key joe-map (kbd "C-^") '(lambda () "Calls undo-tree redo." (interactive) @@ -135,71 +192,34 @@ "Calls undo-tree undo." (interactive) (call-interactively 'undo-tree-undo))) - + + ;; exit (define-key joe-map (kbd "C-k C-x") 'save-buffers-kill-emacs) (define-key joe-map (kbd "C-k x") (kbd "C-k C-x")) - + (define-key joe-map (kbd "C-c") '(lambda () + "Abort." + (interactive))) (define-key joe-map (kbd "C-k C-q") 'kill-emacs) (define-key joe-map (kbd "C-k q") (kbd "C-k C-q")) - - (define-key joe-map (kbd "C-f") 'search-forward) - (define-key joe-map (kbd "C-j") 'kill-line) - (define-key joe-map (kbd "<escape> o") '(lambda () - "Kill to the beginning of the line before point." - (kill-line 0))) - + + ;; file + (define-key joe-map (kbd "C-k C-e") 'find-file) + (define-key joe-map (kbd "C-k e") 'find-file) (define-key joe-map (kbd "C-k C-r") '(lambda () "Prompt the minibuffer to save the current buffer as FILE-PATH." (interactive "FName of file to insert: ") (insert-file-contents file-path))) (define-key joe-map (kbd "C-k r") (kbd "C-k C-r")) - - (define-key joe-map (kbd "<backspace>") '(lambda () - "Redefine the what the backspace key does to mimic vim." - (interactive) - (cond ((bolp) - (delete-char -1) - (indent-according-to-mode) - (when (looking-at "\\([ \t]+\\)[^ \t]") - (delete-region (point) (match-end 1)))) - ((<= (point) (save-excursion (back-to-indentation) (point))) - (let ((backward-delete-char-untabify-method 'hungry)) - (call-interactively 'backward-delete-char-untabify) - (delete-char -1)) - (indent-according-to-mode)) - (t - (let ((backward-delete-char-untabify-method 'hungry)) - (call-interactively 'backward-delete-char-untabify)))))) - (define-key joe-map (kbd "<C-right>") '(lambda () - "Control selection to right char." - (interactive) - (setq this-command-keys-shift-translated t) - (call-interactively 'forward-char))) - (define-key joe-map (kbd "<C-left>") '(lambda () - "Control selection to left char." - (interactive) - (setq this-command-keys-shift-translated t) - (call-interactively 'backward-char))) - (define-key joe-map (kbd "<C-up>") '(lambda () - "Control selection up one line." - (interactive) - (setq this-command-keys-shift-translated t) - (call-interactively 'previous-line))) - (define-key joe-map (kbd "<C-down>") '(lambda () - "Control selection down one line." - (interactive) - (setq this-command-keys-shift-translated t) - (call-interactively 'next-line))) - - (define-key joe-map (kbd "C-k C-y") 'delete-region) - (define-key joe-map (kbd "C-k y") (kbd "C-k C-y")) - - (define-key joe-map (kbd "C-k C-m") '(lambda () - "Move the current block to point." - (interactive))) - (define-key joe-map (kbd "C-k m") (kbd "C-k C-m")) - - ;; editor manipulation + (define-key joe-map (kbd "C-k C-d") '(lambda (file-path) + "Prompt the minibuffer to save the current buffer as FILE-PATH." + (interactive "FName of file to save: ") + (save-buffer file-path) + (message "%s saved." file-path))) + (define-key joe-map (kbd "C-k d") (kbd "C-k C-d")) + (define-key joe-map (kbd "C-k C-`") '(lambda (file-path) + "Prompt the minibuffer to save the current buffer as FILE-PATH." + (interactive))) ; TODO + (define-key joe-map (kbd "C-k `") (kbd "C-k C-`")) (define-key joe-map (kbd "C-c") '(lambda () "Delete current window, exit Emacs if only one window." (interactive) @@ -209,59 +229,90 @@ (kill-emacs) nil) (kill-emacs)) - (delete-window)))) - - (define-key joe-map (kbd "C-k o") 'split-window-vertically) - - (define-key joe-map (kbd "C-k C-c") 'copy-region-as-kill) ;; TODO test - (define-key joe-map (kbd "C-k c") (kbd "C-k C-c")) + (delete-window)))) ; TODO + + ;; search + (define-key joe-map (kbd "C-k C-f") '(lambda () + "Joe-style find function." + (interactive))) ; TODO + (define-key joe-map (kbd "C-k C-f") (kbd "C-k C-f")) + + ;; help TODO + (define-key joe-map (kbd "C-k C-h") '(lambda () + "Set up or turn off the help buffer." + (interactive))) ; TODO + (define-key joe-map (kbd "C-k h") (kbd "C-k C-h")) + + ;; macros TODO + (define-key joe-map (kbd "C-k C-[") '(lambda (num) + "Set a macro with id NUM." + (interactive "%s"))) ; TODO + (define-key joe-map (kbd "C-k [") (kbd "C-k C-[")) + (define-key joe-map (kbd "C-k C-]") 'end-kbd-macro) ; TODO ? + (define-key joe-map (kbd "C-k ]") (kbd "C-k C-]")) + (define-key joe-map (kbd "C-k C-\\") '(lambda() (interactive))) ; TODO ? + (define-key joe-map (kbd "C-k \\") (kbd "C-k C-\\")) + (define-key joe-map (kbd "<escape> D") '(lambda() (interactive))) ; TODO ? + + ;; scroll + (define-key joe-map (kbd "<escape> w") 'scroll-down-line) + (define-key joe-map (kbd "<escape> z") 'scroll-up-line) + (define-key joe-map (kbd "<escape> <") 'scroll-left) ; TODO test + (define-key joe-map (kbd "<escape> >") 'scroll-right) ; TODO test + + ;; insert + (define-key joe-map (kbd "C-]") '(lambda () + "Insert a newline char." + (interactive) + (insert "\n"))) ; TODO test + (define-key joe-map (kbd "C-@") '(lambda () + "Insert a space char." + (interactive) + (insert " "))) + (define-key joe-map (kbd "C-q") '(lambda ()(interactive))) ; TODO + (define-key joe-map (kbd "<escape> y") '(lambda () (interactive))) ; TODO + + ;; window (define-key joe-map (kbd "C-k C-o") 'split-window-vertically) (define-key joe-map (kbd "C-k o") (kbd "C-k C-o")) - - (define-key joe-map (kbd "<escape> n") 'flyspell-word) - (define-key joe-map (kbd "<escape> l") 'flyspell-buffer) - + (define-key joe-map (kbd "C-k C-g") 'enlarge-window) + (define-key joe-map (kbd "C-k g") (kbd "C-k C-g")) + (define-key joe-map (kbd "C-k C-t") 'shrink-window) + (define-key joe-map (kbd "C-k t") (kbd "C-k C-t")) (define-key joe-map (kbd "C-k C-n") '(lambda () "Move to the next window." (interactive) (other-window 1))) (define-key joe-map (kbd "C-k n") (kbd "C-k C-n")) - (define-key joe-map (kbd "C-k C-p") '(lambda () "Move to the previous window." (interactive) (other-window -1))) (define-key joe-map (kbd "C-k p") (kbd "C-k C-p")) - - (define-key joe-map (kbd "C-k C-d") '(lambda (file-path) - "Prompt the minibuffer to save the current buffer as FILE-PATH." - (interactive "FName of file to save: ") - (save-buffer file-path) - (message "%s saved." file-path))) - - (define-key joe-map (kbd "C-k d") (kbd "C-c C-d")) - - (define-key joe-map (kbd "C-k C-g") 'enlarge-window) - (define-key joe-map (kbd "C-k g") (kbd "C-k C-g")) - - (define-key joe-map (kbd "C-k C-t") 'shrink-window) - (define-key joe-map (kbd "C-k t") (kbd "C-k C-t")) - - ;; additions for features that joe does not support. + (define-key joe-map (kbd "C-k C-i") '(lambda () + "Show one / All." + (interactive))) ; TODO + (define-key joe-map (kbd "C-k i") (kbd "C-k C-i")) (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 C-;") 'split-window-horizontally) - (define-key joe-map (kbd "C-k ;") (kbd "C-k C-;")) + - ;; spellcheck TODO + ;; shell TODO + ;; in joe, the cursor does not change when the comand is appended. + (define-key joe-map (kbd "<escape> !") '(lambda (com) + "Appends the output of shell command COM to current buffer." + (interactive "Program to run: ") + (append-to-buffer (shell-command-to-string com)))) ; TODO test, + (define-key joe-map (kbd "C-k C-z") 'suspend-emacs) + (define-key joe-map (kbd "C-k z") (kbd "C-k C-z")) joe-map) "The joestar-mode keymaps.") ;;; defining the minor modes (define-minor-mode joestar-mode - "A minor mode so that my key settings override annoying major modes." + "Joe's Own Editor emulation mode." :init-value nil :lighter " joe" nil @@ -275,8 +326,8 @@ 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) + (setq scroll-preserve-screen-position 'always) + (setq scroll-error-top-bottom nil) (defvar undo-tree-map (let ((map (make-sparse-keymap))) ;; remap `undo' and `undo-only' to `undo-tree-undo'