最近使ってるC-a

xyzzyについてはほぼ忘れかけていたが、別に何もしてなかったというわけでもないので、いろいろ改変してるかもしれないところとかを適当に。

■前にやっていたC-a改造版
 割りと需要があったので段落の移動にもC-aで対応してみたもの。段落移動するために「コメントアウトへ移動」と、「インデントへ移動」が犠牲になっているが、実際そういうのは別のキーでも対応しているのでまあいいかなと。今のも一応コメントアウトに対応してた部分も残しているけど、行頭からインデントへ移動するのはなくなっている。

(in-package "editor")

;my-C-a version 0.04
(defun virtual-C-a()
  "表示行頭へ移動"
  (interactive)
  (let ((cp (point))                              ; Current-Point
        (vbol (and (goto-virtual-bol) (point)))   ; Virtual-BOL
        (ip (and (back-to-indentation) (point)))  ; Indent-Point
        (bol (and (goto-bol) (point))))           ; Beging-Of-Line
    (cond
     ((= cp bol) (backward-paragraph))
     ((= cp ip) (goto-char bol))
     ((= cp vbol) (if (> ip vbol)(goto-char bol)(goto-char ip)))
     ((> cp vbol ip) (goto-char vbol))
     ((> cp ip vbol) (goto-char ip))
     )))

;my-C-e version 0.03
(defun virtual-C-e()
  "表示行末に移動"
  (interactive "p")
  (let ((cp (point))                           ; Current Point
        (veol (and (goto-virtual-eol) (point))); Virtual-EOL
        (eol (and (goto-eol) (point))))        ; EOL
    (cond
     ((= cp eol)
      (if (goto-beginning-of-comment)
        (forward-paragraph)))
     ((= cp veol)(goto-char eol))
     ((< cp veol eol)(goto-char veol))
     (t  (goto-eol))
     )))

(defun goto-beginning-of-comment()
  "commentの開始位置に移動"
  (interactive)
  (unless comment-start
    (message "No comment syntax defined")
    (return-from goto-beginning-of-comment t))
  (let (match-pos
        (cp (point)))
    (goto-bol)
    (if comment-start-skip-function
        (setq match-pos (funcall comment-start-skip-function))
      (let ((eol (save-excursion (goto-eol) (point))))
        (while (and (scan-buffer comment-start-skip
                                 :regexp t :tail t :limit eol)
                    (or (eq (parse-point-syntax (point)) :string)
                        (progn
                          (setq match-pos (point))
                          (save-restriction
                            (narrow-to-region (match-beginning 0) (point))
                            (skip-syntax-spec-backward " ")
                            (skip-syntax-spec-backward "^ "))
                          nil))))
        (unless match-pos
          (goto-char cp))
        ))
    ))

;keymap
(global-set-key #\C-a 'virtual-C-a)
(global-set-key #\C-e 'virtual-C-e)