Skip to content

Commit

Permalink
Add additional keybinding for other platforms
Browse files Browse the repository at this point in the history
This modifies the define-shortcut macro to enable specifying multiple
shortcuts for commands, and then adds other versions of key bindings
that work on mac without command key specified to be working as meta.
  • Loading branch information
pitkali committed Dec 31, 2013
1 parent e8577a4 commit 7e39afa
Showing 1 changed file with 28 additions and 16 deletions.
44 changes: 28 additions & 16 deletions paredit.rkt
Expand Up @@ -23,14 +23,17 @@
[(_ key (name . args) body* ...)
(define-shortcut key name
(λ args body* ...))]
[(_ key name proc)
[(_ (key ...) name proc)
(begin
(define (name ed evt)
(when (is-a? ed racket:text<%>)
(send ed begin-edit-sequence)
(proc ed evt)
(send ed end-edit-sequence)))
(keybinding key name))]))
(for ([k (in-list (list key ...))])
(keybinding k name)))]
[(_ key name proc)
(define-shortcut (key) name proc)]))

;;; Movement
(define (get-my-forward-sexp ed sp)
Expand All @@ -42,7 +45,7 @@
(send ed get-forward-sexp pos))]
[else #f]))

(define-shortcut "c:m:f" (paredit-forward-sexp ed evt)
(define-shortcut ("c:m:f" "esc;c:f") (paredit-forward-sexp ed evt)
(define sp (send ed get-start-position))
(let*-when ([dest (get-my-forward-sexp ed sp)])
(send ed set-position dest)))
Expand All @@ -53,12 +56,12 @@
=> (λ (pos) pos)]
[else (send ed find-up-sexp sp)]))

(define-shortcut "c:m:b" (paredit-backward-sexp ed evt)
(define-shortcut ("c:m:b" "esc;c:b") (paredit-backward-sexp ed evt)
(define sp (send ed get-start-position))
(let*-when ([dest (get-my-backward-sexp ed sp)])
(send ed set-position dest)))

(define-shortcut "m:right" (paredit-forward-term ed evt)
(define-shortcut ("m:right" "esc;right") (paredit-forward-term ed evt)
(define sp (send ed get-start-position))
(define dests
(filter (λ (x) x)
Expand All @@ -74,7 +77,7 @@
#f
(last-sexp ed down))))

(define-shortcut "m:left" (paredit-backward-term ed evt)
(define-shortcut ("m:left" "esc;left") (paredit-backward-term ed evt)
(define sp (send ed get-start-position))
(define dests
(filter (λ (x) x)
Expand All @@ -88,7 +91,7 @@
(send ed get-start-position)))

;;; Depth-Changing
(define-shortcut "m:s" (paredit-splice-sexp ed evt [pos #f])
(define-shortcut ("m:s" "esc;s") (paredit-splice-sexp ed evt [pos #f])
(when (not pos)
(set! pos (send ed get-start-position)))
(let*-when ([begin-outer (send ed find-up-sexp pos)]
Expand All @@ -107,7 +110,7 @@
(define (sexp-start ed)
(start-of-sexp ed (send ed get-start-position)))

(define-shortcut "m:(" (paredit-wrap-round ed evt)
(define-shortcut ("m:(" "esc;(") (paredit-wrap-round ed evt)
(send ed insert "(")
(send ed forward-sexp (send ed get-start-position))
(send ed insert ")"))
Expand All @@ -133,27 +136,27 @@
(define (not-toplevel? ed pos)
(send ed find-up-sexp pos))

(define-shortcut "m:up" (paredit-splice-sexp-killing-backward ed evt)
(define-shortcut ("m:up" "esc;up") (paredit-splice-sexp-killing-backward ed evt)
(define sp (sexp-start ed))
(when (not-toplevel? ed sp)
(kill-sexps-backward ed sp)
(paredit-splice-sexp ed evt)))

(define-shortcut "m:down" (paredit-splice-sexp-killing-forward ed evt)
(define-shortcut ("m:down" "esc;down") (paredit-splice-sexp-killing-forward ed evt)
(define sp (sexp-start ed))
(when (not-toplevel? ed sp)
(kill-sexps-forward ed sp)
(paredit-splice-sexp ed evt)))

(define-shortcut "m:r" (paredit-raise-sexp ed evt)
(define-shortcut ("m:r" "esc;r") (paredit-raise-sexp ed evt)
(define sp (sexp-start ed))
(when (not-toplevel? ed sp)
(let*-when ([fw (send ed get-forward-sexp sp)])
(kill-sexps-forward ed fw))
(kill-sexps-backward ed sp)
(paredit-splice-sexp ed evt)))

(define-shortcut "m:?" (paredit-convolute-sexp ed evt)
(define-shortcut ("m:?" "esc;?") (paredit-convolute-sexp ed evt)
(define sp (sexp-start ed))
(let*-when ([r1 (send ed find-up-sexp sp)]
[fw (send ed get-forward-sexp r1)]
Expand All @@ -170,7 +173,11 @@
;;;Barfage & Slurpage
;;; only process reversible cases

(define-shortcut "c:right" (paredit-slurp-forward ed evt)
(define-shortcut (;; Traditional Emacs bindings
"c:right"
"c:)"
;; Extra mac-friendly binding
"c:]") (paredit-slurp-forward ed evt)
(define sp (send ed get-start-position))
(let*-when ([up (send ed find-up-sexp sp)]
[end (send ed get-forward-sexp up)]
Expand All @@ -179,15 +186,20 @@
(send ed insert paren fw)
(send ed delete end)))

(define-shortcut "c:m:left" (paredit-slurp-backward ed evt)
(define-shortcut (;; Traditional Emacs bindings
"c:m:left"
"esc;c:left"
"c:("
;; Extra mac-friendly binding
"c:[") (paredit-slurp-backward ed evt)
(define sp (send ed get-start-position))
(let*-when ([start (send ed find-up-sexp sp)]
[bw (send ed get-backward-sexp start)]
[paren (send ed get-text start (+ start 1))])
(send ed delete (+ start 1))
(send ed insert paren bw)))

(define-shortcut "c:left" (paredit-barf-forward ed evt)
(define-shortcut ("c:left" "c:}") (paredit-barf-forward ed evt)
(define sp (send ed get-start-position))
(let*-when ([up (send ed find-up-sexp sp)]
[fw (send ed get-forward-sexp up)]
Expand All @@ -201,7 +213,7 @@
(send ed insert paren bw)
(send ed set-position sp)))

(define-shortcut "c:m:right" (paredit-barf-backward ed evt)
(define-shortcut ("c:m:right" "esc;c:right" "c:{") (paredit-barf-backward ed evt)
(define sp (send ed get-start-position))
(let*-when ([up (send ed find-up-sexp sp)]
[paren (send ed get-text up (+ up 1))]
Expand Down

0 comments on commit 7e39afa

Please sign in to comment.