Coder Social home page Coder Social logo

xyzzy-022 / xyzzy Goto Github PK

View Code? Open in Web Editor NEW
190.0 190.0 43.0 5.48 MB

xyzzy 0.2.2 系列。有志により開発が継続中です。

Home Page: http://xyzzy-022.github.com

License: MIT License

Shell 0.14% C 26.41% Scheme 0.25% Ruby 0.04% C++ 72.45% Objective-C 0.03% D 0.67%

xyzzy's People

Contributors

ambi avatar bowbow99 avatar coexe avatar furugomu avatar m-takagi avatar miyamuko avatar mumurik avatar snmsts avatar southly avatar splhack avatar wanabe avatar x022235 avatar xyzzy-17-638 avatar youz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xyzzy's Issues

multiframe: 画面端の折り返しがウィンドウ単位でちゃんと動くようにする変更を取り込む

以下の変更を取り込む。

commit 4c1662ee2cafa7a9b150209e9c45392982c51426
Author: mumurik <none@none>
Date:   Mon Feb 6 12:32:32 2012 +0900

    Use b_fold_columns to minimize temporary code.

commit 7b9c522e74d3dd4b7f8e6df14573db59781a0cbb
Author: mumurik <none@none>
Date:   Mon Feb 6 12:32:13 2012 +0900

    fold support done.
    TODO: fix buffer-fold-column related elisp.

commit 1e26b16397716c712d9c3c014abdff2adf260ab9
Author: mumurik <none@none>
Date:   Sun Feb 5 18:37:10 2012 +0900

    tmp commit for folding support.
    before changing Chunk.

commit c031a17294dcdbed89eeddd486351258796464f0
Author: mumurik <none@none>
Date:   Sun Feb 5 14:25:44 2012 +0900

    tmp check-in for multiple frame fold support.
    Before changing parse_fold_line.

経緯

468 名前:465[sage] 投稿日:2012/02/04(土) 09:55:59.04 ID:Fq8+o6lg [2/6]
雑談ですが、フォールディング周りのコード見てるとバッファが保持するんですよね。
これじゃあ縦分割の時もうまく行かないんじゃないか?と思ってウィンドウを縦分割して幅変更すると良くわからない挙動。
どっかの(xyzzy用語での)ウィンドウで計算された値を他のウィンドウでも使う、って挙動っぽい…かな?

469 名前:465[sage] 投稿日:2012/02/04(土) 10:00:31.90 ID:Fq8+o6lg [3/6]
続き:

このウィンドウ縦分割時のフォールディングの挙動ってかつて議論された事あるんですかね?
どういう結論が出たのかがちょっと知りたいのですが。治すとまずい理由があったのかなぁ。
(さすがに今更こういう話はわからんか)

470 名前:名無し~3.EXE[sage] 投稿日:2012/02/04(土) 12:21:38.81 ID:g4pfSV9K
>>469
MLで見たことあるようなと思って探してみたら、こんなのが見つかりました。
ttp://hie.s64.xrea.com/xyzzy/ml/msg03457.html

まだあるかも。


471 名前:465[sage] 投稿日:2012/02/04(土) 13:08:53.40 ID:Fq8+o6lg [4/6]
>>470
おお、サンクス。
バッファローカルな手抜きで実装出来る範囲になってる、って事か。
大した理由は無さそうだしmapにでもしちまうかなぁ。
(削除したフレーム分のゴミがバッファ削除まで残るがまぁいいだろう)

xyzzy Part17
http://toro.2ch.net/test/read.cgi/win/1303662374/468-471

multiframe: GhostWindow 対応を取り込む

以下の修正を取り込む。

514 名前:465[sage] 投稿日:2012/02/13(月) 22:56:31.19 ID:5QKPlGS2
オリジナルのxyzzyでも
(setq a 1)
(while (< a 10000)
(setq a (+ 1 a)))


とかをevalして他のアプリをアクティブにして、5~6秒待ってghost windowになった後にxyzzyに戻すとC-gが効かないですね。
multiframe版は適当に対応してしまいますが、本来はDisableGhostしてしまう方が筋はいいのかしら?
commit ed49f0f296ee3e326aca93a8a7cb6529f8730bfc
Author: mumurik <none@none>
Date:   Mon Feb 13 22:58:08 2012 +0900

    C-g related fix. Quit thread should be 1.
    quit_thread_id is application global, not frame local.
    Ghost window handling.

FFI: GetLastError の安全な取得

背景

FFI で Win32 API を呼び出したあとにエラーコードを取得するために
GetLastError を FFI で呼び出す場合がある。

現状は上手く動いているように見えるが、FFI で Win32 API を呼んでから
GetLastError を呼び出す前に、どこかでエラーコードが上書きされる
可能性があるのでロバストではない。

FFI の処理の中で関数を呼び出すごに GetLastError の結果を
保存しておきあとで取得できるようにする。

仕様

  • si:*last-win32-error
  • c:last-win32-error

備考

  • CRT の errno については追加しない

参考

アクセッサの高速化 (構造体、aref)

バイトコードを追加し、コンパイラで最適化することで構造体のアクセッサを高速化する。

ただしバイトコードを追加すると前方互換性がなくなるので、
実際に入れるかは要検討。

#0.2.2.236 でバイトコンパイルした *.lc ファイルは 0.2.2.235 では実行できない。
#「バイトコードが壊れています」というエラーになる

修正内容

  • 以下の関数に対応するバイトコードを追加する
    • si:*index-slot-value
    • si:*slot-value
    • si:*slot-index
    • si:*set-index-slot-value
    • si:*set-slot-value
    • aref
  • 構造体のアクセッサに optimize-form を設定する

ベンチマーク

http://d.hatena.ne.jp/bowbow99/20101128/1290949006
でのベンチマーク結果は以下のとおり。

| Form                                | before[ms] | after[ms] | rate
---------------------------------------------------------------------
| (second list)                       |      78.0  |      93.0 | 0.84
| (cadr list)                         |      93.0  |      78.0 | 1.19
| (getf plist :y)                     |     219.0  |     219.0 | 1.00
| (cdr (assoc :y alist))              |     327.0  |     343.0 | 0.95
| (gethash :y hash-table)             |     234.0  |     234.0 | 1.00
| (gethash :y hash-table-eq)          |     219.0  |     234.0 | 0.94
| (gethash :y hash-table-eql)         |     218.0  |     234.0 | 0.93
| (gethash :y hash-table-equal)       |     234.0  |     234.0 | 1.00
| (aref vec 1)                        |     203.0  |     125.0 | 1.62
| (svref vec 1)                       |      94.0  |      93.0 | 1.01
| (struct-y struct)                   |     468.0  |      78.0 | 6.00
| (system:*slot-value struct :y)      |     202.0  |      94.0 | 2.15
| (system:*index-slot-value struct 1) |     203.0  |      94.0 | 2.16
| (struct-vec-y struct-vec)           |     359.0  |      93.0 | 3.86
| (elt struct-vec 1)                  |      94.0  |      94.0 | 1.00
| (struct-list-y struct-list)         |     405.0  |     125.0 | 3.24
| (elt struct-list 1)                 |     125.0  |     124.0 | 1.01

aref は 1.6 倍、struct-y は 6 倍速くなった。

multiframe: unicode マッピングファイルを取り込む

multiframe 版の以下の変更を取り込む。

commit d6bb61082bedd9b38ce78d0f72d96bd846bf1c8f
Author: mumurik <[email protected]>
Date:   Thu Feb 23 15:08:08 2012 +0900

    Add unicode related files.

    Once original auther wonder whether these files are re-distributable
    from the license point of view, so he's not included these files.
    But now it's clear that these files are MIT license compatible.
    So I include these files and update .gitignore.
    Also, update gen-ucs2tab.cc for "for loop" variable problem.

defpackage のバグ修正

以下の問題を修正する。

  • :shadowing-import-from 2 つと :shadow を書くとエラー

    user> (defpackage :hoge
            (:use :lisp)
            (:shadowing-import-from :ansify
             :typecase)
            (:shadowing-import-from :ansi-loop
             :loop)
            (:shadow
             :car))
    :shadowと:shadowing-import-fromでcarが2回以上指定されています

    https://gist.github.com/1305705

  • パッケージが見つからない場合のエラーメッセージが不正

    user> (defpackage :hoge
            (:use :no-such-package))
    パッケージが見つかりません: nil

文字列のバイトサイズ取得 API の追加

背景

文字列を UTF-8 で HTTP で送信したい場合に、Content-Length にバイトサイズを
設定する必要があるが、文字列のバイトサイズを効率的に取得する API がない。

以下は http-client のソースの一部である。

(defun string-byte-size (str)
  (1- (si:chunk-size (si:make-string-chunk str))))

0.2.2.235 では si:make-string-chunk するか convert-encoding-to-internal で
再変換するしかなくメモリを無駄に使用する。

user> (setf utf8 (convert-encoding-from-internal *encoding-utf8n* "abcあいう"))
"abc縺ゅ>縺\x86"

user> (length utf8)
8

user> (si:chunk-size (si:make-string-chunk utf8))
13 ;; si:make-string-chunk が NULL 文字を追加する

user> (setf utf8bin (convert-encoding-to-internal *encoding-binary* utf8))
"abc\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86"

user> (length utf8bin)
12

仕様

以下の API を追加する。

  • si:octet-length STRING &key ENCODING START END => bytesize

参考

キーワードファイル更新

デフォルトで付いてくるキーワードファイルを更新する。

  • C
    • C99 対応
  • C#
    • C# 5.0 対応
  • C++
    • C++ 11 対応
  • CSS
    • CSS level 3 対応
  • HTML
    • HTML5 対応
  • Perl
    • Perl 5 対応
  • Java
    • Java5 対応
  • Pascal
    • なんか色々追加
  • Sql
    • なんか色々追加
    • DBMS 固有のキーワードを追加 (SQLServer, Oracle, MySQL, PostgreSQL)

以下のファイルはまた今度。

  • Basic
  • FORTRAN
  • IDL
  • TeX

multiframe: USB 起動処理を取り込む

以下の変更を取り込む。

commit 299545c1e5bca9779d8c9bc2e9c24dda6a69501a
Author: mumurik <[email protected]>
Date:   Sat Feb 25 10:28:05 2012 +0900

    Support USB boot.

    ini file priority:
    1. command line argument
    2. environment variable "XYZZYINIFILE"
    3. xyzzy.ini file inside the same dir of xyzzy.exe
    below here is the same as previous version.

    Then, I add 1 section [USBInit] in ini file.
    There are 2 variables:
    - "usbHomeDir" specify home directory relative to xyzzy.exe dir
    - "usbConfigDir" specify config directory relative to xyzzy.exe dir

    If the specified directory does not exist, just ignore these variable.
    If these variable exists and specified folder exists, use them as home directory and config directory.

    Also, archiver search dll from lib\\ folder of the same directory of xyzzy.exe.
    (previous commit).

commit ed83225d433e99e120b59ab3cfc987a52d8eafe0
Author: mumurik <[email protected]>
Date:   Fri Feb 24 22:15:15 2012 +0900

    Merge of USB boot patch first phase.

    Add archiver dll load path ($MODULEPATH/lib).

リリーススクリプトの整備

リリース作業の殆どを自動化できるようにスクリプトを作成する。
スクリプトでやるべき事。

ビルド処理

  1. タグを打つ
  2. タグを push
  3. タグを clone
  4. ビルド
  5. lisp/*.l をバイトコンパイル
  6. zip で固める

以下はまた今度

  1. zip を GitHub にアップロード
  2. GHM で書かれたリリースノートを普通の Markdown 変換して
    xyzzy-022.github.com にコミット
  3. xyzzy-022.github.com を push

nanri-master: ブランチの変更をマージする

https://github.com/southly/xyzzy.src/tree/nanri-master

取り込まなかった修正は以下のとおり。

ccb97f1 xyzzy.src : modify do-auto-fill.
1f2b117 Revert "xyzzy.src : modify do-auto-fill."

aed3d2b xyzzy.src : modify buffer size in detecting char-encoding.
1cb7695 Revert "xyzzy.src : modify buffer size in detecting char-encoding."

edd427a xyzzy.src : prevent the process working set from being trimmed.
cfb8181 Revert "xyzzy.src : prevent the process working set from being trimmed."

1eb1bb9 xyzzy.src : fix for VC10.
e484281 xyzzy.src : fix format "~T".
1201b0b Revert "xyzzy.src : fix format "~T"."
aaff81f Revert "xyzzy.src : fix for VC10."

直後に Revert している。

72fc217 xyzzy.src : modify start point in buffer-menu.
c115395 xyzzy.src : modify tags-setup-buffer.

必要性がよく分からない。

651897f xyzzy.src : modify edict-lookup-word.

背景を理解したので #141 で取り込んだ。

e3ec8de xyzzy.src : modify make-tags-file-dialog.

背景を理解したので #125 で取り込んだ。

5670289 xyzzy.src : add repl.

まだ実験的すぎる。

9a13581 xyzzy.src : fix wheel icon.

何が変わっているのかよく分からない。

6426764 xyzzy.src : fix format "~n@A".

影響が大きすぎる。(#2)

Common Lisp 互換の文字を追加

背景

  • 一部の文字が CL と異なるため、CL のライブラリを利用するときに書き換えが必要で面倒

修正

以下の CL の文字も追加する。
文字名の大文字小文字の違いは無視されるため #¥Tab と #¥TAB は同じなので追加しない。

;;   Common Lisp    xyzzy Lisp    char-code
;;   --------------------------------------
;;   #\Backspace    #\C-h                 8
;;   #\Tab          #\TAB                 9
;;   #\Newline      #\LFD                10
;;   #\Linefeed     #\LFD                10
;;   #\Page         #\C-l                12
;;   #\Return       #\RET                13
;;   #\Space        #\SPC                32
;;   #\Rubout       #\DEL               127

https://gist.github.com/1202374

VIsualStudio のプロジェクト登録

nmake によるビルドではなく VIsualStudio のプロジェクトファイルを登録する。

multiframe 版の VIsualStudio 対応は makefile プロジェクトで行っており中途半端。
unicode 版のやり方を参考にする。

http://xyzzy.codeplex.com/SourceControl/list/changesets

ゴール

  • VisualStudio のビルドボタン一発でビルド、リビルド、クリーン可能
  • msbuild でコマンドラインからビルド、リビルド、クリーン可能
  • VisualStudio からデバッグ実行可能 (lisp/, etc/ フォルダも自動でコピー)
  • いずれは Makefile は削除する

reference.xml を取り込む

今後本体に API が追加されるので reference.xml を本体に取り込む。

  • reference.xml
    • NetInstaller で入手可能な最新の 2007.12.25 版を取り込む。
  • reference.txt、reference.chm, reference.html
    • reference.xml から自動生成するので取り込まない。
  • lisp keyword file
    • これも自動生成するものだが開発中にも使いたいので etc/ 配下にコミットする
    • xy-reference も取り込む?

http://xyzzy.s53.xrea.com/wiki/index.php?%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9

開発者向けのドキュメント整備

主に開発者向けへのドキュメントを用意する。

  • xyzzy とは
    • ゆるめに
  • xyzzy 0.2.2 系列とは
    • 0.2.2.235 との後方互換性を最大限に重視したバージョン
      • 前方互換性はあまり重視しない
      • xyzzy は過去に作られた資産のうちメンテされていないものが結構ある
      • これらを修正せずに動作できることが絶対条件
      • そのためにはたとえバグでも直さない
    • 安定性も重視
      • 十分テストしてからリリースする
    • 新規 API はいろいろ追加していく
      • 新規 API に依存したアプリが 0.2.2.235 で動かないのは当たりまえ
      • 前方互換性は気にしない
    • Common Lisp との互換性を重視
      • ただし、0.2.2.235 との互換性が保たれる場合のみ
      • CL と動作が違う部分で過去の資産に影響を与えなさそうなものは修正する
      • CL と動作が違う部分で過去の資産に影響を与えるものは、
        common-lisp パッケージまたは common-lisp-user パッケージで定義する
    • multiframe 版や unicode 版のうち互換性に影響を与えない修正は取り込む
    • multiframe 版との互換性はあまり気にしない
      • そもそも multiframe 版が 0.2.2.235 と互換性がないから
    • multiframe 版 (0.2.3 系列) との違い
      • 0.2.2.235 との互換性を重視
  • 開発
    • GitHub organization
      • 開発したい人は organization に追加します
    • A successful Git branching model
      • topic ブランチ、develop ブランチ、release ブランチ、master ブランチ
      • master ブランチは常にリリース可能な状態に置く
    • ticket ドリブン
    • バグ報告の仕方
    • コミットログ (Git 流に従うが日本語で良い)
    • ChangeLog は書かない
    • 肉の日リリース
    • サポート OS
      • XP 以降, 2000 以下はサポート切り捨て
  • 連絡先
    • twitter
    • mail

Windows 7 タスクバー対応: アプリケーション ID の設定

まずは最低限の対応から行う。

  • xyzzy 本体でアプリケーション ID を設定する
  • si:*app-user-model-id でアプリケーション ID を返す
  • create-shotcut:appid 引数を追加し、アプリケーション ID を指定して
    ショートカットを作成できるようにする

xyzzycli.exe は起動したらすぐに終了するので、これにアプリケーション ID を
設定しても意味が無い。

背景

331 名前:名無し~3.EXE[sage] 投稿日:2011/10/10(月) 08:14:04.79 ID:e2rPDniz
Windows7でタスクバーにピン止めして
ジャンプリストから履歴を使いたいんですが
xyzzycli.exeを登録すると、xyzzy.exeが実行されて
タスクバーに両方のアイコンが並んでしまいます
xyzzycli.exeから開く挙動のままで
アイコンを一つに抑える方法はありませんか?

xyzzy Part17
http://toro.2ch.net/test/read.cgi/win/1303662374/331

x64 マシンで c:/Windows/sytem32/drivers/etc/hosts が開けない

truename がバグっているので修正する。

user> (truename "C:/Windows/System32/drivers/etc/hosts")
"C:/Windows/System32/drivers//hosts"

なお、C:/Windows/System32/drivers/ から etc/ の補完ができないのは
C:/Windows/SysWoW64/drivers/etc を作成してもらうことで回避してもらう。
#特別な処理は入れない


multiframe 版はよく分からない修正をしているので参考にしない。

mumurik/xyzzy#25
mumurik/xyzzy#12
mumurik/xyzzy#2
https://bitbucket.org/mumurik/xyzzy/issue/22/no-init-file

lisp キーワードファイルを同梱する

lisp のキーワードファイルが何故かデフォルトでは同梱されていないので追加する。

基本的に今コミットされている reference.xml から xy-reference で生成したものを追加するが、
なんかあれば色指定が微妙だった気がするのでそこは見直す。

SHA2 対応

SHA1 はあるが SHA2 がないので以下の関数を追加する。

  • si:sha-224
  • si:sha-256
  • si:sha-384
  • si:sha-512

追加 API のリファレンス記述

追加された API のリファレンスを記述する。

  • si:putenv
  • ed:get-buffer-colors
  • ed:deleted-window-p
  • make-process の :show パラメータ

Windows 7 タスクバー対応: jumplist API

ジャンプリストを操作する API を提供する。

  • IE9 のジャンプリスト API のように任意の項目をジャンプリストに追加できるようにする
  • use-local-menu のようにバッファごとにジャンプリストを持てるようにする
  • xyzzy 内で開いたファイルも「最近使ったファイル]に表示されるようにする
    • SHAddToRecentDocs は関連付けの設定をしておく必要があるので、まずインストーラ対応が必要

参考

http://msdn.microsoft.com/ja-jp/library/gg491724(v=vs.85).aspx
http://msdn.microsoft.com/ja-jp/magazine/dd942846.aspx
http://archive.msdn.microsoft.com/WindowsAPICodePack

machine-type, machine-version, machine-instance を実装

Common Lisp の machine-type, machine-version, machine-instance を実装する。

  • machine-type
    • "x86", "x64", "IA64" のどれかを返す
  • machine-version
    • 環境変数 PROCESSOR_IDENTIFIER を返す
    • 定義されていなければ nil
  • machine-instance
    • コンピュータ名を返す (ed:machine-name と同じ)

他の実装

;; clisp
[1]> (values (machine-type) (machine-version) (machine-instance))
"PC/386" ;
"PC/686" ;
"gap [192.168.0.5]"

;;; SBCL
* (values (machine-type) (machine-version) (machine-instance))
"X86"
NIL
"GAP"

;;; GCL
>(values (machine-type) (machine-version) (machine-instance))
NIL
NIL
NIL

;;; CCL
? (values (machine-type) (machine-version) (machine-instance))
"x86"
"Intel64 Family 6 Model 23 Stepping 10, GenuineIntel"
"gap"

CCL の machine-version は PROCESSOR_IDENTIFIER を返している。

アバウト画面に git の情報を追加

アバウト画面に表示するバージョンは software-version-display-string で取得しているので、
この関数で git の情報を付けて返すようにする。

>git describe --tag --dirty
v0.2.2.235-179-gaefba1c

ただし、リリース版では従来通りの文字列を返すようにする。

参考: http://d.hatena.ne.jp/higepon/20091230/1262176205#c

互換性に関する考慮

  • software-version-display-string はその名のとおり表示用のバージョン文字列を返す関数なので
    ここに情報を追加しても通常は問題ない
  • バージョンを見て処理を変えたい場合は、通常は software-version を利用していることが期待できる
  • タグからひとつもリビジョンが進んでいない場合は従来通りの文字列を返すようにするので、
    リリース版では書式が変更されることはない

defstruct のバグ修正

以下の問題を修正する。

  • print-function が事前に定義されていないとエラーになる

    user> (defstruct (foo
              (:print-function print-foo)))
    関数が定義されていません: print-foo
  • 継承した print-function があるとバイトコンパイルできない

    ;; a.l
    (defstruct (foo
                (:print-function (lambda (o s p) (format s "<foo>")))))
    (defstruct (bar
                (:include foo)))
    user> (compile-file "a.l")
    不正な関数です: #<lexical-closure: (anonymous)>
  • print-function を再定義しても反映されない

    user> (defun print-foo (o s p)
                (format s "#<foo>"))
    print-foo
    
    user> (defstruct (foo
                               (:print-function print-foo)))
    #<structure-definition: foo>
    
    user> (defun print-foo (o s p)
                (format s "#<foo2 0x~X>" (si:address-of o)))
    print-foo
    
    user> (format nil "~A" (make-foo))
    "#<foo>"

  • デフォルトのコンストラクタが必ず作られる

    user> (defstruct (foo
                      (:constructor make-foo (a)))
            a)
    #<structure-definition: foo>
    
    user> (make-foo 1)
    不正なデータ型です: 1: symbol
    
    user> (make-foo :a 1)
    #S(foo a 1)

  • コンストラクタの引数の割り当てがおかしい

    user> (defstruct (foo
                      (:constructor make-foo2 (a c)))
            a b c)
    #<structure-definition: foo>
    
    user> (make-foo2 1 3)
    #S(foo a 1 b 3 c nil) ;; b nil c 3 になるはず

  • コンストラクタで引数を指定すると、スロット定義の初期値が無視される

    user> (defstruct (foo
              (:constructor create-foo (x)))
            x (y 2))
    #<structure-definition: foo>
    
    user> (create-foo 1)
    #S(foo x 1 y nil) ;; #S(foo x 1 y 2) になるべき

nanri-master: format 書式の変更の確認

format 書式が色々変更されているが互換性に影響がないか確認する。

取り込む基準は以下のとおり。

  • 0.2.2.235 でエラーになるものは取り込む
  • 0.2.2.235 と結果が異なるものは、packaged-xyzzy と現在 NetInstaller で入手可能なすべての
    lisp コードを検索し、利用されていない書式なら取り込む
    • なお、NetIntaller 非対応のソースは集めるのが面倒なので確認しない

確認結果

commit cb29477aee752f0fd554ecafa16ec8db2e053a17
Author: NANRI <[email protected]>
Date:   Wed Jul 14 03:29:14 2010 +0900

    xyzzy.src : fix format "~T".
(format nil "~0,1T")  ; 0.2.2.235
""
(format nil "~0,1T")
" "

lisp/abbrev.l で "~15,1T" を使っているが動作には影響ない。
他に利用を確認できなかったので取り込む。


commit 7e247ad26763c95410a60145c16f903f3e9eb703
Author: NANRI <[email protected]>
Date:   Wed Jul 14 03:04:57 2010 +0900

    xyzzy.src : fox format "~VT" in the case of being provided '() as a prefix parameter.
(format nil "~VT" nil)  ; 0.2.2.235
Vパラメータの型が不正です
(format nil "~VT" nil)
" "

どう見てもバグ修正なので取り込む。


commit 6ecf6706dfbb0cee584ccc19245c23075061883f
Author: NANRI <[email protected]>
Date:   Mon Mar 1 01:51:31 2010 +0900

    xyzzy.src : fix format "~F".
(format nil "~,,VF" 3 pi)  ; 0.2.2.235
"3.141592653589793d0"
(format nil "~,,VF" 3 pi)
"3141.592653589793"

利用を確認できなかったので取り込む。


commit 64267643cae53a087acb346a1cde76e51bb0d6f2
Author: NANRI <[email protected]>
Date:   Thu Dec 10 00:01:03 2009 +0900

    xyzzy.src : fix format "~n@A".
(format nil "~10@A" "hoge")  ; 0.2.2.235
"hoge      "
(format nil "~10@A" "hoge")
"      hoge"

影響が大きすぎるので取り込まない。
2ch でも報告が上がっている。

654 名前:名無し~3.EXE[sage] 投稿日:2012/02/28(火) 07:15:19.32 ID:ypWJPGEx [1/2]
465さん
2ch-modeのpopup.lに*app~が残っています。

あと、私の環境では、2ch-modeのメニューバッファや
ボード・ヒストリーバッファのスレッド名が
右寄せになってしまうのですが、原因とかわかりますでしょうか?

参考: http://d.hatena.ne.jp/bowbow99/20090829/1251547986


commit d9314ec490f7cadcf95a03c4ff0e2f6a00ba8cf3
Author: NANRI <[email protected]>
Date:   Tue Dec 1 23:12:35 2009 +0900

    xyzzy.src : fix format "~G".
(format nil "~10g" 1.23456d+38)  ; 0.2.2.235
"^@^@^@^@^@^@    "
(format nil "~10g" 1.23456d+38)
"123456000000000000000000000000000000000.0    "

どう見てもバグ修正なので取り込む。

参考: http://hie.s64.xrea.com/xyzzy/ml/msg09203.html


commit 4a989be4d17e2ed6528c497d71ff6b493626d635
Author: NANRI <[email protected]>
Date:   Tue Dec 1 23:11:38 2009 +0900

    xyzzy.src : fix format "~E".
(format nil "~E" 123.45)  ; 0.2.2.235
"123.45"
(format nil "~E" 123.45)
"1.2345e+2"

利用を確認できなかったので取り込む。

参考: http://hie.s64.xrea.com/xyzzy/ml/msg09202.html


commit bca58407569a2366b5f34ee2dd22d3cd5e365315
Author: NANRI <[email protected]>
Date:   Tue Dec 1 23:10:09 2009 +0900

    xyzzy.src : fix format "~F".
(format nil "~@F" 123.45)  ; 0.2.2.235
"123.45"
(format nil "~@F" 123.45)
"+123.45"

利用を確認できなかったので取り込む。

参考: http://hie.s64.xrea.com/xyzzy/ml/msg09202.html


commit 74aeee5f70f07ce95614f519c8c8c14537054da6
Author: NANRI <[email protected]>
Date:   Tue Dec 1 23:08:08 2009 +0900

    xyzzy.src : fix format "~R".
(format nil "~16,10,'*,'-,2:R" #x123abc)  ; 0.2.2.235
パラメータが多すぎます
(format nil "~16,10,'*,'-,2:R" #x123abc)
"**12-3a-bc"

バグ修正なのでとり込む。

参考: http://hie.s64.xrea.com/xyzzy/ml/msg09198.html

ハッシュダイジェストのバイナリ値

背景

si:md5 や si:sha-1 はダイジェストを 16 進文字列で返すが、
バイナリで欲しい場合がある。

以下は oatuh.l のコードからの引用である。

;;; signature
(defun hmac-sha-1-bin (key str)
  (let ((h (si:hmac-sha-1 key str))
    (s (make-sequence 'string 20)))
    (loop
      for i from 0 below 40 by 2
      for n = (parse-integer h :start i :end (+ i 2) :radix 16)
      do (setf (svref s (/ i 2)) (code-char n)))
    s))

仕様

以下の API に :binary 引数を追加する。
:binary t の場合はバイナリ値をそのまま返す、nil の場合は16進文字列で返す。

  • si:md5
  • si:sha-1
  • si:sha-224
  • si:sha-256
  • si:sha-384
  • si:sha-512
  • si:hmac-md5
  • si:hmac-sha-1
  • si:hmac-sha-224
  • si:hmac-sha-256
  • si:hmac-sha-384
  • si:hmac-sha-512

参考

備考

  • 当初は汎用的な hex-string-to-bin-string を追加しようかと考えたが、
    ほとんど si:md5 などと組み合わせて使うことになりそうなのでやめた

サンプルコード

Amazon Web Services のリクエストに署名するコード。

(defvar *access-key-id* "00000000000000000000")
(defvar *secret-access-key* "1234567890")

(defun make-aws-request (params &key domain path access-key-id secret-access-key timestamp)
  (labels ((encode-param1 (v)
             (si:www-url-encode v nil "0-9A-Za-z---._~"))
           (encode-params (params)
             (format nil "~{~A~^&~}"
                     (mapcar #'(lambda (kv)
                                 (format nil "~A=~A"
                                         (car kv)
                                         (encode-param1 (cdr kv))))
                             params))))
    (let* ((query (encode-params (sort (append `(("AWSAccessKeyId" . ,access-key-id)
                                                 ("Timestamp" . ,timestamp))
                                               params)
                                       #'string< :key #'car)))
           (string-to-sign (format nil "~{~A~^~%~}" (list "GET" domain path query)))
           (signature (delete #\LFD
                              (si:base64-encode
                               (si:hmac-sha-256 secret-access-key string-to-sign :binary t)))))
      (format nil "http://~A~A?~A&Signature=~A"
              domain path query (encode-param1 signature)))))

(make-aws-request '(("Service" . "AWSECommerceService")
                    ("Operation" . "ItemLookup")
                    ("ItemId" . "0679722769")
                    ("ResponseGroup" . "ItemAttributes,Offers,Images,Reviews")
                    ("Version" . "2009-01-06"))
                  :access-key-id *access-key-id*
                  :secret-access-key *secret-access-key*
                  :domain "webservices.amazon.com"
                  :path "/onca/xml"
                  :timestamp "2009-01-01T12:00:00Z")
=> "http://webservices.amazon.com/onca/xml?AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06&Signature=Nace%2BU3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg%3D"

参考: サンプルリクエストに署名を行うためのステップ
# このページのサンプルの結果は誤っている

multiframe: mode-line-format の変更を取り込む

以下の変更を取り込み、仕様をリファレンスに記述する。

commit 179f4ad3b01c0116b2008b5f753e2f3363f96624
Author: mumurik <none@none>
Date:   Sun Feb 19 16:04:58 2012 +0900

    FIX: percent update even if there is no %/.

commit 9f45e92d32894c5f2dee3f038ae16be4df4de2b9
Author: mumurik <none@none>
Date:   Sun Feb 19 08:49:56 2012 +0900

    Support %/ at mode-line-format.
    %/ shows percentage of current caret position of total buffer size.

commit 34285e2c6b3ad8aa6f6aa8be815c747c09898248
Author: mumurik <none@none>
Date:   Sat Feb 18 22:34:40 2012 +0900

    Extract paint_mode_line_point related code to mode_line_point_painter.

*features* に :x86, :x64, :ia64, :wow64 を追加する

WoW64 対応 (#4) など、マシンアーキテクチャによって処理を分けたい場合が
あるかもしれないので features:x86, :x64, :ia64, :wow64 を追加する。

なお、SBCL では :X86:X86-64 がある。

Windows 7 タスクバー対応: Aero プレビュー対応

Google Chrome のように Aero プレビューで各タブの内容のサムネイルを表示する。

Chrome はウィンドウに表示されている Web サイトをそのまま縮小しているが、
xyzzy ではカーソルがあるところの周辺のテキストをクリップして表示する。

これはテキストファイルは文字のみであり縦に長いという特徴がある。
そのため、そのまま縮小すると区別ができないためである。

defpackage に :documentation を追加

defpackage マクロで :documentation オプションに対応し、
documentation 関数でドキュメントを取得できるようにする。

;; 0.2.2.235
user> (defpackage :foo
        (:use :lisp)
        (:documentation "foo doc"))
未サポートのオプションです: :documentation

user> (documentation (find-package :foo) t)
nil

make-process に :error を追加する

背景

call-process では :error で標準エラー出力の出力先を指定できるが、
make-process では指定できない。

標準エラー出力がいらない場合や別々に取得した場合があるので、
make-process にも :error を追加する。

仕様

  • make-process :error を指定されたらそのバッファに標準エラー出力を出力する
  • :error が指定されない場合は従来通り :output のバッファに出力する
  • process-buffer は多値を返すように変更 (:error が指定された場合のみ)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.