From 06ade45ac52d5597dc04655f4668b02f9b3ebdf2 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Mon, 8 Nov 2010 05:44:18 +0100 Subject: geiser-squarify to toggle between () and [] --- elisp/geiser-mode.el | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'elisp/geiser-mode.el') diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index e9e5563..3575474 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -176,6 +176,24 @@ With prefix, try to enter the current's buffer module." (goto-char (point-max)) (pop-to-buffer b))) +(defun geiser-squarify () + "Toggle between () and [] for current form." + (interactive) + (let ((pared (and (boundp 'paredit-mode) paredit-mode))) + (when pared (paredit-mode -1)) + (unwind-protect + (save-excursion + (unless (looking-at-p "\\s(") (backward-up-list)) + (let ((p (point)) + (round (looking-at-p "("))) + (forward-sexp) + (backward-delete-char 1) + (insert (if round "]" ")")) + (goto-char p) + (delete-char 1) + (insert (if round "[" "(")))) + (when pared (paredit-mode 1))))) + ;;; Geiser mode: @@ -258,6 +276,7 @@ interacting with the Geiser REPL is at your disposal. ("Complete module name" ((kbd "M-`") (kbd "C-.")) geiser-completion--complete-module) ("Edit module" ("\C-c\C-e\C-m" "\C-c\C-em") geiser-edit-module) + ("Toggle ()/[]" ("\C-c\C-e\C-[" "\C-c\C-e[") geiser-squarify) -- ("Callers" ((kbd "C-c <")) geiser-xref-callers :enable (and (geiser-eval--supported-p 'callers) (symbol-at-point))) -- cgit v1.2.3 From a3743f25313498e96563e3622422bc62d9b80178 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Mon, 8 Nov 2010 06:07:12 +0100 Subject: squarify again, now with numeric prefix --- doc/parens.texi | 4 +++- elisp/geiser-mode.el | 35 +++++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 13 deletions(-) (limited to 'elisp/geiser-mode.el') diff --git a/doc/parens.texi b/doc/parens.texi index 9839892..101ece5 100644 --- a/doc/parens.texi +++ b/doc/parens.texi @@ -484,7 +484,9 @@ backtick). There's also this little command, @code{geiser-squarify}, which will toggle the delimiters of the innermost list around point between round -and square brackets. It is bound to @key{C-c C-e [}. +and square brackets. It is bound to @kbd{C-c C-e [}. With numeric a +prefix (as in, say @kbd{M-2 C-c C-e [}), it will perform that many +toggles, forward for positive values and backward for negative ones. @c Local Variables: @c mode: texinfo diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 3575474..1645ba2 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -176,22 +176,33 @@ With prefix, try to enter the current's buffer module." (goto-char (point-max)) (pop-to-buffer b))) -(defun geiser-squarify () - "Toggle between () and [] for current form." - (interactive) - (let ((pared (and (boundp 'paredit-mode) paredit-mode))) +(defun geiser-squarify (n) + "Toggle between () and [] for current form. +With numeric prefix, perform that many toggles, forward for +positive values and backward for negative." + (interactive "p") + (let ((pared (and (boundp 'paredit-mode) paredit-mode)) + (fwd (> n 0)) + (steps (abs n))) (when pared (paredit-mode -1)) (unwind-protect (save-excursion (unless (looking-at-p "\\s(") (backward-up-list)) - (let ((p (point)) - (round (looking-at-p "("))) - (forward-sexp) - (backward-delete-char 1) - (insert (if round "]" ")")) - (goto-char p) - (delete-char 1) - (insert (if round "[" "(")))) + (while (> steps 0) + (let ((p (point)) + (round (looking-at-p "("))) + (forward-sexp) + (backward-delete-char 1) + (insert (if round "]" ")")) + (goto-char p) + (delete-char 1) + (insert (if round "[" "(")) + (setq steps (1- steps)) + (backward-char) + (condition-case nil + (progn (when fwd (forward-sexp 2)) + (backward-sexp)) + (error (setq steps 0)))))) (when pared (paredit-mode 1))))) -- cgit v1.2.3 From 6cf1ce0e924fc231b1f51a3ce4eb23e35e9eaf25 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 9 Nov 2010 02:38:49 +0100 Subject: Elisp buggettes and warnings --- elisp/geiser-connection.el | 2 +- elisp/geiser-mode.el | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'elisp/geiser-mode.el') diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 5305cd8..f146563 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -112,7 +112,7 @@ By default, Geiser uses the prompt regexp.") (cdr (assoc :reply c))) (defsubst geiser-con--connection-completed (c r) - (geiser-con--request-deactivate req) + (geiser-con--request-deactivate r) (puthash (geiser-con--request-id r) r (cdr (assoc :completed c)))) (defun geiser-con--connection-clean-current-request (c) diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 1645ba2..719176d 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -184,7 +184,7 @@ positive values and backward for negative." (let ((pared (and (boundp 'paredit-mode) paredit-mode)) (fwd (> n 0)) (steps (abs n))) - (when pared (paredit-mode -1)) + (when (and pared (fboundp 'paredit-mode)) (paredit-mode -1)) (unwind-protect (save-excursion (unless (looking-at-p "\\s(") (backward-up-list)) @@ -203,7 +203,7 @@ positive values and backward for negative." (progn (when fwd (forward-sexp 2)) (backward-sexp)) (error (setq steps 0)))))) - (when pared (paredit-mode 1))))) + (when (and pared (fboundp 'paredit-mode)) (paredit-mode 1))))) ;;; Geiser mode: -- cgit v1.2.3