joestar

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

commit e832826684aa7f394bef165c5ba17e963c944108
parent 5715ce996679b472a5ed2df32481311778ca63ac
Author: Ryan Jeffrey <pwishie@gmail.com>
Date:   Thu, 23 May 2019 17:20:42 -0700

Control selection, change name

Diffstat:
M.gitignore | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
MREADME.md | 10+++++-----
MTODO | 1+
Djoejoe.el | 165-------------------------------------------------------------------------------
Ajoestar.el | 202+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 265 insertions(+), 172 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1 +1,56 @@ -*~- \ No newline at end of file + +# Created by https://www.gitignore.io/api/emacs +# Edit at https://www.gitignore.io/?templates=emacs + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +# End of https://www.gitignore.io/api/emacs+ \ No newline at end of file diff --git a/README.md b/README.md @@ -1,8 +1,8 @@ -# joejoe -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. +# joestar +joestar 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. -The current version of joejoe is incomplete as not all of Joe's features and keybindings have been implemented yet. +The current version of joestar is incomplete as not all of Joe's features and keybindings have been implemented yet. -# joejoe and other modes +# joestar 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. +joestar exists in-part to be an alternative to evil-mode, which is rather invasive to Emacs and makes it difficult to use specific modes that don't support it. Currently, joestar has issues with some modes because of its redefinition of the backspace character, in particular with vterm-mode. These modes unfortunately require that joestar be turned off at this point, but this bug will be fixed in the future. diff --git a/TODO b/TODO @@ -5,3 +5,4 @@ * Documentation * Ability to switch back to original emacs definition of backspace to fix the bug +* F-keys to open terminal and ability to set the default term diff --git a/joejoe.el b/joejoe.el @@ -1,165 +0,0 @@ -;;; 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 -(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/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))))) - - -;;; setting joejoe's wordstar-like keybindings -(defvar joejoe-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) ; 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 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 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 joe-map (kbd "<C-right>") 'highlight) - - ;; spellcheck TODO - joe-map) - "The joejoe-mode keymaps.") - -;;; defining the minor modes - -(define-minor-mode joejoe-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-joejoe-mode joejoe-mode - (lambda () (joejoe-mode 1))) - -(provide 'joejoe) -;;; joejoe.el ends here diff --git a/joestar.el b/joestar.el @@ -0,0 +1,202 @@ +;;; 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 + +;;; 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/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/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) + (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)) + +;;; 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) ; 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) + (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) + + ;; 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") 'other-window) + (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 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-joejoe-mode joestar-mode + (lambda () (joestar-mode 1))) + +(provide 'joestar) +;;; joejoe.el ends here