Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-02-22

kill-backward-up-list

| 23:33 | kill-backward-up-list - わだばLisperになる を含むブックマーク はてなブックマーク - kill-backward-up-list - わだばLisperになる

最近S式を書いていて、

(print (+ 3 3))

というのを、「やっぱりprintはいらないや」と、

(+ 3 3)

のように、外側の式を削除して、内側のものを外に括り出す操作をパっとできるようにしたいと思うようになりました。

それで自作しようかなとも思いましたが、確か以前にどこかでこういう拡張を目にした記憶があったので、改めて探してみたところ、そのものズバリなものをみつけました。

;; the Zmacs function `kill-backward-up-list':
(defun kill-backward-up-list (&optional arg)
  "Kill the form containing the current sexp, leaving the sexp itself.
A prefix argument ARG causes the relevant number of surrounding
forms to be removed."
  (interactive "*p")
  (let ((current-sexp (thing-at-point 'sexp)))
    (if current-sexp
	(save-excursion
	  (backward-up-list arg)
	  (kill-sexp)
	  (insert current-sexp))
	(error "Not at a sexp"))))

Zmacs(LispマシンのEmacs)にはこの機能があったそうで、それの再現だそうです。

ちょっと調べたところでは、LispWorksのエディタ(Zmacs系)にもこの関数はあるみたいですね。

それで、キーバインドですが、とりあえず、C-M-sh-Hに割り当てて暫く様子をみることに。

Zmacsには他にもお宝が眠ってる気がする!

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20080222