Emacs、電子メールの転送

					2006年5月2日
コンピュータリテラシ

                                       筑波大学 電子・情報工学系
                                       コンピュータサイエンス専攻
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2006/2006-05-02
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

  • 次回5月9日火曜日は、教室 3A309 に集合。(実習室 3C205 ではない)。
  • 手引き(教育用計算機システム使用の手引き)を持って来る。
  • who@coins.tsukuba.ac.jp に届いた電子メールは、毎日、読むこと。

    ■復習

    ■補足

    Unix Super Text 34章。

    木構造の利点。再帰的(recursive)な考え方。

    % ls [←]
    
    % ls -R [←]
    
    木構造の部分木(ある節以下全部)に対する操作。
    1. あるディレクトリを訪れる。
    2. そのディレクトリ中の要素について
      • ファイルなら、ある操作Xをほどこす。
      • ディレクトリなら、そのディレクトリをもう一度訪れ、1. から繰り返す。
    木構造ならば、このような再帰的な操作を行っても無限に繰り返すことはなく、 必ず停止する。

    -R オプションは、ls の他に、rm、chmod、chown などでも使える。 -R (recursive) は、失敗すると影響が大きいので、慎重に使うこと。

    タイプ練習ソフトウェア Typist.app を一般にも使えるようにした。 local3/Applications にある。

    % open /usr/local3/Applications/Typist.app [←]
    
    相対パスを利用して
    % cd / [←]
    % cd usr [←]
    % cd local3 [←]
    % cd Applications [←]
    % open Typist.app [←]
    

    ASCII コード表は、man ascii で表示される。

    シェル(tcsh) には、Emacs と同様の行編集(ヒストリ編集)機能と補完機能がある (^f,^b,^p,^b,tab)。

    ■Emacs

    手引き3章。Unix Super Text 12章。

    GNU Emacs (ぐにゅー いーまっくす)。 Free Software Foundation開発。 Richard Stallman 原作。

    3種類ある。

    MacOSX でウインドウを開くもの(Aqua版)。
    実行(起動)には、Dock アイコンをシングルクリックでもよい。 シェルから open /Applications/Emacs.app でもよい。
    端末(iTerm, xterm, kterm)の中で動く。
    実行には、emacs -nw と打つ。 -nw は、no window の意味。 リモートログイン(後述、sshコマンド、 手引き2.5節、 )
    X Window System の元で動作する。
    実行には、まず、X Window System (X11) を実行する。 さらに、X Window System に対応した Emacs を( -nw なしで)実行する。 環境変数 DISPLAY で設定された場所に画面が表示される。 (X11 未対応のものは、-nw を付けなくても端末の中でそのまま動く。)
    環境変数については、後述。

    ◆Emacsと文字コード

    端末で動く時の注意。 漢字コード(漢字の符号化の方法)を合わせる必要がある。

    漢字コード モードラインの表示 Emacsの設定
    EUC E euc-jp-unix
    JIS J iso-2022-jp-unix, junet
    Shift_JIS S shift_jis-unix
    UTF-8 u utf-8-unix
    最後の-unix は、改行文字(行末)の ASCII 制御コード。 主に次の3種類がある。
    emacs記号 制御コード(16進数) 説明 Controlキー C言語表記
    -unix 0a nl (new line) Control+j \n
    -mac 0d cr (carriage return) Control+m \r
    -dos 0d 0a (2文字) cr nl Control+m Control+j \r\n
    「\」と「¥」は同じ。

    dos (Disk Operating System) は、MS-DOS (Microsoft DOS) の意味。 Microsoft Windows の前進。

    Emacs では、主に次の3つを変更する。

    terminal-coding-system
    Emacs から端末への出力(端末の受信側) M-x set-terminal-coding-system で変更できる。
    keyboard-coding-system
    キーボードから Emacs への入力(端末の送信) M-x set-keyboard-coding-system で変更できる。
    buffer-file-coding-system
    Emacs がファイルへの出力 M-x set-buffer-file-coding-system で変更できる。

    ◆iTerm で、文字コードを EUC に設定する

    1. 「iTerm」メニューの「環境設定」を選ぶ
    2. 「プロファイル設定」ボタンを押す
    3. 「ターミナル」タブを開く
    4. 「エンコーディング」メニューで、「日本語(EUC)」を選ぶ

    iTerm、環境設定、プロファイル設定、ターミナル

    iTerm、環境設定、プロファイル設定、ターミナル

    ついでに、ウインドウの大きさを、標準の 80x24 から 80x40 程度に大きくし、 文字フォントを 14 ポイント程度に大きくするとよい。
    1. 「iTerm」メニューの「環境設定」を選ぶ
    2. 「プロファイル設定」ボタンを押す
    3. 「ディスプレイ」タブを開く
    4. 「行」の「24」を「40」に変更する
    5. 「ASCII フォント」ボタンでフォント選択のウインドウを表示し、 「Monaco Regular 14」を選ぶ。
    6. 「非ASCII フォント」ボタンでフォント選択のウインドウを表示し、 「Monaco Regular 14」を選ぶ。
    好みの大きさのフォントを使う。 「Monaco Regular 14」の代わりに、 「Osaka レギューラー等幅 14」もよい。

    画面の行数は 40-50 適当。 横幅は、普通、80 だが、必要に応じて広くする。

    ■基本概念

    バッファ
    Emacs で、メモリの代わり。 保存しないと失われる。 手引き3.2.7項。
    ウインドウ
    バッファ(の一部)を画面に表示したもの。 1つのバッファを複数のウインドウに表示することもできる。
    モードライン
    下から2行目。反転している。文字コード、 バッファの名前、バッファの変更状態などが表示される。
    キーバインディング
    キー入力と、それに応じた関数(専門用語)の対応。 キー入力と操作の対応関係。
    エコー領域
    一番下の行。
    ミニバッファ
    ファイル名を入力する場合などに使う特殊なバッファ。 エコー領域に表示される。

    ◆関数

    関数とは、プログラムを作成する時の単位。 プログラムは、プログラミング言語で記述されている。 Emacs は、C 言語と Lisp というプログラミング言語で記述されている。 Emacs のキーは、Lisp で記述された関数と対応してる。

    ◆バッファの変更状態

    表示 意味
    ** 変更された(未保存)
    -- 変更なし(保存済み)
    %% 書き込み禁止
    %* 書き込み禁止バッファが変更された

    ◆キー表記

    手引き36ページ

    Meta キーがない時には、Esc キーを使う。 説明の表記は、M- のまま。

    ◆C-g

    困った時には、C-g を複数回連打する。

    ◆undo

    undo (操作を元に戻す)という考え方がある。C-x u。

    ◆カーソル移動

    キーを打った時に、文字が入る場所をカーソルという。

    カーソル移動には、矢印キー(←、→、↑、↓)も使えるが、 手がホームポジションから離れてしまうのでよくない。 Control キーを使う方法(手引き38ページ)を使う。

    C-b	backward-char
    C-f	forward-char
    C-p	previous-line
    C-n	next-line
    

    ◆1字削除

    手引き3.2.3。

    「削除リング」という考え方がある。

    カーソルの左側を削除する方法とカーソルの右側(カーソルのある場所)を 削除する方法がある。

    大量の削除には、カット&ペーストのカットだけを行うとよい。

    ◆カット&ペースト、コピー&ペースト

    手引き3.2.4。

    マーク、ポイント(カーソルのある位置)、リージョン。

    ◆検索(サーチ)

    手引き3.2.5。

    Emacs の得意技。インクリメンタル・サーチ。 C-s, C-r の後、RET で通常の検索になる。

    ◆置換(replace)

    M-x query-replace (M-%, Esc %) が便利。

    M-% と打つと、ミニバッファで次のように聞かれる。

    Query replace:
    置き換え前の文字列を打ち込みリターン
    Query replace aaa with:
    置き換え後の文字列を打ち込みリターン
    y (または SPC) で置き換え、n で次の候補に移動、! で、以降すべて置換、 q で終了

    ◆補完

    なるべく手で(キーボードで)打たないための方法 Emacs では、ファイル名の入力や関数名の入力、 バッファ名の入力などで補完が使える。

    ◆ファイルの読み書き

    手引き3.2.6。

    C-x C-r は、読み込み専用でファイルを表示する。

    C-x i は、他のファイルをサーソルの位置に全て読み込む。

    ■使い方を調べる、磨く、上達する

    標準では、日本語のチュートリアルが実行される。 英語、その他の言語のチュートリアルを実行するには、 M-x help (Esc ?)の前に、C-u を打つ。

    C-u M-x Help t [←] 言語

    次のような言語が選択できる。

    ASCII Brazilian Portuguese Bulgarian Chinese-BIG5 Chinese-GB Czech Dutch English French German Italian Japanese Korean Polish Romanian Russian Slovak Slovenian Spanish Swedish Thai

    フォントの問題でうまくいかないかもしれない。

    M-x help m
    機能の一覧(modeの説明)
    M-x help b
    キーバインディング(bindingの説明)
    M-x help a
    apropos。関数の検索。
    apropos というコマンドは、シェルから打っても使える。 man -k と同じ。

    ■電子メール

    who@coins.tsukuba.ac.jp に届いた電子メールは、 毎日、読むこと。特に、 コンピュータ・リテラシの授業の最中は必ず 読むこと。

    TAや教官からメールが来て、必要な返事は、 次の実習時間/講義時間までに出すこと。

    coins 以外のメール・サーバを使うときには、 ~/.forward による転送の設定を行うこと。

    ■~/.forwardによる電子メールの転送

    メール・リーダには、 受け取ったメールをユーザの操作で1つひとつ 転送(forward) する機能がある。 それとは別に、届いたメールをユーザの操作を介さずに自動的に他のアドレス (普通は他のホストにある別の自分の電子メール・アドレス)に転送する機能 がある。この機能を使うには、ホーム・ディレクトリの下の ~/.forward というファイルに、転送先のアドレスを書く。 たとえば、 shiro@himalaya.is.tsukuba.ac.jp に届いたメールを全て shiro@alps.is.tsukuba.ac.jp に転送したいとする。この時、 himalaya の方のホーム・ディレクトリの下の ~/.forward に次のように書く。
    shiro@alps.is.tsukuba.ac.jp
    
    単純に転送先のアドレスを書く方法では、~/.forwardが あるホストには、何も残らないが、コピーを残しながら、転送する方法もある。 それには、次のように自分のログイン名に\を付けたア ドレスを含める。
    \shiro, shiro@alps.is.tsukuba.ac.jp
    
    注意:「\」は、ASCII 「5c(16進数)」である。 「\」と表示されたり「¥」と表示されることがある。 「/」ではない。

    この例では、himalaya に届いた電子メールは、himalaya と いうホストの \shiroというユーザの 配送プログラム用メール・ボックスに入り、 さらに、shiro@alps.is.tsukuba.ac.jp にも送られる。

    ~/.forwardにおけるループの危険性

    複数のメール・アドレスがある人は、どのホストにログインした時にも、全部 のホストに届いた電子メールが読める状態にしたいと思うかもしれない。 上の例では、 alps にログインした時にも、 alpshimalaya の両方のメールが読め、 また、himalaya にログインしてもやはり alpshimalaya の両方のメールが読める と便利に思えるかもしれない。しかし、こうすることは技術的に難しいので、 しばらくはあきらめて欲しい。

    \loginnameの機能をつかっても、なかなかうまくいかない。 たとえば、次のよう な ~/.forward を作成したと考える。(実際に実行すると危険なので、 考えるだけする。)

    (alps:~/.forward)
    \shiro, shiro@himalaya.is.tsukuba.ac.jp
    
    (himalaya:~/.forward)
    \shiro, shiro@alps.is.tsukuba.ac.jp
    
    この状態で、shiro@alps.is.tsukuba.ac.jp にメールが届いた 場合、次のようなことが起る。
    1. alps にコピーが残され、かつ、 shiro@himalaya.is.tsukuba.ac.jp に送らる。
    2. himalaya では、やはり、コピーが残され(ここまでは順調)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる(!)。
    3. alps では、コピーが残され(2回目)、himalaya に送られる。
    4. himalaya では、コピーが残され(2回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
    5. alps では、コピーが残され(3回目)、himalaya に送られる。
    6. himalaya では、コピーが残され(3回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
    7. alps では、コピーが残され(4回目)、himalaya に送られる。
    8. himalaya では、コピーが残され(4回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
    9. ...
    このような電子メールのピンポンが、永遠に続く。実際には、電子メールの転 送には上限が設定されているので、その上限に達した段階でエラーになって止 る。

    3ヵ所以上でこの設定をしたとすると、中継される度にメールが増殖する。

    \loginname の機能を使っていなかったとすると、コピーは 残らないが、メールが行き来するだけで、どこにも届けられずにエラーになる。

    ~/.forward の設定をしたら、必ず自分で自分あてに電子メールを出 して届くかテストすること。~/.forward の設定を間違えると、エラー のメールも届かなくなるので、エラーが起こっていることさえわからなくなる。

    ~/.forward の機能は、もともとは、sendmail という種類のMTA の機 能である。他の MTA (qmail, postfix)でも使えるように設定していることが多い。

    ◆電子メールをプログラムに転送する

    ~/.forward の応用として、他のアドレスに電子メールを転送するの ではなく、(サーバ上で実行される)プログラムに転送する機能がある。すな わち、(サーバ上で)プログラムを実行して標準入力に電子メールの内容を与 えるという機能がある。これには、次のように~/.forwardに書く。
    "| /program/path/name arg1 arg2 arg3 ... argn" 
    
    このように、| に続いて、プログラムのパス名と引数を書き、 全体を "" で括る。

    この機能を使って、受け取った電子メールを自動的に分類したり、 spamメール を排除したりすることができる。たとえば、MH の slocalやprocmail と呼ば れているプログラムがこの機能を使っている。

    ■実習

    実習時間中には、以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

    ★練習問題(24) emacsの練習

    手引き3.1節−3.3節、本ページ、Unix Super Text 12章を参照して、 それに記述されている機能を確認しなさい。

    ★練習問題(25) emacsチュートリアル

    Emacs のチュートリアルを行いなさい。 開始時刻と終了時刻が必要になるので、必ずメモしなさい。

    ★練習問題(26) emacsチュートリアル(英語)

    英語版の Emacs のチュートリアルを行いなさい。キー・バインディングの意 味が意味がよくわかり、すぐに覚えられる。

    開始時刻と終了時刻が必要になるので、必ずメモしなさい。

    ★練習問題(27) iTermの設定

    漢字コードとして EUC が標準になるように、iTerm を設定しなさい。 また、フォントの大きさやウインドウの大きさを好みのものに調整しなさい。

    ★練習問題(28) Auqa版のEmacsの実行

    MacOSX でウインドウを開くEmacs(Aqua版)を実行しなさい。DockのEmacs のア イコンをシングルクリック、または、または、「アプリケーション」内の Emacs.app をダブルクリックする。 シェルから open /Applications/Emacs.app でもよい。

    ★練習問題(29) iTerm内でEmacsの実行

    iTerm の内部で Emacs を実行しなさい。 iTerm を実行し、シェルのプロンプトが表示されたら、 次のように打つ。
    % emacs [←]
    
    「%」はプロンプトなので打たなくてもよい。

    ★練習問題(30) X Window (X11)でEmacsの実行

    X Window System (X11) で Emacs を実行しなさい。

    まず、X11 を実行する。Dock のアイコンをシングルクリック、 または、「ユーティリティの」の「X11.app」をダブルクリックする。

    端末が一個開かれる。この中で次のように打つ。

    % emacs [←]
    

    次の方法と比較しなさい。

    % emacs -nw [←]
    

    ★練習問題(31) 漢字コードの変換

    漢字のテキストを Emacs で作成(C-x C-f)しなさい。そして、次の機能を使っ て、保存されているテキストの漢字コードをいくつか変更して保存しなさい。
    M-x set-buffer-file-coding-system [←]
    Emacsと文字コードで説明したように、 文字コードとして、euc-jp-unix, iso-2022-jp-unix, shift_jis-unix を 切り替えて、保存(C-x C-s)しなさい。

    作成したテキスト・ファイルを、Web ブラウザで表示しなさい。Web ブラウザ では、文字のエンコーディングを変えて、その通りになっているかを調べなさ い。

    ★練習問題(32) MacOSX テキストエディット

    MacOSX に付属のテキストエディタ「テキストエディット.app(TextEdit.app)」 を使ってみなさい。

    「テキストエディット.app」は、プログラムは、「アプリケーション」の中に ある。アプリケーションは、Finder で Shift+Command+A と打つか、「移動」 メニューから「アプリケーション」を選ぶ。次のように端末からコマンドを打っ てもよい。

    % open /Applications/TextEdit.ap [←]
    

    Emacs で保存したファイルを「テキストエディット.app」で開くとどうなるか 調べなさい。逆に、「テキストエディット.app」で保存したファイルをEmacs で開くとどうなるか調べなさい。

    どの文字コードなら「テキストエディット.app」で開けるかしらべなさい。ま た、改行コードがどうなっているかを調べなさい。

    ★練習問題(33) ls,ls -lによる観察

    作成したファイルのファイル名を ls で表示しなさい。 ls -l で、属性を表示しなさい。ファイルのバイト数を調べなさい。 文字数とバイト数の関係を調べなさい。 文字コードよりバイト数が変化するか調べなさい。

    ★練習問題(34) catによる観察

    作成したファイルを cat コマンドで表示しなさい。 文字コードを変更して、表示しなさい。

    手引き2.2.9節参照。

    ★練習問題(35) lvによる観察

    作成したファイルを lv コマンドで表示しなさい。 文字コードを変更して、表示しなさい。

    lvコマンドは、文字コードを EUC に変換して画面に表示する機能がある。

    手引き2.2.10節。

    ★練習問題(36) .forwardの設定

    coins 以外に日常的に読み書きするメール・アカウントがある 人は、.forward を設定して、転送するように設定しなさい。 設定が完了したら、必ずテストして、うまく動いていることを 確認しなさい。 メールがループしないことを確かめなさい。

    ★練習問題(37) Mew を IMAP で利用する

    Mew を IMAP で利用可能にしなさい。まず、次の記述を ~/.emacs に追加し、一度、Emacs を終了しなさい。
    (setq mew-proto "%")
    (setq mew-imap-delete nil)
    (setq mew-imap-server "mail.coins.tsukuba.ac.jp")
    
    Emacs を一度終了し、もう一度、実行した後、次のように打つ。
    M-x mew [←]

    一番最初に実行した時には、次のようなメッセージが表示される。

    Type '3Z' to collect IMAP folders!
    
    この場合、次のようにと打つ。
    3Zdnl
    
    さらに、次のように聞かれたら、リターンを打つ。
    IMAP case value (default): [←]
    また、パスワードを打つ。

    g でフォルダを選択する。 IMAPのフォルダの名前は、「+フォルダ名」ではなく、「%フォルダ名」。

    s でフォルダを表示する。この場合、sync を選ぶと他のメール・リーダと同様 に IMAP のフォルダを表示する。

    Range (update): sync [←]
    

    ■課題

    次のファイルを次のいずれかの方法で自分のホーム・ディレクトリ、 または、その下の作成したディレクトリにコピーしなさい。 そして、そのファイルの指示に従い、内容を埋めなさい。エディタとしては、 今日の課題では、Emacs を使いなさい。

    作成したファイルを、 レポート提出ページから提出しなさい。

    (10) 次の Web ページを開き、指示に従い、各自のページを埋めなさい。 https://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2006/hiki/?A20060502

    この URL の先頭は、https (sがある) で始まる。これは、通信路が暗号化され ていることを意味する。このページを表示するには、ユーザ名とパスワードが 求められる。その時には、coins のコンピュータにログインするために使うユー ザ名とパスワードを使いなさい。


    Last updated: 2006/05/16 17:37:31
    Yasushi Shinjo / <yas@is.tsukuba.ac.jp>