joestar

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

commit 5962c9972fae85629a12dd606c5cc3c9c9168e7f
parent 1a517e5d87b0f815301f031bb575d806dcd02fd4
Author: Ryan Jeffrey <pwishie@gmail.com>
Date:   Fri, 24 May 2019 03:45:37 -0700

fixed catastrophic copy bug

Diffstat:
Mjoestar.el | 31+++++++++----------------------
Ajoestar2.el | 267+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 276 insertions(+), 22 deletions(-)

diff --git a/joestar.el b/joestar.el @@ -13,6 +13,8 @@ ;;; set mark variables ;; TODO make a better system + +;; TODO make a better system (defvar joe-mark-0 nil "Mark 0.") (defvar joe-mark-1 nil "Mark 1.") (defvar joe-mark-2 nil "Mark 2.") @@ -35,10 +37,6 @@ (make-variable-buffer-local 'joe-mark-8) (make-variable-buffer-local 'joe-mark-9) -;;; joestar-mode functions: - -;; set mark funcs: - ;; TODO function does not work (defun joe/setmark (sid) "Set the mark SID manually." @@ -60,10 +58,7 @@ (message "Mark 1 set.")) -(defun joe/help-me () - "Prints the help documentation in a separate buffer.") - -;;; TODO fix bug where ivy does not display the full file-name +;; fix bug where ivy does not display the full file-name (defun joe/save-file (file-path) "Prompt the minibuffer to save the current buffer as FILE-PATH." (interactive "FName of file to save: ") @@ -135,16 +130,6 @@ (let ((backward-delete-char-untabify-method 'hungry)) (call-interactively 'backward-delete-char-untabify))))) -(defun joe/begin-selection () - "Begin the mark selection." - (interactive) - (set-mark-command) - (keyboard-quit)) - -(defun joe/end-selectioin-and-select () - "End the mark selection and select everything between it and the mark." - nil) - (defun joe/control-select-right () "Control selection to right char." (interactive) @@ -210,15 +195,17 @@ (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) - (define-key joe-map (kbd "C-k b") 'joe/begin-selection) - (define-key joe-map (kbd "C-k C-b") 'joe/begin-selection) (define-key joe-map (kbd "<C-right>") 'joe/control-select-right) (define-key joe-map (kbd "<C-left>") 'joe/control-select-left) (define-key joe-map (kbd "<C-up>") 'joe/control-select-up) (define-key joe-map (kbd "<C-down>") 'joe/control-select-down) - (define-key joe-map (kbd "C-y") 'delete-region) - (define-key joe-map (kbd "C-m") 'delete-region) + (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") nil) + (define-key joe-map (kbd "C-k m") (kbd "C-k C-m")) + ;; editor manipulation (define-key joe-map (kbd "C-c") 'joe/delete-window) diff --git a/joestar2.el b/joestar2.el @@ -0,0 +1,267 @@ +;;; package --- summary + +;;; Commentary: + +;;; TODO: Confine buffers to certain windows; better relative line number support with goto-line +;;; TODO: remake with lambdas + +;;; Code: + +;;; functions to change the behavior of keymaps + + +;;; set mark variables + +;; TODO make a better system +(defvar joe-mark-0 nil "Mark 0.") +(defvar joe-mark-1 nil "Mark 1.") +(defvar joe-mark-2 nil "Mark 2.") +(defvar joe-mark-3 nil "Mark 3.") +(defvar joe-mark-4 nil "Mark 4.") +(defvar joe-mark-5 nil "Mark 5.") +(defvar joe-mark-6 nil "Mark 6.") +(defvar joe-mark-7 nil "Mark 7.") +(defvar joe-mark-8 nil "Mark 8.") +(defvar joe-mark-9 nil "Mark 9.") + +(make-variable-buffer-local 'joe-mark-0) +(make-variable-buffer-local 'joe-mark-1) +(make-variable-buffer-local 'joe-mark-2) +(make-variable-buffer-local 'joe-mark-3) +(make-variable-buffer-local 'joe-mark-4) +(make-variable-buffer-local 'joe-mark-5) +(make-variable-buffer-local 'joe-mark-6) +(make-variable-buffer-local 'joe-mark-7) +(make-variable-buffer-local 'joe-mark-8) +(make-variable-buffer-local 'joe-mark-9) + +;;; joestar-mode functions: + +;; set mark funcs: + +;; TODO function does not work +(defun joe/setmark (sid) + "Set the mark SID manually." + (interactive "sSet Mark (0-9): ") + (let (id (string-to-number sid)) + (cond ((eq id 0) (joe/set-mark-0)) + ((eq id 1) (joe/set-mark-1))))) + +(defun joe/set-mark-0 () + "Set the 0th mark." + (interactive) + (setq joe-mark-0 (point-marker)) + (message "Mark 0 set.")) + +(defun joe/set-mark-1 () + "Set the 1st mark." + (interactive) + (setq joe-mark-1 (point-marker)) + (message "Mark 1 set.")) + + +(defun joe/help-me () + "Prints the help documentation in a separate buffer.") + +;;; TODO fix bug where ivy does not display the full file-name +(defun joe/save-file (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)) + +(defun joe/delete-window () + "Delete current window, exit Emacs if only one window." + (interactive) + (if (= 1 (length (window-list))) + (if (buffer-modified-p) + (if (y-or-n-p "Lose changes to this file? ") + (kill-emacs) + nil) + (kill-emacs)) + (delete-window))) + +(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." + (interactive) + (scroll-down 1)) + +(defun joe/scroll-up () + "Scroll down while preserving the cursor point." + (interactive) + (scroll-up 1)) + +(defun joe/goto-abosolute-line (num) + "Goto absolute line number NUM." + (interactive "sGo to line: ") + (forward-line (* -1 (count-lines 1 (point)))) + (forward-line (1- (string-to-number num)))) + +(defun joe/enlarge-window () + "Enlarge the current window.") + +(defun joe/shrink-window () + "Shrink the current window.") + +(defun joe/next-window () + "Move to the next window." + (interactive) + (other-window 1)) + +(defun joe/previous-window () + "Move to the previous window." + (interactive) + (other-window -1)) + +(defun joe/backward-delete-char () + "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))))) + +(defun joe/control-select-right () + "Control selection to right char." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'forward-char)) + + +(defun joe/control-select-left () + "Control selection to left char." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'backward-char)) + +(defun joe/control-select-up () + "Control selection up one line." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'previous-line)) + +(defun joe/control-select-down () + "Control selection down one line." + (interactive) + (setq this-command-keys-shift-translated t) + (call-interactively 'next-line)) + +(defun joe/kill-prev-word () + "Kill the word to the left of the cursor." + (interactive) + (call-interactively 'backward-word) + (call-interactively 'kill-word)) + +;;; setting joestar's wordstar-like keybindings +(defvar joestar-mode-map + (let ((joe-map (make-sparse-keymap))) + + ;; 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) + (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 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) + (define-key joe-map (kbd "C-o") 'joe/kill-prev-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) + (define-key joe-map (kbd "C-k b") 'joe/begin-selection) + (define-key joe-map (kbd "C-k C-b") 'joe/begin-selection) + (define-key joe-map (kbd "<C-right>") 'joe/control-select-right) + (define-key joe-map (kbd "<C-left>") 'joe/control-select-left) + (define-key joe-map (kbd "<C-up>") 'joe/control-select-up) + (define-key joe-map (kbd "<C-down>") 'joe/control-select-down) + (define-key joe-map (kbd "C-y") 'delete-region) + (define-key joe-map (kbd "C-m") 'delete-region) + + + ;; editor manipulation + (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 n") 'joe/next-window) + (define-key joe-map (kbd "C-k C-n") 'joe/next-window) + (define-key joe-map (kbd "C-k C-p") 'joe/previous-window) + (define-key joe-map (kbd "C-k p") (kbd "C-k C-p")) + (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 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) + + ;; spellcheck TODO + 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." + :init-value nil + :lighter " joe" + nil + + ;;; 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-joestar-mode joestar-mode + (lambda () (joestar-mode 1))) + +(provide 'joestar) +;;; joestar.el ends here