commit 0a47b401de60a3dcb717e3fd106d225631c616c7
parent c4216896c37acc0e895db1d34188115dff5f1d3b
Author: Ryan Jeffrey <pwishie@gmail.com>
Date: Fri, 11 Oct 2019 15:35:29 -0700
name
Diffstat:
M | README.org | | | 15 | +++++++++------ |
M | joestar.el | | | 107 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- |
2 files changed, 83 insertions(+), 39 deletions(-)
diff --git a/README.org b/README.org
@@ -1,7 +1,7 @@
* Joestar
Joestar is a minor mode for emacs that seeks to emulate [[https://github.com/jhallen/joe-editor][Joe's Own Editor]], a wordstar-like terminal text editor.
* Configuration
-** Undo-tree
+* Undo-tree
Joestar uses undo-tree to get a more accurate undoing experience to Joe.
However, a few of undo-tree's default keybindings conflict with Joestar's.
To fix this problem add this to your config /(before Joestar is loaded)/.
@@ -34,12 +34,12 @@ To fix this problem add this to your config /(before Joestar is loaded)/.
If you are using use-package this would be done with *:init*.
* Known Issues
-The keyboard shortcut to insert a shell command currently does not work properly.
-In order to insert shell output call the joe-run function directly.
+The find feature is supposed to store the last task of the user and set it to the default next time find is called.
+This works the first time a find command is repeated, but not subsequent times.
* Basic Tutorial
For a more detailed tutorial, see tutorial.org; or *C-k C-h* in Emacs for help.
-** A note on Control key sequences
+** Control key sequences
Because of the way that Joe works *C-k C-e* is the same as *C-k e*.
However, Emacs considers these to be different key sequences.
In joestar mode, just like in joe, these are the same sequence.
@@ -75,7 +75,10 @@ Down one screen.
Saving
- *C-k C-f*
Joe's find function.
-* TODO Goals for Next Major Version
+* TODO Goals for Major Version
+
- [X] Find function
- [ ] Regions
-- [ ] Keyboard Macros
+- [ ] Keyboard Macro
+- [ ] Cancel features
+- [ ] Help buffer
diff --git a/joestar.el b/joestar.el
@@ -5,7 +5,7 @@
;;; Author: Ryan Jeffrey <pwishie@gmail.com>
;;; Created: 2019-05-12
;;; Keywords: joe wordstar emulation editor
-;;; Version: 0.2
+;;; Version: 0.5
;;; Package-Requires: ((emacs "24.2") (undo-tree "0.8.5"))
;;; URL: https://github.com/Ma11ock/joestar
@@ -33,10 +33,7 @@
;;; Code:
-;;; TODO: Confine buffers to certain windows; better relative line number support with goto-line
-;;; TODO: remake with lambdas
-
-;;; TODO have a cons cell of a mark and its id?
+;;; TODO: better relative line number support with goto-line
;;; set mark variables
(defvar joe-mark-0 nil "Mark 0.")
@@ -132,7 +129,7 @@
(defalias 'joe-nbuf 'next-buffer)
(defalias 'joe-pbuf 'previous-buffer)
(defalias 'joe-reload 'revert-buffer)
-(defalias 'joe-tw0 'delete-window) ; TODO probably should implement a function
+(defalias 'joe-tw0 'delete-window)
(defalias 'joe-tw1 'delete-other-windows)
(defalias 'joe-paragraph 'fill-paragraph)
(defalias 'joe-isrch 'isearch-forward)
@@ -148,9 +145,30 @@
(defalias 'joe-dellin 'kill-whole-line)
(defalias 'joe-delw 'kill-word)
(defalias 'joe-exsave 'save-buffers-kill-emacs)
+(defalias 'joe-querysave 'save-some-buffers)
+(defalias 'joe-killjoe 'kill-emacs)
+(defalias 'joe-nextword 'forward-word)
+(defalias 'joe-prevword 'backward-word)
+(defalias 'joe-tos 'beginning-of-buffer)
+(defalias 'joe-bol 'beginning-of-line-text)
+(defalias 'joe-uparw 'previous-line)
+(defalias 'joe-eol 'end-of-line)
+(defalias 'joe-home 'joe-bol)
+(defalias 'joe-bof 'joe-tos)
+(defalias 'joe-bos 'end-of-buffer)
+(defalias 'joe-dnarw 'next-line)
+(defalias 'joe-rtarw 'forward-char)
+(defalias 'joe-ltarw 'backward-char)
+(defalias 'joe-cd 'cd)
+(defalias 'joe-savenow 'save-buffer)
+
+(defun joe-byte (byte)
+ "Go to byte BYTE."
+ (interactive "nGo to byte: ")
+ (goto-char byte))
(defun joe-lose ()
- "Kill buffer. Replace buffer with scratch buffer."
+ "Kill buffer and replace it with a scratch buffer."
(interactive)
(let ((cur-buffer-name (buffer-name)))
(kill-buffer)
@@ -158,9 +176,23 @@
nil
(joe-scratch "Unnamed"))))
+(defun joe-col (col)
+ "Go to column COL."
+ (interactive "nGo to column: ")
+ (move-to-column col t))
+
(defun joe-cancel ()
"Escape."
- (interactive))
+ (interactive)
+ (keyboard-escape-quit)
+ (if (= (count-windows) 1)
+ (when (y-or-n-p "Kill Emacs? ")
+ (joe-killjoe))
+ (joe-tw0)))
+
+(defun joe-debug ()
+ (interactive)
+ (message "%d" (count-windows)))
;; TODO
(defun joe-arg (num)
@@ -178,23 +210,24 @@
(interactive "sInsert: ")
(insert str))
-(defun joe-name()
+; TODO bug where this does not work with scratch files (maybe because it doesn't have a default-dir?)
+(defun joe-name ()
"Insert current file name into the buffer."
(interactive)
(insert (file-relative-name (buffer-file-name) default-directory)))
; TODO get the locale
-(defun joe-language()
+(defun joe-language ()
"Insert the language in the current buffer."
(interactive)
(insert current-language-environment))
-(defun joe-charset()
+(defun joe-charset ()
"Insert the language in the current buffer."
(interactive)
(insert current-language-environment))
-(defun joe-msg(str)
+(defun joe-msg (str)
"Display a message STR."
(interactive "sMessage: ")
(message "%s" str))
@@ -269,10 +302,16 @@
(interactive)
(call-interactively 'undo-tree-undo))
-; TODO
(defun joe-reloadall ()
- "Revert all unmodified buffers."
- (interactive))
+ "Revert all buffers."
+ (interactive)
+ (let ((num-refreshed 0))
+ (dolist (buf (buffer-list))
+ (with-current-buffer buf
+ (when (and (buffer-file-name) (file-exists-p (buffer-file-name)) (not (buffer-modified-p)))
+ (revert-buffer t t t)
+ (setq num-refreshed (+ num-refreshed 1))))
+ (message "%d files reloaded." num-refreshed))))
(defun joe-scratch (name)
"Push a scratch buffer NAME into current window."
@@ -456,6 +495,7 @@
(progn
(push-mark)
(goto-char joe-lastmark))))
+
(defun joe-goprevmark ()
"Move point to next mark."
(interactive)
@@ -498,9 +538,13 @@
(if (use-region-p)
(call-interactively 'joe-filter-command)
(progn
- (mark-whole-buffer)
+ (call-interactively 'mark-whole-buffer)
(call-interactively 'joe-filter-command))))
+(defun joe-delbol ()
+ "Delete to the beginning of the line."
+ (kill-line 0))
+
;;; setting joestar's wordstar-like keybindings
(defvar joestar-mode-map
(let ((joe-map (make-sparse-keymap)))
@@ -535,16 +579,16 @@
;; 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-z") 'joe-prevword)
+ (define-key joe-map (kbd "C-x") 'joe-nextword)
+ (define-key joe-map (kbd "C-k C-u") 'joe-tos)
(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 C-v") 'joe-bos)
(define-key joe-map (kbd "C-k v") (kbd "C-k C-v"))
(define-key joe-map (kbd "C-u") 'joe-pgup)
(define-key joe-map (kbd "C-v") 'joe-pgdn)
- (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-e") 'joe-eol)
+ (define-key joe-map (kbd "C-a") 'joe-bol)
(define-key joe-map (kbd "C-k C-l") 'joe-line)
(define-key joe-map (kbd "C-k l") (kbd "C-k C-l"))
(define-key joe-map (kbd "C-g") 'joe-todo-func) ; TODO
@@ -566,16 +610,14 @@
(define-key joe-map (kbd "C-y") 'joe-dellin)
(define-key joe-map (kbd "C-w") 'joe-delw)
(define-key joe-map (kbd "C-o") 'joe-backw)
- (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 "<escape> o") 'joe-delbol)
(define-key joe-map (kbd "C-^") 'joe-redo)
(define-key joe-map (kbd "C-_") 'joe-undo)
;; exit
(define-key joe-map (kbd "C-k C-x") 'joe-exsave)
(define-key joe-map (kbd "C-k x") (kbd "C-k C-x"))
- (define-key joe-map (kbd "C-c") 'joe-cancel)
+ (define-key joe-map (kbd "C-g") 'joe-cancel)
(define-key joe-map (kbd "C-k C-q") 'kill-emacs)
(define-key joe-map (kbd "C-k q") (kbd "C-k C-q"))
@@ -588,7 +630,6 @@
(define-key joe-map (kbd "C-k d") (kbd "C-k C-d"))
(define-key joe-map (kbd "C-k C-`") 'revert-buffer)
(define-key joe-map (kbd "C-k `") (kbd "C-k C-`"))
- (define-key joe-map (kbd "C-c") 'joe-tw0)
;; search
(define-key joe-map (kbd "C-k C-f") 'joe-ffirst)
@@ -638,15 +679,12 @@
"Show one / All."
(interactive))) ; TODO, cuz I don't even know what it does in joe
(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)
-
;; shell TODO
- ;; in joe, the cursor does not change when the comand is appended.
+ ;; in joe, the cursor does not change when the command is appended.
(define-key joe-map (kbd "<escape> !") 'joe-run)
- (define-key joe-map (kbd "C-k C-z") 'suspend-emacs)
+ (define-key joe-map (kbd "C-k C-z") 'joe-shell)
(define-key joe-map (kbd "C-k z") (kbd "C-k C-z"))
;; bookmark
@@ -670,7 +708,6 @@
(define-key joe-map (kbd "<escape> u") 'joe-nbuf)
(define-key joe-map (kbd "<escape> v") 'joe-pbuf)
-
joe-map)
"The joestar-mode keymaps.")
@@ -694,6 +731,10 @@
;; keep cursor position while scrolling
(setq scroll-preserve-screen-position 'always)
(setq scroll-error-top-bottom t)
+
+ (save-place-mode t)
+
+ ; maybe?
(undo-tree-mode t))