システム


起動時処理フロー

type: Tips
起動時の処理フローです。$XYZZY/xyzzy.exeを起動すると、最初はinit.cc
  から $XYZZY/lisp/startup.lが呼び出されます。以降の主なフローは以下
  のとおりです。
  
  init.cc: 
    1. startupをload-library 
       startup.l: 
        1. loadupをload-library 
           loadup.l: 
            1. estartupをload-library 
             (estartup.lで、e:startupを定義) 
            2. historyをload-library 
             (history.lで、load-history-fileを定義) 
            3. app-menuをload-library 
             (app-menu.lで、init-app-menusを定義) 
            4. siteinitをload-library 
    2. ダンプが未だならダンプ 
    3. e:startupを実行 
       estartup.lのe:startup: 
        1. フレームを初期化 
        2. *pre-startup-hook*を実行 
        3. .xyzzyを実行 
        4. ヒストリを初期化 
         (history.lのload-history-fileで、*load-history-hook*を実行) 
        5. メニューを初期化 
         (app-menu.lのinit-app-menusで、*init-app-menus-hook*を実行) 
        6. *scratch*を作成
        7.引数解析
          (process-command-lineから、*command-line-mailto-hook*とか
           *process-command-line-hook*を実行)
        8. *post-startup-hook*を実行 
  
まとめると、起動時にユーザが変更可能な部分は、以下の順番で実行さ
れます。

  1. $XYZZY/site-lisp/siteinit.l
  2. *pre-startup-hook*
  3. ~/.xyzzy
  4. *load-history-hook*
  5. *init-app-menus-hook*
  6. *command-line-mailto-hook*(-mailtoがある場合)
  7. *process-command-line-hook*(不明なオプションがある場合)
  8. *post-startup-hook*

[ Intro | 目次 | 索引 | 目的別 | システム ]

xyzzy-dumped-p

type: Function
arguments: xyzzy-dumped-p
package: editor
file: builtin.l
起動時にxyzzyがダンプ済みかどうかを返します。

  t     ダンプ済み
  nil   ダンプ済みではない

ダンプ作業をしても再起動するまでは戻り値はtになりません。

SeeAlso: dump-xyzzy
[ Intro | 目次 | 索引 | 目的別 | システム ]

write-registry

type: Function
arguments: write-registry SECTION KEY VALUE
package: editor
file: builtin.l
レジストリに書き込みます。

  SECTION : セクションを指定します。
  KEY     : キーを指定します。
  VALUE   : 値を指定します。

使用例:
  ;;; HKEY_CURRENT_USER\Software\Free Software\Xyzzy の下にデータを書き込む
  (write-registry "software\\chombo\\altime" "aaa" 64)

  以下のように書き込まれます。
-----
REGEDIT4

[HKEY_CURRENT_USER\Software\Free Software\Xyzzy\software\chombo\altime]
"aaa"=dword:00000040
-----

SeeAlso: read-registry
[ Intro | 目次 | 索引 | 目的別 | システム ]

version-up-xyzzy

type: Function
arguments: version-up-xyzzy &rest ARGS
package: editor
file: verup.l
亀井さんが配布しているxyzzyのアーカイブファイルをxyzzyがインストールされている
ディレクトリに展開します。
別途、ダンプファイルの再作成をする必要があります。

SeeAlso: dump-xyzzy
[ Intro | 目次 | 索引 | 目的別 | システム ]

user-name

type: Function
arguments: user-name
package: editor
file: builtin.l
Windowsのログオンユーザー名を返します。

SeeAlso: machine-name
[ Intro | 目次 | 索引 | 目的別 | システム ]

stop-xyzzy-server

type: Function
arguments: stop-xyzzy-server
package: editor
file: builtin.l
xyzzycli.exeに反応しないようにします。

SeeAlso: start-xyzzy-server
[ Intro | 目次 | 索引 | 目的別 | システム ]

start-xyzzy-server

type: Function
arguments: start-xyzzy-server
package: editor
file: builtin.l
stop-xyzzy-serverの逆です。複数のxyzzy-serverが立ち上がっている状態で
xyzzycli.exe が実行された場合、最後にアクティブになったほうが選択され
るようです。

SeeAlso: stop-xyzzy-server
[ Intro | 目次 | 索引 | 目的別 | システム ]

software-version

type: Function
arguments: software-version
package: lisp
file: builtin.l
xyzzyのバージョンを返します。

使用例:
  (software-version)
  => "0.2.2.228"

[ Intro | 目次 | 索引 | 目的別 | システム ]

software-type

type: Function
arguments: software-type
package: lisp
file: builtin.l
ソフト名を返します。

使用例:  
  (software-type)
  => "xyzzy"

[ Intro | 目次 | 索引 | 目的別 | システム ]

si:system-root

type: Function
arguments: system-root
package: system
file: builtin.l
xyzzyがインストールされているパスを返します。

※userパッケージもeditorパッケージもsystemをuse-packageしていないので、
  呼び出すときはsi:を付けて、(si:system-root)としなければいけません。

使用例:
  (load (merge-pathnames "lisp/henmi/foo.l" (si:system-root)))

SeeAlso: user-homedir-pathname
[ Intro | 目次 | 索引 | 目的別 | システム ]

si:getenv

type: Function
arguments: getenv VARIABLE
package: system
file: builtin.l
環境変数の値を取り出します。

  VARIABLE:環境変数名

使用例:
  ;;; 環境変数PATHを取り出して、個々のPATHに分割する。
  (split-string (si:getenv "PATH") #\;)
  => ("c:\\usr\\local\\bin" "C:\\WINNT\\system32" "C:\\WINNT" ...)

SeeAlso: user-name
[ Intro | 目次 | 索引 | 目的別 | システム ]

si:dump-image-path

type: Function
arguments: dump-image-path
package: system
file: builtin.l
読み込んだダンプファイルのパスを返します。

使用例:
  (si:dump-image-path)
  => "C:/Program Files/xyzzy/xyzzy.w2k"

SeeAlso: dump-xyzzy
[ Intro | 目次 | 索引 | 目的別 | システム ]

read-registry

type: Function
arguments: read-registry SECTION KEY &optional ROOT
package: editor
file: builtin.l
レジストリから読み込みます。

  SECTION : セクションを指定します。
  KEY     : キーを指定します。
  ROOT    : ルートキーを指定します。
     nil             HKEY_CURRENT_USER\Software\Free Software\Xyzzy
     :current-user   HKEY_CURRENT_USER
     :classes-root   HKEY_CLASSES_ROOT
     :local-machine  HKEY_LOCAL_MACHINE
     :users          HKEY_USERS

使用例:
  ;;; HKEY_CURRENT_USER/software/Microsoft/devstudio/5.0/Recent File List/project1 の値を読む
  (read-registry "software\\Microsoft\\devstudio\\5.0\\Recent File List" "project1"  :current-user)

[ Intro | 目次 | 索引 | 目的別 | システム ]

os-platform

type: Function
arguments: os-platform
package: editor
file: builtin.l
OSの種類を返します。OSが95とNTで動作を変えたいときなどに使います。返され
る値は文字列ではなくシンボルです。

参考:
  OS            シンボル
  ----          ----
  Windows???    win32s
  Windows95     windows-95
  Windows98     windows-98
  WindowsMe     windows-me
  WindowsNT     windows-nt
  Windows2000   windows-2000
  WindowsXP     windows-xp

使用例:
  (os-platform)
  => windows-nt

SeeAlso: machine-name
[ Intro | 目次 | 索引 | 目的別 | システム ]

os-minor-version

type: Function
arguments: os-minor-version
package: editor
file: builtin.l
OSのマイナーバージョンを返します。

使用例:
  (os-minor-version)
  => 0

SeeAlso: machine-name
[ Intro | 目次 | 索引 | 目的別 | システム ]

os-major-version

type: Function
arguments: os-major-version
package: editor
file: builtin.l
OSのメジャーバージョンを返します。

使用例:
  (os-major-version)
  => 4

SeeAlso: machine-name
[ Intro | 目次 | 索引 | 目的別 | システム ]

os-csd-version

type: Function
arguments: os-csd-version
package: editor
file: builtin.l
Windows NT 4.00.1381 + Service Pack 3 の場合

使用例:
  (os-csd-version)
  => "Service Pack 3"

[ Intro | 目次 | 索引 | 目的別 | システム ]

os-build-number

type: Function
arguments: os-build-number
package: editor
file: builtin.l
Windows NT 4.00.13811 + Service Pack 3 の場合

使用例:  
  (os-build-number)
  => 1381

[ Intro | 目次 | 索引 | 目的別 | システム ]

open-network-stream

type: Function
arguments: open-network-stream BUFFER HOSTNAME SERVICE &key :incode :outcode :eol-code
package: editor
file: builtin.l
ホストのポートとのTCP接続を開きます。
成功すれば接続をBUFFERのサブプロセスとして返します。

使用例:
  ;;; http://www.yahoo.co.jp/を取得してみる。
  (progn
    (defun filter (proc in) (insert in))
    (setq proc (open-network-stream (selected-buffer) "www.yahoo.co.jp" 80))
    (process-send-string proc "GET / HTTP/1.0\n\n")
    (set-process-filter proc 'filter))
  => HTTP/1.1 200 OK
     Server: ...

SeeAlso: connect
[ Intro | 目次 | 索引 | 目的別 | システム ]

machine-name

type: Function
arguments: machine-name
package: editor
file: builtin.l
マシン名を返します。

使用例:
  ;;; マシン名を返します。
  (machine-name)
  => "WS4849"

  ;;; PCによって、den8やdiffのインストールディレクトリが違っているので、
  ;;; 切り替えたりできます。
  (defun my-directory-setup ()
    (let ((x (machine-name)))
      (setq *diff-command-name*
            (cond ((string= x "TOMOYO") "c:/Cygnus/diff")
                   (t "c:/z/tools/diff")))
      (setq *den8-directory*
            (cond ((string= x "KANA") "D:/1gou-ki/den8_321")
                   (t "c:/z/den8_321")))))

SeeAlso: user-name
[ Intro | 目次 | 索引 | 目的別 | システム ]

get-windows-directory

type: Function
arguments: get-windows-directory
package: editor
file: builtin.l
Windowsフォルダへのパスを返します。

使用例:
  (get-windows-directory)
  => "C:/WINDOWS/"

SeeAlso: get-system-directory
[ Intro | 目次 | 索引 | 目的別 | システム ]

get-window-handle

type: Function
arguments: get-window-handle &optional WINDOW
package: editor
file: builtin.l
指定されたウィンドウのハンドルを返します。

  WINDOW : ハンドルを返すウィンドウを指定します。

使用例:
  ;;; カーソルがあるウィンドウのハンドルを返します。
  (get-window-handle (selected-window))

[ Intro | 目次 | 索引 | 目的別 | システム ]

get-system-directory

type: Function
arguments: get-system-directory
package: editor
file: builtin.l
Windowsシステムフォルダまでのパスを返す。

使用例:
  (get-system-directory)
  => "C:/WINDOWS/System32/"

SeeAlso: get-windows-directory
[ Intro | 目次 | 索引 | 目的別 | システム ]

get-special-folder-location

type: Function
arguments: get-special-folder-location PLACE
package: editor
file: builtin.l
いろいろなフォルダへのパスを返します。

  PLACE : フォルダの種類を指定します。
    :start-menu
    :send-to
    :desktop
    :personal
    :programs
    :recent
    :startup
    :templates

参考:
  WindowsAPIのGetSpecialFolderLocation

SeeAlso: get-windows-directory
[ Intro | 目次 | 索引 | 目的別 | システム ]

get-clipboard-data

type: Function
arguments: get-clipboard-data
package: editor
file: builtin.l
クリップボードの内容を文字列として取り出します。

SeeAlso: copy-to-clipboard
[ Intro | 目次 | 索引 | 目的別 | システム ]

find-load-path

type: Function
arguments: find-load-path FILENAME
package: lisp
file: builtin.l
*load-path*からファイルを検索しそのフルパスを返します。

使用例:
  (find-load-path "wip/ftp.l")
  => "C:/APPLICATIONS/XYZZY/lisp/wip/ftp.l"
  (find-load-path "siteinit.l")
  => "C:/APPLICATIONS/XYZZY/site-lisp/siteinit.l"

SeeAlso: *load-path*
[ Intro | 目次 | 索引 | 目的別 | システム ]

featurep

type: Function
arguments: featurep FEATURE
package: lisp
file: evalmacs.l
FEATURE が *features* の要素であればそれ以降のリストを返します。
そうでなければ nil を返します。

使用例:
 ;;; process.l より
 (let ((shell (if (featurep :windows-nt) "cmd.exe" "command.com")))
   (defvar *shell* shell)
   (defvar *eshell* shell))

SeeAlso: *features*
[ Intro | 目次 | 索引 | 目的別 | システム ]

etc-path

type: Function
arguments: etc-path
package: editor
file: misc.l
*etc-path*を返します。

SeeAlso: *etc-path*
[ Intro | 目次 | 索引 | 目的別 | システム ]

dump-xyzzy

type: Function
arguments: dump-xyzzy &optional FILENAME
package: editor
file: builtin.l
ダンプファイルをFILENAMEにして作成します。
既に作成されていても上書きします。
FILENAME省略時のファイル名は?(未確認)

SeeAlso: xyzzy-dumped-p
[ Intro | 目次 | 索引 | 目的別 | システム ]

dde-terminate

type: Function
arguments: dde-terminate CHAN
package: editor
file: builtin.l
DDE 対話を終了します。引数 CHAN は DDE チャンネルです。正常に終了した場
合は t、すでに対話が終了していた場合は nil を返します。

  CHAN : チャンネルを指定します。

[ Intro | 目次 | 索引 | 目的別 | システム ]

dde-request

type: Function
arguments: dde-request CHAN DATA RESULT-TYPE
package: editor
file: builtin.l
DDE REQUEST を実行します。

  CHAN        : チャンネルを指定します。
  DATA        : データを指定します。
  RESULT-TYPE : 戻り値の型を指定します。

引数 CHAN は DDE チャンネル、DATA は相手にくらわす文字列です。文字列の内
容は、相手のマニュアルに従ってください。戻り値は DDE の相手が返したもの
を返しますが、RESULT-TYPE の指定によってデータの解釈を以下のようにおこな
います。

  :text   : 通常の文字列を返します。
  :binary : 漢字などを無視して返ってきたデータをそのまま文字列で返します。
  :int8
  :int16
  :int32  : データをそれぞれ 8, 16, 32 ビット整数の配列とみなして整数のリ
            ストで返します。配列の要素が 1 のときは整数値を返します。

戻り値型の指定は、もじらの DDE で遊ぼうと思って作っただけなので、通常は
指定しなくて構いません。

SeeAlso: dde-execute
[ Intro | 目次 | 索引 | 目的別 | システム ]

dde-poke

type: Function
arguments: dde-poke CHAN ITEM DATA
package: editor
file: builtin.l
DDE POKE を実行します。

  CHAN : チャンネルを指定します。
  ITEM : (詳細不明)
  DATA : データを文字列で指定します。

引数 CHAN は DDE チャンネル、DATA は相手にくらわす文字列です。文字列の内
容は、相手のマニュアルに従ってください。dde-poke は t を返します。

SeeAlso: dde-execute
[ Intro | 目次 | 索引 | 目的別 | システム ]

dde-initiate

type: Function
arguments: dde-initiate SERVICE TOPIC
package: editor
file: builtin.l
DDE 対話を確立します。引数 SERVICE はサービス名、 TOPIC はトピックで、
それぞれ文字列型です。なにを指定するかは通信する相手のマニュアルを
参照してください。正常に終了した場合、DDE チャンネルを返します。
以降の通信ではこのDDE チャンネルを使用してください。

SeeAlso: dde-execute
[ Intro | 目次 | 索引 | 目的別 | システム ]

dde-execute

type: Function
arguments: dde-execute CHAN DATA
package: editor
file: builtin.l
DDE EXECUTE を実行します。引数 CHAN は DDE チャンネル、DATA は相手にくら
わすコマンド文字列です。コマンドの内容は、相手のマニュアルに従ってくださ
い。dde-execute は t を返します。

  CHAN : チャンネルを指定します。
  DATA : データを指定します。

なお、DDE 関数では以下の例外が発生する可能性があります。必要であれば例外
を処理してください。

  dde-timeout        タイムアウトしました。
  dde-busy           DDE サーバが BUSY です。
  dde-low-memory     サーバ先行状態です
  dde-no-conv        DDE 対話が確立できません
  dde-not-processed  トランザクションの実行に失敗しました
  dde-server-died    サーバーが終了しました
  storage-error      メモリがありません
  dde-error          よくわかんないけど、とにかくエラーです

SeeAlso: dde-poke
[ Intro | 目次 | 索引 | 目的別 | システム ]

copy-to-clipboard

type: Function
arguments: copy-to-clipboard STRING
package: editor
file: builtin.l
指定された文字列をクリップボードにコピーします。

  STRING : クリップボードにコピーする文字列を指定します。

SeeAlso: get-clipboard-data
[ Intro | 目次 | 索引 | 目的別 | システム ]

connect

type: Function
arguments: connect HOSTNAME SERVICE &key :encoding
package: editor
file: builtin.l
ホストのポートとのTCP接続を開きます。
成功すれば接続へのストリームを返します。

参考:
  ;;; http://www.yahoo.co.jp/を取得してみる。
  (with-open-stream (stream (connect "www.yahoo.co.jp" 80))
    (format stream "GET / HTTP/1.0\n\n")
    (while (setq in (read-line stream nil))
      (insert in "\n")))

SeeAlso: open-network-stream
[ Intro | 目次 | 索引 | 目的別 | システム ]

*process-command-line-hook*

type: Variable
package: editor
file: estartup.l
xyzzy.exeに渡されたオプション引数を判定する際に呼び出されます。
*post-startup-hook*の直前で呼び出されます。

参考:
  (run-hook-with-args-until-success
   '*process-command-line-hook* arg)

SeeAlso: 起動時処理フロー
[ Intro | 目次 | 索引 | 目的別 | システム ]

*modules*

type: Variable
package: lisp
file: evalmacs.l
ロードされたモジュールの一覧が格納されています。
(require "foo")で実際にモジュールを読み込むか否かは*modules*に登録されて
いるかどうかで決まります。モジュールの中で(provide "foo")すると、そのモ
ジュールが*modules*に追加されます。

使用例:
  ;;; モジュールの一覧を見てみる。
  *modules*
  => ( ... )
  (provide "foo")
  => ("foo" ... )
  *modules*
  => ("foo" ... )

SeeAlso: provide
[ Intro | 目次 | 索引 | 目的別 | システム ]

*features*

type: Variable
package: lisp
実装の特徴を表すキーワードをリストとして格納しています。
#+ と #- の評価に影響します。

使用例:
  (+ 2 #+xyzzy 3 #+foo 4)
  => 5
  (push :foo *features*)
  => (:foo :windows-me :windows-98 :xyzzy :ieee-floating-point)
  (+ 2 #+xyzzy 3 #+foo 4)
  => 9
  (pop *features*)
  => :foo
  (+ 2 #+xyzzy 3 #+foo 4)
  => 5

SeeAlso: featurep
[ Intro | 目次 | 索引 | 目的別 | システム ]