Select sjis if the characters are not shown properly. Internet Expolorer is the targetted browser.

kh-insertnum.l

[TopHdngList] [BodyStart] [Top] [End]

CONTENTS   CONTENTS が閉じられているときでも [Contents] ボタンは有効です。
CONTENTS が閉じられているときに、アウトライン見出しのところに表示 されている [Contents] ボタンをクリックすると、 CONTENTS を表示して、 そのアウトライン見出しに対応している CONTENTS の中の見出しにジャンプします。
この後、CONTENTS は表示されたままになります。
CONTENTS 内の各行の最後に示されている数字は、 そのアウトライン見出し行が文書ファイルの何行目にあるかを表しています。

[ContentsTop]
TOP HDNG LIST ALL HEADING LIST NOTE LIST

[Close TOP HEADING LIST]

ALL HEADING LIST ■はアウトライン見出しのタイトル □はそれ以外
19*1 ■概要
56*2 ■require 文
61*3 ■insert-linenum -- 指定した範囲に行番号を付加する
119*4 ■remove-linenum -- 指定された範囲内で、行番号欄を削除する
187*5 ■clip-without-linenum -- 行番号を削除してクリップ
244*6 ■clip-with-linenum -- 行番号を付加してクリップ
317*7 ■provide 文 -- "kh-insertnum" を provide します。

[Close ALL HEADING LIST]

NOTE LIST
Note の一覧: Note はありません。

[Close NOTE LIST]

[Top] [End] [ContentsTop]

[CTop] [Contents][TopHdngList][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

1 概要

ライブラリ kh-insertnum を提供します。このコードの最後に provide 文
(provide "kh-insertnum")

が置かれています。


指定した範囲のプログラムコードに、

する関数を提供します。

例えば、範囲を指定して、M-x insert-linenum とすると、行番号を書く欄の最初の桁位置を問い合わせて来ます。左端から行番号欄が始まるときは、0 にします。行番号を書く欄の最初の位置が 1以上であるとき、その桁位置より左に書いてあるものはそのままにして変えないで、指定された桁位置から、行番号と ": " を挿入します。

指定した範囲につけられる行番号の最大値が 100 未満のときは、行番号は 2桁で表記されます。そうでなければ、行番号は3桁で表記されます。

[2016-04-29] 行番号は常に3桁で表記されるように変更しました。

emacs 版から移植しました。format 関数の引数の指定の仕方が、 emacs とは異なります。

lisp プログラムの中で定義されている *my-home* のようなスペシャル変数は、C:/tools/xyzzy の下 (直下とは限らない) の starvariable.l の中や .xyzzy の中で、例えば

  (setq *my-home* "C:/home/me/")

のように定義するものとします。

この lisp プログラムの中では、参照されているスペシャル変数はありません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

2 require 文

このプログラムには require 文はありません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

3 insert-linenum -- 指定した範囲に行番号を付加する

  1. 行番号を付加する範囲の始めの行の行頭にカーソルを置いて、 C-SPACE を押してマークをセットし、行番号を付加する範囲の終わりの行のつぎの行の行頭にカーソルをおいた状態にします。

  2. M-x insert-linenum とします。

  3. 行番号の挿入位置(行頭は1, 0なら文頭指定): というメッセージを表示され、行番号の挿入位置を指定する数字の入力を求められます。

    普通は、0 と応答してください。

  4. つぎに、
    行番号の初期値: というメッセージが表示され、行番号の初期値を指定する数字の入力を求められます。

    普通は、1 と応答してください。

001: ; * insert-linenum
002: ; 行番号を挿入します。
003: (defun insert-linenum (firstcolumn num)
004:   "Insert numbers in the region"
005:   (interactive 
006:  "n行番号の挿入位置(行頭は1, 0なら文頭指定): ¥nn行番号の初期値: ")
007:   (let 
008:       (startposition endposition startline lastline cline lnum)
009:     ; (setq firstcolumn (+ firstcolumn 1))
010:     (setq startposition (region-beginning))
011:     (setq endposition (region-end))
012:     (setq startline (count-lines 1 startposition))
013:     (setq lastline (count-lines 1 endposition))
014:     (setq lnum (+ (- lastline startline) num 1))
015:     (goto-char startposition)
016:     (if (= firstcolumn 0)
017:         (progn
018:           (back-to-indentation)
019:           (setq firstcolumn (+ (current-column) 1))
020:                 ))
021:     (goto-char startposition)
022:     (setq cline startline)
023:      (while (< cline lastline)
024:        (beginning-of-line)
025:        (if (> firstcolumn 0)
026:            (forward-char (- firstcolumn 1)))
027:        (insert (format nil "~3,'0D: " num))
028:        (setq num (+ num 1))
029:        (setq cline (+ cline 1))
030:        (forward-line 1))
031:     ))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

4 remove-linenum -- 指定された範囲内で、行番号欄を削除する

指定された範囲内で、行番号欄を削除します。

032: ; * remove-linenum
033: ;
034: ; 指定された範囲内で、行番号欄を削除します。
035: ;
036: ;  001: aaaaaaaaaa
037: ;  002: bbbbb
038: ;
039: ; のように書かれている部分を範囲指定して、remove-linenum を実行
040: ; すると
041: ;
042: ;  aaaaaaaaaa
043: ;  bbbbb
044: ;
045: ; のように変更します。
046: ; 
047: ; プログラム作成の方針
048: ; 1. セレクションが指定されているものとします。セレクション
049: ;    が指定されていなければ、リージョンをセレクションに変更
050: ;    します。
051: ; 
052: ;    マークが設定されていないためにセレクションに変換できな
053: ;    いときは、その旨のメッセージを表示して、関数の実行を中
054: ;    断します。
055: ;
056: ; 2. セレクションの範囲内に処理を限定し、perform-replace を
057: ;    使って、行番号欄を削除します。
058: ; 
059: ; 3. セレクションの指定を、リージョンの指定に変換します。
060: ;
061: (defun remove-linenum ()
062:   (interactive)
063:   (let (from to)
064:     (if (not (get-selection-type))
065:         (if (mark t)
066:             (exchange-region-and-selection)
067:           (progn
068:             (message-box 
069:              "マークがないのでセレクションに変換できません。")
070:             (call-process (concat (si:system-root) "xyzzycli.exe"))
071:             (return-from remove-linenum))))
072:     (setq from (selection-mark))
073:     (setq to (selection-point))
074:     (if (> from to)
075:         (rotatef from to))
076:     (save-excursion
077:       (save-restriction
078:         (narrow-to-region from to)
079:         (goto-char (point-min))
080:         (perform-replace
081:          "^¥¥([ ]*¥¥)¥¥([0-9]+: ?¥¥)"
082:          "¥¥1" nil t t t)
083:         ); end of save-restriction
084:       ); end of save-excursion
085:     (exchange-region-and-selection)
086:     ); end of let
087:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5 clip-without-linenum -- 行番号を削除してクリップ

088: ; * clip-without-linenum
089: ; 行頭の数字の部分を削除したものをクリップボードに記録します。
090: ; 
091: ;  001: aaaaaaaaaa
092: ;  002: bbbbb
093: ;
094: ; のように書かれている部分を範囲指定して、
095: ; clip-without-linenum を実行すると
096: ;
097: ;  aaaaaaaaaa
098: ;  bbbbb
099: ;
100: ; のような文字列を作り出して、それをクリップボードに記憶しま
101: ; す。元のバッファは変更しません。
102: ; 
103: (defun clip-without-linenum ()
104:   (interactive)
105:   (let (from to codestring)
106:     (if (not (get-selection-type))
107:         (if (mark t)
108:             (exchange-region-and-selection)
109:           (progn
110:             (message-box 
111:              "マークがないのでセレクションに変換できません。")
112:             (call-process (concat (si:system-root) "xyzzycli.exe"))
113:             (return-from clip-without-linenum))))
114:     (setq from (selection-mark))
115:     (setq to (selection-point))
116:     (if (> from to)
117:         (rotatef from to))
118:     (setq codestring (buffer-substring from to))
119:     (save-excursion
120:       (save-restriction
121:         (setq *work* (get-buffer-create "*work*"))
122:         (switch-to-buffer *work*)
123:         (insert codestring)
124:         (goto-char (point-min))
125:         (perform-replace
126:          "¥¥([ ]*¥¥)¥¥([0-9]+: ?¥¥)"
127:          "¥¥1" nil t t t)
128:         (copy-to-clipboard (buffer-substring (point-min) (point-max)))
129:         (set-buffer-modified-p nil)
130:         (kill-buffer *work*)))
131:     (message "行番号部分を削除してクリップボードに記憶しました。")
132:     (call-process (concat (si:system-root) "xyzzycli.exe"))
133:     (exchange-region-and-selection)
134:     )
135:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6 clip-with-linenum -- 行番号を付加してクリップ

136: ;
137: ; * clip-with-linenum
138: ;
139: ; 行頭に行番号を付加してクリップボードに記録します。
140: ; 
141: ;  aaaaaaaaaa
142: ;  bbbbb
143: ;
144: ; のように書かれている部分を範囲指定して、clip-with-linenum 
145: ; を実行すると
146: ;
147: ;  001: aaaaaaaaaa
148: ;  002: bbbbb
149: ;
150: ; のような文字列を作り出して、それをクリップボードに記憶しま
151: ; す。
152: ; 元のバッファは変更しません。
153: ; 
154: (defun clip-with-linenum (firstcolumn num)
155:   "Insert numbers in the region"
156:   (interactive 
157:       "nfirst colum of the line number columns: ¥nnfirst line number: ")
158:   (let (from to codestring startline cline lnum)
159:     (setq firstcolumn (+ firstcolumn 1))
160:     (if (not (get-selection-type))
161:         (if (mark t)
162:             (exchange-region-and-selection)
163:           (progn
164:             (message-box 
165:              "マークがないのでセレクションに変換できません。")
166:             (call-process (concat (si:system-root) "xyzzycli.exe"))
167:             (return-from clip-with-linenum))))
168:     (setq from (selection-mark))
169:     (setq to (selection-point))
170:     (if (> from to)
171:         (rotatef from to))
172:     (setq codestring (buffer-substring from to))
173:     (save-excursion
174:       (save-restriction
175:         (setq *work* (get-buffer-create "*work*"))
176:         (switch-to-buffer *work*)
177:         (insert codestring)
178:         (setq lnum (count-lines 1 (point-max)))
179:         (goto-char (point-min))
180:         (setq cline 1)
181:         (while (<= cline lnum)
182:           (beginning-of-line)
183:           (if (> firstcolumn 0)
184:               (forward-char (- firstcolumn 1)))
185:           (if (< lnum 100)
186:               (insert (format nil "~2,'0D: " num))
187:             (insert (format nil "~3,'0D: " num)))
188:           (setq num (+ num 1))
189:           (setq cline (+ cline 1))
190:           (forward-line 1))
191:         (copy-to-clipboard (buffer-substring (point-min) (point-max)))
192:         (set-buffer-modified-p nil)
193:         (kill-buffer *work*)))
194:     (message "行番号を付加してクリップボードに記憶しました。")
195:     (call-process (concat (si:system-root) "xyzzycli.exe"))
196:     (exchange-region-and-selection)
197:     )
198:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7 provide 文 -- "kh-insertnum" を provide します。

199: (provide "kh-insertnum")

 

Produced by the use of o2h version 13.01.
[CTop] [Top] [Prev] [Body] [BodyStart] .