-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathemacs-lisp-intro-ja.texi
21812 lines (18052 loc) · 900 KB
/
emacs-lisp-intro-ja.texi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\input texinfo @c -*-texinfo-*-
@comment %**start of header
@setfilename ../../info/eintr-ja
@c setfilename emacs-lisp-intro-ja.info
@c sethtmlfilename emacs-lisp-intro-ja.html
@settitle Programming in Emacs Lisp
@syncodeindex vr cp
@syncodeindex fn cp
@finalout
@c メモ:当面は日本語版 TeXInfo 元のTeXInfoを使うので、@ref/@xref の扱いについて注意。
@include emacsver.texi
@c ================ How to Print a Book in Various Sizes ================
@c This book can be printed in any of three different sizes.
@c Set the following @-commands appropriately.
@c 7 by 9.25 inches:
@c @smallbook
@c @clear largebook
@c 8.5 by 11 inches:
@c @c smallbook
@c @set largebook
@c European A4 size paper:
@c @c smallbook
@c @afourpaper
@c @set largebook
@c (Note: if you edit the book so as to change the length of the
@c table of contents, you may have to change the value of `pageno' below.)
@c <<<< For hard copy printing, this file is now
@c set for smallbook, which works for all sizes
@c of paper, and with PostScript figures >>>>
@c smallbook
@afourpaper
@set largebook
@c ================ Included Figures ================
@c If you clear this, the figures will be printed as ASCII diagrams
@c rather than PostScript/PDF.
@c (This is not relevant to Info, since Info only handles ASCII.)
@set print-postscript-figures
@c clear print-postscript-figures
@clear print-postscript-figures
@comment %**end of header
@c per rms and peterb, use 10pt fonts for the main text, mostly to
@c save on paper cost.
@c Do this inside @tex for now, so current makeinfo does not complain.
@tex
@ifset smallbook
@fonttextsize 10
@end ifset
\global\hbadness=6666 % don't worry about not-too-underfull boxes
@end tex
@c These refer to the printed book sold by the FSF.
@set edition-number 3.10
@set edition-number-ja 0.97
@set update-date 28 October 2009
@set update-date-ja 10 January 2000
@c For next or subsequent edition:
@c create function using with-output-to-temp-buffer
@c create a major mode, with keymaps
@c run an asynchronous process, like grep or diff
@c For 8.5 by 11 inch format: do not use such a small amount of
@c whitespace between paragraphs as smallbook format
@ifset largebook
@tex
\global\parskip 6pt plus 1pt
@end tex
@end ifset
@c For all sized formats: print within-book cross
@c reference with ``...'' rather than [...]
@c This works with the texinfo.tex file, version 2003-05-04.08,
@c in the Texinfo version 4.6 of the 2003 Jun 13 distribution.
@tex
\if \xrefprintnodename
\global\def\xrefprintnodename#1{\unskip, ``#1''}
\else
\global\def\xrefprintnodename#1{ ``#1''}
\fi
% \global\def\xrefprintnodename#1{, ``#1''}
@end tex
@c ----------------------------------------------------
@dircategory GNU Emacs Lisp
@direntry
* Emacs Lisp Intro: (eintr-ja).
A simple introduction to Emacs Lisp programming (japanese).
@end direntry
@copying
これは、初心者のための @cite{『Emacs Lisp によるプログラミング』} の入門
です。
@sp 1
@iftex
Edition @value{edition-number}, @value{update-date}
日本語版 @value{edition-number-ja}, @value{update-date-ja}
@end iftex
@ifnottex
Distributed with Emacs version @value{EMACSVER}.
@end ifnottex
@sp 1
Copyright @copyright{} 1990--1995, 1997, 2001--2013 Free Software
Foundation, Inc.
@sp 1
@iftex
Published by the:@*
GNU Press, @hfill @uref{http://www.fsf.org/licensing/gnu-press/}@*
a division of the @hfill email: @email{sales@@fsf.org}@*
Free Software Foundation, Inc. @hfill Tel: +1 (617) 542-5942@*
51 Franklin Street, Fifth Floor @hfill Fax: +1 (617) 542-2652@*
Boston, MA 02110-1301 USA
@end iftex
@ifnottex
Printed copies available from @uref{http://shop.fsf.org/}. Published by:
@example
GNU Press, http://www.fsf.org/licensing/gnu-press/
a division of the email: sales@@fsf.org
Free Software Foundation, Inc. Tel: +1 (617) 542-5942
51 Franklin Street, Fifth Floor Fax: +1 (617) 542-2652
Boston, MA 02110-1301 USA
@end example
@end ifnottex
@sp 1
ISBN 1-882114-43-4
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; there
being no Invariant Section, with the Front-Cover Texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of
the license is included in the section entitled ``GNU Free
Documentation License''.
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''
この Info ファイルは、Programming in Emacs Lisp (An introduction) 1.05
版の日本語訳です。翻訳元のファイルは GNU の配布の中に含まれている
@file{emacs-lisp-intro-1.05.tar.gz} です。
@end copying
@c half title; two lines here, so do not use `shorttitlepage'
@tex
\font\chapmin=goth10 scaled \magstep3
{\begingroup%
\hbox{}\vskip 1.5in \chaprm \chapmin
\centerline{Emacs Lisp によるプログラミング}%
\endgroup}%
{\begingroup\hbox{}\vskip 0.5in \chaprm \chapmin
\centerline{初心者のための入門}%
\endgroup\page\hbox{}\page}
@end tex
@titlepage
@sp 6
@center @titlefont{Emacs Lisp によるプログラミング}
@sp 2
@center @titlefont{初心者のための入門}
@sp 2
@center Revised Third Edition
@center 日本語版 @value{edition-number-ja}, @value{update-date-ja}
@sp 4
@center Robert J. Chassell 著 @ 松田茂樹 訳
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@iftex
@headings off
@evenheading @thispage @| @| @thischapter
@oddheading @thissection @| @| @thispage
@end iftex
@ifnothtml
@c Keep T.O.C. short by tightening up for largebook
@ifset largebook
@tex
\global\parskip 2pt plus 1pt
\global\advance\baselineskip by -1pt
@end tex
@end ifset
@end ifnothtml
@shortcontents
@contents
@ifnottex
@node Top
@top An Introduction to Programming in Emacs Lisp
@ifset WWW_GNU_ORG
@html
<p>The homepage for GNU Emacs is at
<a href="/software/emacs/">http://www.gnu.org/software/emacs/</a>.<br>
To view this manual in other formats, click
<a href="/software/emacs/manual/eintr.html">here</a>.
@end html
@end ifset
@insertcopying
This master menu first lists each chapter and index; then it lists
every node in every chapter.
@end ifnottex
@c >>>> Set pageno appropriately <<<<
@c The first page of the Preface is a roman numeral; it is the first
@c right handed page after the Table of Contents; hence the following
@c setting must be for an odd negative number.
@c iftex
@c global@pageno = -11
@c end iftex
@set COUNT-WORDS count-words-example
@c Length of variable name chosen so that things still line up when expanded.
@menu
* Preface:: この文書の目的
* List Processing:: Lisp って何?
* Practicing Evaluation:: プログラムを走らせる
* Writing Defuns:: 関数定義の書き方
* Buffer Walk Through:: バッファに関する幾つかの関数
* More Complex:: もうちょっと難しい関数
* Narrowing & Widening:: Emacs の注意を特定のリージョンにせばめる
* car cdr & cons:: Lisp における基本的な関数
* Cutting & Storing Text:: テキストの削除と保存
* List Implementation:: 計算機の上でのリストの扱い
* Yanking:: 蓄えられたテキストのペースト
* Loops & Recursion:: プロセスの繰り返し
* Regexp Search:: 正規表現の検索
* Counting Words:: 繰り返しと正規表現の復習
* Words in a defun:: @code{defun} の中の単語を数える
* Readying a Graph:: グラフ表示関数の雛型
* Emacs Initialization:: @file{.emacs} ファイルの書き方
* Debugging:: Emacs Lisp のデバッガの走らせ方
* Conclusion:: 基本はこれでおしまい
* the-the:: Appendix: だぶった単語を見つけるには
* Kill Ring:: Appendix: kill リングはどう働いているか?
* Full Graph:: グラフにラベルを付けるには
* Free Software and Free Manuals::
* GNU Free Documentation License::
* Index::
* About the Author::
@detailmenu
--- The Detailed Node Listing ---
Preface
* Why:: なぜEmacs Lispを学ぶのか?
* On Reading this Text:: この文書を読むにあたって
* Who You Are:: 誰のために書かれたものか?
* Lisp History:: Lisp の歴史
* Note for Novices:: 初心者の人へ
* Thank You:: 謝辞
* Translator Preface:: 訳者まえがき
List Processing
* Lisp Lists:: リストってなあに?
* Run a Program:: Lisp のリストはすぐに実行出来る
* Making Errors:: エラーを発生させる
* Names & Definitions:: シンボルや関数定義の名前
* Lisp Interpreter:: Lisp インタプリタの動作
* Evaluation:: プログラムの実行
* Variables:: 変数の値を知る
* Arguments:: 引数:関数に情報を与えるもの
* set & setq:: 変数に値を設定する
* Summary:: 大切なポイント
* Error Message Exercises:: エラーメッセージについての練習問題
Lisp Lists
* Numbers Lists:: List have numbers, other lists, in them.
* Lisp Atoms:: 分解不可能な存在
* Whitespace in Lists:: リストを読みやすいよう整形する
* Typing Lists:: GNU Emacs がリストのタイプを助けてくれる
The Lisp Interpreter
* Complications:: Variables, Special forms, Lists within.
* Byte Compiling:: 実行速度を速めるための特殊なコード
Evaluation
* How the Interpreter Acts:: Returns and Side Effects...
* Evaluating Inner Lists:: リストの中のリスト...
Variables
* fill-column Example::
* Void Function:: The error message for a symbol
without a function.
* Void Variable:: 値のないシンボルに対するエラーメッセージ
Arguments
* Data types:: 関数に渡されるデータの型
* Args as Variable or List:: 引数には変数の値やリストも使える
* Variable Number of Arguments:: 関数の中には、可変な数の引数を扱える
ものもある
* Wrong Type of Argument:: 関数に間違った型の引数を与えると
* message:: メッセージを表示する時に便利な関数
Setting the Value of a Variable
* Using set:: 値の設定
* Using setq:: 引用符をつけずに値を設定するには
* Counting:: カウンタとしての @code{setq} の利用
Practicing Evaluation
* How to Evaluate:: 編集コマンドのタイプするか @kbd{C-x C-e}
で評価を実行出来る。
* Buffer Names:: バッファとファイルの違い
* Getting Buffers:: バッファ名でなくバッファそのものを呼び出す
* Switching Buffers:: 別のバッファに移るには
* Buffer Size & Locations:: ポイントの位置とバッファのサイズ
* Evaluation Exercise:: 評価についての練習問題
How To Write Function Definitions
* Primitive Functions:: 幾つかの関数は C で書かれている
* defun:: 特殊形式 @code{defun}
* Install:: 関数定義のインストール
* Interactive:: 関数をインタラクティブにする
* Interactive Options:: @code{interactive} の他のオプション
* Permanent Installation:: コードをずっとインストールしておきたい時
* let:: 局所変数の作成と初期化
* if:: if とは?
* else:: If--then--else 式
* Truth & Falsehood:: Lisp にとっての真と偽
* save-excursion:: ポイントやマークの位置、及びバッファの保存
* Review:: 復習
* defun Exercises:: 関数定義についての練習問題
Install a Function Definition
* Effect of installation::
* Change a defun:: 関数定義の変更の仕方
Make a Function Interactive
* Interactive multiply-by-seven:: An overview.
* multiply-by-seven in detail:: インタラクティブバージョン
@code{let}
* Prevent confusion::
* Parts of let Expression:: @code{let} 式にはどんな部分があるか
* Sample let Expression:: @code{let} 式の例
* Uninitialized let Variables:: 初期値をバインドしないとどうなるか
The @code{if} Special Form
* if in more detail::
* type-of-animal in detail:: @code{if} 式の例
Truth and Falsehood in Emacs Lisp
* nil explained:: @code{nil} has two meanings.
@code{save-excursion}
* Point and mark:: A review of various locations.
* Template for save-excursion:: 埋めるべきスロットは一つだけ
A Few Buffer--Related Functions
* Finding More:: 情報の探し方
* simplified-beginning-of-buffer:: @code{goto-char}, @code{point-min},
そして @code{push-mark} を見てみよう
* mark-whole-buffer:: @code{beginning-of-buffer} と殆ど同じ
* append-to-buffer:: @code{save-excursion} と
@code{insert-buffer-substring} を使う
* Buffer Related Review:: 復習
* Buffer Exercises:: バッファについての練習問題
The Definition of @code{mark-whole-buffer}
* mark-whole-buffer overview::
* Body of mark-whole-buffer:: 本体は三行しかない
The Definition of @code{append-to-buffer}
* append-to-buffer overview::
* append interactive:: 二つの部分からなるインタラクティブ式
* append-to-buffer body:: @code{let} 式との組み合わせ
* append save-excursion:: @code{save-excursion} はどう働くか
A Few More Complex Functions
* copy-to-buffer:: @code{set-buffer} と @code{get-buffer-create} を利用
* insert-buffer:: 書き込み不可 と @code{or} の使い方
* beginning-of-buffer:: @code{goto-char}, @code{point-min}, そし
て @code{push-mark} を見てみる
* Second Buffer Related Review:: バッファについての練習問題(その2)
* optional Exercise :: 追加の練習問題
The Definition of @code{insert-buffer}
* insert-buffer code::
* insert-buffer interactive:: 書き込み不可の状態の時の動作
* insert-buffer body:: 本体には @code{or} と @code{let} がある
* if & or:: @code{or} の代わりに @code{if} を使う
* Insert or:: @code{or} 式の動作について
* Insert let:: 二つの @code{save-excursion} 式
* New insert-buffer::
The Interactive Expression in @code{insert-buffer}
* Read-only buffer:: 書き込み不可のバッファでは
* b for interactive::
Complete Definition of @code{beginning-of-buffer}
* Optional Arguments::
* beginning-of-buffer opt arg:: 省略可能引数の例
* beginning-of-buffer complete:: 完全版
@code{beginning-of-buffer} with an Argument
* Disentangle beginning-of-buffer::
* Large buffer case:: 大きなバッファでの割り算と掛け算
* Small buffer case:: 括弧の中に何があるか
Narrowing and Widening
* Narrowing advantages:: ナローイングの利点
* save-restriction:: 特殊形式 @code{save-restriction}
* what-line:: ポイントは今何行目にあるか
* narrow Exercise:: ナローイングの練習問題
@code{car}, @code{cdr}, @code{cons}:基本関数
* Strange Names:: 寄り道: 何故こんな名前がついているか
* car & cdr:: リストの一部を取り出すための関数
* cons:: リストの構成
* nthcdr:: @code{cdr} を何回もよびだす
* nth::
* setcar:: リストの最初の要素の変更
* setcdr:: リストの残りの要素の変更
* cons Exercise:: cons についての練習問題
@code{cons}
* Build a list::
* length:: リストの長さを知る
Cutting and Storing Text
* Storing Text:: テキストはリストの中に保存される
* zap-to-char:: テキストをある文字まで削除する
* kill-region:: リージョンの削除
* copy-region-as-kill:: テキストの複写の定義
* Digression into C:: Minor note on C programming language macros.
* defvar:: 変数に初期値を与える
* cons & search-fwd Review:: cons と search-forward の復習
* search Exercises:: 検索についての練習問題
@code{zap-to-char}
* Complete zap-to-char:: The complete implementation.
* zap-to-char interactive:: 三つの部分からなるインタラクティブ式
* zap-to-char body:: ちょっと復習
* search-forward:: 文字列検索の仕方
* progn:: 関数 @code{progn} について
* Summing up zap-to-char:: @code{point} と @code{search-forward} を使う
@code{kill-region}
* Complete kill-region:: The function definition.
* condition-case:: Dealing with a problem.
* Lisp macro::
@code{copy-region-as-kill}
* Complete copy-region-as-kill:: The complete function definition.
* copy-region-as-kill body:: @code{copy-region-as-kill} の本体部分
The Body of @code{copy-region-as-kill}
* last-command & this-command::
* kill-append function:: 関数 @code{kill-append}
* kill-new function::
Initializing a Variable with @code{defvar}
* See variable current value::
* defvar and asterisk::
How Lists are Implemented
* Lists diagrammed::
* Symbols as Chest:: Exploring a powerful metaphor.
* List Exercise:: List についての練習問題
Yanking Text Back
* Kill Ring Overview:: kill リングはリストである
* kill-ring-yank-pointer:: @code{kill-ring-yank-pointer} 変数について
* yank nthcdr Exercises:: ヤンクと nthcdr についての練習問題
Loops and Recursion
* while:: 特定のコードの繰り返し
* dolist dotimes::
* Recursion:: 再帰: 自分自身を呼び出す関数
* Looping exercise:: ループについての練習問題
@code{while}
* Looping with while:: Repeat so long as test returns true.
* Loop Example:: リストを使った @code{while} ループ
* print-elements-of-list:: @code{while}, @code{car}, @code{cdr} の利用
* Incrementing Loop:: 増加するカウンタを使ったループ
* Incrementing Loop Details::
* Decrementing Loop:: 減少するカウンタを使ったループ
Details of an Incrementing Loop
* Incrementing Example:: 三角形に並んだ小石の数を数えてみる
* Inc Example parts:: 関数定義はどんな部分からなるか
* Inc Example altogether:: 関数を一つにまとめる
Loop with a Decrementing Counter
* Decrementing Example:: またまた浜辺の小石を数えてみる
* Dec Example parts:: 関数定義はどんな部分からなるか
* Dec Example altogether:: 関数を一つにまとめる
Save your time: @code{dolist} and @code{dotimes}
* dolist::
* dotimes::
Recursion
* Building Robots:: Same model, different serial number ...
* Recursive Definition Parts:: Walk until you stop ...
* Recursion with list:: 再帰のテストにリストを使う
* Recursive triangle function:: @code{while} ループを再帰で置き換える
* Recursion with cond:: 別の条件分岐を用いた再帰の例
* Recursive Patterns:: Often used templates.
* No Deferment:: Don't store up work ...
* No deferment solution::
Recursion in Place of a Counter
* Recursive Example arg of 1 or 2:: 引数が 1 か 2 の場合の再帰関数の動作
* Recursive Example arg of 3 or 4:: 引数が 3 か 4 の場合の再帰関数の動作
Recursive Patterns
* Every::
* Accumulate::
* Keep::
Regular Expression Searches
* sentence-end:: @code{sentence-end} の正規表現
* re-search-forward:: @code{search-forward} とほぼ同じ
* forward-sentence:: 正規表現検索の単純な例
* forward-paragraph:: もうちょっと複雑な例
* etags:: @file{TAGS} テーブルの作り方
* Regexp Review:: 正規表現の復習
* re-search Exercises:: 正規表現の練習問題
@code{forward-sentence}
* Complete forward-sentence::
* fwd-sentence while loops:: 二つの @code{while} ループ
* fwd-sentence re-search:: 正規表現検索
@code{forward-paragraph}: a Goldmine of Functions
* forward-paragraph in brief:: Key parts of the function definition.
* fwd-para let:: @code{let*} 式について
* fwd-para while:: 前方に向かう場合の @code{while} ループ
Counting: Repetition and Regexps
* Why Count Words:: Emacs には単語を数えるコマンドが欠けている
* @value{COUNT-WORDS}:: 正規表現を使う。でも問題が...
* recursive-count-words:: リージョンに単語が一つも無い場合には
* Counting Exercise:: カウントに関する練習問題
The @code{@value{COUNT-WORDS}} Function
* Design @value{COUNT-WORDS}:: The definition using a @code{while} loop.
* Whitespace Bug:: @code{count-words-region} の空白についてのバグ
Counting Words in a @code{defun}
* Divide and Conquer:: 遠大な計画は分割しよう
* Words and Symbols:: 何を数えればよいか?
* Syntax:: 単語やシンボルは何から構成されているか
* count-words-in-defun:: @code{count-words} とほぼ同じ
* Several defuns:: 一つのファイルにある複数の defun を数える
* Find a File:: ファイルを見つける
* lengths-list-file:: 沢山の定義の長さのリスト
* Several files:: 異なるファイルの中の定義を数える
* Several files recursively:: 異なるファイルの定義を再帰を使って数える
* Prepare the data:: データをグラフに表示するための準備
Count Words in @code{defuns} in Different Files
* lengths-list-many-files:: Return a list of the lengths of defuns.
* append:: あるリストを別のリストに追加する
Prepare the Data for Display in a Graph
* Data for Display in Detail::
* Sorting:: リストをソートする
* Files List:: ファイルのリストを作る
* Counting function definitions::
Readying a Graph
* Columns of a graph:: 縦のグラフはどうやって表示すればよいか
* graph-body-print:: グラフ本体の表示
* recursive-graph-body-print:: グラフ本体の表示を再帰的に行う
* Printed Axes:: 軸の表示
* Line Graph Exercise:: 棒グラフについての練習問題
Your @file{.emacs} File
* Default Configuration:: Emacs のデフォルトは合理的である
* Site-wide Init:: サイトごとの初期化ファイルもある
* defcustom:: Emacs will write code for you.
* Beginning init File:: @code{.emacs file} の書き方
* Text and Auto-fill:: 自動的に行を折り返す
* Mail Aliases:: Email の短縮アドレス
* Indent Tabs Mode:: @TeX{} ではタブを使わないようにするには
* Keybindings:: 個人的なキーバインディングを設定するには
* Keymaps:: キーバインディングについて更に詳しく
* Loading Files:: ファイルを自動的にロード(評価)する
* Autoload:: Autoload: 関数をすぐ使える状態に
* Simple Extension:: 関数を定義し、キーにバインドする
* X11 Colors:: Version 19 の X 上でのカラー表示
* Miscellaneous:: ミニバッファを自動的なリサイズ etc.
* Mode Line:: モード行のカスタマイズ
Debugging
* debug:: 組み込みデバッガの使い方
* debug-on-entry:: 関数呼び出し時にデバッガを起動する
* debug-on-quit:: @kbd{C-g} を押した時にデバッガを起動する
* edebug:: ソースレベルのデバッガ Edebug
* Debugging Exercises:: デバッグについての練習問題
Handling the Kill Ring
* What the Kill Ring Does:: リストの中でのポインタの移動と巡回
* current-kill::
* yank:: 切り取ったテキストを貼り付ける
* yank-pop:: ポインタが指しているテキストを貼り付ける
* ring file::
The @code{current-kill} Function
* Code for current-kill::
* Understanding current-kill::
@code{current-kill} in Outline
* Body of current-kill::
* Digression concerning error:: How to mislead humans, but not computers.
* Determining the Element::
A Graph with Labeled Axes
* Labeled Example:: 最終的なグラフはどんな形になるか
* print-graph Varlist:: @code{print-graph} の中の @code{let} 式
* print-Y-axis:: 縦軸のラベルの表示
* print-X-axis:: 横軸のラベルの表示
* Print Whole Graph:: 完全なグラフを表示する関数
The @code{print-Y-axis} Function
* print-Y-axis in Detail::
* Height of label:: What height for the Y axis?
* Compute a Remainder:: 割った余りの計算方法
* Y Axis Element:: Y 軸の各行の構成
* Y-axis-column:: Y 軸のラベルのリストの生成
* print-Y-axis Penultimate:: 縦軸の表示、最終版
The @code{print-X-axis} Function
* Similarities differences:: Much like @code{print-Y-axis}, but not exactly.
* X Axis Tic Marks:: 横軸に目盛記号を入れる
Printing the Whole Graph
* The final version:: A few changes.
* Test print-graph:: 簡単なテスト
* Graphing words in defuns:: 最終的なコードの実行
* lambda:: 無名関数の書き方
* mapcar:: 要素のリストに関数を作用させる
* Another Bug:: でもまだバグが潜んでいる @dots{}
* Final printed graph:: The graph itself!
@end detailmenu
@end menu
@node Preface
@unnumbered 序文
GNU Emacs というエディタは大部分が Emacs Lisp と呼ばれるプログラミング言
語で書かれている。このプログラミング言語の中に書かれているコードは、計算
機がコマンドが与えられた時何をすべきかを教えるソフトウェア---命令の集ま
り---である。Emacs は、あなたが Emacs Lisp で新しいコードを書き、簡単に
拡張機能としてエディタに組み込むことが出来るよう設計されている。これが
Emacs が「extensible editor (拡張可能エディタ)」と呼ばれる所以である。
(実際には、Emacs は通常エディタが出来ると思われている機能をはるかに上回
ることをやってのけるので、むしろ「extensible computing environment (拡
張可能計算機環境)」とでもいうべきだろう。まあ、ちょっと長ったらしいフレー
ズになってしまうし、あなたが Emacs の中でする全てのこと---マヤ暦や月の満
ち欠けを調べたり、多項式を整理したり、コードをデバッグしたり、ファイルを
扱ったり、手紙を読んだり書いたりといったこと---はもっとも広い意味では編
集 (edit) の範疇に属するものではあるが。)
@menu
* Why:: Why learn Emacs Lisp?
* On Reading this Text:: この文書を読むにあたって
* Who You Are:: 誰のために書かれたものか?
* Lisp History:: Lisp の歴史
* Note for Novices:: 初心者の人へ
* Thank You:: 謝辞
* Translator Preface:: 訳者まえがき
@end menu
@ifnottex
@node Why
@unnumberedsec Why Study Emacs Lisp?
@end ifnottex
Emacs Lisp はテキストエディタに関する言語と思われがちであるが、実際は計算
機全体に関するプログラミング言語である。あなたはこの言語を他のプログラミ
ング言語と同じ様に使うことが出来るのだ。
多分、あなたはプログラミングを理解したいと思っていることだろう。あるいは、
Emacs の機能を拡張したいとか、プログラマになりたいと思っているかもしれな
い。この Emacs Lisp についての文書は、その出発点を示すことを意図している。
つまり、あなたをプログラミングの基本的な事柄に慣れさせ、更により大切なこ
とだが、あなたが自分自身でより先に進むにはどうしたら良いかを示すことを目
的としている。
@node On Reading this Text
@unnumberedsec このテキストを読むにあたって
この文書の中には、Emacs の中で走らせることの出来る小さなサンプルプログラ
ムが登場する。この文書を GNU Emacs の Info の中で読めば、そのプログラム
をその場で走らせることが出来る。(これは簡単に実行出来る。その方法はその
プログラムが出てきた時に説明する。) あるいは、この文書を印刷製本し Emacs
が走っている計算機のそばに座りながら読むことだって出来る。(私はこの方法
が好きだ。私は印刷された本の方が好みなので。) たとえあなたの近くで Emacs
が動いていなくても、この本を読むことは出来る。が、その場合はこれを小説か、
まだ行ったことのない国の旅行ガイドのように扱うのが良いだろう。面白いにし
ても実際とは違うものだ。
この文書の多くの部分は、GNU Emacs の中で使われるコードのガイドツアーとい
うべきことに費やされている。これらのツアーの目的は次の二つである。一つ目
は、あなたを実際に役立つコード (あなたが毎日使うコード) に親しませること。
二つ目は、あなたを Emacs を活用する方法に親しませることである。エディタ
がどのように実装されているかを見ることは面白いものである。また、私はあなた
がソースコードを眺める習慣を身に付けることを望んでいる。あなたはそこから
いろいろなこと学び、そしてアイディアを発掘することが出来る。GNU Emacs を
手に入れるということは、宝が隠されたドラゴンの洞窟を発見したようなものな
のである。
これらの例やガイドツアーを通して、エディタとしての Emacs を学んだり、プ
ログラミング言語としての Emacs Lisp を学習するだけでなく、Emacs が Lisp
プログラミング環境であることを理解するきっかけが与えられることだろう。
GNU Emacs はプログラミングをサポートし、あなたが快適に使いこなしたくなる
ような様々な道具を与えてくれる。例えば @kbd{M-.} (@code{find-tag} コマン
ドを発生させるキー) なんかがそうだ。また、エディタ環境の一部であるバッファ
やその他のものを学べる。Emacs のこれらの特徴を学ぶことは、あなたが故郷に
帰る新しいルートを探すことに例えられよう。
@ignore
以上の他に、私は幾つかのプログラムを例として書き加えた。これらは例に過ぎ
ないが、プログラムは本物である。私はこのプログラムを使っているし、他の人
も利用している。あなたも使うことが出来る。
@end ignore
最後に、私はあなたがまだ知らないプログラミングの側面を学ぶために Emacs
を利用して出来る幾つかのテクニックを伝えることが出来ればと思う。難解な事
柄を理解したり、何か新しいことをしたりする際、その解決方法にしばしば
Emacs そのものを利用することが出来る。こういった自己完結性があることは、
単に気分が良いというだけでなく、実際に非常に便利なものである。
@node Who You Are
@unnumberedsec これは誰のために書かれたものか
この文書は、プログラマではない人々への、初歩的な入門書として書かれている。
もしあなたがプログラマであるなら、あなたはこのような簡単なものでは満足出
来まい。というのも、あなたは既にリファレンスマニュアルを読むのに熟達して
いるかもしれないし、その場合この文書のような書き方ではまどろっこしく感じ
るだろうからだ。
例えば、この文書を読んだある熟練したプログラマは、私に次のように言った。
@quotation
@i{僕は、リファレンスマニュアルから学ぶ方が好きなんだ。各々のパラグ
ラフに「ダイブして」そして各パラグラフの間で「息継ぎをする」感じだ。}
@i{僕はあるパラグラフの最後に辿り着いたら、その主題については終了したも
のと見倣すんだよ。つまり、(次のパラグラフでより詳しいことが説明されるよ
うな場合を除いて) 必要なことは全て分ったと考えるわけなんだ。だから無駄な
沢山の繰り返しがなくって、必要な情報が載っている個所へのポインタがきちん
と整備されているようなのがいいな。}
@end quotation
この入門書はこのような人のために書かれたのではない!
まず一つ目に、私は全てのことを少なくとも3回は繰り返すようにした。まずは
それを紹介し、次にそれがどんな場合に使われるかを見て、そして、別の使われ
方を見るか、それを復習するといった具合だ。
二つ目に、私はその主題についての全ての情報を一箇所にまとめるようなことは
殆どしなかった。ましてや、一つのパラグラフに押し込めるようなことは避けた。
これは個人的な考えだが、そういうやり方は読者に過剰な負担を強いることにな
る。その代わりに、私は各々の場合に必要なことだけを説明するように心がけた。
(時々は、後で正式に説明する時に戸惑うことのないよう、ちょっと先走った事
柄の説明も含めたりしたが。)
この文書を読む時は、あなたは全てのことを初めて学ぶものと考えられている。
取り上げられた幾つかの項目については、言わば、会えば会釈する程度の浅い付
き合いしかする必要がないものもある。あなたが本当に大切なことが何かに気付
き、それに集中することが出来るだけの十分なヒントを提供出来るように、この
文書をうまく構成出来ていればと思う。
あなたは、幾つかのパラグラフには「ダイブする」必要がある。それらには、別
のもっと楽な読み方があるわけではない。しかし、私はそのようなパラグラフの
数はなるべく押さえたつもりだ。この本は、そびえたつ山ではなく、ちゃんと登
ることができる丘であるように書かれている。
この 『Emacs Lisp によるプログラミング』 ---初心者のための入門---
は次の本と兄弟関係にある。
@iftex
@cite{『The GNU Emacs Lisp Reference Manual』}. @footnote{日本語訳もある。
『GNU Emacs Lisp リファレンスマニュアル』Bil Lewis, Dan LaLiberte and
the GNU Manual Group 著、榎並嗣智 井田昌之監訳、発売 丸善、発行 透土社、
定価6796円、ISBN 4-924828-39-4}
@end iftex
@ifnottex
@ref{Top, , The GNU Emacs Lisp Reference Manual, elisp, The GNU
Emacs Lisp Reference Manual}. 日本語訳もある。
透土社から出版されている。
@smallexample
GNU Emacs Lisp リファレンスマニュアル
著 Bil Lewis, Dan LaLiberte and the GNU Manual Group.
監訳 榎並嗣智 井田昌之
発売 丸善
発行 透土社
定価 6796円(消費税含まず)
ISBN 4-924828-39-4
@end smallexample
@ref{Top, , The GNU Emacs Lisp Reference Manual, elisp, The GNU
Emacs Lisp Reference Manual}.
@end ifnottex
リファレンスマニュアルには、この入門書よりも詳しいことが載っている。また
リファレンスマニュアルでは、あるトピックについての全ての情報は一箇所に固
まっている。もしあなたが、上に挙げたプログラマのようなタイプなら、こっち
を読むべきだろう。また、勿論この入門書を読み終えた後、自分自身でプログラ
ミングをする場合には、リファレンスマニュアルがいろいろと便利であることが
納得出来るだろう。
@node Lisp History
@unnumberedsec Lisp の歴史
@cindex Lisp history
Lisp は最初、1950年代の終わりに、マサチューセッツ工科大学で人工知能の研
究のために開発された。Lisp 言語が持つ素晴しい能力は、エディタのコマンド
を書くことは勿論のこと、他の目的についても優秀さを発揮した。
@cindex Maclisp
@cindex Common Lisp
GNU Emacs Lisp は Maclisp の影響を多く受けている。Maclisp は1960年代に
MIT で書かれた。Common Lisp の影響もいく分受けている。こちらは1980年代
に標準となった。しかしながら、Emacs Lisp は Common Lisp と比べて非常に単
純である。(標準的な Emacs の配布には、オプションとして @file{cl.el} が含
まれている。これは Emacs Lisp に多くの Common Lisp の機能を付け加えるた
めのものである。
@node Note for Novices
@unnumberedsec 初心者の人へ
もしあなたが GNU Emacs について知らないとしても、この文書には何かしら役
に立つことが書かれているだろう。しかしながら、たとえ、コンピュータのスク
リーンの中を動き回るということだけでも良いから、Emacs を学ぶことを薦める。
あなたはオンラインのチュートリアルを使って自分自身でその使い方を学べる。
そのためには、@kbd{C-h t} とタイプするだけでよい。(これは @key{CTRL}
キーと @kbd{h} キーを同時に押して離し、次に、@kbd{t} キーを押して離すこ
とを意味する。) (訳註:Mule ならば、@kbd{C-h T} で日本語や韓国語、タイ語
のチュートリアルが行える。)
また、私はしばしば Emacs の標準的なコマンドを、そのコマンドを引き起こす
キーを書き、その後に、そのコマンドの名前を括弧でくくって書くことで示した
りする。例えば @kbd{M-C-\} (@code{indent-region}) といった感じだ。(もし
望むなら、そのコマンドを引き起こすためにタイプするキーを交換することも出
来る。これは、@dfn{リバインディング} (@dfn{rebinding}) と呼ばれる。
@ref{Keymaps, , キーマップ}, 参照)。この @kbd{M-C-\} という省略形は、
@key{META} キーと @key{CTRL} キーと @key{\} キーを同時にタイプすることを
示している。このような組み合わせはよくキーコードと呼ばれる。理由は、ピア
ノでコードを弾くのに似ているからである。もし、キーボードに @key{META} キー
が無ければ、@key{ESC} キーがその代わりになる。この場合は、@kbd{M-C-\} は、
まず @key{ESC} を押して離し、ついで、@key{CTRL} と @key{\} を同時にタイ
プすることを意味する。
もし、この文書を GNU Emacs の Info を使って読んでいるなら、この文書全て
をただ単にスペースバー、@key{SPC} を押し続けることで読んでしまうことが
出来る。(Info について学ぶには、@kbd{C-h i} とタイプし、ついで Info を選
択すれば良い。)
言葉の使い方についての注意だが、私が単独で Lisp という単語を使う場合は、
大概、Lisp の様々な方言にも通用する、一般的な事柄を述べている。しかし、
Emacs Lisp と言うときは特に GNU Emacs Lisp のことを言及している。
@node Thank You
@unnumberedsec 謝辞
執筆に際し助けて頂いた全ての人々に感謝します。特に、@r{Jim Blandy},
@r{Noah Friedman}, @w{Jim Kingdon}, @r{Roland McGrath}, @w{Frank
Ritter}, @w{Randy Simith}, @w{Richard M.@:Stallman}, そして、@w{Melissa
Weisshaus} に感謝します。また、@w{Philip Johnson} と @w{David Stampe} の
忍耐強い励ましにも感謝します。この文書の間違いは、全て私の責任です。
@node Translator Preface
@unnumberedsec 訳者まえがき
この文書は Robert J. Chassell 氏の『Programming in Emacs Lisp: A simple
introduction』を訳したものです。個人用の訳なので拙い所も多く、また形式上
もあまりしっかりしてはいません。が、一応実用には耐えられるのではないかと
判断しています。また、訳者の実力不足のために訳に間違い等が含まれていると
思われますが、お気付きの方は連絡していただけると嬉しく思います。
また、@w{飯田義朗様}、@w{木村浩一様}、@w{幸田薫様}、@w{本田博通様}、
@w{山下健司様}には、以前の版での誤り、不具合等について指摘して頂きました。
この場をかりて深く感謝いたします。
@flushright
Robert J. Chassell
@ifnothtml
@email{bob@@gnu.org}
@end ifnothtml
@ifhtml
bob@@gnu.org
@end ifhtml
@end flushright
@c ================ Beginning of main text ================
@c Start main text on right-hand (verso) page
@tex
\par\vfill\supereject
\headings off
\ifodd\pageno
\par\vfill\supereject
\else
\par\vfill\supereject
\page\hbox{}\page
\par\vfill\supereject
\fi
@end tex
@c Note: this resetting of the page number back to 1 causes TeX to gripe