Tag: xyzzy memo

お品書き

Flush lines *

多分。

(defun flush-lines (regexp &optional (start (point)) (end (point-max)))
  "正規表現にマッチする行を削除"
  (interactive "*sFlush lines: ")
  (when (> start end)
    (rotatef start end))
  (save-excursion
    (goto-char end)
    (while (scan-buffer regexp :regexp t
                        :limit start :reverse t)
      (delete-region (progn (goto-bol) (point))
                     (progn (goto-eol) (forward-char) (point))))))
(defun flush-lines-buffer (regexp &optional (start (point-min)) (end (point-max)))
  "正規表現にマッチする行を削除(バッファ全体)"
  (interactive "*sFlush lines (buffer): ")
  (flush-lines regexp start end))

Keep lines *

多分。

(defun keep-lines (regexp &optional (start (point)) (end (point-max)))
  "正規表現にマッチしない行を削除"
  (interactive "*sKeep lines: ")
  (when (> start end)
    (rotatef start end))
  (save-excursion
    (goto-char end)
    (while (cond ((<= (point) start)
                  nil)
                 ((scan-buffer regexp :regexp t :reverse t
                               :limit (save-excursion
                                        (goto-bol) (max (point) start))))
                 (t
                  (delete-region (progn (goto-bol) (point))
                                 (progn (goto-eol) (forward-char) (point)))))
      (if (backward-line) (goto-eol) (goto-bol)))))
(defun keep-lines-buffer (regexp &optional (start (point-min)) (end (point-max)))
  "正規表現にマッチしない行を削除(バッファ全体)"
  (interactive "*sKeep lines (buffer): ")
  (keep-lines regexp start end))

unicode-unescape-region *

GreaseMonkeyスクリプトに\u****なコメントがあっても読めないので。

(defun unicode-unescape-region (&optional (from (point)) (to (point-max)))
  (interactive "*")
  (save-excursion
    (goto-char from)
    (while (scan-buffer "\\\\u\\([A-Za-z0-9_]\\{4\\}\\)" :regexp t :limit to)
      (let ((str (match-string 1)))
        (delete-region (match-beginning 0) (match-end 0))
        (insert (unicode-char (parse-integer str :radix 16)))))))

開き括弧入力時に閉じ括弧を半手動入力 *

script/grouping-symbol-mode

kill-or-copy-whole-line *

読み取り専用ならカットでなくコピー。

*kill-whole-line*がnon-nilかつ行頭なら改行まで削除。

(defvar *kill-whole-line* nil)
(defun kill-or-copy-whole-line (&optional lines)
  (interactive "p")
  (let ((fn (if buffer-read-only 'copy-region-as-kill 'kill-region)))
    (cond ((and *kill-whole-line* (bolp))
           (let ((lines (if (or (null lines) (<= lines 1))
                            0 (- arg 1))))
             (funcall fn (point) (save-excursion
                                   (forward-line lines)
                                   (goto-eol)
                                   (forward-char)
                                   (point)))))
          (t
           (funcall fn (point)
                    (save-excursion
                      (cond ((null lines)
                             (if (eolp)
                                 (forward-line 1)
                               (goto-eol)))
                            ((zerop lines)
                             (if (bolp)
                                 (forward-line -1)
                               (goto-bol)))
                            (t
                             (forward-line lines)))
                      (point)))))
    (and (interactive-p)
         (not *executing-macro*)
         (eq 'copy-region-as-kill fn)
         (message "Line copied"))))
(global-set-key '#\C-k 'kill-or-copy-whole-line)

対応する括弧に飛ぶ (%) *

paren.lに依存しない。たまに%が入力できないのでそーゆーときはC-q %

(defun goto-matched-parenthesis-or-insert-self ()
  (interactive)
  (or (goto-matched-parenthesis)
      (call-interactively 'self-insert-command)))
(global-set-key #\% 'goto-matched-parenthesis-or-insert-self)

辞書をpopup-stringで *

(macrolet ((create (func)
             `(defun ,(intern (concat (string func) "-by-popup")) ()
                (interactive)
                (let (res)
                  (save-window-excursion
                    (funcall ',func)
                    (set-buffer "*dictionary*")
                    (setf res (buffer-substring (point-min) (point-max)))
                    (kill-buffer "*dictionary*")
                    (popup-string res (point)))))))
  (global-set-key '(#\C-c #\e) (create lookup-e2j-dictionary-selection))
  (global-set-key '(#\C-c #\i) (create lookup-idiom-dictionary-selection))
  (global-set-key '(#\C-c #\j) (create lookup-j2e-dictionary-selection))
  (global-set-key '(#\C-c #\r) (create lookup-reading-dictionary-selection)))

C++スタイルでコメントアウトしている時はインデントしないindent-region *

コメントまでインデントするとコメントをはずすときに面倒なので。
関数上書き注意。

(defun indent-region (from to)
  (interactive "*r")
  (flet ((head-is-comment ()
           (save-excursion
             (goto-bol)
             (and (syntax-end-c++-comment-p  #\LFD)
                  (syntax-c++-comment-p (following-char))
                  (forward-char)
                  (syntax-c++-comment-p (following-char))))))
    (if (> from to)
        (rotatef from to))
    (save-excursion
      (save-restriction
        (narrow-to-region (point-min) to)
        (goto-char from)
        (goto-eol)
        (delete-trailing-spaces)
        (while (forward-line 1)
          (goto-eol)
          (delete-trailing-spaces)
          (unless (or (bolp) (head-is-comment))
            (funcall mode-specific-indent-command)))))))

コメント *

最新の10件を表示しています。 コメントページを参照

  • delete-text-attributesはかなり重い処理なので*paren-status*がtの時のみ実行した方がいい(restore-text-attributesも)ような気がします。 -- 2007-02-16 (金) 12:59:06
  • そこはオリジナル(paren)側のコードそのままなので特に気にしてなかったのですが確かにそうかもしれませんね。多分ハイライトしてるときにturn-off-parenされたらずっと消されないのでtoggle-parenにもdelete-text-attributes入れたほうが良い感じですね。というかこういうのはパッチとして投げたほうが良いような気もするのですが、paren.lはいくつもあるので(ここここここほかにもあるかも。。。)どこに投げればいいのかわからないというか、どうすればいいのか全くわかりません>< な状態です・・・。 -- シロ? 2007-02-16 (金) 17:06:49
  • こちら(http://xyzzy.s53.xrea.com/wiki/index.php?patch)でどうでしょうか。 -- 2007-02-16 (金) 19:47:23
  • その前にparen.lはGPLライセンスなので、MAEDA Manabuさん(NetInstallerでparentagを公開されてる方)のように、(作者の方にお手をわずらわせない為に?)改変版は自分で配布した方が良いのでしょうか?MAEDA Manabuさんがどういう経緯でNetInstallerで公開されているのかは分かりませんが・・・。それとも、KITAさんが公開を続けているということはxyzzy wikiに「よかったら取り込んでください」くらいのスタンスでパッチを投げた方がいいのでしょうか? -- シロ? 2007-02-16 (金) 20:12:57
  • どちらがいいとはいえませんが、GPLに従えば自由に公開できるはずです。ライセンスの文言・著作権の表示と、ソースコードを同梱(ネット上に置いてもいいようです)すれば良いのではないかと思います。 -- 2007-02-16 (金) 21:03:15
  • 別ファイルにして公開することにしました。助言ありがとうございました。 -- シロ? 2007-02-19 (月) 21:12:27
  • 0b88e916dec575f7a46706edea94d316 -- John Doe? 2008-01-28 (月) 00:57:50
  • 24e8084f21032a152837653750d61bcb -- John Doe? 2008-01-29 (火) 04:12:00
  • Thninikg like that shows an expert at work -- Adetola? 2015-12-12 (土) 07:48:51
  • HHIS I should have thgouht of that! -- Turdukulova? 2015-12-12 (土) 09:37:24
お名前:

トップ   編集 凍結 差分 BACKUP 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-13 (金) 03:49:59 (3548d)