pax_global_header00006660000000000000000000000064117356016430014520gustar00rootroot0000000000000052 comment=f324b209579fb85649d228d4da68f9685d178509 navi2ch/000077500000000000000000000000001173560164300124165ustar00rootroot00000000000000navi2ch/.cvsignore000066400000000000000000000001621173560164300144150ustar00rootroot00000000000000Makefile autom4te.cache config.log config.status configure.lineno stamp-link *.tar.gz elc-stamp navi2ch-config.el navi2ch/.gitignore000066400000000000000000000001551173560164300144070ustar00rootroot00000000000000*.elc *~ Makefile config.log config.status doc/navi2ch.info elc-stamp navi2ch-config.el TAGS autom4te.cache/ navi2ch/AUTHORS000066400000000000000000000000011173560164300134550ustar00rootroot00000000000000 navi2ch/COPYING000066400000000000000000000431101173560164300134500ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. navi2ch/ChangeLog000066400000000000000000003650661173560164300142100ustar00rootroot000000000000002011-10-17 MIZUNUMA Yuto * navi2ch-article.el (navi2ch-article-mode-line-format): docstring更新 2011-10-08 MIZUNUMA Yuto * navi2ch-article.el (navi2ch-article-thread-stop-p): 新規 スレが止められてるかどうかP (navi2ch-article-make-mode-line-identification): スレスト状態をモードラインに表示 (navi2ch-article-write-message): スレストされたスレには書きこませない 2011-07-19 Naohiro Aota * navi2ch.el (navi2ch-split-window): enlarge-window は必ず別の window を残してしまうようになったので、 delete-other-windows を使う ように切り替え。 2011-06-16 MIZUNUMA Yuto * navi2ch-oyster.el (navi2ch-oyster-get-status-from-proc): (navi2ch-oyster-get-session-id-from-proc): http://hibari.2ch.net/test/read.cgi/unix/1265413075/405 パッチ適用(様子見) 2011-06-14 MIZUNUMA Yuto * navi2ch-oyster.el (navi2ch-oyster-login): header追加。より仕様に沿う形に。 HTTP statusをきちんと把握 (navi2ch-oyster-get-session-id-from-proc): navi2ch-oyster-get-session-idから名称変更 (navi2ch-oyster-get-status-from-proc): HTTP status取得。 2ch用のは使わない形に(機能してなかった) 。 (navi2ch-oyster-func-alist): extract-post削除。2chデフォルトで問題無い. 2011-06-13 MIZUNUMA Yuto * navi2ch-oyster.el (navi2ch-oyster-logout): ログアウト用func (navi2ch-oyster-send-message-success-p): アクセス禁止のエラーを受けてログインする構造 (navi2ch-oyster-id): 無意味な初期設定撤廃 (navi2ch-oyster-password): 無意味な初期設定撤廃 メッセージの名称変更 オイスター -> ● 簡単なインストール、使用例ドキュメントコメント追加 コメントアウトした関数削除 2011-06-01 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-url-status-check): add HTTP code 307 2011-05-31 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-show-image): 無駄な処理だったnavi2ch-thumbnail-show-image-subrの廃止 shownフラグのmy-navi2chをまともな名前のnavi2ch-image-shownに (navi2ch-thumbnail-image-shown-p): 新規 shownフラグのチェック 2011-05-30 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-show-image-subr): httpsにも対応 (navi2ch-thumbnail-image-url-regex-build): add 'JPG'(本格的にcase-insensitiveに移行すべきか) 説明文修正 * navi2ch-net.el (navi2ch-net-split-url): httpsにも対応 * navi2ch-thumbnail.el (navi2ch-thumbnail-image-jpeg-identify): bugfix 読み込みが8byte多かった (navi2ch-thumbnail-select-current-link): 踏んだリンクが画像かどうかのチェックを追加 2011-05-16 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-picto): pic.to対応追加 (navi2ch-thumbnail-url-coversion-table): defvar化 (navi2ch-thumbnail-image-url-regex-build): mapconcatで綺麗に 2011-05-12 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-image-pre): 複雑なURLの場 合の解析を根本的に見直し。正規表現テーブルを一箇所 (navi2ch-thumbnail-url-coversion-table)にまとめて、そこから個別処理 関数をfuncallしてやる形式にする。新規の画像アップローダー等のURLを 追加するにはこのテーブルにリストを追加し、処理関数が必要な場合はそ れも新規作成 (navi2ch-thumbnail-url-replace): 単純置換関数 (navi2ch-thumbnail-imepic): for http://imepic.jp (navi2ch-thumbnail-twitpic): for http://twitpic.com 2011-05-12 Naohiro Aota * navi2ch-machibbs.el (navi2ch-machibbs-send-message): スレ立て時の エラーを解消 Suggested by http://hibari.2ch.net/test/read.cgi/unix/1265413075/353 2011-04-08 Naohiro Aota * navi2ch-machibbs.el (navi2ch-machibbs-send-message): スレ立て時に は key=nil になる様子。 2011-03-24 Naohiro Aota * navi2ch-thumbnail.el (navi2ch-thumbnail-save-content): Fix read-file-name() usage. 2011-03-23 Naohiro Aota * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): Remap navi2ch-thumbnail-image-delete-cache * navi2ch-article.el (navi2ch-article-mode-map): Ditto. * navi2ch-thumbnail.el (navi2ch-thumbnail-image-delete-cache): `file' と `thumb' が有効かどうかのテストを追加。 2011-03-17 Naohiro Aota * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): 落ちて たと思っていたスレが復活した時の処理を追加。 (navi2ch-bookmark-fetch-mark-article): 未取得のスレを I で取得する ように変更。 2011-01-17 MIZUNUMA Yuto * navi2ch-multibbs.el: みみずんのアドレス変更に対応 2011-01-16 MIZUNUMA Yuto * navi2ch-p2.el (navi2ch-p2-make-deny-list): アクセス禁止リスト取得 URL(madakana.cgi)の即値をやめて変数化。サーバ移転qb6->qb7に対応。 (navi2ch-p2-make-deny-list): windowsOSではgzipedなデータを上手くデ コードできないようなので、gzip取得しない(gzip.exeの問題?) 2011-01-12 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-twitpic-url2img): http://twitpic.comに対応 2010-12-24 Naohiro Aota * navi2ch-thumbnail.el (navi2ch-thumbnail-show-image-subr): Fix condition logical; Save thumb file when using Emacs internal imagemagick binding. 2010-11-13 Naohiro Aota * navi2ch-message.el (navi2ch-message-insert-notice): New function. (navi2ch-message-send-message): Use it. 2010-11-12 Naohiro Aota * navi2ch-message.el (navi2ch-message-send-message): preserve send message buffer on error. 2010-11-11 Naohiro Aota * navi2ch-thumbnail.el (navi2ch-thumbnail-thumbnail-directory): Change default value. (navi2ch-thumbanil-imagemagick-resize-option): New variable. (navi2ch-thumbnail-show-image-subr): Use it. (navi2ch-thumbnail-image-identify): Supress warnings. (toplevel): Add coding cookie. 2010-10-27 TAKAHASHI Kaoru * navi2ch-board-misc.el (navi2ch-bm-sort-by-number): Use numeric sort instead of text sort; For little `navi2ch-bm-number-width'. 2010-10-21 Naohiro Aota * navi2ch-article.el (navi2ch-article-mode-map): Change navi2ch-thumbnail-save-content to `V'. * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): Ditto. * navi2ch-thumbnail.el (navi2ch-thumbnail-insert-image-cache) (navi2ch-thumbnail-image-show-region) (navi2ch-thumbnail-show-image-subr): Always need paren. 2010-10-17 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-show-image-not-image-url): imepitaの拡張子の無い 画像は外部ビューアーが認識に失敗する場合があるので、拡張子を強制付 加する。今回はimepitaだけだが、他の対応も必要かも 2010-10-14 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-show-image-subr): (navi2ch-thumbnail-image-identify): navi2ch-thumbnail-use-mac-sips をt or nilでMacOSXでは標準コマンドのsipsをサムネイル作成に使用 2010-10-13 Naohiro Aota * navi2ch-p2.el (navi2ch-p2-p): Supress p2 messages. 2010-10-05 Naohiro Aota * navi2ch-vars.el (navi2ch-2ch-mimizun-negative-list): Fix typo. Suggested by http://hibari.2ch.net/test/read.cgi/unix/1265413075/149 2010-09-26 MIZUNUMA Yuto * navi2ch-article.el (navi2ch-article-insert-message): (navi2ch-thumbnail-insert-image-reload)追加 サムネイル画像のキャッシュがあったら表示 副作用があるかもしれないので注意して見守りたい 2010-09-25 MIZUNUMA Yuto * navi2ch-thumbnail.el (navi2ch-thumbnail-image-identify) (navi2ch-thumbnail-image-gif-identify) (navi2ch-thumbnail-image-jpeg-identify) (navi2ch-thumbnail-image-png-identify) (navi2ch-thumbnail-show-image-subr) (navi2ch-thumbnail-insert-image-cache): 外部プログラム(identify)を呼 ばずにemacs独自で画像の情報を判別するロジックの導入 (navi2ch-thumbnail-show-image-subr): 画像ファイルが取得できなかった 場合、何が取得できたのかをmessage表示して対応を考える (navi2ch-thumbnail-show-image-subr): GIFサムネイル作成時のtempファ イルの削除ロジック変更 (navi2ch-thumbnail-url-status-check): 画像取得前に302や404のチェッ ク。302の場合移動先URLを返す。 (navi2ch-thumbnail-select-current-link): ファイルが無いにも関わらず 404を返さないサーバへの対応。ブラックリスト `navi2ch-thumbnail-404-list' とマッチング 2010-09-14 Naohiro Aota * navi2ch-http-date.el : テストコードを test/test.el に移動。 2010-09-10 MIZUNUMA Yuto * navi2ch-thumbnail.el: 新規ファイル サムネイル機能追加 2010-08-11 MIZUNUMA Yuto * navi2ch-p2.el (navi2ch-p2-login-url, navi2ch-p2-cookie-domain) (navi2ch-p2-send-message): Navi2ch for Emacs (Part 20) http://hibari.2ch.net/test/read.cgi/unix/1265413075/97で指摘された バグの修正。p2関連ドメインで即値の廃止。 (navi2ch-p2-domain): 新規追加 'http://w2.p2.2ch.net/p2'に関しては未テスト 2010-07-15 MIZUNUMA Yuto * navi2ch-message.el (navi2ch-message-samba24-check): * navi2ch-vars.el: 変数 navi2ch-message-samba24-wait-sleep 追加。 non-nil なら samba規制時間の解除までsleep (フリーズ)する。 * navi2ch-message.el (navi2ch-message-samba24-search-samba) p2の場 合、samba時間に10秒プラスされる仕様追加に追従 2010-06-28 MIZUNUMA Yuto * navi2ch-p2.el (navi2ch-p2-make-deny-list): new init.el等で (navi2ch-p2-make-deny-list)を呼べば、規制されてる板を http://qb6.2ch.net/_403/madakana.cgiから取得する。 (navi2ch-p2-p): p2で書き込む板を判別論理追加。 (navi2ch-p2-board-p): new navi2ch-p2-pのsub (navi2ch-p2-send-message-success-p):エラーリトライ条件追加 (navi2ch-p2-send-message):samba待ち追加 (navi2ch-p2-send-message): 2ch側仕様変更によりパラメーター追加 kuno=ichi 2010-06-08 Naohiro Aota * navi2ch-oyster.el (navi2ch-oyster-get-status): sit-for を sleep-for に変更。 * navi2ch-p2.el (navi2ch-p2-add-bookmark): 条件が "(or t " になって いたので削除。 (navi2ch-p2-board, navi2ch-p2-board-regexp) (navi2ch-p2-all-board): New variables. 2010-05-18 Naohiro Aota * navi2ch-net.el (navi2ch-net-split-url): password に "@" まで含ま れていたバグを修正。 2010-05-14 Naohiro Aota * navi2ch-p2.el (navi2ch-p2-p): p2 で書きこみ可能なサイトでだけ p2 で書きこむように。 * navi2ch.el (navi2ch-toggle-offline): 二連続で呼び出され、 online になった時に落ちているホストの情報をリセット。 2010-04-14 Naohiro Aota * navi2ch-util.el (navi2ch-read-only-string): Add new optional argument `front-nonsticky'. * navi2ch-message.el (navi2ch-message-insert-header): Use it. 2010-03-12 Naohiro Aota * navi2ch-net.el (navi2ch-net-get-content-subr-with-temp-file) (navi2ch-net-get-content-subr-region): Fix the last change. * navi2ch-article.el (navi2ch-article-uncompress): New function. (navi2ch-article-update-file): Use it. * navi2ch-util.el (navi2ch-default-directory): New funciton. (navi2ch-call-process-buffer, navi2ch-verify-signature-file) (navi2ch-uudecode-region): Use it. * navi2ch-net.el (navi2ch-net-get-content-subr-with-temp-file) (navi2ch-net-get-content-subr-region): Ditto. * navi2ch-article.el (navi2ch-article-auto-decode-text-on) (navi2ch-article-call-aadisplay): Ditto 2010-03-05 mami * navi2ch-machibbs.el (navi2ch-machibbs-parse-subject): subject が 存在しないときにエラーとならないように。 2010-02-24 Naohiro Aota * navi2ch-vars.el: Remove duplicated navi2ch-list-filter-list. 2010-02-04 mami * navi2ch-util.el (navi2ch-hexadecimal-reference-to-str): navi2ch-ucs-to-str が nil を返したときは "〓" に。 * navi2ch-history.el (navi2ch-history-yank): 履歴が空のとき yank できないバグを修正。 http://pc8.2ch.net/test/read.cgi/unix/1114691892/556 2010-01-16 Naohiro Aota * navi2ch-util.el (toplevel): Comment out autload for ucs-to-char. * navi2ch-search.el (navi2ch-search-union-subject-list): Fix typo `args' to `arg'. * navi2ch-message.el (navi2ch-message-cite-original): (navi2ch-message-cite-original-from-number) (navi2ch-message-send-message): Use with-current-buffer instead of save-excursion and set-buffer. * navi2ch-oyster.el (navi2ch-oyster-get-status) (navi2ch-oyster-login): Ditto. * navi2ch-bookmark.el (navi2ch-bookmark-change-bookmark) (navi2ch-bookmark-create-bookmark): Ditto. * navi2ch-util.el (navi2ch-get-major-mode, navi2ch-fuzzy-regexp): Ditto. * navi2ch-net.el (navi2ch-net-send-request) (navi2ch-net-get-status, navi2ch-net-get-header): Ditto. * navi2ch-article.el (navi2ch-article-get-article-length) (navi2ch-article-select-view-range-subr) (navi2ch-article-through-ask, navi2ch-article-cached-subject) (navi2ch-article-textize-article) (navi2ch-article-set-summary-element) (navi2ch-article-buffer-list, navi2ch-article-current-buffer): Ditto. * navi2ch-board-misc.el (navi2ch-bm-select-article-or-scroll) (navi2ch-bm-select-article, navi2ch-bm-textize-mark-article): Ditto. * navi2ch-articles.el (navi2ch-articles-get-article) (navi2ch-articles-get-board): Ditto. 2010-01-10 Naohiro Aota * navi2ch-board.el (navi2ch-board-get-matched-article): compressed も nil にする。 * navi2ch-board-misc.el (navi2ch-bm-down-article-p): down 属性が不 明な時だけ、 article を読みこむように。 * navi2ch-board.el (navi2ch-board-get-matched-article): subject か らの article は落ちていないことを明示。 2009-11-28 Naohiro Aota * navi2ch-article.el (navi2ch-article-kill-buffer-hook): down なス レを表示して閉じたさいに bookmark buffer の mark がおかしくなる問題 を修正。 (navi2ch-article-sync): down なスレは sync しない。 (navi2ch-article-fetch-article): Ditto. (navi2ch-article-update-file): down なスレを取得できれば down を外す。 2009-11-07 Naohiro Aota * navi2ch-article.el (navi2ch-article-add-message-filter-cus): :auto に対応。 (navi2ch-article-add-message-filter-cus-done): 引数を変更。 2009-10-10 Naohiro Aota * navi2ch-article.el (navi2ch-article-get-file-name): article に compressed がない場合、 article を読むように。 2009-09-30 Naohiro Aota * navi2ch-net.el (navi2ch-net-update-file): ID:TanpanM が立てたスレ は無視。 2009-09-26 Naohiro Aota * navi2ch-mona.el (navi2ch-mona-use-ipa-mona): New variable. (navi2ch-mona-use-ipa-mona): Ditto. (navi2ch-mona-create-face-from-family-name): Use it. (navi2ch-mona-setup): Ditto. 2009-09-20 Naohiro Aota * navi2ch-message.el (navi2ch-message-write-message): Add new argument. * navi2ch-article.el (navi2ch-article-mode-map): Add C-c C-y binding. (navi2ch-article-write-message): Add new argument. (navi2ch-article-write-sage-message): New function. 2009-09-06 Naohiro Aota * navi2ch-article.el (navi2ch-article-local-dat-regexp): .dat.gz に 対応。 (navi2ch-article-file-name-to-artid): Ditto. 2009-09-05 Naohiro Aota * navi2ch-article.el (navi2ch-article-compress): file が存在する時 にだけ書きこむ。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): 落ちて いるスレを圧縮する。 * navi2ch-board-misc.el (navi2ch-bm-down-article-p): cdr をとってい なかった bug を修正。 * navi2ch-article.el (navi2ch-article-insert-message-separator-function): Add compressed. (navi2ch-article-get-file-name): compressed が t の時は ".dat.gz" ファイルを使う。 (navi2ch-article-compress): New funcion. * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): 落ちて いるスレに down マークをつける。 * navi2ch-board-misc.el (navi2ch-bm-down-article-p): New function. (navi2ch-bm-get-state-from-article): Use it. * navi2ch-article.el (navi2ch-article-insert-message-separator-function): down を追加。 * navi2ch.el (navi2ch): navi2ch-list() 以外は unless navi2ch-init の時だけように。 Suggested by http://pc12.2ch.net/test/read.cgi/unix/1221368890/783 2009-07-29 Naohiro Aota * navi2ch-article.el (navi2ch-article-message-filter-subr): date が nil の時にマッチしなくなっていた bug を修正。 Reported by http://pc12.2ch.net/test/read.cgi/unix/1221368890/768 2009-07-24 Naohiro Aota * navi2ch-article.el (navi2ch-article-jit-insert-1) (navi2ch-article-jit-insert): Move `redisplay' place. (navi2ch-article-message-filter-default-rule-alist): IDマッチの時は デフォルトで date local をONに。 (navi2ch-article-message-filter-wid-date): New local variable. (navi2ch-article-extract-date): New function. (navi2ch-article-message-filter-by-name) (navi2ch-article-message-filter-by-message) (navi2ch-article-message-filter-by-id) (navi2ch-article-message-filter-by-mail) (navi2ch-article-message-filter-by-subject) (navi2ch-article-message-filter-by-hostname): Use it. (navi2ch-article-message-filter-subr): 引数を追加。 日付でマッチす るように。 (navi2ch-article-add-message-filter-cus): 日付マッチのオプションを 指定できるように。 Undo を無効に。 (navi2ch-article-add-message-filter-cus-done): 日付マッチを処理する ように。 (navi2ch-article-read-message-filter-match): Ditto. 2009-07-23 Naohiro Aota * navi2ch-article.el (navi2ch-article-jit-insert): sit-for を使わず に input-pending-p に。 (navi2ch-article-jit-insert): force redisplay. 2009-07-22 Naohiro Aota * navi2ch-article.el (navi2ch-article-goto-number): JIT使用中にまだ 表示されてないレスにジャンプしようとした時に、レスを表示してからジャ ンプするようにした。 2009-07-20 Naohiro Aota * navi2ch-article.el (navi2ch-article-jit-insert) (navi2ch-article-kill-buffer-hook): navi2ch-article-jit-timer が nil かどうかを確認。 (navi2ch-article-kill-buffer-hook, navi2ch-article-jit-insert): 上 記修正のバグを修正。 2009-07-19 Naohiro Aota * navi2ch-article.el (navi2ch-article-jit-insert) (navi2ch-article-kill-buffer-hook): JIT を動かすべき buffer がなく なると、 timer を cancel。 2009-07-18 Naohiro Aota * navi2ch-net.el (navi2ch-net-update-file-diff): ファイル全体取得時 の update 判定を修正。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article-check-update): デフォルトで t にした。 2009-07-16 Naohiro Aota * navi2ch-article.el (navi2ch-article-jit-reinsert-partial-messages): navi2ch-article-jit-need-insert の範囲指定が間違っていたのを訂正。 2009-06-27 Naohiro Aota * navi2ch-net.el (navi2ch-net-update-file-diff): 全ファイルを取得し なおした時に、前回の内容と一緒の時には update と見なさいように。 重 複していた cond を削除。 2009-06-22 Naohiro Aota * navi2ch-article.el (navi2ch-article-jit-buffers) (navi2ch-article-jit-need-insert): New variables. (navi2ch-article-kill-buffer-hook, navi2ch-article-jit-insert) (navi2ch-article-jit-reinsert-partial-messages) (navi2ch-article-jit-insert-messages): 新方式の JIT にするために変 更。 2009-06-14 Naohiro Aota * navi2ch-article.el Reverted the previous change. * navi2ch-article.el (navi2ch-article-jit-insert-1) (navi2ch-article-jit-insert): New functions. (navi2ch-article-jit-interval): Change default value. (navi2ch-article-jit-reinsert-partial-messages): Use it. (navi2ch-article-jit-insert-messages): Ditto. 2009-06-05 Naohiro Aota * navi2ch-article.el (navi2ch-article-search): Fix typo. (navi2ch-article-jit-reinsert-partial-messages-1) (navi2ch-article-jit-insert-messages): New functions. (navi2ch-article-sync): Use them. (navi2ch-article-kill-buffer-hook): When needed, cancel JIT timer. (navi2ch-article-jit-res-nums, navi2ch-article-jit-interval) (navi2ch-article-jit-timer, navi2ch-article-use-jit): New variables. (navi2ch-article-insert-messages): When using JIT, don't show messages. 2009-05-15 Naohiro Aota * navi2ch-util.el (navi2ch-region-active-p): New macro. * navi2ch-message.el (navi2ch-message-cite-original): Use it. 2009-05-13 Naohiro Aota * navi2ch.el (navi2ch-2ch-url-p): navi2ch-list-invalid-host-regexp に match する host は 2ch の url と見なさないように。 navi2ch-list-valid-host-regexp に match するものを 2ch の url と見 なすように。 * navi2ch-net.el (navi2ch-net-split-url): user, pass の扱い方を訂正。 (navi2ch-net-fall-back-host): New variable. (navi2ch-net-connect-check): New function. (navi2ch-net-send-request): Use it. 2009-05-11 Naohiro Aota * navi2ch-article.el (navi2ch-article-search-reference): navi2ch-article-current-board, navi2ch-article-current-article を temp-buffer にも設定するように。 2009-05-10 Naohiro Aota * navi2ch-article.el (navi2ch-article-search-reference): 範囲指定型 の引用をうまく処理していなかったのを修正。 * navi2ch-util.el (navi2ch-hexadecimal-reference-to-str): string-to-int ではなく string-to-number を使うように。 (navi2ch-eq-or-memq): New function. * navi2ch-article.el (navi2ch-article-search-reference): New function. (navi2ch-article-search): 参照を検索できるように。 * navi2ch-util.el (navi2ch-number-sequence): New alias. * navi2ch-message.el (navi2ch-message-cite-original): 複数レスに対応。 * navi2ch-util.el (navi2ch-hexadecimal-reference-to-str): New function. (navi2ch-replace-html-tag-regexp-alist): Use it. 2009-04-12 Naohiro Aota * navi2ch-article.el (navi2ch-article-few-scroll-up): Add new argument. (navi2ch-article-few-scroll-down): Ditto. 2009-04-10 MIZUNUMA Yuto * Makefile.in : add navi2ch-p2.el 2009-04-08 MIZUNUMA Yuto * navi2ch-p2.el: new file http://p2.2ch.net 経由で書き込み機能 * bcomp.el: Add navi2ch-p2.el * navi2ch.el: Add navi2ch-p2.el * navi2ch-vars.el: 変数 navi2ch-p2-use-p2 navi2ch-p2-mail-address navi2ch-p2-password 追加 * navi2ch-multibbs.el (navi2ch-multibbs-send-message):エラーメッセー ジからsamba秒数取得call navi2ch-message-samba24-modify-by-error (呼 んでる場所が良くないが * navi2ch-message.el: samba24関連関数  navi2ch-message-samba24-modify-by-error  navi2ch-message-samba24-modify 追加 * navi2ch-multibbs.el (navi2ch-2ch-article-update):みみずん検索から 過去ログ取得 * navi2ch-vars.el: Add var navi2ch-2ch-mimizun navi2ch-2ch-mimizun-negative-list 2009-02-27 Naohiro Aota * navi2ch.el (navi2ch-2ch-url-p): Weaken host check. 2009-02-26 Naohiro Aota * navi2ch.el (navi2ch-goto-url): Use navi2ch-link, navi2ch-link-type properties instead of url property. * navi2ch-article.el (navi2ch-article-select-current-link-url): Remove duplicated condition check. * navi2ch-machibbs.el (navi2ch-machibbs-article-to-url): Follow the machibbs's change. 2009-02-25 Naohiro Aota * navi2ch-machibbs.el (navi2ch-machibbs-article-to-url): Change "read.pl" to "read.cgi" * navi2ch-face.el (navi2ch-bm-down-face): Add new face. 2009-01-20 Naohiro Aota * navi2ch-vars.el (navi2ch-global-map, navi2ch-global-view-map): Move C-c C-l from navi2ch-global-view-map to navi2ch-global-map. * navi2ch-search.el (navi2ch-search-union-prev-num): New variable. (navi2ch-search-union-subject-list): Use it. 2009-01-19 Naohiro Aota * navi2ch-search.el navi2ch-search-web-* を追加。 navi2ch-search-find-2ch-* を上記変更 にあわせて変更。navi2ch-search-hula-* を追加。 navi2ch-search-union-* を追加。 (navi2ch-search-find-2ch-thread-regexp): 定数に。 (navi2ch-search-find-2ch-next): navi2ch-search-find-2ch-search-num と 50 との小さいほうを navi2ch-search-find-2ch に渡すように。 (navi2ch-search-web-make-list): navi2ch-search-find-2ch-make-list から改名。 board を navi2ch-board-url-to-board() で取得するように。 * navi2ch-vars.el (navi2ch-global-view-map): C-c C-s を navi2ch-search-web に割り当て。 2009-01-15 Naohiro Aota * navi2ch-article.el (navi2ch-article-mode-map): Change [follow-link]'s bind to 'mouse-face. * navi2ch-board-misc.el (navi2ch-bm-mode-map): Ditto. * navi2ch-list.el (navi2ch-list-mode-map): Ditto. * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): Ditto. 2009-01-14 Naohiro Aota * navi2ch-article.el (navi2ch-article-mode-map): Use [follow-link] instead of [button-1]. * navi2ch-board-misc.el (navi2ch-bm-mode-map): Ditto. * navi2ch-list.el (navi2ch-list-mode-map): Ditto. * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): Ditto. * navi2ch-message.el (navi2ch-message-self-insert-aa): Use last-command-event. * navi2ch-article.el (navi2ch-article-mode-map): Add mouse [button-1]'s map. * navi2ch-board-misc.el (navi2ch-bm-mode-map): Ditto. * navi2ch-list.el (navi2ch-list-mode-map): Ditto. * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): Ditto. * navi2ch-search.el (navi2ch-search-find-2ch-make-list): uri の末尾 に "/" をつけるように。 (navi2ch-search-find-2ch-subr): Revert before change. (navi2ch-search-find-2ch-last-search-offset): Remove. (navi2ch-search-find-2ch): interactive の引数を "P" に。 2009-01-13 Naohiro Aota * navi2ch-search.el (navi2ch-search-find-2ch): interactive が prefix-arg を数字として解釈するように。 (navi2ch-search-find-2ch-next, navi2ch-search-find-2ch-prev): New function. (navi2ch-search-find-2ch-search-num): docstring に最大値について明 記。 (navi2ch-search-find-2ch-last-search-num): Rename. (navi2ch-search-find-2ch-subr): 上記変更に追随。 2009-01-09 Naohiro Aota * navi2ch-board-misc.el (navi2ch-bm-select-article): article を開け なかった時は window-configuration を元に戻すように。 * navi2ch-search.el (navi2ch-search-find-2ch-subr): 検索結果の順番 が逆になっていたのを修正。 docstring を修正。 (navi2ch-search-find-2ch-make-list): docstring を修正。 (navi2ch-search-find-2ch): Ditto. 2008-12-15 Naohiro Aota * navi2ch-vars.el (navi2ch-bm-sort-by-state-order): down マークの sort-order を定義。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): おちて るスレを down でマーク。 * navi2ch-board-misc.el (navi2ch-bm-state-char-table): down マーク を追加。 (toplevel): Ditto. 2008-11-12 Naohiro Aota * navi2ch-search.el (navi2ch-search-mode-line-info): 新変数。 (navi2ch-search-subject-subr, navi2ch-search-article-subr) (navi2ch-search-orphan-subr, navi2ch-search-all-cache): #serch 板の mode-line が適切な情報を表示するように。 2008-10-30 mizmiz * navi2ch-search.el (navi2ch-search-insert-subjects): レス数情報が あれば表示するように。 (navi2ch-search-find-2ch-last-search-word) (navi2ch-search-find-2ch-last-search-offset) (navi2ch-search-find-2ch-search-num) (navi2ch-search-find-2ch-total-hit) (navi2ch-search-find-2ch-thread-regexp) (navi2ch-search-find-2ch-coding): 新変数。 (navi2ch-search-set-mode-line, navi2ch-search-find-2ch) (navi2ch-search-find-2ch-subr) (navi2ch-search-find-2ch-make-list): 新関数。 2008-10-30 Naohiro Aota * navi2ch-list.el (navi2ch-list-search): find.2ch.net を追加。 all を local に変更。 2008-10-18 Naohiro Aota * navi2ch-article.el (navi2ch-article-make-mode-line-identification): LITERAL を t にして呼び出すように。 2008-10-15 Naohiro Aota * navi2ch-multibbs.el (navi2ch-2ch-board-get-file-name): ファイル名 に認証情報がはいらないように。 * navi2ch-net.el (navi2ch-net-split-url): 認証情報を取得できるよう に正規表現を改善。 (navi2ch-net-http-basic-credentials): 改名。 docstring を訂正。 * navi2ch-article.el (navi2ch-article-make-mode-line-identification): replace-regexp-in-string を navi2ch-replace-string に置換え。 2008-10-11 Naohiro Aota * navi2ch-article.el (navi2ch-article-show-sssp-icon): buffer 内全 ての icon を置換。 * navi2ch-message.el (navi2ch-message-mode-map): message モードで M-t の binding を削除。 2008-09-16 Naohiro Aota * navi2ch-article.el (navi2ch-article-message-filter-default-rule-alist): 全てのフィルタ条件に共通するルールを t で書けるように。 (navi2ch-article-add-message-filter-cus): Ditto. 2008-09-11 ARISAWA Akihiro 2ch の仕様変更に伴い、書き込み時 User-Agent が設定されていないと fusianasan になることへの対応。 http://qb5.2ch.net/test/read.cgi/sec2chd/1220971610/31- * navi2ch-net.el (navi2ch-net-send-request): User-Agent を送信する。 (navi2ch-net-download-file): navi2ch-net-send-request に User-Agent を渡さない。 * navi2ch-be2ch.el (navi2ch-be2ch-login): navi2ch-net-send-request に User-Agent を渡さない。 2008-09-01 Naohiro Aota * navi2ch-article.el (navi2ch-article-message-filter-default-rule-alist): navi2ch-article-get-current-word-in-body() が nil の時に対処 2008-08-30 Naohiro Aota * navi2ch-article.el (navi2ch-article-message-filter-wid-string) (navi2ch-article-message-filter-wid-rule) (navi2ch-article-message-filter-wid-method) (navi2ch-article-message-filter-wid-case) (navi2ch-article-message-filter-wid-invert) (navi2ch-article-message-filter-wid-scope) (navi2ch-article-message-filter-wid-float) (navi2ch-article-message-filter-wid-var) (navi2ch-article-message-filter-wid-window-configuration): New variable. (navi2ch-article-add-message-filter-cus) (navi2ch-article-add-message-filter-cus-done): New function. (navi2ch-article-mode-map): Use it. * navi2ch-util.el : keywordp, characterp の alias を compile 時だけ に。 2008-08-26 Naohiro Aota * navi2ch*.el: Add coding cookie. * navi2ch-article.el (navi2ch-article-mode-line-format): 新変数。 (navi2ch-article-make-mode-line-identification): Use it. 2008-08-25 Naohiro Aota * bcomp.el.in, bcomp.el : coding-system を指定してコンパイルするよ うに。 2008-08-09 Naohiro Aota * navi2ch-vars.el (navi2ch-coding-system): cp932, shift_jis-2004, shift_jis の順にコーディング判定をするように。 * navi2ch-oyster.el (open-tls-stream): require から autoload に変更。 2008-08-02 Naohiro Aota * configure.in: 2.0.0-DEV に変更。 * navi2ch-article.el (navi2ch-article-goto-number): hide, important モードの時は range をチェックする必要がない。 (navi2ch-article-goto-board): docstring を更新。 (navi2ch-article-load-number): hide, important モードの時はなるべく 近くに復帰するように。 (navi2ch-article-toggle-hide): hide モードでも navi2ch-article-load-number() を呼ぶように。 (navi2ch-article-toggle-important): important モードでも navi2ch-article-load-number() を呼ぶように。 * navi2ch-oyster.el: 常に tls.el を使うように。 2008-07-31 Hiroshi Fujishima * navi2ch-oyster.el (navi2ch-oyster-login): ssl.el のかわりに、 Emacs 22.1 に付いてくる、tls.el を使うように。また、 http://pc11.2ch.net/test/read.cgi/unix/1185807398/739 ID 取得に失敗 する件のも修正。 2008-07-29 Naohiro Aota * Makefile.am (EXTRA_DIST): ChangeLog.1 ChangeLog.2 が配布 tgz にも 含まれるように。 * configure.in: Fix previous change. 1.8.0 にアップデート。 2008-07-26 Naohiro Aota * configure.in: packagedir, icondir が prefix に従うように。 * acinclude.m4 (ac_output): 第三引数が argv として Lisp 関数にわた るように。 2008-07-23 Naohiro Aota * bcomp.el: XEmacs のコンパイル時メッセージレベルを変更。 * navi2ch-message.el: Shutup compile-time warnings; navi2ch-localfile-default-file-modes の設定法を XEmacs でも処理でき る形に。 * navi2ch-localfile.el: Ditto. * navi2ch.el: Shutup compile-time warnings. * navi2ch-util.el: Ditto. * navi2ch-net.el: Ditto. * navi2ch-multibbs.el: Ditto. * navi2ch-list.el: Ditto. * navi2ch-bookmark.el: Ditto. * navi2ch-board-misc.el: Ditto. * navi2ch-article.el: Ditto. 2008-07-20 Naohiro Aota * configure.in: cv_icondir を _cv_icondir に変更。 2008-05-31 Naohiro Aota * elisp-comp: Use bcomp.el. * bcomp.el: force to read files as iso-2022-7bit. 2008-05-07 Naohiro Aota * navi2ch-util.el (navi2ch-propertize): navi2ch-propertize を復活。 (navi2ch-read-only-string): propertize を navi2ch-propertize に。 * navi2ch-splash.el (navi2ch-splash-insert-image) (navi2ch-splash-insert-text): Ditto. * navi2ch-message.el (navi2ch-message-insert-header): Ditto. * navi2ch-e21.el (navi2ch-offline-init-icons): Ditto. * navi2ch-article.el (navi2ch-article-parse-message) (navi2ch-article-default-header-format-function) (navi2ch-article-auto-decode-encoded-section) (navi2ch-article-show-sssp-icon): Ditto. * navi2ch-vars.el (navi2ch-enable-status-check): デフォルトを nil に。 2008-04-21 Naohiro Aota * navi2ch-list.el (navi2ch-list-search): 検索可能な板かどうかをチェッ ク。 * navi2ch-search.el (navi2ch-search-for-each-article): default-directory が nil でないかチェック。 2008-03-24 Naohiro Aota * navi2ch-util.el (navi2ch-make-cache, navi2ch-cache-put): XEmacs の hash の仕様に対応。 2008-03-21 Naohiro Aota * navi2ch-message.el (navi2ch-message-samba24-modeline) (navi2ch-message-samba24): 板ID が重複していた時に、別の板名が表示 されてしまうバグを修正。板ID の : 以下を外す処理を追加。 2008-03-15 Naohiro Aota * NEWS: ホスト名・IPアドレスをフィルタ/検索の条件にできるようになっ たことを記載。 2008-03-14 Naohiro Aota * navi2ch-machibbs.el (navi2ch-machibbs-url-to-article) (navi2ch-machibbs-url-to-board): machibbs のPATH INFO形式に対応。 2008-03-02 Naohiro Aota * navi2ch-mona.el (navi2ch-mona-create-fontset-from-family-name): emacs-unicode-2 に対応。 2008-02-29 Naohiro Aota * navi2ch.el (navi2ch-load-info, navi2ch-save-info): navi2ch-info-cache が初期化されているかどうかを確認しない。 (navi2ch): navi2ch-info-cache を初期化する。 (navi2ch-exit): 下の変更を戻す。 * navi2ch.el (navi2ch-exit): 全てのバッファを閉じてから navi2ch-save-status() を呼ぶように。 2008-02-27 Naohiro Aota * navi2ch-util.el (navi2ch-browse-url-internal): sssp を http に置 換える前に sssp であるかを確認。 2008-02-13 Naohiro Aota * navi2ch-net.el (navi2ch-net-update-file): other-header を引数に追 加。 2008-02-11 Naohiro Aota * navi2ch-article.el (navi2ch-article-url-at-point): type が正しく とれていなかった bug を修正。 2008-02-06 Naohiro Aota * navi2ch-popup-article.el (navi2ch-popup-article): navi2ch-article-insert-messages() 後に navi2ch-article-current-article を nil にする。 navi2ch-popup-article-current-article を隠蔽してしまうことの対策。 表示されている message が parse されないまま残ってしまうバグを直す ため、 navi2ch-article-message-list の整形方法を修正。 * navi2ch.el (navi2ch-load-info): read() に失敗したファイルを削除す るかどうか問い合わせる。 2008-02-03 Naohiro Aota * *.el: Copyright の形式を変更。 2008-02-02 Naohiro Aota * navi2ch-article.el (navi2ch-article-search): hostname でも検索で きるように。 (navi2ch-article-message-filter-by-hostname): シベリアのホスト表示 形式に対応。 (navi2ch-article-get-current-hostname): Ditto. (navi2ch-article-search-hostname): 新関数。 (navi2ch-article-get-current-subject): subject の解析に失敗したら "" を返す。 * navi2ch-splash.el (navi2ch-splash-copyright-notice): Copyright を 更新。 * navi2ch-article.el (navi2ch-article-load-info): indent を修正。 * navi2ch-util.el (toplevel): Warnings 対策。 navi2ch-net-send-request() 、navi2ch-net-get-status() を defun。 * navi2ch-mona.el (toplevel): Warnings 対策。 navi2ch-popup-article-current-board, navi2ch-article-current-board, navi2ch-popup-article-current-article, navi2ch-article-current-article を defvar。 * navi2ch.el (navi2ch-save-info): 常にファイルに保存するように。 2008-02-01 Naohiro Aota * navi2ch-popup-article.el (navi2ch-popup-number-list): 新変数。 (navi2ch-popup-article): popup 中のレス番号を上記変数に保持するよう に。 navi2ch-article-message-list はもとの article のもののコピーを point だけ置き換えたものに。 (navi2ch-popup-article-select-current-link): リンク先レスが popup 中の時だけ、 navi2ch-article-goto-number() を呼び出す。 * navi2ch-util.el (navi2ch-cache-remove): 新関数。 * navi2ch-board-misc.el (navi2ch-bm-remove-article-subr): info の backup も消す。 cache をクリアする。 * navi2ch-article.el (navi2ch-article-get-current-word-in-body): word が nil の時に string-match() を実行しない。 * navi2ch.el: Copyright の表記を更新。 (navi2ch-info-cache, navi2ch-info-cache-limit): 新変数。 (navi2ch-save-info, navi2ch-load-info): Use it. * navi2ch-futaba.el: Copyright の表記を更新。 * navi2ch-history.el: Ditto. * navi2ch-search.el: Ditto. * navi2ch-articles.el: Ditto. * navi2ch-localfile.el: Ditto. * navi2ch-jbbs-shitaraba.el: Ditto. * navi2ch-megabbs.el: Ditto. * navi2ch-http-date.el: Ditto. * navi2ch-directory.el: Ditto. * navi2ch-face.el: Ditto. * navi2ch-oyster.el: Ditto. * navi2ch-message.el: Ditto. * navi2ch-popup-article.el: Ditto. * navi2ch-list.el: Ditto. * navi2ch-jbbs-net.el: Ditto. * navi2ch-vars.el: Ditto. * navi2ch-article.el: Copyright の表記を更新。 (navi2ch-article-forward-buffer): save-excursion ではなく、 with-current-buffer を使う。 (navi2ch-article-get-message-filter-cache-file-name): inline に。 (navi2ch-article-expunge-buffers): sticky かどうかを mapcar で処理 するように。 navi2ch-article-buffer-list() の呼出し回数を減らした。 (navi2ch-article-load-article-summary) (navi2ch-article-save-article-summary) (navi2ch-article-get-message, navi2ch-article-get-current-name) (navi2ch-article-get-current-mail) (navi2ch-article-inside-range-p) (navi2ch-article-get-buffer-name, navi2ch-article-check-cached): inline に。 (navi2ch-article-kill-buffer-hook): updated だったスレは state を cache に変更しない。 (navi2ch-article-load-info,navi2ch-article-save-info): navi2ch-article-info-cache を廃止。 * navi2ch-util.el: Copyright の表記を更新。 (navi2ch-filename-to-url, navi2ch-rename-file) (navi2ch-read-only-string, navi2ch-count-lines-file) (navi2ch-put-alist): inline に。 (navi2ch-float-time): 定義されていれば、 built-in の float-time を 使用するように。 * navi2ch-multibbs.el: Copyright の表記を更新。 (navi2ch-multibbs-board-update) (navi2ch-multibbs-board-get-file-name) (navi2ch-2ch-subject-callback, navi2ch-multibbs-get-func) (navi2ch-multibbs-get-bbstype): inline に。 * navi2ch-net.el: Copyright の表記を更新。 (navi2ch-net-add-state, navi2ch-net-get-state): inline に。 * navi2ch-board.el: Copyright の表記を更新。 (navi2ch-board-set-property) (navi2ch-board-get-property, navi2ch-board-get-board) (navi2ch-board-exit, navi2ch-board-get-uri) (navi2ch-board-get-matched-article): inline に。 (navi2ch-board-get-article): alias に。 * navi2ch-bookmark.el: Copyright の表記を更新。 (navi2ch-bookmark-get-property) (navi2ch-bookmark-get-article, navi2ch-bookmark-get-board) (navi2ch-bookmark-exit): inline に。 * navi2ch-board-misc.el: Copyright の表記を更新。 (navi2ch-bm-goto-updated-mark-column) (navi2ch-bm-goto-state-column, navi2ch-bm-goto-mark-column) (navi2ch-bm-get-state,navi2ch-bm-get-updated-mark): inline に。 2008-01-30 Naohiro Aota * navi2ch-vars.el (navi2ch-global-map): C-c C-l に navi2ch-be2ch-toggle-login をマップ。 * navi2ch-board-misc.el (navi2ch-bm-mode-map): C-c C-l の map を移 動。 * navi2ch-message.el (navi2ch-message-mode-map): Ditto. * navi2ch-list.el (navi2ch-list-mode-map): Ditto. * navi2ch-article.el (navi2ch-article-mode-map): Ditto. 2008-01-29 Naohiro Aota * navi2ch-message.el (navi2ch-message-samba24): id がかぶっていた時 の対策。 (navi2ch-message-samba24-search-samba): string 以外が url として入っ てきた時の対策。 * navi2ch-vars.el (navi2ch-enable-status-check): 新カスタマイズ変数。 * navi2ch-util.el (navi2ch-browse-url-internal): Use it. 2008-01-24 Naohiro Aota * navi2ch-article.el (navi2ch-article-redraw-range): range を選んだ あと 再描画。 2008-01-23 Naohiro Aota * navi2ch-article.el (navi2ch-article-get-last-read-number): article そのものではなく、 article のコピーを navi2ch-article-load-info() に渡すように。 * navi2ch-board.el (navi2ch-board-insert-subjects): Revert the last change. 2008-01-22 Naohiro Aota * navi2ch-vars.el (navi2ch-article-message-filter-list): `navi2ch-article-message-filter-by-hostname' を追加。 * navi2ch-article.el (navi2ch-article-add-message-filter-by-hostname): 新関数。 (navi2ch-article-message-filter-by-hostname): Ditto. (navi2ch-article-get-current-hostname): Ditto. (navi2ch-article-add-message-filter-rule): hostname の選択肢を追加。 * navi2ch-vars.el (navi2ch-article-message-filter-by-hostname-alist): 新カスタマイズ変数。 2008-01-22 mizmiz * navi2ch-message.el (navi2ch-message-samba24-modeline): cancel-timerは変数をnilにしない仕様らしい。よって、タイマの変数 見てるところで期待どおりの動作をしない。自力でnilに。 (interactive)をnavi2ch-message-samba24-updateから navi2ch-message-samba24-read-sambaに移動。ファイル取得しても読み込 んで展開しなければ意味が無いから。これで、M-x navi2ch-message-samba24-read-sambaをすれば全てうまくいく。名前は分 かりづらいが。 * navi2ch-article.el (navi2ch-article-show-sssp-icon):新関数。 sssp:// なアイコンをインラインで表示させる。ディレクトリ掘って、画 像をそこにキャッシュ。今のところhookで呼んでやっている。 (add-hook 'navi2ch-article-mode-hook 'navi2ch-article-show-sssp-icon) 組み込む良い場所が見付からない。 emacs23のみでテスト済み。emacs側の仕様でアニメgifは動かない。 * navi2ch-vars.el (navi2ch-article-url-regexp): sssp:// でも http:// みたいにリンクっぽいproperty。 * navi2ch-util.el (navi2ch-browse-url-internal): ブラウザを呼ぶ前に ssspをhttpに置換。ブラウザを呼ぶ前にHEADして、ターゲットのデータが 取得できるかどうか確認。サブプロセス呼ぶコスト削減なのだが、厳しす ぎるかも。 2008-01-22 Naohiro Aota Part 18 の 249氏よりの報告 * navi2ch-board.el (navi2ch-board-insert-subjects): navi2ch-article-get-last-read-number() に渡す article を copy-tree するように。 2008-01-20 Naohiro Aota Part 18 の 246氏よりの報告 * navi2ch-message.el (navi2ch-message-samba24): timer で navi2ch-message-samba24-modeline を呼び出すように。 (navi2ch-message-samba24-check): current-time を cur-time に改名。 待ち秒数が負になった時に対応。 2008-01-17 Naohiro Aota * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article-no-check-regexp): 新変数。 (navi2ch-bookmark-fetch-mark-article): navi2ch-bookmark-fetch-mark-article-no-check-regexp が non-nil なら ば、 board-uri がそれにマッチするものは unmark check をしない。 * navi2ch-article.el (navi2ch-article-save-info-keys): Also save response. (navi2ch-article-update-file): 更新後に article-info の response を 更新するように。 * navi2ch-board-misc.el (navi2ch-bm-display-mark-article): inline に。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article-check-update): 新変数。 (navi2ch-bookmark-fetch-mark-article): navi2ch-bookmark-fetch-mark-article-check-update が non-nil ならば update されていないものは mark を外す。 * navi2ch.el (navi2ch-make-temp-file) (navi2ch-make-backup-file-name): inline に。 2008-01-15 Naohiro Aota * navi2ch-article.el (navi2ch-article-load-info) (navi2ch-article-save-info): navi2ch-article-info-cache を使用。 * navi2ch-util.el (navi2ch-cache-get): 新マクロ。 (navi2ch-cache-put): 新関数。 (navi2ch-make-cache): Ditto. (navi2ch-cache-limit, navi2ch-cache-hash-table): Ditto. (navi2ch-cache-p): Ditto. * navi2ch-board-misc.el (navi2ch-bm-mode-map): C-c C-l に navi2ch-be2ch-toggle-login をマップ。 * navi2ch-board.el (navi2ch-board-mode-map): C-c C-l を navi2ch-bm-mode-map に移動。 * navi2ch-multibbs.el (navi2ch-multibbs-get-func-from-board): inline に。 * navi2ch-board.el (navi2ch-board-equal) (navi2ch-board-get-file-name, navi2ch-board-from-file-p): inline に。 * navi2ch-article.el (navi2ch-article-get-file-name) (navi2ch-article-get-info-file-name) (navi2ch-article-file-name-to-artid): inline に。 * navi2ch-util.el (navi2ch-file-size, navi2ch-file-mtime): inline に。 * navi2ch-article.el (navi2ch-article-info-cache): 新変数。 * navi2ch-multibbs.el (navi2ch-2ch-board-file-name-cache): 新変数。 (navi2ch-2ch-board-get-file-name): 上記変数を使用。 file-name を キャッシュする。 * navi2ch-util.el (navi2ch-expand-file-name): ちょっと高速化。 * navi2ch-vars.el (navi2ch-file-name-reserved-char-regexp): navi2ch-file-name-reserved-char-list に変更。 (navi2ch-file-name-reserved-char-list): navi2ch-file-name-reserved-char-regexp から変更。 * navi2ch-multibbs.el (navi2ch-multibbs-func-alist): 削除。 (navi2ch-multibbs-func-table): navi2ch-multibbs-func-alist を hash 化。 (navi2ch-multibbs-get-bbstype-subr): navi2ch-multibbs-func-* の hash 化に追随。 (navi2ch-multibbs-get-func): Ditto. 2008-01-14 Naohiro Aota * navi2ch-message.el (navi2ch-message-samba24-check): Remove debug message. (navi2ch-message-samba24): 2ch 以外の板に書きこんでいた時にも navi2ch-message-samba24-send-time に書きこみ時間が記録されていたバ グを修正。すでに timer 呼び出しがあっても、 timer を生成していたバ グを修正。 (navi2ch-message-samba24-timer): 削除。 (navi2ch-message-samba24-modeline): navi2ch-message-samba24-send-time が nil になったら、 timer を解除。 (navi2ch-message-samba24-update-timer): 新変数。 * navi2ch-localfile.el (navi2ch-localfile-board-update): encode mtime. (navi2ch-localfile-article-update): Ditto. * NEWS: Samba24について記載。 * navi2ch-localfile.el (navi2ch-localfile-board-update) (navi2ch-localfile-article-update): time が nil の時は file の更新 時間を使用。 * navi2ch-util.el (navi2ch-set-mode-line-identification): Samba24 の待ち時間を mode-line に表示。 * navi2ch-message.el (navi2ch-message-samba24-check): 新関数。 (navi2ch-message-samba24-sambatxt-url): 新定数。 (navi2ch-message-samba24-send-time) (navi2ch-message-samba24-show): docstring を追加。 (navi2ch-message-samba24-file-name): 新変数 (navi2ch-message-samba24-update): 上記定数、変数を使用。 navi2ch-expand-file-name() を使用するように。 (navi2ch-message-samba24-search-samba): navi2ch-message-samba24-samba-data の仕様変更に追随。 (navi2ch-message-samba24-read-samba): 同上。 (navi2ch-message-samba24): 同上。 (navi2ch-message-samba24-modeline): global-mode-line ではなく、 navi2ch-message-samba24-mode-string だけを変更するように。 (navi2ch-message-samba24-timer): timer を保持しない。 * navi2ch-multibbs.el (navi2ch-2ch-send-message): 上記関数を使用。 * navi2ch-net.el (navi2ch-net-send-message-error-string) (navi2ch-net-send-message-success-p): proc が nil だった時に対処。 2008-01-13 Naohiro Aota * navi2ch-message.el (navi2ch-message-samba24-modeline): time-diff を拘束。 * navi2ch-popup-article.el (navi2ch-popup-article): num を拘束。 * navi2ch-message.el (navi2ch-message-samba24-modeline): () の対応 を修正。 * navi2ch-vars.el: fixed coding-system problem. * navi2ch-popup-article.el (navi2ch-popup-article-select-current-link): adhoc だけど、 patch#1733433 と、 >>nn のリンク先をさらに popup す ることができるように。 2008-01-13 mizmiz * navi2ch-message.el: 連続投稿規制(samba24)の待ち時間表示追加 * navi2ch-vars.el: パラメータ navi2ch-message-samba24-show 追加 2008-01-13 Naohiro Aota * navi2ch-popup-article.el (navi2ch-popup-article-select-current-link): リンクに使用される text property の変更に追随。 (navi2ch-popup-article): patch#1733433 をマージ。popup の範囲内にな い、 >>nn にカーソルがあってもその内容が minibuffer にでないバグを 修正。 2008-01-12 Naohiro Aota * navi2ch-config.el.in: 復活。 * navi2ch-article.el (navi2ch-article-mode-map): C-c C-l に navi2ch-be2ch-toggle-login をマップ。 * navi2ch-list.el (navi2ch-list-mode-map): Ditto. * navi2ch-board.el (navi2ch-board-mode-map): Ditto. * navi2ch-message.el (navi2ch-message-mode-map): Ditto. * navi2ch-be2ch.el (navi2ch-be2ch-toggle-login): 新関数。 (navi2ch-be2ch-logout): オプション引数 no-msg 追加。 t なら、ログア ウトのメッセージを表示しない。 (navi2ch-be2ch-login): navi2ch-be2ch-logout() を no-msg を t にして 呼ぶ。 * navi2ch-board.el (navi2ch-board-get-subject-list): インデントを整 形。 2008-01-08 Naohiro Aota * navi2ch-util.el (navi2ch-defalias-maybe): quote を新形式に。 * navi2ch-article.el (navi2ch-article-mode-map): iso-left-tab を `navi2ch-article-previous-link' に bind. * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): 同上。 * navi2ch.el (navi2ch): Be にログインしているかどうかを確認。 * navi2ch-util.el (navi2ch-next-property) (navi2ch-previous-property): プロパティが連続する時のバグ修正。 (navi2ch-modeline-be2ch-login, navi2ch-modeline-be2ch-logout): 新変 数。 (navi2ch-set-mode-line-identification): modeline に Be にログインし ているかどうかを表示。 * navi2ch-net.el (navi2ch-net-cookie-domains): 新関数。 (navi2ch-net-cookie-paths): 新関数。 (navi2ch-net-match-cookies): 上記関数を使用。 (navi2ch-net-update-cookies): 同上。 * navi2ch-article.el (navi2ch-article-insert-messages): garbage-collect しない。 (navi2ch-article-check-message-suppression): 同上。 * navi2ch-vars.el (navi2ch-board-coding-system-alist): "Be" 板の coding-system の変更に追随。 * navi2ch-article.el (navi2ch-article-set-link-property-subr) (navi2ch-article-select-current-link) (navi2ch-article-get-current-word-in-body) (navi2ch-article-get-link-text-subr) (navi2ch-article-change-help-echo-property) (navi2ch-article-next-link, navi2ch-article-previous-link) (navi2ch-article-fetch-link) (navi2ch-article-auto-decode-encoded-section) (navi2ch-article-auto-decode-text-on) (navi2ch-article-save-content, navi2ch-article-url-at-point): link-head,link,url,number プロパティを廃止し、 navi2ch-link,navi2ch-link-type を使用。 * navi2ch-vars.el (navi2ch-article-date-format-function): `navi2ch-article-dispweek' を選択肢から削除。 `navi2ch-article-date-format-be2ch' を選択肢に追加。 * navi2ch-be2ch.el (navi2ch-be2ch-coding-system) (navi2ch-be2ch-cookie-names, navi2ch-be2ch-cookie-domain) (navi2ch-be2ch-cookie-path): 新定数。 (navi2ch-be2ch-mdmd, navi2ch-be2ch-dmdm): 削除。 (navi2ch-be2ch-login-flag): 新変数。 (navi2ch-be2ch-logout, navi2ch-be2ch-login) (navi2ch-be2ch-login-p): cookie を使うように。 * navi2ch-multibbs.el (navi2ch-2ch-send-message): be2ch の cookie の特別処理を外す。 * navi2ch-net.el (navi2ch-net-match-cookies): .domain.tld だけでな く domain.tld にもマッチするように。 * .cvsignore: elc-stamp,navi2ch-condig.el を追加。 * navi2ch-article.el (toplevel): `navi2ch-article-separator' をバッ ファローカルにしない。 (navi2ch-article-separator): const 化。 (navi2ch-article-parse-message): 引数 sep を削除。常に `navi2ch-article-separator' を使用。 (navi2ch-article-separator-filter): 新関数。 (navi2ch-article-get-first-message): `navi2ch-article-get-separator' を使用しない。 (navi2ch-article-get-first-message-from-file): `navi2ch-article-filter-list' を適用。 (navi2ch-article-get-message-list): `navi2ch-article-get-separator' を使用しない。 * NEWS: 旧形式 dat のサポートがデフォルトでは無効になったこと、およ び有効にする方法を記載。 * navi2ch-search.el (navi2ch-search-article-regexp): `navi2ch-article-filter-list' を適用。 * navi2ch-util.el (navi2ch-replace-html-tag-alist): 旧 dat のみで使 われている "@`" を削除。 * navi2ch-vars.el (navi2ch-list-filter-list): DOCSTRING とカスタマ イズテンプレートの修正。 * navi2ch-board-misc.el (navi2ch-bm-mark-subr): mark を付ける時は、 `navi2ch-bm-state-mark-face-table' を使用。 (navi2ch-bm-mark): `navi2ch-bm-mark-subr' の仕様変更に追随。 (navi2ch-bm-unmark): 同上。 (navi2ch-bm-mark-region): 同上。 (navi2ch-bm-mark-states): 同上。 (navi2ch-bm-mark-by-query): 同上。 (navi2ch-bm-format-subject): 新関数。 (navi2ch-bm-insert-subject): patch#1632181 に対応するため、上記関数 に分割。 * navi2ch-http-date.el (navi2ch-http-date-wkday-list): 削除。 (navi2ch-http-date-month-list): 削除。 (navi2ch-http-date-encode): bug fix. * navi2ch-article.el (navi2ch-article-link-internal): 新変数。 (navi2ch-article-link-regexp-alist-to-internal): 新関数。 (navi2ch-article-set-link-property): 上記関数、変数を使用。 (navi2ch-article-insert-messages): レス毎に `navi2ch-article-link-regexp-alist-to-internal' を呼ばなくてすむよ うに。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): URL 中の括弧 にある程度対応。 * navi2ch-util.el (navi2ch-propertize): 削除。 (navi2ch-read-only-string): navi2ch-propertize を propertize に書きかえ。 * navi2ch-article.el (navi2ch-article-parse-message) (navi2ch-article-default-header-format-function) (navi2ch-article-auto-decode-encoded-section): 同上。 * navi2ch-message.el (navi2ch-message-insert-header): 同上。 * navi2ch-splash.el (navi2ch-splash-insert-image) (navi2ch-splash-insert-text): 同上。 * navi2ch-net.el (navi2ch-net-update-cookies): header の仕様変更に追随。 2008-01-07 Naohiro Aota * navi2ch-vars.el (navi2ch-on-emacs20): 削除。 * navi2ch-board-misc.el (navi2ch-bm-state-alist): 削除。 (navi2ch-bm-state-char-table): `navi2ch-bm-state-alist' を分割して hash 化。 (navi2ch-bm-state-face-table): 同上。 (navi2ch-bm-state-mark-face-table): 同上。 (navi2ch-bm-updated-mark-alist): 削除。 (navi2ch-bm-updated-mark-table): `navi2ch-bm-updated-mark-alist' の hash 化。 (navi2ch-bm-set-property): 複数の put-text-property を add-text-properties に置換え。 hash の使用。 (navi2ch-bm-insert-subject): hash を使用。 (navi2ch-bm-insert-state): 同上。 (navi2ch-bm-get-state): text-property から取得するように。 (navi2ch-bm-get-updated-mark): 同上。 (navi2ch-bm-mark-subr): `navi2ch-bm-get-state' を使用。 (navi2ch-bm-update-article): `navi2ch-bm-get-updated-mark' を使用。 * navi2ch-localfile.el (navi2ch-localfile-update-file): header の仕様変更に追随。 * navi2ch-list.el (navi2ch-list-sync): 同上。 * navi2ch-head.el (navi2ch-head-get-head-txt): 同上。 * navi2ch-article.el (navi2ch-article-update-file): 同上。 * navi2ch-board.el (navi2ch-board-sync): 同上。 * navi2ch-net.el (navi2ch-net-state-header-alist): 削除。 (navi2ch-net-state-header-table): `navi2ch-net-state-header-alist' を hash 化。 (navi2ch-net-add-state): hash を使用。 (navi2ch-net-get-state): 同上。 (navi2ch-net-get-header): ヘッダ名を downcase して intern。 (navi2ch-net-get-content): header の仕様変更に追随。 (navi2ch-net-update-file): 同上。 (navi2ch-net-get-length-from-header): 同上。 * navi2ch-util.el (navi2ch-regexp-internal-p): 新関数。 (navi2ch-assoc-ignore-case): 削除。 * README: UNIX 板のアドレスを更新。サポートする Emacsen を更新。 * TODO: 更新。 * navi2ch-article.el (navi2ch-article-set-link-property): alist を regexp-internal 形式に変更。 * navi2ch-list.el (navi2ch-list-state-alist): 削除。 (navi2ch-list-state-table): `navi2ch-list-state-alist' を hash 化。 (navi2ch-list-insert-board-names-subr): hash を使用。 (navi2ch-list-make-board-txt): hash を使用。 * navi2ch-util.el (navi2ch-replace-string-regexp-alist): 新関数。 (toplevel): ロード時に、`navi2ch-update-html-tag-regexp' を呼出し。 (navi2ch-update-html-tag-regexp): `navi2ch-replace-html-tag-regexp-internal' を更新するように。 (navi2ch-entity-reference-to-str): `navi2ch-entity-table' を使用。 (navi2ch-re-search-forward-regexp-alist): bound,noerror,count を lexical-let に。 (navi2ch-replace-html-tag-with-buffer): `navi2ch-re-search-forward-regexp-alist' を使用するように。 2008-01-06 Naohiro Aota * navi2ch-util.el (navi2ch-regexp-internal): 新構造体。 (navi2ch-regexp-alist-to-number-alist): 削除。 (navi2ch-regexp-alist-to-internal): navi2ch-regexp-alist-to-number-alist を置換える関数。 (navi2ch-match-regexp-alist-subr): navi2ch-regexp-alist-to-internal を使用するように変更。 (navi2ch-replace-html-tag-regexp): 削除。 (navi2ch-replace-html-tag-regexp-internal): 新変数。 (navi2ch-entity-alist): 削除。 (navi2ch-entity-table): navi2ch-entity-alist から改名。ハッシュにし た。 (navi2ch-alist-to-hash): 新関数。 (navi2ch-replace-html-tag-to-string): 削除。 (navi2ch-replace-html-tag): `navi2ch-replace-string-regexp-alist' を使うようにした。 * navi2ch-article.el (navi2ch-article-default-header-format-function): 日付を navi2ch-article-date-format-function により与えられるフィル タ関数を通したものを表示するように変更。 * navi2ch-vars.el (navi2ch-article-date-format-function): 新変数。 (navi2ch-article-dispweek): 削除。 * navi2ch-list.el (navi2ch-list-ignore-category-list): "特別企画"カ テゴリも無視。 * NEWS: 仮想板に '#' をつけたことを記載 * navi2ch-search.el (navi2ch-search-board): 仮想板の名前に '#' を追 加。 * navi2ch-articles.el (navi2ch-articles-board): 同上。 * navi2ch-directory.el (navi2ch-directory-board): 同上。 * navi2ch-history.el (navi2ch-history-board): 同上。 2007-02-06 extra * navi2ch-article.el (navi2ch-article-message-filter-subr): フィルタ条件が拡張形式でない場合エラーになっていたのを修正。 2007-01-13 extra * navi2ch-util.el (navi2ch-fuzzy-regexp): Bug fix. 2007-01-13 extra * navi2ch-vars.el (navi2ch-article-message-filter-by-name-alist) (navi2ch-article-message-filter-by-message-alist) (navi2ch-article-message-filter-by-id-alist) (navi2ch-article-message-filter-by-mail-alist) (navi2ch-article-message-filter-by-subject-alist): フィルタ条件の拡張。 * navi2ch-util.el (navi2ch-fuzzy-regexp): 新関数。 * navi2ch-localfile.el (navi2ch-localfile-update-file): ファイルの新規作成ができなくなっていたのに対処。 * navi2ch-article.el (navi2ch-article-save-message-filter-cache-keys): aborn 廃止。 (navi2ch-article-insert-messages): フィルタ処理の部分を navi2ch-article-apply-message-filters() に移 し、結果だけ受けとるように。 Article / Hide / Important / Message Filter モード切り替えで再描画 を繰り返すと navi2ch-article-header-format-function() によって alist の中身に何重にも text-property が付くことがあったので、いっ たん text-property を nil にするように。 (navi2ch-article-apply-message-filters): フィルタ処理の部分を navi2ch-article-insert-messages() から移し、結果だけ返すように。 (navi2ch-article-message-filter-by-subject): subject 欄の特別扱いをやめる。 (navi2ch-article-message-filter-subr): フィルタ条件の拡張に対応。 (navi2ch-article-check-message-suppression): フィルタ処理の部分を navi2ch-article-apply-message-filters() に移動・集約。 (navi2ch-article-delete-message): 微修正。 (navi2ch-article-save-message-filter-cache): replace 情報の持ち方を変えたので、セーブ時の形式変換をやめる。 (navi2ch-article-load-message-filter-cache): 同上により、ロード時の変換をやめる。 (navi2ch-article-toggle-replace-message): 同上により、replace 情報の扱いの変更。 (navi2ch-article-toggle-message-filter): 同上。 (navi2ch-article-add-message-filter-rule-subr): フィルタをすぐ適用しない場合のメッセージを表示するように。 (navi2ch-article-read-message-filter-match): フィルタ条件の拡張に対応。 (navi2ch-article-read-message-filter-result): 微修正。 2006-11-12 Nanashi San * acinclude.m4 (AM_PATH_LISPDIR): 削除 * configure.in: lispdir の扱いを automake にまかせる すでに不要だったので cygwin の特別扱いをやめる 使っていないプログラムの検出をやめる 2006-11-06 Nanashi San * navi2ch-vars.el (navi2ch-icon-directory): ここで cl マクロを 使っちゃダメだった (navi2ch-splash-display-logo): 当面 nil にしておく 2006-11-04 Nanashi San splash に使っている画像は GPL 的フリーではないらしい。 * icons/Makefile.am (icon_DATA): ロゴ削除 * icons/navi2ch-logo.img (Tag): 同上 * icons/navi2ch-logo.xbm (Tag): 同上 * icons/navi2ch-logo.xpm (Tag): 同上 2006-11-02 Nanashi San defsubst を defun に 以前最適化した時と比べると、filter 等の処理が増えたことで、関数呼び 出しのコストは相対的に低下 hotspot を見付けやすくするためにも一旦 inline function をやめてみる * navi2ch-article.el (navi2ch-article-inside-range-p): defun に (navi2ch-article-get-buffer-name): 同上 (navi2ch-article-check-cached): 同上 (navi2ch-article-cleanup-message): 同上 (navi2ch-article-parse-message): 同上 (navi2ch-article-get-first-message): 同上 (navi2ch-article-get-first-message-from-file): 同上 (navi2ch-article-set-link-property-subr): 同上 (navi2ch-article-set-link-property): 同上 (navi2ch-article-put-cite-face): 同上 (navi2ch-article-arrange-message): 同上 (navi2ch-article-insert-message): 同上 * navi2ch-board.el (navi2ch-board-from-file-p): 同上 (navi2ch-board-get-matched-article): 同上 (navi2ch-board-updated-article-p): 同上 (navi2ch-board-expire-date-p): 同上 * navi2ch-multibbs.el (navi2ch-multibbs-get-func-from-board): 同上 * navi2ch-util.el (navi2ch-no-logging-message): 同上 (navi2ch-replace-string): 同上 (navi2ch-replace-html-tag-to-string): 同上 (navi2ch-replace-html-tag): 同上 (navi2ch-replace-html-tag-with-buffer): 同上 (navi2ch-replace-html-tag-with-temp-buffer): 同上 (navi2ch-put-alist): 同上 (navi2ch-right-align-strings): 同上 (navi2ch-regexp-alist-to-number-alist): 同上 (navi2ch-match-regexp-alist-subr): 同上 2006-11-02 Nanashi San * navi2ch-vars.el (navi2ch-global-view-map): self-insert は不要 * navi2ch-util.el (navi2ch-set-buffer-multibyte): xemacs かどうかで はなく、set-buffer-multibyte() が束縛されているかで処理を変える (navi2ch-match-string-no-properties): defalias に * navi2ch-multibbs.el (navi2ch-2ch-article-to-url): start が nil で も number でもない時の処理がおかしかったのを修正 * navi2ch-board.el (navi2ch-board-insert-subjects): emacs と xemacs で共通の処理に 2006-11-01 Nanashi San * navi2ch-megabbs.el (navi2ch-megabbs-with-board): id が nil の場合 束縛しないように (navi2ch-megabbs-board-get-file-name): id を使用しないので nil に 2006-11-01 Nanashi San read.cgi の raw モードを削除 * navi2ch-article.el (navi2ch-article-get-readcgi-raw-url): 削除 * navi2ch-board.el (navi2ch-board-enable-readcgi): 削除 (navi2ch-board-get-readcgi-url): 削除 (navi2ch-board-get-readcgi-raw-url): 削除 * navi2ch-multibbs.el (navi2ch-2ch-article-update): read.cgi 使用部 を削除 (navi2ch-2ch-article-to-url): navi2ch-board-get-readcgi-url を使用 しない (navi2ch-2ch-board-update): read.cgi 使用部を削除 * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): 削除 * navi2ch-util.el (navi2ch-enable-readcgi-p): 削除 * navi2ch-vars.el (navi2ch-enable-readcgi): 削除 (navi2ch-enable-readcgi-host-list): 削除 (navi2ch-disable-readcgi-host-list): 削除 2006-10-31 Nanashi San * navi2ch-config.el.in: 新ファイル configure の結果を保存 (今のところ icondir のみ) * Makefile.am (AUTOMAKE_OPTIONS): 要 automake 1.8 (lisp_DATA): 新変数 * configure.in: navi2ch-config.el を出力 * navi2ch-vars.el (navi2ch-icon-directory): navi2ch-config があれば その変数を使用 2006-10-31 Nanashi San * navi2ch-article.el (navi2ch-article-window-configuretion): 削除 * navi2ch-util.el (navi2ch-string-as-unibyte) (navi2ch-string-as-multibyte): 削除 (navi2ch-assoc-ignore-case): lambda がバイトコンパイルされるように (navi2ch-boundp, navi2ch-fboundp): 削除 (navi2ch-browse-url-internal): browse-url-new-window-{flag,p} の選 択法を変更 (navi2ch-propertize, navi2ch-set-keymap-default-binding) (navi2ch-char-valid-p): defalias に (navi2ch-lock-directory): fboundp を使用 (navi2ch-line-beginning-position, navi2ch-line-end-position): navi2ch-ifxemacs ではなく fboundp を使用 (navi2ch-compare-number-list, navi2ch-lists-to-list-of-list) (navi2ch-add-number-lists): 削除 (navi2ch-compare-times): navi2ch-float-time を使用 (navi2ch-right-aligned-string=, navi2ch-string-match-regexp-alist) (navi2ch-replace-regexp-alist, navi2ch-caller-p) (navi2ch-compare-version-string): 削除 * navi2ch-net.el (navi2ch-net-send-message-get-spid): 削除 2006-10-30 Nanashi San * navi2ch-net.el (navi2ch-net-send-request): C-g で止めた場合は navi2ch-net-add-down-host を呼び出さない (navi2ch-net-download-file): navi2ch-net-send-request が nil を返し た場合は nil を返すように 2006-10-29 Nanashi San * navi2ch-multibbs.el (navi2ch-multibbs-send-message-retry-confirm-function) (navi2ch-multibbs-send-message-retry-confirm): 削除 (navi2ch-multibbs-send-message): 上記関数を使用しない navi2ch-multibbs-send-message-retry-confirm-function を 使ってた人は around advice して flet してください * navi2ch-article.el (navi2ch-article-default-message-filter-by-message-alist): 削除 (navi2ch-article-message-filter-by-message): 上記変数を使用しない * navi2ch-message.el (navi2ch-message-font-lock-keywords) (navi2ch-message-link-face, navi2ch-message-url-face) (navi2ch-message-citation-face): 新変数 (navi2ch-message-mode): define-drived-mode を使用 上記変数を font-lock-defaults に * navi2ch-face.el (navi2ch-message-link-face) (navi2ch-message-url-face ,navi2ch-message-citation-face): 新 face 2006-10-27 Nanashi San * navi2ch.el (navi2ch-save-info): 遅いようなので元に戻す 2006-10-25 Nanashi San * navi2ch-megabbs.el (navi2ch-megabbs-send-message): 不要な変数束縛 を削除 * navi2ch-oyster.el (navi2ch-oyster-send-message): navi2ch-2ch-send-message を使用。 2006-10-23 Nanashi San * navi2ch-megabbs.el: 新ファイル * Makefile.am (lisp_LISP): 上記ファイルを追加 patch#1153242 * Makefile.in, aclocal.m4, */Makefile.in: 再作成 (automake 1.9.6) * config.guess, config.sub, elisp-comp, install-sh, missing * mkinstalldirs, doc/texinfo.tex: automake 1.9.6 付属のものに更新 * navi2ch-net.el (navi2ch-net-down-host-alist): 新変数 (navi2ch-net-retry-down-host): 新変数 (navi2ch-net-add-down-host): 新関数 (navi2ch-net-down-p): 新関数 (navi2ch-net-send-request): 上記変数・関数を使用して落ちているホス トは `navi2ch-net-retry-down-host' の間スキップするように patch#1432266 (アイディアのみ) * navi2ch-net.el (navi2ch-net-cookies): 新変数 (navi2ch-net-store-cookie): 新関数 (navi2ch-net-match-cookies): 新関数 (navi2ch-net-cookie-file): 新変数 (navi2ch-net-save-cookies): 新関数 (navi2ch-net-load-cookies): 新関数 (navi2ch-net-update-cookies): 新関数 (navi2ch-net-expire-cookies): 新関数 (navi2ch-net-cookie-string): 新関数 * navi2ch-multibbs.el (navi2ch-multibbs-send-message-retry-confirm): ちゃんとしたタイミングで Set-Cookie されるようになったのでキャンセ ル時の hack を削除 (navi2ch-2ch-send-message): 引数 post を (cons key value) な alist として扱うように navi2ch-net-cookie-* を使用して Cookie を扱う (navi2ch-2ch-extract-post): post すべきデータとして、最後の一つだけ ではなく、複数取り出すように * navi2ch.el (navi2ch-save-info): 編集しやすいように保存 2006-10-23 Nanashi San * navi2ch.el (navi2ch): navi2ch-update-file navi2ch-init-file の load の仕方を変更 * navi2ch-board-misc.el (navi2ch-bm-mode-map): prefix key ("m") に nil を割り当てておく (navi2ch-bm-fetch-mark-article): navi2ch-net-connect-wait でウェイ トを入れるようにしたので navi2ch-bm-fetch-wait を使用しない * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): 同上 * navi2ch-vars.el (navi2ch-bm-fetch-wait): 削除 2006-10-22 Nanashi San * navi2ch-util.el (navi2ch-assoc-ignore-case): 新関数 (navi2ch-replace-html-tag-to-string): assoc-ignore-case -> navi2ch-assoc-ignore-case (navi2ch-numeric-reference-to-str): string-to-int -> string-to-number (navi2ch-end-of-buffer): call-interactively 'end-of-buffer (navi2ch-make-local-hook): 新関数 * navi2ch-popup-article.el (navi2ch-popup-article-mode): make-local-hook -> navi2ch-make-local-hook * navi2ch-net.el (navi2ch-net-get-header): assoc-ignore-case -> navi2ch-assoc-ignore-case * navi2ch-multibbs.el (navi2ch-multibbs-defcallback): gensym -> make-symbol * navi2ch-message.el (navi2ch-message-insert-backup): insert-buffer -> insert-buffer-substring (navi2ch-message-send-message): 同上 * navi2ch-article.el (navi2ch-article-mode): make-local-hook ではなく navi2ch-make-local-hook を使う emacs-22 cleanup 2006-10-22 Nanashi San * navi2ch-jbbs-shitaraba.el (navi2ch-js-send-message-success-p): patch#1229486 2006-10-22 Nanashi San * navi2ch-vars.el (navi2ch-message-sendlog-message-format-function): グループを追加 * navi2ch-util.el (navi2ch-float-time): 新関数 * navi2ch-net.el (navi2ch-net-connect-wait-power): 新変数 (navi2ch-net-connect-time-list): 新変数 (navi2ch-net-connect-wait): 上記変数を使用して待機時間を計算 (navi2ch-net-send-request): 上記時間を挿入 patch#1187825,1188245 2006-10-22 Nanashi San * navi2ch-history.el (navi2ch-history-add): history に必要な情報の みを記録 patch#1166324 2006-10-22 Nanashi San * navi2ch.el (navi2ch): 同上 (navi2ch-save-info): 同上 (navi2ch-load-info): 同上 (navi2ch-update): 同上 * navi2ch-auto-modify.el (navi2ch-auto-modify-save): 同上 * navi2ch-vars.el (navi2ch-init-file): navi2ch-directory からの相対 パスに (navi2ch-bm-fetched-info-file): 同上 (navi2ch-bookmark-file): 同上 (navi2ch-history-file): 同上 (navi2ch-update-file): 同上 (navi2ch-auto-modify-file): 同上 patch#1146248 2006-10-22 Nanashi San * navi2ch-util.el (navi2ch-coding-system): navi2ch-vars.el に移動 * navi2ch-vars.el (navi2ch-coding-system): navi2ch-util.el から移動 (navi2ch-board-coding-system-alist): 上記変数を使用 patch#1124650 2006-09-14 NOKUBI Takatsugu * doc/navi2ch.texi (How to Write): FAQに書き込み時の確認を回避 する方法に付いて言及 2006-07-06 NOKUBI Takatsugu * navi2ch-oyster.el (navi2ch-oyster-send-message): hanamogera-cookie 対応処理を追加 (navi2ch-oyster-func-alist): extract-postを追加 2006-07-03 Masatake YAMATO * navi2ch-multibbs.el (navi2ch-multibbs-func-alist): extract-post を追加。 (navi2ch-multibbs-func-alist): SEND-MESSAGE-FUNCにPOST引数を追加。 (navi2ch-multibbs-send-message): extract-postを取得して、再送前に 呼び出すことで、バッファをスキャンするして再送に必要な情報を得ること ができるようにした。送信試行の最大回数を元に脅した。hanamogera-cookie をpost-dataとして一般化した。 (navi2ch-2ch-extract-post): navi2ch-multibbs-get-hanamogera-cookieから 名前を変更した。 (navi2ch-2ch-send-message): ダイナミックスコープからhanamogera-cookieを 捜すのではなく、POSTという引数を追加して、そこからhanamogera-cookieを キーとしてassqして、hanamogera-cookieの値を取り出せるようにした。 * navi2ch-jbbs-net.el (navi2ch-jbbs-get-writecgi-url): 引数POSTを追加 した。 * navi2ch-jbbs-shitaraba.el (navi2ch-js-send-message): 引数POSTを追加 した。 * navi2ch-localfile.el (navi2ch-localfile-send-message): 引数POSTを追加 した。 * navi2ch-machibbs.el (navi2ch-machibbs-send-message): 引数POSTを追加 した。 * navi2ch-oyster.el (navi2ch-oyster-send-message): 引数POSTを追加した。 2006-07-02 Masatake YAMATO * navi2ch-multibbs.el (navi2ch-multibbs-send-message): hana mogera cookieに対応。 (navi2ch-multibbs-get-hanamogera-cookie): バッファからhana mogera cookieを追加する。 (navi2ch-2ch-send-message): hanamogera-cookieが定義されていれば、 param-alistに追加する。 (navi2ch-multibbs-send-message): hanamogera-cookieをセット。 2006-06-10 NOKUBI Takatsugu クレジット入れ忘れのため削除依頼に対応 2006-05-29 NOKUBI Takatsugu * navi2ch-multibbs.el: 2ch側の新しい書き込みチェックに対応 (hana patch) 2005-09-20 NOKUBI Takatsugu * navi2ch-list.el (navi2ch-list-bbstable-default-url): bbsmenu URL を変更 2005-04-20 mami バーボン対策でウェイトを入れるように。 http://pc8.2ch.net/test/read.cgi/unix/1106152504/841-847n * navi2ch-vars.el (navi2ch-bm-fetch-wait): 新変数。 * navi2ch-board-misc.el (navi2ch-bm-fetch-mark-article): 上記変数 を使うように。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): 同上。 2005-03-16 extra * navi2ch-article.el (navi2ch-article-update-previous-message-separator): スレの1レス目 がhideされたときにエラーにならないように。 2005-02-19 mami * navi2ch-board-misc.el (navi2ch-bm-fetch-mark-article): offline のときはすぐ終了するように。 (navi2ch-bm-fetch-maybe-new-articles): 同上。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-mark-article): 同上。 2005-02-18 mami * NEWS: 更新。 2005-02-14 Taiki SUGAWARA * navi2ch-message.el (navi2ch-message-mode-map): C-a, M-m を navi2ch-message-substitute-key-definitions() に移す。 (navi2ch-message-substitute-key-definitions): 新関数。 (navi2ch-message-mode): 上記関数を呼ぶように。 2005-02-14 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-update-previous-message-separator): 現在位置がbuffer の最後の場合 end を point-max() とするように。 現在位置をそれなりに保存するように。 (navi2ch-article-insert-messages): 後でレスの先頭に文字列を挿入するときの為に、message を挿入した場合 は、point で示される marker の insertion-type を t にするように。 (navi2ch-article-reinsert-partial-messages): 上記変更の為、ここで 一時的に insertion-type を t にするのをやめる。 2005-02-11 mami XEmacs の forward-comment はバッファの最後で t を返す模様。 http://list-archive.xemacs.org/xemacs-beta/200210/msg00522.html * navi2ch-auto-modify.el (navi2ch-auto-modify-skip-comments): 新関 数。 (navi2ch-auto-modify-narrow): 上記関数を使用。 (navi2ch-auto-modify-save-variables): 同上。 2005-02-10 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-insert-message-separator-by-char): face を付ける ように。 * navi2ch-face.el (navi2ch-article-message-separator-face): 新 face。 2005-02-08 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-update-previous-message-separator): previous-single-property-change でいきなりセパレータの最初にいっちゃ う場合があったので対処。 (navi2ch-article-insert-message-separator): navi2ch-article-message-separator-insert-hide-number-p, navi2ch-article-message-separator-insert-trailing-newline-p を見るように。 (navi2ch-article-insert-message): 最後の改行入れるのを navi2ch-article-insert-message-separator() に移す。 * navi2ch-vars.el (navi2ch-article-message-separator-insert-hide-number-p): 新変数。 (navi2ch-article-message-separator-insert-trailing-newline-p): 同上。 2005-02-06 Taiki SUGAWARA http://pc5.2ch.net/test/read.cgi/unix/1106152504/68 の要望をかなえ る為の修正。 - navi2ch-bm.el のいくつかの defsubst な関数を defun に。 - navi2ch-file-mtime, navi2ch-file-size の追加。 - navi2ch-article-local-dat-regexp, navi2ch-article-file-name-to-artid の追加。 navi2ch-localfile では navi2ch-article-local-dat-regexp, navi2ch-article-file-name-to-artid を**わざと**使うようにしてない。 理由は下のパッチがそうなっていなかった為。なんでそうしてなかったか を聞いとく事。 * navi2ch-util.el (navi2ch-file-mtime, navi2ch-file-size): 新関数。 * navi2ch-article.el (navi2ch-article-local-dat-regexp): 新変数。 (navi2ch-article-file-name-to-artid): 新関数。 * navi2ch-board-misc.el (navi2ch-bm-set-property, navi2ch-bm-get-state-from-article) (navi2ch-bm-insert-subject): defsubst -> defun. * navi2ch.el (navi2ch-update): navi2ch-file-mtime, navi2ch-file-size を使うように。 * navi2ch-oyster.el (navi2ch-oyster-get-offlaw-url): 同上。 * navi2ch-net.el (navi2ch-net-update-file) (navi2ch-net-update-file-diff): 同上。 * navi2ch-localfile.el (navi2ch-localfile-update-file): 同上。 * navi2ch-article.el (navi2ch-article-sync) (navi2ch-article-get-readcgi-raw-url): 同上。 * navi2ch-board.el (navi2ch-board-expire-date-p): 同上。 * navi2ch-search.el (navi2ch-search-for-each-article): navi2ch-article-file-name-to-artid, navi2ch-article-local-dat-regexp を使うように。 (navi2ch-search-article-regexp, navi2ch-search-cache) (navi2ch-search-orphan): 同上。 * navi2ch-directory.el (navi2ch-directory-set-subject-list): 同上。 * navi2ch-board.el (navi2ch-board-expire): 同上。 * navi2ch-article.el (navi2ch-article-view-article-from-file): 同上。 2005-02-05 Taiki SUGAWARA * navi2ch-util.el (navi2ch-read-only-string): まずってた。。 2005-02-05 Taiki SUGAWARA header field の read-only 化。 * navi2ch-message.el (navi2ch-message-insert-header): Subject とか を read-only にしてみる。 header が終わる箇所に navi2ch-message-header-separator という property を付ける。 (navi2ch-message-header-end): navi2ch-message-header-separator を 使うように。 (navi2ch-message-beginning-of-line): 新関数。 (navi2ch-message-back-to-indentation): 同上。 (navi2ch-message-mode-map): navi2ch-message-beginning-of-line, navi2ch-message-back-to-indentation を追加。 * navi2ch-util.el (navi2ch-read-only-string): 新関数。 2005-02-02 Taiki SUGAWARA sendlog を書くときの message の format する関数を指定できるように。 message separator の書式をちょっと変更。 * navi2ch-message.el (navi2ch-message-add-sendlog): navi2ch-message-sendlog-message-format-function を funcall するよ うに。 (navi2ch-message-sendlog-simple-message-format): 新関数。 (navi2ch-message-sendlog-message-format-with-board-name): 同上。 * navi2ch-vars.el (navi2ch-message-sendlog-message-format-function): 新変数。 * navi2ch-article.el (navi2ch-article-insert-message-separator): navi2ch-article-insert-hide-number-following をここで呼ぶようにした。 (navi2ch-article-insert-hide-number-following): 頭のセパレータはやめ。 挿入したときに non-nil を返すように。 (navi2ch-article-insert-message-separator-by-face): 引数の number を削除。 navi2ch-article-insert-hide-number-following を呼ぶのをやめた。 (navi2ch-article-insert-message-separator-by-char): 同上。 (navi2ch-article-delete-message): コメント付けた。 2005-02-01 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-insert-hide-number-following): number を 必須にした。 hide 情報の取得を navi2ch-article-message-filter-mode で切り替える ように。 頭にちょっとだけセパレータを入れてみる。 hide -> hidden (^^; (navi2ch-article-update-previous-message-separator): 新関数。 (navi2ch-article-insert-message-separator): 同上。 (navi2ch-article-insert-message): navi2ch-article-insert-message-separator-function への funcall を navi2ch-article-insert-message-separatorに置き換え。 suppress されていたときに、 navi2ch-article-update-previous-message-separator を呼ぶように。 (navi2ch-article-hide-message): navi2ch-article-update-previous-message-separator を呼ぶように。 2005-01-30 mami * navi2ch-article.el (navi2ch-article-insert-message-separator-by-char): 区切り文字の文 字数が負になることがあったので対処。 2005-01-28 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-insert-hide-number-following): 新関数。 (navi2ch-article-insert-message-separator-by-face): navi2ch-article-insert-hide-number-following を呼ぶように。 (navi2ch-article-insert-message-separator-by-char): 同上。 2005-01-26 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-insert-board-names-subr): navi2ch-list-display-board-id-p が non-nil だったら、板IDを表示し てみるように。 * navi2ch-vars.el (navi2ch-list-invalid-host-regexp): コメントの typo 修正。 (navi2ch-list-display-board-id-p): 新変数。 (navi2ch-list-board-id-column): 同上。 2005-01-25 Taiki SUGAWARA BE への書き込みで文字ばけないようにする修正。 * navi2ch-multibbs.el (navi2ch-2ch-send-message): navi2ch-board-get-coding-system の結果を navi2ch-net-get-param-string に渡すように。 * navi2ch-net.el (navi2ch-net-url-hexify-string): 引数の coding-system がある場合は、それで encode するように。 (navi2ch-net-get-param-string): coding-system を navi2ch-net-url-hexify-string に渡すように。 2005-01-25 Taiki SUGAWARA BE のログイン、書き込み対応。 multibbs module としては作ってない。 他の multibbs module に変更を加えないために、 navi2ch-2ch-send-message, navi2ch-2ch-send-message-success-p での coding-system の判別に navi2ch-2ch-send-message-last-board を使っ てる。 これらの関数に board を渡すようにしたほうがいいのかな? * Makefile.am (lisp_LISP): navi2ch-be2ch.el を追加。 * navi2ch.el (toplevel): navi2ch-be2ch を rquire するように。 * navi2ch-multibbs.el (navi2ch-multibbs-send-message-error-string): 新関数。 (navi2ch-multibbs-send-message): navi2ch-coding-system のかわりに navi2ch-board-get-coding-system を使うように。 エラー文字列の取得に navi2ch-multibbs-send-message-error-string を 使うように。 (navi2ch-2ch-send-message-last-board): 新変数。 (navi2ch-2ch-send-message): navi2ch-2ch-send-message-last-board に 値を設定するように。 cookie に navi2ch-be2ch-mdmd, navi2ch-be2ch-dmdm を設定するように。 (navi2ch-2ch-send-message-success-p): navi2ch-2ch-send-message-last-board の値を使って、coding-system を 特定するように。 (navi2ch-2ch-send-message-error-string): 同上。 * navi2ch-net.el (navi2ch-net-send-message-success-p): 引数に coding-system をもらえるように。 引数の coding-system で文字列を decode するように。 (navi2ch-net-send-message-error-string): 同上。 「ログインエラー」をチェックする文字列に追加。 http status によるチェックを navi2ch-multibbs-send-message-error-string に移動。 * navi2ch-be2ch.el: 新ファイル。be@2ch のログインまわりを担当する。 2005-01-25 Taiki SUGAWARA * Makefile.am, configure.in: バイトコンパイルを2回やらないように。 http://sourceforge.net/tracker/index.php?func=detail&aid=1107635&group_id=39552&atid=435774 * config.guess, config.sub, elisp-comp, install-sh, missing, * mkinstalldirs: automake 1.9.2, autoconf 2.59 に付属のものに更新 2005-01-23 Taiki SUGAWARA * navi2ch-multibbs.el (toplevel): cl を require。 2005-01-22 extra * navi2ch-article.el (navi2ch-article-get-number-list): 数字部分が8文字以上のレスアンカーで、正しくレス番を指せないバグを修正。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/929 2005-01-22 Taiki SUGAWARA 復活記念という事で。 とりあえずの BE 対応。というか、文字コード指定対応。 navi2ch-board-coding-system-alist に板ID と coding-system を登録す ることで板に対する文字コードを指定できる。 保存するときに文字コードを変換するんだと、差分更新に対応するのが面 倒なので、開くときに指定できるようにする。 ただ、現状 navi2ch-multibbs-defcallback されている BBS を navi2ch-board-coding-system-alist に登録すると文字化けしちゃうはず。 * navi2ch-search.el (navi2ch-search-article-regexp): navi2ch-board-insert-file-contents を使うように。 (navi2ch-search-cache): navi2ch-article-get-first-message-from-file に board を渡すように。 (navi2ch-search-orphan): 同上。 * navi2ch-bookmark.el (navi2ch-bookmark-fetch-article): navi2ch-article-get-first-message-from-file に board を渡すように。 * navi2ch-article.el (navi2ch-article-get-first-message-from-file): 引数に board を貰えるように。 (navi2ch-article-get-message-list): navi2ch-board-insert-file-contents を使うように。 (navi2ch-article-cached-subject-minimum-size): board と article を引数に貰うように。 navi2ch-board-insert-file-contents を使うように。 (navi2ch-article-cached-subject): 上記関数の変更に対応。 * navi2ch-board.el (navi2ch-board-get-coding-system): 新関数。 (navi2ch-board-insert-file-contents): 新関数。 (navi2ch-board-get-subject-list): navi2ch-board-insert-file-contents を使うように。 (navi2ch-board-save-old-subject-file): navi2ch-board-get-coding-system, navi2ch-board-insert-file-contents を使うように。 * navi2ch-util.el (navi2ch-insert-file-contents): coding-system を指定できるように。 指定されていない場合は今まで通り、navi2ch-coding-system を使う。 * navi2ch-vars.el (navi2ch-board-coding-system-alist): 新変数。 2004-12-13 mami * navi2ch-board.el (navi2ch-board-expire): navi2ch-board-expire-date を引くべきところを足していたのを修正。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/845 2004-12-12 mami * navi2ch-article.el (navi2ch-article-make-mode-line-identification): 新関数として分離。 (navi2ch-article-set-mode-line): 上記関数を使うように。 * navi2ch-message.el (navi2ch-message-make-mode-line-identification): 新関数として分離。 (navi2ch-message-write-message): 上記関数を使うように。 2004-12-12 mami * navi2ch-net.el (navi2ch-net-send-message-error-string): 文字列が 取得できなかったときは HTTP status を返すように。 2004-12-12 mami * navi2ch-board.el (navi2ch-board-expire): navi2ch-board-expire-orphan-only が nil のとき expire されないバグ を修正。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/748 2004-11-21 mami * navi2ch-list.el (navi2ch-list-get-etc-category): navi2ch-list-etc-file-name に navi2ch-directory の外のファイルを指 定したときに正しく動作するように。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/744-746n 2004-11-21 mami * navi2ch-message.el (navi2ch-message-cite-original-from-number): プロンプトの文頭を大文字に。 * navi2ch-board-misc.el (navi2ch-bm-textize-mark-article): 同上。 (navi2ch-bm-mark-by-query): 同上。 * navi2ch-article.el (navi2ch-article-select-view-range-subr): 同 上。 (navi2ch-article-goto-number): 同上。 2004-10-26 mami * navi2ch-articles.el (navi2ch-articles-remove-article): 新関数。 (navi2ch-articles-remove-mark-article): 同上。 (navi2ch-articles-mode-map): 上記関数をバインド。 2004-10-26 mami * navi2ch-articles.el (navi2ch-articles-get-article): バッファが削 除されていたときエラーとならないように。 (navi2ch-articles-get-board): 同上。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/671 2004-10-18 mami * navi2ch.el (navi2ch-update): メッセージ調整。 (navi2ch-toggle-offline): 同上。 (navi2ch-lock): 同上。 2004-10-17 mami * navi2ch*.el: checkdoc と目視でメッセージ調整、docstring 調整、コ メント調整。 * navi2ch-oyster.el (navi2ch-oyster-get-offlaw-url): 引き数の変数 名を変更。 2004-10-12 mami * configure.in: 1.7.5-DEV にアップデート。 2004-10-12 mami * navi2ch: 1.7.5 リリース。 * configure.in: 1.7.5 にアップデート。 2004-10-10 mami * NEWS: 更新。 2004-10-09 mami * navi2ch-util.el (navi2ch-expand-file-name): expand した結果が navi2ch-directory の外のときはエラーに。 /../ などを含む URL 対策。 * navi2ch.el (navi2ch-2ch-url-p): ホスト名がないときは nil に。 http:///〜 などの URL 対策。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/555 2004-10-08 mami * NEWS: 更新。 2004-10-06 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-host-list): 新変数。 (navi2ch-js-p): 上記変数を使うように。 * navi2ch-history.el (navi2ch-history-cut-mark-article): 新関数。 (navi2ch-history-mode-map): 上記関数をバインド。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/550 * navi2ch-bookmark.el (navi2ch-bookmark-delete-mark-article): 新関 数。 (navi2ch-bookmark-mode-map): 上記関数をバインド。 2004-09-28 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-p): http://jbbs.livedoor.jp/ に対応。 http://jbbs.livedoor.jp/bbs/read.cgi/computer/351/1040452916/181 * navi2ch-history.el (navi2ch-history-mode-map): キーバインド変更。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/506-511n 2004-09-12 mami * navi2ch-util.el (navi2ch-decode-coding-region-linewise): 新関数。 * navi2ch-multibbs.el (navi2ch-multibbs-defcallback): XEmacs では 上記関数を使うように。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/461-463n http://pc5.2ch.net/test/read.cgi/unix/1085940686/487 2004-08-26 mami * navi2ch-vars.el (navi2ch-article-link-regexp-alist): amazon.co.jp への URL の最後に / を含めるように。 2004-08-25 mami * navi2ch-article.el (navi2ch-article-parse-message): JBBS@したら ばのキャップやトリップもフォント変更するように。 2004-08-19 mami * navi2ch-article.el (navi2ch-article-goto-number-or-board): デフォルト値も入力値もなかった場合はメッセージを出さないように。 存在しない板が入力されたときのメッセージを変更。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/410-414n 2004-08-18 mami * configure.in: 1.7.4-DEV にアップデート。 2004-08-18 mami * navi2ch: 1.7.4 リリース。 * configure.in: 1.7.4 にアップデート。 2004-08-08 Nanashi San * navi2ch-vars.el (navi2ch-list-invalid-host-regexp): 新変数 * navi2ch-list.el (navi2ch-list-valid-board): 上記変数を使用。 2004-08-06 Nanashi San * navi2ch-article.el (navi2ch-article-set-link-property): h?t?tps? 以外の場合、リンクが貼られないのを修正。 (navi2ch-article-disable-display-link-commands): navi2ch-article-select-current-link を追加。 * navi2ch-multibbs.el (navi2ch-multibbs-send-message-retry-confirm-function): typo 修正。 (navi2ch-multibbs-send-message-retry-confirm): 新関数。 (navi2ch-multibbs-send-message): 上記関数を使用。 * navi2ch-net.el (navi2ch-net-get-content): Connection ヘッダが "close" かを検査。 (navi2ch-net-update-file-diff): last から substring を取るのは cont の方が短い場合のみに。 * navi2ch-util.el (navi2ch-add-days-to-time): 夏時間でも動くように。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): ASIN は [0-9A-Z]。 * navi2ch-vars.el (navi2ch-article-url-regexp): "(" ")" を URL の 一部と見なさないように。 (navi2ch-article-link-regexp-alist): 同上。 2004-08-05 mami * NEWS: 更新。 2004-08-04 mami * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): [(shift iso-lefttab)] に navi2ch-article-previous-link をバインド。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/325 2004-08-03 mami * navi2ch-article.el (navi2ch-article-select-current-link-number): navi2ch-article-select-current-link-number-style が 'jump で navi2ch-article-redraw-when-goto-number が nil の場合、リンク先レ スが表示されてないときに popup せず表示範囲を広げるように。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/154 2004-07-23 mami * navi2ch-article.el (navi2ch-article-get-article-length): 新関数。 (navi2ch-article-str-to-num): 上記関数を使ってレス数を得るように。 popup から popup するときレス数が少なくなってしまうバグの修正。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/155 2004-07-16 mami board 系モードで、スレのない最下行での U の挙動を修正。 * navi2ch-board-misc.el (navi2ch-bm-show-url-subr): a と l で article が存在しない行のときは nil を返すように。 (navi2ch-bm-show-url): 上記で nil が返ってきたときはメッセージを出 して終了するように。 * navi2ch-article.el (navi2ch-article-copy-title): a と A で article が存在しない行のときはメッセージを出して終了するように。 2004-07-13 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-p): http://jbbs.livedoor.com/ に対応。 http://pc5.2ch.net/test/read.cgi/unix/1085940686/259 2004-05-30 mami * navi2ch-bookmark.el (navi2ch-bookmark-delete-bookmark): save-excursion を save-current-buffer に変更。 navi2ch-list-delete-global-bookmark したときにカーソル位置が移動し ないように。 2004-05-29 miz * navi2ch-oyster.el: ●サーバ移転対応 2004-05-09 Nanashi San * README: UNIX 板の URL を更新。 2004-05-05 Nanashi San * configure.in: 1.7.3-DEV にアップデート。 2004-05-05 Nanashi San * navi2ch: 1.7.3 リリース。 * configure.in: 1.7.3 にアップデート。 * navi2ch-util.el (navi2ch-set-mode-line-identification): navi2ch-mode-line-identification を値ではなくシンボルとして mode-line-buffer-identification に設定。 http://pc3.2ch.net/test/read.cgi/unix/1075905430/813 * navi2ch-multibbs.el (navi2ch-multibbs-send-message-retry-comfirm-function): 新変数。 (navi2ch-multibbs-send-message): 上記変数を使用。 2004-05-02 Nanashi San * NEWS: 更新。 * *.el: (defvar *-ident ...) -> (defconst *-ident ...) * 各種ファイル: Copyright 更新。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): バグ持ちの regexp-opt-depth() の場合は nil に。 * navi2ch-net.el (navi2ch-net-update-file-diff-size): 新変数。 (navi2ch-net-update-file-diff): 1 バイトかつ \n 固定ではなく、上記 変数のサイズに従い元のファイルにオーバーラップさせて取得。 あぼーん後にたまたま前回取得の終端位置が "\n" になったので、精度を 上げてみた。 * navi2ch-article.el (navi2ch-article-set-link-property): literal を初期化するように。 (navi2ch-article-view-article): エラーの後始末をする。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): URL の頭の ime.nu を削除。 2004-04-30 Nanashi San * navi2ch-vars.el (navi2ch-article-link-regexp-alist): amazon.co.jp への URL を正規化。 2004-04-29 Nanashi San * navi2ch-face.el (navi2ch-article-header-fusianasan-face): 新 face。 * navi2ch-article.el (navi2ch-article-parse-message): ふしあなさん らしき部分に印を付けておく。 (navi2ch-article-default-header-format-function): 印の付いた部分に navi2ch-article-header-fusianasan-face を付ける。 * Makefile.am ($(srcdir)/navi2ch-version.el): maintainer mode が有 効な時のみ更新。 ($(srcdir)/bcomp.el): 同上。 * navi2ch.el (navi2ch-update): pgp 等が利用できる場合は検証する。 * navi2ch-util.el (navi2ch-verify-signature-file): 新関数。 * navi2ch-vars.el (navi2ch-pgp-verify-command-line): 新変数。 * navi2ch-net.el (navi2ch-net-download-file): time に文字列だけで はなく current-time() 形式も許す。 (navi2ch-net-update-file): time が 'file なら更新するファイルの更 新日時を用いる。 (navi2ch-net-download-logo): SETTING.TXT も保存しておく。 * navi2ch-util.el (navi2ch-coding-system): 可能であれば cp932 を使 用。 * navi2ch-futaba.el (navi2ch-futaba-variable-alist): 'shift_jis で はなく navi2ch-coding-system を使用。 * navi2ch-jbbs-net.el (navi2ch-jbbs-variable-alist): 同上。 * navi2ch-localfile.el (navi2ch-localfile-variable-alist): 同上。 (navi2ch-localfile-coding-system): 同上。 * navi2ch-machibbs.el (navi2ch-machibbs-variable-alist): 同上。 * navi2ch-oyster.el (navi2ch-oyster-variable-alist): 同上。 * navi2ch-jbbs-shitaraba.el (navi2ch-js-coding-system): 新変数。 可能であれば eucjp-ms を使用。 (navi2ch-js-variable-alist): 'euc-japan ではなく上記変数を使用。 (navi2ch-js-send-message): 同上。 (navi2ch-js-send-message-error-string): 同上。 * navi2ch-oyster.el (navi2ch-oyster-update-file-with-offlaw): navi2ch-net-get-content() の結果を unibyte のまま扱うように。 * navi2ch-net.el (navi2ch-net-get-content): 結果を unibyte のまま 返すように。 (navi2ch-net-update-file): navi2ch-net-get-content() の結果を unibyte のまま扱うように。 (navi2ch-net-update-file-with-readcgi): 同上。 (navi2ch-net-update-file-diff): 同上。 差分更新と関数での変換は両立しないので、func 引数を削除。 * navi2ch-multibbs.el (navi2ch-multibbs-defcallback): 変換元バッファ を unibyte として扱い、{decode,encode}-coding-region() に応じて適宜 navi2ch-set-buffer-multibyte() を呼び出すように。 2004-04-29 Nanashi San * navi2ch-util.el (navi2ch-caller-p): 新関数。 (navi2ch-compare-version-string): 新関数。 * navi2ch-article.el (navi2ch-article-set-link-property): 置換先が 関数だった場合はその返却値の \ を特別扱いしない。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): docstring、 custom の設定を修正。 (navi2ch-article-url-regexp): RFC 2396 に準拠。 2004-04-25 Nanashi San * navi2ch-article.el (navi2ch-article-disable-display-link-commands): navi2ch-article-show-url-at-point → navi2ch-show-url-at-point * navi2ch-util.el (navi2ch-disabled-key): 新関数。 * navi2ch-vars.el (navi2ch-global-map): "C-xC-e" に ignore ではな く、上記関数をバインド。 * navi2ch.el (navi2ch-url-at-point): 新関数。 (navi2ch-show-url-at-point): 新関数。 * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): "u" を navi2ch-show-url-at-point に変更。 (navi2ch-popup-article-url-at-point): 新関数。 (navi2ch-popup-article-show-url-at-point): 削除。 * navi2ch-list.el (navi2ch-list-url-at-point): 新関数。 * navi2ch-board-misc.el (navi2ch-bm-url-at-point): 新関数。 * navi2ch-article.el (navi2ch-article-cleanup-message): 削る行頭の 空白は一つだけに。 (navi2ch-article-mode-map): u を navi2ch-show-url-at-point に変更。 (navi2ch-article-url-at-point): docfix (navi2ch-article-show-url-at-point): 削除。 * navi2ch-net.el (navi2ch-open-network-stream-via-command): navi2ch-open-network-stream-command の自由度を上げた。 * navi2ch-vars.el (navi2ch-open-network-stream-command): 上記変更 について docstring および custom type を変更。 * navi2ch-article.el (navi2ch-article-set-link-property): cdr が関 数だった場合はその返却値を利用するように。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): 上記変更に ついて docstring 変更。 2004-04-24 Nanashi San ネットワーク接続に外部コマンドや自前関数を使えるようにしてみた。 * navi2ch-message.el (navi2ch-message-send-message): レスをポスト する前後で接続を閉じる。 * navi2ch-net.el (navi2ch-open-network-stream-with-retry): navi2ch-open-network-stream から名称変更。 (navi2ch-open-network-stream-via-command): 新関数。 (navi2ch-net-send-request): process-status が run の時も実行。 (navi2ch-net-send-request): process-status が run の時も除外。 navi2ch-open-network-stream-function を使用。 (navi2ch-net-get-status): process-status が run の時もループ。 (navi2ch-net-get-header): 同上。 (navi2ch-net-get-chunk): 同上。 (navi2ch-net-get-content): 同上。 * navi2ch-vars.el (navi2ch-open-network-stream-function): 新変数。 (navi2ch-open-network-stream-command): 新変数。 2004-04-24 Nanashi San * navi2ch-net.el (navi2ch-open-network-stream): 新関数。 EINPROGRESS、EALREADY の場合は再試行する。 (navi2ch-net-send-request): 上記関数を使用。 2004-04-23 Nanashi San * navi2ch-article.el (navi2ch-article-disable-display-link-commands): eval-expression を追加。 * navi2ch-board-misc.el (navi2ch-bm-select-article-or-scroll): こ こではエラーを無視すべきではない。 (navi2ch-bm-remove-article-subr): file-error のみを無視。 * navi2ch-board.el (navi2ch-board-expire-date-p): current-time() 形式で比較。 (navi2ch-board-expire): 同上。 * navi2ch-util.el (navi2ch-replace-html-tag-regexp-alist): も空文字列に。 (navi2ch-make-sortable-date): 削除。 (navi2ch-make-datevec): 削除。 (navi2ch-get-offset-datevec): 削除。 (navi2ch-compare-number-list): 新関数。 (navi2ch-lists-to-list-of-list): 新関数。 (navi2ch-add-number-lists): 新関数。 (navi2ch-compare-times): navi2ch-compare-number-list() を使用。 (navi2ch-add-days-to-time): 新関数。 2004-04-21 Nanashi San * navi2ch-multibbs.el (navi2ch-multibbs-send-message): cookie 要求 のメッセージを表示し、同意を求める。(結構不穏な事書いてあります) (navi2ch-2ch-send-message): cookie の expire を確認。 * navi2ch-oyster.el (navi2ch-oyster-send-message): 同上。 * navi2ch-net.el (navi2ch-net-send-message-get-spid): cookie の expire 日時も返す。 * navi2ch.el (navi2ch): navi2ch-auto-update が nil の時、lock が行 われなかったのを修正。 2004-04-17 Nanashi San * navi2ch-util.el (navi2ch-truncate-string-to-width): 新関数。 XEmacs の truncate-string-to-width が壊れているので。 * navi2ch-message.el (navi2ch-message-insert-aa-list): 上記関数を 使用。 * README: UNIX 板の URL を更新。 2004-04-14 Nanashi San * navi2ch-article.el (navi2ch-article-popup-dialog): "" だとセパレー タになってしまうそうなので。 * navi2ch-splash.el (navi2ch-splash-copyright-notice): Navi2ch Project 以外の Copyright holder についての説明文を挿入。 (navi2ch-splash-insert-text): 縦センタリングの計算方法を変更。 * navi2ch-vars.el (navi2ch-global-view-map): delete 系のキーをキー ボードマクロとして登録するのをやめる。 * navi2ch-util.el (navi2ch-delete-keys): 新変数。 (navi2ch-define-delete-keys): 新関数。 (navi2ch-read-char): 入力されたキーを表示できるか検査。 * navi2ch-article.el (navi2ch-article-mode-map): 上記関数を使用。 * navi2ch-board-misc.el (navi2ch-bm-mode-map): 同上。 * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): 同上。 * navi2ch-list.el (navi2ch-list-mode-map): 同上。 2004-04-14 Nanashi San * navi2ch-article.el (navi2ch-article-mode-map): `navi2ch-article-show-url-at-point' をバインド。 (navi2ch-article-get-number-list): 新関数。 (navi2ch-article-select-current-link): 上記関数を使用。 (navi2ch-article-get-link-text-subr): 同上。 (navi2ch-article-number-list-to-url): 新関数。 (navi2ch-article-select-current-link-number): 上記関数を使用。 (navi2ch-article-disable-display-link-commands): 新変数。 (navi2ch-article-display-link-minibuffer): 上記変数に含まれるコマ ンドの後はミニバッファを更新しないように。 (navi2ch-article-url-at-point): 新関数。 (navi2ch-article-show-url-at-point): 新関数。 * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): `navi2ch-popup-article-show-url-at-point' をバインド。 (navi2ch-popup-article-show-url): 新関数。 2004-04-11 Nanashi San * navi2ch-util.el (navi2ch-set-keymap-default-binding): GNU Emacs でのデフォルト動作指定を (define-key map [t] command) に。 * navi2ch-article.el (navi2ch-article-message-filter-by-message): append 末尾の nil は不要。 2004-04-09 Nanashi San マクロの使用を未評価の引数が必要な場合のみに制限。 * navi2ch-util.el (navi2ch-mouse-key): 新関数。 (navi2ch-define-mouse-key): 上記関数を使うように。 マクロ→関数。 (navi2ch-set-buffer-multibyte): マクロ→エイリアス (navi2ch-string-as-unibyte): 同上 (navi2ch-string-as-multibyte): 同上 (navi2ch-make-sortable-date): マクロ→関数 (navi2ch-match-string-no-properties): マクロ→インライン関数 * navi2ch-mona.el (navi2ch-find-face): マクロ→エイリアス (navi2ch-mona-char-height): マクロ→関数 (navi2ch-set-face-parent): 同上 2004-04-09 Nanashi San * navi2ch.el (navi2ch): condition-case して signal すると debug-on-* が signal の部分になるので unwind-protect を使用。 * navi2ch-util.el (navi2ch-add-replace-html-tag): regexp-opt のバ グへに再び対処。この関数の実行時間はそれほど重要ではないので、まず regexp-opt がエラーを起こすかどうかを試し、regexp-opt を使うか regexp-quote を使うかを判別する。 2004-04-08 Nanashi San * navi2ch-vars.el (navi2ch-global-view-map): [del] [delete] [backspace] で "\d" が入力されるように。 (上記の子 map): scrolldown 系のバインドは "\d" のみに。 * navi2ch-board-misc.el (navi2ch-bm-get-state-from-article): 新関数。 (navi2ch-bm-insert-subject): 上記関数を使用。 (navi2ch-bm-update-article): 新関数。 (navi2ch-bm-remove-article-subr): 上記関数を使用。 (navi2ch-bm-remove-article): 不要な更新を削除。 * navi2ch-article.el (navi2ch-article-view-article): navi2ch-bm-update-article を使用。 (navi2ch-article-kill-buffer-hook): 同上。 (navi2ch-article-remove-article): 不要な更新を削除。 * navi2ch-util.el (navi2ch-match-regexp-alist-subr): key は整数な ので assq を使用。 (navi2ch-update-html-tag-regexp): 新関数。 (navi2ch-add-replace-html-tag-regexp): 上記関数を使うように。 (navi2ch-add-replace-html-tag): 同上。 regexp-opt のバグに由来する work around を削除。 * navi2ch-net.el (navi2ch-net-ignore-errors): make-symbol したシン ボルを使用。ちょっと書き直し。 (navi2ch-net-url-unreserved-chars): 準拠仕様を RFC 2396 に。 (navi2ch-net-url-hexify-string): ちょっと書き直し。 (navi2ch-net-get-param-string): 「=」の左辺もエスケープ。 2004-04-05 Nanashi San * navi2ch-util.el (navi2ch-re-search-forward-regexp-alist): 再マッ チ時、ポイントの移動を減らす。 (navi2ch-string-match-regexp-alist): 同上。 (navi2ch-replace-regexp-alist): 関数を呼び出す場合、マッチした文字 列を引数として渡すように。 * navi2ch-message.el (navi2ch-message-mode-map): C-c y → C-c C-j ユーザー予約キーを避ける。 2004-04-04 Nanashi San * navi2ch-article.el (navi2ch-article-set-link-property): マッチし た後、少なくとも 1 文字は進めるように。 * navi2ch.el (navi2ch-goto-url): デフォルト値として、カーソル下の URL プロパティを使用。 * navi2ch-article.el (navi2ch-article-set-link-property): regexp-alist をあらかじめ内部形式に変換しておく。 置換先が nil の場合は何もしない。 * navi2ch-util.el (navi2ch-regexp-alist-to-number-alist): 新関数。 (navi2ch-match-regexp-alist-subr): 上記関数を使用。 (navi2ch-replace-regexp-alist): regexp-alist をあらかじめ内部形式 に変換しておく。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): <> の間に 「:」を含まない文字列は URL と見なさない。 2004-04-03 Nanashi San * navi2ch-article.el (navi2ch-article-set-link-property): 複数の正 規表現をまとめて検索するように。navi2ch-article-link-regexp-alist を使用して URL ではない物にもリンクを貼れるように。 * navi2ch-vars.el (navi2ch-article-link-regexp-alist): 新変数。 * navi2ch-util.el (navi2ch-match-regexp-alist-subr): 新関数。 (navi2ch-re-search-forward-regexp-alist): 新関数。 (navi2ch-string-match-regexp-alist): 新関数。 (navi2ch-replace-regexp-alist): 新関数。 2004-03-30 Nanashi San * navi2ch-vars.el (navi2ch-2ch-host-list): pc.2ch.net pc2.2ch.net 追加。 * navi2ch-board.el (navi2ch-board-url-to-board): navi2ch-list-board-name-list を使ってそれっぽい名前を付けるように。 2004-03-28 mami * navi2ch-jbbs-net.el (navi2ch-jbbs-url-regexp): 新変数。 (navi2ch-jbbs-get-writecgi-url): 新関数。 (navi2ch-jbbs-send-message): 上記を使うように。 http://pc3.2ch.net/test/read.cgi/unix/1075905430/452 (navi2ch-jbbs-func-alist): error-string を削除。 (navi2ch-jbbs-send-message): Cookie に NAME と MAIL を追加。 MESSAGE が二重になっていたので片方を削除。 2004-03-28 mami * ChangeLog: ChangeLog.1, ChangeLog.2 に分割。 2004-03-28 mami * navi2ch-jbbs-shitaraba.el 透明あぼーんの検出を改良。 新形式 URL に対応。rawmode.cgi に対応。ID を表示するように。 http://jbbs.shitaraba.com/bbs/read.cgi/computer/351/1040452916/126-140n (navi2ch-js-get-writecgi-url): 廃止。 (navi2ch-js-get-cgi-url): 新関数。 (navi2ch-js-send-message): 上記を使い、引き数を渡すように。 http://jbbs.shitaraba.com/bbs/read.cgi/computer/351/1040452916/129-133n (navi2ch-js-article-to-url-subr): 新関数。新形式 URL に対応。 (navi2ch-js-article-to-url): 上記を使うように。 (navi2ch-js-article-to-rawmode-url): 新関数。 (navi2ch-js-parse-regexp): rawmode.cgi の出力に対応。 (navi2ch-js-article-callback): 2番目の引き数を取得開始レス番に変更 し、透明あぼーんの検出を改良。 rawmode.cgi の出力に対応。ID を表示するように。 (navi2ch-js-article-callback-diff): 上記変更にともない廃止。 (navi2ch-js-article-update): navi2ch-js-article-to-rawmode-url を 使うように。差分取得のとき navi2ch-js-article-callback に start を つけて呼ぶように。 (navi2ch-js-parse-subject-regexp): 廃止。 (navi2ch-js-parse-subject): 同上。 (navi2ch-js-make-article): 同上。 2004-03-25 Nanashi San * navi2ch-vars.el (navi2ch-list-moved-board-alist): 新変数。 キーが旧 URL、値が新 URL の alist。 * navi2ch-list.el (navi2ch-list-make-board-txt): 上記変数を使用し て移転した板の URL を変更できるように。 2004-03-24 Nanashi San * navi2ch-splash.el (navi2ch-splash-copyright-notice): 著作権表示と無保証条項を追加。 (navi2ch-splash-logo-ascii): 24 行の端末でも上記が全て表示されるように。 2004-03-23 Nanashi San * navi2ch-article.el (navi2ch-article-message-filter-by-message): navi2ch-article-message-filter-subr() の引数が副作用で並べかえられ るのでとりあえず修正。 2004-03-21 Nanashi San * configure.in: 1.7.2-DEV にアップデート。 2004-03-21 Nanashi San * navi2ch: 1.7.2 リリース。 * configure.in: 1.7.2 にアップデート。 2004-03-19 Nanashi San * 今年に入ってから更新されてるファイル: Copyright 更新 * NEWS: 更新 2004-03-18 Nanashi San * navi2ch-article.el (navi2ch-article-default-message-filter-by-message-alist): 新変数。 (navi2ch-article-message-filter-by-message): 上記変数を使うように。 * navi2ch-vars.el (navi2ch-global-map): Navi2ch 内では C-xC-e を unbound。 2004-03-18 NOKUBI Takatsugu * navi2ch.el: eval-last-sexp, shell-command に advice 追加。 セキュリティ対策。 上記 commit を取消し。 2004-03-12 Nanashi San * navi2ch-util.el (navi2ch-right-align-strings): 新関数。 (navi2ch-right-aligned-string<): 新関数。 (navi2ch-right-aligned-string=): 新関数。 (navi2ch-compare-strings): 削除。 * navi2ch-directory.el (navi2ch-directory-set-subject-list): 上記関数を使うように。 * navi2ch-search.el (navi2ch-search-for-each-article): 同上。 2004-03-10 Nanashi San * navi2ch-util.el (navi2ch-compare-strings): 新関数。 文字列を右寄せにして比較。 * navi2ch-directory.el (navi2ch-directory-set-subject-list): 板 ID が数字であると仮定していたので、上記関数を使うように。 * navi2ch-search.el (navi2ch-search-for-each-article): 板中のスレ をスレの立った日時が新しい順にソート。 2004-03-05 mami * navi2ch-list.el (navi2ch-list-ignore-category-list): 板カテゴリ 再編にともない「運営」を「運営案内」に変更。 http://qb3.2ch.net/test/read.cgi/operate/1077986839/105 2004-02-29 Nanashi San * configure.in (AC_PREREQ): Autoconf 2.53 以降を要求。 * Makefile.am (AUTOMAKE_OPTIONS): Automake 1.5 以降を要求。 2004-02-28 Nanashi San * navi2ch-mona.el (navi2ch-mona-enable-list): 新変数。 (navi2ch-mona-disable-list): 新変数。 (navi2ch-mona-match-p): 新関数。 (navi2ch-mona-arrange-message): 上記を使用し、 navi2ch-mona-{enable,disable}-{board,article}-list より一般化した 条件でモナーフォントを有効にするかどうかを判断。 * navi2ch-article.el (navi2ch-article-display-link-minibuffer): isearch 中はリンク先を表示しない。 * navi2ch-util.el (navi2ch-replace-html-tag-regexp-alist): 英字から始まる場合のみ HTML タグとみなす。 東アジアnews+ の名無しさんに対応。 * navi2ch-search.el (navi2ch-search-all-board-list): 結果を逆順に。 2004-02-15 Nanashi San * navi2ch-search.el (navi2ch-search-subject-subr): 引数に板リスト を得る関数を渡せるように。 (navi2ch-search-article-subr): 同上。 (navi2ch-search-all-subject): 上記関数を使うように。 (navi2ch-search-all-article): 同上。 全ての板で検索する場合、"a" を押してから "regexp:" のプロンプトが 出るまでにラグがあるのを軽減。 2004-01-17 Nanashi San * navi2ch-vars.el (navi2ch-article-url-regexp): ftp:// にもマッチするように。 2004-01-13 Nanashi San * navi2ch-util.el (navi2ch-set-mode-line-identification): navi2ch-mode-line-identification 中の % をエスケープするように。 $Id$ navi2ch/ChangeLog.1000066400000000000000000002333751173560164300143440ustar00rootroot000000000000002001-12-02 Taiki SUGAWARA * navi2ch.el (navi2ch-load-info): read-string $B$G$O$J$/(B read $B$r;H$&$h$&$K(B * navi2ch-board.el (navi2ch-board-mode-map): "A" $B$N%-!<%P%$%s%I$r$O$:$9!#(B (navi2ch-board-updated-article-p): seen-list $B$G$O$J$/(B seen $B$bLc$&$h$&$K(B (navi2ch-board-insert-subjects): article-summary $B$r;H$&$h$&$K(B (navi2ch-board-update-seen-articles): $BF1>e(B (navi2ch-board-expire-date-p): $B$d$C$Q$j(B board $B$H(B article $B$rLc$&$N$O$d$a!#(B (navi2ch-board-expire): article-summary $B$r;H$&$h$&$K(B * navi2ch-article.el (navi2ch-article-summary-file-name): $B?7JQ?t(B (navi2ch-article-summary-element-set-access-time): $B?7%^%/%m(B (navi2ch-article-summary-element-set-seen): $BF1>e(B (navi2ch-article-summary-element-access-time): $BF1>e(B (navi2ch-article-summary-element-seen): $BF1>e(B (navi2ch-article-sync): set-seen $B$NBe$j$K(B set-summary-element $B$r;H(B $B$&$h$&$K(B (navi2ch-article-fetch-article): remove-seen $B$NBe$j$K(B set-summary-element $B$r;H$&$h$&$K(B (navi2ch-article-load-article-summary): $B?74X?t(B (navi2ch-article-save-article-summary): $BF1>e(B (navi2ch-article-set-summary-element): $BF1>e(B (navi2ch-article-make-seen): $B4X?t:o=|(B (navi2ch-article-remove-seen): $BF1>e(B (navi2ch-article-set-seen): $BF1>e(B 2001-11-30 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-list-bbstable-url): newbbsmenu.html $B$KJQ99(B * navi2ch-bookmark.el (navi2ch-bookmark-exist-all): $B?74X?t(B * navi2ch-board.el (navi2ch-board-expire-date-p): board $B$H(B article $B$re(B (navi2ch-article-remove-seen): navi2ch-get-major-mode $B$r;H$&$h$&$K(B (navi2ch-article-set-seen): $BF1>e(B 2001-11-28 Taiki SUGAWARA saparater $B$r(B separator $B$K=$@5(B * navi2ch-util.el (navi2ch-y-or-n-p): read-event $B$r(B read-char $B$KJQ99(B * navi2ch-board.el (navi2ch-board-get-file-name): uri $B$,(B nil $B$N$H$-$KBP=h(B * navi2ch-articles.el (navi2ch-articles-get-article): item $B$,(B nil $B$N$H$-$KBP=h(B (navi2ch-articles-get-board): $BF1>e(B * navi2ch-article.el (navi2ch-article-mode-map): "C-cC-u" $B$r(B navi2ch-goto-url $B$KJQ99(B (navi2ch-article-add-global-bookmark): navi2ch-bookmark-add $B$N?7$7(B $B$$;EMM$KDI?o(B 2001-11-27 Taiki SUGAWARA * navi2ch.el (navi2ch-version): $B?74X?t(B (navi2ch-save-info): $B%U%!%$%k$,B8:_$9$k$+$N%A%'%C%/$r$b$C$H$^$H$b(B $B$K(B * navi2ch-net.el (navi2ch-net-last-url): $B?7JQ?t!#(B (navi2ch-net-send-request): $B>e$r;H$&$h$&$K(B * navi2ch-message.el (navi2ch-message-mode-map): C-cy $B$K(B navi2ch-message-cite-original-from-number $B$r@_Dj$7$J$*$9!#(B C-cC-i $B$K(B navi2ch-message-insert-backup $B$r@_Dj(B (navi2ch-message-insert-backup): $B?74X?t(B * navi2ch-bookmark.el (navi2ch-bookmark-add): bookmark-id $B$rLc$&$h$&$K(B * navi2ch-board.el (navi2ch-board-get-file-name): string-match $B$K<:GT$7$?$i(B nil (navi2ch-board-update-file): read.cgi $B$r;H$o$J$$$h$&$K(B (navi2ch-board-add-global-bookmark): navi2ch-bm.el $B$K0\F0(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): "A" $B$K(B navi2ch-bm-add-global-bookmark $B$r@_(B $BDj(B (navi2ch-bm-mode-map): "mA" $B$K(B navi2ch-bm-add-global-bookmark-mark-article $B$r@_Dj(B (navi2ch-bm-add-global-bookmark): navi2ch-board $B$+$i0\F0(B (navi2ch-bm-add-global-bookmark-mark-article): $B?74X?t(B * navi2ch-article.el (navi2ch-article-update-file): $B:G=i$K mapcar() $B$N<~$j$N(B function() $B$H(B # $B$r>C$7$?(B * navi2ch-vars.el (navi2ch-message-aa-prefix-key): $B%G%U%)%k%H$r(B "\C-c\C-a" $B$KJQ99(B * navi2ch-util.el (navi2ch-y-or-n-p): $B?74X?t(B * navi2ch-article.el (navi2ch-article-through-ask): navi2ch-y-or-n-p $B$r;H$&$h$&$K(B (navi2ch-article-through-next): $B>e$NJQ99$KDI?o(B (navi2ch-article-through-previous): $BF1>e(B 2001-11-21 Taiki SUGAWARA * navi2ch.el (navi2ch-save-info): FILE $B$,FI$a$J$$$H$-$OFI$^$J$h$&$K(B (navi2ch-load-info): $BF1>e(B * navi2ch-vars.el (navi2ch-bm-stay-board-window): $B?7JQ?t(B * navi2ch-util.el (navi2ch-goto-url): navi2ch-article-goto-url $B$r$3$N4X?t$KJQ99(B * navi2ch-list.el (navi2ch-list-mode-map): "C-cC-u" $B$r(B navi2ch-goto-url $B$KJQ99(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): "C-cC-u" $B$r(B navi2ch-goto-url $B$KJQ99(B (navi2ch-bm-select-article): navi2ch-bm-select-article $B$r;H$&$h$&(B $B$K!#(B * navi2ch-article.el (navi2ch-article-default-header-format-function): $B2~9TJ8;z$K$b(B face $B$rIU$1$F$$$?$N$r=$@5(B (navi2ch-article-exit): board buffer $B$,$J$$$H$-$KBP=h(B (navi2ch-article-find-file): navi2ch-list-stay-list-window $B$H(B navi2ch-bm-stay-board-window $B$r;H$&$h$&$K(B (navi2ch-article-select-current-link): $B6/@)E*$K%V%i%&%6$G8+$l$k$h$&$K!#(B $BHD$X$N(B URL $B$bC)$l$k$h$&$K(B 2001-11-18 Taiki SUGAWARA * navi2ch.el (navi2ch-exit): popup-buffer $B$H(B message-backup-buffer $B$b>C$9$h$&$K(B * navi2ch-util.el (navi2ch-url-to-article): read.cgi $B$N(B regexp $B$r(B $B>/$7=$@5(B (navi2ch-end-of-buffer): $B?74X?t(B * navi2ch-popup-article.el (navi2ch-popup-article): navi2ch-article-message-list $B$r:n$k$H$-!"(Bcopy-tree $B$9$k$h$&$K(B * navi2ch-list.el (navi2ch-list-mode-map): navi2ch-end-of-buffer $B$r(B "<" $B$K@_Dj(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): navi2ch-end-of-buffer $B$r(B "<" $B$K@_Dj(B * navi2ch-article.el (navi2ch-set-make-seen): navi2ch-board-current-board $B$G$O$J$/$F(B navi2ch-article-current-board $B$r4V0c$C$F;H$C$F$$$?$N$rD>$7$?(B (navi2ch-article-remove-seen): $BF1>e(B 2001-10-30 Taiki SUGAWARA * navi2ch.el (navi2ch-exit): popup-buffer $B$r(B message-backup-buffer $B$r>C$9$h$&$K(B * navi2ch-board.el (navi2ch-board-get-property): $B9TKv$@$HA*$Y$J$/(B $B$J$C$F$?$N$r=$@5(B * navi2ch-search.el (navi2ch-search-get-property): $BF1>e(B * navi2ch-history.el (navi2ch-history-get-property): $BF1>e(B * navi2ch-bookmark.el (navi2ch-bookmark-get-property):$BF1>e(B * navi2ch-article.el (navi2ch-article-remove-seen): $B$d$C$A$c$@$a$J(B $B;~$^$G(B navi2ch-board-load-info $B$7$F$$$?$N$r=$@5(B (navi2ch-article-set-seen): $BF1>e(B (navi2ch-article-apply-filters): $B0z?t$K(B board $B$rLc$&$h$&$K(B (navi2ch-article-get-message-list): $B>e$NJQ99$K9g$o$;$?(B 2001-10-28 Taiki SUGAWARA * navi2ch.el (navi2ch): hook $BDI2C(B * navi2ch-vars.el (navi2ch-list-etc-file-name): $B?7JQ?t(B (navi2ch-list-sync-update-on-boot): $BF1>e(B (navi2ch-article-message-separater): $BF1>e(B (navi2ch-article-message-separater-width): $BF1>e(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): $B$H$j(B $B$"$($:!"(B"\r" $B$H(B mouse-2 $B$N%-!<%P%$%s%I$r$O$:$7$?(B * navi2ch-message.el (navi2ch-message-send-message): hook $BDI2C(B 2001-10-28 mami * navi2ch-list.el (navi2ch-list-sync): $B5/F0;~$KHD0lMw$r * navi2ch-list.el (navi2ch-list-get-etc-category): etc.txt $B$rJQ?t(B $B$G;XDj$9$k$h$&$K(B * navi2ch-board.el (navi2ch-board-sync): hook $BDI2C(B (navi2ch-board-load-info): $B$NIT6q9g=$@5(B * navi2ch-article.el (navi2ch-article-insert-message-separator-function): $B?7JQ?t(B (navi2ch-article-insert-message-separator-by-face): $B?74X?t(B (navi2ch-article-insert-message-separator-by-char): $BF1>e(B (navi2ch-article-insert-message): $B>e$N(B *-separator-* $B$J4X?t$r8F$V$h$&$K(B (navi2ch-article-sync): hook $BDI2C(B 2001-10-27 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-get-uri): uri $B$,(B non-nil $B$N$H$-(B $B$@$1(B string-match $B$9$k$h$&$K(B (navi2ch-board-save-old-subject-file): coding-system-for-write $B$r(B $BB+G{$9$k$h$&$K(B * navi2ch.el (navi2ch-save-info): coding-system $B$N@_Dj$N;EJ}$r>/$7(B $BJQ99(B 2001-10-26 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-mode-map): mouse $B$N%-!<%P%$(B $B%s%I$r(B navi2ch-define-mouse-key $B$r;H$&$h$&$KJQ99!#(B (navi2ch-article-message-separater): $B?7JQ?t(B (navi2ch-article-apply-filters): $BHD(BID $B$r(B filter $B$KEO$9$h$&$KJQ99(B (navi2ch-article-insert-message): underline $B$G$J$/(B navi2ch-article-message-separater $B$r%;%Q%l!<%?$K;H$&$h$&$K(B (navi2ch-article-sync): navi2ch-article-set-seen $B$N;EMMJQ99(B (navi2ch-article-fetch-article): navi2ch-article-remove-seen $B$r;H(B $B$&$h$&$K(B (navi2ch-article-show-url): title $B$rA0$r(B $BJQ99(B (navi2ch-bm-copy-title): $B4X?tDI2C(B (navi2ch-bm-view-logo): $BF1>e(B * navi2ch-board.el (navi2ch-board-mode-map): expire $B$r(B M-e $B$K!#(B navi2ch-board-view-logo $B$,(B navi2ch-bm-view-logo $B$KJQ99$K$J$C$?$N$G(B $B%-!<%P%$%s%I:o=|(B (navi2ch-board-select-board): $B%m%8%C%/@0M}(B (navi2ch-board-save-info): $B0z?t$K(B board $B$re$r;H$&$h$&$K!#(Bfill $B$GJQ$K$J$k$N(B $B$rD>$7$?(B * navi2ch-net.el (navi2ch-net-update-file): $B0z?t$K(B location $B$re$NJQ99$KDI?o(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): mouse $B$N%-!<%P%$%s%I$r(B navi2ch-define-mouse-key $B$r;H$&$h$&$KJQ99(B * navi2ch-util.el (navi2ch-define-mouse-key): $B%^%/%mDI2C(B * navi2ch-vars.el (navi2ch-article-filter-list): filter $B$K(B board $B$rEO$;$k$h$&$K(B * navi2ch.el (navi2ch-save-status): save-status... $B$HI=<($9$k$h$&$K$7$?(B 2001-10-15 $B$9$s$G$N$H$3$m$G(B <409@unix.2ch.net> * navi2ch-vars.el (navi2ch-browse-url-image-program): $BJQ?tDI2C(B (navi2ch-browse-url-image-args): $BF1>e(B (navi2ch-browse-url-image-extentions): $BF1>e(B * navi2ch-util.el (navi2ch-browse-url): navi2ch-browse-url-image $B$r;H$&$h$&$K(B (navi2ch-browse-url-image): $B4X?tDI2C(B 2001-10-15 348 $B$NL>L5$7$5$s(B <348@unix.2ch.net> * navi2ch-bookmark.el (navi2ch-bookmark-mode-map): mi $B$K(B navi2ch-bookmark-fetch-mark-article $B$r@_Dj(B (navi2ch-bookmark-fetch-mark-article): $B4X?tDI2C(B 2001-10-03 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-call-aadisplay): coding-system $B$r;XDj$9$k$h$&$K(B * navi2ch-board-misc.el (navi2ch-bm-insert-subject): subject $B$,(B nil $B$J$i(B navi2ch-bm-empty-subject $B$rI=<($9$k$h$&$K(B (navi2ch-bm-fetch-article): (navi2ch-bm-textize-article): buffer $B$,$"$k$H$-$@$1(B html $B$r=q$-=P(B $B$9$h$&$K(B (navi2ch-bm-exec-subr): navi2ch-update-failed $B$,JV$C$F$-$?$i(B unmark $B$7$J$$$h$&$K(B * navi2ch-board.el (navi2ch-board-get-url): file-name $B$,(B / $B$G;O$^$C(B $B$F$?$i(B http://file-name $B$rJV$9$h$&$K(B (navi2ch-board-update-file): $B$J$K$7$?$s$@$C$1!)(B(^^; * navi2ch-bookmark.el (toplevel): i $B$r(B navi2ch-bookmark-fetch-article $B$K@_Dj(B (navi2ch-bookmark-fetch-article): $B4X?tDI2C(B * navi2ch-history.el (toplevel): C-k $B$K(B cut C-y $B$K(B yank $B$r@_Dj(B (navi2ch-history-cut-stack): $BJQ?tDI2C(B (navi2ch-history-delete): $B4X?tDI2C(B (navi2ch-history-cut): $BF1>e(B (navi2ch-history-yank): $BF1>e(B * navi2ch-net.el (navi2ch-net-get-content): re-search-forward $B$N0LCV$r0\F0(B (navi2ch-net-get-content): $BF1>e(B (navi2ch-net-update-file-with-readcgi): cont $B$,e(B (navi2ch-update-failed): $B%(%i!<%7%s%\%kDI2C(B (navi2ch-update-failed): $BF,$K(B q $B$,IU$$$F$?$N$r>C$7$?(B 2001-09-30 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-sync): $B$$$i$J$$JQ?t:o=|(B (navi2ch-article-get-readcgi-raw-url): $B4X?tDI2C(B (navi2ch-article-update-file): navi2ch-net-update-file-with-readcgi $B$N?7$7$$;EMM$KDI?o!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): $B$J$<$+>C$($F$$$?(B (^^;)$B$N$GDI2C(B * navi2ch-board.el (navi2ch-board-get-readcgi-url): $B4X?tDI2C(B (navi2ch-board-get-readcgi-raw-url): $BF1>e(B (navi2ch-board-update-file): $BF1>e(B (navi2ch-board-sync): navi2ch-board-update-file $B$r;H$&$h$&$K(B * navi2ch-net.el (navi2ch-net-get-readcgi-url): $B:o=|(B (navi2ch-net-update-file-with-readcgi): $B0z?t$r(B url, file, time, diff $B$KJQ99!#(Barticle $B@lMQ$G$O$J$/$7$?!#(B * navi2ch-util.el (navi2ch-url-to-board): PATH_INFO $BBP1~(B (navi2ch-url-to-article): $BF1>e(B (navi2ch-article-to-url): $BF1>e(B (navi2ch-article-to-url): $BF1>e(B (navi2ch-enable-readcgi-p): $B4X?tDI2C!#(B * navi2ch-vars.el (navi2ch-article-view-aa-function): $B4X?tL>=$@5(B 2001-09-29 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-list-bbstable-url): URL $BJQ99(B * navi2ch-net.el (navi2ch-net-get-content-subr): navi2ch-net-get-content $B$+$iJ,N%!#(BEmacsCE $B$+$I$&$+$G4X?tJQ99(B (navi2ch-net-get-content): navi2ch-net-get-content-subr $BItJ,$rJ,N%(B 2001-09-27 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-enable-readcgi): $BJQ?tDI2C(B (navi2ch-enable-readcgi-host-list): $BF1>e(B (navi2ch-disable-readcgi-host-list): $BF1>e(B * navi2ch-util.el (navi2ch-write-region): $B4X?tDI2C(B * navi2ch-board-misc.el (navi2ch-bm-textize-article): $B0z?t(B buffer $B$r7W$J(B goto-char $B$r(B $B$O$:$7$?!#(B (navi2ch-article-update-file): navi2ch-enable.readcgi $BEy$r;H$&$h$&(B $B$KJQ99(B 2001-09-25 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): $B?7$7$$(B read.cgi $B$KBP1~(B * navi2ch-board.el (navi2ch-board-update-seen-articles): setq $B$7K:(B $B$l$r=$@5(B * navi2ch-article.el (navi2ch-article-sync): $B99?7$5$l$F$F$b$5$l$F(B $B$J$/$F$b(B navi2ch-article-set-seen $B$9$k$h$&$K(B 2001-09-20 Taiki SUGAWARA * navi2ch-board-misc.el (navi2ch-bm-mode-map): navi2ch-bm-textize-article $B$r(B e $B$K@_Dj(B navi2ch-bm-textize-mark-article $B$r(B me $B$K@_Dj(B (navi2ch-bm-textize-article): $B4X?tDI2C(B (navi2ch-bm-exec-subr): args $B$r * navi2ch-article.el (navi2ch-article-sync): navi2ch-article-set-seen $B$rDI2C(B (navi2ch-article-make-seen): $B4X?tDI2C(B (navi2ch-article-set-seen): $BF1>e(B (navi2ch-article-through-next): navi2ch-board-equal $B$r;H$&$h$&$K(B (navi2ch-article-through-previous): $BF1>e(B * navi2ch-board-misc.el (navi2ch-bm-make-seen): $B:o=|(B (navi2ch-bm-select-article): $B>e$r;H$C$F$$$?ItJ,$r:o=|(B * navi2ch-board.el (navi2ch-board-equal): $B4X?tDI2C(B * navi2ch-head.el: provide $B$r(B require $B$r=$@5(B * navi2ch-net.el (navi2ch-net-send-message): index2.html $B$r:o=|(B * navi2ch-util.el (navi2ch-board-to-url): index2.html $B$r:o=|(B * navi2ch-vars.el (navi2ch-article-use-readcgi-hosts): piza2 $B$rDI(B $B2C(B 2001-09-19 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-use-readcgi-hosts): $BJQ?tDI2C(B * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): docstring $BDI2C(B (navi2ch-net-update-file-with-readcgi): $BJV$jCM$r(B navi2ch-net-update-file-diff $B$K9g$o$;$k(B * navi2ch-board.el (navi2ch-board-get-host): $B4X?tDI2C(B * navi2ch-article.el (navi2ch-article-update-file): navi2ch-net-update-file-with-readcgi $B$r;H$&$h$&$K(B 2001-09-18 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-get-readcgi-url): read.cgi $B$+$iFI$`(B $B0Y$N4X?tDI2C(B (navi2ch-net-update-file-with-readcgi): $BF1>e(B 2001-09-18 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-bm-mark-and-move): $BJQ?tDI2C(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): navi2ch-bm-(next|previous)-line $B$r;H$&$h$&$K(B (navi2ch-bm-move-downward): $BDI2C!#$I$C$A$K0\F0$7$F$$$k$+(B (navi2ch-bm-setup): $B>e$NJQ?t$r=i4|2=$9$k$h$&$K(B (navi2ch-bm-next-line): $BDI2C(B (navi2ch-bm-previous-line): $BF1>e(B (navi2ch-bm-mark-subr): $B0z?t(B ARG $B$H(B INTERACTIVE $B$re$KDI?o(B (navi2ch-bm-unmark): $BF1>e(B * navi2ch-vars.el (navi2ch-board-window-height): navi2ch-vars.el $B$G(B $BDj5A$7$F$$$?$N$G:o=|(B (navi2ch-bm-subject-width): $BF1>e(B * navi2ch-article.el (navi2ch-article-through-next): navi2ch-bm-next-line $B$r;H$&$h$&$K(B (navi2ch-article-through-previous): navi2ch-bm-previous-line $B$r;H(B $B$&$h$&$K(B * navi2ch-net.el (navi2ch-net-user-agent): $BDI2C(B (navi2ch-net-setting-file-name): $BF1>e(B (navi2ch-net-download-file): User-Agent $B$r=P$9$h$&$K(B (navi2ch-net-download-logo): SETTING.TXT $B$+$iFI$`$h$&$K(B (navi2ch-net-update-file-diff): navi2ch-net-file-start $B$r;H$o$J$/$7(B $B$?(B 2001-09-18 129 $B$NL>L5$7$5$s(B <129@unix.2ch.net> * navi2ch-board-misc.el (navi2ch-bm-exec-subr): mi$B$7$F$$$k$H$-$NES(B $BCf7P2a$r2hLL$KH?1G(B 2001-09-18 $B"!(BiSH4BSD. <107@unix.2ch.net> * navi2ch-list.el (navi2ch-list-make-board-txt): regexp $B=$@5(B * navi2ch-util.el (navi2ch-url-to-board): regexp $B=$@5(B (navi2ch-url-to-article): $BF1>e(B (navi2ch-article-to-url): $BF1>e(B 2001-09-09 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-message-setup-message-hook): hook $BDI2C(B (navi2ch-message-setup-sage-message-hook): $BF1>e(B 2001-09-09 65$B$NL>L5$7$5$s(B <65$B$NL>L5$7$5$s(B> * navi2ch-search.el (navi2ch-search-history): $BJQ?tDI2C(B (navi2ch-search-article-regexp): $B8!:w$,<:GT$9$k$N$r=$@5(B (navi2ch-search-subject-subr): $BFH<+$N%R%9%H%j$r;}$D$h$&$K(B (navi2ch-search-article-subr): $BF1>e(B 2001-09-09 Taiki SUGAWARA * navi2ch-message.el (navi2ch-message-write-message): navi2ch-message-setup-message-hook $B$H(B navi2ch-message-setup-sage-message-hook $B$r8F$V$h$&$K(B 2001-09-09 65$B$NL>L5$7$5$s(B <65@unix.2ch.net> * navi2ch-article.el (navi2ch-article-set-link-property): navi2ch-article-url-face$B$r(B $B$-$A$s$H;2>H$9$k$h$&$K(B 2001-09-09 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-update-file): max-line $B$rEO$5$J$/$7$?(B (navi2ch-article-update-file): navi2ch-net-get-length-from-header $B$r;H$&$h$&$K$7$?(B 2001-09-09 65$B$NL>L5$7$5$s(B <65@unix.2ch.net> * navi2ch-article.el (navi2ch-article-default-header-format-function): $B:Y@Z$l(B String $BBP(B $B:v!)(B 2001-09-09 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-sync): max-line $B$rEO$5$J$/$7$?(B * navi2ch-net.el (navi2ch-net-get-content): max-line $B$r8+$J$/$7$?(B $B$N$H!"$"$\!<$s8!=P$r(B Length $B$G8+$k$h$&$K$7$?$N$G(B $B0z?t(B line, size $B$re(B 2001-09-01 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-enable-through): ask-always $B$r(B $BDI2C(B (navi2ch-message-trip): $BDI2C(B (navi2ch-message-aa-prefix-key): (navi2ch-message-aa-alist): * navi2ch-net.el (navi2ch-net-send-message-success-p): $BDI2C!#=q$-(B $B9~$a$?$+%A%'%C%/$9$k!#(B (navi2ch-net-send-message): $B>e$r;H$&$h$&$K(B * navi2ch-message.el (navi2ch-message-send-message): trip $B5!G=DI2C(B * navi2ch-message.el (navi2ch-message-add-aa): $BDI2C(B 2001-09-01 YA Lisp Wannabe <231@unix.2ch.net> * navi2ch-message.el (navi2ch-message-buffer-name): type $B=$@5(B (navi2ch-message-write-message): $B!V(BKill current message?$B!W$K(Bn$B$HEz(B $B$($k$H!"(Bmessage-buffer$B$K0\F0$9$k$h$&$K(B (navi2ch-message-write-message): typo $B=$@5(B (navi2ch-message-pop-message-buffer): $BF1>e(B (navi2ch-message-pop-message-buffer): $BF1>e(B (navi2ch-message-kill-message): $BF1>e(B 2001-09-01 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-through-ask): navi2ch-article-through-(next|prev) $B$+$iJ,N%!#(Bask-always $B$KBP1~(B (navi2ch-article-through-next): $B>e$r;H$&$h$&$K!#(B (navi2ch-article-through-previous): $BF1>e(B * navi2ch-vars.el (navi2ch-list-bbstable-url): bbstable2.html $B$KJQ(B $B99(B (navi2ch-net-accept-gzip): $BDI2C!#(Bgzip $BBP1~(B (navi2ch-net-gunzip-program): $BF1>e(B (navi2ch-net-gunzip-args): $BF1>e(B * navi2ch-net.el (navi2ch-net-get-content): gzip $BBP1~(B (navi2ch-net-update-file): $BF1>e(B 2001-09-01 68$B$NL>L5$7$5$s(B <68@unix.2ch.net> * navi2ch-face (toplevel): dark $BMQ$N(B face $BDI2C(B 2001-08-19 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-url-regexp): https $B$K$bBP1~$7$F$_$k(B 2001-08-19 697$B$NL>L5$7$5$s(B <697@unix.2ch.net> * navi2ch-article.el (navi2ch-article-goto-number): $BM>7W$J(B point $B$r(B push $B$7$J$$$h$&$K=$@5(B * navi2ch-vars.el (navi2ch-board-view-logo-args): $B=$@5(B 2001-08-16 Taiki SUGAWARA * navi2ch-search.el (navi2ch-search-all-subject): $B=$@5!#(B navi2ch-list-get-normal-category-list $B$r;H$&$h$&$K(B (navi2ch-search-all-article): $BF1>e(B * navi2ch-list.el (navi2ch-list-get-normal-category-list): $BDI2C!#(B 2001-07-29 Taiki SUGAWARA * navi2ch-message.el (navi2ch-message-cite-original): arg $B$re!#(B * navi2ch-util.el (navi2ch-browse-url): $B=$@5(B * navi2ch-mona.el (toplevel): XEmacs $B$H$NH=DjDI2C(B * navi2ch-net.el (navi2ch-net-download-file-range): 200 $BDI2C(B * navi2ch-board.el (navi2ch-board-sync): $B8+$?L\=$@5(B * navi2ch-article.el (navi2ch-article-toggle-hide): $B=$@5(B (navi2ch-article-toggle-important): $BF1>e(B (navi2ch-article-uudecode-message): $BF1>e(B 2001-07-28 Taiki SUGAWARA * navi2ch-bookmark.el (navi2ch-bookmark-convert): $B=$@5(B (navi2ch-bookmark-convert): $B$5$i$K=$@5(B 2001-07-28 874$B$NL>L5$7$5$s(B <874@unix.2ch.net> * navi2ch-mona.el (toplevel): emacs21 $BMQ$N@_DjDI2C(B 2001-07-26 Taiki SUGAWARA * navi2ch-util.el (navi2ch-clear-seen): $B?74X?t!#%G%P%C%0MQ(B * navi2ch-board.el (navi2ch-board-updated-article-p): $B0z?t$K(B seen-list $B$re(B * navi2ch-board-misc.el (navi2ch-bm-make-seen): $BDI2C!#(B (navi2ch-bm-select-article): navi2ch-bm-make-seen $B$r;H$&$h$&$K(B 2001-07-24 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-mode-map): "D" $B$K(B navi2ch-list-delete-global-bookmark $B$r%P%$%s%I(B (navi2ch-list-navi2ch-category-alist): bookmark-board $B$r:o=|(B (navi2ch-list-set-category): $B?74X?t(B (navi2ch-list-get-bookmark-board-list): $BF1>e(B (navi2ch-list-get-bookmark-category): $BF1>e(B (navi2ch-list-set-bookmark-category): $BF1>e(B (navi2ch-list-change-bookmark-category): $BF1>e(B (navi2ch-list-sync): offline $B$N$H$-$O(B $B%m!<%+%k$N%U%!%$%k$+$i(B list $B$r:n$j$J$*$9$h$&$K!#(Bnavi2ch-list-get-global-bookmark-category $B$r;H(B $B$&$h$&$K(B (navi2ch-list-goto-board): board-mode $B$N$H$-$@$1(B navi2ch-board-save-info $B$r8F$V$h$&$K(B (navi2ch-list-mode-map): "C" $B$K(B navi2ch-bookmark-change-bookmark $B$r%P%$%s%I(B (navi2ch-list-mode-map): "B" $B$K(B navi2ch-bookmark-goto-bookmark $B$r(B $B%P%$%s%I(B * navi2ch-bookmark.el (navi2ch-bookmark-mode-map): navi2ch-bookmark-move $B$r(B "o" $B$K%P%$%s%I(B (navi2ch-bookmark-mode-map): navi2ch-bookmark-copy $B$r(B "O" $B$K%P%$%s(B $B%I(B (navi2ch-bookmark-current-bookmark-name): $B?7JQ?t(B (navi2ch-bookmark-get-article): $B>e$NJQ?t$r8+$k$h$&$K(B (navi2ch-bookmark-get-board): $BF1>e(B (navi2ch-bookmark-convert): $B?7%3%^%s%I(B (navi2ch-bookmark-fix): $BF1>e(B (navi2ch-bookmark-read-id): $B?74X?t(B (navi2ch-bookmark-exist): id $B$re(B (navi2ch-bookmark-change-bookmark): $BF1>e(B (navi2ch-bookmark-add-subr): nvi2ch-bookmark-add $B$+$iL>A0JQ99(B id $B$re(B (navi2ch-bookmark-copy): $B?7%3%^%s%I(B (navi2ch-bookmark-move): $BF1>e(B (navi2ch-bookmark-cut): id $B$r8+$k$h$&$K(B (navi2ch-bookmark-yank): $BF1>e(B (navi2ch-bookmark-goto-bookmark): $B?7%3%^%s%I(B (navi2ch-bookmark): id $B$r@_Dj$9$k$h$&$K(B (navi2ch-bookmark-save-info): $BJ#?t(B bookmark $BMQ$KJQ99(B (navi2ch-bookmark-create-bookmark): $B=$@5(B (navi2ch-bookmark-delete-bookmark): $B=$@5(B (navi2ch-bookmark-change-bookmark): $B=$@5(B * navi2ch-board.el (navi2ch-board-sync): $B99?7$,$"$C$?$H$-$@$1(B navi2ch-board-update-seen-articles $B$r8F$V$h$&$K(B (navi2ch-board-save-info): $B>r7o$r4K$/(B($B$G$b(B enbug $B$7$F$k$+$b!&!&!&(B) * navi2ch-board-misc.el (navi2ch-bm-mode-map): navi2ch-bm-display-article $B$r(B "o" $B$+$i(B "." $B$KJQ99(B (navi2ch-bm-select-board): bookmark $B$NJQ99$KDI?o(B (navi2ch-bm-select-article): board-mode $B$G$J$/$F$b(B seen $B$N@_Dj$r$9(B $B$k$h$&$K(B (navi2ch-bm-show-url): navi2ch-browse-url $B$r;H$&$h$&$K(B (navi2ch-bm-mode-map): "B" $B$K(B navi2ch-bookmark-goto-bookmark $B$r%P(B $B%$%s%I(B * navi2ch-article.el (navi2ch-article-select-current-link): navi2ch-browse-url $B$r;H$&$h$&$K(B (navi2ch-article-show-url): $BF1>e(B (navi2ch-article-mode-map): "B" $B$K(B navi2ch-bookmark-goto-bookmark $B$r%P%$%s%I(B * navi2ch-util.el (navi2ch-browse-url): $BDI2C(B 2001-07-22 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-goto-number-or-board): $BDI2C(B "g" $B$K%P%$%s%I(B (navi2ch-article-goto-number): num $B$,(B 0 $B$N$H$-$NH=DjDI2C(B (navi2ch-article-get-point): $BDI2C!#(B (navi2ch-article-pop-point): $B>e$r;H$&$h$&$K=$@5(B (navi2ch-article-push-point): $BF1>e(B (navi2ch-article-pop-poped-point): $BF1>e(B 2001-07-22 Taiki SUGAWARA * navi2ch-board-misc.el (navi2ch-bm-set-property): $B=$@5(B (navi2ch-bm-get-state): $BDI2C!#(B (navi2ch-bm-select-article): $B=$@5!#(Bstate $B$,(B view $B$N;~$O(B state $B$r99(B $B?7$7$J$*$9$h$&$K(B 2001-07-22 Taiki SUGAWARA * navi2ch.el (navi2ch-save-info): coding-system $B;XDj(B (navi2ch-load-info): $BF1>e(B * navi2ch-list.el (navi2ch-list-get-category-list-subr): seen $B$rDI(B $B2C(B * navi2ch-face.el (navi2ch-bm-seen-unread-face): seen $BMQ$N(B face (navi2ch-bm-seen-view-face): $BF1>e(B (navi2ch-bm-seen-cache-face): $BF1>e(B (navi2ch-bm-seen-update-face): $BF1>e(B (navi2ch-bm-seen-mark-face): $BF1>e(B * navi2ch-board.el (navi2ch-board-insert-subjects): seen $B$rDI2C(B (navi2ch-board-update-seen-articles): $BDI2C!#4{FI>uBV$r99?7(B (navi2ch-board-sync): $B>e$r;H$&$h$&$K(B (navi2ch-board-save-info): seen $B$r3P$($k$h$&$K(B * navi2ch-board-misc.el (navi2ch-bm-updated-mark): $B:o=|(B (navi2ch-bm-updated-mark-alist): $BDI2C!#>e$NBe$j(B (navi2ch-bm-set-property): seen $B$rDI2C(B (navi2ch-bm-set-property): $BF1>e(B (navi2ch-bm-insert-subject): navi2ch-bm-updated-mark-alist $B$r;H$&$h$&$K(B (navi2ch-bm-insert-state): updated $B$r0z?t$KDI2C(B (navi2ch-bm-select-article): seen $B$rDI2C!#4{FI%U%i%0$rN)$F$k$h$&$K(B 2001-07-08 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-redraw-when-goto-number): $BDI2C(B (navi2ch-article-fix-range-diff): $BF1>e(B (navi2ch-article-fix-range-when-sync): $BF1>e(B * navi2ch-article.el (navi2ch-article-goto-number): $BHO0O30$N;~$K(B navi2ch-article-redraw-when-goto-number $B$,(B non-nil $B$J$i(Bredraw $B$7$J(B $B$*$9$h$&$K(B (navi2ch-article-sync): $BHO0O30$N$H$-$K(B navi2ch-article-fix-range-when-sync $B$,(B non-nil $B$J$i(B redraw $B$7$J$*(B $B$9$h$&$K!#(B (navi2ch-article-view-article): $B>e$N0Y$NJQ99(B 2001-07-07 867$B$NL>L5$7$5$s(B <867@unix.2ch.net> * navi2ch-article.el (navi2ch-article-sync): save-info $B$K(B first $B$r(B $BEO$9$h$&$K(B (navi2ch-article-sync): $B0z?t$K(B first $B$rDI2C!#(Bfirst $B$,(B non-nil $B$J$i(B save-number $B$7$J$$$h$&$K(B 2001-07-01 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-expire-all): $B=$@5(B * navi2ch-net.el (navi2ch-net-send-message): SUBMIT $B$r(B submit $B$K!#(B 2001-06-29 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-subject-alist): $BDI2C(B (navi2ch-board-old-subject-alist): $BF1>e(B (navi2ch-board-updated-article-p): $B>e$r;H$&$h$&$K(B($B%9%T!<%I>e$,$C$?(B) (navi2ch-board-save-old-subject-file): $B=$@5!#(B 2001-06-27 Taiki SUGAWARA * navi2ch-message.el (navi2ch-message-send-message): subject $B$,J8(B $BCf$K$"$k$H$@$a$J$N$KBP1~(B * navi2ch-vars.el (navi2ch-board-view-logo-program): $BDI2C(B (navi2ch-board-delete-old-logo): $BF1>e(B * navi2ch-board.el (navi2ch-board-view-logo): logo $B$r8+$k!#(B * navi2ch-net.el (navi2ch-net-download-logo): logo $B$r%@%&%s%m!<%I$9$k!#(B 2001-06-24 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-updated-mode): $BDI2C!#99?7%9%l$@(B $B$1$rI=<($9$k(Bmode$B!#(B (navi2ch-board-updated-mode-map): $BF1>e(B (navi2ch-board-toggle-updated): $BF1>e(B (navi2ch-board-toggle-minor-mode): $BDI2C!#(Bminor-mode $B$r@Z$j49$($k(B (navi2ch-board-toggle-bookmark): $B>e$r;H$&$h$&$KJQ99(B (navi2ch-board-toggle-hide): $BF1>e(B (navi2ch-board-toggle-updated): $BDI2C(B (navi2ch-board-insert-subjects): updated-mode$B$r%A%'%C%/$9$k$h$&$K(B (navi2ch-board-regexp-list): $B$5$i$K=$@5(B 2001-06-23 Taiki SUGAWARA * navi2ch-board-misc.el (navi2ch-bm-set-property): $BJQ99!#(Bupdated $B$N(B $B%A%'%C%/$r$9$k$h$&$K(B (navi2ch-bm-insert-subject): $BF1>e(B (navi2ch-bm-state-alist): $BJQ99!#(Bupdated $B$N;~$N(B face $B$NDI2C(B * navi2ch-vars.el (navi2ch-board-check-updated-article-p): $BDI2C(B * navi2ch-face.el (navi2ch-bm-updated-*-face): $BDI2C!#(B * navi2ch-board.el (navi2ch-board-old-subject-list): $BDI2C!#99?7A0(B $B$NHD$H$NHf3S$K;H$&(B (navi2ch-board-old-subject-file-name): $BF1>e(B (navi2ch-board-updated-article-p): $BF1>e(B (navi2ch-board-insert-subjects): $B>e$r;H$&$h$&$K(B (navi2ch-board-sync): old-* $B$r;H$&$h$&$K(B (navi2ch-board-regexp-list): $B?7$7$$%9%/%j%W%HBP1~(B 2001-06-13 Taiki SUGAWARA * navi2ch-board-misc.el (navi2ch-bm-fetched-article-list): $BDI2C(B (navi2ch-bm-remember-fetched-article): $BDI2C!#%U%'%C%A$7$?%9%l$re(B (navi2ch-bm-remove-fetched-article): $BF1>e(B (navi2ch-bm-save-info): $BF1>e(B (navi2ch-bm-load-info): $BF1>e(B * navi2ch-popup-article.el (toplevel): through-*-function $B$r(B buffer local $B$K$7$F!"(Bnavi2ch-popup-article-exit $B$r@_Dj!#(B * navi2ch-article.el (navi2ch-article-through-next-function): $BDI2C(B (navi2ch-article-through-previous-function): $BF1>e(B (navi2ch-article-scroll-up): through-*-function $B$r;H$&$h$&$K(B (navi2ch-article-scroll-down): $BF1>e(B (navi2ch-article-next-message): $BF1>e(B (navi2ch-article-previous-message): $BF1>e(B 2001-06-11 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-few-scroll-up): $BDI2C!#0l9T%9(B $B%/%m!<%k!#(B"j" $B$K%P%$%s%I!#(B (navi2ch-article-few-scroll-down): $BF1>e!#(B"k" $B$K%P%$%s%I(B 2001-06-10 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-number-regexp): $BHO0O$H$+$K$bBP(B $B1~(B (navi2ch-article-number-regexp): $B=$@5(B * navi2ch-article.el (navi2ch-article-str-to-num): $BDI2C!#%l%9;2>H(B $B$r?t;z$+?t;z$N%j%9%H$KJQ49(B (navi2ch-article-select-current-link): navi2ch-article-str-to-num $B$r;H$&$h$&$K$7$F!"HO0O;XDj$@$C$?$i%]%C%W%"%C%W$9$k$h$&$K(B (navi2ch-article-str-to-num): 1-10 $B$N7A<0$,JQ$@$C$?$N$r=$@5!#(B * navi2ch-popup-article.el: $B%U%!%$%kDI2C!#%]%C%W%"%C%W$G%l%9$rI=<((B $B$9$k!#(B (navi2ch-popup-article-exit): $BDI2C(B (navi2ch-popup-article-pop-point-or-exit): $BF1>e(B (navi2ch-popup-article-mode): $BF1>e(B (navi2ch-popup-article): $BF1>e(B 2001-06-09 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-set-link-property): number $B$r$3$3$G$OJQ49$7$J$$$h$&$K(B (navi2ch-article-select-current-link): number $B$r$3$C$A$GJQ49$9$k$h(B $B$&$K(B 2001-06-09 $BL>L5$7$5$s(B <431@unix.2ch.net> * navi2ch-mona.el (toplevel): $B%5%$%:$rJQ$($l$k$h$&$K(B 2001-06-09 Taiki SUGAWARA * navi2ch-search.el (navi2ch-search-return-previous-board-maybe): $BDI2C!#A0$NHD$KLa$k!#(B"Q"$B$K%P%$%s%I!#(B * navi2ch-board.el (navi2ch-board-expire): $B%a%C%;!<%8$rIU$1$?(B * navi2ch-list.el (navi2ch-list-expire-current-category): $B%a%C%;!<(B $B%8$rIU$1$?(B (navi2ch-list-expire-all): $BF1>e(B * navi2ch-board-misc.el (navi2ch-bm-select-article): $BFI$_9~$`9T?t(B $B$r;XDj$G$-$k$h$&$K(B * navi2ch-article.el (navi2ch-article-view-article): $BFI$_9~$`9T?t(B $B$r;XDj$G$-$k$h$&$K(B (navi2ch-article-goto-number): $BHO0O30$N$bI=<($G$-$k$h$&$K2~B$(B (navi2ch-article-select-current-link): $BF1>e(B (navi2ch-article-popup-number): $BDI2C!#(B 2001-05-31 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-before-split-hook): $B>C$7$?!#(B * navi2ch-article.el (navi2ch-article-goto-number): $B0\F0$G$-$J$$$H(B $B$-$KBP=h(B (navi2ch-article-get-message-list): $B6u9T$J$i(B nil $B$K(B (navi2ch-article-insert-messages): $B6u9T$rI=<($7$J$$$h$&$K(B 2001-05-30 Taiki SUGAWARA * navi2ch-bookmark.el (navi2ch-bookmark-exist): $BDI2C(B * navi2ch-article.el (navi2ch-article-apply-filters): $BDI2C(B (navi2ch-article-get-message-list): $B>e$r;H$&$h$&$KJQ99!#(B * navi2ch-message.el (navi2ch-message-mode-menu-spec): $BDI2C!#%a(B $B%K%e!e$r;H$&$h$&$KJQ99!#(B * navi2ch.el (navi2ch): nvai2ch-init-file $B$r8F$V$h$&$K(B * navi2ch-vars.el (navi2ch-init-file): $BDI2C(B 2001-05-27 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-before-split-hook): $BDI2C(B * navi2ch-util.el (navi2ch-call-process-buffer): $BDI2C!#(B * navi2ch-article.el (navi2ch-article-mode-menu-spec): $BDI2C!#%a%K%e!e$r;H$&$h$&$KJQ99!#(B (navi2ch-article-update-file): disable-diff $B$N$H$-$KBP=h$7$F$_$k(B (navi2ch-article-get-message-list): split $B$9$kA0$K(B before-split-hook $B$re$r;H$&$h$&$KJQ99!#(B * navi2ch-search.el (navi2ch-search-mode-menu-spec): $BDI2C!#%a%K%e!e$r;H$&$h$&$KJQ99!#(B * navi2ch-history.el (navi2ch-history-mode-menu-spec): $BDI2C!#%a(B $B%K%e!e$r;H$&$h$&$KJQ99!#(B * navi2ch-bookmark.el (navi2ch-bookmark-mode-menu-spec): $BDI2C!#%a(B $B%K%e!e$r;H$&$h$&$KJQ99!#(B * navi2ch-board.el (navi2ch-board-mode-menu-spec): $BDI2C!#%a%K%e!e$r;H$&$h$&$KJQ99!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): navi2ch-board.el $B$+(B $B$i0\F0(B (navi2ch-board-show-url-subr): $BF1>e(B (navi2ch-bm-state-alist): $BDI2C!#%a%K%e!L5$7$5$s(B <431@unix.2ch.net> * navi2ch-article.el (navi2ch-article-put-cite-face): $BDI2C!#(B $B0zMQ$K(B face $B$rIU$1$k!#(B (navi2ch-article-insert-message): $BBP1~(B * navi2ch-mona.el (navi2ch-mona-put-face): $BBP1~(B 2001-05-08 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-expire): directory $B$,L5$$$H$-$K(B $BBP1~(B * navi2ch-article.el (navi2ch-article-insert-message): $B$3$3$G(B narrow-to-region $B$9$k$h$&$K!#(B (navi2ch-article-arrange-message): $BBP1~(B (navi2ch-article-set-link-property): $BF1>e(B 2001-05-07 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-turn-back-file): process $B$,(B nil $B$N$H(B $B$-$KBP1~(B * navi2ch-board.el (navi2ch-board-expire): typo $B=$@5(B * navi2ch-list.el (navi2ch-list-expire): $BDI2C!#(B (navi2ch-list-sync): navi2ch-list-after-sync-hook $B$rDI2C(B 2001-05-06 Taiki SUGAWARA * navi2ch-bookmark.el (navi2ch-bookmark-add): $B%a%C%;!<%8$rI=<($9$k(B $B$h$&$K(B * navi2ch-history.el (navi2ch-history-add): subject $B$,$J$$$N$ODI2C(B $B$7$J$$$h$&$K!#(B 2001-05-05 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-get-current-category-list): $BDI2C!#(B $B:#$N0LCV$N%+%F%4%j$K$"$kHD%j%9%H$rF@$k(B (navi2ch-list-search-current-category-subject): $B>e$r;H$&$h$&$K(B (navi2ch-list-search-current-category-article): $BF1>e(B (navi2ch-list-expire-current-board): $BDI2C(B list mode $B$+$i(B expire (navi2ch-list-expire-current-category): $BF1>e(B (navi2ch-list-expire-all): $BF1>e(B * navi2ch-article.el (navi2ch-article-select-current-link): $B=$@5(B 2001-05-04 Taiki SUGAWARA * navi2ch-vars.el: $B3F%f!<%6JQ?t$r$3$N%U%!%$%k$K0\F0!#(B defcustom $B2=!#(B 2001-05-03 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-goto-number): num $B$,%9%l$ND9$5$h$jBg$-$+$C$?>l9g$KBP=h(B * navi2ch-board.el (navi2ch-board-expire): navi2ch-board-expire $B$,(B nil $B$N$H$-$KBP=h(B 2001-05-02 Taiki SUGAWARA * navi2ch-history.el (navi2ch-history-add): 100 $B0J>e$N$H$-$K8e$mA4(B $BIt$r>C$5$J$$$h$&$K$J$C$F$?$N$r=$@5(B * navi2ch-article.el (navi2ch-article-goto-url): history $B$KDI2C$9(B $B$k$h$&$K(B 2001-05-01 Taiki SUGAWARA * navi2ch-face.el: $BDI2C!#(Bface $B$rDj5A!#(B * navi2ch-history.el: $BDI2C!#:#$^$G8+$?HD$NMzNr!#(B * navi2ch-message.el (navi2ch-message-set-mail): $BDI2C!#(B sage $B$G$J$1$l$P!"(Bmail $B$r3P$($k(B (navi2ch-message-mail-addres): $BDI2C!#%G%U%)$N(B mail addres$B!#(B (navi2ch-message-write-message): sage $B$re!#(B (navi2ch-list-toggle-open): property $B$r$A$c$s$HIU$1$k$h$&$K(B 2001-04-30 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-get-etc-category): $BDI2C!#(B etc-category $B$r%U%!%$%k$+$i!#(B (navi2ch-list-sync): $B>e$r;H$&$h$&$KJQ99(B 2001-04-29 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-get-category-list-subr): $BDI2C!#(B category $BFb$NHD(B list $B$rJV$9(B (navi2ch-list-get-category-list): $B>e$r;H$&$h$&$KJQ99(B * navi2ch-net.el (navi2ch-net-inherit-process-coding-system): inherit-process-coding-system $B$r;XDj!#(B 2001-04-18 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-expire): $BDI2C!#(B expire $B$9$k!#$G$b$^$@%@%a%@%a!#(B (navi2ch-board-expire-date-p): $BF1>e(B 2001-04-16 Taiki SUGAWARA * navi2ch-message.el (navi2ch-message-pop-message-buffer): $B=$@5(B * navi2ch-util.el (navi2ch-make-datevec): $BDI2C!#(Bexpire $B$N=`Hw!#(B (navi2ch-get-offset-datevec): $BF1>e(B (navi2ch-make-sortable-string): $BF1>e(B 2001-04-09 Taiki Sugawara * navi2ch-board.el (navi2ch-board-get-uri): kako $B$KBP1~(B 2001-04-08 Taiki Sugawara * navi2ch-util.el (navi2ch-url-to-board): kako $B$KBP1~(B (navi2ch-url-to-article): $BF1>e(B * navi2ch-article.el (navi2ch-article-goto-url): $BDI2C!#(B (navi2ch-article-select-current-link): $B>e$r;H$&$h$&$K(B (navi2ch-article-get-url): kako $B$KBP1~(B 2001-04-01 Taiki Sugawara * navi2ch-board-misc.el (navi2ch-bm-renumber): $BDI2C(B * navi2ch-bookmark.el (navi2ch-bookmark-insert-subject): $BDI2C(B (navi2ch-bookmark-insert-subject): $B>e$r;H$&$h$&$K(B (navi2ch-bookmark-cut): $BDI2C(B (navi2ch-bookmark-yank): $BDI2C(B 2001-03-29 Taiki Sugawara * navi2ch-message.el (navi2ch-message-pop-message-buffer): $BDI2C!#(BC-cC-m $B$K%P%$%s%I(B (navi2ch-message-cite-original-from-number): set-mark-command $B$9$k$h$&$K(B * navi2ch.el (navi2ch-offline-on): (navi2ch-offline-off): $BDI2C!#(B (navi2ch-exit): $BJ9$/$h$&$K$7$?!#(B * navi2ch-util.el (navi2ch-set-mode-line-identification): $BDI2C(B offline $B$N(B on, off $B$rI=<($9$k$h$&$K!#(B * navi2ch-net.el (navi2ch-net-send-request): HTTP/1.0 $B$K$7$F$_$?!#(B 2001-03-28 Taiki Sugawara * navi2ch-search.el (navi2ch-search-article-subr): $BDI2C(B (navi2ch-search-all-article): $BDI2C(B * navi2ch-board-misc.el (navi2ch-bm-search-current-board-article): $BDI2C(B (navi2ch-bm-search-current-board-subject): $BL>A0JQ99(B (navi2ch-bm-search): $BDI2C!#(Bsearch $B$r;H$&(B user interface * navi2ch-list.el (navi2ch-list-search-current-board-article): (navi2ch-list-search-current-category-article): $BDI2C(B (navi2ch-list-search-current-board-subject): (navi2ch-list-search-current-category-subject): $BL>A0JQ99(B (navi2ch-list-search): $BDI2C!#(Bsearch $B$r;H$&(B user interface 2001-03-27 Taiki Sugawara * navi2ch-board.el (navi2ch-board-search-board): $BHD$+$i%?%$%H%k$r8!:w(B * navi2ch-list.el (navi2ch-list-search-current-subject): (navi2ch-list-search-current-category): $BHD%j%9%H$+$i%?%$%H%k$r8!:w(B * navi2ch-search.el: $BDI2C!#8!:w%b%8%e!<%k!#(B * navi2ch-article.el (navi2ch-article-parse-message): $B0l1~ESCf$GJQ$J%;%Q%l!<%?$K$J$C$F$k;~BP:v!#(B 2001-03-26 Taiki Sugawara * navi2ch-article.el (navi2ch-article-get-message-list): splitting... $B$r7k9=B.$/$7$F$_$?!#(B 2001-03-24 Taiki Sugawara * navi2ch-board-misc.el (navi2ch-bm-goto-board): $BDI2C!#(B $B$=$N0LCV$NHD$r(B default $B$K(B (navi2ch-bm-sort): $BDI2C!#(B * navi2ch-list.el (navi2ch-list-goto-board): default $B$r;XDj2DG=$K(B * navi2ch-article.el (navi2ch-article-goto-current-board): $BDI2C!#(B $B%9%l$HF1$8HD$X0\F0!#(B (navi2ch-article-pop-poped-point): stack $B$r?J$`$5$;$k$_$?$$$J!#(B (navi2ch-article-push-point): (navi2ch-article-pop-point): $B$=$l$K$h$j=$@5!#(B (navi2ch-article-aadisplay-program): (navi2ch-article-view-aa-function): (navi2ch-article-call-aadisplay): (navi2ch-article-view-aa): $BDI2C!#(Baa $B$r8+$k(B 2001-03-23 Taiki Sugawara * navi2ch-board-misc.el (navi2ch-bm-set-func): $BDI2C(B (navi2ch-bm-setup): $B=$@5!#4X?t$r0z?t$KF~$l$J$/$F$b$h$/$7$?!#(B (navi2ch-bm-insert-subject): $BHV9f$b=q$/$h$&$K!#(B $B0z?t$NDI2C!#(B (navi2ch-bm-goto-state-column): (navi2ch-bm-insert-state): (navi2ch-bm-goto-mark-column): $BDI2C!#$3$l$i$K4X$9$kB>$N4X?t$rJQ99(B (navi2ch-bm-sort-*): $BDI2C!#%=!<%H$G$-$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-through-next): (navi2ch-article-through-previous): not $B$N0LCV$,$:$l$F$?(B($B4@(B) 2001-03-22 Taiki Sugawara * navi2ch-board.el (navi2ch-board-get-uri): $BDI2C!#8e$m$N(B / $B$rIU$1$k(B (navi2ch-board-get-url): (navi2ch-board-get-file-name): navi2ch-board-get-url $B$r;H$&(B * navi2ch-mona.el (toplevel): $B$3$N%U%!%$%k$rDI2C(B mona font $B$r;H$&(B * navi2ch-articles.el (toplevel): $B$3$N%U%!%$%k$rDI2C(B $BI=<($7$F$$$k%9%l0lMw!#(B * navi2ch-board-misc.el (navi2ch-bm-select-board): $BDI2C!#(B * navi2ch-article.el (navi2ch-article-through-previous): (navi2ch-article-through-next): board $B$r$b$C$HE}9g$7$?;v$K$h$j=$@5!#(B (navi2ch-article-set-link-property): $B$d$C$Q(B narrow (navi2ch-article-arrange-message-hook): functions $B$+$i(B hook (buffer $BA4BN$r;XDj$9$k$h$&(B)$B$K!#(B (navi2ch-article-get-url): (navi2ch-article-get-file-name): (navi2ch-article-get-info-file-name): navi2ch-board-get-uri $B$r;H$&(B * navi2ch-util.el (navi2ch-2ch-url-p): $B=$@5(B * navi2ch-list.el (navi2ch-list-etc-category-name): (navi2ch-list-etc-category-alist): (navi2ch-list-navi2ch-category-name): (navi2ch-list-navi2ch-category-alist): $BDI2C(B (navi2ch-list-get-category): navi2ch-list-get-category-list $B$+$iJ,N%(B (navi2ch-list-select-board): board $B$r$b$C$HE}9g$7$?;v$K$h$j=$@5(B (navi2ch-list-navi2ch-category-alist): bookmark $B$N(B id $B$r(B bmark $B$K!#(B 2001-03-21 Taiki Sugawara * navi2ch-board-misc.el (navi2ch-bm-mark-marks): $BDI2C(B 2001-03-21 $BL>L5$7$5$s(B <447@unix.2ch.net> * navi2ch-article.el (navi2ch-article-through-next): (navi2ch-article-through-previous): $B=$@5!#(B 2001-03-20 Taiki Sugawara * navi2ch-util.el (navi2ch-set-buffer-multibyte): * navi2ch-util.el (nav2ch-string-as-unibyte): $BDI2C(B(Xemacs $BBP:v(B) * navi2ch-net.el (navi2ch-net-turn-back-file): $B$^$?$^$?=$@5(B 2001-03-18 Taiki Sugawara * navi2ch-net.el (navi2ch-net-update-file): (navi2ch-net-update-file-diff): line $BBP1~!#$d$C$Q$7!";~4V$8$c$J$/$F%X%C%@$rJV$9$h$&$K!#(B (navi2ch-net-turn-back-file): $B%(%s%P%0$7$F$?!&!&!&(B($B5c(B)$B!#(B * navi2ch-board.el (navi2ch-board-response-column): $BDI2C(B (navi2ch-board-max-line): $BDI2C(B (navi2ch-board-sync): line $BBP1~(B * navi2ch-article.el (navi2ch-article-max-line): $BDI2C(B (navi2ch-article-update-file): line $BBP1~(B 2001-03-17 Taiki Sugawara * navi2ch-net.el (navi2ch-net-get-content): size $B$H(B line $B$r;XDj$G$-$k$h$&$K(B (navi2ch-net-update-file-diff): $B$O$d$a$K$"$\!<$s%A%'%C%/(B * navi2ch-bookmark.el (navi2ch-bookmark-board-name-column): $BDI2C!#HDL>$N0LCV(B (navi2ch-bookmark-get-subject): $BHDL>$r8e$m$K(B * navi2ch-article.el (navi2ch-article-exit): $B%l%9$,$J$+$C$?$i(B kill-buffer 2001-03-16 Taiki Sugawara * navi2ch-list.el (navi2ch-list-select-board): (navi2ch-list-stay-list-window): $BDI2C(B * navi2ch-article.el (navi2ch-article-show-url): key binding $B$r(B 'U' $B$KJQ99(B * navi2ch-board-misc.el (navi2ch-bm-mark): (navi2ch-bm-unmark): (navi2ch-bm-exec-subr): (navi2ch-bm-display-mark-article): (navi2ch-bm-fetch-mark-article): (navi2ch-bm-mark-region-subr): (navi2ch-bm-mark-region): (navi2ch-bm-mark-all): mark $B7O%3%^%s%I$rDI2C(B * navi2ch-board.el (navi2ch-board-show-url): key binding $B$r(B 'U' $B$KJQ99(B 2001-03-15 Taiki Sugawara * navi2ch-article.el (navi2ch-article-update-file): navi2ch-article-sync $B$+$iJ,N%(B (navi2ch-article-fetch-article): $BDI2C(B 2001-03-14 Taiki Sugawara * navi2ch-board-misc.el (toplevel): navi2ch-board $B$H(B navi2ch-bookmark $B$N * navi2ch-article.el (navi2ch-article-sync): hide important $B$r$d$a$k(B (navi2ch-article-save-number): (navi2ch-article-load-number): hide important $B$J$i$7$J$$(B 2001-03-11 Taiki Sugawara * navi2ch-article.el (navi2ch-article-hide-mode): (navi2ch-article-important-mode): $BDI2C(B (navi2ch-article-enable-through): ask $B$rDI2C(B * navi2ch-board.el (navi2ch-board-bookmark-mode): bookmark $B$r(B minor mode $B$K!#(B (navi2ch-board-hide-mode): $BDI2C!#(B 2001-03-10 Taiki Sugawara * navi2ch-article.el (navi2ch-article-next-message): (navi2ch-article-previous-message): $BHO0O$r8+$J$/$F$b$$$$$h$&$K=$@5!#(B (navi2ch-article-through-next): (navi2ch-article-through-previous): $B=$@5!#(B * navi2ch-util.el (navi2ch-next-property): (navi2ch-previous-property): $BDI2C!#(B 2001-03-09 Taiki Sugawara * navi2ch-board.el (navi2ch-board-regexp-list): (navi2ch-board-regexp-test): $BDI2C(B * navi2ch-article.el (navi2ch-article-check-cached): (navi2ch-board-get-subject-list): $BB.$/$J$C$?!&!&!&$+$J!)(B * navi2ch-article.el (navi2ch-article-get-separater): $BDI2C(B 2001-03-08 Taiki Sugawara * navi2ch-net.el (navi2ch-net-update-file-diff): $B$"$\!<$s$7$?$H$-85$N%U%!%$%k$r%P%C%/%"%C%W$G$-$k$h$&$K!#(B * navi2ch-message.el (navi2ch-message-send-message): sync $B$9$kA0$KBT$C$F$_$k!#(B * navi2ch-article.el (navi2ch-article-goto-last-message): t $B$N0LCV$,$:$l$F$?!&!&!&(B (navi2ch-article-view-article): (navi2ch-article-select-current-link): $B%l%9HV9f$r;XDj$G$-$k$h$&$K!#(B (navi2ch-article-through-next): (navi2ch-article-through-prev): board-mode $B$NHD$H(B article-mode $B$NHD$,F1$8$H$-$@$10\F0$9$k$h$&$K!#(B (navi2ch-article-sync): (navi2ch-article-save-info): (navi2ch-article-load-info): (navi2ch-article-write-message): $B%U%!%$%k;XDj$GFI$s$@$H$-$O2?$b$7$J$$$h$&$K!#(B (navi2ch-article-view-article-from-file): (navi2ch-article-sync-from-file): $B%U%!%$%k$+$iFI$_9~$`!#(B (navi2ch-article-set-mode-line): $BHD$NL>A0$bI=<((B (navi2ch-article-find-file): $B%U%!%$%k$+$i%9%l$rA*$V!#(B * navi2ch-util.el (navi2ch-replace-html-tag-alist): & $B$r$O$:$9(B (navi2ch-replace-html-tag): (navi2ch-replace-html-tag-with-temp-buffer): & $B$rJL=hM}$9$k$h$&$K(B (navi2ch-replace-string): defsubst $B$K!#(Bif $B$r0l$D$O$:$9!#(B * navi2ch-list.el (navi2ch-list-get-category-list): $B:G8e$NHD$,H4$1$F$?$N$r=$@5!#(B 2001-03-06 Taiki Sugawara * navi2ch-article.el (navi2ch-article-sync): * navi2ch-net.el (navi2ch-net-update-file-diff): $B$"$\!<$s4XO"$G=$@5!#(B * navi2ch-list.el (navi2ch-list-get-category-list): $B$A$c$s$HA4It$N%+%F%4%j$rJV$9$h$&$K!#(B * navi2ch-message.el (navi2ch-message-send-message): $B0l2sJ,$N=q$-$3$_%m%0 * navi2ch-article.el (navi2ch-article-scroll-down): (navi2ch-article-through-next): $B=$@5(B * navi2ch-list.el (navi2ch-list-select-board): $B=$@5(B (navi2ch-list-open-all-category): (navi2ch-list-close-all-category): $BDI2C!#A4$F$N%+%F%4%j$N3+JD!#(B (navi2ch-list-indent-width): (navi2ch-list-init-open-category): $BDI2C!#(B 2001-03-04 Taiki Sugawara * navi2ch-article.el (navi2ch-article-through-next): (navi2ch-article-through-prev): $BDI2C!#(B $B0\F07O$N%3%^%s%I$r$3$l$KDI?o!#(B * navi2ch-net.el (navi2ch-net-check-margin): (navi2ch-net-turn-back-step): (navi2ch-net-turn-back-when-aborn): (navi2ch-net-check-file): (navi2ch-net-turn-back-file): $B$"$\!<$sBP1~!#(B * navi2ch-message.el (navi2ch-message-exit): $BAw$C$?8e$A$c$s$H85$N0LCV$KLa$k$h$&$K!#(B * navi2ch-list.el (navi2ch-list-toggle-open): $BDI2C!#B>$K$b?'!9DI2C!#%V%C%/%^!<%/;CDjE*$KCf;_!#(B (navi2ch-list-category-list): navi2ch-list-board-name-list $B$+$iJQ99!#(B $BB>$N(B board-name-list $B4XO"$bA4$F(B category-list $B$K!#(B get-board-name-list $B$OJL$N0UL#$N4X?t$GMQ0U!#(B (navi2ch-list-select-current-board): $B%+%F%4%j$N3+JD$b$9$k$h$&$K!#(B (navi2ch-list-(add|delete|toggle|insert)-bookmark): bookmark $BI|3h!#(B 2001-03-03 Taiki Sugawara * navi2ch-net.el (navi2ch-net-download-file): $BDI2C!#(BIf-Modified-Since $B$r;H$&$h$&$K!#(B $B$3$N4X?t$NDI2C$K$h$j(B update-file $B4XO"$NBgI}$JJQ99!#(B $B$G$b!"$I$3JQ$($?$+$OLLE]=-$$$s$G=q$+$J$$(B ;-)$B!#(B 2001-03-01 Taiki Sugawara * navi2ch-board.el (navi2ch-board-show-url-subr): $B%+%C%3$,0l$DB-$i$J$+$C$?!&!&!&!#(B 2001-02-23 Taiki Sugawara * navi2ch-net.el (navi2ch-net-update-file-diff): navi2ch-net-update-file $B$+$iJ,3d!#(B 2001-02-17 Taiki Sugawara * navi2ch-article.el (navi2ch-article-parse-message): $B6h@Z$N@55,I=8=$,$A$HJQ$@$C$?$N$rD>$9(B 2001-02-16 Taiki Sugawara * navi2ch-article.el (navi2ch-article-parse-message): "<>" $B$,6h@Z$N$H$-$NJ8>OCf$N(B "," $B$KBP1~!#(B * navi2ch-util.el (navi2ch-replace-html-tag):"
" $B$GCV49$7$F$?$N$rD>$9!#(B &#[0-9]; $B$J$N$OA4It".$K!#(B (navi2ch-replace-html-tag-with-temp-buffer): $BF1>e!#(B (navi2ch-replace-html-tag-alist): $B%G%U%)$G(B nbsp $B$bCV49!#(B 2001-02-12 Taiki Sugawara * navi2ch-util.el (navi2ch-url-to-board): $B=$@5!#(B * navi2ch-net.el (navi2ch-net-get-header): HTML/1.1 $B$@$1$7$+5v2D$7$F$J$+$C$?$N$r=$@5!#(B * navi2ch-message.el (navi2ch-message-cite-original-from-number): insert-string $B$r(B insert $B$K(B(XEmacs $BBP:v(B)$B!#(B * navi2ch-article.el (navi2ch-article-get-current-number): pos $B$,(B nil $B$G$bBg>fIW$J$h$&$K!#(B * navi2ch-net.el (navi2ch-net-file-updated): $B>r7o$r4K$/!#(B * navi2ch-board.el (navi2ch-board-show-url): u $B$K%P%$%s%I(B (navi2ch-board-show-url-subr): $BDI2C(B (navi2ch-board-browse-url(-at-point)?): $B>e5-4X?t$NDI2C$K$h$j:o=|(B * navi2ch-article.el (navi2ch-article-show-url-subr): $BDI2C(B (navi2ch-article-show-url): $BDI2C(B u $B$K%P%$%s%I!#(B (navi2ch-article-browse-url(-at-point)?): $B>e5-4X?t$NDI2C$K$h$j:o=|(B * navi2ch-util.el (navi2ch-article-to-url): $BDI2C!#(B (navi2ch-board-to-url): $BDI2C!#(B * navi2ch-message.el (navi2ch-message-ask-before-(send|kill)): $BDI2C(B (navi2ch-message-write-message): navi2ch-message-kill-message $B$r;H$&$h$&$K!#(B (navi2ch-message-send-message): $BAw$k$+$I$&$+J9$/$h$&$K!#(B (navi2ch-message-kill-message): $BDI2C!#>C$9$H$-$KJ9$/!#(B (navi2ch-message-exit): navi2ch-message-kill-message $B$r;H$&$h$&$K!#(B * navi2ch-article.el (navi2ch-article-sync): navi2ch-article-select-current-link $B$GA*$s$@$H$-$b(B subject $B$rI=<(!#(B * navi2ch-util.el (navi2ch-url-to-article): subject $B$r>C$9!#(B (navi2ch-url-to-board): $B$A$c$s$H$7$?(B sbuject $B$K!#(B 2001-01-23 Taiki Sugawara * navi2ch-bookmark.el (cl): require $B$9$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-write-message): $B=$@5!#(B * all: bord $B$C$F$J$C$F$?=j$r(B board $B$K=$@5!#(B 2001-01-22 Taiki Sugawara * navi2ch-board.el (navi2ch-board-add-global-bookmark): $BDI2C!#(B * navi2ch-bookmark.el (toplevel): bookmark $BMQ$N%b%8%e!<%kDI2C!#(B * navi2ch-message.el (navi2ch-message-cite-original-from-number): $B=$@5(B * navi2ch-util.el (navi2ch-replace-html-tag): $B=$@5(B (navi2ch-replace-html-tag-with-temp-buffer): $BDI2C(B * navi2ch-article.el (navi2ch-article-parse-message): $BDI2C(B (navi2ch-article-add-global-bookmark): $BDI2C(B 2001-01-18 $BL>L5$7$5$s(B <293@unix.2ch.net> * navi2ch.el (navi2ch): C-u $B$G(B offline $B$rH?E>(B 2001-01-18 Taiki Sugawara * navi2ch-article.el (navi2ch-article-get-message-list): $B=$@5!#(B (navi2ch-article-select-view-range-subr): $B=$@5(B (toplevel): debug $BMQ$N%3!<%I$r$O$:$9!#(B 2001-01-16 Taiki Sugawara * navi2ch-article.el (navi2ch-article-check-cached): $BDI2C(B (navi2ch-article-arrange-message): (navi2ch-article-arrange-message-functions): $BDI2C(B (navi2ch-article-insert-messages): $B=$@5!#(B * navi2ch-board.el (navi2ch-board-select-article): (navi2ch-board-get-subject-list): (navi2ch-board-insert-subjects): $B=$@5(B (navi2ch-board-select-article-or-scroll): $B=$@5!#(B 2001-01-15 Taiki Sugawara * navi2ch-board.el (navi2ch-board-select-view-range): $BDI2C(B * navi2ch-article.el (navi2ch-article-insert-messages): $B$A$g$C$H(B debug $BMQ$K=$@5!#(B (navi2ch-article-view-range): buffer local $B$JJQ?t$K!#(B $B$=$l$K4XO"$7$F>/$7JQ99!#(B (navi2ch-article-new-message-range): (navi2ch-article-exist-message-range): (navi2ch-article-auto-range): $BDI2C!#(B (navi2ch-article-view-article): $B=$@5!#(B (navi2ch-article-select-view-range-subr): $BDI2C!#(B * all: buffer $B$,L5$$$H$-$O(B delete-windows-on $B$7$J$$$h$&$K!#(B 2001-01-15 $BL>L5$7$5$s(B <279@unix.2ch.net> * navi2ch-board.el (navi2ch-board-select-article): 2001-01-15 $BL>L5$7$5$s(B <243@unix.2ch.net> * navi2ch-board.el (navi2ch-board-get-subject-list): perl $BHD$r8+$l$k$h$&$K=$@5(B 2001-01-13 Taiki Sugawara * navi2ch.el (navi2ch-one-pain): * navi2ch-list.el (navi2ch-list-two-pain): * navi2ch-board.el (navi2ch-board-two-pain): (navi2ch-board-select-article): $B=$@5!#(B (navi2ch-board-add-bookmark): (navi2ch-board-delete-bookmark): (navi2ch-board-insert-subjects): (navi2ch-board-save-info): (navi2ch-board-load-info): $B=$@5!#(B * navi2ch-article.el (navi2ch-article-two-pain): $BDI2C(B * navi2ch-util.el (navi2ch-convert): $BDI2C(B 2001-01-11 Taiki Sugawara * navi2ch-net.el (navi2ch-net-send-request): exited abnormally $B$r=P$J$$$h$&$K(B. * navi2ch-article.el (navi2ch-article-get-message-list): nil $B$J(B message $B$r>C$9$h$&$K!#(B (navi2ch-article-redraw): $B=$@5!#(B 2001-01-09 Taiki Sugawara * navi2ch-message.el (navi2ch-message-current-article-buffer): $BDI2C(B (navi2ch-message-write-message): (navi2ch-message-set-name): $B=$@5!#(B * navi2ch.el (navi2ch-save-status): (navi2ch-exit): (navi2ch-suspend): $BDI2C!#(B * navi2ch-util.el (navi2ch-put-alist): $BDI2C!#(B * navi2ch-article.el (navi2ch-article-parse-message): xemacs $B$G(B
$B$NCV49$,<:GT$9$k$N$r$H$j$"$($:=$@5(B (navi2ch-article-kill-buffer): (navi2ch-article-save-info): (navi2ch-article-load-info): $BDI2C!#(B (navi2ch-article-save-number): (navi2ch-article-load-number): *-(add|open)-number $B$+$iJQ99!#(B (navi2ch-article-view-article): (navi2ch-article-sync): $BBP1~!#(B 2001-01-08 $BL>L5$7$5$s(B <251@unix.2ch.net> * navi2ch-article.el (navi2ch-article-recenter) $BDI2C!#(B * navi2ch-article.el (navi2ch-article-redisplay-current-message): $B=$@5!#(B 2001-01-08 Taiki Sugawara * navi2ch-board.el (navi2ch-board-select-board): host $BL>$r(B modeline $B$K!#(B * navi2ch-util.el (navi2ch-url-to-board): (navi2ch-url-to-article): (navi2ch-2ch-url-p): $BDI2C!#(B * navi2ch-article.el (navi2ch-article-set-link-property): url $B$N(B regexp $B$K(B ':' $B$rDI2C!#(B (navi2ch-article-select-current-link): 2ch $BFb$J$i(B navi2ch $B$G3+$/$h$&$K!#(B (navi2ch-article-sync): (res/all-res) $B$r(B modeline $B$K!#(B (navi2ch-article-uudecode-message): $B=$@5!#(B 2001-01-07 Taiki Sugawara * navi2ch-message.el (navi2ch-message-cite-original-from-number): $B=$@5!#(B * navi2ch-article.el (navi2ch-article-get-message-list): $BHO0O$r-Mh$N0Y$K!)(Bheader $B$rJV$9$h$&$K!#(B * navi2ch-board.el (navi2ch-board-select-article-no-move): $BDI2C!#(Bo $B$K%P%$%s%I!#(B $B$D$$$G$K(B navi2ch-toggle-offline $B$r(B t $B$K%P%$%s%I$7$J$*$7!#(B * navi2ch.el (navi2ch-three-pain): $BDI2C(B 2001-01-06 Taiki Sugawara * navi2ch-article.el (navi2ch-article-get-buffer-name): $BDI2C(B (navi2ch-article-buffer-name-prefix): $BDI2C!#(B $B%9%l%C%I$NJ#?t(B buffer $B2=7W2h3+;O!#(B (navi2ch-article-get-buffer-name): (navi2ch-article-buffer-list): (navi2ch-article-current-buffer): (navi2ch-article-forward-buffer): (navi2ch-article-backward-buffer): $BDI2C!#(B * all: $B?'!9BP1~(B($B$C$F$+$I$3$$$8$C$?$+$"$s$^3P$($F$J$$(B)$B!#(B 2001-01-05 Taiki Sugawara * navi2ch-list.el (navi2ch-list-delete-bookmark): (navi2ch-list-add-bookmark): coding-system-for-(read|write) $B$r(B with-temp-file $B$NA0$KIU$1$F$_$k!#(B * navi2ch-article.el (navi2ch-article-previous-link): $B=$@5(B (navi2ch-article-set-link-property): navi2ch-article-insert-messages $B$+$iJ,N%!"DI2C!#(B (navi2ch-article-link-face): (navi2ch-article-link-mouse-face): url-*-face $B$+$iJQ99(B($B5$J,(B) url-*-face $B$O(B defalias $B$7$F;D$7$F$"$k!#(B (toplevel) shift tab $B$r(B navi2ch-article-previous-link $B$K%P%$%s%I(B (navi2ch-article-push-point): $BDI2C!#(Bm $B$K%P%$%s%I(B (navi2ch-article-pop-point): $B=$@5!#(B 2001-01-04 Taiki Sugawara * navi2ch-article.el (navi2ch-article-pop-point): $BDI2C(B (navi2ch-article-goto-number): $BBP1~!"=$@5!#(B (navi2ch-article-select-current-link): $BBP1~(B (navi2ch-article-redisplay-current-message): $BDI2C!#(B 2001-01-03 $BL>L5$7$5$s(B <243@unix.2ch.net> * navi2ch-net.el (navi2ch-net-send-request): (navi2ch-net-split-url): proxy $B$N=$@5!#(B 2001-01-03 Taiki Sugawara * navi2ch-message.el (navi2ch-message-write-message): (navi2ch-message-insert-header): (navi2ch-message-send-message): * navi2ch-net.el (navi2ch-net-send-message): $B=$@5!#?7%9%lN)$F$l$k$h$&$K!#$G$b$&$^$/9T$+$J$$!&!&!&(B * navi2ch-article.el (navi2ch-article-insert-messages): (navi2ch-article-get-message): (navi2ch-article-redraw): $B=$@5!#(B (navi2ch-article-header-format-function): $BDI2C(B (navi2ch-article-default-header-format-function): $BDI2C!#(B $B%X%C%@$N@07A$O$3$3$G!#(B (navi2ch-article-insert-messages): $B=$@5(B (navi2ch-article-exit): $B=$@5!#(B (navi2ch-article-parse-message): $B=$@5(B * navi2ch-util.el (navi2ch-replace-html-tag-regexp-list): (navi2ch-replace-html-tag-regexp): (navi2ch-replace-html-tag): *-article-replace-* $B$+$iJQ99!"0\F0!#(B * navi2ch-board.el (navi2ch-board-get-subject-list): (navi2ch-board-exit): $B=$@5!#(B * navi2ch-article.el (navi2ch-article-parse-message): $BBP1~!#(B 2001-01-02 Taiki Sugawara * navi2ch-util.el (navi2ch-read-number): $BDI2C!#?t;z$rFI$_9~$`(B * navi2ch-article.el (navi2ch-article-redraw): $BGQ;_(B (navi2ch-article-sync): navi2ch-article-parse-message $B$r;H$&$h$&$K(B (navi2ch-article-view-range-list): $BDI2C!#I=<(HO0O$NA*Br$K;H$&!#(B (navi2ch-article-select-view-range): $BDI2C!#(B * README: hc2ivan $B$5$s$NL>A0$,(B ivan2hc $B$@$C$?$N$r=$@5(B ;-p 2000-12-29 Taiki Sugawara * navi2ch-article.el (*-article-list): *-message-list $B$K(B (*-articles): *-messages $B$K(B (navi2ch-article-parse-message, navi2ch-article-get-message-list): $BJ,N%!"DI2C!#(Bmessage-list $B4XO"$N2~B$3+;O!#(B (navi2ch-article-inside-range-p): $BDI2C(B 2000-12-28 Taiki Sugawara * navi2ch-article.el (navi2ch-article-goto-number): and $B$r(B or $B$K!&!&!&(B 2000-12-27 Taiki Sugawara * navi2ch-article.el (navi2ch-article-view-range): $BDI2C(B $BI=<($9$kHO0O$r;XDj!#(B (navi2ch-article-get-article-list): (navi2ch-article-next-message): (navi2ch-article-previous-message): (navi2ch-article-insert-articles): $BBP1~!#(B 2000-12-26 Taiki Sugawara * configure, configure.in, etc...: $BDI2C!#(B * navi2ch-article.el (navi2ch-article-enable-fill-list): (navi2ch-article-disable-fill-list): $BDI2C(B (navi2ch-article-insert-articles): $BBP1~(B 2000-12-26 $BL>L5$7$5$s(B <213@unix.2ch.net> * navi2ch-message.el (navi2ch-message-remember-user-name): $BDI2C(B $B4pK\E*$K$=$N%9%l$G$NL>A0$7$+3P$($J$$$h$&$K(B * navi2ch-article.el (navi2ch-article-goto-number-recenter): $BDI2C(B 2000-12-26 Taiki Sugawara * navi2ch-util.el (navi2ch-uudecode-region): * navi2ch-article (navi2ch-article-uudecode-message): $BDI2C(B M-u $B$K%P%$%s%I(B * navi2ch-article.el (navi2ch-article-insert-articles): $B%l%9$N6h@Z$j$K(B underline $B$r;H$&$h$&$K!#(B (navi2ch-article-next-link): (navi2ch-article-previous-link): $BDI2C(B C-i $B$H(B M-C-i $B$K%-!<%P%$%s%I(B 2000-12-25 Taiki Sugawara * navi2ch-message.el (navi2ch-message-send-message): $BAw?.@.8y$G!"(Bsync $B$9$k$h$&$K!#(B 2000-12-24 Taiki Sugawara * navi2ch-net.el (navi2ch-net-send-message): 302 $B$G%A%'%C%/$9$k$h$&$K(B * navi2ch-article.el (navi2ch-article-next-message): (navi2ch-article-previous-message): $BDI2C!#(B (navi2ch-article-next-link): $BDI2C(B($BESCf(B) * navi2ch-message.el (navi2ch-message-user-name): XEmacs $B$J$i(B $BL>L5$7$5$s!w#X#E#m#a#c#s(B $B$K(B($B>P(B)$B!#(B 2000-12-23 Taiki Sugawara * navi2ch-net.el (navi2ch-net-split-url): proxy $BM-$j$N$H$-(B http:// $B$rIU$1$F$?$N$r=$@5!#(B (navi2ch-net-update-file): 404 $B$,Mh$?$i(B not found $B$K!#(B 2000-12-22 Taiki Sugawara * navi2ch-net.el (navi2ch-net-send-message): $B=$@5!#(B * navi2ch-board.el (navi2ch-board-sync): $B$3$3$G!"(Bsave, load-info $B$9$k$h$&$K!#(B (navi2ch-board-insert-subjects): cache $B$5$l$F$?$i?'IU$1!#(B (navi2ch-board-select-article): $BBP1~!#(B (navi2ch-board-cached-face): $BDI2C!#(B 2000-12-22 Taiki Sugawara * navi2ch-article.el (navi2ch-article-*-bookmark): *-number $B$KJQ99!#(B (navi2ch-article-parse-field-list): $BDI2C(B (navi2ch-article-get-article-list): $BBP1~!#(B (navi2ch-article-borwse-url): (navi2ch-article-browse-url-at-point): $BDI2C!#(B $B%V%i%&%6$G8+$k(B * navi2ch-message.el (navi2ch-message-send-message): (navi2ch-message-insert-header): $BBP1~(B (navi2ch-message-set-name): $BDI2C(B * navi2ch-board.el (navi2ch-board-select-board): navi2ch-board-goto-board $B$+$iL>A0JQ99!"=$@5!#(B (navi2ch-board-goto-board): $BDI2C(B (navi2ch-board-exit): $B=$@5(B (navi2ch-board-save-info): $BDI2C(B (navi2ch-board-load-info): $BDI2C(B (navi2ch-board-*-bookmark): board.info $B$r;H$&$h$&$K!#(B (navi2ch-board-browse-url): (navi2ch-board-browse-url-at-point): $BDI2C!#(B $B%V%i%&%6$G8+$k(B * navi2ch-net.el (navi2ch-net-http-proxy): $B>/$7$@$1D>$7$?!)(B 2000-12-21 Taiki Sugawara * navi2ch-board.el (*-bookmark): $B=$@5!#(B * navi2ch.el (navi2ch-save-info): (navi2ch-load-info): $BDI2C(B * navi2ch-article.el (navi2ch-article-view-article): (navi2ch-article-exit): $BBP1~(B (navi2ch-article-add-bookmark): (navi2ch-article-open-bookmark): $BBP1~(B 2000-12-20 Taiki Sugawara * navi2ch-net.el (navi2ch-net-get-header): Status $BDI2C!#(B (navi2ch-net-update-file): $B:9J,$N%A%'%C%/$r(B Content-Range $B$+$i(B 206 $B$+$I$&$+$KJQ99!#(B * navi2ch-article.el (navi2ch-article-replace-string): $B=$@5!#(B (navi2ch-article-get-article-list): mail $BMs$b@07A!#(B (navi2ch-article-insert-articles): current-number $B$C$F(B property $B$bF~$l$k$h$&$K!#(B (navi2ch-article-get-message): (navi2ch-article-get-current-number): $BDI2C!#(B * navi2ch-message.el (navi2ch-message-cite-original): (navi2ch-message-cite-original-from-number): $BBP1~!#(B 2000-12-19 * navi2ch-board.el (navi2ch-board-toggle-bookmark): * navi2ch-net.el (navi2ch-net-get-content): $BDI2C!#(B (navi2ch-net-update-file): $BJQ99!#(B * all (*-get-*-list): file $B$+$iF@$k$h$&$KJQ99!#(B (*-insert-*): list $B$+$iF@$k$h$&$KJQ99(B (*-sync): $B%U%!%$%k$,99?7$5$l$J$+$C$?$i=q49$($J$$$h$&$KJQ99!#(B (*-bookmark-*): $BBP1~!#(B 2000-12-18 * navi2ch-message.el (navi2ch-message-cite-original-from-number): (navi2ch-message-cite-original): (navi2ch-message-cite-prefix): $BDI2C!#0zMQ$,$G$-$k$h$&$K!#(B * navi2ch-board.el (navi2ch-board-delete-bookmark): $B=$@5(B (navi2ch-board-goto-board): $BHD$NL>A0$r(B mode-line $B$KI=<(!#(B * navi2ch-list.el (navi2ch-list-delete-bookmark): $B=$@5(B * navi2ch-article.el (navi2ch-article-get-article-list): $B%i%&%s%8$KBP1~(B (navi2ch-article-get-article-list): $B@hF,$N6uGr$r>C$9!#(B (navi2ch-article-replace-string): (navi2ch-article-replace-regexp-alist): (navi2ch-article-replace-regexp): $BDI2C!#(B (navi2ch-article-get-article-list): $BBP1~!#(B (toplevel): $BFI$_9~$_Cf$N%a%C%;!<%8JQ99!#(B 2000-12-18 * all: $B5$J,$,>h$C$?$N$@$1(B docstring $B$rIU$1$F$_$k(B :-) * navi2ch-article.el (navi2ch-article-mode): $B@Z$j$D$a$J$$$h$&$K(B (navi2ch-article-enable-fill): $BDI2C!#(B nil $B$J$i(B fill-region $B$7$J$$!#(B (navi2ch-article-insert-articles): $BBP1~!#(B 2000-12-18 * navi2ch-util.el (navi2ch-replace-string): $B=$@5!#(B * navi2ch-net.el (navi2ch-net-get-time): timezone-fix-time $B$N(B2$BHVL\$N0z?t$r(B (current-time-zone) $B$K!#(B (navi2ch-net-update-file): diff $B4X78$N=$@5!#(B (navi2ch-net-send-message): Cookie, Referer $B$rAw$k$h$&$K!#(B 2000-12-17 * navi2ch-message.el (navi2ch-message-send-message): $B%f!<%6L>A0$r3P$($k$h$&$K$7$?!#(B * navi2ch-list.el (navi2ch-list-insert-board-names): $B2?8N$+!"(Bnavi2ch-offline $B$r(B t $B$KB+G{$7$F$?$N$rD>$7$?!#(B * navi2ch-net.el (navi2ch-net-file-updated): $BD9$5$b8+$k$h$&$K$7$?!#(B (navi2ch-net-update-file): $B6/@)FI$_9~$_$N$H$-$K(B "Pragma: no-chache" $B$rIU$1$?!#(B 2000-12-16 * navi2ch-list.el (navi2ch-list-mouse-select): $B=$@5!#(B 2000-12-16 * navi2ch-message.el (navi2ch-message-user-name): $BDI2C!#(B (navi2ch-message-write-message): $BBP1~!#(B * navi2ch-article.el (navi2ch-article-enable-diff): $BDI2C!#(B t $B$J$i:9J,$r;}$C$F$/$k!#(B (navi2ch-article-get-article-list): $BBP1~!#(B (navi2ch-article-sync-disable-diff): $BDI2C!#(BS $B$K%P%$%s%I!#(B * navi2ch-net.el (navi2ch-net-update-file): diff $B%*%W%7%g%s$rIU$1$k!#(B * navi2ch-list.el (navi2ch-list-goto-board): completing-read $B$N0z?t$N=$@5!#(B (navi2ch-list-get-board-name-list): $B$d$C$Q(B get-board $B$KJQ99(B :-) (navi2ch-list-insert-board-names): $BBP1~!#(B * navi2ch-board.el (navi2ch-board-get-subject-list): (navi2ch-board-get-subject-list): * navi2ch-article.el (navi2ch-article-get-article-list): (navi2ch-article-insert-articles): $BF1$8$/(B * navi2ch-article.el (navi2ch-article-set-article-list): , $B$,2=$1$k$N$rD>$9!#(B 2000-12-16 * navi2ch-article.el * navi2ch-list.el (navi2ch-list-delete-bookmark): $B=$@5!#(B (navi2ch-list-add-bookmark): $B=$@5!#(B (navi2ch-list-sync): bookmark $B=*N;$r$d$a!#(B force $B$,;XDj$5$l$J$1$l$P%-%c%C%7%e$rFI$`$h$&$K!#(B * navi2ch-board.el (navi2ch-board-set-subject-list): $B%i%&%s%8$N%U%)!<%^%C%HBP1~!#(B (navi2ch-board-add-bookmark): $B=$@5!#(B (navi2ch-board-delete-bookmark): $B=$@5!#(B (navi2ch-board-sync): bookmark $B=*N;$r$d$a!#(B 2000-12-16 * navi2ch-util.el (navi2ch-insert-file-contents): $BDI2C!#(B (navi2ch-expand-file-name): navi2ch.el $B$+$i0\F0(B (navi2ch-replace-string): $BF1$8$/!#(B * navi2ch-article.el (navi2ch-article-set-article-list): navi2ch-article-get-article-list $B$+$iJQ99!#(B (navi2ch-article-get-article-list): $B:o=|!#(B (navi2ch-article-insert-articles): $BBP1~!#(B (navi2ch-article-article-list): $BDI2C!#(B number $B$C$F%-!<$rDI2C!#(B (navi2ch-article-insert-articles): $BBP1~!#(B >>n $B$H(B http:.+ $B$K(B property $B$rIU$1$k!#(B (navi2ch-article-select-current-link): $BDI2C!#(B (navi2ch-article-mouse-select): $BDI2C(B (navi2ch-article-goto-number): $BDI2C(B * navi2ch-board.el (navi2ch-board-set-subject-list): navi2ch-board-get-subject-list $B$+$iJQ99!#(B (navi2ch-board-get-subject-list): $B:o=|!#(B (navi2ch-board-insert-subjects): $BBP1~!#(B (navi2ch-board-subject-list): $BDI2C!#(B * navi2ch-list.el (navi2ch-list-board-name-list): $BDI2C!#(B (navi2ch-list-set-board-name-list): navi2ch-list-get-board-name-list $B$+$iJQ99!#(B (navi2ch-list-get-board-name-list): $B:o=|!#(B (navi2ch-list-insert-board-names): $BBP1~!#(B (navi2ch-list-select-board): $BJQ99!#(B (navi2ch-list-select-current-board): $B>e$+$iJ,N%!#(B (navi2ch-list-goto-board): $BDI2C!#(B * navi2ch-net.el (navi2ch-net-update-file): navi2ch-net-get-file $B$+$iJQ99!#%"%C%W%G!<%H$9$k$@$1$K!#(B (navi2ch-net-get-file): $B:o=|(B 2000-12-16 * navi2ch-board.el (navi2ch-board-insert-subjects): (navi2ch-board-mouse-select): $B%^%&%9BP1~!#(B * navi2ch-list.el (navi2ch-list-insert-board-names): (navi2ch-list-mouse-select): $B%^%&%9BP1~(B 2000-12-15 * navi2ch-article.el (navi2ch-article-get-article-list): From: $B$N$H$3$bCV49$9$k$h$&$K!#(B 2000-12-15 * navi2ch-message.el (navi2ch-message-write-message): article $B$H(B message buffer $B$@$1I=<($9$k$h$&$KJQ99!#(B * navi2ch-net.el (navi2ch-net-split-url): navi2ch-net-send-request $B$+$iJ,3d!#(B $B$$$/$D$+JQ99!#(B * navi2ch-board.el (navi2ch-board-mode-map): navi2ch-board-select-article $B$KJQ99(B (navi2ch-board-get-subject-list): $B@55,I=8=$NJQ99!#(B * navi2ch-list.el (navi2ch-list-mode-map): navi2ch-list-select-board $B$KJQ99(B 2000-12-15 * *.el: GPL $B$J$3$H$rI=L@(B($BB?J,(B)$B!#(B * navi2ch-net.el (navi2ch-net-send-request): $B%W%m%/%7BP1~$7$F$_$?!#(B (navi2ch-net-http-proxy): $BDI2C(B (navi2ch-net-get-file): $B6/@)FI$_9~$_(B (navi2ch-net-force-update): $BDI2C(B * navi2ch-list.el (navi2ch-list-sync): $BBP1~(B * navi2ch-article.el (navi2ch-article-sync): $BBP1~(B * navi2ch-board.el (navi2ch-board-sync): $BBP1~(B * navi2ch.el (navi2ch-replace-string): $BDI2C(B * navi2ch-article.el (navi2ch-article-get-article-list): & " $B$NCV49DI2C(B 2000-12-14 * all: $B%*%U%i%$%s%b!<%I$rDI2C(B * navi2ch-net.el, navi2ch.article.el, navi2ch-list.el bookmark $B$r$[$H$s$I$=$N$^$^D:$/(B :-) bookmark $B$r%H%0%k$9$k$h$&$K$7$?!#(B * navi2ch-message.el: $BDI2C(B * navi2ch-net.el, navi2ch-article.el: $B=q$-$3$_$G$-$k$h$&$K$J$C$?!*!*(B * navi2ch-article.el: $BD9$9$.$k9T$r2~9T$9$k$h$&$K$7$?!#(B $B%5%V%8%'%/%H$rI=<($9$k$h$&$K$7$?!#(B * navi2ch-util.el: $BDI2C(B 2000-12-12 * navi2ch-net.el: navi2ch-net-file-updated $B$N4V0c$$$r=$@5!#(B binary $B$GFI$_=q$-$9$k$h$&$K$7$?!#(B * all: exit $B$9$k$H$-(B burry-buffer $B$r8F$V$h$&$K$7$?!#(B (require 'cl) $B$7K:$l$k$C$F$$$&$"$[$J%_%9$r=$@5!#(B 2000-12-12 * all: $B$H$j$"$($:40@.!#(B $Id$ navi2ch/ChangeLog.2000066400000000000000000007410541173560164300143430ustar00rootroot000000000000002003-12-28 Nanashi San * navi2ch-mona.el (navi2ch-mona-arrange-message): navi2ch-mona-enable-article-list $B$N$_$r;XDj$7$?:]$K%G%U%)%k%H$,$*(B $B$+$7$+$C$?$N$r=$@5!#O@M}<0$@$H?<$/$J$j$9$.$k$N$G(B cond $B$KJQ99!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/538 2003-12-09 mami * NEWS: $B99?7!#(B 2003-12-08 mami * navi2ch-article.el (navi2ch-article-str-to-num): $B?tCM$N:G>.CM!&(B $B:GBgCM$r@)8B$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/409-418n 2003-12-05 Nanashi San * navi2ch-article.el (navi2ch-article-set-link-property-subr): $B%+%l%s%H%P%C%U%!0J30$K$b%W%m%Q%F%#$r@_Dj$G$-$k$h$&$K!#(B (navi2ch-article-default-header-format-function): $BL>A0$N?t;zItJ,$K(B $B%W%m%Q%F%#$r@_Dj!#(B($B$A$H(B ad-hoc) http://pc.2ch.net/test/read.cgi/unix/1065246418/395 2003-12-04 Nanashi San * navi2ch-vars.el (navi2ch-localfile): $B?75,(B custom $B%0%k!<%W!#(B * navi2ch-localfile.el (navi2ch-localfile-default-file-modes): custom $B%0%k!<%WDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/378 (navi2ch-localfile-with-lock): directory $B$r(B unquote $B$7$F$J$+$C$?!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/384 2003-11-26 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-url-to-board): $B@55,I=8=$r(B $B=$@5!#(B (navi2ch-js-url-to-article): $BF1>e!#(B 2003-11-25 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-url-to-board): parse $B;~$K(B $B%5!<%PL>$@$1$G$J$/(B prefix $B$N%G%#%l%/%H%jL>$b%^%C%A$5$;$k$h$&$K!#(B $B?77A<0(B URL $B$N$H$-$O(B read.cgi $B0J30$N(B *.cgi (i.cgi $B$H$+(B rawmode.cgi) $B$bG'<1$9$k$h$&$K!#(B (navi2ch-js-url-to-article): $BF1>e!#(B 2003-11-23 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-url-to-board): http://jbbs.shitaraba.com/bbs/read.cgi/computer/351/1040452814/1-5 $B$J$I$N7A<0$N(B URL $B$KBP1~!#$A$g$C$H=q$-D>$7!#(B (navi2ch-js-url-to-article): $BF1>e!#(B * navi2ch-multibbs.el (navi2ch-2ch-url-to-article): $B%1!<%?%$MQ(B URL $B$KBP1~!#$A$g$C$H=q$-D>$7!#(B (navi2ch-2ch-url-to-board): $BF1>e!#(B 2003-11-14 Nanashi San * navi2ch-article.el (navi2ch-article-set-link-property): htp: $B$r(B $B%5%]!<%H!#(B * navi2ch-vars.el (navi2ch-article-url-regexp): htp: $B$r%5%]!<%H!#(B * navi2ch-http-date.el (toplevel): $B%3%s%Q%$%k;~$K%F%9%H$9$k$h$&$K!#(B 2003-11-09 Nanashi San * navi2ch-search.el (navi2ch-search-for-each-directory-recursive): $B?74X?t!#(B (navi2ch-search-directory-to-board): $B?74X?t!#(B (navi2ch-search-all-board-list): $B>e5-4X?t$r;H$$!"(Bcache $B$,B8:_$9$k(B $B$9$Y$F$N%G%#%l%/%H%j$rHD$H8+$J$9$h$&$K!#(B 2003-11-06 Nanashi San JBBS@$B$7$?$i$P$NJQ99$KBP1~!#(B http://jbbs.shitaraba.com/computer/bbs/read.cgi?BBS=351&KEY=1040452916&START=126&END=126&NOFIRST=TRUE * navi2ch-jbbs-shitaraba.el (navi2ch-js-send-message): DIR $B$rEO$9(B $B$h$&$K!#(B (navi2ch-js-url-regexp): $B?7JQ?t!#(B (navi2ch-js-get-writecgi-url): /bbs/write.cgi $B$r;H$&$h$&$K!#(B (navi2ch-js-get-dir): $B?74X?t!#(B 2003-11-06 Nanashi San * navi2ch-util.el (navi2ch-ifemacsce): EmacsCE $B$+$I$&$+$NH=CG$r%3(B $B%s%Q%$%k;~$G$O$J$/!"$N4D6-$G%P%$%H%3%s%Q%$%k$7$?J*$,;H$($k$h$&$K$J$k!#(B (navi2ch-line-beginning-position, navi2ch-line-end-position): toplevel $B$K0\F0!#(Betags $B$O(B ^(def $B$G8+$F$k$h$&$J$N$G!#(B 2003-11-01 Nanashi San * navi2ch-net.el (navi2ch-net-get-content-subr-with-temp-file): gzip $B$Ne!#(B * navi2ch-search.el (navi2ch-search-all-board-list): $B?74X?t!#(B $B2<5-4X?t$N6&DLItJ,!#(B (navi2ch-search-all-subject): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-search-all-article): $BF1>e!#(B (navi2ch-search-all-cache): $BF1>e!#(B (navi2ch-search-all-orphan): $BF1>e!#(B 2003-10-31 mami * navi2ch-board-misc.el (navi2ch-bm-show-url-subr): last $B$r%5%]!<(B $B%H!#(B * navi2ch.el (navi2ch-load-info): $BLdBjH/@8;~$N%W%m%s%W%H$K%U%!%$%k(B $BL>$rI=<($9$k$h$&$K!#(B 2003-10-18 Nanashi San * navi2ch-board-misc.el (navi2ch-bm-select-article): $B8F$S=P$7@h$G(B $B%(%i!<$,5/$-$?:]$N(B backtrace $B$r * navi2ch-article.el (navi2ch-article-change-help-echo-property): $B%l%9%"%s%+!<$,O"B3$7$F$$$k>l9g$N%P%0$r=$@5(B & $B$A$g$C$H=q$-D>$7!#(B $BNc$($P!V(B>>1>>2$B!W$H$"$C$?$H$-!"!V(B>>1$B!W$N(B help-echo $B$K(B2$BHV$N%l%9$NFb(B $BMF$,$D$/>l9g$,$"$C$?!#(B 2003-10-13 Nanashi San $BHD$N(B subject.txt $B$+$i$b%0%m!<%P%k%V%C%/%^!<%/$+$i$b;2>H$5$l$F$$$J(B $B$$%9%l$r(B orphan $B$H$7!"(Bexpire $B$d8!:w;~$K;2>H$G$-$k$h$&$K$7$?!#(B * navi2ch-article.el (navi2ch-article-orphan-p): $B?74X?t!#(B * navi2ch-board-misc.el (navi2ch-bm-search-current-board-orphan): $B?74X?t!#(B (navi2ch-bm-search): $BA*Br;h$K(B orphan $B$rDI2C!#(B * navi2ch-board.el (navi2ch-board-expire): navi2ch-board-expire-orphan-only $B$r;2>H$9$k$h$&$K!#(B * navi2ch-list.el (navi2ch-list-search-current-board-orphan): $B?74X?t!#(B (navi2ch-list-search-current-category-orphan): $B?74X?t!#(B (navi2ch-list-search): $BA*Br;h$K(B orphan $B$rDI2C!#(B * navi2ch-search.el (navi2ch-search-orphan): $B?74X?t!#(B (navi2ch-search-orphan-subr): $B?74X?t!#(B (navi2ch-search-all-orphan): $B?74X?t!#(B * navi2ch-vars.el (navi2ch-board-expire-orphan-only): $B?7JQ?t!#(B 2003-10-12 Nanashi San * navi2ch-article.el (navi2ch-article-cached-subject): $BF1$8HD$N%9(B $B%l$X$N%j%s%/$N>l9g$OHD0lMw$+$i%9%l%?%$%H%k$r$7!#(B * navi2ch-article.el (navi2ch-article-get-separator): "," $B6h@Z$j$+(B $B$I$&$+$N3NG'$b9T$$!"<:GT$7$?$i(B "<>" $B6h@Z$j$H8+$J$9$h$&$K!#(B $B2u$l$?%9%l$r3+$$$?;~!"6h@Z$j$,(B "<>" $B$K$J$k3NN($,>e$,$k!#(B * navi2ch-search.el (navi2ch-search-for-each-board): $B?74X?t!#(B (navi2ch-search-for-each-article): $B?74X?t!#(B (navi2ch-search-board-subject-regexp): -for-each-board() $B$r;HMQ!#(B navi2ch-board-get-subject-list $B$r;H$&$h$&$K!#(B (navi2ch-search-article-regexp): -for-each-article() $B$r;HMQ!#(B (navi2ch-search-cache): $B?74X?t!#(B-for-each-article() $B$r;HMQ!#(B (navi2ch-search-cache-subr): $BB>$N(B -subr $B4X?t$K9g$o$;$FJ,3d!#(B 2003-10-11 Nanashi San * navi2ch-vars.el (navi2ch-global-view-map): C-x C-s $B$K(B navi2ch-save-status $B$r%P%$%s%I!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/75 2003-10-08 Nanashi San * navi2ch-vars.el (navi2ch-article-next-message-hook) (navi2ch-article-previous-message-hook) (navi2ch-article-hide-message-hook) (navi2ch-article-cancel-hide-message-hook) (navi2ch-article-add-important-message-hook) (navi2ch-article-delete-important-message-hook): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-next-message) (navi2ch-article-previous-message) (navi2ch-article-hide-message) (navi2ch-article-cancel-hide-message) (navi2ch-article-add-important-message) (navi2ch-article-delete-important-message): $B>e5-(B hook $B$r;H$&$h$&$K!#(B 2003-10-06 mami * navi2ch-board-misc.el (navi2ch-bm-mark-subr): navi2ch-bm-mark-and-move $B$,(B nil $B$N$H$-$K%+!<%=%k0LCV$,0\F0$9$k$3$H(B $B$,$"$C$?$N$r=$@5!#(B navi2ch-line-beginning-position, navi2ch-line-end-position $B$r;H$&(B $B$h$&$K!#(B (navi2ch-bm-insert-subject): mouse-face $B$,iD9$JItJ,$r$^$H$a$?!#(B 2003-10-05 Nanashi San * navi2ch-auto-modify.el (navi2ch-auto-modify-subr): $B?74X?t!#(B $B5l(B navi2ch-auto-modify $B$r4X?t$KJQ99!#(B Emacs 20 $B$G$O(B dolist $B$OI8=`$G$O$J$/(B cl $B%^%/%m$G$"$k$?$a!"5/F0;~$K(B cl $B%Q%C%1!<%8$,FI$_9~$^$l$F$$$J$$$H%(%i!<$K$J$C$F$$$?!#(B (navi2ch-auto-modify): $B>e5-4X?t$N(B wrapper $B$KJQ99!#(B 2003-10-03 mami * navi2ch-util.el (navi2ch-ifemacsce): $B?7%^%/%m!#(B http://pc3.2ch.net/test/read.cgi/mobile/1000484549/140 http://pc3.2ch.net/test/read.cgi/mobile/1000484549/147 http://pc3.2ch.net/test/read.cgi/mobile/1000484549/193 http://pc3.2ch.net/test/read.cgi/mobile/1000484549/195 * navi2ch-net.el (navi2ch-net-get-content-subr): $B>e5-%^%/%m$r;H$&(B $B$h$&$K!#(B * navi2ch.el (navi2ch-load-info): $B>e5-%^%/%m$r;H$C$F(B EmacsCE $B$N%P(B $B%0$KBP=h!#(B http://pc3.2ch.net/test/read.cgi/mobile/1000484549/248 http://pc3.2ch.net/test/read.cgi/mobile/1000484549/265 2003-09-29 mami * configure.in: 1.7.1-DEV $B$K%"%C%W%G!<%H!#(B 2003-09-28 mami * navi2ch: 1.7.1 $B%j%j!<%9!#(B * configure.in: 1.7.1 $B$K%"%C%W%G!<%H!#(B 2003-09-22 Nanashi San * NEWS: $B99?7!#(B 2003-09-21 mami * NEWS: $B99?7!#(B 2003-09-12 mami * navi2ch-board-misc.el (navi2ch-bm-fetch-maybe-new-articles): $B%^!<(B $B%/$r$D$1$?D>8e$K:FIA2h$9$k$h$&(B sit-for $B$rDI2C!#(B 2003-09-10 extra * navi2ch-article.el (navi2ch-article-delete-message): $B * navi2ch-vars.el (navi2ch-message-user-name-alist): $B?7JQ?t!#(B * navi2ch-message.el (navi2ch-message-insert-header): $B>e5-JQ?t$r;H(B $B$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1054769287/354 2003-09-09 mami * navi2ch-machibbs.el (navi2ch-machibbs-url-to-board): parse $BJ}K!(B $B$rJQ99!#$^$?%I%a%$%s$,JQ$o$C$F$bBP1~$G$-$k$h$&$K!#(B (navi2ch-machibbs-url-to-article): $BF1>e!#(B 2003-09-09 extra * navi2ch-auto-modify.el (navi2ch-auto-modify-save-variables): print-length $B$H(B print-level $B$r(B nil $B$KB+G{$9$k$h$&$K!#(B 2003-09-08 Nanashi San * navi2ch-article.el (navi2ch-article-mode-map): C-c C-r $B$K2<5-4X(B $B?t$r%P%$%s%I!#(B (navi2ch-article-remove-article): $B?75,4X?t!#(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): navi2ch-article-mode-map $B$NJQ99$KH<$$!"(BC-c C-r $B$K$b(B navi2ch-bm-remove-article $B$r%P%$%s%I!#(B 2003-09-07 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-article-to-url): "$B:G?7%l%9(Bn$B8D(B" $B$KBP1~!#(B * navi2ch-jbbs-net.el (navi2ch-jbbs-article-to-url): $BF1>e!#(B * navi2ch-machibbs.el (navi2ch-machibbs-article-to-url): $BF1>e!#(B 2003-09-06 mami * navi2ch-net.el (navi2ch-net-send-message-error-string): Samba24 $B$KBP1~!#(B http://age.s22.xrea.com/talk2ch/new.txt 2003-09-06 mizmiz * navi2ch.el : (require 'navi2ch-futaba)$BDI2C(B 2003-09-05 mami *.machibbs.com $B$+$i(B *.machi.to $B$X$N(B ($B0l;~E*$J(B?) $B0\E>$KBP1~!#(B http://aa2.2ch.net/test/read.cgi/accuse/1062468676/ http://pc.2ch.net/test/read.cgi/unix/1054769287/790 * navi2ch-machibbs.el (navi2ch-machibbs-p): machi.to $B$rDI2C!#(B (navi2ch-machibbs-url-to-board): $BF1>e!#(B (navi2ch-machibbs-url-to-article): $BF1>e!#(B * navi2ch-vars.el (navi2ch-list-valid-host-regexp): $BF1>e!#(B 2003-09-05 mami * navi2ch-article.el (navi2ch-article-get-separator): search-forward $B$rMQ$$!"@55,I=8=$G$O$J$/8GDjJ8;zNs$G8!:w$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1054769287/774 2003-08-31 Nanashi San * Makefile.am (lisp_LISP): navi2ch-futaba.el $B$rDI2C!#(B 2003-08-30 mizmiz * navi2ch-oyster.el : $B%9%l$N2?J}$+$,Ds6!$7$F$/$@$5$C$?(BSESSION-ID$B * navi2ch-net.el (navi2ch-net-get-chunk): $B$9$G$K(B PROC $B$,JD$8$i$l$F(B $B$$$k$H(B looking-at $B$, $B:#2s$NJQ99$K$h$j(B navi2ch-auto-modify-file $B$,<+F0E*$K$O%m!<%I$5$l$J$/$J$C$?$N$G!"(B navi2ch-auto-modify-file $B$NCM$rJQ99$7$F$$$k>l9g$d!"(B navi2ch-init-file $B$r(B byte-compile $B$7$F$$$k>l9g$J$I!"(B $B%G%U%)%k%H$+$i30$l$?;H$$J}$r$7$F$$$k>l9g$O(B $BI,MW$K1~$8$FL@<(E*$K%m!<%I$7$F$/$@$5$$!#(B http://pc.2ch.net/test/read.cgi/unix/1054769287/519 * navi2ch-vars.el (navi2ch-auto-modify-file): $B=i4|CM$H(B docstring $B$rJQ99!#(B * navi2ch-auto-modify.el (navi2ch-auto-modify-file): $B>e5-JQ99$K$H$b$J$$GQ;_!#(B (navi2ch-auto-modify-load): $BF1>e!#(B (navi2ch-auto-modify-customize-variable-p): $BJQ?t(B navi2ch-auto-modify-file $B$rD>@\;2>H$9$k$h$&$K!#(B (navi2ch-auto-modify-save): $BF1>e!#(B $B$^$?!"(Bdefault-major-mode $B$r(B 'fundamental-mode $B$KB+G{$7$F(B navi2ch-auto-modify-file $B$G;XDj$5$l$?%U%!%$%k$r3+$/$h$&$K!#(B navi2ch-auto-modify-save-variables $B$K0z$-?t$rEO$9$h$&$K!#(B (navi2ch-auto-modify-save-variables): $B0z$-?t$K%P%C%U%!$rH$G$-$k$h$&$K!#(B 2003-07-21 mami * configure.in: 1.7-DEV $B$K%"%C%W%G!<%H!#(B 2003-07-21 mami * navi2ch: 1.7 $B%j%j!<%9!#(B * configure.in: 1.7 $B$K%"%C%W%G!<%H!#(B 2003-07-16 mami * $B3F * NEWS: $B99?7!#(B 2003-06-30 extra * NEWS: navi2ch-auto-modify $B$K$D$$$F$N5-=R$rDI2C!#(B * navi2ch-vars.el (navi2ch-article-message-filter-list): docstring $BFb$N(B $B4X?t$N5-=RNc$G!"3g8L$N?t$,$*$+$7$+$C$?$N$r=$@5!#(B 2003-06-28 SAITO Takuya * NEWS: navi2ch-article-decode-message $B$NJQ99$K$D$$$F5-=R!#(B 2003-06-26 mami * NEWS: 1.6.1 $B$+$i$NJQ99E@$rDI2C!#(B 2003-06-24 mami * navi2ch-net.el (navi2ch-net-download-logo): SETTING.TXT $B$,8+$D$+(B $B$i$J$$$H$-$d(B parse $B$K<:GT$7$?$H$-$O(B nil $B$rJV$9$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-view-logo): $B>e5-4X?t$,(B nil $B$r(B $BJV$7$?$H$-$K%(%i!<$H$J$i$J$$$h$&$K!#(B 2003-06-14 extra * navi2ch-board.el (navi2ch-board-insert-subjects): $B%9%l$N%l%9?t$,(B $B8:$C$?>l9g$NA}J,!&L$FI%l%9?tI=<($KBP1~!#(B 2003-06-13 extra * navi2ch-board.el (navi2ch-board-insert-subjects): $BL$FI%l%9?t$O(B "$B&$?t;z(B" $B$GI=5-$9$k$h$&$K!#(B 2003-06-12 mami * navi2ch-article.el (navi2ch-article-mode-map): XEmacs $B$8$c$J$$$H(B $B$-$O(B navi2ch-article-toggle-sticky $B$N%-! * navi2ch-util.el (navi2ch-quote-maybe): docstring $B$N=$@5!#(B * navi2ch-board-misc.el (navi2ch-bm-fetch-article): $B%U%#%k%?!<=hM}$r(B $B%A%'%C%/$9$k$+$I$&$+$NH=DjJ}K!$r=$@5!#(B * navi2ch-vars.el (navi2ch-board-other-field-form): $BGQ;_!#(B (navi2ch-board-insert-subject-with-diff): $B?7JQ?t!#(B (navi2ch-board-insert-subject-with-unread): $B?7JQ?t!#(B * navi2ch-board.el (navi2ch-board-insert-subjects): navi2ch-board-other-field-form $B$KBe$(!">e5-?7JQ?t$r;H$&$h$&$K!#(B * navi2ch-article.el (navi2ch-article-check-message-suppression): $B%U%#%k%?!<7k2L$rJ]B8$9$k$h$&$K!#(B (navi2ch-article-get-last-read-number): $B?74X?t!#(B (navi2ch-article-save-message-filter-cache): $BBh(B3$B0z$-?t$rDI2C!#(B 2003-06-08 SAITO Takuya * navi2ch-list.el (navi2ch-list-sync): ~/.navi2ch/etc.txt $B$NJQ99$,(B $BH?1G$5$l$J$/$J$C$F$$$?$N$r=$@5!#(B 2003-06-08 mami * navi2ch-net.el (navi2ch-net-save-aborn-file): $B?74X?t!#(B navi2ch-net-update-file-diff $B$+$iJ,N%!#(B (navi2ch-net-update-file-diff): $B>e5-4X?t$r;H$&$h$&$K!#(B 2003-06-07 mami $B?75!G=(B sticky article buffer * navi2ch-article.el (navi2ch-article-sticky-mode): $B?7JQ?t!#(B (navi2ch-article-toggle-sticky): $B?74X?t!#(B (navi2ch-article-expunge-buffers): $B0z$-?t$,@5$N$H$-$O(B sitcky $B$J%P%C(B $B%U%!$r(B kill $B$7$J$$$h$&$K!#(B (navi2ch-article-kill-emacs-hook): navi2ch-article-expunge-buffers $B$N0z$-?t$rJQ99!#(Bsticky $B$J%P%C%U%!$b(B kill $B$9$k$h$&$K!#(B (navi2ch-article-current-buffer): $B0z$-?t(B sticky $B$rDI2C$7!"(Bsticky $B$J%P%C%U%!$r07$($k$h$&$K!#(B (navi2ch-article-forward-buffer): $BF1>e!#(B (navi2ch-article-backward-buffer): $BF1>e!#(B (navi2ch-article-forward-sticky-buffer): $B?74X?t!#(B (navi2ch-article-backward-sticky-buffer): $B?74X?t!#(B (navi2ch-article-mode-map): C-c C-SPC $B$K(B navi2ch-article-toggle-sticky $B$r%P%$%s%I!#(B * navi2ch-vars.el (navi2ch-global-map): C-c C-n $B$K(B navi2ch-article-forward-sticky-buffer $B$r!"(B C-c C-p $B$K(B navi2ch-article-backward-sticky-buffer $B$r%P%$%s%I!#(B 2003-06-07 mami * navi2ch-net.el (navi2ch-net-update-file-diff): navi2ch-net-update-file $B$HF1MM$K(B func $B$r;XDj$G$-$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-get-kako-url): article ID $B$,(B 9$B7e$G$b(B10$B7e$G$b$J$$$H$-$K%(%i!<$H$J$i$:(B nil $B$rJV$9$h$&$K!#(B $BJL$J$H$3$G%(%i!<$K$J$k$1$I!#(B 2003-06-05 extra * navi2ch-util.el (navi2ch-quote-maybe): Emacs 21 $B$G$b(B keywordp() $B$r(B $B;H$&$h$&$K!#(B * navi2ch-vars.el (navi2ch-board-other-field-form): $B?7JQ?t!#(B * navi2ch-board.el (navi2ch-board-insert-subjects): $B>e5-JQ?t$r(B $B;H$&$h$&$K!#(B (navi2ch-board-sync): $B?7%9%l$O(B navi2ch-board-last-seen-alist $B$K(B $BDI2C$7$J$$$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-fetch-article): $B>e5-JQ99$KDI?o!#(B * navi2ch-article.el (navi2ch-article-fetch-link): navi2ch-bm-fetch-article() $B$HF1MM$N%U%#%k%?!<$N%A%'%C%/$,(B $B$G$-$k$h$&$K!#(B 2003-06-04 SAITO Takuya * navi2ch-article.el (navi2ch-article-get-current-word-in-body): navi2ch-article-get-message-string $B$r;H$&!#(B * navi2ch-list.el (navi2ch-list-sync): bbstable $B$rFI$_9~$s$@;~4V$r(B $BJ]B8!#(B (navi2ch-list-save-info): bbstable $B$N(B URL, $BFI$_9~$s$@;~4V$rJ]B8!#(B (navi2ch-list-load-info): navi2ch-list-category-list, navi2ch-list-board-name-list $B$r@_Dj!#(B * navi2ch-history.el (navi2ch-history-save-info): $BMzNr$,6u$N$H$-$b(B $BJ]B8!#(B * navi2ch-util.el (navi2ch-end-of-buffer): end-of-buffer $B$r;H$&!#(B (navi2ch-modeline-online): risky-local-variable (navi2ch-modeline-offline): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-select-board): navi2ch-board-current-board $B$r@_Dj$7$?8e$G(B navi2ch-board-select-board-hook $B$r8F$V!#(B 2003-06-04 extra * navi2ch-board.el (navi2ch-board-insert-subjects): $B%l%9$NA}J,$r(B $BI=<($9$k$h$&$K!#(B $B$^$?!"(Bnavi2ch-board-last-seen-alist $B$NCM$r@_Dj$9$k=hM}$r:o=|!#(B (navi2ch-board-sync): $B>e5-:o=|=hM}$NDI2C!#(B 2003-06-03 extra * navi2ch-popup-article.el (navi2ch-popup-article-sift-messages): navi2ch-article-save-view() $BFb$NITMW$J(B save-excursion() $B$r:o=|!#(B * navi2ch-mona.el (navi2ch-mona-arrange-message): PopUp Article $B%b!<%I$G$b(B Article $B%b!<%I$K=`$8$F(B face $B$r@_Dj$9$k$h$&$K!#(B * navi2ch-board.el (navi2ch-board-check-article-update-suppression): $BGQ;_!#(B (navi2ch-board-last-seen-alist): $B?7JQ?t!#(B (navi2ch-board-insert-subjects): $B>e5-JQ?t$r;H$&$h$&$K!#(B (navi2ch-board-update-seen-articles): $BF1>e!#(B (navi2ch-board-sync): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-fetch-article): $BF1>e!#(B $B$^$?!"(BBoard $B%b!<%I0J30$NHD7O%b!<%I$G$b%U%#%k%?!<=hM}$r%A%'%C%/(B $B$G$-$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-check-message-suppression): $BBh(B4$B0z$-?t$rDI2C!#(B (navi2ch-article-get-current-word-in-body): face $B$K0MB8$7$J$$$h$&$K!#(B 2003-05-28 mami * navi2ch-article.el (navi2ch-article-delete-message): delete $B$9$k(B $B%l%9$,$J$$$H$-$K%(%i!<$K$J$i$J$$$h$&$K!#(B 2003-05-25 mami * navi2ch-net.el (navi2ch-net-download-file): URL $B$N:G8e$,(B .gz $B$N(B $B$H$-$O(B Accebt-Encoding: gzip $B$r$D$1$J$$$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/829-834n 2003-05-21 mami * navi2ch-net.el (navi2ch-net-send-message-error-string): $B!V%5!<%P(B $B$NIi2Y$,9b$$$N$G=q$-$3$a$^$;$s!#!W$r$&$^$/(B parse $B$G$-$F$J$+$C$?!#(B 2003-05-15 extra * navi2ch-board-misc.el (navi2ch-bm-fetch-article): article-summary $B$K(B $B4{FI>pJs$,%;!<%V$5$l$J$$>l9g$,$"$C$?$N$r=$@5!#(B 2003-05-13 extra * navi2ch-auto-modify.el: $B?7%U%!%$%k!#(B * Makefile.am (lisp_LISP): $B>e5-%U%!%$%k$rDI2C!#(B * navi2ch.el (toplevel): navi2ch-auto-modify $B$r(B require $B$9$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-auto-modify-file): $B?7JQ?t!#(B (navi2ch-auto-modify-truncate-list-alist): $B?7JQ?t!#(B (navi2ch-auto-modify-save-hook): $B?7JQ?t!#(B (navi2ch-article-sort-message-filter-rules): $B?7JQ?t!#(B (navi2ch-board-check-article-update-suppression-length): $B?7JQ?t!#(B * navi2ch-util.el (navi2ch-quote-maybe): $B?74X?t!#(B * navi2ch-article.el (navi2ch-article-add-message-filter-rule): $B?74X?t!#(B (navi2ch-article-mode-map): "!" $B$K>e5-4X?t$r%P%$%s%I!#(B (navi2ch-article-add-message-filter-by-name): $B?74X?t!#(B (navi2ch-article-add-message-filter-by-mail): $B?74X?t!#(B (navi2ch-article-add-message-filter-by-id): $B?74X?t!#(B (navi2ch-article-add-message-filter-by-message): $B?74X?t!#(B (navi2ch-article-add-message-filter-by-subject): $B?74X?t!#(B (navi2ch-article-add-message-filter-rule-subr): $B?74X?t!#(B (navi2ch-article-read-message-filter-match): $B?74X?t!#(B (navi2ch-article-read-message-filter-result): $B?74X?t!#(B (navi2ch-article-get-current-subject): $B?74X?t!#(B (navi2ch-article-message-filter-subr): $B%U%#%k%?!<>r7o$rE,MQ$7$?=gHV$K(B $BJB$Y$+$($i$l$k$h$&$K!#(B (navi2ch-article-toggle-message-filter): `navi2ch-article-sort-message-filter-rules' $B$r(B nil $B$K%P%$%s%I$7$F(B $B%l%9$rA^F~$7$J$*$9$h$&$K!#(B (navi2ch-article-check-message-suppression): $B?74X?t!#(B * navi2ch-board.el (navi2ch-board-check-article-update-suppression): $B?74X?t!#(B (navi2ch-board-insert-subjects): $B?7%9%l$N(B ID $B$r(B `navi2ch-board-current-board' $B$KJ];}$9$k$h$&$K!#(B (navi2ch-board-update-seen-articles): $BA02sFI$s$@%9%l$N(B ID $B$r(B `navi2ch-board-current-board' $B$KJ];}$9$k$h$&$K!#(B (navi2ch-board-sync): `navi2ch-board-current-board' $B$KJ];}$7$F$*$$$?(B $BA02sFI$s$@%9%l$H?7%9%l$N(B ID $B$r$$$C$?$s%/%j%"$9$k$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-fetch-article): $Bl9g!"?7Ce$J$7$H(B $B8+$J$;$k$h$&$K!#(B 2003-05-12 mami * navi2ch-search.el (navi2ch-search-article-regexp): $B8!:wBP>]%U%!(B $B%$%kL>$N@55,I=8=$rJQ99!#(B".dat" $B$,:G8e$8$c$J$$$b$N$K$b%^%C%A$7$F$$(B $B$?!#(B (navi2ch-search-cache-subr): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/697 2003-05-09 mami * navi2ch-list.el (navi2ch-list-bbstable-default-url): $B?7Dj?t!#(B (navi2ch-list-sync): navi2ch-list-bbstable-url $B$,(B nil $B$N$H$-$O>e5-(B $BDj?t$NCM$N(B bbsmenu $B$r * navi2ch-article.el (navi2ch-article-save-view): $BK\BN=hM}8e$N(B $B%+!<%=%k0LCV$NI|5"J}K!$r6/2=!#(B (navi2ch-article-insert-messages): `suppress' $B$NDV$j4V0c$$$rD{@5!#(B (navi2ch-article-sync): $B%l%9$N?t$,(B navi2ch-article-view-range $B$N(B cdr $BIt$h$j>/$J$$>l9g$N:9J,A^F~$KBP1~!#(B (navi2ch-article-get-visible-numbers): $B6u$N%P%C%U%!$G$b%(%i!<$K(B $B$J$i$J$$$h$&$K!#(B (navi2ch-article-toggle-replace-message): navi2ch-article-save-view() $B$NCf$N(B save-excursion() $B$r:o=|!#(B (navi2ch-article-toggle-message-filter): $BF1>e!#(B 2003-04-23 extra * navi2ch-article.el (navi2ch-article-get-visible-numbers): navi2ch-article-previous-message() $B$r;H$o$J$$$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/536-537n (navi2ch-article-sync): navi2ch-article-view-range $B$r9MN8$7$F(B $B:9J,$rA^F~$9$k$h$&$K!#(B (navi2ch-article-reinsert-partial-messages): $BI=<($9$Y$-%j%9%H$,(B nil $B$G$b!"(B"Out of view range" $B$HI=<($;$:=hM}$rB3$1$k$h$&$K!#(B 2003-04-21 extra * navi2ch-article.el (navi2ch-article-sync): $BA^F~:Q$_$N%l%9$rJQ99$9$k(B $BI,MW$N$J$$>l9g$O!"DI2C$N%l%9$N$_A^F~$9$k$h$&$K!#(B (navi2ch-article-select-current-link): ID $B$H%H%j%C%W$K$b%9%lFb%j%s%/$r(B $BD%$l$k$h$&$K!#(B (navi2ch-article-get-link-text-subr): $BF1>e!#(B (navi2ch-article-get-current-word-in-body): $B?74X?t!#(B (navi2ch-article-search-body): $B>e5-4X?t$r;H$&$h$&$K!#(B 2003-04-19 extra * navi2ch-article.el (navi2ch-article-set-link-property): navi2ch-article-number-prefix-regexp $B$H(B navi2ch-article-number-separator-regexp $B$G(B `\(...\)' $B$r;H$($k$h$&$K!#(B (navi2ch-article-reinsert-partial-messages): $BBh(B2$B0z$-?t$rEO$5$J$$$H(B $B%(%i!<$K$J$k$N$r=$@5!#(B (navi2ch-article-view-article): $B%U%#%k%?$r(B on $B$K$9$k$H$-$O!"(B navi2ch-article-use-message-filter-cache $B$,(B nil $B$G$b(B navi2ch-article-message-filter-cache $B$KCM$r%m!<%I$9$k$h$&$K!#(B (navi2ch-article-view-article-from-file): $BF1>e!#(B (navi2ch-article-get-visible-numbers): navi2ch-article-through-previous-function $B$,(B throw $B$9$k%7%s%\%k$,!"(B navi2ch-article-get-visible-numbers $BFb$G$N$_(B catch $B$5$l$k$h$&$K!#(B (navi2ch-article-toggle-message-filter): $B=i$a$F%U%#%k%?$r(B on $B$K(B $B$9$k>l9g$O!"(Bnavi2ch-article-use-message-filter-cache $B$,(B nil $B$G$b(B navi2ch-article-message-filter-cache $B$KCM$r%m!<%I$9$k$h$&$K!#(B 2003-04-09 Nanashi San * navi2ch-vars.el (navi2ch-article-message-filter-list): docstring $BCf$N9TF,$N(B `(' $B$r%(%9%1!<%W!#(B (navi2ch-article-message-filter-by-name-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-message-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-id-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-mail-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-subject-alist): $BF1>e!#(B (navi2ch-auto-update): $B%G%U%)%k%HCMJQ99!#(B (navi2ch-message-user-name): $BF1>e!#(B 2003-04-06 SAITO Takuya * navi2ch-board-misc.el (navi2ch-bm-save-info): navi2ch-bm-fetched-article-list $B$,6u$N$H$-$bJ]B8!#(B * navi2ch-bookmark.el (navi2ch-bookmark-save-info): $B%V%C%/%^!<%/$,(B $B6u$N$H$-$bJ]B8!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/347 2003-04-01 Nanashi San * navi2ch-board-misc.el (navi2ch-bm-remove-article-subr): $B:o=|$N7k(B $B2L(B article-summary $B$,6u$K$J$C$?>l9g$KJ]B8$7$F$J$+$C$?$N$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/328 2003-03-30 mami * navi2ch-popup-article.el (navi2ch-popup-article-select-current-link): $B3g8L$NBP1~%_%9$r=$@5!#(B 2003-03-30 mami * navi2ch-vars.el (navi2ch-article-select-current-link-number-style): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-select-current-link): $B2<5-?74X?t$KJ,N%!#(B (navi2ch-article-select-current-link-number): $B?74X?t!#(B $BI=<(J}K!$r>e5-?7JQ?t$G@_Dj$G$-$k$h$&$K!#(B $BI=<(HO0O30$@$C$?$j(B hide $B$5$l$F$$$?$j$J$I$G%j%s%/@h%l%9$,I=<($5$l$F(B $B$$$J$$$H$-$O(B popup $B$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/311-316n (navi2ch-article-select-current-link-url): $B?74X?t!#(B * navi2ch-popup-article.el (navi2ch-popup-article-select-current-link): $B>e5-?74X?t$r;H$&$h$&(B $B$K!#(B 2003-03-27 extra * navi2ch.el (navi2ch-save-info): http://pc.2ch.net/test/read.cgi/unix/********** $B$N$h$&$J%j%s%/$rF'$s$G!"(B $B%o%$%k%I%+!<%IEy$rL>A0$K4^$`%U%!%$%k$r:n$l$:%(%i!<$K$J$k>l9g$KBP1~!#(B 2003-03-26 Nanashi San * navi2ch.el (navi2ch-lock): $B$3$3$G(B navi2ch-use-lock $B$r8+$k$h$&$K!#(B (navi2ch-unlock): $BF1>e!#(B (navi2ch-kill-emacs-hook): $B>e5-JQ99$KBP1~!#(B (navi2ch): $BF1>e!#(B (navi2ch-exit): $BF1>e!#(B (navi2ch-lock): $BJT=8$N7k2L!"0UL#ITL@$J%3!<%I$K$J$C$F$$$?$N$GA]=|!#(B (navi2ch): navi2ch-update() $B$K<:GT$7$?>l9g$O%m%C%/$r2r=|$9$k$h$&$K!#(B 2003-03-23 Nanashi San * navi2ch-net.el (navi2ch-net-send-message-error-string): $B!V%5!<%P$NIi2Y$,9b$$$N$G=q$-$3$a$^$;$s!#!W$KBP1~!#(B 2003-03-22 mami * navi2ch-article.el (navi2ch-article-insert-messages): garbage-collect $BCf$N%a%C%;!<%8$rDI2C!#(B 2003-03-21 extra * navi2ch-article.el (navi2ch-article-message-filter-subr): $B%U%#%k%?>r7o$N%^%C%A3NG'J}K!$r=$@5!#E@?t$,@5$7$/2C;;$5$l$k$h$&$K!#(B 2003-03-20 mami * navi2ch-vars.el (navi2ch-message): DOC $B=$@5!#(B (navi2ch-net): $BF1>e!#(B * navi2ch-face.el (navi2ch-face): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/207 2003-03-17 mami * navi2ch-mona.el (navi2ch-mona-arrange-message): $BHD$N>r7o$h$j%9%l$N>r7o$rM%@h$9$k$h$&$K!#(B navi2ch-mona-enable-article-list $B$,(B nil $B$N$H$-(B navi2ch-mona-enable-board-list $B$,L5;k$5$l$F$$$?$N$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/190-191n (navi2ch-mona-enable-article-list): $B>e5-JQ99$K9g$o$;$F(B docstring $B$rJQ99!#(B (navi2ch-mona-disable-article-list): $BF1>e!#(B docstring $B$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/189 2003-03-15 Nanashi San * navi2ch-article.el (navi2ch-article-through-subr): N $B$d(B P $B$G%9%l(B $B$r0\F0$9$k:]$K%]%$%s%H$rF0$+$5$J$$$h$&$K!#(B 2003-03-14 SAITO Takuya * navi2ch-article.el (navi2ch-article-through-forward-line-function): $B?7JQ?t!#(B (navi2ch-article-through-ask): $B>e5-JQ?t$r;H$&$h$&$K!#(B (navi2ch-article-through-subr): $BF1>e!#(B article-mode $B$rH4$1$kA0$K(B $B%P%C%U%!$N@hF,$+KvHx$K0\F0!#(B * navi2ch-board-misc.el (navi2ch-bm-goto-updated-mark-column): board-mode $B$N:G=*9T$Ge!#(B (navi2ch-bm-goto-mark-column): $BF1>e!#(B (navi2ch-bm-get-updated-mark): $BF1>e!#(B (navi2ch-bm-forward-line): $B?74X?t!#(B (navi2ch-bm-next-line): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-bm-previous-line): $BF1>e!#(B (navi2ch-bm-mark-subr): $BF1>e!#(B 2003-03-13 extra * navi2ch-util.el (navi2ch-no-logging-message): $BDj5A0LCV$r0\F0!#(B (navi2ch-read-char): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-read-event): $BF1>e!#(B (message-log-max): $B>e5-JQ99$KH<$$!"Dj5AItJ,$r:o=|!#(B 2003-03-11 Nanashi San * navi2ch.el (toplevel): inline $B4X?t$r$"$i$+$8$a%P%$%H%3%s%Q%$%k$7(B $B$F$*$/$h$&$K!#(B * Makefile.am (recompile): $B>e5-JQ99$KH<$$!"%P%$%H%3%s%Q%$%k$r0lEY(B $B$@$1$K!#(B * bcomp.el.in (dir): $BF1>e!#(B 2003-03-11 extra * navi2ch-util.el (navi2ch-no-logging-message): $B?74X?t!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/136 * navi2ch-article.el (navi2ch-article-insert-messages): $B>e5-4X?t$r;H$&$h$&$K!#(B $B$^$?!"(Bnavi2ch-article-auto-activate-message-filter $B$NI>2AItJ,$r:o=|!#(B (navi2ch-article-view-article): $B>e5-:o=|ItJ,$rDI2C!#(B (navi2ch-article-view-article-from-file): $BF1>e!#(B (navi2ch-article-message-filter-by-subject): $B%9%l%?%$$N * navi2ch-message.el (navi2ch-message-cite-original-from-number): $B%X%C%@$G0zMQ$7$h$&$H$7$?$i%(%i!<$K$9$k!#(B set-mark $B$r(B push-mark $B$KJQ99!#(B 2003-03-06 SAITO Takuya * navi2ch-board.el (navi2ch-board-get-updated-subject-list): $B?74X?t!#(B (navi2ch-board-save-old-subject-file): old $B%U%!%$%k$+$i(B $BI|85$G$-$k$h$&$K!#(B * navi2ch-message.el (navi2ch-message-sendlog-article): $B:o=|!#(B (navi2ch-message-sendlog-subject-with-volume): $B?74X?t!#(B (navi2ch-message-add-sendlog): subject.txt $B$r0l;~E*$K(B update $B$9$k!#(B $BAw?.95$(%9%l$r!"<+F0E*$K(B Part 2 $B$J$I$K0\9T$G$-$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-message-sendlog-response-limit): $B?7JQ?t!#(B (navi2ch-message-sendlog-volume-format): $BF1>e!#(B (navi2ch-decode-character-references): navi2ch-article-decode-character-references $B$+$i2~L>!#(B * navi2ch-util.el (navi2ch-entity-reference-to-str): $B",$KDI?o!#(B (navi2ch-numeric-reference-to-str): $BF1>e!#(B 2003-03-05 mami * navi2ch-vars.el (navi2ch-board-expire-bookmark-p): docstring $B=$(B $B@5!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/84 2003-03-01 SAITO Takuya XEmacs$B$G$b%b!<%I%i%$%s$K%*%s(B/$B%*%U%i%$%s>uBV$rI=$92hA|$rI=<(!#(B * navi2ch-xmas.el: $B?75,%U%!%$%k!#(B * Makefile.am (lisp_LISP): navi2ch-xmas.el $BDI2C!#(B * navi2ch.el (toplevel): navi2ch-xmas $B$r(B require$B!#(B 2003-03-01 extra * navi2ch-article.el (navi2ch-article-message-filter-by-subject): = $B$r(B eq $B$KJQ99!#(B 2003-03-01 extra * navi2ch-article.el (navi2ch-article-message-filter-by-subject): navi2ch-article-current-article $B$K%9%l%?%$$,F~$C$F$$$J$$>l9g$r(B $B9M$($F$J$+$C$?%P%0$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/17 http://pc.2ch.net/test/read.cgi/unix/1046402063/20 2003-02-28 SAITO Takuya * navi2ch-article.el (navi2ch-article-mode): buffer-disable-undo. * navi2ch-articles.el (navi2ch-articles-mode): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-mode): $BF1>e!#(B * navi2ch-bookmark.el (navi2ch-bookmark-mode): $BF1>e!#(B * navi2ch-directory.el (navi2ch-directory-mode): $BF1>e!#(B * navi2ch-head.el (navi2ch-head-mode): $BF1>e!#(B * navi2ch-history.el (navi2ch-history-mode): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-mode): $BF1>e!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode): $BF1>e!#(B * navi2ch-search.el (navi2ch-search-mode): $BF1>e!#(B 2003-02-28 extra * navi2ch-vars.el (navi2ch-list-filter-list): $B?7JQ?t!#(B (navi2ch-board-filter-list): $B?7JQ?t!#(B http://pc.2ch.net/test/read.cgi/unix/1039935998/874-875n * navi2ch-util.el (navi2ch-apply-filters): $B?74X?t!#(B * navi2ch-list.el (navi2ch-list-get-category-list): $B>e5-4X?t$r;H$&$h$&$K!#(B * navi2ch-board.el (navi2ch-board-get-subject-list): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-get-message-list): $BF1>e!#(B (navi2ch-article-apply-filters): $BGQ;_!#(B (navi2ch-article-get-message-filter-cache-file-name): optional $B$@$C$?0z$-?t$rI,?\$K!#(B (navi2ch-article-save-message-filter-cache): $B>e5-JQ99$KDI?o!#(B $B$^$?!"(Boptional $B$J0z$-?t$rDI2C!#(B (navi2ch-article-save-info): $B>e5-JQ99$KDI?o!#(B (navi2ch-article-load-message-filter-cache): navi2ch-article-save-message-filter-cache $B$HF1MM!#(B $B$^$?!"(Bnavi2ch-article-message-filter-cache $B$rD>@\JQ99$7$J$$$h$&$K!#(B (navi2ch-article-insert-messages): $B>e5-JQ99$KDI?o!#(B $B$^$?!"?JD=I=<($r=$@5!&JQ99!#(B 2003-02-27 SAITO Takuya * navi2ch-list.el (navi2ch-list-insert-board-names): $B%F%-%9%HB0@-(B 'category $B$r(B 'genre $B$K2~L>!#(B (navi2ch-list-toggle-open): $BF1>e!#(B (navi2ch-list-select-current-board): $BF1>e!#(B (navi2ch-list-get-current-category-list): $BF1>e!#(B 2003-02-26 Nanashi San * navi2ch-vars.el (navi2ch-list-get-category-list-hook): $B?7JQ?t!#(B (navi2ch-article-get-message-list-hook): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-get-message-list): $B>e5-(B hook $B$re!#(B 2003-02-26 SAITO Takuya * navi2ch-article.el (navi2ch-article-search): $BC1$J$k%i%C%Q!<$K!#(B (navi2ch-article-search-name): $BC1FH$G;H$$0W$/!#(B (navi2ch-article-search-mail): $BF1>e!#(B (navi2ch-article-search-date): $BF1>e!#(B (navi2ch-article-search-id): $BF1>e!#(B (navi2ch-article-search-body): $BF1>e!#(B (navi2ch-article-search-subr): $B8!:w7k2L$NI=<($r9T$&!#(B 2003-02-26 mami * navi2ch-vars.el (navi2ch-net-http-proxy-userid): user option $B$K!#(B (navi2ch-net-http-proxy-password): $BF1>e!#(B (navi2ch-net-http-proxy-for-send-message): $B?7JQ?t!#(B (navi2ch-net-http-proxy-userid-for-send-message): $BF1>e!#(B (navi2ch-net-http-proxy-password-for-send-message): $BF1>e!#(B * navi2ch-multibbs.el (navi2ch-multibbs-send-message): $B>e5-?7JQ?t(B $B$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1039935998/925 2003-02-26 mami * navi2ch-util.el (navi2ch-replace-html-tag-regexp-alist): "<$B?t;z(B>" $B$OCV49$7$J$$$h$&$K!#(B $B:o=|7OHDBP:v!#(B http://pc.2ch.net/test/read.cgi/unix/1039935998/936 * navi2ch-article.el (navi2ch-article-sync): sync $BA0$K$b(B navi2ch-article-set-mode-line $B$9$k$h$&$K!#(B (navi2ch-article-set-mode-line): $B%l%9?t$,(B 0 $B$N$H$-$O(B "-" $B$HI=<($9(B $B$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-article-number-prefix-regexp): $B!V"d!W$r(B $BDI2C!#(B 2003-02-26 extra * navi2ch-vars.el (navi2ch-article-message-filter-list): navi2ch-article-message-filter-by-mail$B!"(B navi2ch-article-message-filter-by-subject $B$rDI2C!#(B (navi2ch-article-message-filter-by-name-alist): $B%U%#%k%?5!G=$N3HD%!#(B (navi2ch-article-message-filter-by-message-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-id-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-mail-alist): $B?7JQ?t!#(B (navi2ch-article-message-filter-by-subject-alist): $B?7JQ?t!#(B (navi2ch-article-auto-activate-message-filter): $B?7JQ?t!#(B (navi2ch-article-use-message-filter-cache): $B?7JQ?t!#(B (navi2ch-article-message-replace-below): $B?7JQ?t!#(B (navi2ch-article-message-hide-below): $B?7JQ?t!#(B (navi2ch-article-message-add-important-above): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-mode-map): "F" $B$K(B navi2ch-article-toggle-message-filter$B!"(B "x" $B$K(B 'undefined $B$r%P%$%s%I!#(B (navi2ch-article-save-info-keys): 'unfilter $B$rDI2C!#(B (navi2ch-article-message-filter-mode): $B?7JQ?t!#(B (navi2ch-article-message-filter-mode-map): $B?7JQ?t!#(B "x" $B$K(B navi2ch-article-toggle-replace-message $B$r%P%$%s%I!#(B (navi2ch-article-message-filter-cache): $B?7JQ?t!#(B (navi2ch-article-save-message-filter-cache-keys): $B?7JQ?t!#(B (navi2ch-article-insert-messages): $B%U%#%k%?5!G=$N3HD%!#(B (navi2ch-article-apply-message-filters): $BF1>e!#(B (navi2ch-article-message-filter-subr): $BF1>e!#(B (navi2ch-article-message-filter-by-mail): $B?7JQ?t!#(B (navi2ch-article-message-filter-by-subject): $B?7JQ?t!#(B (navi2ch-article-save-info): $B%U%#%k%?$N%-%c%C%7%e$bJ]B8$9$k$h$&$K!#(B (navi2ch-article-delete-message): optional $B$J0z$-?t$rDI2C!#(B hide/important $B$r2r=|$7$?8e!":F%U%#%k%?=hM}$9$k$+7h$a$i$l$k$h$&$K!#(B (navi2ch-article-cancel-hide-message): $BF1>e!#(B (navi2ch-article-delete-important-message): $BF1>e!#(B (navi2ch-article-get-message-filter-cache-file-name): $B?74X?t!#(B (navi2ch-article-save-message-filter-cache): $B?74X?t!#(B (navi2ch-article-load-message-filter-cache): $B?74X?t!#(B (navi2ch-article-toggle-replace-message): $B?74X?t!#(B (navi2ch-article-toggle-message-filter): $B?74X?t!#(B * navi2ch-util.el (navi2ch-set-difference): $B?74X?t!#(B (navi2ch-expand-newtext): $B?74X?t!#(B * navi2ch-board-misc.el (navi2ch-bm-remove-article-subr): $B%U%#%k%?$N%-%c%C%7%e%U%!%$%k$b:o=|$9$k$h$&$K!#(B 2003-02-24 SAITO Takuya * navi2ch-vars.el (navi2ch-article-parse-field-list): $BGQ;_!#(B * navi2ch-splash.el (navi2ch-splash-image-type-alist): xpm $B$NM%@hEY(B $B$r2<$2$F$_$k!#(B 2003-02-22 Nanashi San * navi2ch-net.el (navi2ch-net-get-content): $B2u$l$?(B proxy $B$G$bF0$/(B $B$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1039935998/901 2003-02-22 SAITO Takuya * navi2ch-article.el (navi2ch-article-mode-map): "\eu" $B$N%P%$%s%I$r$O$:$9!#(B navi2ch-article-base64-decode-message $B$N2~L>$KDI?o!#(B (navi2ch-article-insert-message): navi2ch-article-auto-decode-encoded-section $B$N2~L>$KDI?o!#(B (navi2ch-article-uudecode-message): navi2ch-article-decode-message $B$KE}9g!#(B (navi2ch-article-base64-decode-message): $BF1>e!#(B (navi2ch-article-decode-message): uudecode $B$+(B base64 $B$+$rH=Dj!#(B 1$B%l%9$KJ#?t$N%(%s%3!<%I!"J#?t%l%9$KJ,3d$5$l$?%(%s%3!<%I$KBP1~!#(B (navi2ch-article-detect-encoded-regions): $B?74X?t(B (navi2ch-article-auto-decode-encoded-section): navi2ch-article-auto-decode-base64-section $B$+$i2~L>!#(Buuencode $BBP1~!#(B (navi2ch-article-auto-decode-text-on): navi2ch-article-base64-text-on $B$+$i2~L>!#(B (navi2ch-article-auto-decode-text-off): navi2ch-article-base64-text-off $B$+$i2~L>!#(B (navi2ch-article-auto-decode-toggle-text): navi2ch-article-base64-toggle-text $B$+$i2~L>!#(B * navi2ch-face.el (navi2ch-article-auto-decode-face): navi2ch-article-base64-face $B$+$i2~L>!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): "\eu" $B$N%P%$%s%I$r$O$:$9!#(B navi2ch-article-base64-decode-message $B$N2~L>$KDI?o!#(B "\ei" $B$K(B navi2ch-article-auto-decode-toggle-text $B$r%P%$%s%I!#(B * navi2ch-util.el (navi2ch-uuencode-begin-delimiter-regexp): $B?7JQ?t!#(B (navi2ch-uuencode-end-delimiter-regexp): $BF1>e!#(B (navi2ch-uuencode-line-regexp): $BF1>e!#(B (navi2ch-uudecode-region): $B0lIt5!G=$r(B navi2ch-uudecode-write-region $B$KJ,3d!#%G%3!<%I$N$_$r$9$k$h$&$K!#(B (navi2ch-uudecode-write-region): $B?74X?t!#(B (navi2ch-base64-write-region): $B%G%3!<%I$9$kA0$K(B read-file-name $B$9$k!#(B setuid/setgid $B%S%C%H$rMn$H$9!#(B * navi2ch-vars.el (navi2ch-article-auto-decode-p): navi2ch-article-auto-decode-base64-p $B$+$i2~L>!#(B (navi2ch-article-auto-decode-insert-text): navi2ch-article-auto-insert-base64-text $B$+$i2~L>!#(B 2003-02-19 mami * navi2ch-message.el (navi2ch-message-insert-aa-list): $B%-!<$,B?=E(B $B$K@_Dj$5$l$F$$$F$bM-8z$J0l$D$N$_I=<($9$k$h$&$K!#(B $B%-!<$G(B sort $B$9$k$h$&$K!#(B 2003-02-16 Nanashi San * navi2ch-vars.el (navi2ch-board-get-subject-list-hook): $B?7JQ?t!#(B * navi2ch-board.el (navi2ch-board-get-subject-list): $B>e5-(B hook $B$r(B $B * navi2ch-list.el (navi2ch-list-insert-board-names-subr): mouse-face $B$,(B insert $B$9$k$@$1$K(B mouse-face $B$r$D$1$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-goto-number-or-board): $B%l%9HV9f$N8uJd$rA0Ms$N!V"!!W0J9_$rL5;k$9$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-article-url-regexp): $B!V(B;$B!W$rDI2C!#(B (navi2ch-article-number-separator-regexp): $B!V!"!W!V(B=$B!W!V!a!W$rDI2C!#(B 2003-02-15 Nanashi San * navi2ch-machibbs.el (navi2ch-machibbs-func-alist): $BITMW$+$DB8:_(B $B$7$J$$4X?t$r;HMQ$9$k$3$H$K$J$C$F$$$?!#(B http://pc.2ch.net/test/read.cgi/unix/1039935998/814 2003-02-14 mami * navi2ch-board-misc.el (navi2ch-bm-mark-states): $B?74X?t!#(B (navi2ch-bm-mark-marks): $B>e5-$r;H$&$h$&$K!#(B (navi2ch-bm-fetch-maybe-new-articles): $B?74X?t!#(B (navi2ch-bm-mode-map): $B>e5-$r%P%$%s%I!#=gHV$r$A$g$C$HJQ99!#(B 2003-02-12 Nanashi San * navi2ch-util.el (navi2ch-union): $B?74X?t!#(B * navi2ch-popup-article.el (navi2ch-popup-article-sift-messages): $B>e5-4X?t$r;H$&$h$&$K!#(Brun time $B$G(B cl $B$K0MB8$7$J$$$?$a!#(B 2003-02-12 extra * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): "d" $B$K(B navi2ch-popup-article-exclude-message$B!"(B "D" $B$K(B navi2ch-popup-article-hide-messages$B!"(B "A" $B$K(B navi2ch-popup-article-add-important-messages $B$r%P%$%s%I!#(B (navi2ch-popup-article-exclude-stack): $B?7JQ?t!#(B (navi2ch-popup-article-mode): $B>e5-JQ?t$r=i4|2=$9$k$h$&$K!#(B (navi2ch-popup-article-exclude-message): $B?74X?t!#(B (navi2ch-popup-article-undo-exclude-message): $B?74X?t!#(B (navi2ch-popup-article-sift-messages): $B?74X?t!#(B (navi2ch-popup-article-hide-messages): $B?74X?t!#(B (navi2ch-popup-article-add-important-messages): $B?74X?t!#(B * navi2ch-article.el (navi2ch-article-save-view): $B?7%^%/%m!#(B (navi2ch-article-reinsert-partial-messages): $B?74X?t!#(B (navi2ch-article-get-visible-numbers): $B?74X?t!#(B 2003-02-08 Nanashi San * navi2ch-board.el (navi2ch-board-default-bbscgi-path): $B?7JQ?t!#(B (navi2ch-board-bbscgi-path-alist): $B?7JQ?t!#(B (navi2ch-board-get-bbscgi-path): $B?74X?t!#(B (navi2ch-board-get-bbscgi-url): $B>e5-4X?t$r;H$&$h$&$K!#(B bbs.cgi $B$N>l=j$,JQ$o$j$=$&$J$N$G!#(B 2003-02-06 Nanashi San * navi2ch-mona.el (navi2ch-mona-enable-article-list): $B?7JQ?t!#(B (navi2ch-mona-disable-article-list): $B?7JQ?t!#(B (navi2ch-mona-arrange-message): $B>e5-JQ?t$r;HMQ$9$k$h$&$K!#(B $B>r7o9M$($F$?$i$o$1$o$+$s$J$/$J$C$?$N$G$H$j$"$($:(B commit $B$9$k$1$I!"(B $B$?$V$s=gHV$rJQ$($kI,MW$"$j!#(B * navi2ch-article.el (navi2ch-article-save-dat-file): $B?74X?t!#(B .dat $B%U%!%$%k$r;XDj$N%U%!%$%k$K%3%T! * navi2ch-message.el (navi2ch-message-cite-original-from-number): $BL$%Q!<%:$N(B message $B$r0zMQ$G$-$k$h$&$K!#(B 2003-02-04 Nanashi San * navi2ch-list.el (navi2ch-list-change): $B?74X?t!#(B $B0\E>$N:]$KHD%V%C%/%^!<%/$r99?7!#(B (navi2ch-list-apply-changed-status): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-list-normalize-bookmark): $B?74X?t!#(B $BHD%V%C%/%^!<%/$rA]=|$9$k!#(B($B%4%_$,$$$C$Q$$N/$C$F$?$N$G!#!#!#(B) (navi2ch-list-save-info): $B>e5-4X?t$r;H$&$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-mark-region): $B%9%l$,0l$D$bL5$$(B $B;~$K(B m a $B$7$?:]!"%(%i!<$,5/$-$J$$$h$&$K!#(B 2003-01-26 mami http://pc.2ch.net/test/read.cgi/unix/1039935998/496 * navi2ch-vars.el (navi2ch-file-name-reserved-char-regexp): $B?7JQ?t!#(B * navi2ch-util.el (navi2ch-expand-file-name): $B>e5-JQ?t$G;XDj$7$?$b(B $B$N$r%(%9%1!<%W$9$k$h$&$K!#(B * navi2ch-net.el (navi2ch-net-split-url): URL $BCf$N%]!<%HHV9f$rG'<1(B $B$9$k$h$&$K!#(B 2003-01-25 Nanashi San * navi2ch-net.el (navi2ch-net-download-file): Range $B%X%C%@$,$"$k;~(B $B$O(B gzip $B%(%s%3!<%G%#%s%0$r * navi2ch-vars.el (navi2ch-article-auto-range): docstring $B=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1039935998/475 2003-01-16 mami * navi2ch-article.el (navi2ch-article-select-current-link): >>1 $B$J$I$N%9%lFb%j%s%/$b(B C-u $B$D$-$N$H$-$O%V%i%&%6$G3+$/$h$&$K!#(B 2003-01-10 mami * navi2ch-util.el (navi2ch-replace-html-tag-alist):
$B$rDI2C!#(B tomato $BBP:v!#(B * navi2ch-article.el (navi2ch-article-goto-number-or-board): $BHt$S(B $B@h$,%l%9HV9f$+$I$&$+$NH=Dj$r87$7$/!#(B 21oversea $BHD$KHt$Y$J$+$C$?$N$G!#(B 2002-12-28 SAITO Takuya * navi2ch-util.el (navi2ch-which): $B3HD%;R(B ".exe" $B$r$D$1$?$b$N$bC5$9!#(B * navi2ch-message.el (navi2ch-message-header-end): $B?74X?t!#(B (navi2ch-message-cleanup-message): $B",$r;HMQ!#(B (navi2ch-message-send-message): $BF1>e!#(B 2002-12-25 mami * navi2ch-multibbs.el (navi2ch-2ch-url-to-article): $B5-;v(B ID $B$,(B10$B7e(B $B$N$H$-AR8K9T$-$K$J$C$F$b(B '(kako . t) $B$,$D$$$F$$$J$+$C$?!#(B $B$D$1$k$h$&$K!#(B * navi2ch-jbbs-shitaraba.el (navi2ch-js-url-to-article): $BAR8K9T$-(B $B$K$J$C$?5-;v$KBP1~!#(B 2002-12-23 SAITO Takuya * navi2ch-vars.el (navi2ch-bzip2-program): $B?7JQ?t!#(B (navi2ch-bzip2-args): $BF1>e!#(B (navi2ch-article-auto-insert-base64-text): $BF1>e!#(B * navi2ch-util.el (navi2ch-base64-write-region): `navi2ch-base64-line-regexp' $B$K%^%C%A$7$J$$9T$rL5;k$9$k!#(B (navi2ch-which): $B?74X?t!#(B * navi2ch-article.el (navi2ch-article-mode-map): "\ei" $B$K(B navi2ch-article-base64-toggle-text $B$r%P%$%s%I!#(B (navi2ch-article-auto-decode-base64-section): navi2ch-article-auto-insert-base64-text $B$,(B nil $B$G$"$l$P(B $B%G%3!<%I$7$?%F%-%9%H$rK\J8$KA^F~$7$J$$!#(B (navi2ch-article-base64-text-on): $B?74X?t!#(B (navi2ch-article-base64-text-off): $BF1>e!#(B (navi2ch-article-base64-toggle-text): $BF1>e!#(B (navi2ch-article-save-content): 'file-name $B%W%m%Q%F%#$,(B nil $B$N$H$-$K(B $B%(%i!<$K$J$C$F$$$?$N$r=$@5!#(B $B%G%U%)%k%H$N%U%!%$%kL>$,L5$/!"J]B8@h$K%G%#%l%/%H%j$r;XDj$7$?$H$-$K(B $B%(%i!<$K$J$k$h$&$K!#(B 2002-12-20 Nanashi San * navi2ch-article.el (navi2ch-article-view-article): $B%P%C%U%!$,L5(B $B$$;~$N%+!<%=%k$N0LCV$,JQ$@$C$?$N$G85$KLa$7$?!#(B $B"-$3$3!"C1=c$K$=$&$d$k$H$&$^$/$J$$$s$G$9$h!#!#!#(B 2002-12-19 SAITO Takuya * navi2ch-article.el (navi2ch-article-view-article): navi2ch-article-sync $B$N8e$K(B switch-to-buffer $B$9$k!#(B * navi2ch-board-misc.el (navi2ch-bm-state-alist): navi2ch-bm-new-*-face $BDI2C!#(B (navi2ch-bm-updated-mark-alist): '(new . "%") $BDI2C!#(B (navi2ch-bm-set-property): 'new $BDI2C!#(B (navi2ch-bm-sort-by-state): $BCN$i$J$$>uBV$G$b%(%i!<$K$J$i$J$$$h$&$K!#(B * navi2ch-board.el (navi2ch-board-updated-article-p): $B?7%9%l$N$H$-$O(B 'new $B$rJV$9!#(B (navi2ch-board-insert-subjects): navi2ch-board-updated-article-p $B$N(B $BJQ99$KDI?o!#(B * navi2ch-face.el (navi2ch-bm-new-unread-face): $B?7%U%'%$%9!#(B (navi2ch-bm-new-view-face): $BF1>e!#(B (navi2ch-bm-new-cache-face): $BF1>e!#(B (navi2ch-bm-new-update-face): $BF1>e!#(B (navi2ch-bm-new-mark-face): $BF1>e!#(B * navi2ch-vars.el (navi2ch-bm-sort-by-state-order): $B?7$7$$%9%l$N>uBV$rDI2C!#(B 2002-12-19 mami * navi2ch-board-misc.el (navi2ch-bm-sort): "Sorting...done" $B$N%a%C(B $B%;!<%8$r=P$9$h$&$K!#(B 2002-12-18 mami * navi2ch-article.el (navi2ch-article-exit): 1$B%Z%$%s$N$H$-!"%j%s%/(B $B$r$?$I$C$?8e$K(B exit $B$7$?$H$-(B (buffer-list) $BFb$N(B article buffer $B$N(B $B=g=x$,JQ$o$C$F$7$^$C$F$$$?!#(B $BJQ$o$i$J$$$h$&$K!#(B 2002-12-18 SAITO Takuya * navi2ch-head.el (navi2ch-head-file-name): $B?7JQ?t!#(B (navi2ch-head-buffer-name): $BF1>e!#(B (navi2ch-head-current-board): $BF1>e!#(B (navi2ch-head-current-article): $BF1>e!#(B (navi2ch-head-save-time): $B?74X?t!#(B (navi2ch-head-load-time): $BF1>e!#(B (navi2ch-head-kill-buffer): $BF1>e!#(B (navi2ch-head-exit): exit $B$7$?8e$K85$$$?%P%C%U%!$KLa$k$h$&$K!#(B (navi2ch-head-get-uri): $B:o=|!#(B (navi2ch-head-select-current-w3m-link): $B?74X?t!#(B (navi2ch-head-mode-map): "M" $B$K(B `navi2ch-head-select-current-w3m-link' $B$r%P%$%s%I!#(B (navi2ch-head-set-mode-line): $B?74X?t!#(B (toplevel): `navi2ch-list-mode-map' $B$N(B "H" $B$K(B 'navi2ch-head-get-head-txt $B$r%P%$%s%I!#(B (navi2ch-head-get-head-txt): emacs-w3m $B$,$"$l$P;H$&$h$&$K!#(B * navi2ch.el (navi2ch-save-info): `print-length' $B$H(B `print-level' $B$r(B nil $B$K!#(B * navi2ch-list.el (navi2ch-list-mode): kill-all-local-variables $B$9$k(B * navi2ch-popup-article.el (navi2ch-popup-article-mode): kill-all-local-variables $B$9$k(B 2002-12-17 Nanashi San * navi2ch-net.el (navi2ch-net-get-header): Date: $B%X%C%@$r;H$C$F(B 2ch $B;~4V$r3P$($F$*$/$h$&$K!#(B * navi2ch-multibbs.el (navi2ch-multibbs-get-message-time-field): $BC1=c$K2a5n$N;~4V$rAw$k$N$G$O$^$:$$>l9g$,$"$k$N$G!">e5-$N;~4V$r;H$&(B $B$h$&$K!#(B 2002-12-17 mami * navi2ch-message.el (navi2ch-message-exit): $B85$N%l%9HV9f$KLa$i$J(B $B$$$3$H$,$"$C$?$N$r=$@5!#(B 2002-12-16 Nanashi San * navi2ch.el (navi2ch-lock): $BITI>$J$N$G$b$&0lEY;n$9$+$I$&$+$rJ9$/(B $B$N$r$d$a$F$_$k!#(B * navi2ch-util.el (navi2ch-bigint-int-to-list): $B;HMQ$7$J$/$J$C$?$N(B $B$G:o=|!#(B (navi2ch-bigint-multiply): $BF1>e!#(B (navi2ch-bigint-add): $BF1>e!#(B * navi2ch-net.el (navi2ch-net-send-message): $B;HMQ$7$F$J$$$N$G:o=|!#(B * navi2ch-multibbs.el (navi2ch-multibbs-send-message): $B8=:_$N;~9o(B $B$G$O$J$/!"(B5 $BJ,A0$N;~9o$rAw$k$h$&$K!#(B * configure.in: 1.6.1-DEV $B$K%"%C%W%G!<%H!#(B 2002-12-15 Nanashi San * navi2ch: 1.6.1 $B%j%j!<%9!#(B * configure.in: 1.6.1 $B$K%"%C%W%G!<%H!#(B 2002-12-15 mami * NEWS: 1.6.0 $B$+$i$NJQ99E@$rDI2C!#(B 2002-12-15 Nanashi San $B$=$N$&$A(B Set-Cookie: $B$r$A$c$s$H$K(B PON $B$K$bBP1~!#(B * navi2ch-net.el (navi2ch-net-send-message-get-spid): $BF1>e!#(B * navi2ch-oyster.el (navi2ch-oyster-send-message): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/996 * NEWS: 1.6.0 $B$+$i$NJQ99E@$rDI2C!#(B 2002-11-18 mami * navi2ch-article.el (navi2ch-article-save-info-keys): $B%9%Z%k%_%9(B $B$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/797 2002-11-17 mami * navi2ch-article.el (navi2ch-article-apply-filters): navi2ch-article-filter-by-name, navi2ch-article-filter-by-message $B$r;H$o$J$$$h$&$K!#(B (navi2ch-article-filter-by-name): $B:o=|!#(B (navi2ch-article-filter-by-message): $B:o=|!#(B (navi2ch-article-get-separator-string): $B:o=|!#(B * navi2ch-vars.el (navi2ch-article-filter-by-name-alist): $B:o=|!#(B (navi2ch-article-filter-by-message-alist): $B:o=|!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/587 2002-11-17 mami * navi2ch-article.el (navi2ch-article-insert-messages): $B%U%#%k%?$,(B $BJV$9CM$K$h$C$F%l%9$r(B hide $B$d(B important $B$KF~$l$i$l$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-article-message-filter-list): docstring $B$rJQ99!#(B (navi2ch-article-message-filter-by-name-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-message-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-id-alist): $BF1>e!#(B 2002-11-17 mami * navi2ch-vars.el (navi2ch-article-save-info-wrapper-func): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-save-info-keys): $B?7JQ?t!#(B (navi2ch-article-save-info): $B>e5-(B2$BJQ?t$r;H$&$h$&$K!#(B 2002-11-17 mami * navi2ch-message.el (navi2ch-message-insert-header): navi2ch-message-remember-user-name $B$,(B nil $B$N$H$-$O0JA03P$($?L>A0Ms!&(B $B%a!<%kMs$r:F;HMQ$7$J$$$h$&$K!#(B (navi2ch-message-send-message): navi2ch-message-remember-user-name $B$,(B nil $B$N$H$-$OL>A0Ms!&%a!<%kMs$r3P$($J$$$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/669 * navi2ch-vars.el (navi2ch-message-remember-user-name): docstring $B$K!V%a!<%kMs!W$rDI2C!#(B 2002-11-16 SAITO Takuya * navi2ch-util.el (navi2ch-replace-html-tag-with-buffer): replace-match $B$N0z?t(B LITERAL $B$r(B non-nil$B$K!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/768 (navi2ch-replace-html-tag): $BF1>e!#(B 2002-11-15 SAITO Takuya * navi2ch-article.el (navi2ch-article-set-link-property): `navi2ch-article-url-regexp' $B$r%+%9%?%^%$%:$7$d$9$$$h$&$K!#(B 2002-11-13 SAITO Takuya * navi2ch-util.el (navi2ch-read-event): $B?74X?t!#(B * navi2ch-article.el (navi2ch-article-mode-map): [delete] $B$K(B `navi2ch-article-scroll-down' $B$r%P%$%s%I!#(B (navi2ch-article-through-ask-last-command-p): `navi2ch-read-event' $B$r;HMQ!#(B 2002-11-11 SAITO Takuya * navi2ch-article.el (navi2ch-article-set-link-property): >>1,2 $B7A<0$KBP1~!#(Btext-properties $B$r$D$1$kItJ,$rJL4X?t$X!#(B (navi2ch-article-set-link-property-subr): $B?74X?t!#(B * navi2ch-vars.el (navi2ch-article-number-prefix-regexp): $B?7JQ?t!#(B (navi2ch-article-number-separator-regexp): $BF1>e!#(B (navi2ch-article-number-number-regexp): $BF1>e!#(B (navi2ch-article-number-regexp): $B:o=|!#(B * navi2ch-http-date.el (toplevel): euc-jp $B$+$i(B iso-2022-jp $B$K!#(B * navi2ch-popup-article.el (toplevel): euc-jp $B$+$i(B iso-2022-jp $B$K!#(B (navi2ch-popup-article-show-url): $B?74X?t!#(B (navi2ch-popup-article-mode-map): "R" $B$K(B `navi2ch-article-rotate-point' $B$r!"(B "U" $B$K(B `navi2ch-popup-article-show-url' $B$r%P%$%s%I!#(B * navi2ch-mona.el (navi2ch-mona-setup): NTEmacs21 $BBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/743 2002-11-08 Nanashi San * navi2ch-net.el (navi2ch-net-download-file): HTTP status code "416 Requested Range Not Satisfiable" $B$KBP1~$7$F$_$?!#(B $B$H$j$"$($:F0:nL$8!>Z$G$9$1$I!#!#!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/723 2002-11-06 mami * navi2ch-article.el (navi2ch-article-goto-number): $B%9%lFb$K%l%9$,(B $B$J$$$H$-$K%(%i!<$K$J$C$F$$$?$N$G!"$9$0=*N;$9$k$h$&$K!#(B 2002-11-04 SAITO Takuya Article $B%b!<%I$G$N8!:w5!G=$re!#(B (navi2ch-article-get-current-date): $BF1>e!#(B (navi2ch-article-get-current-id): $BF1>e!#(B (navi2ch-article-search): $BF1>e!#(B (navi2ch-article-search-name): $BF1>e!#(B (navi2ch-article-search-mail): $BF1>e!#(B (navi2ch-article-search-date): $BF1>e!#(B (navi2ch-article-search-id): $BF1>e!#(B (navi2ch-article-search-body): $BF1>e!#(B (navi2ch-article-search-subr): $BF1>e!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): `navi2ch-article-search' $B$r(B "?" $B$K%P%$%s%I!#(B (navi2ch-popup-article): navi2ch-article-mode $B$+$i * navi2ch-article.el (navi2ch-article-view-article): $B3N * navi2ch-board.el (navi2ch-board-get-matched-article): subject $B$N:G=i$H:G8e$N6uGr$r$1$:$k!#(B (navi2ch-board-get-subject-list): subject $BESCf$N6uGr$r05=L$7$J$$!#(B * navi2ch-search.el (navi2ch-search-board-subject-regexp): subject $BESCf$N6uGr$r05=L$7$J$$!#(B subject $B$N$_$r8!:wBP>]$K!#(B 2002-11-01 SAITO Takuya * navi2ch-message.el (navi2ch-message-send-message): $BAw?.95$($re5-$K$h$C$FITMW$K$J$C$?$b$N$r(B $B:o=|!#(B * navi2ch-search.el (navi2ch-search-board-subject-regexp): $BO"B3$7$?6uGr$H(BHTML$B$N%?%0$N=hM}$r0l3g$G9T$&!#(B 2002-10-28 SAITO Takuya * navi2ch-article.el (navi2ch-article-scroll-up): article-through-next $B$9$kA0$K:G8e$N%a%C%;!<%8$K0\F0!#(B (navi2ch-article-scroll-down): article-through-previous $B$9$kA0$K:G=i(B $B$N%a%C%;!<%8$K0\F0!#(B (navi2ch-article-through-ask-y-or-n-p): $B:G=i(B/$B:G8e$N(B article $B$r9MN8!#(B (navi2ch-article-through-ask-n-or-p-p): $BF1>e!#(B (navi2ch-article-through-ask-last-command-p): $BF1>e!#(B (navi2ch-article-through-ask): $B:G=i(B/$B:G8e$N(B article $B$N$H$-$O!"(Btitle $B$,(B nil $B$K$J$k$h$&$K!#(B 2002-10-26 SAITO Takuya * navi2ch-article.el (navi2ch-article-cancel-hide-message): Fix typo. http://pc.2ch.net/test/read.cgi/unix/1031231315/610 2002-10-26 SAITO Takuya * navi2ch-popup-article.el (navi2ch-popup-article-current-board): $B?7JQ?t!#(B (navi2ch-popup-article-current-article): $B?7JQ?t!#(B (navi2ch-popup-article-exit-and-goto-number): $B",$r;HMQ!#(B (navi2ch-popup-article-exit): $B85$N(B Article$B%b!<%I$,>C$($F$$$F$b(B exit $B$7$?$iLa$k$h$&$K!#(B 2002-10-26 SAITO Takuya * navi2ch-article.el (navi2ch-article-save-content): $B?74X?t!#(B (navi2ch-article-select-current-link): $B",$r;H$&!#(B (navi2ch-article-get-link-text-subr): navi2ch-popup-article-mode $B$G$b=hM}$9$k$h$&$K!#(B * navi2ch-mona.el (navi2ch-mona-put-face): navi2ch-mona-face $B$K$9$k(B region $B$r=$@5!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): "\r" `navi2ch-popup-article-select-current-link' "mouse-2" `navi2ch-popup-article-mouse-select' "Q" `navi2ch-popup-article-exit-and-goto-number' $B$r%P%$%s%I!#(B (navi2ch-popup-article-exit-and-goto-number): $B?74X?t!#(B (navi2ch-popup-article-mode): post-command-hook $B$K(B `navi2ch-article-display-link-minibuffer' $B$r(B add-hook$B!#(B (navi2ch-popup-article): $BB8:_$7$J$$HO0O$KBP$9$k;2>H$KBP=h!#(B (navi2ch-popup-article-select-current-link): $B?74X?t!#(B (navi2ch-popup-article-mouse-select): $B?74X?t!#(B 2002-10-25 mami $B!V$"$\$\!<$s5!G=!W=q$-D>$7!#(B * navi2ch-article.el (navi2ch-article-apply-message-filters): $B?74X?t!#(B (navi2ch-article-message-filter-by-name): $BF1>e!#(B (navi2ch-article-message-filter-by-message): $BF1>e!#(B (navi2ch-article-message-filter-by-id): $BF1>e!#(B (navi2ch-article-message-filter-subr): $BF1>e!#(B (navi2ch-article-insert-messages): $B>e5-(B navi2ch-article-apply-message-filters $B$r;HMQ$7$F%l%9$r%U%#%k(B $B%?$9$k$h$&$K!#(B (navi2ch-article-filter-by-name): docstring $BDI2C!#(B (navi2ch-article-filter-by-message): $BF1>e!#(B (navi2ch-article-get-separator-string): $BF1>e!#(B * navi2ch-vars.el (navi2ch-article-message-filter-list): $B?7JQ?t!#(B (navi2ch-article-message-filter-by-name-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-message-alist): $BF1>e!#(B (navi2ch-article-message-filter-by-id-alist): $BF1>e!#(B (navi2ch-article-filter-by-name-alist): docstring $BDI2C!#(B (navi2ch-article-filter-by-message-alist): $BF1>e!#(B 2002-10-24 SAITO Takuya * navi2ch-board-misc.el (navi2ch-bm-regist-board): Navi2ch$B%+%F%4%j$K(B $BFs=EEPO?$7$J$$$h$&$K!#(B * navi2ch-message.el (navi2ch-message-sendlog-board-id): $B:o=|!#(B (navi2ch-message-sendlog-board): $B4X?t$rF1L>$NJQ?t$GCV49!#(B (navi2ch-message-add-sendlog): navi2ch-localfile-default-file-modes $B$r(B 700 $B$K!#(B * navi2ch-vars.el (navi2ch-message-save-sendlog): Docstring$BJdB-!#(B (navi2ch-message-sendlog-subject): $B%G%U%)%k%HCM$r!VAw?.95$(!W$K!#(B 2002-10-22 SAITO Takuya * navi2ch-localfile.el (navi2ch-localfile-update-file): mtime$B$r;H$C$F(B $B99?7$5$l$F$$$k$+$rH=CG$9$k$h$&$K!#(Bmessage$B$N=PNO$rDI2C!#(B (navi2ch-localfile-article-update): $B>e5-JQ99$K$H$b$J$C$F!"(B navi2ch-localfile-update-file$B$K0z?t(Btime$B$rDI2C!#(B (navi2ch-localfile-board-update): $BF1>e!#(B (navi2ch-localfile-board-get-file-name): x-localbbs:///c:/tmp $B7A<0$K(B $BBP1~!#(B * navi2ch-util.el (navi2ch-replace-html-tag-regexp-alist): $BJ8;zHMQ$N@55,I=8=$r=$@5!#(B (navi2ch-compare-times): $B?74X?t!#(B 2002-10-21 mami * navi2ch-article.el (navi2ch-article-default-header-format-function): $B%$%s%G%s%HJQ99$J(B $B$I!#(B (navi2ch-article-view-article): $BF1>e!#(B (navi2ch-article-select-current-link): $BF1>e!#(B (navi2ch-article-cached-subject): $BF1>e!#(B (navi2ch-article-auto-decode-base64-section): $BF1>e!#(B 2002-10-21 mami * navi2ch-article.el (navi2ch-article-fetch-link): $B"-$G0z$-?t$rJQ(B $B$(K:$l$?$N$r=$@5!#(B 2002-10-21 mami * navi2ch-article.el (navi2ch-article-change-help-echo-property): $B?74X?t!#(Bnavi2ch-change-text-property $B$r$$$8$C$?!#(B (navi2ch-article-select-current-link): navi2ch-change-text-property $B$NBe$o$j$K>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-article-get-link-text): $BF1>e!#(B (navi2ch-article-fetch-link): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/536 * navi2ch-util.el (navi2ch-change-text-property): $B;H$o$J$/$J$C$?$N(B $B$G%3%a%s%H%"%&%H!#(B 2002-10-20 SAITO Takuya * navi2ch-article.el (navi2ch-article-set-link-property): 2002-10-19$B$NJQ99$G(B link-head $B$rIU$1$k(B region $B$r4V0c$($F$$$?$N$r=$@5!#(B 2002-10-19 SAITO Takuya $BAw?.MzNrJ]B85!G=$r!#(B * navi2ch-localfile.el (navi2ch-localfile-article-to-url): article$B$,(Bnil$B$N$H$-$KBP1~!#(B (navi2ch-localfile-url-to-board): board url $B$KBP1~!#(B * navi2ch-message.el (navi2ch-message-sendlog-board-id): $B?7JQ?t!#(B (navi2ch-message-send-message): $BAw?.MzNrJ]B8!#(B (navi2ch-message-sendlog-subject): $B?74X?t!#(B (navi2ch-message-sendlog-board): $B?74X?t!#(B (navi2ch-message-sendlog-article): $B?74X?t!#(B (navi2ch-message-add-sendlog): $B?74X?t!#(B * navi2ch-util.el (navi2ch-url-to-host): "^" $BDI2C(B * navi2ch-vars.el (navi2ch-article-url-regexp): localbbs$BBP1~!#(B (navi2ch-message-save-sendlog): $B?7JQ?t!#(B (navi2ch-message-sendlog-subject): $B?7JQ?t!#(B * navi2ch.el (toplevel): (require 'navi2ch-localfile) 2002-10-18 SAITO Takuya * navi2ch-board-misc.el (navi2ch-bm-insert-state): $B<+A0$G(B save-excursion$B$r$7!"(Bbuffer-read-only$B$r(Bnil$B$K$9$k!#(B (navi2ch-bm-select-article): $B>e5-$KBP1~!#(B (navi2ch-bm-fetch-article): $BF1>e!#(B (navi2ch-bm-remove-article): $BF1>e!#(B * navi2ch-localfile.el (navi2ch-localfile-func-alist): article-to-url, url-to-board, url-to-article$BDI2C!#(B (navi2ch-localfile-article-to-url): $B?74X?t!#(B (navi2ch-localfile-url-to-board): $B?74X?t!#(B (navi2ch-localfile-url-to-article): $B?74X?t!#(B * navi2ch-util.el (navi2ch-url-to-host): localbbs$B$N$H$-$O(B localhost $B$rJV$9$h$&$K!#(B 2002-10-18 mami * navi2ch-article.el (navi2ch-article-filter-by-name): $BHyD4@0!#(B (navi2ch-article-filter-by-message): $B?74X?t!#(B (navi2ch-article-apply-filters): $B>e5-4X?t$r;H$&$h$&$K!#(B * navi2ch-vars.el (navi2ch-article-filter-by-message-alist): $B?7JQ(B $B?t!#(B 2002-10-18 mami * navi2ch-oyster.el (navi2ch-oyster-article-update): $BITMW$JB+G{$r(B $B:o=|!#(B * navi2ch-jbbs-net.el (navi2ch-jbbs-board-update): $B?74X?t!#(B (navi2ch-jbbs-func-alist): board-update $B$rDI2C!#=gHV$rJQ99!#(B * navi2ch-jbbs-shitaraba.el (navi2ch-js-board-update): $B?74X?t!#(B (navi2ch-js-func-alist): board-update $B$rDI2C!#=gHV$rJQ99!#(B * navi2ch-machibbs.el (navi2ch-machibbs-board-update): $B?74X?t!#(B (navi2ch-machibbs-func-alist): board-update $B$rDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/480 2002-10-17 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-through-ask-n-or-p-p): accept-key $B0J30$,2!$5$l$?$i$=$N%-!<$N%3%^%s%I$r * navi2ch-article.el (navi2ch-article-through-ask-y-or-n-p): $B?74X?t!#(B (navi2ch-article-through-ask-n-or-p-p): $BF1>e!#(B (navi2ch-article-through-ask-last-command-p): $BF1>e!#(B (navi2ch-article-through-ask): `navi2ch-article-through-ask-function' $B$r8F$V;~$N0z?t$rJQ99!#(B * navi2ch-util.el (navi2ch-gnus-like-y-or-n-p): $B:o=|!#(B * navi2ch-vars.el (navi2ch-article-through-ask-function): $B8uJd$rJQ99!#(B 2002-10-17 Taiki SUGAWARA * navi2ch-oyster.el (navi2ch-oyster-article-update): kako $B$rIU$1$k(B $B$H$-$N>r7o$rJQ$($k!#(B (navi2ch-oyster-update-file-with-offlaw): $B:n$j$r:#$N(B navi2ch-net-update-file-with-readcgi $B$K9g$o$;$k!#(B kako $B$rJV$7$F$$$?$H$3$m$G(B error $B$rJV$9$h$&$K!#(B * navi2ch-net.el (navi2ch-net-state-header-alist): error $B$rDI2C!#(B (navi2ch-net-update-file): $B:#$^$G(B kako $B$rJV$7$F$$$?$H$3$m$G(B error $B$rJV$9$h$&$K!#(B (navi2ch-net-update-file-diff): $BF1>e!#(B (navi2ch-net-update-file-with-readcgi): $BF1>e!#$?$@$7!"2a5n%m%0AR8K(B $B$GH/8+$N$H$-$O(B kako $B$rJV$9!#(B * navi2ch-multibbs.el (navi2ch-2ch-article-update): kako $B$rIU$1$k(B $B$H$-$N>r7o$rJQ$($k!#(B * navi2ch-board.el (navi2ch-board-sync): not-updated $B$@$1$G$O$J$/(B error $B$b8+$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-sync): not-updated $B$@$1$G$O(B $B$J$/(B error $B$b8+$k$h$&$K!#(B (navi2ch-article-fetch-article): $BF1>e!#(B (navi2ch-article-update-file): $BF1>e!#(B 2002-10-17 mami * navi2ch-util.el (navi2ch-with-default-file-modes): XEmacs $B$N$H$-(B ($BI,MW$J$i(B) char-to-int $B$9$k$h$&$K!#(B 2002-10-16 SAITO Takuya * navi2ch-article.el (navi2ch-article-appendweek): youbi$B$,(Bnil$B$K(B $B$J$C$F$$$?$N$rD{@5!#(B * navi2ch-util.el (navi2ch-line-beginning-position): XEmacs$B$G$O(B point-at-bol$B$r;H$&!#(B (navi2ch-line-end-position): XEmacs$B$G$O(Bpoint-at-eol$B$r;H$&!#(B 2002-10-15 Taiki SUGAWARA * navi2ch-util.el (navi2ch-gnus-like-y-or-n-p): xemacs $B$N$H$-$@$1(B character-to-event $B$r;H$&$h$&$K!#(B 2002-10-14 Taiki SUGAWARA * navi2ch-board-misc.el (navi2ch-bm-get-updated-mark): $B?74X?t!#(B (navi2ch-bm-fetch-article): navi2ch-bm-get-updated-mark() $B$r;H$&$h(B $B$&$K!#(B * navi2ch-util.el (navi2ch-boundp): docstring $B$N(B typo $B=$@5!#(B (navi2ch-fboundp): $BF1>e!#(B 2002-10-14 ARISAWA Akihiro * navi2ch-util.el (navi2ch-gnus-like-y-or-n-p): $B?74X?t!#(B * navi2ch-vars.el (navi2ch-article-through-ask-function): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-through-ask): `navi2ch-article-through-ask-function' $B$r;H$&$h$&$K!#(B 2002-10-14 part 7 $B%9%l$N(B 424 $B$NL>L5$7$5$s(B * navi2ch-vars.el (navi2ch-bm-sort-by-state-order): $B%=!<%H=g$N(B cell $BDI2C!#(B * navi2ch-board-misc.el (navi2ch-bm-sort-by-state): updated-mark $B$G$b%=!<%H$9$k$h$&$K!#(B 2002-10-13 Taiki SUGAWARA * navi2ch-oyster.el (navi2ch-oyster-article-update): navi2ch-net-get-state $B$K(B header $B$rEO$7$F$J$+$C$?!&!&!&!#(B 2002-10-13 mami * navi2ch-article.el (navi2ch-article-auto-decode-base64-section): XEmacs $B$G(B detect-decoding-region $B$,(B coding system $B$r0l$D$7$+JV$5$J(B $B$+$C$?$H$-$KBP1~!#(B $B$J$s$G(B list $B$GJV$7$F$/$l$J$$$s$@! $BL>A0Ms$G!V$"$\$\!<$s5!G=!W$r * navi2ch-article.el (navi2ch-article-goto-number): $B0\F0@h$N%l%9HV9f$,%9%l$NHO0O30$@$C$?>l9g$NBP=hJ}K!(B $B$rJQ99(B(popup-article-mode$BBP1~(B)$B!#(B * navi2ch-board-misc.el (navi2ch-bm-fetch-article ): state$B$rJV$9(B $B$h$&$K!#(B * navi2ch-list.el (navi2ch-list-search): category$B>e$G * navi2ch-util.el (navi2ch-replace-html-tag-regexp-alist): $B?tCMJ8;z;2>H!"J8;zH$rDI2C!#(B (navi2ch-entity-alist): $B?7JQ?t!#(B (navi2ch-replace-html-tag-to-string): navi2ch-replace-html-tag-alist, navi2ch-replace-html-tag-regexp-alist $B$NCV49@h$K4X?t$r;XDj$G$-$k(B $B$h$&$K!#(B (navi2ch-entity-reference-to-str): $B?74X?t!#(B (navi2ch-numeric-reference-to-str): $BF1>e!#(B (navi2ch-ucs-to-str): $BF1>e!#(B * navi2ch-vars.el (navi2ch-article-decode-character-references): $B?7JQ?t!#(B 2002-10-10 SAITO Takuya * navi2ch-board-misc.el (navi2ch-bm-insert-subject): navi2ch-ifxemacs $B$r;H$C$F=q$-BX$(!#(B 2002-10-10 SAITO Takuya * navi2ch-board-misc.el (navi2ch-bm-insert-subject): XEmacs $B$G$O(B buffer-display-table $B$r;H$o$J$$$h$&$K!#(B 2002-10-10 mami * navi2ch-article.el (navi2ch-article-auto-decode-base64-section): XEmacs $B$G$O(B detect-coding-region $B$N0z?t!&JV$jCM$,0c$&$N$KBP=h!#(B $B%U%!%$%kL>$K(B link-head $B%W%m%Q%F%#$r$D$1$k$h$&$K!#(B 2002-10-09 Taiki SUGAWARA $B%9%l0lMw$G>uBV(B(UCV)$B$N%=!<%H=g$rJQ$($i$l$k$h$&$K$7$?!#(B * navi2ch-vars.el (navi2ch-bm-sort-by-state-order): $B?7JQ?t!#(B * navi2ch-board-misc.el (navi2ch-bm-sort-by-state): navi2ch-bm-sort-by-state-order $B$r;H$&$h$&$K!#(B * navi2ch-oyster.el (navi2ch-oyster-article-update): $B>uBV$N$H9g$o$;$k!#$G$b%(%i!<$rA4It(B kako $B$K$7$F$k$N$O$+$J$j$^$:$$!#(B 2002-10-09 SAITO Takuya * navi2ch-board-misc.el (toplevel): byte-compile$B;~$N(Bwarning $B$,=P$J$$$h$&$K!#(B 2002-10-09 SAITO Takuya * navi2ch-board-misc.el (navi2ch-bm-insert-subject): contrib/izonmoji-mode.el $B$,;H$o$l$F$$$k$H$-$O(B buffer-display-table $B$r(B nil $B$K!#(B 2002-10-06 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-update-file-diff): $B%3%a%s%H$N0LCV$r(B $BJQ$($H$$$?!#(B (navi2ch-net-update-file-with-readcgi): status $B$,(B 200 $B$N$H$-$@$1%l(B $B%9$r * navi2ch-message.el (navi2ch-message-send-message): `bury-buffer' $B$N%?%$%_%s%0$rAw?.8e$KJQ99!#(B 2002-10-06 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-update-file-diff): aborn $B$H$+(B not-updated $B$N$H$3$rD4@0!#:n$j$r(B navi2ch-net-update-file $B$K9g$o$;(B $B$F$_$?!#(B (navi2ch-net-update-file-with-readcgi): $BF1>e!#(B 2002-10-05 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-state-header-alist): $B%3%a%s%H=q$$$?!#(B (navi2ch-net-update-file): $B2a5n%m%0$K$J$C$F$=$&$J$H$-$O(B header $B$K(B kako $B$rDI2C!#(B (navi2ch-net-update-file-diff): $BF1>e!#(B 2002-10-05 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-update-file): $B99?7$G$-$J$$$H$-$KI,$:(B 'not-updated $B$r(B header $B$K4^$a$k$h$&$K!#(B (navi2ch-net-update-file-diff): $BF1>e!#(B (navi2ch-net-update-file-with-readcgi): $B%+%C%3$NBP1~$,$H$l$F$J$+$C(B $B$?$s$G=$@5!#(B * navi2ch-localfile.el (navi2ch-localfile-encode-html-tag-alist): "<" $B$,(B ">"$B!"(B">" $B$,(B "<" $B$K$J$C$F$?$N$G=$@5!#(B 2002-10-05 Taiki SUGAWARA multibbs-module $B$G:9J,$7$F$_$k!#(B * navi2ch-localfile.el (navi2ch-localfile-article-update): $B0z?t(B start $B$re!#(B (navi2ch-jbbs-article-callback): $BF1>e!#(B * navi2ch-multibbs.el: multibbs-module $B$N:9J,e!#(B (navi2ch-2ch-url-to-article): $B%$%s%G%s%H$rD>$7$F$_$k(B (navi2ch-2ch-article-to-url): $BF1>e!#(B (navi2ch-2ch-board-update): $BF1>e!#(B * navi2ch-util.el (navi2ch-count-lines-file): $B?74X?t!#(B * navi2ch-net.el: multibbs-module $B$N:9J,$7$F$_$k!#(B (navi2ch-article-get-readcgi-raw-url): $B0z?t$G(B start $B$r * navi2ch-article.el (navi2ch-article-set-mode-line): $B%9%l%?%$%H%k(B $B$,(B nil $B$N$H$-$O(B navi2ch-bm-empty-subject $B$r;H$&$h$&$K!#(B 2002-10-03 mami * navi2ch-jbbs-shitaraba.el: (require 'cl) $BDI2C!#(B (navi2ch-js-article-callback): $BF)L@$"$\!<$s$KBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/10 (navi2ch-js-subject-callback): $B%$%s%G%s%HD4@0!#(B * navi2ch-jbbs-net.el (navi2ch-jbbs-subject-callback): $B%$%s%G%s%H(B $BD4@0!#(B * navi2ch-article.el (navi2ch-article-goto-current-board): $B0z?tDI(B $B2C!#(Bnavi2ch-article-exit $B$KEO$9!#(B * navi2ch-bookmark.el (navi2ch-bookmark-yank): (beginning-of-line) $B$rDI2C!#(B $B9TF,0J30$G(B C-y $B$9$k$HJx$l$F$?$N$KBP=h!#(B 2002-10-02 Taiki SUGAWARA * navi2ch-multibbs.el (navi2ch-2ch-board-update): navi2ch-net-update-file-with-readcgi() $B$NJV$jCM$rD>@\;H$&$h$&$K!#(B $B:#$^$G$O(B car $B$7$F$?!#(B * navi2ch-article.el (navi2ch-article-fetch-article): update $B$N%A%'%C(B $B%/$K(B navi2ch-net-get-state() $B$r;H$&$h$&$K!#(B 2002-10-02 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-sync): $B99?7$5$l$?$+$I$&$+$N(B $B%A%'%C%/$r(B not-updated $B$b;H$C$F%A%'%C%/$9$k$h$&$K!#(B 2002-10-02 Taiki SUGAWARA navi2ch-net(upload|download)-* $B$,(B header $B$rJV$9$N$H(B '(header state) $B$rJV$9$N$N(B2$BuBV$r%X%C%@$KFM$C$3$`$h$&$K$7$?!#(B $B0l1~$3$ND>A0$K!"(Bbefore_state_in_header $B%?%0$rBG$A$^$9$?!#(B * navi2ch-oyster.el (navi2ch-oyster-article-update): state $B$r(B header $B$KFM$C$3$`$h$&$K$7$?$N$K9g$o$;$k!#(B (navi2ch-oyster-update-file-with-offlaw): $BF1>e!#(B * navi2ch-multibbs.el (navi2ch-2ch-article-update): $BF1>e!#(B * navi2ch-machibbs.el (navi2ch-machibbs-article-update): $BF1>e!#(B * navi2ch-jbbs-shitaraba.el (navi2ch-js-article-update): $BF1>e!#(B * navi2ch-jbbs-net.el (navi2ch-jbbs-article-update): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-sync): navi2ch-net-(add|get)-state $B$r;H$&$h$&$K!#(B * navi2ch-article.el (navi2ch-article-fetch-article): state $B$r(B header $B$KFM$C$3$`$h$&$K$7$?$N$K9g$o$;$k!#(B (navi2ch-article-sync): navi2ch-net-(add|get)-state $B$r;H$&$h$&$K!#(B (navi2ch-article-update-file): $BF1>e(B * navi2ch-net.el (navi2ch-net-state-header-alist): $B?7JQ?t!#(B (navi2ch-net-update-file): navi2ch-net-(add|get)-state $B$r;H$&$h$&(B $B$K!#(B (navi2ch-net-update-file-diff): $BF1>e!#(B (navi2ch-net-update-file-with-readcgi): $BF1>e!#(B (navi2ch-net-add-state): $B?74X?t!#(B (navi2ch-net-get-state): $BF1>e!#(B * TODO: $B$A$g$C$H$@$19`L\$r>C$7$F$_$k!#(B 2002-10-01 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-directory-mode-hook): $BDj5A$7$?!#(B (navi2ch-directory-exit-hook): $BF1>e!#(B (navi2ch-directory-load-hook): $BF1>e!#(B 2002-10-01 miz * navi2ch-article.el: YYYY/MM/DD HH:MM$B7A<0$KBP1~(B * navi2ch-vars.el: navi2ch-message-aa-default-alist$B$K4iJ8;zDI2C(B 2002-10-01 Taiki SUGAWARA * navi2ch-directory.el (navi2ch-directory-sync): $B$+$C$3$rIU$1$?!#(B * navi2ch-board.el (navi2ch-board-sync): header $B$K(B "Not-Updated" $B$,4^$^$l$F$$$?$H$-$O!"99?7$5$l$F$J$$$H$_$J$9$h$&$K!#(B 2002-09-25 mami * navi2ch-articles.el (navi2ch-articles-sync): $B?74X?t!#(B (navi2ch-articles): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-articles-mode-map): s $B$K(B navi2ch-articles-sync $B$r%P%$%s%I!#(B * navi2ch-directory.el (navi2ch-directory-sync): $B?74X?t!#(B (navi2ch-directory): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-directory-mode-map): s $B$K(B navi2ch-directory-sync $B$r%P%$%s(B $B%I!#(B * navi2ch-history.el (navi2ch-history-sync): $B?74X?t!#(B (navi2ch-history): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-history-mode-map): s $B$K(B navi2ch-history-sync $B$r%P%$%s%I!#(B * navi2ch-search.el (navi2ch-search-sync): $B?74X?t!#(B (navi2ch-search): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-search-mode-map): s $B$K(B navi2ch-search-sync $B$r%P%$%s%I!#(B * navi2ch-bookmark.el (navi2ch-bookmark-sync): $B>l=j$rJQ99!#(B docstring $B$,5sF0$H9g$C$F$$$J$$$N$G!":o=|!#(B 2002-09-23 Nanashi San * navi2ch-list.el (navi2ch-list-open-all-category): replace-in-string $B$O(B XEmacs $B$G$7$+;H$($J$$$N$G(B navi2ch-replace-string $B$r;HMQ$9$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-appendweek): youbi $B$H(B date $B$r(B local variable $B$K!#(B 2002-09-23 miz * navi2ch-article.e: YY/MM/DD$B7A<0$NF|IU$r(BYYYY/MM/DD($BMKF|(B)$B7A<0(B $B$G$bI=<($G$-$k$h$&$K$7$?(B($B$?$V$s(B8.26$B0JA0$N7A<0(B)$B!%(B * navi2ch-vars.el: $BMKF|$NI=<(!$HsI=<($N%U%i%0(Bnavi2ch-article-dispweek$B$r(B defcustum$B$9$k!%(B 2002-09-22 mami * navi2ch-article.el (navi2ch-article-exit): $B0z?tDI2C!#(BC-u $BIU$-$G(B $B8F$V$H(B kill-buffer $B$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/652-657n 2002-09-21 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-p): jbbs.shitaraba.net $B$N(B $B$H$-$b(B non-nil $B$K$J$k$h$&$K!#(B (navi2ch-js-url-to-board): URL $B$N%[%9%HIt$,(B jbbs.shitaraba.com $B$G(B $B$J$/$F$bF0:n$9$k$h$&$K!#(B (navi2ch-js-url-to-article): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-set-mode-line): $B%b!<%I%i%$%s(B $B$N(B ( ) $B$NCf$r(B ($B%9%l$N * navi2ch-list.el (navi2ch-list-toggle-open): bookmark $B$N$H$-$O$9(B $B$0=*N;$9$k$h$&$K!#(B $B%+%F%4%j$rJD$8$?$H$-$K%+!<%=%k$,e!#(B 2002-09-19 mami * navi2ch-message.el (navi2ch-message-insert-header): undo $B>pJs$r(B $B%/%j%"$7!"%P%C%U%!$rL$JQ99>uBV$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/953 * navi2ch-board-misc.el (navi2ch-bm-sort-by-state): 2002-09-18 $B$N(B $BJQ99$rC$7!#(B state (U/V/C) $B$N$_$G(B sort $B$9$k$h$&$K!"$^$?!"(Brev $B$+$i(B (not rev) $B$K!"(B $BLa$7$?!#(B 2002-09-18 mami * navi2ch-board-misc.el (navi2ch-bm-goto-updated-mark-column): $B?74X?t!#(B (navi2ch-bm-goto-state-column): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-bm-goto-mark-column): $BF1>e!#(B (navi2ch-bm-sort-by-state): state (U/V/C) $B$@$1$G$J$/(B updated-mark (+/=/space) $B$b4^$a$F(B sort $B$9$k$h$&$K!#(B (not rev) $B$+$i(B rev $B$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/850 http://pc.2ch.net/test/read.cgi/unix/1023884490/903 * navi2ch-list.el (navi2ch-list-show-url): $BHD(B URL $B$,$J$$$H$-$O$9$0(B $B=*N;$9$k$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): $BF1>e!#(B 2002-09-04 mami * navi2ch-article.el (navi2ch-article-select-current-link): help-echo $B%W%m%Q%F%#$,B8:_$7$J$$$H$-$O(B navi2ch-change-text-property $B$r8F$P$J$$$h$&$K!#(B (navi2ch-article-fetch-link): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/858 http://pc.2ch.net/test/read.cgi/unix/1023884490/860 2002-09-03 mami * navi2ch-head.el (navi2ch-head-get-head-txt): insert-string $B$G$J(B $B$/(B insert $B$r;H$&$h$&$K!#(B * navi2ch-oyster.el: Copyright $B$NG/$r(B 2000 $B$+$i(B 2002 $B$K=$@5!#(B $BJD$83g8L$r$V$i2<$2$:$K9TKv$X!#(B $B6u9T$r:o=|!#(B mark-whole-buffer $B"*(B indent-region $B$G%$%s%G%s%H=$@5!#(B $B2~9T0LCV$rD4@0!#(B 2002-09-02 Nanashi San * navi2ch-oyster.el (toplevel): ssl.el $B$,L5$$4D6-$G$b%P%$%H%3%s%Q(B $B%$%k$G$-$k$h$&!"(Bssl $B$r(B require $B$8$c$J$/$F(B autoload $B$9$k$h$&$K!#(B $B"-(BMakefile.in $B$O(B automake $B$G<+F0@8@.$J$s$G(B ChangeLog $B$K$O=q$/I,MW(B $B$J$$$C$9!#(B 2002-09-02 mizmiz * navi2ch-oyster.el: $B%*%$%9%?!<:n@oBP1~%=!<%9?75,DI2C(B * navi2ch.el (require 'navi2ch-oyster)$BDI2C(B * Makefile.am navi2ch-oyster.el $BDI2C(B * Makefile.in navi2ch-oyster.el navi2ch-oyster.elc $BDI2C(B 2002-08-29 mami * navi2ch-board-misc.el (navi2ch-bm-sort-by-number): $B0z?t$r(B &optional $B$K!#(B (navi2ch-bm-sort-by-state): $BF1>e!#(B (navi2ch-bm-sort-by-subject): $BF1>e!#(B (navi2ch-bm-sort-by-other): $BF1>e!#(B (navi2ch-bm-sort-by-date): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/901 * navi2ch-multibbs.el (navi2ch-multibbs-send-message): $B;n9T2s?t$N(B $B>e8B$,8z$$$F$J$+$C$?$N$G=$@5!#(B 2002-08-28 mami $B%l%9Aw?.;~$K(B SPID $B%/%C%-!<3NG'2hLL$,=P$?$i!"<+F0$G:F;n9T$9$k$h$&$K!#(B ($B$^$@(B $B$O8+$F$J$$$G$9!#(B) * navi2ch-net.el (navi2ch-net-send-message-success-p): $B%/%C%-!<3N(B $BG'$N$H$-$O(B 'retry $B$rJV$9$h$&$K!#(B * navi2ch-multibbs.el (navi2ch-multibbs-send-message): success-p $B$,(B 'retry $B$rJV$7$?$H$-$O$b$&0lEY$@$1Aw?.$r;n$9$h$&$K!#(B (navi2ch-multibbs-func-alist): $BJV$jCM$N(B 'retry $B$H(B nil $B$K$D$$$FDI5-!#(B * navi2ch-vars.el (navi2ch-message-retry-wait-time): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-textize-article): $B?74X?t!#(B navi2ch-bm-textize-article $B$+$iJ,N%!#(B (navi2ch-article-mode-map): navi2ch-article-textize-article $B$r(B "e" $B$K%P%$%s%I!#(B * navi2ch-board-misc.el (navi2ch-bm-textize-article): $B>e5-(B navi2ch-article-textize-article $B$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/843 * navi2ch-head.el (navi2ch-head-get-head-txt): navi2ch-offline $B$,(B t $B$N$H$-$O%U%!%$%k$r * navi2ch-bookmark.el (navi2ch-bookmark-copy): $B0\F085$H0\F0@h$,F1(B $B$8$H$-$OCf;_$9$k$h$&$K!#(B (navi2ch-bookmark-move): $BF1>e!#(B 2002-08-18 mami * navi2ch-vars.el (navi2ch-bookmark-remember-order-after-sort): $B?7JQ?t!#(B * navi2ch-bookmark.el (navi2ch-bookmark-remember-order): $B?74X?t!#(B (navi2ch-bookmark-sort): $B?74X?t!#(B (navi2ch-bookmark-mode-map): $B>e5-(B2$B4X?t$r(B "X" $B$H(B "S" $B$K%P%$%s%I!#(B 2002-08-12 mami * navi2ch-article.el (navi2ch-article-select-current-link): $B30It%V%i%&%6$r;H$o$:$K%j%s%/$KHt$V$H$-$K(B help-echo $B%W%m%Q%F%#$N%-%c%C(B $B%7%e$r%/%j%"$9$k$h$&$K!#(B (navi2ch-article-fetch-link): fetch $BA0$K(B help-echo $B%W%m%Q%F%#$N%-%c%C(B $B%7%e$r%/%j%"$9$k$h$&$K!#(B $B%j%s%/@h$,HD$N$H$-$O(B fetch $B$7$J$$$h$&$K!#(B 2002-08-08 Nanashi San link $B$rDI$$$+$1$?7k2L$r%-%c%C%7%e$9$k$h$&$K$7$?!#(B * navi2ch-article.el (navi2ch-article-get-link-text-subr): navi2ch-article-get-link-text $B$+$iL>>NJQ99!#(B (navi2ch-article-get-link-text): $B>e5-4X?t$r8F$S=P$7$?8e!"(Bhelp-echo $B%W%m%Q%F%#$rJQ99$9$k!#(B * navi2ch-util.el (navi2ch-change-text-property): $B?74X?t!#(B 2002-08-06 mami * navi2ch-board-misc.el (navi2ch-bm-renumber): $B%l%9HV9f$N7e?t$K$+(B $B$+$o$i$:@5$7$/F0:n$9$k$h$&$K!#(B (navi2ch-bm-goto-mark-column): defun $B$NCV$->l=jJQ99!#(B (navi2ch-bm-goto-other-column): $BF1>e!#(B 2002-08-05 TAKAHASHI Kaoru * navi2ch-board-misc.el (navi2ch-bm-select-board): $B:n6H$,40N;$7$F(B $B$+$i%P%C%U%!$rI=<((B (switch-to-buffer) $B$9$k$h$&$KJQ99!#(B 2002-08-02 Nanashi San * navi2ch-net.el (navi2ch-net-get-content): $B%5!<%P$,(B HTTP/1.1 $B$rJV(B $B$7$F$-$F!"$+$D(B Connection: close $B$N;~$NF0:n$,JQ$@$C$?!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/717,719 2002-08-02 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-url-to-article): &START= $B$rG'<1$9$k$h$&$K!#(B board $B7O%P%C%U%!$G%l%9HV9f$,(B3$B7e$rD6$($?$H$-$NF0:n$,$*$+$7$+$C$?!#(B * navi2ch-vars.el (navi2ch-bm-number-width): $B?7JQ?t!#(B * navi2ch-board-misc.el (navi2ch-bm-insert-subject): $B>e5-JQ?t$r;H(B $B$&$h$&$K!#(B (navi2ch-bm-goto-state-column): $B%l%9HV9f$N7e?t$K$+$+$o$i$:@5$7$/F0(B $B:n$9$k$h$&$K!#(B 2002-08-02 Nanashi San * navi2ch-net.el (navi2ch-net-send-request): $B>r7o$r$A$g$$87L)$K!#(B $B%a%C%;!<%8$r$A$g$C$HB?$/$7$F$_$?!#(B($B$&$k$5$+$C$?$i%4%a%s(B) (navi2ch-net-get-protocol): $B?74X?t!#(B (navi2ch-net-get-content): $B0J2<$N%$%s%W%j%a%s%H$,4V0c$C$F$?!#(B > HTTP/1.1 $B$,M-8z$J;~$b(B HTTP/1.0 $B7A<0$N%k!<%W$K%U%)!<%k%P%C%/$9$k$h(B > $B$&$K!#(B $BAj * navi2ch-net.el (navi2ch-net-download-file): "checking file..." $B$N0LCV$rJQ99!#(B $BHD$,A}$($l$PA}$($kDx(B (navi2ch-get-board-name-list navi2ch-list-category-list) $B$,=E$/$J$C$F$$$/$N$G!"$h$/;H$&CM$OJQ?t$K$D$C$3$s$8$c$(!"$C$F$3$H$G!#(B article $B%b!<%I$G%+!<%=%k$,(B URL $B$K$+$+$C$?;~$NF0:n$J$s$+$,$+$J$j7Z(B $B$/$J$j$^$9$?!#(B * navi2ch-list.el (navi2ch-list-board-name-list): $B?7JQ?t!#(B (navi2ch-list-set-category): $B>e5-JQ?t$bJQ99$9$k$h$&$K!#(B (navi2ch-list-sync): $BF1>e!#(B (navi2ch-list-goto-board): navi2ch-list-board-name-list $B$r;H$&$h$&$K!#(B (navi2ch-list-expire-all): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-goto-number-or-board): navi2ch-list-board-name-list $B$r;H$&$h$&$K!#(B * navi2ch-board.el (navi2ch-board-url-to-board): $BF1>e!#(B * navi2ch-bookmark.el (navi2ch-bookmark-create-bookmark): $BF1>e!#(B * navi2ch.el (navi2ch-2ch-url-p): $BF1>e!#(B * navi2ch-net.el (navi2ch-net-get-content): accept-process-output $B$X(B proc $B$rEO$9$h$&$K!#(B($B0z?t$r>JN,$7$?>l9g$O(B $B%V%m%C%/$;$:$KLa$k$?$a!"(BCPU $BIi2Y$,$9$4$$$3$H$K$J$C$F$?!#(B) HTTP/1.1 $B$,M-8z$J;~$b(B HTTP/1.0 $B7A<0$N%k!<%W$K%U%)!<%k%P%C%/$9$k$h(B $B$&$K!#(B 2002-07-31 Nanashi San * acinclude.m4 (AC_EMACS_LISP): $BM?$($i$l$?(B elisp-code $B$r0l$D$N4X?t(B $B$KJD$89~$a!"$=$N4X?t$r8F$S=P$9$h$&$K!#(B Emacs 20 $B$O(B -l $B$G%m!<%I$7$?>l9g$K$OI8=`=PNO$K2?$b=PNO$7$J$$$_$?$$(B $B$J$N$G!#!#!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/708 * elisp-comp: -L $B$G(B load-path $B$rDI2C$G$-$k$h$&$K$7$F$_$?!#(B -eval $B$O;H$o$:!"Cf4V%U%!%$%k$K=q$-=P$7$F$=$l$r(B -l $B$9$k$h$&$K!#(B * acinclude.m4 (AC_EMACS_LISP): elisp $B$r0lC6Cf4V%U%!%$%k$K=PNO$7$F(B $B$+$ie5-%^%/%m$r;H$&$h$&$K!#(B * configure.in: AC_EMACS_LISP $B$r;H$&$h$&$K!#(B 2002-07-30 mami * navi2ch-article.el (navi2ch-article-kill-buffer-hook): navi2ch-article-backward-buffer $B$r8F$P$J$$$h$&$K$7$?!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/674 * navi2ch-message.el (navi2ch-message-kill-message): $B0l2sM>J,$K(B y-or-n-p $B$GJ9$+$l$k$3$H$,$"$C$?!#(B $B3g8L$NBP1~$r4V0c$C$F$?$N$G!"=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/684 2002-07-29 Nanashi San * navi2ch-board.el (navi2ch-board-add-bookmark-subr): $B$;$C$+$/(B board $B$r$[$2$C$F$k$N$K!"(Bnavi2ch-board-current-board $B$+$i(B bookmark $B$N85%M%?$rF@$F$?!#(B($B$"$s$^%F%9%H$7$F$J$$$N%P%l%P%l$C$9$M!#!#!#(B) http://pc.2ch.net/test/read.cgi/unix/1023884490/672 2002-07-28 Nanashi San * navi2ch-article.el (navi2ch-article-get-link-text): $B=hM}Cf$K(B transient-mark-mode $B$N%O%$%i%$%H$,@Z$l$F$7$^$C$F$$$?$_$?$$!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/463 * navi2ch-vars.el (navi2ch-mona-setup-hook): $B?7JQ?t!#(B (navi2ch-mona-undo-setup-hook): $BF1>e!#(B * navi2ch-mona.el (navi2ch-mona-setup): $B%b%J!<%U%)%s%H$K0MB8$7$?=h(B $BM}$,$G$-$k$h$&!"(Bhook $B$rDI2C!#(B (navi2ch-mona-undo-setup): $B8e;OKv$,$G$-$k$h$&!"(Bhook $B$rDI2C!#(B * configure.in: 1.6.0-DEV $B$K%"%C%W%G!<%H!#(B 2002-07-28 Nanashi San * navi2ch: 1.6.0 $B%j%j!<%9!#(B * configure.in: 1.6.0 $B$K%"%C%W%G!<%H!#(B 2002-07-26 mami * navi2ch-jbbs-shitaraba.el (navi2ch-js-subject-callback): jbbs $B$N%9%l0lMw$G$O:G=i$N%9%l$,$J$<$+:G8e$K$bEP>l$7$F$$$k!#(B $B:G8e$N%9%l$r:o=|$9$k$h$&$K!#(B * navi2ch-jbbs-net.el (navi2ch-jbbs-subject-callback): $BF1>e!#(B 2002-07-26 Nanashi San * README: $BWFM$K$D$$$FDI5-!#(B * navi2ch-machibbs.el (navi2ch-machibbs-article-callback): $BF)L@$"$\!<$s$GHV9f$,$:$l$F$$$?$N$KBP1~!#(B 2002-07-24 Nanashi San * navi2ch-vars.el (navi2ch-splash-display-logo): image $B$rFI$s$G$J(B $B$$>l9g$O(B ascii $B$,I=<($5$l$F$?$N$G!"(Bemacs21 $B$+(B xemacs $B$N>l9g$O(B t $B$K(B $B$9$k$h$&$K!#(B * navi2ch-splash.el (navi2ch-splash-logo-ascii): $B%b%J!<$N4i$K!#(B * icons/navi2ch-logo.xpm, icons/navi2ch-logo.xbm $BJQ$($F$_$^$9$?!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/590 2002-07-24 mami $B=q$-9~$_<:GT;~$N%a%C%;!<%8$,2=$1$F$?!#(B * navi2ch-multibbs.el (navi2ch-multibbs-send-message): 'send-error-string $B$r(B 'error-string $B$KJQ99!#(B $B$[$s$H$O(B 'send-error-string $B$NJ}$,@5$7$$$N$+$J(B? * navi2ch-jbbs-shitaraba.el (navi2ch-js-send-message-error-string): $B$A$c$s$H1~Ez$r2r * navi2ch-jbbs-shitaraba.el (navi2ch-js-send-message): $B%9%lN)$F$r%5%]!<%H!#(B $B%9%lN)$F$N$H$-$O(B KEY $B$G$J$/(B SUBJECT $B$rAw$k$h$&$K!#(B $BG0$N$?$a(B submit $B$NJ8;zNs$bJQ99!#(B 2002-07-23 Nanashi San * configure.in: EMACS $B$N=PNO$+$i6u9T$r7W$J(B \n $B$,$D$/(B $B$N$OC/$N$;$$$J$s$@$m!#!#!#(B * navi2ch-vars.el (navi2ch-list-bbstable-url): $B%G%U%)%k%H$r(B nil $B$K!#(B nil $B$N$^$^$J$i(B navi2ch-update.el $B$G99?7$5$l$k!#(B 2002-07-23 mami * navi2ch-message.el (navi2ch-message-send-message): navi2ch-offline $B$,(B t $B$N$H$-$O$9$0=*N;$9$k$h$&$K!#(B navi2ch-ask-when-exit $B$HF1MM$N5sF0$re!#(B 2002-07-23 Nanashi San * navi2ch-board.el (navi2ch-board-url-to-board): url $B$,(B navi2ch-list-category-list $B$+$i$_$D$+$i$J$$>l9g$O!"$H$j$"$($:(B type $B$r(B board $B$K$9$k$h$&$K$7$?!#(B * navi2ch-vars.el (navi2ch-list-board-id-alist): $BITMW$K$J$C$?$N$G(B nil $B$K!#(B $B%"%U%)$G$7$?!#$5$C$-$N(B commit $B$@$H!"JQ$o$C$?HD$O$9$Y$F?7@_$NHD$H$$(B $B$&$3$H$K$J$C$F$?!#(B * navi2ch-list.el (navi2ch-list-old-category-list): $B:o=|!#(B (navi2ch-list-get-changed-status): id $B$G$O$J$/!"(Buri $B$r%-!<$K$7$F=h(B $BM}$9$k$h$&$K!#(Bid $B$N(B ":" $B$h$jA0!"HD$NL>A0$,F1$8$J$i0\F0$7$?HD!"$=$&(B $B$8$c$J$$$J$i!"?7@_$NHD$H$_$J$9$h$&$K!#(B (navi2ch-list-sync): old-category-list $B$KLa$7!"%m!<%+%kJQ?t$K!#(B (navi2ch-list-make-board-txt): $B0JA0$HF1$8(B id $B$rIU$1$kI,MW$O$J$$!#(B (navi2ch-list-get-board-name-list): id $B$G%f%K!<%/$J%j%9%H$rJV$9$h(B $B$&$K$7$?!#(B 2002-07-22 mami * navi2ch-message.el (navi2ch-message-jump-to-message-buffer): docstring $B$rDI2C!#(B $BHD$NI=<( * navi2ch-list.el (navi2ch-list-old-category-list): $B?7JQ?t!#(B (navi2ch-list-sync): $B%m!<%+%kJQ?t(B old-category-list $B$G$O$J$/!">e5-(B $B%0%m!<%P%kJQ?t$r;H$&$h$&$K!#(B (navi2ch-list-make-board-txt): $B$H$j$"$($:(B id $B$N>WFM$KBP1~!#(B 1. navi2ch-list-old-category-list $B$K(B URL $B$,B8:_$9$k>l9g$O!"$=$N(B id $B$r;HMQ$9$k!#(B 2. $BF1$8(B id $B$G(B URL $B$N0c$&HD$,$"$k>l9g$O(B id:2, id:3... $B$N$h$&$J46$8(B $B$G(B id $B$N(B suffix $B$rA}$d$7$F$$$/!#(B $B$H$$$&$7$F$7$^$$!"JQ$o$C$?HD$K$J$C$F$7$^$&!#(B $B;D$k(B id $B$N>WFM$N2DG=@-$O(B etc.txt $B$d(B bookmark.txt $B$@$1$I!"$3$l$O$I(B $B$&$7$h$&$+$J!#(B * navi2ch-message.el (navi2ch-message-write-message): $B%b!<%I%i%$%s(B $B$K=q$-9~$_@h$N%9%l$dHD$rI=<($9$k$h$&$K$7$?!#8mGzBP:v!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/575 * navi2ch-http-date.el (navi2ch-http-date-encode): Windows $B$G(B TZ $B$,@_Dj$5$l$F$J$/$F$bLdBj$J$$$h$&!"(Bset-time-zone-rule $B$r;H$o$J$$$h$&$K$7$?!#(B (navi2ch-http-date-decode): timezone-fix-time $B$KEO$90z?t$H$7$F!"(B GMT $B$rL@<(!#(B 2002-07-22 mami * navi2ch-message.el (navi2ch-message-jump-to-message-buffer): $B?74X?t!#(B * navi2ch-vars.el (navi2ch-global-map): navi2ch-message-jump-to-message-buffer $B$r(B C-c C-o $B$K%P%$%s%I!#(B 2002-07-22 Nanashi San * navi2ch-util.el (navi2ch-replace-html-tag): navi2ch-replace-string $B$N7k2L$rJV$7$F$J$+$C$?!#!#!#(B 2002-07-21 Nanashi San * navi2ch-multibbs.el (navi2ch-2ch-url-to-board): $BHD$N%^%C%A$r%k!<(B $B%:$K$b$I$7$?!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/552 2002-07-20 Nanashi San * navi2ch-util.el (navi2ch-temp-directory): expand-file-name $B$5$l(B $B$?CM$rJV$9$h$&$K$7$?!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/542 (navi2ch-base64-insert-file): $B8E$$(B base64.el $B$r;H$C$F$$$k>l9g$O(B 3 $BHVL\$N0z?t$,L5$$$N$G!"<+NO$G2~9T$r>C$9$h$&$K$7$?!#(B * navi2ch-mona.el (navi2ch-mona-create-face-from-family-name): $B?74X?t!#(B (navi2ch-mona-set-font-family-name): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-mona-font-family-name): type $B$,4V0c$C$F$?$N$G=$@5!#(B initialize $B$GI{:nMQ$N$"$k4X?t$r8F$P$J$$$h$&$K!#(B (navi2ch-mona-setup): $B$3$3$G(B face $B$r:n@.$9$k$h$&$K$7$?!#(B * navi2ch-article.el (navi2ch-article-call-aadisplay): navi2ch-article-aa-display-program $B$KEO$9%U%!%$%kL>$r(B expand-file-name $B$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/537 $B$D$$$G$K!"$J$s$H$J$/5$;}$A0-$$$N$G(B unwind-protect $B$7$F(B delete-file $B$r>o$K * navi2ch-mona.el (navi2ch-mona-arrange-message): $BFCDj$NHD$N$_$G%b%J!<%U%)%s%H$r;H$&$?$a$N@_Dj$,$&$^$/F0$$$F$J$+$C$?(B $B$N$G!"=$@5!#(B navi2ch-mona-enable-board-list $B$,(B nil $B$N$H$-$O%b%J!<%U%)%s%H$r;H$o(B $B$J$$$N$r%G%U%)%k%H$K!#(B (navi2ch-mona-enable-board-list): $B>e5-$KDI?o$7$F(B docstring $B$KDI5-!#(B (navi2ch-mona-disable-board-list): $BF1>e!#(B * NEWS: $B>e5-$K$D$$$F(B ($B$A$g$C$He!#(B * navi2ch-machibbs.el (navi2ch-machibbs-article-to-url): $BF1>e!#(B 2002-07-19 Nanashi San * navi2ch-machibbs.el (navi2ch-machibbs-parse-regexp): $B$"$\!<$s$,(B $B$"$C$?;~$N%U%)!<%^%C%H$,HyL/$K0c$&$N$KBP1~!#$H$j$"$($:!"6uGr$N8e$K(B $B$9$Y$F!V(B?$B!W$rF~$l$F$_$^$9$?!#(B base64-$B$[$2$[$2(B $B$r;H$&:]$O(B (require 'base64) $B$9$k$h$&$K$7$?!#(B o GNU Emacs 20$B!"(B21$B!"(BXEmacs 21.4 $B$G$O(B base64 $B$,(B provide $B$5$l$F$k!#(B o flim $B$r;H$&%Q%C%1!<%8$O(B (mel-find-function ...) $B$r$7$F$*$j!"(B base64 feature $B$K$O0MB8$7$J$$:n$j$K$J$C$F$$$k!#(B o XEmacs $B$G$O!"(Bbase64.el $B$O(B browse-url.el $B$H6&$K(B mail-lib $B$N0lIt$H(B $B$7$FG[I[$5$l$F$*$j!"(B(require 'browse-url) $B$r$7$F$$$k0J>e!"(B (require 'base64) $B$7$F$bLdBjL5$$$O$:!#(B * navi2ch-article.el: base64 $B$r(B require$B!#(B * navi2ch-mona.el: $BF1>e!#(B * navi2ch-net.el: $BF1>e!#(B * navi2ch-util.el: $BF1>e!#(B * README: flim $B$K4X$9$k5-=R$r:o=|!#(B 2002-07-18 Nanashi San * Makefile.am (recompile): $(EMACS) $B$K6uGr$,F~$C$F$bBg>fIW$J$h$&!"(B $B%/%*!<%H$7$?!#(B * navi2ch-util.el (navi2ch-replace-html-tag-to-string): case-fold-search $B$,(B non-nil $B$N;~$O(B assoc-ignore-case $B$r;H$&$h$&$K!#(B $B8+IU$+$i$J$+$C$?;~$O(B nil $B$G$O$J$/(B "" $B$rJV$9$h$&$K!#(B (navi2ch-replace-html-tag): HTML $B%?%0$OBgJ8;z>.J8;z$r6hJL$7$J$$$N(B $B$G!"(Bcase-fold-search $B$r(B t $B$KB+G{!#(B (navi2ch-replace-html-tag-with-buffer): $BF1>e!#(B $B"-F0:n5U$K$7$^$9$?!#(B 2002-07-18 mami * navi2ch-util.el (navi2ch-replace-html-tag-with-buffer): search $B$N$H$-(B case $B$r6hJL$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1024809685/209 $B$K(B > $B$,4^$^(B $B$l$F$?$N$G!#(B 2002-07-18 Nanashi San * navi2ch-mona.el (navi2ch-mona-create-fontset): $B:o=|!#(B (navi2ch-mona-create-fontset-from-family-name): $B85$KLa$7$?!#(B 2002-07-17 mami * navi2ch-jbbs-net.el (navi2ch-jbbs-article-to-url): $B0z?t$N(B start, end, nofirst $B$r%5%]!<%H!#(B * navi2ch-jbbs-shitaraba.el (navi2ch-js-article-to-url): $BF1>e!#(B 2002-07-17 Nanashi San * navi2ch.el (toplevel): $B>o$K(B navi2ch-mona $B$r(B require $B$9$k$h$&$K!#(B (navi2ch): navi2ch-mona-enable $B$K1~$8$F(B navi2ch-mona-setup $B$r8F$V(B $B$h$&$K!#(B * navi2ch-vars.el (navi2ch-mona): $B%3%a%s%H!"(BURL $B$r99?7!#(B (navi2ch-mona-enable): navi2ch-mona $B$K0\F0!#(B * navi2ch-mona.el (navi2ch-mona-create-fontset): $B?7JQ?t!#(B (toplevel): XEmacs $B$N(B warning $B>C$7$N(B defalias $BDI2C!#(B (navi2ch-mona-create-fontset-from-family-name): navi2ch-mona-create-fontset $B$,(B nil $B$N>l9g$O!"(BEmacs 21 $B$G$b%U%)%s%H(B $B%;%C%HL>$N$_$G=hM}$9$k!#$3$=!<$j%G%U%)%k%H(B nil $B$G%F%9%H$7$F!"6l>p(B $B$,=P$?$i(B t $B$K$7$h$&!#(B (navi2ch-mona-enable): navi2ch-vars.el $B$+$i0\F0!#(B (navi2ch-mona-font-family-name): customize $B$G%?%0$,=P$k$h$&!"=gHV(B $B$rJQ99!#(B (navi2ch-mona-pack-space): fix typo (navi2ch-mona-setup): $BBP1~$7$F$J$$4D6-$G$O8F$s$G$bL532$K$7$?!#(B (toplevel): require $B$7$?$@$1$G$O(B setup $B$7$J$$$h$&$K!#(B 2002-07-16 Nanashi San * navi2ch-article.el (navi2ch-article-mode-map): [(shift tab)] $B$K2C$($F(B [(shift iso-lefttab)] $B$b%P%$%s%I!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/476 XEmacs $B$rCf?4$K(B warning $B$,=P$J$$$h$&$K$7$?!#(B * navi2ch.el (navi2ch-two-pane): $BITMW$JB+G{$r:o=|!#(B (navi2ch-goto-url): $BF1>e!#(B (navi2ch-find-file): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-select-current-link): $BITMW$JB+G{$r:o=|!#(B (navi2ch-article-scroll-up): $BF1>e!#(B (navi2ch-article-scroll-down): $BF1>e!#(B (navi2ch-article-get-current-number): $BF1>e!#(B (navi2ch-article-next-message): $BF1>e!#(B (navi2ch-article-previous-message): $BF1>e!#(B (navi2ch-article-cached-subject): $BF1>e!#(B (navi2ch-article-auto-decode-base64-section): match-string-no-properties -> navi2ch-match-string-no-properties line-beginning-position -> navi2ch-line-beginning-position line-end-position -> navi2ch-line-end-position (toplevel): XEmacs $B$KB8:_$7$J$$JQ?t$r(B defvar$B!#(B (navi2ch-article-popup-dialog): XEmacs $B$G$O2?$b$7$J$$$h$&$K!#(B * navi2ch-board.el (navi2ch-board-get-matched-article): $BITMW$JB+G{$r:o=|!#(B (navi2ch-board-url-to-board): $BF1>e!#(B (navi2ch-board-insert-subjects): $BF1>e!#(B (navi2ch-board-sync): $BF1>e!#(B * navi2ch-e21.el (navi2ch-defalias-maybe): $B$>$>$C$H(B navi2ch-defalias-maybe$B!#(B($B$^$"!"0l1~!#!#!#(B) * navi2ch-jbbs-shitaraba.el (navi2ch-js-make-article): $BITMW$JB+G{$r:o=|!#(B * navi2ch-list.el (navi2ch-list-valid-board): $BITMW$JB+G{$r:o=|!#(B (navi2ch-list-get-board-name-list): $BF1>e!#(B * navi2ch-localfile.el (navi2ch-localfile-create-thread): $BITMW$JB+G{$r:o=|!#(B * navi2ch-machibbs.el (navi2ch-machibbs-make-article): $BITMW$JB+G{$r:o=|!#(B (navi2ch-machibbs-article-callback): $BF1>e!#(B * navi2ch-mona.el (toplevel): set-face-attribute $B$r(B defalias-maybe (navi2ch-mona-create-fontset-from-family-name): navi2ch-ifxemacs $B$r;H$&$h$&$K!#(B * navi2ch-net.el (toplevel): XEmacs $B$KB8:_$7$J$$JQ?t$r(B defvar$B!#(B (navi2ch-net-split-url): $BITMW$JB+G{$r:o=|!#(B * navi2ch-popup-article.el (navi2ch-popup-article-scroll-up): $BITMW$JB+G{$r:o=|!#(B * navi2ch-splash.el (navi2ch-splash-insert-image): $BITMW$JB+G{$r:o=|!#(B (navi2ch-splash-insert-image): line-beginning-position -> navi2ch-line-beginning-position (toplevel): XEmacs $B$KB8:_$7$J$$JQ?t$r(B defvar$B!#(B * navi2ch-util.el (toplevel): XEmacs $B$KB8:_$7$J$$JQ?t$r(B defvar$B!#(B (navi2ch-y-or-n-p): let -> let* (navi2ch-base64-write-region): $BITMW$JB+G{$r:o=|!#(B (navi2ch-base64-insert-file): $BF1>e!#(B (navi2ch-line-beginning-position): $B?74X?t!#(B (navi2ch-line-end-position): $B?74X?t!#(B 2002-07-15 Nanashi San * navi2ch-article.el (navi2ch-article-display-link-minibuffer): $B%^!<%/$N5sF0$,IT?3$@$=$&$J$N$G!"(Bsave-excursion $B$7$F$_$?!#$D$$$G$K(B save-match-data $B$b$7$H$/$+!#(B (navi2ch-article-help-echo): $BF1>e!#(B 2002-07-15 Nanashi San $BJL%G%#%l%/%H%j$G(B configure $B$7$?;~$N5sF0$rJQ99!#(B make $BCf$K%7%s%\%j%C%/%j%s%/$rD%$k$H!"%]!<%?%V%k$K0MB84X78$r2r7h$G(B $B$-$J$$$_$?$$$J$N$G!"%7%s%\%j%C%/%j%s%/$O(B configure $B;~$KD%$k$h$&$K(B $B$7$?!#(B GNU make $B0J30$N(B make $B$r;H$C$F$$$k>l9g$O!"(Bcvs update $B$N8e$G!"(B % ./config.status --recheck && ./config.status $B$7$F$M!#(B * configure.in: CVS $B$r%A%'%C%/$9$k$h$&$K!#%G%U%)%k%H$G(B cvs -z3$B!#(B $B%=!<%9%G%#%l%/%H%j0J30$G(B configure $B$7$F$$$k>l9g$O(B *.el $B$H(B doc/navi2ch.info $B$r%7%s%\%j%C%/%j%s%/$9$k$h$&$K!#(B * Makefile.am (BUILT_SOURCES): $(srcdir) $B$K!#(B (CLEANFILES): $B:o=|!#(B ($(srcdir)/navi2ch-version.el): navi2ch-version.el $B$+$iJQ99!#(B ($(srcdir)/bcomp.el): bcomp.el $B$+$iJQ99!#(B (Makefiles): $B?7%?!<%2%C%H!#(B (stamp-link): $B:o=|!#(B (update): CVS $B%^%/%m$r;H$&$h$&$K!#(BMakefiles $B%?!<%2%C%H$r;H$&$h$&$K!#(B 2002-07-15 Nanashi San * navi2ch-localfile.el: Author $B$K26$rDI2C!#(B BBS $B$N:n$jJ}$r$b$&$A$g$$>\$7$/$7$F$_$k!#(B (navi2ch-localfile-default-file-modes): $B?7JQ?t!#(B (navi2ch-localfile-default-user-name): $B?7JQ?t!#(B (navi2ch-localfile-func-alist): error-string $B$rF@$k$h$&$K!#(B (navi2ch-localfile-with-lock): $B?7%^%/%m!#(B (navi2ch-localfile-default-user-name): $B?74X?t!#(B (navi2ch-localfile-create-thread): $BL>L5$7$r@_Dj$9$k$h$&$K!#(B default-file-modes $B$r@_Dj$9$k$h$&$K!#(B (navi2ch-localfile-append-message): $BF1>e!#(B (navi2ch-localfile-last-error): $B?7JQ?t!#(B (navi2ch-localfile-send-message): $B%(%i!<$r%7%0%J%k$;$:!"8e$+$ie5-4X?t$r;H$&$h$&$K!#(B * navi2ch-multibbs.el (navi2ch-multibbs-func-alist): board-update $B$H(B board-get-file-name $B$rDI2C!#(B (navi2ch-multibbs-board-update): $B?74X?t!#(B (navi2ch-multibbs-board-get-file-name): $B?74X?t!#(B (navi2ch-2ch-board-update): $B?74X?t!#$$$^$N$H$3$m!"B>$N(B BBS $B$b$3$l(B $B$r;H$&$h$&$K$J$C$F$k$1$I!"(Breadcgi $B$H$+;H$o$J$$HG$KCV$-49$($?J}$,$$(B $B$$$+$b!#(B (navi2ch-2ch-board-get-file-name): $B?74X?t!#(B * navi2ch-localfile.el: $B?7%U%!%$%k!#(B * navi2ch-http-date.el: $B?7%U%!%$%k!#(B * navi2ch-board.el (navi2ch-board-get-file-name): $BCf?H$r(B multibbs $B$K0\F0!#(B (navi2ch-board-update-file): $BCf?H$r(B multibbs $B$K0\F0!#(B * Makefile.am (lisp_LISP): navi2ch-http-date.el navi2ch-localfile.el $B$rDI2C!#(B (update): cvs update $B$N8e$G(B config.status $B$r:F:n@.(B & $B * navi2ch-multibbs.el (navi2ch-2ch-url-to-board): $B:rF|$NJQ99$O4V0c$C(B $B$F$?$N$G=$@5!#(B * navi2ch-vars.el (navi2ch-article-get-url-text): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-get-link-text): url-prop $B$N(B $B=hM}$O(B navi2ch-article-get-url-text $B$,(B non-nil $B$N>l9g$@$1$K!#(B (navi2ch-article-display-link-minibuffer): text $B$,(B string $B$+$I$&$+(B $BD4$Y$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/455 2002-07-13 Nanashi San * navi2ch.el (navi2ch-2ch-url-p): board $B$+(B article $B$K$J$i$J$$>l9g(B $B$O(B nil $B$rJV$9$h$&$K$7$?!#(B * navi2ch-multibbs.el (navi2ch-2ch-url-to-board): $BHf3S$r87L)$K$7$?!#(B $BB>$N%Q%C%1!<%8(B (GNUS $B$H$+(B) $B$+$i(B URL $B$r3+$/;~!"(B2ch $B$O(B Navi2ch $B$G8+(B $B$i$l$k$H$$$$$h$M!"$C$F$3$H$G!#(B ~/.emacs $B$G!"(B (autoload 'navi2ch-browse-url "navi2ch" nil t) (setq navi2ch-browse-url-browser-function 'w3m-browse-url) (setq browse-url-browser-function 'navi2ch-browse-url) $B$_$?$$$J46$8$G;H$($k$h$&$K$J$k!#(B * navi2ch.el (navi2ch-browse-url): $B?74X?t!#(B browse-url-function $B$K@_Dj$G$-$k!#(B (navi2ch-goto-url): $B%\!<%I%P%C%U%!$,$J$$$H$-JQ$@$C$?$N$G!"(B navi2ch-board-select-board -> navi2ch-list-select-board * navi2ch-util.el (navi2ch-browse-url): navi2ch-browse-url-internal $B$KJQ99!#(B (navi2ch-browse-url-internal): navi2ch-browse-url $B$+$iJQ99!#(B navi2ch-browse-url-function $B$r(B browse-url-function $B$KB+G{!#(B * navi2ch-article.el (navi2ch-article-select-current-link): navi2ch-browse-url -> navi2ch-browse-url-internal (navi2ch-article-show-url): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-show-url): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): $BF1>e!#(B * navi2ch-vars.el (navi2ch-browse-url-browser-function): $B?7JQ?t!#(B 2002-07-12 Nanashi San * navi2ch-article.el (navi2ch-article-through-subr): $BHD$N:G8e$N%9(B $B%l$rFI$s$@8e$NF0:n$,5$$KF~$i$J$+$C$?$N$GJQ99!#(B * navi2ch-jbbs-shitaraba.el (navi2ch-js-parse-subject): case-fold-search $B$r(B nil $B$K!#(B (navi2ch-js-parse): $BF1>e!#(B * navi2ch-machibbs.el (navi2ch-machibbs-parse-subject): $BF1>e!#(B (navi2ch-machibbs-parse): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/436 * navi2ch.el (navi2ch-lock): navi2ch-lock-directory $B$r;HMQ$9$k$h$&$K!#(B (navi2ch-unlock): navi2ch-unlock-directory $B$r;HMQ$9$k$h$&$K!#(B (navi2ch-ident-list): navi2ch-ident $B$,4^$^$l$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-lock-name): navi2ch-lock-directory $B$+$i(B $BL>>NJQ99!#@dBP%Q%9$+$iAjBP%Q%9$X!#(B * navi2ch-util.el (navi2ch-boundp): $B?7%$%s%i%$%s4X?t!#(B (navi2ch-fboundp): $B?7%$%s%i%$%s4X?t!#(B (navi2ch-browse-url): browse-url-new-window-flag $B$rM%@h!#(B navi2ch-boundp $B$r;H$&$h$&$K!#(B (navi2ch-lock-directory): $B?74X?t!#(B (navi2ch-unlock-directory): $B?74X?t!#(B * navi2ch-board-misc.el (navi2ch-bm-exec-subr): $B$;$C$+$/(B (sit-for 0) $B$7$F$b%$%Y%s%H$,5/$3$k$H2hLL99?7$5$l$J$/$J$k(B $B$N$G!"(B(discard-input) $B$9$k$h$&$K$7$?!#(B * navi2ch-message.el (navi2ch-message-insert-backup): erase-buffer $B$9$kA0$K(B read-only $B$r2r=|!#(B (navi2ch-message-send-message): str $B$rCf7Q$;$:!"D>@\%P%C%U%!$+$i%3(B $B%T! $B3F%U%!%$%k$K(B $ I d $ $B$rF~$l$^$7$?!#(B M-x navi2ch-ident-list $B$GA4$F$N(B Id $B$rI=<($G$-$k$h!#(B * README: $B%"%&%H%i%$%s%b!<%I$K$7$?!#(B * navi2ch.el (navi2ch-ident-list): $B?74X?t!#(B 2002-07-10 Nanashi San * configure.in: ln -s $B$r%A%'%C%/!#(B * Makefile.am (bcomp.el): $BJL%G%#%l%/%H%j$G$b:n@.$G$-$k$h$&$K!#(B (lisp_LISP): $B?7%?!<%2%C%H(B (stamp-link): $BJL%G%#%l%/%H%j$N>l9g$O%7%s%\%j%C%/%j%s%/$rD%$k!#(B (CLEANFILES): stamp-link $B$r:o=|!#(B * navi2ch.el (navi2ch-use-lock, navi2ch-lock-directory): navi2ch-vars.el $B$K0\F0!#(B * navi2ch-vars.el (navi2ch-use-lock): navi2ch.el $B$+$i0\F0!#%G%U%)(B $B%k%H$r(B t ($B%m%C%/$9$k(B) $B$K!#(B (navi2ch-lock-directory): navi2ch.el $B$+$i0\F0!#(B (navi2ch-update-file): :type $B$,4V0c$C$F$?!#(B $B%^%&%9%U%'%$%9$,$&$6$$$H$$$&?M$,$$$k$_$?$$$J$N$G!"JQ?t$+$i;XDj$G$-(B $B$k$h$&$K$7$F$_$?!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/404-407n * navi2ch-vars.el (navi2ch-list-mouse-face): $B?7JQ?t!#(B (navi2ch-bm-mouse-face): $B?7JQ?t!#(B (navi2ch-article-mouse-face): $B?7JQ?t!#(B * navi2ch-list.el (navi2ch-list-insert-board-names-subr): mouse-face $B$rJQ?t$+$i;XDj$9$k$h$&$K!#(B (navi2ch-list-insert-board-names): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-set-property): mouse-face $B$rJQ(B $B?t$+$i;XDj$9$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-set-link-property): mouse-face $B$rJQ?t$+$i;XDj$9$k$h$&$K!#(B (navi2ch-article-set-link-property): $BF1>e!#(B (navi2ch-article-auto-decode-base64-section): $BF1>e!#(B 2002-07-09 Nanashi San * navi2ch-vars.el (navi2ch-message-mail-address): $B%?%$%W$,0c$C$?$N$GJQ99!#(B (navi2ch-message-remember-user-name): $B%I%-%e%a%s%H$,4V0c$C$F$?$N$G=$@5!#(B (navi2ch-net-check-margin, navi2ch-net-turn-back-step) (navi2ch-net-turn-back-when-aborn): $B;H$C$F$J$+$C$?$N$G:o=|!#(B * navi2ch-net.el (navi2ch-net-file-start): $B;H$C$F$J$+$C$?$N$G:o=|!#(B * navi2ch-mona.el (navi2ch-mona-message-mode-hook): XEmacs $B$@$H$&(B $B$^$/F0$$$F$J$+$C$?$_$?$$$J$s$G!"(Bdefault-text-properties $B$8$c$J$/$F(B extent $B$r;H$&$h$&$K$7$?!#(B * navi2ch-message.el (navi2ch-message-paragraph-separate) (navi2ch-message-paragraph-start): $B?7JQ?t!#(B (navi2ch-message-insert-header): $B%;%Q%l!<%?$r(Bread-only$B$K$7$F$_$?!#(B (navi2ch-message-mode): fill-paragraph $B$G0zMQIt$^$G(B fill $B$7$J$$$h$&$K!#(B * navi2ch.el (navi2ch-kill-emacs-hook): $BITMW$J(B remove-hook $B$r$O$:$7$?!#(B * navi2ch-util.el: defmacro $B$r>e$NJ}$K0\F0!#(B (navi2ch-ifxemacs): $B?7%^%/%m!#(B warning $B$rHr$1$k$?$a$@$1$K(B navi2ch-hogehoge $B$r(B defmacro $B$7$F$?$N$,(B $B7k9=$"$k$N$G!#!#!#(B * navi2ch-article.el (navi2ch-article-set-link-property): GNU Emacs 21 $B$d(B XEmacs $B$K$O(B help-echo $B$H$$$&JXMx$J%W%m%Q%F%#$,$"$k(B $B$N$G$=$l$r;H$&$h$&$K$7$?!#(B (navi2ch-article-get-link-text): $B?74X?t!#(B $B5l(B navi2ch-article-display-link-minibuffer $B$NFbMF$r$[$\%3%T%Z!#(B (navi2ch-article-display-link-minibuffer): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-article-help-echo): help-echo $B%W%m%Q%F%#$G;H$o$l$k(B call-back $B4X?t!#(B 2002-07-08 Nanashi San $B$h$/(B Navi2ch $B$rJ#?t5/F0$7$F%^%:!<$J$3$H$K$J$k$N$G!"%m%C%/$rl9g$O(B navi2ch-lock $B$r8F$V$h$&$K!#(B $B%9%W%i%C%7%e%9%/%j!<%s$NI=<($O(B ~/.navi2ch/init.el $B$r8F$s$@8e$K!#(B kill-emacs-hook $B$KF~$l$k$N$r(B navi2ch-kill-emacs-hook $B$K!#(B (navi2ch-exit): navi2ch-unlock $B$r8F$V$h$&$K!#(B kill-emacs-hook $B$+$i * navi2ch-util.el (toplevel): $B%P%$%H%3%s%Q%$%k;~$K$b(B require $B$9$k(B $B$h$&$K!#(B (navi2ch-set-keymap-default-binding): $B?74X?t!#(BXEmacs $B$H(B GNU Emacs $B$N0c$$$r5[<}!#(B (navi2ch-char-valid-p): $BF1>e!#(B * navi2ch-message.el (navi2ch-message-aa-map): XEmacs $B$G$bF0$/$h$&(B $B$K=$@5!#(B (navi2ch-message-self-insert-aa): $BF1>e!#(B 2002-07-07 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-get-changed-status): $B%3%a%s%H$r$A$g(B $B$$$HDI2C!#(B * navi2ch-article.el (navi2ch-article-add-important-message): prefix $B$,(B non-nil $B$N$H$-$K(B navi2ch-article-add-board-bookmark $B$r8F(B $B$V$h$&$K$7$?(B(typo?)$B!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/344 2002-07-06 Nanashi San * navi2ch-search.el (navi2ch-search-cache-subr): navi2ch-article-get-first-message-from-file $B$r;H$&$h$&$K$7$?!#(B * navi2ch-net.el (navi2ch-net-get-content-subr): unload-feature $B$G(B $B$-$k$h$&!"(Bfset $B$G$O$J$/(B defalias $B$9$k$h$&$K$7$?!#(B * navi2ch-list.el (navi2ch-list-sync): navi2ch-mode-line-identification $B$X$N(B setq $B$r:o=|!#(B (navi2ch-list-search-current-board-cache): $B?74X?t!#(B (navi2ch-list-search): list $B%b!<%I$J$N$K(B navi2ch-bm $B7O$N4X?t$r;H$C(B $B$F$$$?$N$G=$@5!#(B * navi2ch-article.el (navi2ch-article-show-url): lambda $B$NA0$NJN,;~$O(B (point) $B$r;H$&$h$&$K$7$?!#(B (navi2ch-article-next-link): $BITMW$J$N$G:G8e$N(B link $BI=<($r:o=|!#(B (navi2ch-article-previous-link): $BF1>e!#(B (navi2ch-article-fetch-link): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): $BF1>e!#(B * navi2ch-vars.el (navi2ch-message-aa-default-alist): $B?7JQ?t!#%G%U%)(B $B%k%H$N(B AA $B$O$3$C$A$K!#(B (navi2ch-message-aa-alist): AA $B$r>e5-JQ?t$K0\F0!#(B * navi2ch-message.el (navi2ch-message-aa-map): $B?7%-!<%^%C%W!#(B ? $B0J30$r2!$9$HA4It(B navi2ch-message-self-insert-aa $B$r8F$S=P$9!#(B (navi2ch-message-mode-map): navi2ch-message-aa-prefix-key $B$K>e5-%-!<%^%C%W$r%P%$%s%I$9$k$h$&$K!#(B (navi2ch-message-add-aa): $B:o=|!#(B (navi2ch-message-self-insert-aa): $B?74X?t!#(B $B$H$j$"$($:!"(BC-c C-a KEY $B$OA4It%P%$%s%I$7$A$c$C$F!"8F$S=P$5$l$?4X?t(B $B$NJ}$G(B alist $B$+$i0z$/$h$&$K$7$^$7$?!#$3$l$G!"C1$K(B aa-alist $B$KCM$r(B $B@_Dj$9$k$@$1$G<+F0E*$K(B AA $B$NDI2C:o=|$,2DG=$K$J$C$?!#(B (navi2ch-message-insert-aa-list): navi2ch-message-aa-default-alist $B$b;H$&$h$&$K!#(B (navi2ch-message-popup-aa-list): ignore-errors $B$r;H$C$F$_$k!#(B * navi2ch-article.el (navi2ch-article-add-board-bookmark): $B?74X?t!#(B (navi2ch-article-add-important-message): C-u a $B$G>e5-4X?t$r8F$V!#(B article-mode $B$+$i(B board-bookmark $B$KEPO?$G$-$k$h$&$K$J$j$^$9$?!#(B FR#531322 * navi2ch-board.el (navi2ch-board-update-buffer): $B?74X?t!#(B (navi2ch-board-add-bookmark-subr): $B?74X?t!#(B (navi2ch-board-add-bookmark): $B>e5-4X?t$r;H$&$h$&$K!#(B * navi2ch-list.el (navi2ch-list-mode-map): navi2ch-list-show-url $B$r(B U $B$K%P%$%s%I!#(B (navi2ch-list-show-url): $B?74X?t!#(B * navi2ch-vars.el (navi2ch-list-board-id-alist): $B$0$X!"$^$?$@$V$C$F$k$7!#(B 2002-07-05 Nanashi San * configure.in: $BJQ?t$r;2>H$9$k:]$O$G$-$k$@$1(B "" $B$G0O$`$h$&$K!#(B (emacstype): configure $B$G;H$&(B Emacs $B$Nl9g$O%Q%C%1!<%8%G%#%l%/%H%j$r8!=P$9$k!#(B $B$?$@$7!"$^$@(B auto-autoloads.el$B!"(Bcustom-load.el$B!"(BMANIFEST.navi2ch $B$J$I$N%Q%C%1!<%8MQ%U%!%$%k$O:n@.$G$-$F$J$$!#(B * navi2ch-article.el (navi2ch-article-select-view-range-subr): *select view range* $B%P%C%U%!$r3NC$9$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/314 * navi2ch-util.el (navi2ch-set-mode-line-identification): $B8GDjJ8;z(B $BNs$8$c$J$/$F!"(Bmode-line-buffer-identification $B$N(B default-value $B$r(B $B;H$&$h$&$K$7$?!#(B * navi2ch.el (navi2ch-make-backup-file-name): $B?74X?t!#(B (navi2ch-make-temp-file): $B?74X?t!#(B (navi2ch-save-info): $B%P%C%/%"%C%W%U%!%$%k$r:n$l$k$h$&$K$7$?!#(B $BJ]B8$N$7$+$?$r0BA4$K$7$?!#(B (navi2ch-load-info): $BJQ$J;~$O%P%C%/%"%C%W%U%!%$%k$+$i$bFI$a$k$h$&(B $B$K$7$?!#(B * navi2ch-board-misc.el (navi2ch-bm-save-info): $B%P%C%/%"%C%W%U%!%$(B $B%k$r:n$k$h$&$K$7$?!#(B * navi2ch-bookmark.el (navi2ch-bookmark-save-info): $B%P%C%/%"%C%W%U%!(B $B%$%k$r:n$k$h$&$K$7$?!#$^$?!"(Bnil $B$N;~$O%;!<%V$7$J$$$h$&$K$7$?!#(B * navi2ch-history.el (navi2ch-history-save-info): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-save-info): $B%P%C%/%"%C%W%U%!%$%k$r(B $B:n$k$h$&$K$7$?!#(B * navi2ch-vars.el (navi2ch-message-aa-alist): AA $BDI2C!#(B 2002-07-04 mami * navi2ch-message.el (navi2ch-message-send-message): $BAw?.8e$K=q$-(B $B9~$_@h%9%l$N%P%C%U%!$K0\F0$9$k$h$&JQ99!#0\F0$O%P%C%U%!$,B8:_$9$k$H(B $B$-$N$_!#(B (navi2ch-message-exit): $BAw?.8e$K=q$-9~$_@h%9%l$N%P%C%U%!$K0\F0$9$k(B $B$h$&JQ99!#%P%C%U%!$,B8:_$7$J$$$H$-$O:n$k!#(B (navi2ch-message-set-name): $B=q$-9~$_@h%9%l$N%P%C%U%!$,B8:_$7$J$$$H(B $B$-$O:n$k!#(B (navi2ch-message-set-mail): $BF1>e!#(B 2002-07-03 Nanashi San * README: $B=q$-D>$7!#(B $BFbMF$,8E$$$7%a%s%F$7$-$l$J$$$N$G%^%K%e%"%k$KM6F3!#(B * NEWS: $B%j%j!<%9A0$K$"$o$F$F:n$k$H$m$/$J$3$H$,$J$$$N$G(B 1.5.2 $B$+$i(B $B$N $B%-%c%C%7%e$,B8:_$9$k$+$I$&$+$G%9%l$r8!:w$G$-$k$h$&$K$7$F$_$^$7$?!#(B $B=P$FMh$k%9%l$O(B search $B$N$H$3$G(B a $B$7$F(B regexp $B$K(B . $B$rF~$l$?$N$HF1$8(B $B$G$9$,!"$A$g$C$T$j9bB.$G$9!#(B article-summary $B$K(B subject $BF~$l$A$c$*$&$+$J$"!#!#!#(B * navi2ch-search.el (navi2ch-search-load-hook): $B?74X?t!#(B (navi2ch-search-load-hook): $B?74X?t!#(B * navi2ch-list.el (navi2ch-list-search-current-category-cache): $B?74X?t!#(B (navi2ch-list-search): $B8!:w>r7o$K%-%c%C%7%e$,B8:_$9$k$+$I$&$+$rDI2C!#(B * navi2ch-board-misc.el (navi2ch-bm-search-current-board-cache): $B?74X?t!#(B (navi2ch-bm-search): $B8!:w>r7o$K%-%c%C%7%e$,B8:_$9$k$+$I$&$+$rDI2C!#(B 2002-07-03 Nanashi San * navi2ch-article.el (navi2ch-article-mode-map): G $B$K(B navi2ch-article-goto-board $B$r%P%$%s%I!#(B (navi2ch-article-goto-board): $B?74X?t!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/276 $B$H$+(B * navi2ch-message.el (navi2ch-message-insert-aa-list): $B%-!<$rI=<((B $B$9$k:]$K(B key-description $B$r;HMQ$9$k$h$&$K$7$?!#(BCtrl + key $B$H$+$b;H(B $BMQ$G$-$k$h$&$K!#$=$N$?$a!"%-!<$,0lJ8;z$G$*$5$^$i$J$$2DG=@-$,$"$k$N(B $B$G(B truncate $B$N$7$+$?$rJQ99!#(B (navi2ch-message-popup-aa-list): AA $B$N%j%9%H$,0l2hLL$K$*$5$^$i$J$$(B $B>l9g$K$=$J$($F%9%/%m!<%k$G$-$k$h$&$K$7$?!#(B * navi2ch-vars.el (navi2ch-message-aa-alist): $B@bL@$rDI2C!#(B (navi2ch-message-popup-aa-width): $BI=<($9$k:]$N(B truncate $B$N$7$+$?$r(B $BJQ$($?$N$G%G%U%)%k%HCM$rJQ99!#(B 2002-07-03 Taiki SUGAWARA callback $B$rDj5A$9$k0Y$N;EAH$_$r:n$C$F$_$^$7$?!#(B * navi2ch-jbbs-net.el (navi2ch-jbbs-variable-alist): $B?7JQ?t!#(B (navi2ch-jbbs-subject-callback): navi2ch-multibbs-defcallback $B$GDj(B $B5A$9$k$h$&$K!#(B * navi2ch-jbbs-shitaraba.el (navi2ch-js-variable-alist): $B?7JQ?t!#(B (navi2ch-js-subject-callback): navi2ch-multibbs-defcallback $B$GDj5A(B $B$9$k$h$&$K!#(B (navi2ch-js-article-callback): $BF1>e(B * navi2ch-machibbs.el (navi2ch-machibbs-variable-alist): $B?7JQ?t!#(B (navi2ch-machibbs-subject-callback): navi2ch-multibbs-defcallback $B$GDj5A$9$k$h$&$K!#(B (navi2ch-machibbs-article-callback): $BF1>e!#(B * navi2ch-multibbs.el (navi2ch-multibbs-variable-alist): $B?7JQ?t!#(B bbstype $BKh$NJQ?t$O$3$l$K@_Dj$9$k!#(B (navi2ch-multibbs-defcallback): $B?7%^%/%m!#(Bnavi2ch-net-update-file $B$KEO$9%3!<%k%P%C%/$rDj5A$9$k!#(B (navi2ch-multibbs-regist): variable-alist $B$b0z?t$K * navi2ch-machibbs.el (navi2ch-machibbs-subject-callback): $B%P%C%U%!(B $B$NJ8;z%3!<%I$r(B decode $B$9$k$h$&$K$7$F$_$?!#(B BBS$B$4$H$K$3$l$d$k$N$O>iD9$J$N$GE}0lE*$J$7$/$_$,M_$9$$!#(B * navi2ch-multibbs.el: $B%U%!%$%k$NJ8;z%3!<%I$r(B iso-2022-jp $B$KJQ99!#(B * navi2ch-vars.el (navi2ch-list-valid-host-regexp): .machibbs.com $B$rDI2C!#(B (navi2ch-message-aa-alist): AA $BDI2C!#(B * navi2ch-list.el (navi2ch-list-ignore-category-list): $B$^$A#B#B#S(B $B$r:o=|!#(B 2002-07-02 mami * navi2ch-directory.el (navi2ch-directory-set-subject-list): .dat $B%U%!%$%kL>$r?tCM$H$7$F9_=g$G(B sort $B$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/165 2002-07-02 Nanashi San * navi2ch-vars.el (navi2ch-message-force-sync): $B?7JQ?t!#(B * navi2ch-message.el (navi2ch-message-send-message): $B>e5-JQ?t$r(B navi2ch-article-sync $B$N0z?t$K!#(B $B$G$b!"(Bsend $B8e$K(B not updated $B$K$J$k$J$!!#(Bwait $BA}$d$9$7$+$J$$$+(B? * navi2ch-list.el (navi2ch-list-insert-bookmarks): $BF1$8%V%C%/%^!<(B $B%/%N!<%I$,=P$FMh$?$i!"0JA0DI2C$7$?%N!<%I$r:o=|$9$k$h$&$K$7$?!#(B $B8e$+$i=P$FMh$kJ}$,E,@Z$JL>A0$,$D$$$F$k$C$]$$$N$G!#!#!#(B FR#572681 2002-07-02 Nanashi San Navi2ch $B$r(B unload $B$G$-$k$h$&$K$7$F$_$^$7$?!#(BM-x navi2ch-unload $B$G$9!#(B .emacs $B$d(B ~/.navi2ch/init.el $B$G?'!9$d$C$F$k?M$O(B navi2ch-unload-hook $B$GA]=|$9$k$h$&$K$7$F$A$g!#(B * navi2ch.el (navi2ch-unload): $B?74X?t!#(B * navi2ch-article.el (navi2ch-article-kill-emacs-hook): $B?74X?t!#(B (kill-emacs-hook): $B>e5-4X?t$r(B add-hook $B$9$k$h$&$K!#(B (navi2ch-article-unload): $B?74X?t!#(B (navi2ch-article-unload-hook): $B?7JQ?t!#(B (navi2ch-article-mode-menu): toplevel $B$K!#(B * navi2ch-articles.el (navi2ch-articles-mode-menu): toplevel $B$K!#(B * navi2ch-board-misc.el (navi2ch-bm-get-property-internal) (navi2ch-bm-set-property-internal, navi2ch-bm-get-board-internal) (navi2ch-bm-get-article-internal, navi2ch-bm-exit-internal): nil $B$K(B fset $B$7$F$?$N$r6u$N4X?t$K!#(B * navi2ch-board.el (navi2ch-board-mode-menu): toplevel $B$K!#(B * navi2ch-bookmark.el (navi2ch-bookmark-mode-menu): toplevel $B$K!#(B * navi2ch-directory.el (navi2ch-directory-mode-menu): toplevel $B$K!#(B * navi2ch-history.el (navi2ch-history-mode-menu): toplevel $B$K!#(B * navi2ch-list.el (navi2ch-list-mode-menu): toplevel $B$K!#(B * navi2ch-message.el (navi2ch-message-mode-menu): toplevel $B$K!#(B * navi2ch-search.el (navi2ch-search-mode-menu): toplevel $B$K!#(B 2002-07-02 Nanashi San WC $B=*$o$C$?$N$G:#99$G$9$,!#!#!#(B * navi2ch-vars.el (navi2ch-list-board-id-alist): $B?7JQ?t!#(B * navi2ch-list.el (navi2ch-list-board-id-from-url): $B?74X?t!#(B (navi2ch-list-make-board-txt): $B>e5-4X?t$r;H$&$h$&$K!#(B 2002-07-02 mami * navi2ch-machibbs.el (navi2ch-machibbs-article-to-url): $B0z?t$N(B start, end, nofirst $B$r%5%]!<%H!#(B 2002-07-01 Taiki SUGAWARA * Merge: navi2ch-multibbs-1-5-2 $B;^$r%^!<%8!#(B multibbs patch $B$r:G=i$KEv$F$?$H$-$NJQ99E@$,$"$s$^$7=q$$$F$J$+$C$?(B $B$N$G$3$3$K=q$$$H$-$^$9!#(B $B$b$H$b$H$N(B 2ch $BM3Mh$N%3!<%I$N0lIt$O(B navi2ch-multibbs.el $B$N(B navi2ch-2ch-* $B$K0\$C$F$^$9!#(Bnavi2ch-2ch.el $B$r:n$C$?J}$,$$$$$N$+$b!#(B multibbs patch $B$,$d$C$F$$$k;v$O(B $B!&%U%!%$%k$r$l$N7G<(HD$K9g$o$;$k!#(B $B etc.txt $B$K=q$/$H$-$K9%$-$J(B id $B$,;H$($k$h$&$K$7$F$_$k(B($BB?J,(B)$B!#(B * navi2ch-multibbs.el (navi2ch-multibbs-send-message): bbs $B$Ne!#(B 2002-06-30 Taiki SUGAWARA * navi2ch-machibbs.el (navi2ch-machibbs-url-to-board): regexp $B$r=$(B $B@5!#(B 2002-06-30 Taiki SUGAWARA multibbs $B4XO"$N(B *-cb $B$H$$$&4X?t$r(B *-callback $B$KJQ99!#(B navi2ch-net-update-file $B$N0z?t$Ke!#(B * navi2ch-jbbs-shitaraba.el (toplevel): $B$H$j$"$($:%X%C%@$rIU$1$k!#(B $B%U%!%$%k$NJ8;z%3!<%I$r(B iso-2022-jp $B$KJQ99!#(B (navi2ch-js-func-alist): navi2ch-multibbs-func-alist $B$NJQ99$K9g$o$;$k!#(B (navi2ch-js-subject-callback): navi2ch-net-update-file $B$NJQ99$K9g$o$;$k!#(B (navi2ch-js-article-callback): $BF1>e(B * navi2ch-jbbs-net.el (toplevel): $B$H$j$"$($:%X%C%@$rIU$1$k!#(B $B%U%!%$%k$NJ8;z%3!<%I$r(B iso-2022-jp $B$KJQ99!#(B (navi2ch-jbbs-func-alist): navi2ch-multibbs-func-alist $B$NJQ99$K9g$o$;$k!#(B (navi2ch-jbbs-subject-callback): navi2ch-net-update-file $B$NJQ99$K9g$o$;$k!#(B * navi2ch-multibbs.el (toplevel): $B$H$j$"$($:%X%C%@$rIU$1$k!#(B (navi2ch-multibbs-func-alist): docstring $B$r>/$7A}$d$7$F$_$k!#(B p -> bbs-p subject-cb -> subject-callback (navi2ch-multibbs-get-bbstype-subr): navi2ch-multibbs-func-alist $B$NJQ99$K9g$o$;$k!#(B (navi2ch-multibbs-subject-callback): navi2ch-net-update-file $B$NJQ99$K9g$o$;$k!#(B (navi2ch-2ch-subject-callback): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-make-subject-txt): navi2ch-net-update-file $B$NJQ99$K9g$o$;$k!#(B * navi2ch-list.el (navi2ch-list-make-board-txt): navi2ch-net-update-file $B$NJQ99$K9g$o$;$k!#(B * navi2ch-net.el (navi2ch-net-update-file): $B0z?t(B func $B$N4X?t$r(B buffer $B$KBP$7$FA`:n$9$k4X?t$KJQ99!#Ev multibbs branch $B$,$H$j$"$($:F0$/$h$&$K$J$j$^$7$?$G$9!#(B * navi2ch-multibbs.el (toplevel): navi2ch $B$r(B require $B$9$k$h$&$K!#(B * Makefile.am (lisp_LISP): navi2ch-jbbs-net.el, navi2ch-jbbs-shitaraba.el, navi2ch-machibbs.el, navi2ch-multibbs $B$rDI2C(B * navi2ch.el (toplevel): navi2ch-jbbs-net, navi2ch-jbbs-shitaraba, navi2ch-machibbs, navi2ch-multibbs $B$r(B require $B$9$k$h$&$K!#(B 2002-06-27 NOKUBI Takatsugu * multibbs-support-1-5-2 branch $B:n@.(B * navi2ch-multibbs.el: $BDI2C(B * navi2ch-jbbs-shitataraba.el: $BF1>e(B * navi2ch-jbbs-net.el: $BF1>e(B * navi2ch-machibbs.el: $BF1>e(B part 5 $B$N(B 435 $B$5$s$K$h$k%Q%C%A$rEv$F$?!#$G$-$k$@$1(B HEAD $B$KDI=>$5$;$kM=Dj!#(B ================ multibbs branch $B$N(B ChangeLog $B$*$o$j(B ================ 2002-07-01 Nanashi San * navi2ch-util.el (navi2ch-propertize): $B?74X?t!#(BEmacs 21 $B$N(B propertize $B4X?tJXMx$J$N$G!#(B * navi2ch-article.el (navi2ch-article-auto-decode-base64-section): propertize -> navi2ch-propertize * navi2ch-splash.el (navi2ch-splash-insert-image): propertize -> navi2ch-propertize * navi2ch-splash.el (navi2ch-splash-insert-text): propertize -> navi2ch-propertize * navi2ch-board-misc.el (navi2ch-bm-select-article): window-configuration $B$rJ]B8$7$F$*$-!"%(%i!<$,5/$-$?;~$O85$KLa$9$h(B $B$&$K$7$F$_$?!#(B * navi2ch-board.el (navi2ch-board-expire): $B%U%!%$%k$N>C5n$O(B navi2ch-bm-remove-article-subr $B$K$^$+$;$k$h$&$K$7$?!#(B $B$H$3$m$G!"(Bnavi2ch-bookmark-expire-bookmark-p $B$N@bL@$HF0:n$,?)$$0c$C(B $B$F$k$_$?$$$G$9$,!"!"!"(B * navi2ch-board-misc.el (navi2ch-bm-remove-article-subr): board $B$N(B $B99?7$O>e0LAX$K$^$+$;$F!"$3$3$G$O$$$8$i$J$$$h$&$K$7$?!#(B d $B$7$?%/%=%9%l$r(B hide $B%b!<%I$G(B m a m R $B$G$-$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-message-aa-alist): AA $BDI2C!#(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): `mR' $B$K(B navi2ch-bm-remove-mark-article $B$r%P%$%s%I!#(B (navi2ch-bm-remove-article-subr): 2 $BHVL\$N0z?t$KJ#?t$N%9%l$r;XDj$G(B $B$-$k$h$&$K$7$?!#$=$N$&$A(B expire $B$N%U%!%$%k>C5n4X78$b$3$3$K=8$a$k$H(B $B$-$l$$$+$b!#(B($B$=!<$9$k$H(B navi2ch-board.el $B$K0\F0$7$?$[$&$,$$$$$+$J(B?) (navi2ch-bm-remove-mark-article): $B?74X?t!#(B 2002-06-30 Nanashi San * navi2ch-article.el (navi2ch-article-copy-title): $B0z?t$r * navi2ch-article.el (navi2ch-article-cached-subject): $B=q$-D>$7!#(B $BHD$N%9%l0lMw$+$i$b%9%l%?%$%H%k$r * navi2ch-vars.el (navi2ch-message-popup-aa-width): $B?7JQ?t!#(B * navi2ch-message.el (navi2ch-message-insert-aa-list): $B?74X?t!#(B (navi2ch-message-popup-aa-list): insert $B$9$kItJ,$N%M%9%H$,?<$/$J$C(B $B$?$N$GJ,N%!#(Bfit-window-to-buffer $B$9$k$N$r$d$a$?!#(B * navi2ch-article.el (navi2ch-article-url-to-article): http://pc.2ch.net/test/read.cgi/unix/1023884490 $B$N$h$&$J7A<0$N(B URL $B$rJQ49$9$k$H(B '(number . 1023884490.0) $B$H$J$C$F$7$^$C$F$$$?$N$r=$@5!#(B * navi2ch-bookmark.el (navi2ch-bookmark-fetch-article): navi2ch-board-misc.el $B$HF1MM!#(B (navi2ch-bookmark-fetch-mark-article): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-fetch-article): $B0z?t(Bmax-line $B$,;H$o$l$F$J$+$C$?$N$G!"Be$o$j$K(B force $B$H$7$F(B navi2ch-article-fetch-article $B$KEO$9$h$&$K!#(B (navi2ch-bm-fetch-mark-article): $B0z?t$rl=j$rJQ$($F$_$?!#(B (navi2ch-net-send-message): $B%a%C%;!<%8$r%]%9%H$7$?8e$O@\B3$r@Z$k$h(B $B$&$K$7$F$_$?!#(Bsend message -> not updated $B$N3NN($,2<$,$C$?$+$J!#(B * navi2ch-vars.el (navi2ch-message-wait-time): 1 $BIC$@$H99?7$5$l$J(B $B$$$3$H$,B?$$$N$GD9$/$7$F$_$?!#(B * navi2ch-message.el (navi2ch-message-send-message): wait $B$rD9$/$7(B $B$?$iD9$/$FIT0B$K$J$C$?$N$G%a%C%;!<%8$rDI2C!#(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): navich-bm-remove-article $B$r(B `R' $B$K%P%$%s%I!#(B (navi2ch-bm-remove-article-subr): $B?74X?t!#(B (navi2ch-bm-remove-article): $B?74X?t!#(B $B;XDj$7$?%l%9$K4X$9$k>pJs$r%9%+$C$HK:$l$k!#(B FR#572678 FR#572680 * navi2ch-article.el (navi2ch-article-recenter): $B8=:_$N%P%C%U%!$,(B $B%&%$%s%I%&$r;}$C$F$$$k;~$N$_!"$=$N%&%$%s%I%&$NI=<(0LCV$rJQ$($k!#(B (navi2ch-article-goto-number): $B>r7oJ,$1$r(B `navi2ch-article-recenter' $B$K0\F0!#(B 2002-06-29 Nanashi San * navi2ch-message.el (navi2ch-message-mode-map): C-c C-a ? $B$K(B navi2ch-message-insert-aa $B$r%P%$%s%I!#(B (navi2ch-message-popup-aa-list): $B?74X?t!#(B (navi2ch-message-insert-aa): $B?74X?t!#(B $B$3$l$GK:$l$C$]$$O3$l$b(B AA $BF~NO$7$^$/$j!#(B FR#572686 * navi2ch-mona.el (navi2ch-mona-on-message-mode): $B?7JQ?t!#(B (navi2ch-mona-message-mode-hook): $B?74X?t!#(B $B%l%9$r=q$/%P%C%U%!$r%b%J!<%U%)%s%H$K$9$k!#(B (navi2ch-mona-setup): navi2ch-mona-message-mode-hook $B$r(B add-hook $B$9$k$h$&$K!#(B (navi2ch-mona-undo-setup): navi2ch-mona-message-mode-hook $B$r(B remove-hook $B$9$k$h$&$K!#(B FR#531325 * navi2ch-article.el (navi2ch-article-view-article): point-stack $B$K0JA0$N0LCV$,J]B8$5$l$k$h$&!"(Bsync $B$7$F$+$i(B goto-number $B$9$k$h$&$K(B $B$7$?!#HV9fIU$-%j%s%/$rF'$s$@;~$K!"$A$g$C$HCY$/$J$k$+$b!#(B FR#572691 * navi2ch-util.el (navi2ch-online-indicator): risky-local-variable (navi2ch-offline-indicator): $BF1>e(B FR#572685 2002-06-29 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-view-article-from-file): $B0z(B $B?t$rEO$7$?$^$^$G$7$?!&!&!&(B * navi2ch-directory.el (navi2ch-directory-set-current-board): navi2ch-bm-board-name-from-file -> navi2ch-board-name-from-file * navi2ch-board-misc.el (navi2ch-bm-insert-subject): navi2ch-board-from-file-p $B$r;H$&$h$&$K!#(B (navi2ch-bm-select-article): $BF1>e!#(B (navi2ch-bm-fetch-article): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-from-file-p): $B:o=|(B (navi2ch-article-view-article): navi2ch-article-from-file-p $B$N=i4|(B $B2=$r:o=|!#(B (navi2ch-article-view-article-from-file): $BF1>e!#(B navi2ch-bm-board-name-from-file -> navi2ch-board-name-from-file (navi2ch-article-sync): navi2ch-board-from-file-p $B$r;H$&$h$&$K!#(B (navi2ch-article-sync-from-file): $BF1>e!#(B $B0z?te!#(B (navi2ch-article-write-message): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-from-file-p): $B?74X?t!#(Bfrom-file $B$+$I$&$+$rH=CG$9$k!#(B * navi2ch-vars.el (navi2ch-board-name-from-file): navi2ch-bm-board-name-from-file $B$+$i%j%M!<%`!#(Bnavi2ch-bm-* $B$8$c$J(B $B$/$7$A$c$$$^$7$?!#$4$a$s$J$5$$!#(B 2002-06-28 Nanashi San * navi2ch-util.el (navi2ch-base64-susv3-begin-delimiter-regexp): $B?7JQ?t!#(B (navi2ch-base64-susv3-end-delimiter-regexp): $B?7JQ?t!#(B (navi2ch-base64-write-region): $BCN$i$s4V$K(B uuencode $B$,(B base64 $B$rEG(B $B$1$k$h$&$K$J$C$F$?(B (SUSv3 $B$+$i$_$?$$(B) $B$N$G!"$=$N7A<0$K$bBP1~!#(B `navi2ch-base64-insert-file' $B$N7A<0$bJQ$($k$+(B? * navi2ch-vars.el (navi2ch-article-show-url-number): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-show-url-subr): 'l' $B$r2!$9$H(B $B>e5-JQ?t$N?t$@$1:G?7$N%l%9$rI=<($9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/184 read-char $B;HMQ$N%/%j!<%s%"%C%W!#F0:n$,JQ$K$J$C$?$H$3$O;XE&$7$F$M!#(B * navi2ch-article.el (navi2ch-article-select-view-range-subr): navi2ch-read-char $B$r;H$&$h$&$K!#(B (navi2ch-article-show-url): navi2ch-read-char-with-retry $B$r;H$&$h(B $B$&$K!#(B (navi2ch-article-show-url-subr): $BF1>e!#(B (navi2ch-article-copy-title): $BF1>e!#(B (navi2ch-article-decode-message): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): navi2ch-read-char-with-retry $B$r;HMQ$9$k$h$&$K!#(B (navi2ch-bm-show-url-subr): $BF1>e!#(B (navi2ch-bm-copy-title): $BF1>e!#(B (navi2ch-bm-sort): $BF1>e!#(B (navi2ch-bm-search): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-search): navi2ch-read-char-with-retry $B$r;HMQ$9$k$h$&$K!#(B (navi2ch-list-expire): $BF1>e!#(B * navi2ch-util.el (navi2ch-read-char): $B?74X?t!#(B $B%W%m%s%W%HIU$-(B read-char$B!#(B (navi2ch-read-char-with-retry): $B?74X?t!#(B $B$"$j$,$A$J%k!<%W$r$^$H$a$F$_$?!#(B (navi2ch-y-or-n-p): navi2ch-read-char-with-retry $B$r;HMQ$9$k$h$&$K!#(B 2002-06-28 Nanashi San * navi2ch-util.el (navi2ch-chop-/): $B?74X?t!#(B (navi2ch-rename-file): $B?74X?t!#(BMeadow $B$@$H(B `/' $B$G=*$o$k%U%!%$%kL>(B $B$r;HMQ$9$k$H8G$^$k$=$&$J$N$G!#!#!#(B * navi2ch.el (navi2ch-change-log-directory): $B>e5-4X?t$r;HMQ$9$k$h(B $B$&$K!#(B (navi2ch-update): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/166 * navi2ch-list.el (navi2ch-list-insert-bookmarks): insert $B$9$k:]!"(B $B%j%9%H$N=gHV$rH?BP$K$9$k$h$&$K!#(B (navi2ch-list-get-board-name-list): append $B$9$k=gHV$r5U$K!#(B list-mode $B$N%V%C%/%^!<%/$N=gHV$,JQ$@$C$?$N$GJQ$($F$_$?!#$h$=$K$O1F(B $B6A$J$$$H;W$&$s$@$,!"$A$H?4G[!#(B * navi2ch-mona.el (navi2ch-mona-set-font-family-name): $B?74X?t!#(B (navi2ch-mona-font-family-name): $B>e5-4X?t$r;HMQ$9$k$h$&$K!#(B $B%P%$%H%3%s%Q%$%k;~$K(Bdolist$B%^%/%m$,E83+$5$l$k$h$&!"(Bsetter $B$rJ,N%!#(B $B$H$3$m$G!"(BEmacs 21.2 $B$@$H(B customize-group navi2ch-mona $B$G$3$NJQ?t(B $B$r$&$^$/JT=8$G$-$J$$$_$?$$!#(Bcustomize $B$K>\$7$$?M$N9_NW%-%\%s%L!#(B * navi2ch-net.el (navi2ch-net-update-file-diff): $B$A$c$s$H(B Last-Modified -> If-Modified-Since $B$,F0$/$h$&$K$J$C$?$N$G!"99?7Fb(B $BMF$,(B \n $B$N$_$N>l9gJ,$1$r%3%a%s%H%"%&%H!#:rF|$N(B navi2ch-article.el $B$NJQ99$H9g$o$;!"$3$l$G(B m a m i $B$9$l$P%U%!%$%k$N(B 'time $BB0@-$,$A$c$s(B $B$HJ]B8$5$l$k$O$:!#(B 2002-06-28 Taiki SUGAWARA * navi2ch-directory.el: $B?7%U%!%$%k!#%G%#%l%/%H%j$K$"$k%9%l$rA4$FI=(B $B<($9$k%b!<%I!#(B * navi2ch.el (toplevel): navi2ch-directory $B$r(B require $B$9$k$h$&$K!#(B (navi2ch-split-window): $B?74X?t!#(B (navi2ch-goto-url): navi2ch-split-window $B$r;H$&$h$&$K!#(B (navi2ch-find-file): navi2ch-article-find-file $B$+$i%j%M!<%`!#%G%#(B $B%l%/%H%j$r;XDj$7$?>l9g$O(B navi2ch-directory $B$r8F$V$h$&$K!#(B navi2ch-split-window $B$r;H$&$h$&$K!#(B * navi2ch-vars.el (navi2ch-global-map): C-cC-f $B$r(B navi2ch-find-file $B$KJQ99!#(B * navi2ch-util.el (navi2ch-filename-to-url): $B?74X?t!#(B * navi2ch-search.el (navi2ch-search-article-regexp): navi2ch-article-get-first-message $B$r;H$&$h$&$K!#(B * navi2ch-list.el (navi2ch-list-select-board): navi2ch-split-window $B$r;H$&$h$&$K!#(B (navi2ch-list-two-pane): $B:o=|!#(B * navi2ch-bookmark.el (navi2ch-bookmark-fetch-article): navi2ch-article-get-first-message $B$r;H$&$h$&$K!#(B * navi2ch-board.el (navi2ch-board-get-file-name): file:// $B$G$O$8$^$C(B $B$F$$$?$i!"$=$N%U%!%$%kL>$rJV$9$h$&$K!#(B (navi2ch-board-two-pane) $B:o=|!#(B * navi2ch-board-misc.el (navi2ch-bm-insert-subject): $B%U%!%$%k$+$i(B $Bl9g$K!"%U%!%$%kL>(B $B$r(B item $B$G$O$J$/(B navi2ch-article-get-file-name() $B$GF@$k$h$&$K!#(B (navi2ch-bm-select-article): navi2ch-split-window $B$r;H$&$h$&$K!#(B $B%U%!%$%k$+$il9g$K(B navi2ch-article-view-article-from-file $B$r(B $B;H$&$h$&$K!#(B * navi2ch-article.el (navi2ch-article-get-url): $B0z?t$K(B no-kako $B$r(B $B$K$9$k$h$&$K!#(B (navi2ch-article-get-first-message): $B?74X?t!#(Bcurrent-buffer $B$N(B article $B$N:G=i$N(B message $B$rJV$9!#(B (navi2ch-article-get-first-message-from-file): $B?74X?t!#(BFILE $B$G;XDj(B $B$5$l$?(B article $B$N:G=i$N(B message $B$rJV$9!#(B (navi2ch-article-view-article-from-file): $B@8@.$9$k(B board, article $B$N$rIaDL$N$b$N$HF1$8$h$&$J46$8$KJQ99!#(Bsync $B$7$?7k2L$,JV$jCM$K$J$k(B $B$h$&$K!#(B (navi2ch-article-sync-from-file): navi2ch-article-message-list $B$O(B $B$3$3$G:n$k$h$&$K$9$k!#@hF,$K0\F0$9$k$h$&$K!#(B (navi2ch-article-find-file): navi2ch-find-file $B$K%j%M!<%`!#(B navi2ch.el $B$K0\F0!#(B (navi2ch-article-two-pane): $B:o=|(B 2002-06-27 Nanashi San * navi2ch-bookmark.el (navi2ch-bookmark-get-buffer): $B?74X?t!#(B (navi2ch-bookmark-sync): $B?74X?t!#(B (navi2ch-bookmark): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-bookmark-mode-map): s $B$K(B navi2ch-bookmark-sync $B$r%P%$%s%I!#(B * navi2ch-article.el (navi2ch-article-save-info): $B%+%l%s%H%P%C%U%!(B $B$,%"!<%F%#%/%k%b!<%I$G$J$/$F$bF0:n$9$k$h$&$K!#(B (navi2ch-article-load-info): $BF1>e!#(B $B$3$l$G%"!<%F%#%/%k%P%C%U%!$,L5$$>l9g$K%\!<%I%b!<%I$+$i(B i $B$7$?>pJs(B $B$,J]B8$5$l$k$O$:!#(B * navi2ch-vars.el (navi2ch-list-valid-host-regexp): $B?7JQ?t!#(B * navi2ch-list.el (navi2ch-list-valid-board): $B?74X?t!#(B $B>e5-JQ?t$r;HMQ$7$F(BURI$B$,#2$A$c$s$M$k$NHD$+$I$&$+$r%A%'%C%/$9$k!#(B (navi2ch-list-make-board-txt): $B>e5-4X?t$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/75 * navi2ch-article.el (navi2ch-article-kill-buffer-hook): kill-buffer-hook $B$G$9$k$3$H$r$^$H$a$?!#(B $B8=:_$N%&%$%s%I%&$,%+%l%s%H%P%C%U%!$G$O$J$$$H$-$O(B navi2ch-article-backward-buffer $B$r8F$S=P$5$J$$$h$&$K!#(B (navi2ch-article-mode): $B>e5-4X?t$r(B add-hook $B$9$k$h$&$K$7$?!#(B 2002-06-27 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-cleanup): buf $B$,6u$N$H$-$O(B kill-buffer $B$7$J$$$h$&$K(B 2002-06-26 Nanashi San * navi2ch-net.el (navi2ch-net-ignore-errors): $B%(%i!<$d(B quit $B;~$K%3(B $B%M%/%7%g%s$N8e;OKv$r$9$k$h$&$K!#(B (navi2ch-net-cleanup-process): $B?74X?t!#(B (navi2ch-net-cleanup-vars): $B?74X?t!#(B (navi2ch-net-cleanup): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-net-send-request): navi2ch-net-cleanup-vars $B$r;H$&$h$&$K!#(B 2002-06-25 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-update-file-diff): $B99?7$7$?FbMF$,(B "\n" $B$@$1$@$C$?>l9g$O(B not-updated $B$H$9$k$h$&$K!#(B 2002-06-23 mami * navi2ch-article.el (navi2ch-article-mode): article $B%b!<%I$N%P%C(B $B%U%!$N(B kill-buffer-hook $B$K(B navi2ch-article-backward-buffer $B$rDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/919 * navi2ch-bookmark.el (navi2ch-bookmark-mode-map): navi2ch-bookmark-move-mark-article $B$r(B "mo" $B$K%P%$%s%I!#(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): navi2ch-bm-display-mark-article $B$r(B "mo" $B$+$i(B "m." $B$KJQ99!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/124 * navi2ch-board.el (navi2ch-board-mode-map): "md" $B$r8e$m$K0\F0!#(B * navi2ch-bookmark.el (navi2ch-bookmark-mode-map): "md", "mi" $B$r8e(B $B$m$K0\F0!#(B 2002-06-23 Nanashi San * navi2ch-e21.el: $BJ8;z%3!<%I$r(B ISO-2022-JP $B$KJQ99!#(B * navi2ch-mona.el: $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/128 2002-06-23 mami * navi2ch-bookmark.el (navi2ch-bookmark-move-mark-article): $B?74X?t!#(B (navi2ch-bookmark-add-subr): message $B$rI=<($7$J$$$h$&$K!#(B (navi2ch-bookmark-add): $B$3$C$A$G(B message $B$rI=<($9$k$h$&$K!#(B * navi2ch-article.el (navi2ch-article-sync): $BI,$:(B navi2ch-article-goto-number $B$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/111-113n 2002-06-23 Nanashi San * navi2ch-net.el (navi2ch-net-status): $B?7JQ?t!#(B (navi2ch-net-ignore-errors): quit $B$r$=$N$^$^>e$KDL$7$F$_$k!#(B (navi2ch-net-cleanup): navi2ch-net-status $B$b=i4|2=$9$k$h$&$K!#(B (navi2ch-net-send-request): $BF1>e!#(B (navi2ch-net-get-status): navi2ch-net-status $B$r;HMQ$9$k$h$&$K!#(B (navi2ch-net-get-header): navi2ch-net-get-status $B$,@.8y$7$?;~$N$_(B $B * navi2ch.el (navi2ch-toggle-offline): navi2ch-util.el $B$+$i0\F0!#(B navi2ch-net-cleanup $B$r8F$V$h$&$K$7$?!#(B * navi2ch-util.el (navi2ch-toggle-offline): navi2ch.el $B$X0\F0!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/95 2002-06-21 mami * navi2ch-board-misc.el (navi2ch-bm-sort-by-date): (interactive "P") $B$rDI2C!#(B (navi2ch-bm-exit): $BC1$KHD0lMw%P%C%U%!$K@Z$jBX$($k$N$G$O$J$/(B navi2ch-list $B$r * configure.in: 1.5.2-DEV $B$K%"%C%W%G!<%H!#(B 2002-06-15 Nanashi San * navi2ch: 1.5.2 $B%j%j!<%9!#(B * configure.in: 1.5.2 $B$K%"%C%W%G!<%H!#(B * Makefile.am (elcdist): tar.gz $B$K%G%#%l%/%H%j$rF~$l$k$h$&$K$7$?!#(B (update): $B?7%?!<%2%C%H!#(B 2002-06-13 mami * navi2ch-board-misc.el (navi2ch-bm-exec-subr): board $B7O%b!<%I$G(B "md" $B$,$A$c$s$HF0$/$h$&$K!"=hM} * navi2ch-net.el (navi2ch-net-send-message-success-p): $B%5!<%P$K$h$C$F!"=q$-9~$_40N;;~$N%a%C%;!<%8$,JQ99$K$J$C$F$$$?$N$GBP(B $B1~!#(B $B$K$J$k$s$8$c$J$+$C$?$N(B? $B%P%$%H%3%s%Q%$%k$9$k$H$-$N(B warning $B$,$&$k$5$+$C$?$N$G(B navi2ch-mona $B$rCf?4$K$A$g$$$$$8$C$F$_$?!#(Bxemacs $B$G$bF0$/;v$@$1$O3NG'$7$?$1$I<+(B $B?.$J$$$N$G%F%9%H$h$m$7$/!#(B * navi2ch.el (navi2ch): navi2ch-mona-enable $B$K1~$8$F(B navi2ch-mona $B$r(B require $B$9$k$h$&$K$7$?!#$3$l$G(B ~/.navi2ch/init.el $B$G(B navi2ch-mona-enable $B$r@_Dj$G$-$k$h$&$K$J$k!#(B * navi2ch-vars.el: $B$3$3$G$O(B navi2ch-mona $B$r%m!<%I$7$J$$$3$H$K$7$?!#(B navi2ch.el $B$G$NJQ99$KH<$$!"%b%J!<%U%)%s%H4X78$NJQ?t$r>o$KDj5A$9$k(B $B$h$&$K$7$?!#(B(Emacs 20$B$G$bBg>fIW$C$]$$$1$I!#!#!#(B) * navi2ch-mona.el: $B$J$s$+%$%s%G%s%H$,JQ$J$H$3$,B?$+$C$?$N$G!"(B mark-whole-buffer -> indent-region $B$7$?!#(B (toplevel): $BCf$G(B base64-hoge $B$r;H$C$F$k$N$G(B navi2ch-util $B$r(B require $B$9$k$h$&$K$7$?!#(B Emacs 20 $B$+$i(B require $B$7$?:]$O(B navi2ch-mona-set-mona-face$B!"(B navi2ch-mona-setup $B$r8F$S=P$5$J$$$h$&$K$7$?!#(B (navi2ch-find-face-gnu): find-face$B$+$iJQ99!#(B navi2ch-$B0J30$NL>A06u4V$r1x$5$J$$$h$&$K!#(B (navi2ch-find-face): $B?7%^%/%m!#(Bemacs/xemacs$B$K1~$8$F(Bfind-face$B$r8F$V!#(B (navi2ch-mona-char-height): $B?7%^%/%m!#(B (navi2ch-set-face-parent): $B?7%^%/%m!#(B (navi2ch-mona-set-mona-face): $B>e5-%^%/%m$r;H$&$h$&$K!#(B (navi2ch-mona-sample-string): mel-b $B$N(B base64-decode-string $B$C$F4V(B $B$K(B \n $B$,F~$k$H%(%i!<$rEG$/$_$?$$$J$N$G3F9T$r(B concat $B$GO"7k!#(B 2002-06-12 mami $B!V(Bnanashi $B$5$s$*$+$($j!3(B($B!-"&!.(B)$B%N!W%j%j!<%9!#(B * navi2ch-board-misc.el (navi2ch-bm-sort-by-date): $B?74X?t!#(B (navi2ch-bm-sort): navi2ch-bm-sort-by-date $B$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/919 http://pc.2ch.net/test/read.cgi/unix/1013457056/955-956n * navi2ch-articles.el (navi2ch-articles-delete-mark-aritcle): $B?74X?t!#(B (navi2ch-articles-mode-map): $B>e5-4X?t$r(B "md" $B$K%P%$%s%I!#(B * navi2ch-board.el (navi2ch-board-hide-mark-article): $B?74X?t!#(B (navi2ch-board-mode-map): $B>e5-4X?t$r(B "md" $B$K%P%$%s%I!#(B (navi2ch-board-delete-bookmark-mark-article): $B?74X?t!#(B (navi2ch-board-bookmark-mode-map): $B>e5-4X?t$r(B "md" $B$K%P%$%s%I!#(B (navi2ch-board-cancel-hide-mark-article): $B?74X?t!#(B (navi2ch-board-hide-mode-map): $B>e5-4X?t$r(B "md" $B$K%P%$%s%I!#(B * navi2ch-bookmark.el (navi2ch-bookmark-cut-mark-article): $B?74X?t!#(B (navi2ch-bookmark-mode-map): $B>e5-4X?t$r(B "md" $B$K%P%$%s%I!#(B * navi2ch-history.el (navi2ch-history-delete-mark-articlle): $B?74X?t!#(B (navi2ch-history-mode-map): $B>e5-4X?t$r(B "md" $B$K%P%$%s%I!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/887 * navi2ch-article.el (navi2ch-article-fetch-link): $B?74X?t!#(B (navi2ch-article-mode-map): $B>e5-4X?t$r(B "i" $B$K%P%$%s%I!#(B fetch $B;~$K%9%l%P%C%U%!$,$"$C$F$bI=<($7$J$$$h$&$K!#(B * navi2ch-article.el (navi2ch-article-view-article): $B0z?t(B dont-display $B$rDI2C!#(B non-nil $B$N$H$-$O(B switch-to-buffer $B$G$O$J$/(B set-buffer $B$9$k!#(B (navi2ch-article-fetch-article): save-excursion $B$7!"$b$H$N%P%C%U%!$K(B switch-to-buffer $B$7$J$$!#(B (navi2ch-article-goto-number): current buffer $B$rI=<($7$F$$$J$$$H$-$O(B navi2ch-article-recenter $B$7$J$$!#(B 2002-06-06 Nanashi San $B5W!9$N(B commit$B!#(Bmami $B$5$s$9$s$^$;$s!#(B * navi2ch-article.el (navi2ch-article-through-subr): navi2ch-article-through-next$B$+$iL>A0$rJQ99!#(B $BCf$G8F$s$G$?(B(interactive-p)$B$r30$G8F$s$G0z?t$H$7$FEO$9;v$K!#(B navi2ch-article-enable-through $B$K(B 'ask $B$rF~$l$F$b(B P $B2!$9$H>o$KJ9$+(B $B$l$A$c$C$F$?$N$G!#(B (navi2ch-article-through-next): navi2ch-article-through-subr $B$r8F(B $B$V$h$&$K$7$?!#(B (navi2ch-article-through-previous): $BF1>e!#(B 2002-05-19 mami * navi2ch-article.el (navi2ch-article-cached-subject): $B%9%l$N%P%C%U%!$,$"$k$H$-$O(B navi2ch-article-current-article $B$+$i%9(B $B%l%?%$%H%k$r$rI=<($9$k$h$&$K!#(B (navi2ch-article-cached-subject-minimum-size): navi2ch-insert-file-contents $B$GA^F~$7$?%5%$%:$b%A%'%C%/$9$k$h$&$K!#(B $B%j%s%/@h%9%l$K%l%9$,(B1$B$D$N$H$-$KL58B%k!<%W$KF~$C$F$$$?$N$G!#(B (navi2ch-article-goto-number-or-board): $B%l%9K\J8$+$i$b%G%U%)%k%H$N(B $B%l%9HV9f$rC5$9$h$&$K!#(B navi2ch-article-find-file $B$GFI$_$3$s$@%9%l$b(B bookmark $B$KF~$l$i$l$k(B $B$h$&$K!#(B * navi2ch-bookmark.el (navi2ch-bookmark-fetch-article): navi2ch-article-get-file-name $B$,(B nil $B$rJV$7$?$H$-$b%(%i!<$K$J$i$J(B $B$$$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-insert-subject): $B%U%!%$%k$+$iFI$s$@%9%l$b(B V, C $B$N%^!<%/$,$D$/$h$&$K!#(B (navi2ch-bm-select-article): $B%U%!%$%k$+$iFI$s$@%9%l$O%U%!%$%k$+$iFI$`$h$&$K!#(B (navi2ch-bm-fetch-article): $B%U%!%$%k$+$iFI$s$@%9%l$O(B fetch $B$7$J$$$h$&$K!#(B * navi2ch-vars.el (navi2ch-bm-board-name-from-file): $B?7JQ?t!#(B * navi2ch-article.el (navi2ch-article-view-article-from-file): navi2ch-bm-board-name-from-file $B$r;H$&$h$&$K!#(B 2002-05-16 mami * navi2ch-article.el (navi2ch-article-through-ask): 1 $B$+(B -1 $B$r0z$-(B $B?t$K$H$j!"5sF0$rJQ$($k$h$&$K!#(B $B0\F0@h$N%9%l%?%$%H%k$rI=<($9$k$h$&$K!#(B (navi2ch-article-through-next): 1 $B$+(B -1 $B$r0z$-?t$K$H$j!"5sF0$rJQ$((B $B$k$h$&$K!#(B board $B%P%C%U%!$r(B recenter $B$9$k$h$&$K!#(B (navi2ch-article-through-previous): navi2ch-article-through-next $B$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/708 http://pc.2ch.net/test/read.cgi/unix/1013457056/742 2002-05-15 mami * navi2ch-article.el (navi2ch-article-cached-subject-minimum-size): $B?74X?t!#(B (navi2ch-article-cached-subject): $B?74X?t!#(B (navi2ch-article-display-link-minibuffer): $B%j%s%/@h$,%-%c%C%7%e$5(B $B$l$F$$$k%9%l$N(B URL $B$N$H$-!"%9%l%?%$%H%k$rI=<($9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/721 http://pc.2ch.net/test/read.cgi/unix/1013457056/726 * navi2ch-article.el (navi2ch-article-display-link-minibuffer): message $B$rD4@0!#(B major-mode $B$,(B navi2ch-article-mode $B$N$H$-$@$1=hM}$9$k$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-renumber): (interactive) $B$rDI2C!#(B 2002-05-11 mami * navi2ch-article.el (navi2ch-article-next-link): $B0\F0$7$J$+$C$?$H(B $B$-$b%j%s%/@h$rI=<($9$k$h$&$K!#(B (navi2ch-article-previous-link): $BF1>e!#(B $B%9%l$K%l%9$,$J$$$H$-(B ($BA4%l%9$r(B d $B$7$?$H$-$H$+(B) $B$K(B g $B$,%(%i!<$H$J$i(B $B$J$$$h$&$K!#(B * navi2ch-article.el (navi2ch-article-goto-number-or-board): from $B$,(B nil $B$+$I$&$+%A%'%C%/!#(B (navi2ch-article-goto-number): num $B$,(B nil $B$+$I$&$+%A%'%C%/!#(B 2002-05-07 mami * navi2ch-bookmark.el (navi2ch-bookmark-yank): yank $B8e$N%+!<%=%k0L(B $BCV$,85$N9T$N$^$^$K$J$k$h$&$K!#(B $B0lHV2<$+$iO"B3$G(B d $B$9$k$N$KJXMx$J$h$&$K!#(B * navi2ch-articles.el (navi2ch-articles-delete): save-excursion $B$9$k0LCV$rJQ99!#(B $B0lHV2<$N%l%9$Ge$K0\F0!#(B * navi2ch-board.el (navi2ch-board-delete-line): $B0lHV2<$N%l%9$Ge$K0\F0!#(B * navi2ch-bookmark.el (navi2ch-bookmark-delete-subr): save-excursion $B$9$k0LCV$rJQ99!#(B $B0lHV2<$N%l%9$Ge$K0\F0!#(B (navi2ch-bookmark-cut): save-excursion $B$9$k0LCV$rJQ99!#(B 2002-05-06 mami * navi2ch-util.el (navi2ch-temp-directory): $B%^%/%m$rGQ;_!#4X?t$H$7$F:n@.!#(B navi2ch-directory $B0J2<$N(B tmp/ $B%G%#%l%/%H%j$r;HMQ$9$k$h$&$K!#(B * navi2ch-net.el (navi2ch-net-get-content-subr-with-temp-file): $B%^%/%m(B navi2ch-temp-directory $B$G$O$J$/4X?t(B navi2ch-temp-directory $B$r;H$&$h$&$K!#(B * navi2ch-article.el (navi2ch-article-call-aadisplay): $BJQ?t(B temporary-file-directory $B$G$O$J$/4X?t(B navi2ch-temp-directory $B$r;H$&$h$&$K!#(B * navi2ch.el (navi2ch-change-log-directory): $BF1>e!#(B 2002-04-18 mami * navi2ch-list.el (navi2ch-list-make-board-txt): $BHD0lMw(B html $BCf$N(B $B$N(B a $B$,>.J8;z$G$bF0$/$h$&$K!#(B 2002-04-09 $B%?%+%N(B <504@unix.2ch.net> * navi2ch-board-misc.el (navi2ch-bm-mode-map): "m?" $B$K(B navi2ch-bm-mark-by-query $B$r@_Dj!#(B (navi2ch-bm-mode-map): "mb" $B$K(B navi2ch-bm-add-bookmark-mark-article $B$r(B $B@_Dj!#(B (navi2ch-bm-add-bookmark-mark-article): $B?74X?t!#(B (navi2ch-bm-mark-by-query): $B?74X?t!#(B 2002-04-07 Taiki SUGAWARA * navi2ch-board.el (navi2ch-board-save-info): logo $B$r(B save $B$7$J$$(B $B$h$&$K$?!#(B * navi2ch-board.el (navi2ch-board-expire): navi2ch-board-expire-bookmark-p $B$G(B bookmark $B$r(B expire $B$9$k$+$I$&$+(B $BH=CG$9$k$h$&$K$7$?!#(B navi2ch-bookmark-delete-article-all $B$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/460 * navi2ch-bookmark.el (navi2ch-bookmark-delete-key): $B?74X?t!#(B (navi2ch-bookmark-delete-article): $BF1>e!#(B (navi2ch-bookmark-delete-article-all): $BF1>e!#(B (navi2ch-bookmark-delete-subr): navi2ch-bookmark-delete-key $B$r;H$&(B $B$h$&$K!#(B * navi2ch-vars.el (navi2ch-board-expire-bookmark-p): $B?7JQ?t!#(B bookmark $B$b(B expire $B$9$k$+$I$&$+!#(B 2002-04-02 mami * navi2ch-board-misc.el (navi2ch-bm-goto-other-column): $B%9%l%?%$%H%k$,(B nil $B$N>l9g$O(B navi2ch-bm-empty-subject $B$G8!:w!#(B (navi2ch-bm-mark-region): end $B$,9TF,$N$H$-$OA0$N9T$^$G$r(B mark $B$9$k(B $B$h$&$K!#(B 2002-03-27 mami * navi2ch-article.el (navi2ch-article-recenter): $B0z?t$r(B numberp $B$G(B $B%A%'%C%/!#(B 2002-03-24 mami * navi2ch-vars.el (navi2ch-enable-readcgi): $B%G%U%)%k%H$r(B nil $B$K!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/310 (navi2ch-global-map): C-c C-g $B$N(B binding $B$r$O$:$7$?!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/313 * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): navi2ch-article-base64-decode-message $B$r(B M-b $B$+$i(B M-d $B$KJQ99!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/331 2002-03-24 mami SPID Cookie $B$KBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/312 http://pc.2ch.net/test/read.cgi/unix/1013457056/318 * navi2ch-board.el (navi2ch-board-save-spid): $B?74X?t!#(BSPID $B$r%U%!(B $B%$%k$KJ]B8$9$k!#(B (navi2ch-board-load-spid): $B?74X?t!#(BSPID $B$r%U%!%$%k$+$iFI$_9~$`!#(B * navi2ch-message.el (navi2ch-message-send-message): navi2ch-net-send-message $B$r8F$V$H$-(B/$B8F$s$@8e$K>e5-4X?t$G(B SPID $B$r;H(B $B$&$h$&$K!#(B * navi2ch-net.el (navi2ch-net-send-message-get-spid): $B?74X?t!#(B $B%5!<%P$N1~Ez$N(B Set-Cookies: $B$+$i(B SPID $B$r * navi2ch-net.el (navi2ch-net-download-logo): SETTING.TXT $B$N(B BBS_FIGUREHEAD $B$+$i$b%m%4(B URL $B$r * navi2ch-article.el (navi2ch-article-rotate-point): $B?74X?t!#(B stack $B$X(B push $B$7$?0LCV$r=d2s$9$k!#(B (navi2ch-article-mode-map): "R" $B$K(B navi2ch-article-rotate-point $B$r%P%$%s%I!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/94 * navi2ch-article.el (navi2ch-article-show-url): $B%_%K%P%C%U%!$K(B URL $B$rI=<($9$k$h$&$KJQ99(B ($B=$@5(B?) $B!#(B * navi2ch-board-misc.el (navi2ch-bm-show-url): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/198 2002-03-17 mami * navi2ch-board.el (navi2ch-board-make-subject-txt): $B?7%9%/%j%W%H$G(B subback.html $B$N%9%lHV9f$H%9%l%?%$%H%k$N6h@Z$j$,(B $B!V(B: $B!W$+$i!V!'!W$KJQ99$5$l$?$N$KBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/228 * navi2ch-util.el (navi2ch-bigint-add): $B7e$"$U$l$KBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/226-227n 2002-03-07 NOKUBI Takatsugu * navi2ch-article.el (navi2ch-article-show-url-subr): typo $B=$@5(B http://pc.2ch.net/test/read.cgi/unix/1013457056/177 2002-03-06 NOKUBI Takatsugu * navi2ch-board.el (navi2ch-board-insert-subjects): navi2ch-board-hide-updated-article $B$r8+$k$h$&JQ99(B * navi2ch-vars.el (navi2ch-board-hide-updated-article): $B?7JQ?t(B (board-mode $B$G(B + $B$r2!$7$?;~$K(B hide $B$5$l$?%9%l%C%I$r(B $BI=<($9$k$+$I$&$+$NA*Br(B) 2002-02-24 UEYAMA Rui * navi2ch-splash.el (navi2ch-splash-logo-ascii): setq $B$r(B defvar $B$K=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/113 2002-02-24 UEYAMA Rui * navi2ch-splash.el (navi2ch-splash-logo-ascii): $B%"%9%-!<%"!<%HHG$N%m%4$r%b%J!<$K!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/110 2002-02-21 UEYAMA Rui * navi2ch-splash.el: $B?7%U%!%$%k!#(Bnavi2ch $B$N5/F0;~$K%9%W%i%C%7%e(B $B%9%/%j!<%s$rI=<($9$k!#(BWanderlust $B$+$i$b$i$C$?%U%!%$%k$r(B navi2ch $B8~$1$K>/$7$$$8$C$?$@$1$G!"Fb?H$O(B wl-demo.el $B$H$[$H$s$I(B $B$$$C$7$g!#(B * navi2ch-face.el (navi2ch-splash-screen-face): $B?7(B face$B!#(B $B%9%W%i%C%7%e%9%/%j!<%s$GMxMQ$9$k!#(B * navi2ch-util.el (navi2ch-defalias-maybe): $B?7%^%/%m!#(B * navi2ch-vars.el (navi2ch-splash-display-logo): $B?7JQ?t!#(B $B%9%W%i%C%7%e%9%/%j!<%s$N%*%s!?%*%U!"2hA|%U%)!<%^%C%H$NA*Br$K(B $BMxMQ$9$k!#(B * navi2ch.el (navi2ch): $B%9%W%i%C%7%e%9%/%j!<%s$rI=<($9$k$h$&$K!#(B * icons/navi2ch-logo.xpm: $B?7%U%!%$%k!#$3$N2hA|$r%9%W%i%C%7%e(B $B%9%/%j!<%s$GI=<($9$k!#C/$+%^%H%b$J$d$D:n$C$F$/$l!D!#(B * icons/navi2ch-logo.xbm: $B>e$N%U%!%$%k$N(B XBM $BHG!#(B * icons/navi2ch-logo.img: $BF1$8$/(B bitmap-mule $BHG!#(B 2002-02-21 NOKUBI Takatsugu * navi2ch-vars.el (navi2ch-list-bbstable-url): http://www6.ocn.ne.jp/~mirv/2chmenu.html $B$KJQ99(B 2002-02-20 mami * navi2ch-board-misc.el (navi2ch-bm-textize-article): $B%G%#%l%/%H%j$G$O$J$/%U%!%$%kL>$rJ9$/$h$&$KJQ99!#(B $B=>Mh$I$*$j%G%#%l%/%H%j$G$N;XDj$K$bBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/630 2002-02-20 NOKUBI Takatsugu * navi2ch-mona.el (find-face): find-face $BH=JLJ}K!$rJQ99(B 2002-02-18 NOKUBI Takatsugu * navi2ch-vars.el (navi2ch-list-bbstable-url): 2chmenu.html -> bbsmenu.html $B$KJQ99(B 2002-02-15 NOKUBI Takatsugu * navi2ch-mona.el (find-face): apel $B$+$i%3!<%I$rGR * navi2ch.el (navi2ch-exit): navi2ch-ask-when-exit $B$NI>2AJ}K!$r=$@5!#(B n $B$GEz$($k$H$b$&0l2s(B y-or-n-p $B$GJ9$+$l$k$3$H$,$"$C$?!#(B 2002-02-13 mami * navi2ch.el (navi2ch-exit): navi2ch-ask-when-exit $B$,(B nil $B$d(B t $B$N(B $B$H$-$K=*N;$G$-$J$+$C$?$N$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1013457056/14 * navi2ch-article.el $B!V(B>>1>>2$B!W$G!V(B>>1$B!W$+$i!V(B>>2$B!W$K(B TAB $B$GHt$Y$J$+$C$?$N$G!#(B (navi2ch-article-set-link-property): $B%j%s%/8D=j$N@hF,$K(B link-head $B$r$D$1$k$h$&$K!#(B (navi2ch-article-next-link): link-head $B$KHt$V$h$&$K!#(B (navi2ch-article-previous-link): $BF1>e!#(B (navi2ch-article-insert-message): (navi2ch-article-put-cite-face) $B$H(B (navi2ch-article-set-link-property) $B$N=g=x$r5U$K!#(B $B0zMQCf$G$b!V(B>>1$B!W$O%j%s%/$K8+$($?J}$,$$$$$C$7$g!#(B * navi2ch-vars.el (navi2ch-article-number-regexp): $B!V(B>>> 1$B!W$d!V(B<<1$B!W$b%j%s%/$H$J$k$h$&$K!#(B 2002-02-13 Nanashi San * navi2ch-vars.el (navi2ch-list-bbstable-url): bbstable $B$N0LCVJQ99(B $B$KDI=>!#(B 2002-02-11 UEYAMA Rui * navi2ch-vars.el (navi2ch-init-file): "init.el" $B$r(B "init" $B$KJQ99!#(B init.elc $B$,$"$l$P$=$C$A$rFI$_9~$`$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/968 * navi2ch.el (navi2ch): $B>e5-JQ99$KBP1~!#(B 2002-02-11 UEYAMA Rui * navi2ch-article.el (navi2ch-article-display-link-minibuffer): $B$^$@H/8@$N$J$$%l%9$NHV9f$G%(%i!<$K$J$k7o$KBP=h!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/947-950n * navi2ch-mona.el (navi2ch-mona-enable-board-list): $BJQ?t$r(B defcustom $B2=!#(B (navi2ch-mona-disable-board-list): $BF1>e!#(B (navi2ch-mona-pack-space-p): $BF1>e!#(B (navi2ch-mona-font): $B:o=|!#(B (navi2ch-mona-font-height): $B:o=|!#(B (navi2ch-mona12-face): $B?7(B face$B!#(B12$B%I%C%H$N(B mona-face$B!#(B (navi2ch-mona14-face): $B?7(B face$B!#(B14$B%I%C%H$N(B mona-face$B!#(B (navi2ch-mona16-face): $B?7(B face$B!#(B16$B%I%C%H$N(B mona-face$B!#(B (navi2ch-mona-font-family-name): $B?7JQ?t!#%b%J!<%U%)%s%H$H$7$F(B $B;H$$$?$$%U%)%s%H$N(B "foundry-family" $B$+$i$J$kJ8;zNs!#(B (navi2ch-mona-sample-string): $B?7JQ?t!#(Bmona-face $B$NI=<(Nc$K;H$&J8;zNs!#(B (navi2ch-mona-face-variable): $B?7JQ?t!#(B12/14/16 $B%I%C%H$N(B 3$B$D$N(B mona-face $B$N$&$A!"%G%U%)%k%H$N(B mona-face $B$N8uJd$rB+G{$9$k!#(B (navi2ch-mona-create-fontset-from-family-name): $B?74X?t!#(B $B;XDj$5$l$?(B foundry, family, pixelsize $B$+$i!"(B mona-face $B$N$?$a$KI,MW$J%U%)%s%H%;%C%H$r:n$k!#(B (navi2ch-mona-set-mona-face): $B?74X?t!#%G%U%)%k%H8uJd$N(B mona-face $B$+!"8=:_$N%U%l!<%`$N%U%)%s%H%5%$%:$+$i!"(B $B%G%U%)%k%H$N(B mona-face $B$r7h$a$k!#(B (toplevel): Emacs 21 $BMQ$N(B fontset $B$r%O!<%I%3!<%I$7$F$$$?$N$r:o=|!#(B (navi2ch-mona-setup): $B?74X?t!#%b%J!<%U%)%s%H$r;H$&$?$a$N(B $B%U%C%/$rDI2C$9$k!#(B (navi2ch-mona-undo-setup): $B?74X?t!#>e$GDI2C$7$?%U%C%/$rC$9!#(B (navi2ch-mona-enable): navi2ch-vars.el $B$K0\F0!#(B (toplevel): $B>e5-JQ99$K$H$b$J$$(B navi2ch-vars $B$r(B require$B!#(B * navi2ch-vars.el (navi2ch-mona): $B?7(B custom-group$B!#%b%J!<%U%)%s%H(B $B$r07$($k(B Emacs $B$N>e$G$@$1Dj5A$5$l$k!#$3$N%0%k!<%W$rA*Br$9$k$H(B $B<+F0E*$K(B navi2ch-mona.el $B$,%m!<%I$5$l$k!#(B (navi2ch-mona-enable): navi2ch-mona.el $B$+$i0\F0!#$3$NJQ?t$,(B t $B$J$i(B navi2ch-mona.el $B$r(B load $B$9$k$h$&$K$7$F!"L@<(E*$K%m!<%I$9$kI,MW$r(B $B$J$/$7$?!#(B (toplevel): `navi2ch-mona-enable' $B$,(B t $B$J$i(B navi2ch-mona.el $B$r(B $B%m!<%I$9$k$h$&$K!#(B (navi2ch-on-xemacs): $B?7JQ?t!#(BXEmacs $B$N$H$-(B t$B!#(B (navi2ch-on-emacs20): $B?7JQ?t!#(BGNU Emacs 20 $B$N$H$-(B t$B!#(B (navi2ch-disable-readcgi-host-list): DOCSTRING $B$N=q$-4V0c$$$r=$@5!#(B (navi2ch-article-max-buffers): $B%+%9%?%^%$%:$9$k$H$-8+$d$9$/(B $B$J$k$h$&$K%+%9%?%^%$%:Dj5A$rHyD47b!#(B (navi2ch-ask-when-exit): $B%+%9%?%^%$%:Dj5A$rJQ99!#(Bnavi2ch $B$N=*N;(B $B3NG'$K$D$$$F!"?R$M$k(B/$B?R$M$J$$(B $B$N(B2$BBr$+$i!"(B yes-or-no/y-or-n/$B?R$M$J$$(B $B$N(B3$BBr$K!#(B * navi2ch.el (navi2ch-exit): `navi2ch-ask-when-exit' $B$N%+%9%?%^%$%:(B $BDj5AJQ99$KDI?o!#(B 2002-02-08 UEYAMA Rui * navi2ch-board-misc.el (navi2ch-bm-select-board): navi2ch-bm-select-board-hook $B$r(B run-hooks $B$9$k!#(B * navi2ch-vars.el (navi2ch-bm-select-board-hook): $B?7JQ?t!#(B * contrib/navi2ch-logo.el (navi2ch-logo-init): navi2ch-board-select-board-hook $B$K$+$o$j>e5-$N%U%C%/$rMxMQ!#(B $B$3$N%U%C%/$OHD$rFI$_D>$7$?$H$->o$K8F$P$l$k$N$G!"%V%C%/%^!<%/$J$I$K(B $B0\F0$7$?$H$-$K%m%4$r$-$A$s$H>C$;$k$h$&$K$J$C$?!#(B (navi2ch-logo-cleanup): $B%m%4$r@5$7$/>C$9$h$&$K!#(B (navi2ch-logo-previous-image): $B?7JQ?t!#A02sA^F~$7$?%m%4$N(B image$B!#(B (navi2ch-logo-create-logo-image): $B%m%4$r(B1$B%I%C%H$N9u@~$G0O$`$h$&$K!#(B 2002-02-07 mami * navi2ch-article.el (toplevel): kill-emacs-hook $B$K(B (navi2ch-article-expunge-buffers 0) $B$rDI2C!#(B Emacs $B=*N;;~$K(B navi2ch-article-save-info $B$5$l$k$h$&$K!#(B (navi2ch-article-exit): (navi2ch-article-save-info) $B$rDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/908 2002-02-06 Nanashi San * navi2ch-popup-article.el (navi2ch-popup-article): parse $B$,:Q$s$G(B $B$J$$%a%C%;!<%8$O(B parse $B$9$k$h$&$K!#(B (navi2ch-popup-article): $B>e5-JQ99$r=$@5!#(Bparse $B$,:Q$s$G$J$$%a%C%;!<(B $B%8$O(B insert-messages $B$K$^$+$;$F(B string $B$N$^$^J|CV!#(B * navi2ch-article.el (navi2ch-article-str-to-num): >>2-1 $B$_$?$$$J(B $B5U=g$K$J$C$F$k$N$K$bBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/898 2002-02-05 UEYAMA Rui * navi2ch-article (navi2ch-article-auto-decode-base64-section): $B?74X?t!#%l%9$N(B BASE64 $B$G%(%s%3!<%I$5$l$?%F%-%9%H$r%G%3!<%I$7$F(B $B%$%s%i%$%sE83+$9$k!#$5$i$K$O(B (BASE64$B$7$?$@$1$N(B) $B$b$H$N%U%!%$%k(B $B$X$N%"%s%+!<$H$7$F(B link $B$rA^F~$7!"(Bcontents $B%W%m%Q%F%#$K$b$H$N(B $B%U%!%$%k$rJ]B8$9$k!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/743 (navi2ch-article-select-current-link): $B>e$NJQ99$KBP1~!#(B contents $B%W%m%Q%F%#$,%;%C%H$5$l$F$$$l$P!"$=$l$r%U%!%$%k$K(B $BJ]B8$G$-$k$h$&$K!#(B (navi2ch-article-auto-decode-base64-p): $B?7JQ?t!#(B (navi2ch-article-insert-message): $B>e$NJQ?t$,(B non-nil $B$J$i(B BASE64 $B$N%$%s%i%$%sE83+$rM-8z$K$9$k!#(B (navi2ch-article-base64-face): $BE83+$5$l$?%F%-%9%H$N(B face$B!#(B 2002-02-05 UEYAMA Rui * contrib/navi2ch-logo.el: $BA4LLE*$K=q$-49$(!#A0$N%3!<%I$O(B $B$o$l$J$,$i?_$9$.$?!#(B (navi2ch-bm-get-logo): $B:o=|!#(B (navi2ch-bm-view-logo): $B:o=|!#(B (navi2ch-board-create-logo-image): $B:o=|!#(B (navi2ch-board-display-logo): $B:o=|!#(B (navi2ch-board-init-logo): $B:o=|!#(B (navi2ch-logo-init): $B?74X?t!#(Bboard/board-misc $B7O%U%C%/$X$N(B $B%U%C%/DI2C!"JQ?t$N=i4|2=$J$I!#(B (navi2ch-logo-cleanup): $B?74X?t!#%F%s%]%i%j%U%!%$%k$N8e;OKv$J$I!#(B (navi2ch-logo-update): $B?74X?t!#%U%C%/$+$i8F$P$l$F%m%4$rE=$jIU$1$k!#(B (navi2ch-logo-put-image): $B?74X?t!#G$0U$N0LCV$K2hA|$rE=$jIU$1$k!#(B (navi2ch-logo-remove-image): $B?74X?t!#E=$jIU$1$?2hA|$r>C$9!#(B (navi2ch-logo-create-logo-image): $B?74X?t!#%m%4$r%@%&%s%m!<%I$7$F(B Emacs $B$G07$($k(B image $B$r:n$k!#(B (navi2ch-logo-temp-directory): $B?7JQ?t!#%3%s%P!<%H$7$?2hA|%U%!%$%k(B $B$J$I$rCV$/%F%s%]%i%j%F%#%l%/%H%j$N%Q%9!#(B (navi2ch-logo-temp-directory-prefix): $B?7JQ?t!#(B (navi2ch-logo-temp-name-prefix): $B?7JQ?t!#%F%s%]%i%j%G%#%l%/%H%j$K(B $BCV$/%F%s%]%i%j%U%!%$%k$N%W%l%U%#%C%/%9!#(B (navi2ch-logo-image-alist): $B?7JQ?t!#%@%&%s%m!<%I$7$?%m%4$r(B navi2ch $B=*N;;~$^$G3P$($F$*$/$?$a$N(B alist$B!#(B 2002-02-04 UEYAMA Rui * navi2ch-vars.el: defcustom $B$N@bL@J8;zNs$K@VF~$l!#(B elisp-ja (Info) $B$N!V@bL@J8;zNs$K4X$9$k%R%s%H!W$N=>$C$?!#(B - $B@bL@J8;zNs$N:G=i$N9T$O40A4$JJ8$G!"$=$l$@$1$G35MW$rI=$7$F$$$k$3$H(B - $B%U%i%0$rI=$9JQ?t$O!X(BNon-nil means...$B!Y$N$h$&$JC18l$G;O$a$k$3$H(B - $B:G=i$N9T$OBgJ8;z$G;O$a!"%T%j%*%I(B ($B%^%k(B) $B$G=*$($k$3$H!#(B $B$K$O$@$$$?$$=>$&$h$&$K$J$C$?$H;W$&!#(B $BMQ8lE}0l$O!"5$$E$$$?$H$3$m$O$d$C$F$_$?$1$I$^$@%$%^%$%A!#(B $B$H$$$&$+@5$7$$MQ8l$,$o$+$i$J$$!#$?$H$($P!"!V%l%9!W$H!V%a%C%;!<%8!W!"(B $B!V(Blist window$B!W$H!VHD0lMw!W!"!V(Bboard window$B!W$H!V%9%l0lMw!W!"(B $B!V%9%l!W$H!V%9%l%C%I!W!"!V(BNavi2ch$B!W$H!V(Bnavi2ch$B!W$J$I$J$I!D!#(B * navi2ch-vars.el (navi2ch-init-file): $B$o$+$j$K$/$$$N$G(B navi2ch-directory $B$rE83+$9$k$N$r$d$a$?!#%+%9%?%^%$%:$9$k$H$-$O!"(B $BE83+$7$J$$CM$@$1$rDs<($7$?$[$&$,%Q%C$H8+$FM}2r$7$d$9$/$J$k!#(B (navi2ch-bm-fetched-info-file): $BF1>e!#(B (navi2ch-bookmark-file): $BF1>e!#(B (navi2ch-history-file): $BF1>e!#(B (navi2ch-update-file): $BF1>e!#(B 2002-02-04 Nanashi San * Makefile.am (SUBDIRS): contrib $B$rDI2C!#(B * configure.in: contirb/Makefile $B$rDI2C!#(B 2002-02-04 UEYAMA Rui * navi2ch-article.el (navi2ch-article-mode): $B%P%C%U%!%m!<%+%k$K$7$?$$%U%C%/$r$^$:(B make-local-hook $B$9$k!#(B add-hook $B$N0z?t$@$1$G%U%C%/$r%P%C%U%!%m!<%+%k$K$G$-$k$N$O(B Emacs 21 $B$@$1$NOC$G!"(BEmacs 20 $B$d(B XEmacs $B$G$O$3$&$7$F$*$+$J$/$A$c%@%a$@$C$?!#(B 2002-02-04 mami * navi2ch-article.el (navi2ch-article-save-info): navi2ch-article-mode $B0J30$G$O2?$b$7$J$$$G=*N;!#(B 2002-02-04 Nanashi San * icons/plugged.xpm: $B>e2<$N6uGr$r:o$C$F9b$5$r(B 12 dot $B$K$7$?!#(B * icons/unplugged.xpm: $BF1>e!#(B 2002-02-04 UEYAMA Rui * navi2ch-article.el (navi2ch-article-mode): $BpJs$,>o$KJ]B8$5$l$k(B $B$h$&$K!"(Bkill-buffer-hook $B$X(B navi2ch-article-save-info $B$rDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/853 (navi2ch-article-kill-buffer): $B:o=|!#$b$O$d%P%C%U%!$r>C$9A0$K(B $BL@<(E*$K%;!<%V$9$kI,MW$O$J$$$+$i!#(B (navi2ch-article-save-all-info): $BF1>e!#(B (toplevel): `C-x k' (navi2ch-article-kill-buffer) $B$N%-!<%P%$%s%I(B $B$rGQ;_!#(B (navi2ch-article-expunge-buffers): $B>e5-$N4X?t:o=|$KBP1~!#(B * navi2ch-articles.el (navi2ch-articles-delete): $B>e5-$N4X?t:o=|$KBP1~!#(B 2002-02-04 UEYAMA Rui * navi2ch-util.el (navi2ch-replace-string): TO-STRING $B$K(B `\1' $B$J$I$rEO$7$?>l9g$K%P%0$C$F$$$?$N$r=$@5!#(B 2002-02-03 Nanashi San * configure.in: icondir $B$r<+F0E*$K@_Dj$9$k$h$&$K$7$?!#(B * icons/Makefile.am (icondir): @icons@ $B$KJQ99!#(B 2002-02-02 Nanashi San * navi2ch-vars.el (navi2ch-icon-directory): navi2ch.el $B$,$"$k%G%#(B $B%l%/%H%j$N2<$N(B icons $B$b8+$k$h$&$K$7$?!#(B(working direcotyr $B$KD>@\(B load-path $B$rDL$7$F$k>l9g$K$b%"%$%3%s$r;H$($k$h$&$K!#(B) 2002-02-02 UEYAMA Rui * navi2ch-e21.el: $B?75,%U%!%$%k!#(BGNU Emacs21 $B$K0MB8$7$?%3!<%I$r(B $B$3$3$K=q$/$3$H$K$9$k!#(B (navi2ch-e21-display-image-p): $B?7%^%/%m!#(B (navi2ch-offline-init-icons): $B?74X?t!#%*%U%i%$%s>uBV$rI=$o$9(B $B%b!<%I%i%$%s>e$NJ8;z$r!"2hA|$KJQ99$9$k!#(BEmacs 21 $B@lMQ!#(B (navi2ch-online-image): $B%*%s%i%$%s$N$H$-$N2hA|!#(B (navi2ch-online-image): $B%*%U%i%$%s$N$H$-$N2hA|!#(B * icons: $B?75,%G%#%l%/%H%j!#%"%$%3%s$N%U%!%$%k$rCV$/!#(B * navi2ch-board.el (navi2ch-board-set-mode-line): $B%b!<%I%i%$%s$K(B $BHD$N(B id $B$rI=<($9$k$h$&$K!#(B * navi2ch-util.el (navi2ch-online-indicator): $B?7JQ?t!#(B(`[ON]') (navi2ch-offline-indicator): $BF1>e!#(B(`[--]') (navi2ch-set-mode-line-identification): $B>e$NJQ?t$r;H$&$h$&$K!#(B * navi2ch-vars.el (navi2ch-on-emacs21): $B?7JQ?t!#(BEmacs21 $B$J$i$P(B t$B!#(B (navi2ch-icon-directory): $B?7JQ?t!#%"%$%3%s%U%!%$%k$rCV$/%G%#%l%/%H%j!#(B (navi2ch-online-icon): $B%*%s%i%$%s$rI=$o$9%"%$%3%s$N%U%!%$%kL>!#(B (navi2ch-offline-icon): $B%*%U%i%$%s$rI=$o$9%"%$%3%s$N%U%!%$%kL>!#(B * navi2ch.el (toplevel): Emacs21 $B$N>l9g!"(Bnavi2ch-e21.el $B$rFI$_(B $B9~$`$h$&$K!#(B 2002-02-01 Nanashi San * navi2ch-net.el (navi2ch-net-ignore-errors): $B%(%i!<%a%C%;!<%8$rI=(B $B<($G$-$k>l9g$OI=<($9$k!#(B (navi2ch-net-send-request): $BG0$N0Y!"(Bdelete-process $B$rDI2C!#(B 2002-01-31 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-display-link-minibuffer): truncate-string-to-width $B$r;H$&$h$&$K!#(B 2002-01-31 Nanashi San * navi2ch-board.el (navi2ch-board-sync): navi2ch-net-* $B$,%(%i!<;~(B $B$K$b(B nil $B$rJV$9$h$&$K$J$C$?$N$G(B condition-case $B$OITMW!#(B * navi2ch.el (navi2ch-update): $BF1>e!#(B 2002-01-31 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-get-board-name-list): $BJQ$o$C$?HD$OL5;k!#(B * navi2ch.el (navi2ch-change-log-directory): $B$^$@$J$$%G%#%l%/%H%j$O0\F0$7$J$$!#(B 2002-01-31 Nanashi San * navi2ch-net.el (navi2ch-net-ignore-errors): $B?7%^%/%m!#(B ignore-errors $B$H$[$H$s$I0l=o!#(B (navi2ch-net-get-status): navi2ch-net-ignore-errors $B$G0O$`!#(B (navi2ch-net-get-header): $BF1>e!#(B (navi2ch-net-get-content): $BF1>e!#(B (navi2ch-net-download-file): $BF1>e!#(B (navi2ch-net-send-message): $BF1>e!#(B 2002-01-31 Taiki SUGAWARA * navi2ch-vars.el (navi2ch-article-display-link-width): $B?7JQ?t!#(B navi2ch-article-display-link-minibuffer $B$G;HMQ!#(B * navi2ch-article.el (navi2ch-article-display-link-minibuffer): $B0zMQ$H$+$r>JN,$9$k$h$&$K!#(B navi2ch-article-display-link-minibuffer $B$NI}$GI=<($9$k!#(B 2002-01-31 mami * navi2ch.el (navi2ch-update): http://navi2ch.sourceforge.net/ $B$K@\B3$G$-$J$+$C$?$H$-$K(B navi2ch $B$,(B $B5/F0$7$J$$$N$G!"(Bcondition-case $B$G2sHr!#(B $B$[$s$H$O(B navi2ch-net-* $B$NJ}$G$J$s$H$+$9$Y$-$J$N$+$J!#(B 2002-01-30 mami * navi2ch-article.el (navi2ch-article-display-link-minibuffer): $B?74X?t(B & $B2~NI!#(B $B!V(B>>1-4$B!W!V(B>>1,3,5$B!W$J$I$G$b:G=i$N%l%9$rI=<(!#(B (navi2ch-article-next-link): $B>e$N4X?t$r;H$&$h$&$K!#(B (navi2ch-article-previous-link): $B>e$N4X?t$r;H$&$h$&$K!#(B 2002-01-30 mami * navi2ch-article.el (navi2ch-article-next-link): $B%_%K%P%C%U%!$KI=<((B $B$9$k%l%9HV9f$rF@$k$N$K(B navi2ch-article-str-to-num $B$r;H$&$h$&$K!#(B $B!V!d!d#9#5#9!W$G$&$^$/I=<($5$l$J$+$C$?$N$G!#(B 2002-01-30 Nanashi San * navi2ch-util.el (navi2ch-add-replace-html-tag): $B$N$N$?$s$N8}$rI=(B $B<($7$?$$$N$l$9!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/772 (navi2ch-add-replace-html-tag-regexp): $B?74X?t!#>e$N4X?t$N$D$$$G!#(B 2002-01-30 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-next-link): $BIaDL$K(B string-to-number $B$G$$$$;v$K5$(B $BIU$$$?!#(B (navi2ch-article-previous-link): $BF1>e!#(B 2002-01-30 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-get-message-string): $B?74X?t(B (navi2ch-article-next-link): $B>e$N4X?t$r;H$C$F!"$=$N%j%s%/$N%l%9$r(B $BI=<($9$k$h$&$K!#(B (navi2ch-article-previous-link): $BF1>e!#(B * navi2ch-util.el (navi2ch-replace-string): (+ start new) $B$H$J$C$F$$$?$N$G=$@5!#(B 2002-01-29 Taiki SUGAWARA * navi2ch-history.el (navi2ch-history-change): $B?74X?t!#(B navi2ch-list-apply-changed-status $B$G8F$P$l$k!#(B * navi2ch-bookmark.el (navi2ch-bookmark-get-key): $B?74X?t!#(B (navi2ch-bookmark-exist): $B>e$N4X?t$r;H$&$h$&$K!#(B (navi2ch-bookmark-add-subr): $BF1>e!#(B (navi2ch-bookmark-change): $B?74X?t!#(B navi2ch-list-apply-changed-status $B$G8F$P$l$k!#(B * navi2ch.el (navi2ch-change-log-directory): $B?74X?t!#(B navi2ch-list-apply-changed-status $B$G8F$P$l$k!#(B * navi2ch-list.el (navi2ch-list-get-changed-status): $B0z?t$N=gHVJQ99!#(B old-category-list $B$r:G=i$N0z?t$K$7$?!#(B changed-list $B$K(B old-board $B$bDI2C!#(B (navi2ch-list-sync): $B>e$NJQ99$KBP1~(B (navi2ch-list-apply-changed-status): $BF1>e!#(B log-directory, bookmark, history $B$K$bJQ99$rH?1G$9$k$h$&$K!#(B $B$3$3$G%4%K%g%4%K%g$9$k$N$O$"$s$^$7$h$/$J$$5$$b$9$k$1$I!#(B 2002-01-28 Nanashi San * navi2ch-board.el (navi2ch-board-select-board): navi2ch-board-current-board $B$K$O(B load $B$7$?(B board $B$rF~$l$F$*$/!#(B (navi2ch-board-sync): $B>e5-$KH<$$$3$3$G$O(B load $B$7$J$$!#(B navi2ch-board-update-file $B$,%(%i!<$K$J$C$F$b=hM}$rB3$1$k!#(B Bug#509248 * navi2ch-message.el (navi2ch-message-cleanup-message): $B?74X?t!#(B (navi2ch-message-send-message): $B>e5-4X?t$r;H$&$h$&$K!#(B * navi2ch-vars.el (navi2ch-message-cleanup-trailing-whitespace): $B?7JQ?t!#(B (navi2ch-message-cleanup-trailing-newline): $B?7JQ?t!#(B 2002-01-27 mami * navi2ch-bookmark.el (navi2ch-bookmark-create-bookmark): (navi2ch-bookmark-save-info) $B$r(B $BDI2C!#(B (navi2ch-bookmark-delete-bookmark): $BF1>e!#(B (navi2ch-bookmark-change-bookmark): $BF1>e!#(B (navi2ch-bookmark-add-subr): $BF1>e!#(B (navi2ch-bookmark-delete-subr): $BF1>e!#(B (navi2ch-bookmark-copy): $BF1>e!#(B 2002-01-27 mami * navi2ch-bookmark.el (navi2ch-bookmark-delete-subr): $B?74X?t!#Cf?H$O5l(B navi2ch-bookmark-delete $B$[$\$=$N$^$^!#(B (navi2ch-bookmark-delete): y-or-n-p $B8e$K(B navi2ch-bookmark-delete-subr $B$r8F$V!"$KJQ99!#(B (navi2ch-bookmark-move): navi2ch-bookmark-delete $B$G$O$J$/(B -subr $B$r;H$&$h$&$K!#(B (navi2ch-bookmark-cut): $BF1>e!#(B 2002-01-27 Nanashi San * navi2ch-list.el (navi2ch-list-bookmark-node): type $B$r(B bookmark $B$K8B$kI,MW$O$J$$$s$8$c!#!#!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/710 * navi2ch-article.el (navi2ch-article-cleanup-message): $B%l%9KvHx$N(B $B6u9T$re!#(B (navi2ch-article-cleanup-trailing-newline): $B?7JQ?t!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/705 2002-01-26 Nanashi San * navi2ch-article.el (toplevel): $B%P%C%U%!%m!<%+%k$JJQ?t$r(B make-variable-buffer-local $B$7$?!#(B (navi2ch-article-view-article): navi2ch-article-mode $B$K$9$k$N$r(B navi2ch-article-sync $B$N8e$K$7$?!#(B(sync $B$,<:GT$7$?>l9g$KBP=h(B) (navi2ch-article-view-article-from-file): $BF1>e!#(B($B0UL#L5$$$+$b(B) (navi2ch-article-mode): toplevel $B$NJQ99$KH<$$(B make-local-variable $B$NB?$/$r:o=|!#(B (navi2ch-article-cleanup-message): $B:G6a!"2~9T$,(B "
" $B$@$C$?$j(B "
" $B$@$C$?$j(B "
" $B$@$C$?$j$9$k$N$G!"$=$N%l%9$N(B "
*" $B$N(B $B$&$A:G$bC;$$$N$r2~9T$K$9$k$h$&$K$7$?!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode): navi2ch-article-mode $B$HF1MM!#(B * navi2ch-net.el (navi2ch-net-update-file): func $B$,(B nil $B$rJV$7$?>l(B $B9g$b%(%i!<%a%C%;!<%8$rI=<($9$k$@$1$K$7$?!#(B 2002-01-25 Nanashi San * navi2ch-net.el (navi2ch-net-update-file): cont $B$,(B nil $B$N>l9g$O%((B $B%i!<%a%C%;!<%8$rI=<(!#(B * navi2ch-mona.el (navi2ch-mona-font): mona $B%U%)%s%H$N%5%$%:$r * navi2ch-article.el (navi2ch-article-write-message): (navi2ch-article-save-number) $B$rDI2C!#(B $B%l%9=q$-9~$_A0$K8+$F$$$?%l%9HV9f$rJ]B8$9$k$h$&$K!#(B 2002-01-25 Nanashi San * navi2ch-net.el (navi2ch-net-enable-http11): navi2ch-vars $B$X0\F0!#(B (navi2ch-net-send-message-error-string): Proxy $B5,@)$N%(%i!<%a%C%;!<(B $B%8$KBP1~!#(B (navi2ch-net-send-message): navi2ch-net-send-message-use-http-proxy $B$r8+$k$h$&$K!#(B * navi2ch-vars.el (navi2ch-net-send-message-use-http-proxy): $B?7JQ?t!#(B (navi2ch-net-enable-http11): navi2ch-net.el $B$+$i0\F0!#26E*$K$O$=$m(B $B$=$m(B stable $B$J$s$G(B customize $B2DG=$K$7$F$_$?!#(B 2002-01-24 Nanashi San * navi2ch-list.el (navi2ch-list-goto-board): default $BCM$NBeF~J}K!(B $B$rJQ99!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/679 * navi2ch.el (navi2ch-version): $B%P!<%8%g%sI=5-$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/674 * navi2ch-vars.el (navi2ch-list-load-category-list): $B?7JQ?t!#(B * navi2ch-list.el (navi2ch-list-load-info): $BA02s3+$$$F$$$?%+%F%4%j(B $B$r3+$$$?$^$^$K$9$k$+$I$&$+$r5-21$9$k!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/677 * configure.in: 1.5.1-DEV $B$K%"%C%W%G!<%H!#(B 2002-01-24 NOKUBI Takatsugu * contrib/navi2ch-logo.el: Copyright $BJQ99(B * doc/navi2ch.texi: $BF1>e(B 2002-01-24 Taiki SUGAWARA * navi2ch: 1.5.1 $B%j%j!<%9(B * configure.in: 1.5.1 $B$K%"%C%W%G!<%H(B * navi2ch-article.el, navi2ch-articles.el, navi2ch-board-misc.el, navi2ch-board.el, navi2ch-bookmark.el, navi2ch-face.el, navi2ch-head.el, navi2ch-history.el, navi2ch-list.el, navi2ch-message.el, navi2ch-mona.el, navi2ch-net.el, navi2ch-popup-article.el, navi2ch-search.el, navi2ch-util.el, navi2ch-vars.el, navi2ch-version.el, navi2ch.el: Copyright $B$r(B Navi2ch Project $B$KJQ99!#$D$$$G$K(B Author $B$bJQ$($F$_$k!#(B 2002-01-24 Nanashi San * navi2ch-article.el (navi2ch-article-mode-map): remove M-b binding 2002-01-23 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-user-agent): Monazilla/1.00 Navi2ch $B$KJQ99!#(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): "g" $B$K(B navi2ch-bm-goto-board $B$r@_Dj!#(B 2002-01-23 Nanashi San * navi2ch-vars.el (navi2ch-auto-update): $B?7JQ?t!#(B * navi2ch.el (navi2ch-update): $B?74X?t!#%f!<%6$N3NG'$J$7$G%@%&%s%m!<(B $B%I$7$?%U%!%$%k$re5-4X?t$r;H$&$h$&$K!#(B 2002-01-23 mami * navi2ch-vars.el (navi2ch-message-user-name): "$BL>L5$7$5$s!w#M#e#a#d#o#w(B" $B$rDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/641 2002-01-23 Nanashi San * navi2ch-article.el (navi2ch-article-update-file): 304 $B$N;~$K(B 'time $B$r%/%j%"$7$F$$$?$N$G=$@5!#(B * Makefile.am ($(ELCFILES)): $B%=!<%9$,JQ99$5$l$F$$$?>l9g$O$9$Y$F%3(B $B%s%Q%$%k$7$J$*$9$3$H$K$7$?!#(B (Makefile): MAINTAINER_MODE_TRUE $B$G$b0MB84X78$r%A%'%C%/$9$k$h$&$K!#(B * navi2ch.el (navi2ch): $B<+F099?7%U%!%$%k$r;}$C$FMh$k$h$&$K$7$?!#(B navi2ch-offline $B$r(B init.el $B$r8F$VA0$K;2>H$7$F$$$k$N$G!"(B navi2ch-offline $B$O(B .emacs $BEy$G@_Dj$7$J$/$F$O$$$1$J$$!#(B $B<+F099?7$7$?$/$J$$?M$O(B .emacs $BEy$G(B (setq navi2ch-update-url "") $B$H$7$F$/$@$5$$!#(B * navi2ch-vars.el (navi2ch-update-file): $B?7JQ?t!#(B (navi2ch-update-base-url): $B?7JQ?t!#(B (navi2ch-update-url): $B?7JQ?t!#(B * navi2ch-util.el (navi2ch-match-string-no-properties): $B?7%^%/%m!#(B (navi2ch-strip-properties): $B?74X?t!#(B * navi2ch-article.el (navi2ch-article-set-link-property): match-string-no-properties -> navi2ch-match-string-no-properties http://pc.2ch.net/test/read.cgi/unix/1009340234/643 * navi2ch.el (navi2ch-save-info): $BJ]B8$9$kA0$K(B INFO $B$N%F%-%9%HB0@-(B $B$r$9$Y$F:o=|$9$k$h$&$K$7$?!#(B 2002-01-23 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-set-link-property): text-proprety $B$r$O$:$9$h$&$K(B $B$7$F$_$?!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/623 2002-01-23 Nanashi San * navi2ch-net.el (navi2ch-net-get-chunk): goto-char $B$NA0$K%3%M%/%7%g(B $B%s$,JD$8$?>l9g$KBP=h!#(B (navi2ch-net-get-content): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/612 * navi2ch-net.el (navi2ch-net-get-content-subr-with-temp-file): $B%j!<%8%g%s$rD>@\=hM}$9$k$h$&JQ99!#(BUnix $B$H(B Windows $B$G$OF0$/$3$H$r3N(B $BG'$7$?$1$I!"4N?4$N(B Windows CE $B$G$O%F%9%H$7$F$J$$!#(B (navi2ch-net-get-content-subr-region): $B%j!<%8%g%s$rD>@\=hM}$9$k$h(B $B$&JQ99!#(B (navi2ch-net-get-content-subr): get-content-subr-function $B$r$d$a$F(B fset $B$9$k$h$&$K$7$?!#(B (navi2ch-net-get-content): $B>e5-JQ99$KBP1~!#$A$g$C$HB.$/$J$C$?!#(B * navi2ch-util.el (navi2ch-temp-directory): $B?75,%^%/%m!#(B * navi2ch-vars.el (navi2ch-net-gunzip-args): -q $B$rDI2C!#(B 2002-01-22 Nanashi San * navi2ch-net.el (navi2ch-net-get-status): HTTP status $B$,8+IU$+$i(B $B$J$$;~$O(B nil $B$rJV$9$h$&$K$7$?!#(B (navi2ch-net-download-file): HTTP status $B$,(B nil $B$N>l9g$O(B retry $B$9(B $B$k$h$&$K$7$?!#(BHTTP/1.1 $B$,>oMQ$G$-$k$h$&$K$J$C$?46$8!#(B 2002-01-21 Nanashi San * navi2ch-article.el (navi2ch-article-parse-message): buffer-substring -> buffer-substring-no-properties (navi2ch-article-get-message-list): $BF1>e!#(B * navi2ch-bookmark.el (navi2ch-bookmark-fetch-article): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-close-all-category): $BF1>e!#(B * navi2ch-message.el (navi2ch-message-send-message): $BF1>e!#(B * navi2ch-net.el (navi2ch-net-get-content): $BF1>e!#(B * navi2ch-search.el (navi2ch-search-article-regexp): $BF1>e!#(B * navi2ch-util.el (navi2ch-read-string): $B?74X?t!#(B * navi2ch-bookmark.el (navi2ch-bookmark-convert): $B>e5-4X?t$r;H$&!#(B (navi2ch-bookmark-create-bookmark): $BF1>e!#(B * navi2ch-search.el (navi2ch-search-subject-subr): $BF1>e!#(B (navi2ch-search-article-subr): $BF1>e!#(B $B2?$b9M$($:(B buffer-substring -> buffer-substring-no-properties $B$7$F(B $B$_$k!#(Bread-string $B$b$"$d$7$=$&$@$C$?$N$G(B navi2ch-read-string $B$r$G$C(B $B$A$"$2$FBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/545 http://pc.2ch.net/test/read.cgi/unix/1009340234/553 2002-01-21 mami * navi2ch-util.el (navi2ch-string-as-multibyte): $B%?%$%W%_%9=$@5(B http://pc.2ch.net/test/read.cgi/unix/1009340234/554 2002-01-21 Nanashi San * navi2ch-net.el (navi2ch-net-get-chunk): (accept-process-output) $B$C$F(B point $B$,(B point-max $B$N;~$O(B point $B$,F0$/$_$?$$$J$s$G$b$H$$$?>l(B $B=j$K(B goto-char $B$9$k$h$&$K$7$?!#(B $BJQ$J;v$,$"$C$?>l9g$O%a%C%;!<%8$rI=<($9$k$h$&$K$7$?!#(B last-chunk $B$N;~$N=hM}$,4V0c$C$F$?$N$G=$@5!#(B $B%P%C%U%!Aj HTTP/1.1 $B$KBP1~$7$F$_$^$7$?!#$^$@$^$@IT6q9g$"$j$^$/$j$J$N$GAG?M$K(B $B$O$*4+$a$7$J$$!"$G$9!#%O%/$G$-$k?M$N?MCl$-$\$s$L!#(B * navi2ch-net.el (navi2ch-net-last-host): $B?7JQ?t!#(B (navi2ch-net-last-port): $BF1>e!#(B (navi2ch-net-header): $BF1>e!#(B (navi2ch-net-content): $BF1>e!#(B (navi2ch-net-enable-http11): $BF1>e!#(B (navi2ch-net-cleanup): navi2ch-net-header$B!"(Bnavi2ch-net-content $B$r(B $B%/%j%"$9$k$h$&$K!#(B (navi2ch-net-send-request): HTTP/1.1 $B$KBP1~$7$F$_$?!#(B (navi2ch-net-get-header): $B7k2L$r(B navi2ch-net-header $B$KJ]B8$9$k$h$&(B $B$K$7$?!#%P%C%U%!$r8+$k$N$O(B navi2ch-net-header $B$,(B nil $B$N;~$@$1!#(B (navi2ch-net-get-chunk): $B?74X?t!#(BTransfer-Encoding: chunk $B$r%G%3!<(B $B%I$9$k!#(B (navi2ch-net-get-content): $B7k2L$r(B navi2ch-net-content $B$KJ]B8$9$k$h(B $B$&$K$7$?!#(BTransfer-Encoding: chunk$B!"(BContent-Length $B$KBP1~!#(B * navi2ch-util.el (navi2ch-string-as-multibyte): $B?7%^%/%m!#(B 2002-01-21 Nanashi San * navi2ch-article.el (navi2ch-article-insert-messages): 'point $B$r(B point $B$+$i(B point-marker $B$KLa$7$?!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/541 2002-01-20 Nanashi San * navi2ch-article.el (navi2ch-article-update-file): Last-Modified $B$,L5$$>l9g$O(B Date $B$r:G=*99?7;~4V$H$7$FJ]B8!#(B * navi2ch-board.el (navi2ch-board-sync): $BF1>e!#(B $B$J$s$+(B mod_gzip $B$,8z$$$F$k$H(B Last-Modified $B$,Aw$i$l$FMh$J$$$N$G>e(B $B5-$N$h$&$JJQ99$r2C$($F$_$?!#(BIf-Modified-Since $B$GAw$C$F$bL5;k$5$l$k(B $B$_$?$$$@$1$I!"!"!"(B 2002-01-20 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-changed-category-name): $B?7JQ?t!#(B (navi2ch-list-get-changed-category): $B?74X?t!#(B (navi2ch-list-sync): $B>e$NJQ99$K9g$o$;$k!#$"$H(B old-category-list $B$r(B $B@_Dj$9$k$H$3$m$rD>$9!#(B 2002-01-20 Nanashi San * navi2ch-board.el (navi2ch-board-subback-file-name): $B?7JQ?t!#(B (navi2ch-board-use-subback-html): $B?7JQ?t!#(B (navi2ch-board-make-subject-txt): subject.html $B$+$i(B subject.txt $B$r(B $B:n$k!##2$A$c$s$M$k$N;EMMJQ99$K?6$j2s$5$l$=$&$JM=46!#(B (navi2ch-board-update-file): navi2ch-board-use-subback-html $B$,(B non-nil $B$N>l9g$O>e5-4X?t$r;H$&$h$&$K!#$?$a$9>l9g$O(B navi2ch-board-enable-readcgi $B$r(B nil $B$K$7$F$/$@$5$$!#(B 2002-01-19 Nanashi San * navi2ch-list.el (navi2ch-list-sync): first $B$N$H$-(B old-list $B$K@_(B $BDj$9$k%j%9%H$r8e$NJ}$K$"$k(B navi2ch-list-category-list $B$X$N@_DjJ}K!(B $B$HF1$8$K$7$F$_$?!#(B(navi2ch-list-sync-update-on-boot $B$,(B t $B$@$H4{B8(B $B$NHD$b>o$K(B A $B$K$J$C$F$?$?$a!#(B) 2002-01-19 Taiki SUGAWARA * navi2ch-list.el (navi2ch-list-state-alist): $B?7JQ?t!#(B (navi2ch-list-insert-board-names-subr): navi2ch-list-state-alist $B$r;H$&$h$&$K!#(B (navi2ch-list-get-changed-status): $B?74X?t!#(B (navi2ch-list-apply-changed-status): $BF1>e!#(B navi2ch-list-current-list $B$K(B change $B$bJ]B8$9$k$h$&$K!#(B (navi2ch-list-sync): $B>e$N(B2$B4X?t$r;H$&$h$&$K!#(B (navi2ch-list-save-info): change $B$bJ]B8$9$k$h$&$K!#(B * navi2ch-face.el (navi2ch-list-add-board-name-face): $B?7(B face$B!#(B (navi2ch-list-change-board-name-face): $BF1>e!#(B * navi2ch-util.el (navi2ch-alist-list-to-alist): key2 $B$,>JN,$5$l$?$H$-$O!"3F(B node $B$=(B $B$N$b$N$r(B cdr $B$KF~$l$k$h$&$K!#(B 2002-01-19 Nanashi San * navi2ch-board.el (navi2ch-board-update-file): read.cgi $B$r;H$&:](B $B$NLa$jCM$N07$$$,4V0c$C$F$$$?$N$G=$@5!#(B * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): offlaw.cgi $B$,;H$($J$/$J$C$?$N$G%3%a%s%H%"%&%H!#(B * navi2ch-board.el (navi2ch-board-enable-readcgi): $B?7JQ?t!#(B (navi2ch-board-update-file): subject.txt $B$Ne5-JQ?t$K$h$C$F7h$a$k!#(B 2002-01-19 Nanashi San ELP $B$7$^$/$j$G:Y$+$$%A%e!<%s!#26$N4D6-$@$H(B 1000 $B%l%9$N%9%l$r(B navi2ch-article-auto-range nil $B$G3+$/$N$,(B 10% $B$/$i$$B.$/$J$C$?!#(B * navi2ch-util.el (navi2ch-replace-html-tag-with-buffer): $B?74X?t!#(B (navi2ch-replace-html-tag-with-temp-buffer): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-put-alist): defsubst $B$K$7$?!#(B * navi2ch-face.el (navi2ch-article-face): $B?7(B face$B!#(B * navi2ch-article.el (navi2ch-article-parse-message): navi2ch-replace-html-tag-with-temp-buffer $B$r;HMQ$7$F(B HTML $B%?%0$NE8(B $B3+$r0lEY$K9T$&$h$&$K$7$?!#(Bnavi2ch-cleanup-message $B$r8F$V$h$&$K$7$?!#(B (navi2ch-article-set-link-property): defsubst $B$K$7$F0LCV$rJQ99!#(B (navi2ch-article-put-cite-face): $BF1>e!#(B (navi2ch-article-arrange-message): $BF1>e!#(B (navi2ch-article-cleanup-message): $BF1>e!#8F$S=P$70LCV$NJQ99$K$H$b(B $B$J$$JQ49J}K!$rJQ99!#(B (navi2ch-article-insert-message): $B%9%l$N%G%U%)%k%H(B face $B$H$7$F(B navi2ch-article-face $B$r;H$&$h$&$K$7$?!#$A$g$$%9%T!<%I%@%&%s!#(B $B$G$b(B (set-face-font 'navi2ch-article-face navi2ch-mona-font) $B$H(B navi2ch-mona-arrange-message $B$r(B add-hook $B$9$k$N$H$rHf$Y$k$H%9%T!<(B $B%I%"%C%W!#(B $B$3$3$G(B navi2ch-cleanup-message $B$r8F$V$H$d$?$i$HCY$$$N$G$d$a!#(B (navi2ch-article-insert-messages): alist $B$KF~$l$k(B 'point $B$r(B point-marker $B$+$i(B point $B$KJQ99!#$3$l$G(B ($BFC$K%l%9$,B?$$;~$O(B) $B$+$J$j(B $B%9%T!<%I$,$"$,$k!#(Bnavi2ch-article-insert-messages $B$r8F$VA0$K$O>o$K(B erase-buffer $B$7$F$k$+$iBg>fIW$@$H;W$&$s$@$1$I!#!#!#(B (navi2ch-article-base64-decode-message): marker $B;H$&$N$OL5BL$J$N$G(B point $B$r;H$&$h$&$K!#(B * navi2ch-mona.el (navi2ch-mona-put-face): navi2ch-article-face $B$N(B $BItJ,$b(B navi2ch-mona-face $B$K$9$k$h$&$K$7$?!#(B * navi2ch-vars.el (navi2ch-article-cleanup-trailing-blankline): $BGQ;_!#(B 2002-01-19 Nanashi San * navi2ch-list.el (navi2ch-list-get-category): $B$9$G$K(B open $B$7$F$$(B $B$k%+%F%4%j$O(B open $B$7$?$^$^$K$9$k$3$H$K$7$?!#(B (navi2ch-list-save-info): navi2ch-list-category-list $B$N(B open $B$+$I(B $B$&$+$bJ]B8$9$k$h$&$K$7$?!#(B (navi2ch-list-load-info): $B>e5-JQ99$KBP1~!#(B FR#505225 2002-01-18 Nanashi San * navi2ch.el (navi2ch-three-pane): $B%P%C%U%!$,$=$m$C$FL5$$;~$O(B navi2ch-two-pne $B$r;H$&$h$&$K$7$?!#(Bwindow-start $B$rJ]B8$7$F$*$/$3$H(B $B$G(B article $B%b!<%I$G(B 3 $B$r2!$7$F$bI=<($,%P%?%P%?$7$J$$$h$&$K$7$?!#(B (navi2ch-one-pane): navi2ch-two-pane $B$HAj@-$,0-$+$C$?$N$G=$@5!#(B (navi2ch-two-pane): $B%+%l%s%H%P%C%U%!$,(B list$B!"(Bboard$B!"(Barticle $B$N$$$:(B $B$l$G$b$J$$>l9g$KBP=h!#(B * navi2ch.el (navi2ch-two-pane-horizontally): $B?74X?t!#(B (navi2ch-two-pane-vertically): $B?74X?t!#(B (navi2ch-two-pane): $B?74X?t!#$I$3$G$b(B2$B%Z%$%s$r;H$($k$h$&$K!#(B * navi2ch-vars.el (navi2ch-global-view-map): $B>e5-4X?t$r%P%$%s%I!#(B * navi2ch-article.el (navi2ch-article-mode-map): $B%b!<%I0MB8$N(B2$B%Z%$(B $B%s4X?t$N%P%$%s%I$r$O$:$7$?!#(B * navi2ch-board.el (navi2ch-board-mode-map): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-mode-map): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-decode-message): $B?75,4X?t!#(B (navi2ch-article-mode-map): M-d $B$K>e5-4X?t$r%P%$%s%I!#(B * acinclude.m4 (AM_PATH_LISPDIR): .../site-lisp/navi2ch $B$K$J$k$h$&(B $B=$@5!#(B * navi2ch-util.el (navi2ch-replace-html-tag-alist): $B2~9T$H$7$FG'<1(B $B$9$k$N$O(B "
" $B$N$_$H$7$?!#A08e$N6uGr$O(B navi2ch-article $B$GA]=|!#(B * navi2ch-article.el (navi2ch-article-cleanup-message): $B?74X?t!#(B (navi2ch-article-insert-message): $B>e5-4X?t$r;H$&$h$&$K$7$?!#(B * navi2ch-vars.el: $B>e5-$NJQ99$G;HMQ$9$kJQ?tDI2C!#(B (navi2ch-article-cleanup-white-space-after-old-br): $B?7JQ?t!#(B (navi2ch-article-cleanup-trailing-whitespace): $B?7JQ?t!#(B (navi2ch-article-cleanup-trailing-blankline): $B?7JQ?t!#(B * configure.in: 1.5-DEV $B$K%"%C%W%G!<%H!#(B 2002-01-18 Taiki SUGAWARA navi2ch 1.5 $B%j%j!<%9!#(B * TODO: $B@0M}!#(B * NEWS: 1.4 $B$+$i(B 1.5 $B$N$a$@$C$?JQ99E@$r$H$j$"$($:DI2C!#(B 2002-01-17 Nanashi San * Makefile.am (EXTRA_DIST): bcomp.el.in $B$rDI2C!#(B (BUILT_SOURCES): bcomp.el $B$rDI2C!#(B (navi2ch-version.el): ; -> && (snap): $BF1>e!#(B (recompile): bcomp $B$HF1MM$K!"(B.elc $B%U%!%$%k$r>C$9"*(B2 $B2s%P%$%H%3%s%Q(B $B%$%k$9$k!"$KJQ$($?!#(B (elcdist): $(ELCFILES) $B$8$c$J$/$F(B recompile $B$K0MB8$9$k$h$&$K$7$?!#(B (bcomp.el): $B?7%?!<%2%C%H!#(Bbcomp.el.in $B$+$i(B bcomp.el $B$r:n@.!#(B * bcomp.el.in: bcomp.el $B$+$i%j%M!<%`!#(B (bcomp-files): Makefile.am $B$GKd$a$k$h$&$K!#(B (toplevel): $B3NC$9"*%P%$(B $B%H%3%s%Q%$%k$7$F%m!<%I$9$k"*$b$&0lEY%P%$%H%3%s%Q%$%k$7$F%m!<%I$9$k!"(B $B$H$$$&46$8$K$7$F$_$?!#$3$l$J$i(B defsubst $B$N%/%m%9%j%U%!%l%s%9$,$"$C(B $B$F$bJ?5$$@$H;W$&!#(B 2002-01-16 mami * navi2ch-util.el (navi2ch-replace-html-tag-regexp-alist): .dat $B$N7A<0$,JQ$o$C$F(B
$B$N8e$K6uGr$,F~$i$J$/$J$C$?$h$&$J$N$GBP1~!#(B $B%$%s%G%s%HJx$l$A$c$&$1$I!"$H$j$"$($:!#(B (navi2ch-replace-html-tag-alist): $BF1>e(B http://pc.2ch.net/test/read.cgi/unix/1009340234/388- 2002-01-16 Nanashi San * Makefile.am (lisp_LISP): navi2ch-version.el $B$r@hF,$K;}$C$FMh$?!#(B (snap): elcdist $B$b:n$k!#(B (recompile): $(lisp_LISP) $B$K0MB8$5$;$?!#(B (elcdist): $B?7%?!<%2%C%H!#(Belc $B%U%!%$%k$N(B tar $B6L$r:n$k!#(B 2002-01-15 Nanashi San require / provide $B$NJ}K!$rJQ99$7$?!#(B provide $B$r%U%!%$%k$N@hF,$K0\F0!#(B($B$3$&$$$&$N$b(B OK $B$_$?$$(B) $B$[$\A4$F$N%U%!%$%k$N(B require $B$r(B navi2ch $B$N$_$K$7$F!"(Bnavi2ch.el $B$G(B $B=gHV$K5$$rIU$1$F(B require $B$9$k$3$H$K$7$?!#(B Makefile $B$r;H$o$J$$>l9g$O(B navi2ch.el $B$G(B require $B$7$F$k=gHV$G%P%$%H(B $B%3%s%Q%$%k$7$F$/$@$5$$!#(B * navi2ch*.el: $B>e5-$NJQ99!#(B * Makefile.am (lisp_LISP): $B%3%s%Q%$%k$9$Y$-=gHV$K$7$?!#(B (recompile): $B?7%?!<%2%C%H!#A4$F$N%U%!%$%k$r%P%$%H%3%s%Q%$%k$9$k!#(B 2002-01-15 Nanashi San hook $B$NDI2C!#(Bprovide $B$N8e$G(B navi2ch-hoge-load-hook $B$re!#(B * navi2ch-bookmark.el (navi2ch-bookmark-mode): $BF1>e!#(B * navi2ch-history.el (navi2ch-history-mode): $BF1>e!#(B * navi2ch-search.el (navi2ch-history-mode): $BF1>e!#(B * navi2ch-article.el (-exit): -exit-hook $B$Ne!#(B * navi2ch-board-misc.el: $BF1>e!#(B * navi2ch-board.el: $BF1>e!#(B * navi2ch-bookmark.el: $BF1>e!#(B * navi2ch-head.el: $BF1>e!#(B * navi2ch-history.el: $BF1>e!#(B * navi2ch-message.el: $BF1>e!#(B * navi2ch-popup-article.el: $BF1>e!#(B * navi2ch-search.el: $BF1>e!#(B * navi2ch-face.el (toplevel): -load-hook $B$Ne!#(B * navi2ch-mona.el: $BF1>e!#(B * navi2ch-net.el: $BF1>e!#(B * navi2ch-util.el: $BF1>e!#(B * navi2ch.el: $BF1>e!#(B * navi2ch-vars.el (toplevel): -load-hook $B$N keymap $B$NA]=|!#F1$8%P%$%s%I$,?'!9$J%U%!%$%k$K$^$?$,$C$F$k$H99?7$7(B $BK:$l$A$c$$$=$&$J$N$G!#$"$H!"(Bcopy-keymap $B$+$i(B set-keymap-panret $B$K(B $BJQ$($?$N$G!"(B(define-key navi2ch-bm-mode-map ...) $B$9$l$PA4$F$N(B board $B7O$N%b!<%I$GM-8z$K$J$j$^$9!#(B * navi2ch-message.el (navi2ch-message-mode-map): navi2ch-global-map $B$r(B set-keymap-parent $B$9$k!#(B($BI,MW$+$J$"(B) * navi2ch-articles.el (navi2ch-articles-mode-map): navi2ch-bm-mode-map $B$r(B copy-keymap -> set-keymap-parent$B!#(B * navi2ch-board.el (navi2ch-board-mode-map): $BF1>e!#(B * navi2ch-bookmark.el (navi2ch-bookmark-mode-map): $BF1>e!#(B * navi2ch-history.el (navi2ch-history-mode-map): $BF1>e!#(B * navi2ch-search.el (navi2ch-search-mode-map): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-mode-map): navi2ch-global-view-map $B$r(B set-keymap-parent $B$7!"6&DLIt$r:o=|!#(B * navi2ch-board-misc.el (navi2ch-bm-mode-map): $BF1>e!#(B * navi2ch-head.el (navi2ch-head-mode-map): $BF1>e!#(B * navi2ch-list.el (navi2ch-list-mode-map): $BF1>e!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): $BF1>e!#(B * navi2ch-vars.el (navi2ch-global-map): $B?7JQ?t!#(B (navi2ch-global-view-map): $B?7JQ?t!#(B * navi2ch.el$B$=$NB>(B: pain -> pane ;) 2002-01-15 Nanashi San * navi2ch-article.el (navi2ch-article-sync): $B$d$C$Q>r7oJQ99!#(B force $B$r;XDj$7$J$$>l9g$O!V(Bre-sync kako article?$B!W$HJ9$+$:!"2a5n%m(B $B%0$N(B re-sync $B$O9T$o$J$$!#(B (navi2ch-article-fetch-article): $B%P%C%U%!$,$J$$;~$O2a5n%m%0$rL5>r(B $B7o$Gr7o$N>l9g$N$_(B $B2a5n%m%0$rl9g$O!V(Bre-sync kako article?$B!W$HJ9$$$FMh$J$/$7$?!#(B * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): offlaw.cgi $B$r;H$($k$h$&$K$7$F$_$?!#(Bofflaw.cgi $B$O%m%0$,(B temp $B$K$"$k(B $B;~0J30$O(B HTTP status 500 $B$rJV$9$N$G!"(Bread.cgi $B$,!V(Bhtml$B2=BT$A!W$rJV(B $B$7$?;~$N$_8F$S=P$7!"5-;v$K(B kako $B$N$h$&$J%^!<%/$bIU$1$J$$!#(B $B4{$KfIW$@$m$&$+!#(B 2002-01-15 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-sync): kako $B$N$H$-$H!"(B'C-u S' $B$N$H$-$b(B navi2ch-article-message-list $B$r?7$7$/:n$j$J$*$9$h$&$K$7$?!#(B (navi2ch-article-update-file): kako $B$N$H$-$O(B (header 'kako)$B!"$"$\!<(B $B$s$N$H$-$O(B (header 'aborn) $B$,JV$k$h$&$KJQ$($?!#(B * navi2ch-net.el (navi2ch-net-update-file-diff): $B$"$\!<$s$N$H$-$O(B (header 'aborn) $B$rJV$9$h$&$K$7$?!#(B (navi2ch-net-update-file-with-readcgi): $BF1>e!#(B 2002-01-14 Nanashi San * navi2ch-net.el (navi2ch-net-download-file): http://pc.2ch.net/test/read.cgi/unix/1009340234/362 $B$?$7$+$K$/$I$$$G$9$M!#(B * navi2ch-article.el (navi2ch-article-find-file): enlarge-window $B$r(B condition-case $B$G0O$`!#(B (navi2ch-article-two-pain): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-select-article): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-two-pain): $BF1>e!#(B * navi2ch.el (navi2ch-goto-url): $BF1>e!#(B XEmacs $B$C$F!#!#!#$Q!<$H#2(B * navi2ch-article.el (navi2ch-article-find-file): enlarge-window $B$NA0$K(B window-height $B$H(B frame-height $B$H$rHf3S$9$k!#(B (navi2ch-article-two-pain): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-select-article): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-two-pain): $BF1>e!#(B * navi2ch.el (navi2ch-goto-url): $BF1>e!#(B XEmacs $B$C$F!#!#!#(B * configure.in: EMACS $B$N%A%'%C%/$r(B acinclude.m4 $B$+$i0\F0!#(B * acinclude.m4 (AM_PATH_LISPDIR): EMACS $B$N%A%'%C%/$r(B configure.in $B$K0\F0!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/345 * navi2ch-article.el (navi2ch-article-find-file): split-window-vertically $B$NA0$K(B enlarge-window $B$9$k!#(B (navi2ch-article-two-pain): $BF1>e!#(B * navi2ch-board-misc.el (navi2ch-bm-select-article): $BF1>e!#(B * navi2ch-board.el (navi2ch-board-two-pain): $BF1>e!#(B * navi2ch.el (navi2ch-goto-url): $BF1>e!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/280 * navi2ch-net.el: $B3F4X?t$G$N(B delete-process $B$r$d$a$k!#(B $BL@F|$N$?$a$K!"$=$N(B2$B!#(B * navi2ch-article.el (navi2ch-article-view-article): V $B$J%9%l$r8+(B $B$?;~$b(B navi2ch-history-add $B$7$F$_$k!#(B * navi2ch-net.el: navi2ch-exit-hook $B$K(B navi2ch-net-cleanup $B$rDI2C!#(B (navi2ch-net-process): $B?7JQ?t!#(B (navi2ch-net-cleanup): $B?74X?t!#(B (navi2ch-net-send-request): navi2ch-net-process $B$K(B proc $B$rBeF~!#(B $BL@F|$N$?$a$K!"$=$N(B1$B!#(B * navi2ch.el (navi2ch-exit): navi2ch-exit-hook $B$r(B run-hooks $B$9$k!#(B * navi2ch-vars.el (navi2ch-exit-hook): $B?7JQ?t!#(B * navi2ch-net.el (navi2ch-net-download-file): $BI=<($r$A$g$C$HJQ$($F(B $B$_$?!#(B (navi2ch-net-update-file): $BF1>e(B (navi2ch-net-update-file-diff): $BF1>e(B (navi2ch-net-update-file-with-readcgi): $BF1>e(B * navi2ch-list.el (navi2ch-list-ignore-category-list): $B%+%F%4%j$,(B $B!VB>$N7G<(HD!W$+$i!VB>$N%5%$%H!W$KJQ$o$C$F$?$N$GDI2C!#(B * navi2ch-article.el (navi2ch-article-sync): kako log $B$r(B re-sync $B$7$J$$;~$K(B navi2ch-article-current-article $B$,(B nil $B$N$^$^$@$C$?$N$G(B $B=$@5!#(B * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): $B2u$l$F$?!#(B $B$F$3$H$GD>$7$?!#(B * navi2ch-article.el (navi2ch-article-update-file): $B%X%C%@$K(B Not-Updated $B$,4^$^$l$F$$$k>l9g$O(B state $B$K(B nil $B$rF~$l$k$h$&$K$7$?!#(B $B$3$l$G(B update $B$5$l$F$J$$;~$b%P%C%U%!$r(B split $B$7$J$*$9$N$,D>$k$+$J!#(B * navi2ch-net.el (navi2ch-net-update-file): Emacs Lisp $B$G$O(B tail-recursion $B$rE83+$7$F$/$l$J$$$?$a!"(BLocation $B;~$O%k!<%W$9$k$3$H(B $B$K$7$?!#%(%i!<%A%'%C%/$b$A$g$C$H87L)$K$7$F$_$k!#(B (navi2ch-net-get-length-from-header): header $B$K(B Content-Range $B$b(B Content-Length $B$b4^$^$l$F$$$J$$>l9g$O(B nil $B$rJV$9$h$&$K$7$?!#(B (navi2ch-net-check-aborn): header $B$ND9$5$rl9g$O(B t $B$r(B $BJV$9$h$&$K$7$?!#(B (navi2ch-net-update-file-diff): $B:9J,l9g$O%X%C%@$K(B Not-Updated $B$rDI2C$9$k!#(B (navi2ch-net-update-file-diff): $BF1>e!#(B * Makefile.am: automake $B$,:n$k(B Makefile.in $B$N$h$&$K3F9T$r(B \ $B$G$D$J(B $B$$$G$_$k!#(Bnavi2ch-board-misc.elc $B$X$N0MB84X78DI2C!#(B * navi2ch-net.el (navi2ch-net-download-file): http status $B$,(B "304" $B$N;~!"(Baccept-status $B$G$"$l$P(B delete-process $B$7$J$$$h$&$K$7$?!#(B (navi2ch-net-download-file-range): http status "304" $B$b(B OK $B$K$7$?!#(B (navi2ch-net-update-file): http status "304" $B$N;~$b(B nil $B$G$O$J$/(B header $B$rJV$9$h$&$K$7$?!#(B (navi2ch-net-update-file-diff): $BF1>e!#(B 2002-01-14 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-get-url): kako $B$G$J$/$F$b2a5n%m%0$N(B url $B$rJV$9;v(B $B$,$"$C$?$N$r=$@5(B 2002-01-13 Taiki SUGAWARA * navi2ch.el (navi2ch-2ch-url-p): navi2ch-2ch-host-list $B$H(B navi2ch-url-to-host $B$r;H$&$h$&$K!#(B * navi2ch-vars.el (navi2ch-2ch-host-list): $B?7JQ?t!#(B * navi2ch-util.el (navi2ch-url-to-host): $B?74X?t!#(B * navi2ch-net.el (navi2ch-net-update-file-with-readcgi): $B@55,I=8==$@5!#(Bkako $B$KBP1~!#(B * navi2ch-board.el (navi2ch-board-get-uri): $B0JA0$N(B kako $BBP1~%3!<%I$r>C$9!#(B (navi2ch-board-get-file-name): $BF1>e!#(B (navi2ch-board-url-to-board): $B:#$N(B kako $B$KBP1~$K9g$o$;$k!#(B (navi2ch-board-get-host): navi2ch-url-to-host $B$r;H$&$h$&$K!#(B (navi2ch-board-set-mode-line): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-get-kako-url): $B?74X?t!#(B (navi2ch-article-get-url): kako $B$KBP1~!#>e$r;H$&$h$&$K!#(B (navi2ch-article-url-to-article): kako $B$KBP1~!#(B (navi2ch-article-sync): kako $B$KBP1~!#$9$G$KFI$_9~$_:Q$_$N2a5n%m%0(B $B$J$i$P$b$&0lEYFI$_9~$`$+J9$/$h$&$K!#(B (navi2ch-article-update-file): kako $B$KBP1~!#FI$a$J$+$C$?>l9g$O2a5n(B $B%m%0$rC5$7$K9T$/$h$&$K!#(B (navi2ch-article-save-info): kako $B$KBP1~!#(B 2002-01-13 Taiki SUGAWARA * navi2ch-util.el (navi2ch-alist-list-to-alist): defsubst $B$+$i(B defun$B$KJQ99!#(B * navi2ch-list.el (navi2ch-list-get-file-name): defsubst $B$+$i(B defun$B$KJQ99!#(B * navi2ch-board.el (navi2ch-board-get-uri): defsubst $B$+$i(B defun$B$KJQ99!#(B (navi2ch-board-get-host): $BF1>e!#(B (navi2ch-board-get-url): $BF1>e!#(B (navi2ch-board-get-readcgi-url): $BF1>e!#(B (navi2ch-board-get-bbscgi-url): $BF1>e!#(B (navi2ch-board-equal): $BF1>e!#(B (navi2ch-board-get-file-name): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-get-url): defsubst $B$+$i(B defun$B$KJQ99!#(B (navi2ch-article-get-file-name): $BF1>e!#(B (navi2ch-article-get-info-file-name): $BF1>e!#(B 2002-01-13 Nanashi San * navi2ch-article.el (toplevel): navi2ch-load-status-hook -> nai2ch-save-status-hook * navi2ch-vars.el: Emacs $B$GJT=8$9$k;~(B syntax-table $B$,$/$5$k$N$G!"(B $BJ8;zNsCf$N9TF,$N(B '(' $B$r(B '\(' $B$K$7$?!#(B (navi2ch-article-auto-expunge): $B?7JQ?t!#(B($B:#$N$H$3$m%G%U%)%k%H$O(B nil) (navi2ch-message-user-name): $B%G%U%)%k%H$r(B 20 $B$KJQ99!#(B $B$b$C$HB?$/$F$b$$$$$+$J!#(B * navi2ch-article.el: $B%3%s%Q%$%k$G$-$J$/$J$C$F$?$N$G(B provide -> require $B$N0LCV$rJQ99!#(B (navi2ch-article-through-ask): FR#502627 no-ask $B$,(B no-nil $B$N;~$b(B navi2ch-article-enable-through $B$rJV$7$F$$(B $B$?$N$r=$@5!#(B (navi2ch-article-expunge-buffers): $B%P%C%U%!$N?t$r(B 0 $B8D$K$G$-$k$h$&(B $B$K$7$?!#(B (navi2ch-article-view-article): navi2ch-article-auto-expunge $B$,(B non-nil $B$N;~$@$1(B expunge $B$9$k$h$&$K!#(B $B%P%C%U%!$r:n$kA0$K(B navi2ch-article-expunge-buffers $B$9$k$h$&$K!#(B (navi2ch-article-view-article-from-file): $BF1>e!#(B * navi2ch.el (navi2ch-offline): navi2ch-util.el $B$X0\F0!#(B (navi2ch-offline-on): $BF1>e!#(B (navi2ch-offline-off): $BF1>e!#(B (navi2ch-toggle-offline): $BF1>e!#(B * navi2ch-util.el (navi2ch-offline): navi2ch.el $B$+$i0\F0!#(B (navi2ch-offline-on): $BF1>e!#(B (navi2ch-offline-off): $BF1>e!#(B (navi2ch-toggle-offline): $BF1>e!#(B $B$3$l$G(B navi2ch.el $BCf$NB>$K0MB8$7$J$$4X?t$O(B navi2ch-util.el $B$X$N0\(B $BF0$,40N;$7$?$+$J!#(B 2002-01-13 Taiki SUGAWARA $B:#EY$O(B navi2ch-board-misc $B4XO"$N@0M}!#$*$+$7$/$J$C$F$$$?$i8fLH$J$5(B $B$$!#(B * navi2ch-vars.el (navi2ch-save-status-hook): $B?7JQ?t!#(B (navi2ch-load-status-hook): $BF1>e!#(B * navi2ch.el (navi2ch): navi2ch-load-status-hook $B$r8F$V$h$&$K!#(B (navi2ch-save-status): navi2ch-save-status-hook $B$r8F$V$h$&$K!#(B * navi2ch-list.el (navi2ch-list-navi2ch-category-alist): $B=i4|CM$r(B nil $B$K!#$3$$$D$O(B navi2ch-bm-regist-board $B$G@_Dj$5$l$k(B(navi2ch-list $B$J4X?t$G@_Dj$5$l(B $B$kJ}$,$h$+$C$?$+!)(B)$B!#(B navi2ch-save-status-hook $B$KEPO?$9$k$h$&$K!#(B (navi2ch-list-get-category-list-subr): board $B$NMWAG$K(B type $B$bDI2C!#(B navi2ch-bm-select-board $B$NJQ99$K9g$o$;$?!#(B (navi2ch-list-bookmark-node): type $B$,(B board $B$+(B bookmark $B$+$GH=Dj$9(B $B$k$h$&$K!#(B (navi2ch-list-expire-all): type $B$,(B board $B$+$GH=Dj$9$k$h$&$K!#(B * navi2ch-search.el (toplevel): navi2ch-list $B$r(B require $B$9$k$h$&$K!#(B navi2ch-bm-regist-board $B$r8F$V$h$&$K!#(B navi2ch-(save|load)-status-hook $B$KEPO?$9$k$h$&$K!#(B * navi2ch-history.el (toplevel): navi2ch-bm-regist-board $B$r8F$V$h$&$K!#(B navi2ch-(save|load)-status-hook $B$KEPO?$9$k$h$&$K!#(B (navi2ch-history): $B0z?t$K(B args $B$r * navi2ch-board-misc.el navi2ch-bm-*-function $B$N(B funcall $B$,$&$C$H$*$7$+$C$?$N$G$G(B fset $B$7(B $B$F(B navi2ch-bm-*internal $B$r(B funcall $B$7$J$$$G$b8F$Y$k$h$&$K$7$?!#(B (navi2ch-bm-set-func): fset $B$b$9$k$h$&$K$7$?!#(B (navi2ch-bm-*): $B>e$NJQ99$K9g$o$;$k!#(B (navi2ch-bm-get-property-internal): $B4X?tL>Dj5A!#(B (navi2ch-bm-set-property-internal): $BF1>e!#(B (navi2ch-bm-get-board-internal): $BF1>e!#(B (navi2ch-bm-get-article-internal): $BF1>e!#(B (navi2ch-bm-exit-internal): $BF1>e!#(B ($B?'!9(B): $B>e$NJQ99$K9g$o$;$k!#(B * navi2ch-article.el (navi2ch-article-show-url): $B%=!<%9$r$A$g$C$H@0$($F$_$?!#(B (navi2ch-article-copy-title): $BF1>e!#(B * navi2ch-message.el (navi2ch-message-send-message): From: $B$H$+$N8e$K6uGr$,$J$/$F$b$$$$(B $B$h$&$K$7$F$_$?!#(B 2002-01-12 Nanashi San * navi2ch-article.el (navi2ch-article-to-url): start $B$d(B end $B$,?t;z(B $B$@$C$?>l9g$OJ8;zNs$KJQ99$9$k!#(B (navi2ch-article-show-url-subr): $B%j!<%8%g%s;XDj$,$&$^$/$$$C$F$J$+$C(B $B$?$N$G=$@5!#(B * navi2ch.el (navi2ch-coding-system): navi2ch-util.el $B$K0\F0!#(B (navi2ch-insert-file-contents): $BF1>e!#(B (navi2ch-expand-file-name): $BF1>e!#(B * navi2ch-util.el (navi2ch-define-mouse-key): toplevel if $BGS=|!#(B (navi2ch-set-buffer-multibyte): $BF1>e!#(B (navi2ch-set-buffer-multibyte): $BF1L>4X?t$r%^%/%m$K!#F1>e!#(B (navi2ch-string-as-unibyte): $BF1>e!#(B (toplevel): (browse-url-interactive-arg) $B$O(B autoload $B$8$c$J$$$N$G(B browse-url $B$r(B require$B!#(B (navi2ch-coding-system): navi2ch.el $B$+$i0\F0!#(B (navi2ch-insert-file-contents): $BF1>e!#(B (navi2ch-expand-file-name): $BF1>e!#(B $B$3$$$D$i$O$d$C$Q$3$C$A$NJ}$,$$$$$s$8$c$J$$(B? 2002-01-12 Taiki SUGAWARA navi2ch-util, navi2ch-net $B$+$i(B list, board, article $B0MB8$N%3!<%I$r(B $B$O$:$7$F$_$?!#$^$?!"$=$l$KH<$J$7$$$/$D$+$NJQ?t!"4X?tL>$bJQ99!#(B navi2ch-url-to-article => navi2ch-article-url-to-article navi2ch-url-to-board => navi2ch-board-url-to-board navi2ch-net-coding-system => navi2ch-coding-system * navi2ch.el (toplevel): navi2ch-list $B$G(B require $B$9$k$h$&$K$J$C$?(B feature $B$r(B require $B$7$J$$$h$&$K!#(B (navi2ch-coding-system): navi2ch-net $B$+$i0\F0!#L>A0JQ99!#(B (navi2ch-save-info): navi2ch-coding$B0J2e!#(B (navi2ch-goto-url): navi2ch-util $B$+$i0\F0!#(B (navi2ch-2ch-url-p): $BF1>e!#(B (navi2ch-insert-file-contents): $BF1>e!#(B (navi2ch-expand-file-name): $BF1>e!#(B * navi2ch-vars.el (navi2ch-init-file): expand-file-name $B$r;H$&$h$&$K(B (navi2ch-bm-fetched-info-file): navi2ch-board-misc $B$+$i0\F0!#(B (navi2ch-bookmark-file): navi2ch-bookmark $B$+$i0\F0(B (navi2ch-history-file): navi2ch-history $B$+$i0\F0(B * navi2ch-util.el (navi2ch-enable-readcgi-p): board $B$G$O$J$/(B host $B$rLc$&$h$&$K!#(B * navi2ch-net.el (toplevel): navi2ch-net $B$r(B require $B$7$F$_$k!#(B (navi2ch-net-update-file-with-readcgi): navi2ch-coding... $B0J2e(B (navi2ch-net-send-message-success-p): $BF1>e(B (navi2ch-net-send-message-error-string): $BF1>e(B * navi2ch-list.el (toplevel): navi2ch-search, navi2ch-history, navi2ch-bookmark, navi2ch-article $B$r(B require $B$9$k$h$&$K!#(B (navi2ch-list-make-board-txt): navi2ch-coding-system $B$NL>A0JQ99$K(B $B9g$o$;$k!#(B * navi2ch-board.el (toplevel): navi2ch $B$r(B require $B$9$k$h$&$K!#(B (navi2ch-board-url-to-board): navi2ch-util $B$+$i0\F0!#L>A0JQ99!#(B (navi2ch-board-to-url): $BF1>e!#(B (navi2ch-board-save-old-subject-file): navi2ch-coding-system $B$NL>(B $BA0JQ99$K9g$o$;$k!#(B (navi2ch-board-update-seen-articles): $B$J$s$+$$$i$J$$JQ?t;H$C$F$?$N(B $B$GA0JQ99$K9g(B $B$o$;$k!#(B * navi2ch-article.el (navi2ch-article-url-to-article): navi2ch-util $B$+$i0\F0!#L>A0JQ99!#(B (navi2ch-article-to-url): $BF1>e!#=PNO%U%)!<%^%C%H$r=$@5!#(B (navi2ch-article-update-file): navi2ch-board-get-host $B$NJQ99$K9g$o(B $B$;$k!#>e$NJQ99$K9g$o$;$k!#(B (navi2ch-article-select-current-link): $BF1>e!#(B (navi2ch-article-show-url-subr): $BHO0O;XDj$7$?$H$-$K:G=i$N%l%9$rI=(B $B<($7$J$$$h$&$K!#(B * navi2ch-board.el (navi2ch-board-get-bbscgi-url): $B?74X?t!#(Bdefsubst $B$K$9$kI,MW$C$FA4(B $BA3$J$$$+$b!#(B * navi2ch-message.el (navi2ch-message-send-message): navi2ch-net-send-message $B$NJQ99$K(B $B9g$o$;$k!#(Bnavi2ch-board-get-bbscgi-url $B$r;H$&$h$&$K!#(B * navi2ch-net.el (navi2ch-net-send-message): $B0z?t$+$i(B board, article $B$r$O$:$7$?!#JQ(B $B$o$j$K(B url, referer, bbs, key $B$rDI2C!#(B * navi2ch.el (toplevel): navi2ch-version $B$r(B require $B$9$k$h$&$K$7$?!#(B 2002-01-12 Nanashi San * configure.in: version $B$r(B 1.4-DEV $B$KJQ$($?!#(B autoconf / automake $B$N$r<+F0E*$K * navi2ch-version.el.in: $B?7%U%!%$%k!#(Bnavi2ch-version $B$r@_Dj$9$k%U%!(B $B%$%k!#(Bnavi2ch.el $B$G;H$&$h$&$K$9$k$N$O$A$g$C$HBT$C$F$_$k!#(B * Makefile.am (EXTRA_DIST): navi2ch-version.el.in $B$rDI2C!#(B (lisp_LISP): navi2ch-version.el $B$rDI2C!#(B (BUILT_SOURCES): $B?7JQ?t!#(B navi2ch-version.el $B$r<+F0E*$K:n$k$h$&$K$7$?!#(B (snap): $B?7%?!<%2%C%H!#(Bmake snap $B$G%9%J%C%W%7%g%C%H$r:n@.!#(B * configure.in: Cygwin $B$G$O(B emacs $B$N8uJd$H$7$F(B Meadow*.exe $B$b2C$($k!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/259 Emacs $B$N2<$@$H4D6-JQ?t(B EMACS $B$,(B t $B$K$J$k$N$G!"6u$K$9$k!#(B * navi2ch-article.el (navi2ch-article-view-article): navi2ch-article-expunge-buffers $B$N0LCV$rJQ99!#(B (navi2ch-article-view-article-from-file): expunge $B$9$k$h$&$K$7$F$_(B $B$k!#(B * navi2ch-net.el (navi2ch-net-update-file-diff): range $B$K%U%!%$%k(B $B%5%$%:$HEy$7$$CM$r;XDj$9$k$H%U%!%$%k$NFbMF$rA4ItAw$C$F$/$k$h$&$K$J$C(B $B$F$?$N$G(B 1- $B$9$k!#(B $B0JA0$N%U%!%$%k$rA^F~$9$k$N$O(B HTTP status $B$,(B 206 $B$N;~$@$1$K!#(B * navi2ch-list.el (navi2ch-list-expire-current-board): list $B%b!<%I(B $B$GHD$N(B expire $B$,$G$-$J$+$C$?$N$r=$@5!#(B * ChangeLog: $BKvHx$K(B $ I d $ $B$rDI2C!#(Bcvs stat $B$7$J$/$F$b(B ChangeLog $B$N%j%S%8%g%s$,$o$+$k$h$&$K!#(B * navi2ch-net.el (navi2ch-net-get-content-subr-with-temp-file): Emacs CE $BMQ$N(B navi2ch-net-get-content-subr $B$r%j%M!<%`!#(B (navi2ch-net-get-content-subr-function): $B?7JQ?t!#(B (navi2ch-net-get-content): $B>e5-JQ?t$r7PM3$7$F(B *-subr $B$r8F$V$h$&$K!#(B top-level $B$G$N(B if $BEy$O%P%$%H%3%s%Q%$%k;~$KE83+$5$l$F$7$^$&$N$G!"$3(B $B$&$7$H$+$J$$$H$h$=$G:n$C$?%P%$%H%3!<%I$@$H(B Emacs CE $BMQ4X?t$,M-8z$K(B $B$J$i$J$$!#(B 2002-01-10 NOKUBI Takatsugu * doc/navi2ch.texi: $B%9%l(B/$B%l%9$r1#$9J}K!$K$D$$$F5-=R(B. $B%W%m%/%7$K4X$9$k5-=R$KDI2C(B. typo $B$N=$@5(B. 2002-01-10 Nanashi San * configure.in: --with-x?emacs $B$KL@<(E*$K%Q%9$r;XDj$7$?>l9g$O(B EMACS $B$KD>@\BeF~$9$k!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/239-240n * navi2ch-article.el (navi2ch-article-summary-element-set-seen): $B%^%/%m0z?t$N(B element $B$,E83+$5$l$F$J$+$C$?$N$G=$@5!#(B (navi2ch-article-summary-element-set-access-time): $BF1>e(B (navi2ch-article-expunge-buffers): article buffer $B$NA]=|$rJL4X?t$K(B $BJ,$1$F$_$?!#e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-article-view-article-from-file): navi2ch-article-message-list $B$r@_Dj$7$?8e$G%b!<%I%i%$%s$r99?7!#(B (navi2ch-article-sync-from-file): $B>e5-$KH<$$%b!<%I%i%$%s$r99?7$7$J(B $B$$$h$&$K!#(B 2002-01-10 Taiki SUGAWARA * navi2ch-history.el (navi2ch-history-add): $B$J$k$Y$/(B subject $B$rI=<($G$-$k$h$&$K!#(B (navi2ch-history-insert-subject): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-view-article): navi2ch-history-add $B$N0LCVJQ99(B 2002-01-10 Nanashi San * acinclude.m4: autoconf 2.1.3 $BBP1~!#(B * configure.in: $BF1>e!#(B * Makefile.am: automake 1.4 $BBP1~!#(B 2002-01-10 Taiki SUGAWARA * navi2ch-net.el (toplevel): cl $B$r(B require $B$9$k$h$&$K$7$?!#(B * navi2ch-article.el (navi2ch-article-view-article): navi2ch-add-history $B$r;H$&$h$&$K!#(B * navi2ch-util.el (navi2ch-goto-url): navi2ch-add-history $B$r;H$o$J$$$h$&$K!#(B * navi2ch-board-misc.el (navi2ch-bm-select-article): navi2ch-add-history $B$r;H$o$J$$$h$&$K!#(B 2002-01-10 Nanashi San * Makefile.am: $B0MB84X78DI2C!#(B * acinclude.m4 config.guess config.sub: $B?7%U%!%$%k!#(B * configure.in: lispdir $B$N%G%U%)%k%H$r(B site-lisp/navi2ch $B$K!#(B --with-bash: $B?7%*%W%7%g%s!#(BCygwin $B$N;~(B bash $B$G$J$$$H$&$^$/(B make $B$G(B $B$-$J$$$i$7$$$N$G!"(BCygwin $B$N;~$O<+F0E*$KM-8z$K!#(B 2002-01-10 Taiki SUGAWARA * navi2ch-net.el (navi2ch-net-http-proxy-basic-credentials): $B?74X?t!#(B (navi2ch-net-make-request-header): $B?74X?t!#(B (navi2ch-net-split-url): $B>e5-4X?t$r;H$&$h$&$K!#(BProxy $BG'>Z$KBP1~!#(B * navi2ch-vars.el$B!!(B $B>e5-(B Proxy $BG'>Z$K$D$+$&!#(B (navi2ch-net-http-proxy-userid): $B?7JQ?t!#(B (navi2ch-net-http-proxy-password): $BF1>e!#(B 2002-01-10 mami * navi2ch-vars.el (navi2ch-article-max-buffers): $B?7JQ?t(B * navi2ch-article.el (navi2ch-article-view-article): navi2ch-article-max-buffers $B$G(B article buffer $B$N:GBg?t$r@)8B$G$-$k$h$&$K!#(B 2002-01-09 Nanashi San * navi2ch-util.el (navi2ch-replace-html-tag-alist): $B$$$/$D$+DI2C!#(B (navi2ch-replace-html-tag-regexp-alist): $B?7JQ?t!#(B (navi2ch-replace-html-tag-regexp): $B>e5-(B2$B$D$NJQ?t$r$/$C$D$1$k$h$&$K!#(B (navi2ch-replace-string): $BF1$8J8;zNs$r2?EY$bCV49$7$F$$$?$N$GCV49$7(B $B$?J,$@$13+;O%]%$%s%H$r?J$a$k$h$&$K$7$?!#(B (navi2ch-replace-html-tag-to-string): $B?74X?t!#(B (navi2ch-replace-html-tag): $B>e5-4X?t$r;H$&$h$&$K$7$?!#(B $BF1$8J8;zNs$r(B2$B2sCV$-49$($J$$$h$&!"$9$Y$F$NCV49$r0lEY$K9T$&$h$&$K$7$?!#(B (navi2ch-replace-html-tag-with-temp-buffer): $BF1>e!#(B * navi2ch-article.el (navi2ch-article-parse-message): $B%j%9%H$r:n$C(B $B$F$=$l$rJV$7$F$$$?$N$G(B mapcar $B$K!#(B defsubst $B$5$l$?4X?t$,%$%s%i%$%sE83+$5$l$k$h$&!"(Bfuncall $B$r;H$o$:4X(B $B?t$rD>@\8F$S=P$9$h$&$K$7$?!#(B (navi2ch-article-insert-messages): Emacs $B$N(B gc $B$O$H$F$b(B lazy $B$J$N(B $B$GL@<(E*$K(B (garbage-collect) $B$r8F$s$G$_$k!#26$N=j$G$O%a%b%j;HMQNL(B $B$,$=$3$=$38:$C$?!#(B 2002-01-09 Taiki SUGAWARA * navi2ch-util.el (toplevel): $B@h$K(B mel $B$r(B require $B$9$k$h$&$K$7$?!#(B * navi2ch-vars.el (navi2ch-net-gunzip-program): gzip $B$KJQ$($?!#(B (navi2ch-net-gunzip-args): -d -c $B$KJQ$($?!#(B * navi2ch-board.el (navi2ch-board-get-readcgi-url): $B$d$C$Q$j(B board-id $B$Ne5-JQ99$K$h$j:o=|!#(B 2002-01-08 Nanashi San * navi2ch-list.el (navi2ch-list-bookmark-node): $B?74X?t!#(B (navi2ch-list-insert-bookmarks): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-list-add-bookmark): $B>e5-4X?t$r;H$&$h$&$K!#(B (navi2ch-list-delete-bookmark): $B>e5-4X?t$r;H$&$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/146 * navi2ch-board-misc.el (navi2ch-bm-exec-subr): appy $B$r(B save-excursion $B$G0O$s$G$_$k!#(B Bug ID #500300$B!#(B 2002-01-08 Taiki SUGAWARA * navi2ch-board.el: ~giko $B$J$H$3$m$K$"$kHD$KBP=h!#(B (navi2ch-board-get-home-uri): $B?74X?t!#(B (navi2ch-board-get-readcgi-url): $B>e5-4X?t$r;H$&$h$&$K!#(B 2002-01-07 Taiki SUGAWARA * navi2ch-article.el (navi2ch-article-goto-number-or-board): $B%V%C%/%^!<%/Ey$K0\F0$9$k$H(B $B%(%i!<$K$J$C$F$$$?$N$r=$@5!#(B $B%G%U%)%k%H$r$=$N%l%9$NL>A0$K$"$k?t;z$KJQ99!#(B $B0\F0$G$-$J$$$H$-$O%(%i!<$K!#(B 2002-01-07 Nanashi San * navi2ch-util.el: base64 $B$N(B require $BJ}K!$rJQ$($?!#(B XEmacs $B$G$b(B w3 $B$+(B FLIM $B$rF~$l$F$l$P(B base64 $B5!G=$r;H$($k$h$&$K!#(B * navi2ch-article.el, navi2ch-articles.el, navi2ch-board-misc.el, navi2ch-board.el, navi2ch-bookmark.el, navi2ch-history.el, navi2ch-list.el, navi2ch-popup-article.el, navi2ch-search.el, navi2ch-util.el, navi2ch.el: $BF0:n;~$K(B cl $B%Q%C%1!<%8$r;H$o$J$$$h$&$K!#(B (require 'cl) -> (eval-when-compile (require 'cl)) copy-list -> copy-sequence copy-tree -> copy-alist * TODO: Todo $B$+$i%j%M!<%`!#(BWindows $B$@$H%U%!%$%kL>$N(B case $B$rL5;k$9(B $B$k$;$$$+!"(Bautomake $B$,$&$^$/$$$C$F$J$+$C$?$?$a!#(B * Makefile.am: $B>e5-%j%M!<%`$KBP1~!#(B * navi2ch-util.el: base64 $B4X78$r$A$g$$=$@5!#JQ?t$K(B docstring $BDI2C!#(B (navi2ch-base64-begin-delimiter-with-name-regexp): $B:o=|(B (navi2ch-base64-write-region): $B>e5-JQ99$KBP1~(B * .cvsignore: $B?7%U%!%$%k!#(Bcvs update $B$,(B configure $B$N:n@.$7$?%U%!%$(B $B%k$K$D$$$FJ86g$r8@$&$N$rL[$i$;$k!#(B * doc: $B?75,%G%#%l%/%H%j!#(B 2002-01-07 mami * navi2ch-board.el (navi2ch-board-get-subject-list): file $B$K(B regexp $B$,8+$D$+$i$J$/$F$b(B $B%(%i!<$K$J$i$J$$$h$&$K!#(B 2002-01-06 Taiki SUGAWARA $B3F%U%!%$%k$N(B define-key $B$N$H$3$N=q$-J}$rJQ99!#(B $B7k9=$9$C$-$j$7$?5$$,$9$k!#(B 2002-01-06 Taiki SUGAWARA base64 $B4X78$NDI2C!#(B http://pc.2ch.net/test/read.cgi/unix/999166513/962 * navi2ch-util.el (navi2ch-base64-begin-delimiter): $B?7Dj?t!#(B (navi2ch-base64-end-delimiter): $BF1>e!#(B (navi2ch-base64-begin-delimiter-regexp): $BF1>e!#(B (navi2ch-base64-end-delimiter-regexp): $BF1>e!#(B (navi2ch-base64-line-regexp): $BF1>e!#(B (navi2ch-base64-begin-delimiter-with-name-regexp): $BF1>e!#(B (navi2ch-base64-write-region): $B?74X?t!#(B (navi2ch-base64-insert-file): $BF1>e!#(B * navi2ch-popup-article.el (navi2ch-popup-article-mode-map): "M-b" $B$K(B navi2ch-article-base64-decode-message $B$r@_Dj!#(B * navi2ch-message.el (navi2ch-message-mode-map): "C-cC-b" $B$K(B navi2ch-base64-insert-file $B$r@_Dj!#(B * navi2ch-article.el (navi2ch-article-mode-map): "M-b" $B$K(B navi2ch-article-base64-decode-message $B$r@_Dj!#(B (navi2ch-article-base64-decode-message): $B?74X?t!#(B 2002-01-06 mami * navi2ch-vars.el (navi2ch-message-aa-alist): $B$$$/$D$+DI2C!#(B (navi2ch-message-user-name-alist): $B?7JQ?t(B (navi2ch-message-always-pop-message): $B?7JQ?t(B (navi2ch-article-citation-regexp): $B9T$,(B ">" $B$@$1$N$H$-A0$r@_Dj$G$-(B $B$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/999166513/860 (navi2ch-message-write-message): $B=q$-$+$1$N(B message $B$r>o$KI|85(B http://pc.2ch.net/test/read.cgi/unix/999166513/866 * navi2ch-board-misc.el (navi2ch-bm-mark-region): region $B$N;OE@!&=*E@$,9TF,!&9TKv$8$c$J$$$H(B $B$-$N5sF0$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/999166513/889 * navi2ch-article.el (navi2ch-article-view-article-from-file): navi2ch-article-message-list $B$KF~$l$k$h$&=$@5(B http://pc.2ch.net/test/read.cgi/unix/1009340234/73-74 * navi2ch-net.el (navi2ch-net-send-message): $BEj9F<:GT;~$N%(%i!<%a%C%;!<%8$rI=<(!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/46 2002-01-06 Taiki SUGAWARA * navi2ch-board.el: $B$+$C$3$,$:$l$F$$$?$N$rD>$7$?(B $Id$ navi2ch/INSTALL000066400000000000000000000224321173560164300134520ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. navi2ch/Makefile.am000066400000000000000000000042241173560164300144540ustar00rootroot00000000000000AUTOMAKE_OPTIONS = 1.8 lisp_LISP = navi2ch-version.el \ navi2ch-vars.el navi2ch-face.el navi2ch-util.el \ navi2ch-net.el navi2ch-list.el navi2ch-article.el \ navi2ch-popup-article.el navi2ch-board-misc.el \ navi2ch-board.el navi2ch-articles.el navi2ch-bookmark.el \ navi2ch-history.el navi2ch-search.el navi2ch-message.el \ navi2ch.el \ navi2ch-head.el navi2ch-mona.el navi2ch-e21.el navi2ch-xmas.el \ navi2ch-splash.el navi2ch-directory.el \ navi2ch-be2ch.el navi2ch-multibbs.el \ navi2ch-jbbs-net.el navi2ch-jbbs-shitaraba.el navi2ch-machibbs.el \ navi2ch-futaba.el navi2ch-megabbs.el \ navi2ch-http-date.el navi2ch-localfile.el navi2ch-oyster.el \ navi2ch-auto-modify.el navi2ch-p2.el navi2ch-thumbnail.el lisp_DATA = navi2ch-config.el EXTRA_DIST = Makefile.old bcomp.el $(lisp_LISP) \ bcomp.el.in navi2ch-version.el.in ChangeLog.1 ChangeLog.2 BUILT_SOURCES = $(srcdir)/navi2ch-version.el $(srcdir)/bcomp.el SUBDIRS = contrib doc icons test $(srcdir)/navi2ch-version.el: @MAINTAINER_MODE_TRUE@ $(srcdir)/navi2ch-version.el.in $(srcdir)/configure.in rm -f $@.tmp && \ sed -e 's/@\(VERSION\)@/$(VERSION)/' \ $(srcdir)/navi2ch-version.el.in > $@.tmp && \ mv $@.tmp $@ snap: rm -f $(srcdir)/navi2ch-version.el && \ $(MAKE) $(AM_MAKEFLAGS) VERSION=@VERSION@-`date +%y%m%d` dist elcdist && \ rm -f $(srcdir)/navi2ch-version.el && \ $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/navi2ch-version.el elcdist: $(ELCFILES) rm -rf $(distdir) && \ mkdir $(distdir) && \ cp -p $(ELCFILES) $(distdir) && \ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir)-elc.tar.gz && \ rm -rf $(distdir) $(srcdir)/bcomp.el: @MAINTAINER_MODE_TRUE@ $(srcdir)/bcomp.el.in $(srcdir)/Makefile.am rm -f $@ && \ list=`for file in $(lisp_LISP); do echo -n "\"$$file\" "; done` && \ sed -e "s/@\(lisp_LISP\)@/$$list/;" < $(srcdir)/bcomp.el.in > $@ || rm $@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$@ $(SHELL) ./config.status Makefiles: $(top_builddir)/config.status $(SHELL) $(top_builddir)/config.status update: ( cd $(srcdir); $(CVS) update -P -d ) && \ $(MAKE) $(AM_MAKEFLAGS) Makefiles navi2ch/Makefile.in000066400000000000000000000562311173560164300144720ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/navi2ch-config.el.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO config.guess config.sub elisp-comp install-sh missing \ mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = navi2ch-config.el SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(lispdir)" "$(DESTDIR)$(lispdir)" lispLISP_INSTALL = $(INSTALL_DATA) LISP = $(lisp_LISP) am__ELFILES = navi2ch-article.el navi2ch-articles.el \ navi2ch-auto-modify.el navi2ch-be2ch.el navi2ch-board-misc.el \ navi2ch-board.el navi2ch-bookmark.el navi2ch-directory.el \ navi2ch-e21.el navi2ch-face.el navi2ch-futaba.el \ navi2ch-head.el navi2ch-history.el navi2ch-http-date.el \ navi2ch-jbbs-net.el navi2ch-jbbs-shitaraba.el navi2ch-list.el \ navi2ch-localfile.el navi2ch-machibbs.el navi2ch-megabbs.el \ navi2ch-message.el navi2ch-mona.el navi2ch-multibbs.el \ navi2ch-net.el navi2ch-oyster.el navi2ch-p2.el \ navi2ch-popup-article.el navi2ch-search.el navi2ch-splash.el \ navi2ch-thumbnail.el navi2ch-util.el navi2ch-vars.el \ navi2ch-version.el navi2ch-xmas.el navi2ch.el am__ELCFILES = $(am__ELFILES:.el=.elc) ELCFILES = $(LISP:.el=.elc) elisp_comp = $(top_srcdir)/elisp-comp lispDATA_INSTALL = $(INSTALL_DATA) DATA = $(lisp_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EMACS = @EMACS@ EMACSLOADPATH = @EMACSLOADPATH@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ icondir = @icondir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ packagedir = @packagedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = 1.8 lisp_LISP = navi2ch-version.el \ navi2ch-vars.el navi2ch-face.el navi2ch-util.el \ navi2ch-net.el navi2ch-list.el navi2ch-article.el \ navi2ch-popup-article.el navi2ch-board-misc.el \ navi2ch-board.el navi2ch-articles.el navi2ch-bookmark.el \ navi2ch-history.el navi2ch-search.el navi2ch-message.el \ navi2ch.el \ navi2ch-head.el navi2ch-mona.el navi2ch-e21.el navi2ch-xmas.el \ navi2ch-splash.el navi2ch-directory.el \ navi2ch-be2ch.el navi2ch-multibbs.el \ navi2ch-jbbs-net.el navi2ch-jbbs-shitaraba.el navi2ch-machibbs.el \ navi2ch-futaba.el navi2ch-megabbs.el \ navi2ch-http-date.el navi2ch-localfile.el navi2ch-oyster.el \ navi2ch-auto-modify.el navi2ch-p2.el navi2ch-thumbnail.el lisp_DATA = navi2ch-config.el EXTRA_DIST = Makefile.old bcomp.el $(lisp_LISP) \ bcomp.el.in navi2ch-version.el.in ChangeLog.1 ChangeLog.2 BUILT_SOURCES = $(srcdir)/navi2ch-version.el $(srcdir)/bcomp.el SUBDIRS = contrib doc icons test all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) navi2ch-config.el: $(top_builddir)/config.status $(srcdir)/navi2ch-config.el.in cd $(top_builddir) && $(SHELL) ./config.status $@ uninstall-info-am: elc-stamp: $(LISP) @echo 'WARNING: Warnings can be ignored. :-)' @rm -f elc-temp && touch elc-temp if test "$(EMACS)" != no; then \ set x; \ list='$(LISP)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ set x "$$@" "$$d$$p"; shift; \ done; \ shift; \ EMACS="$(EMACS)" $(SHELL) $(elisp_comp) "$$@" || exit 1; \ else : ; fi @mv -f elc-temp $@ $(am__ELCFILES): elc-stamp @if test "$(EMACS)" != no && test ! -f $@; then \ trap 'rm -rf elc-lock elc-stamp' 1 2 13 15; \ if mkdir elc-lock 2>/dev/null; then \ rm -f elc-stamp; \ $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \ rmdir elc-lock; \ else \ while test -d elc-lock; do sleep 1; done; \ test -f elc-stamp; exit $$?; \ fi; \ else : ; fi install-lispLISP: $(lisp_LISP) $(ELCFILES) @$(NORMAL_INSTALL) @if test "$(EMACS)" != no; then \ test -z "$(lispdir)" || $(mkdir_p) "$(DESTDIR)$(lispdir)"; \ list='$(lisp_LISP)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(lispLISP_INSTALL) '$$d$$p' '$(DESTDIR)$(lispdir)/$$f'"; \ $(lispLISP_INSTALL) "$$d$$p" "$(DESTDIR)$(lispdir)/$$f"; \ if test -f $${p}c; then \ echo " $(lispLISP_INSTALL) '$${p}c' '$(DESTDIR)$(lispdir)/$${f}c'"; \ $(lispLISP_INSTALL) "$${p}c" "$(DESTDIR)$(lispdir)/$${f}c"; \ else : ; fi; \ done; \ else : ; fi uninstall-lispLISP: @$(NORMAL_UNINSTALL) @if test "$(EMACS)" != no; then \ list='$(lisp_LISP)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(lispdir)/$$f' '$(DESTDIR)$(lispdir)/$${f}c'"; \ rm -f "$(DESTDIR)$(lispdir)/$$f" "$(DESTDIR)$(lispdir)/$${f}c"; \ done; \ else : ; fi clean-lisp: -rm -f elc-stamp $(ELCFILES) install-lispDATA: $(lisp_DATA) @$(NORMAL_INSTALL) test -z "$(lispdir)" || $(mkdir_p) "$(DESTDIR)$(lispdir)" @list='$(lisp_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(lispDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(lispdir)/$$f'"; \ $(lispDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(lispdir)/$$f"; \ done uninstall-lispDATA: @$(NORMAL_UNINSTALL) @list='$(lisp_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(lispdir)/$$f'"; \ rm -f "$(DESTDIR)$(lispdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LISP) $(ELCFILES) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(lispdir)" "$(DESTDIR)$(lispdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-lisp mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-lispDATA install-lispLISP install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-lispDATA uninstall-lispLISP uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-lisp clean-recursive ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ dist-tarZ dist-zip distcheck distclean distclean-generic \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-lispDATA \ install-lispLISP install-man install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-info-am uninstall-lispDATA uninstall-lispLISP $(srcdir)/navi2ch-version.el: @MAINTAINER_MODE_TRUE@ $(srcdir)/navi2ch-version.el.in $(srcdir)/configure.in rm -f $@.tmp && \ sed -e 's/@\(VERSION\)@/$(VERSION)/' \ $(srcdir)/navi2ch-version.el.in > $@.tmp && \ mv $@.tmp $@ snap: rm -f $(srcdir)/navi2ch-version.el && \ $(MAKE) $(AM_MAKEFLAGS) VERSION=@VERSION@-`date +%y%m%d` dist elcdist && \ rm -f $(srcdir)/navi2ch-version.el && \ $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/navi2ch-version.el elcdist: $(ELCFILES) rm -rf $(distdir) && \ mkdir $(distdir) && \ cp -p $(ELCFILES) $(distdir) && \ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir)-elc.tar.gz && \ rm -rf $(distdir) $(srcdir)/bcomp.el: @MAINTAINER_MODE_TRUE@ $(srcdir)/bcomp.el.in $(srcdir)/Makefile.am rm -f $@ && \ list=`for file in $(lisp_LISP); do echo -n "\"$$file\" "; done` && \ sed -e "s/@\(lisp_LISP\)@/$$list/;" < $(srcdir)/bcomp.el.in > $@ || rm $@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$@ $(SHELL) ./config.status Makefiles: $(top_builddir)/config.status $(SHELL) $(top_builddir)/config.status update: ( cd $(srcdir); $(CVS) update -P -d ) && \ $(MAKE) $(AM_MAKEFLAGS) Makefiles # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: navi2ch/Makefile.old000066400000000000000000000005031173560164300146310ustar00rootroot00000000000000EMACS = meadow95.exe #EMACS = emacs #EMACS = xemacs NAME = navi2ch-`date +%y%m%d%H%M` all: elc elc: $(EMACS) --batch -q -no-site-file -l "./bcomp.el" tgz: tar tar: cvs export -D now -d $(NAME) navi2ch; \ tar --numeric-owner -zcvf $(NAME).tar.gz $(NAME); \ rm -rf $(NAME) clean: rm -f *~ *.elc *.tgz *.tar.gznavi2ch/NEWS000066400000000000000000000103621173560164300131170ustar00rootroot00000000000000-*-outline-*- $B\:Y$O(B ChangeLog $B$r;2>H$7$F$/$@$5$$!#(B * navi2ch 1.8.0 -> 2.0.0 find.2ch.net $B$K$h$k8!:w$KBP1~!#(B * navi2ch 1.7.5 -> 1.8.0 configure $B$N%*%W%7%g%sJQ99!#(Bemacs $B$N;XDj$O(B --with-emacs $B%*%W%7%g%s$G$O(B $B$J$/4D6-JQ?t(B EMACS $B$G9T$&!#(B--with-lispdir $B$r;XDj$7$J$$>l9g$N%G%U%)%k%H(B $B%G%#%l%/%H%j$bJQ99!#(B BE@2ch $B$N%m%0%$%s!"=q$-9~$_$KBP1~!#(B $BHD$4$H$KJ8;z%3!<%I$r;XDj2DG=$K!#(B $B%l%9$,(B hide $B$5$l$F$$$k$H$-%;%Q%l!<%?$rJQ99!#(B expire $B4XO"$N%P%0=$@5!#(B $B%a%C%;!<%8!"%W%m%s%W%H!"(Bdocstring $B$J$I$N:Y$+$JD4@0!#(B($BBgJ8;z(B/$B>.J8;z$H$+(B) $B2>A[HD$NL>A0$NF,$K(B "#" $B$rIU$1$k!#(B("history" $B"*(B "#history" $BEy(B) $B5l7A<0$N%;%Q%l!<%?$r;HMQ$7$?(B .dat $B%U%!%$%k$N07$$$,%G%U%)%k%H$GL58z$K!#(B $BM-8z$K$9$k$K$O(B ~/.navi2ch/init.el $B$J$I$G(B (add-to-list 'navi2ch-article-filter-list 'navi2ch-article-separator-filter) $B$J$I$H$9$k!#(B Samba24 $B$N;D$jIC?t$,I=<($5$l$k$h$&$K$J$C$?!#(B navi2ch-file-name-reserved-char-regexp $B$,GQ;_$5$l!"(B navi2ch-file-name-reserved-char-list $B$K$J$C$?!#(B $B%[%9%HL>!&(BIP$B%"%I%l%9$r%U%#%k%?(B/$B8!:w$N>r7o$K$G$-$k$h$&$K$J$C$?!#(B sssp $B%"%$%3%s$rI=<($9$k5!G=$NDI2C!#(B * navi2ch 1.7.4 -> 1.7.5 JBBS@$B$7$?$i$P$N(B jbbs.livedoor.jp $B$X$N0\E>$KBP1~!#(B XEmacs $B$G$NJ8;z2=$1$KBP=h!#(B $BFC 1.7.4 $B!|%5!<%P0\E>BP1~!#(B JBBS@$B$7$?$i$P$N(B livedoor $B$X$N0\E>$KBP1~!#(B * navi2ch 1.7.2 -> 1.7.3 $B%M%C%H%o!<%/@\B3$K30It%3%^%s%I$d%f!<%6!l9g$O<+F0=hM}$7$J$$$h$&$K!#(B $B@55,I=8=$K1~$8$F%l%9Cf$N%F%-%9%H$K%j%s%/$rE=$k!#(B $BHD$N0\E>$N:]$N=hM}$rB?>/$^$7$K!#(B JBBS@$B$7$?$i$P$X$NBP1~6/2=!#(B * navi2ch 1.7.1 -> 1.7.2 $B#2$A$c$s$M$k$N;EMMJQ99$KDI=>!#(B $BBg$-$J?tCM$N%9%lFb%j%s%/$G$N(B Emacs $B$N%O%s%0%"%C%W$KBP=h!#(B EmacsCE $B$K$A$g$C$HBP1~!#(B hook $BDI2C!#(B $B8!:w5!G=3H=A0Ms$N?t;z$r%9%lFb%j%s%/$K!#(B $B#2$A$c$s$M$k$N%1!<%?%$MQ(B URL $B$KBP1~!#(B * navi2ch 1.7 -> 1.7.1 $B$^$A(BBBS$B$N%I%a%$%sL>JQ99$KBP1~(B $B$U$?$P$A$c$s$M$k(B (http://www.2chan.net/) $B$KBP1~!#(B navi2ch-auto-modify-file $B$NMM!9$JJQ99!#%G%U%)%k%H0J30$N;H$$J}$r$7$F$$(B $B$k>l9g$O(B ChangeLog $B$r;2>H!#(B * navi2ch 1.6.1 -> 1.7 $B%m%C%/4XO"JQ99(B $B%l%9=q$-9~$_;~$N(B time $BJQ?t4XO"JQ99(B $B%l%9%U%#%k%?5!G=$NBgI}3H= 1.6.1 $B%*%$%9%?!<:n@o$KBP1~!#(B $B%l%9%U%#%k%?5!G=(B ($B$"$\$\!<$s5!G=(B) $B$rDI2C!#(B $BAw?.95$($rJ]B8$G$-$k$h$&$K$J$C$?!#(B $B$$$o$f$k!V5!MM!9$J%P%0%U%#%C%/%9(B/$B5!G=DI2C!#(B * navi2ch 1.5.2 -> 1.6.0 $BHD$N(B ID $B$,>WFM$7$F$bBg>fIW$K$J$C$?!#(B configure $B$K(B --with-packagedir $B%*%W%7%g%s$rDI2C!#(B(XEmacs $B$N$_(B) $B#2$A$c$s$M$k0J30$N(BBBS$B$r%5%]!<%H(B: $B#J#B#B#S!"#J#B#B#S!w$7$?$i$P!"$^$A#B#B#S(B $B%9%l$r;XDj$7$F%-%c%C%7%e%U%!%$%k$r>C$;$k$h$&$K$J$C$?!#(B AA $B$rF~NO$9$k:]$K%j%9%H$rI=<($G$-$k$h$&$K$J$C$?!#(B $B%G%#%l%/%H%j$K$"$k%9%l$rA4$FI=<($G$-$k$h$&$K$J$C$?!#(B $B%b%J!<%U%)%s%H$N;XDjJ}K!$,JQ$o$C$?!#(B(info $B;2>H(B) $B$=$NB>MM!9$J%P%0%U%#%C%/%9(B/$B5!G=DI2C!#(B * navi2ch 1.5.1 -> 1.5.2 2ch$B$N;EMMJQ99$KDI=>!#(B $BMM!9$J%P%0%U%#%C%/%9(B/$B5!G=DI2C!#(B * navi2ch 1.5 -> 1.5.1 $B:G6a$N5,@)$KBP1~!#(B * navi2ch 1.4 -> 1.5 base64 $B2a5n%m%0(B article buffer $B$N?t$N@)8B(B configure $B$,8-$/$J$C$?(B $Id$ navi2ch/README000066400000000000000000000026671173560164300133110ustar00rootroot00000000000000-*- mode: outline; coding: utf-8 -*- Copyright (C) 2000-2004 Navi2ch Project Navi2ch は、GNU Emacs、XEmacs、Meadow などの Emacsen で動作する、2ちゃ んねるナビゲータです。 インストール方法、使い方についてはマニュアルをお読みください。 マニュアルを読むには Emacs から C-u M-x info RET doc/navi2ch.info とす るか、ウェブブブラウザから http://navi2ch.sourceforge.net/ を開いてく ださい。 * ウェブサイト Navi2ch Project Home Page UNIX@2ch掲示板 * ファイル構成 ** トップディレクトリ elisp ファイル、いくつかのドキュメントが入っています。 ** contrib Navi2ch といっしょに使うと便利なファイルが入っています。 あまり熱心にメンテナンスされてないので注意。 ** doc マニュアルが入っています。 ** icons イメージファイルが入っています。 * 注意 Windows などでは環境変数 TZ を JST-9 とかにしといた方がいいです。 GNU Emacs 21 以降、XEmacs 21.4 以降でないと動きません。 XEmacs では mail-lib パッケージをインストールしてください。 * 謝辞 最初に perl 版を作った hc2ivan さんに感謝です。 Navi2ch は APEL、Wanderlust の一部を使用しています。作者の方々に感謝。 $Id$ navi2ch/TODO000066400000000000000000000007451173560164300131140ustar00rootroot00000000000000Ԃ͓K Enavi2ch-article-max-line, navi2ch-board-max-line ȂƂ Eexpire ƎB EߋOƌ悤ɂ(read.cgi łȂƂȂH) EtB^ƎB Ec[`bvŃX\ Enavi2ch2 ̍쐬 :-) Eboard idAarticle id Ƃ (URL ?) 𕶎ł͖V{ɂB equal ł͂Ȃ eq Ŕrł悤ɁB Esł܂Ȃ alist hash ŒuB EboardAarticle Ȃǂ alist ł͂Ȃ defstruct ɂB navi2ch/acinclude.m4000066400000000000000000000010721173560164300146070ustar00rootroot00000000000000# AC_EMACS_LISP(var, code) # Set `var' with output of elisp `code'. # To avoid incompatibilities of "single-quote in back-quote" etc, # temporary files are used to store emacs-lisp and output of it. AC_DEFUN([AC_EMACS_LISP],[dnl { ac_temp=./conftemp.$$ ac_output=confout.$$ rm -f $ac_temp $ac_output cat >>$ac_temp <<\_ACEOF (defun ac-temp-func (&optional argv) $2 (princ "\n") ; make sure the output has trailing newline. ) _ACEOF $EMACS -batch -q -l $ac_temp -eval "(ac-temp-func $3)" | sed -e '/^ *$/d' > $ac_output $1=`cat $ac_output` rm -f $ac_temp $ac_output; }]) navi2ch/aclocal.m4000066400000000000000000000564261173560164300142730ustar00rootroot00000000000000# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_PATH_LISPDIR # --------------- AC_DEFUN([AM_PATH_LISPDIR], [ # If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test x"$EMACS" = xt && EMACS= AC_CHECK_PROGS([EMACS], [emacs xemacs], [no]) AC_ARG_VAR([EMACS], [the Emacs editor command]) AC_ARG_VAR([EMACSLOADPATH], [the Emacs library search path]) AC_ARG_WITH([lispdir], [ --with-lispdir override the default lisp directory], [ lispdir="$withval" AC_MSG_CHECKING([where .elc files should go]) AC_MSG_RESULT([$lispdir])], [ AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [ if test $EMACS != "no"; then if test x${lispdir+set} != xset; then # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly # Some emacsen will start up in interactive mode, requiring C-x C-c to exit, # which is non-obvious for non-emacs users. # Redirecting /dev/null should help a bit; pity we can't detect "broken" # emacsen earlier and avoid running this altogether. AC_RUN_LOG([$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' conftest.out]) am_cv_lispdir=`sed -n \ -e 's,/$,,' \ -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \ -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datadir}/\1,;p;q;}' \ conftest.out` rm conftest.out fi fi test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp' ]) lispdir="$am_cv_lispdir" ]) AC_SUBST([lispdir]) ])# AM_PATH_LISPDIR AU_DEFUN([ud_PATH_LISPDIR], [AM_PATH_LISPDIR]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 AC_DEFUN([AM_MAINTAINER_MODE], [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer], USE_MAINTAINER_MODE=$enableval, USE_MAINTAINER_MODE=no) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST(MAINT)dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) navi2ch/bcomp.el000066400000000000000000000025041173560164300140410ustar00rootroot00000000000000;;; -*- Emacs-Lisp -*- (require 'cl) (when (featurep 'xemacs) (setq log-warning-minimum-level 'info) (setenv "XEMACSDEBUG" nil)) (setq bcomp-files '( "navi2ch-version.el" "navi2ch-vars.el" "navi2ch-face.el" "navi2ch-util.el" "navi2ch-net.el" "navi2ch-list.el" "navi2ch-article.el" "navi2ch-popup-article.el" "navi2ch-board-misc.el" "navi2ch-board.el" "navi2ch-articles.el" "navi2ch-bookmark.el" "navi2ch-history.el" "navi2ch-search.el" "navi2ch-message.el" "navi2ch.el" "navi2ch-head.el" "navi2ch-mona.el" "navi2ch-e21.el" "navi2ch-xmas.el" "navi2ch-splash.el" "navi2ch-directory.el" "navi2ch-be2ch.el" "navi2ch-multibbs.el" "navi2ch-jbbs-net.el" "navi2ch-jbbs-shitaraba.el" "navi2ch-machibbs.el" "navi2ch-futaba.el" "navi2ch-megabbs.el" "navi2ch-http-date.el" "navi2ch-localfile.el" "navi2ch-oyster.el" "navi2ch-auto-modify.el" "navi2ch-p2.el" "navi2ch-thumbnail.el" )) (let* ((dir (expand-file-name default-directory)) (load-path (cons dir load-path)) file) (message "deleting old .elc files...") (dolist (elt bcomp-files) (setq file (concat dir elt "c")) (when (file-exists-p file) (delete-file file))) (message "compiling...") (dolist (elt bcomp-files) (setq file (concat dir elt)) (let ((coding-system-for-read 'iso-2022-7bit)) (byte-compile-file file t))) (message "done")) navi2ch/bcomp.el.in000066400000000000000000000012011173560164300144370ustar00rootroot00000000000000;;; -*- Emacs-Lisp -*- (require 'cl) (when (featurep 'xemacs) (setq log-warning-minimum-level 'info) (setenv "XEMACSDEBUG" nil)) (setq bcomp-files '( @lisp_LISP@ )) (let* ((dir (expand-file-name default-directory)) (load-path (cons dir load-path)) file) (message "deleting old .elc files...") (dolist (elt bcomp-files) (setq file (concat dir elt "c")) (when (file-exists-p file) (delete-file file))) (message "compiling...") (dolist (elt bcomp-files) (setq file (concat dir elt)) (let ((coding-system-for-read 'iso-2022-7bit)) (byte-compile-file file t))) (message "done")) navi2ch/config.guess000077500000000000000000001220651173560164300147440ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-07-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` # GNU/FreeBSD systems have a "k" prefix to indicate we are using # FreeBSD's kernel, but not the complete OS. case ${LIBC} in gnu) kernel_only='k' ;; esac echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: navi2ch/config.sub000077500000000000000000000731531173560164300144120ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-07-04' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | amd64-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: navi2ch/configure000077500000000000000000003213541173560164300143350ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="navi2ch.el" ac_subst_vars='LTLIBOBJS LIBOBJS icondir packagedir lispdir EMACSLOADPATH EMACS MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode with_lispdir with_packagedir with_icondir ' ac_precious_vars='build_alias host_alias target_alias EMACS EMACSLOADPATH' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-lispdir override the default lisp directory --with-packagedir[=DIR] Use package directory (With XEmacs, this option also sets icondir, lispdir, infodir, etc...) --with-icondir=DIR Override the default icons directory Some influential environment variables: EMACS the Emacs editor command EMACSLOADPATH the Emacs library search path Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=navi2ch VERSION=2.0.0-DEV cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test x"$EMACS" = xt && EMACS= for ac_prog in emacs xemacs do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_EMACS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$EMACS"; then ac_cv_prog_EMACS="$EMACS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_EMACS="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi EMACS=$ac_cv_prog_EMACS if test -n "$EMACS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EMACS" >&5 $as_echo "$EMACS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$EMACS" && break done test -n "$EMACS" || EMACS="no" # Check whether --with-lispdir was given. if test "${with_lispdir+set}" = set; then : withval=$with_lispdir; lispdir="$withval" { $as_echo "$as_me:${as_lineno-$LINENO}: checking where .elc files should go" >&5 $as_echo_n "checking where .elc files should go... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lispdir" >&5 $as_echo "$lispdir" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking where .elc files should go" >&5 $as_echo_n "checking where .elc files should go... " >&6; } if ${am_cv_lispdir+:} false; then : $as_echo_n "(cached) " >&6 else if test $EMACS != "no"; then if test x${lispdir+set} != xset; then # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly # Some emacsen will start up in interactive mode, requiring C-x C-c to exit, # which is non-obvious for non-emacs users. # Redirecting /dev/null should help a bit; pity we can't detect "broken" # emacsen earlier and avoid running this altogether. { { $as_echo "$as_me:${as_lineno-$LINENO}: \$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) \"\\n\")) (setq load-path (cdr load-path)))' conftest.out"; } >&5 ($EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' conftest.out) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } am_cv_lispdir=`sed -n \ -e 's,/$,,' \ -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \ -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datadir}/\1,;p;q;}' \ conftest.out` rm conftest.out fi fi test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_lispdir" >&5 $as_echo "$am_cv_lispdir" >&6; } lispdir="$am_cv_lispdir" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking detecting your emacs type" >&5 $as_echo_n "checking detecting your emacs type... " >&6; } { ac_temp=./conftemp.$$ ac_output=confout.$$ rm -f $ac_temp $ac_output cat >>$ac_temp <<\_ACEOF (defun ac-temp-func (&optional argv) (princ (cond ((featurep 'xemacs) 'xemacs) ((>= emacs-major-version 21) 'emacs21) ((= emacs-major-version 20) 'emacs20) (t 'UNKNOWN))) (princ "\n") ; make sure the output has trailing newline. ) _ACEOF $EMACS -batch -q -l $ac_temp -eval "(ac-temp-func )" | sed -e '/^ *$/d' > $ac_output emacstype=`cat $ac_output` rm -f $ac_temp $ac_output; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacstype" >&5 $as_echo "$emacstype" >&6; } if test -z "$emacstype" || test "$emacstype" = UNKNOWN; then as_fn_error $? "this package does not work on your emacs" "$LINENO" 5 fi # detect packagedir # Check whether --with-packagedir was given. if test "${with_packagedir+set}" = set; then : withval=$with_packagedir; { $as_echo "$as_me:${as_lineno-$LINENO}: checking where package files should go" >&5 $as_echo_n "checking where package files should go... " >&6; } test "$emacstype" != xemacs && as_fn_error $? "packagedir only works with XEmacs" "$LINENO" 5 case "$withval" in yes) { ac_temp=./conftemp.$$ ac_output=confout.$$ rm -f $ac_temp $ac_output cat >>$ac_temp <<\_ACEOF (defun ac-temp-func (&optional argv) (let ((prefix argv) (default data-directory)) (princ (if (and prefix (not (string= prefix "NONE")) (string-match "/\\(\\(?:lib\\|share\\)/xemacs[^/]*/.*$\\)" default)) (expand-file-name "site-packages" (expand-file-name (match-string 1 default) prefix)) (expand-file-name "../site-packages" default)))) (princ "\n") ; make sure the output has trailing newline. ) _ACEOF $EMACS -batch -q -l $ac_temp -eval "(ac-temp-func \"${prefix}\")" | sed -e '/^ *$/d' > $ac_output packagedir=`cat $ac_output` rm -f $ac_temp $ac_output; } ;; no) unset packagedir ;; *) packagedir="$withval" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $packagedir" >&5 $as_echo "$packagedir" >&6; } fi if test "$emacstype" = xemacs && test -n "$packagedir"; then icondir='${packagedir}/etc/navi2ch' lispdir='${packagedir}/lisp/navi2ch' infodir='${packagedir}/info' fi # Check whether --with-icondir was given. if test "${with_icondir+set}" = set; then : withval=$with_icondir; icondir="$withval" { $as_echo "$as_me:${as_lineno-$LINENO}: checking where icon files should go" >&5 $as_echo_n "checking where icon files should go... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icondir" >&5 $as_echo "$icondir" >&6; } else if test -z "${icondir}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where icon files should go" >&5 $as_echo_n "checking where icon files should go... " >&6; } if ${_cv_icondir+:} false; then : $as_echo_n "(cached) " >&6 else { ac_temp=./conftemp.$$ ac_output=confout.$$ rm -f $ac_temp $ac_output cat >>$ac_temp <<\_ACEOF (defun ac-temp-func (&optional argv) (let ((prefix argv) (default data-directory)) (princ (expand-file-name "navi2ch/icons" (if (and prefix (not (string= prefix "NONE")) (string-match "/\\(\\(?:lib\\|share\\)/x?emacs[^/]*/.*$\\)" default)) (expand-file-name (match-string 1 default) prefix) default)))) (princ "\n") ; make sure the output has trailing newline. ) _ACEOF $EMACS -batch -q -l $ac_temp -eval "(ac-temp-func \"${prefix}\")" | sed -e '/^ *$/d' > $ac_output _cv_icondir=`cat $ac_output` rm -f $ac_temp $ac_output; } if test -z "$_cv_icondir"; then _cv_icondir='${datadir}/pixmaps/navi2ch' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_icondir" >&5 $as_echo "$_cv_icondir" >&6; } icondir="$_cv_icondir" fi fi ac_config_files="$ac_config_files Makefile contrib/Makefile doc/Makefile icons/Makefile test/Makefile navi2ch-config.el" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "navi2ch-config.el") CONFIG_FILES="$CONFIG_FILES navi2ch-config.el" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi navi2ch/configure.in000066400000000000000000000046471173560164300147420ustar00rootroot00000000000000AC_INIT(navi2ch.el) AM_INIT_AUTOMAKE(navi2ch, 2.0.0-DEV) AM_MAINTAINER_MODE AC_PREREQ(2.53) AM_PATH_LISPDIR AC_MSG_CHECKING([detecting your emacs type]) AC_EMACS_LISP(emacstype, [dnl (princ (cond ((featurep 'xemacs) 'xemacs) ((>= emacs-major-version 21) 'emacs21) ((= emacs-major-version 20) 'emacs20) (t 'UNKNOWN)))]) AC_MSG_RESULT([$emacstype]) if test -z "$emacstype" || test "$emacstype" = UNKNOWN; then AC_MSG_ERROR(this package does not work on your emacs) fi # detect packagedir AC_ARG_WITH(packagedir, [ --with-packagedir[[=DIR]] Use package directory (With XEmacs, this option also sets icondir, lispdir, infodir, etc...)], [ AC_MSG_CHECKING([where package files should go]) test "$emacstype" != xemacs && AC_MSG_ERROR(packagedir only works with XEmacs) case "$withval" in yes) AC_EMACS_LISP(packagedir,[ (let ((prefix argv) (default data-directory)) (princ (if (and prefix (not (string= prefix "NONE")) (string-match "/\\(\\(?:lib\\|share\\)/xemacs[[^/]]*/.*$\\)" default)) (expand-file-name "site-packages" (expand-file-name (match-string 1 default) prefix)) (expand-file-name "../site-packages" default))))], \"${prefix}\") ;; no) unset packagedir ;; *) packagedir="$withval" ;; esac AC_MSG_RESULT([$packagedir])]) AC_SUBST(packagedir) if test "$emacstype" = xemacs && test -n "$packagedir"; then icondir='${packagedir}/etc/navi2ch' lispdir='${packagedir}/lisp/navi2ch' infodir='${packagedir}/info' fi AC_ARG_WITH(icondir, [ --with-icondir=DIR Override the default icons directory], [ icondir="$withval" AC_MSG_CHECKING([where icon files should go]) AC_MSG_RESULT([$icondir])], [ if test -z "${icondir}"; then AC_CACHE_CHECK([where icon files should go], [_cv_icondir], [dnl AC_EMACS_LISP(_cv_icondir,[ (let ((prefix argv) (default data-directory)) (princ (expand-file-name "navi2ch/icons" (if (and prefix (not (string= prefix "NONE")) (string-match "/\\(\\(?:lib\\|share\\)/x?emacs[[^/]]*/.*$\\)" default)) (expand-file-name (match-string 1 default) prefix) default))))], \"${prefix}\") if test -z "$_cv_icondir"; then _cv_icondir='${datadir}/pixmaps/navi2ch' fi ]) icondir="$_cv_icondir" fi ]) AC_SUBST(icondir) AC_OUTPUT([Makefile contrib/Makefile doc/Makefile icons/Makefile test/Makefile navi2ch-config.el]) navi2ch/contrib/000077500000000000000000000000001173560164300140565ustar00rootroot00000000000000navi2ch/contrib/.cvsignore000066400000000000000000000000111173560164300160460ustar00rootroot00000000000000Makefile navi2ch/contrib/ChangeLog000066400000000000000000000170071173560164300156350ustar00rootroot000000000000002004-12-30 SAITO Takuya * izonmoji-mode.el (izonmoji-mode-on): buffer-display-table $B$r>e=q$-$7$J$$$h$&$K!#(B http://pc5.2ch.net/test/read.cgi/unix/1085940686/876 2004-10-10 mami * navi2ch-js-livedoor-move.el (navi2ch-js-livedoor-move): jbbs.livedoor.com $B$+$i(B jbbs.livedoor.jp $B$X$N0\E>MQ$KJQ99!#(B $B%[%9%HL>$r4X?t$N:G=i$K0\F0!#(B 2004-08-15 mami * navi2ch-js-livedoor-move.el: (provide ...) $B$r@hF,$K!#(B (require ...) $B$rDI2C!#(B 2004-08-15 mami * Makefile.am (EXTRA_DIST): navi2ch-js-livedoor-move.el $B$rDI2C!#(B * navi2ch-js-livedoor-move.el (navi2ch-js-livedoor-move): $B?7%U%!%$(B $B%k!#(B 2004-06-05 mami * navi2ch-logo.el (navi2ch-logo-update): APEL $B$N(B put-alist $B$r;H$o(B $B$J$$$h$&$K!#(B http://pc5.2ch.net/test/read.cgi/unix/1085940686/36 2004-01-30 mami * navi2ch-spamfilter.el: License term $B$r5-=R!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/580 http://pc.2ch.net/test/read.cgi/unix/1065246418/638 2003-12-21 Nanashi San * navi2ch-spamfilter.el (navi2ch-spamf-additional-token-flag): $B?7JQ?t!#(B (navi2ch-article-bayesian-tokenizer): $B>e5-JQ?t$,(B non-nil $B$N>l9g(B $B%l%9$NF|;~!"HV9fEy$r%H!<%/%s$H$7$FDI2C$9$k!#(B 2003-11-06 Nanashi San * navi2ch-spamfilter.el (navi2ch-article-bayesian-tokenizer): $B8=:_(B $B$N%l%9HV9f$,$o$+$k;~$@$1(B num: $B$rIU$1$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/264 2003-11-04 Nanashi San * navi2ch-spamfilter.el (navi2ch-article-before-save-corpus-hook): $B?7JQ?t!#(B (navi2ch-article-save-corpus): $B>e5-(B hook $B$r * navi2ch-spamfilter.el (toplevel): navi2ch-exit-hook $B$G$O$J$/!"(B navi2ch-save-status-hook $B$G%3!<%Q%9$rJ]B8$9$k$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/136 * navi2ch-spamfilter.el: spamfilter.el 0.11 $B$KBP1~!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/130 2003-10-13 Nanashi San spamfilter.el 0.10 $B$KBP1~!#%3!<%Q%9%U%!%$%k$N%U%)!<%^%C%H$,(B $BJQ99$K$J$C$F$^$9$N$G3F<+JQ49$7$F$/$@$5$$!#(B http://pc.2ch.net/test/read.cgi/unix/1065246418/95 * navi2ch-spamfilter.el (navi2ch-spamf-preferred-major): $B?7JQ?t!#(B (navi2ch-spamf-preferred-minor): $B?7JQ?t!#(B (toplevel): $B>e5-JQ?t$K1~$8$F(B spamf-cvs-id $B$r%A%'%C%/!#(B (navi2ch-spamf-good-corpus): spamfilter 0.10 $B$KBP1~!#(B (navi2ch-spamf-bad-corpus): $BF1>e!#(B (navi2ch-article-spam-probability): $BF1>e!#(B (navi2ch-article-show-spam-probability): $BF1>e!#(B (navi2ch-article-save-corpus): $BF1>e!#(B (navi2ch-article-load-corpus): $BF1>e!#(B 2003-10-12 Nanashi San * navi2ch-spamfilter.el (navi2ch-spamf-good-corpus): $B?7JQ?t!#(B (navi2ch-spamf-bad-corpus): $B?7JQ?t!#(B (navi2ch-spamf-register-good-token): $B>e5-JQ?t$r;H$&$h$&$K!#(B (navi2ch-spamf-register-spam-token): $BF1>e!#(B (navi2ch-spamf-register-good-token-list): $BF1>e!#(B (navi2ch-spamf-register-spam-token-list): $BF1>e!#(B (navi2ch-article-save-corpus): $BF1>e!#(B (navi2ch-article-load-corpus): $BF1>e!#(B (navi2ch-article-spam-probability): $BF1>e!#(B (navi2ch-article-show-spam-probability): $BF1>e!#(B 2003-10-12 Nanashi San * navi2ch-spamfilter.el: $B?7%U%!%$%k!#(B * Makefile.am (EXTRA_DIST): $B>e5-$rDI2C!#(B * README: $BF1>e!#(B 2003-07-16 mami * README: Copyright $B99?7!#(B * izonmoji-mode.el: $BF1>e!#(B 2003-02-22 SAITO Takuya * izonmoji-mode.el (toplevel): Commentary $B$K(B JISX0213$BMQ$N%U%)%s%H(B $B$,I,MW$G$"$k$3$H$rDI2C!#(B 2003-02-02 SAITO Takuya * izonmoji-mode.el (toplevel): izonmoji-shift_jis $B$r(B izonmoji-shift-jis $B$K2~L>!#(B 2003-01-27 mami * navi2ch-pizaunix.el: $B?7%U%!%$%k!#(B * Makefile.am (EXTRA_DIST): $B>e5-$rDI2C!#(B * README: $BF1>e!#(B 2003-01-21 SAITO Takuya * izonmoji-mode.el (toplevel): Wanderlust $B$N@_DjNc$rDI2C(B http://pc.2ch.net/test/read.cgi/unix/1039935998/314 (izonmoji-mac-display-list): $B=D=q$-MQ$NJ8;z$rDI2C(B (izonmoji-mac-chars-list): $BF1>e!#(B (toplevel): izonmoji-shift_jis $B$rDj5A!#(B 2002-12-16 Nanashi San * Makefile.am (EXTRA_DIST): izonmoji-mode.el$B!"(B navi2ch-track-mouse.el $B$rDI2C!#%"%k%U%!%Y%C%H=g$K(B sort$B!#(B 2002-11-17 SAITO Takuya * izonmoji-mode.el (izonmoji-mode-on): XEmacs-21.1 $B$G$O!"%U%'%$%9$r(B $BIU$1$J$$$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/772 (izonmoji-win-face): XEmacs-21.1 $B$G$O%U%'%$%9$rIU$1$J$$$3$H$r(B docstring $B$KDI2C!#(B (izonmoji-mac-face): $BF1>e!#(B 2002-11-11 SAITO Takuya * izonmoji-mode.el (izonmoji-mode-on): XEmacs $B$G$b(B izonmoji-{win,mac}-face $B$r;H$&$h$&$K!#(B * navi2ch-migemo.el (toplevel): euc-jp $B$+$i(B iso-2022-jp $B$K!#(B 2002-10-26 SAITO Takuya * izonmoji-mode.el (toplevel): $B@_DjNc$K(B navi2ch-popup-article-mode-hook $B$rDI2C!#(B 2002-10-09 SAITO Takuya * navi2ch-jisx0213.el: $B:o=|!#(B * izonmoji-mode.el: $B?7%U%!%$%k!#(B * README: navi2ch-jisx0213.el -> izonmoji-mode.el $B$K!#(B 2002-10-06 Taiki SUGAWARA * README: navi2ch-jisx0213 $B$N(B typo $B$r=$@5!#(B 2002-10-02 Taiki SUGAWARA * navi2ch-jisx0213.el: XEmacs $B$KBP1~!#(B * README: navi2ch-jisx0213 $B$K$D$$$F$N5-=R$rDI2C!#(B 2002-10-01 Taiki SUGAWARA * README: $B$A$g$$$H5-=R$rDI2C!#(B * navi2ch-jisx0213.el: $B?7%U%!%$%k!#(B * gikope.el (toplevel): cl $B$r(B require $B$9$k$h$&$K!#(B 2002-10-01 Taiki SUGAWARA $B$$$m$$$mDI2C$7$?$N$G!"E,Ev$K!#(B * gikope.el (gikope-list-*): AA $B$NL>A00lMwI=<(!"A*Br%b!<%IMQ$N$"$l$3$l!#(B (gikope-view-*): AA $BI=<(MQ%b!<%I$N$"$l$3$l!#(B (gikope): $B?7%3%^%s%I!#%.%3%Z%b!<%I$KF~$k!#(B $BB>$K$b4{B8$N4X?t$r>/$7$7$7$?$j$H$+!#(B 2002-07-11 Nanashi San * README: $B?7%U%!%$%k!#3F%U%!%$%k$N4JC1$J@bL@!#(B * navi2ch-track-mouse.el: $B?7%U%!%$%k!#(B 2002-07-03 Nanashi San * gikope.el (gikope-aa-buffer): $B%P%C%U%!L>$KJQ99!#(B (gikope-parse-aa): find-file-noselect-as-coding-system $B$r;H$o$J$$(B $B$h$&$K!#(B http://pc.2ch.net/test/read.cgi/unix/1023884490/285 $B$rEv$F$?!#(B 2002-06-29 Nanashi San * navi2ch-migemo.el (toplevel): $B%P%$%H%3%s%Q%$%k;~$K(B migemo $B$,I,MW(B $BL5$$$h$&$K!"(B(require 'migemo) $B$r(B eval $B$G0O$s$@!#(B 2002-06-28 Nanashi San * Makefile.am (EXTRA_DIST): navi2ch-migemo.el $B$rDI2C!#(B 2002-02-05 NOKUBI Takatsugu * Makefile.am (EXTRA_DIST): gikope.el $BDI2C!#(B 2002-01-06 Taiki SUGAWARA * navi2ch-logo.el: $B%U%!%$%kDI2C!#%l%90lMw$N@hF,$K%m%4$rD%$k!#(B http://pc.2ch.net/test/read.cgi/unix/999166513/895 $Id$ navi2ch/contrib/Makefile.am000066400000000000000000000005411173560164300161120ustar00rootroot00000000000000EXTRA_DIST = gikope.el izonmoji-mode.el navi2ch-logo.el \ navi2ch-migemo.el navi2ch-pizaunix.el navi2ch-spamfilter.el \ navi2ch-track-mouse.el navi2ch-js-livedoor-move.el all: Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status navi2ch/contrib/Makefile.in000066400000000000000000000166731173560164300161400ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = contrib DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EMACS = @EMACS@ EMACSLOADPATH = @EMACSLOADPATH@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ icondir = @icondir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ packagedir = @packagedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ EXTRA_DIST = gikope.el izonmoji-mode.el navi2ch-logo.el \ navi2ch-migemo.el navi2ch-pizaunix.el navi2ch-spamfilter.el \ navi2ch-track-mouse.el navi2ch-js-livedoor-move.el all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu contrib/Makefile .PRECIOUS: Makefile $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am all: Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: navi2ch/contrib/README000066400000000000000000000021701173560164300147360ustar00rootroot00000000000000-*- mode: outline; coding: iso-2022-7bit -*- Copyright (C) 2000-2003 Navi2ch Project $B$3$N%G%#%l%/%H%j$K$O(B Navi2ch $B$H$$$C$7$g$K;H$&$HJXMx$J%U%!%$%k$,F~$C$F(B $B$$$^$9!#>\$7$$;H$$J}$O!"3F%U%!%$%k$N@hF,$N%3%a%s%H$rFI$s$G$M!#(B * navi2ch-logo.el $B%l%90lMw$N@hF,$K$=$NHD$N%m%4$rE=$j$D$1$k!#(B Emacs 21 $B@lMQ!#(B * gikope.el AA $B$r%-%k%j%s%0$K%3%T!l9g$O(B Commentary $B$K$"$k@_Dj$r$7$F$"$2$F$M!#(B * navi2ch-pizaunix.el http://piza.2ch.net/log/unix/0008251/ $B$N(B Unix $BHD2a5n%m%0AR8K$r8+$k$?$a$N(B multibbs module $B$G$9!#(B * navi2ch-spamfilter.el http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#spamfilter.el $B$r(B Navi2ch $B$+$iMxMQ$7$^$9!#(B $Id$ navi2ch/contrib/gikope.el000066400000000000000000000156031173560164300156630ustar00rootroot00000000000000;;; gikope.el --- Ascii-Art handling tool ;; Copyright 2002 knok ;; License: GPL ;; $Id$ ;; related resources ;;; gikope http://go.to/gikope (eval-when-compile (require 'cl)) ;;; Variables ;; customizable variables (defvar gikope-aa-file "~/.navi2ch/mojidata.txt" "$B%.%3%ZMQ%G!<%?%U%!%$%k(B") (defvar gikope-aa-file-coding 'shift_jis-dos "$B%.%3%ZMQ%G!<%?%U%!%$%k$N%(%s%3!<%G%#%s%0(B") ;; global variables (defvar gikope-aa-location-alist '() "$B%.%3%ZMQ%G!<%?%U%!%$%k$NL>>N$H0LCV$rJ]B8$9$k(B alist") (defvar gikope-aa-buffer "*gikope*" "$B%.%3%ZMQ%G!<%?%U%!%$%k$rFI$_$3$s$@%P%C%U%!(B") (defvar gikope-aa-history nil "gikope-copy-to-killring-aa $BMQ%R%9%H%j(B") (defvar gikope-aa-begin-regex "^\\[MojieName=\\(.*\\)\\]$" "$B%.%3%Z%G!<%?(B $B%(%s%H%j3+;OItJ,$N@55,I=8=(B") (defvar gikope-aa-end-regex "^\\[END\\]$" "$B%.%3%Z%G!<%?(B $B%(%s%H%j=*N;ItJ,$N@55,I=8=(B") (defvar gikope-window-configuration nil) ;; gikope-list variables (defvar gikope-list-buffer-name "*gikope list*" "AA $B0lMw%P%C%U%!$NL>A0(B") (defvar gikope-list-window-width 20 "AA $B0lMw%P%C%U%!$NI}(B") ;; gikope-view variables (defvar gikope-view-buffer-name "*gikope view*" "AA $BI=<(%P%C%U%!$NL>A0(B") (defvar gikope-view-aa-name nil "$B8=:_I=<($7$F$$$k(B AA $B$NL>A0(B") ;;; Key Binds ;; gikope-list key binds (defvar gikope-list-mode-map nil) (unless gikope-list-mode-map (let ((map (make-sparse-keymap))) (define-key map "\r" 'gikope-list-select) (define-key map "." 'gikope-list-select) (define-key map " " 'gikope-list-select) (define-key map "n" 'next-line) (define-key map "p" 'previous-line) (define-key map "q" 'gikope-exit) (define-key map "1" 'delete-other-windows) (define-key map "w" 'gikope-list-copy) (setq gikope-list-mode-map map))) ;; gikope-view key binds (defvar gikope-view-mode-map nil) (unless gikope-view-mode-map (let ((map (make-sparse-keymap))) (define-key map "q" 'gikope-exit) (define-key map "w" 'gikope-view-copy) (define-key map "1" 'delete-other-windows) (setq gikope-view-mode-map map))) ;;; Functions ;; insert (defun gikope-copy-to-killring-aa (&optional arg) "$B%"%9%-!<%"!<%H$r(B kill-ring $B$KF~$l$k(B" (interactive "P") (unless gikope-aa-location-alist (gikope-parse-aa)) (let ((aa-location-alist gikope-aa-location-alist)) (if arg (let (re) (setq re (read-string "Regex: ")) (setq aa-location-alist (gikope-get-matched-aa-alist re)))) (gikope-copy-aa (completing-read "AA name: " aa-location-alist nil nil nil gikope-aa-history)))) ;; parse (defun gikope-parse-aa () "AA $B%G!<%?$rFI$_$3$_!"(Bparse AA data and build gikope-aa-location-alist" (interactive) (let (alistitem locitem mojiname start end) (save-excursion (set-buffer (get-buffer-create gikope-aa-buffer)) (erase-buffer) (let ((coding-system-for-read gikope-aa-file-coding)) (insert-file-contents gikope-aa-file)) (goto-char (point-min)) (setq buffer-read-only t) (while (re-search-forward gikope-aa-begin-regex nil t) (setq alistitem (match-string 1)) (forward-line) (setq locitem (point)) (re-search-forward gikope-aa-end-regex) (beginning-of-line) (setq locitem (cons locitem (point))) (setq alistitem (cons alistitem (list locitem))) (setq gikope-aa-location-alist (cons alistitem gikope-aa-location-alist)))))) ;; (defun gikope (&optional arg) "$B%.%3%Z(B $BA00lMw$rI=<($9$k(B" (interactive) (gikope-list-mode) (let ((buffer-read-only nil)) (erase-buffer) (dolist (name aa-alist) (insert (car name) "\n"))) (goto-char (point-min)) (set-buffer-modified-p nil)) (defun gikope-list-mode () "\\{gikope-list-mode-map}" (interactive) (kill-all-local-variables) (use-local-map gikope-list-mode-map) (setq mode-name "Gikope List") (setq major-mode 'gikope-list-mode) (setq buffer-read-only t) (run-hooks 'gikope-list-mode-hook)) ;; gikope-list commands (defun gikope-list-select () "$B8=:_9T$N(B AA $B$rA*Br$9$k(B" (interactive) (let ((name (gikope-list-current-name))) (unless (get-buffer-window gikope-view-buffer-name) (split-window-horizontally gikope-list-window-width) (display-buffer (get-buffer-create gikope-view-buffer-name))) (gikope-view name))) (defun gikope-list-copy () "$B8=:_9T$N(B AA $B$r(B kill-ring $B$K%3%T!<$9$k(B" (interactive) (gikope-list-select) (gikope-view-copy)) ;; gikope-list internal functions (defun gikope-list-current-name () "$B8=:_9T$NL>A0$r ;; Keywords: 2ch, charset ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;; izonmoji-mode() and the way to apply izonmoji-{win,mac}-face on GNU Emacs ;; are derived from ;; blank-mode.el ;; Author: Vinicius Jose Latorre ;; Version: 4.0 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ ;;; Commentary: ;; $B5!l9g$b$"$j$^$9$N$G!"0U?^$;$:$K(B file $B$NFbMF$rJQ99$7$J$$$h$&Cm0U(B ;; $B$7$F2<$5$$!#(B ;; Emacs $B$N%P!<%8%g%s(B ;; Emacs 20 $B0J9_!"(BXEmacs 21.4 $B0J9_$r;H$C$F2<$5$$!#(B ;; $B$?$@$7!"(BXEmacs 21.1 $B$G$b0lIt$N5!G=$O;H$($^$9!#(B ;; GNU Emacs 20 $B$G$O!"(BMule-UCS$B$,I,MW$G$9!#(B ;; $B$3$N%U%!%$%k$rFI$_9~$`A0$K(B (require 'jisx0213) $B$7$F$/$@$5$$!#(B ;; GNU Emacs 20,21$B$G$O!"(Bbuffer-display-table$B$K$h$C$FI=<($rCV$-BX$($?(B ;; Non-ASCII$B$JJ8;z$N(Bchar-width$B$,$*$+$7$/$J$j$^$9!#(B ;; $BJQ49A08e$G(Bchar-width$B$,JQ$o$i$J$$>l9g$O!"(B ;; (defadvice char-width (around display-table-hack activate) ;; (let ((buffer-display-table nil)) ;; ad-do-it)) ;; $B$G$4$^$+$;$^$9!#(B string-width$B$bF1MM$G$9!#(B ;; XEmacs 21.4$B0JA0$G$O(Binit-file$B$K0J2<$N$h$&$K=q$$$F$/$@$5$$!#(B ;; (make-charset ;; 'japanese-jisx0213-1 ;; "JIS X 0213:2000 Plain 1" ;; '(registry "jisx0213\\(\\.2000\\)-1" ;; dimension 2 chars 94 final ?O graphic 0)) ;; (make-charset ;; 'japanese-jisx0213-2 ;; "JIS X 0213:2000 Plain 2" ;; '(registry "jisx0213\\(\\.2000\\)-2" ;; dimension 2 chars 94 final ?P graphic 0)) ;; $B@_DjNc(B ;; [$B6&DL(B] ~/.emacs $B$X(B ;; (require 'izonmoji-mode) ;; [navi2ch] ~/.navi2ch/init.el $B$X(B ;; (add-hook 'navi2ch-bm-mode-hook 'izonmoji-mode-on) ;; (add-hook 'navi2ch-article-mode-hook 'izonmoji-mode-on) ;; (add-hook 'navi2ch-popup-article-mode-hook 'izonmoji-mode-on) ;; ;; IBM$B3HD%J8;z$rI=<((B (XEmacs-21.1 $B$OHsBP1~(B) ;; (when (memq 'izonmoji-shift-jis (coding-system-list)) ;; (setq navi2ch-coding-system 'izonmoji-shift-jis)) ;; [Mew] ~/.mew.el $B$X(B ;; (add-hook 'mew-message-mode-hook 'izonmoji-mode-on) ;; [Wanderlust] ~/.wl $B$X(B ;; (add-hook 'wl-message-redisplay-hook 'izonmoji-mode-on) ;; [emacs-w3m] ~/.emacs-w3m.el $B$X(B ;; (add-hook 'w3m-mode-hook 'izonmoji-mode-on) ;;; Bugs: ;; 1. display-table$B$r$$$8$k(B ;; 2. M-x izonmoji-mode-on ;; 3. 1$B$NJQ99$r85$KLa$9(B ;; 4. M-x izonmoji-mode-off ;; $B$9$k$H85$K$b$I$i$J$$!#(B ;; C-u M-x izonmoji-mode-off $B$7$F(Bdisplay-table$B$X$NA4$F$NJQ99$rC$9(B ;; $B$3$H$O$G$-$^$9!#(B ;;; Code: (eval-when-compile (defvar buffer-display-table) (defvar current-display-table)) (require 'ccl) (defvar izonmoji-priority-list '(win mac) "*$BI=<($NM%@h=g0L!#(B '(win mac) $B$J$i!"(BWindows$B$N5!!#(B 'default $B$K$9$k$H%U%'%$%9$r$D$1$^$;$s!#(B") (defvar izonmoji-mac-face 'izonmoji-mac-face "*Mac$B$N5!!#(B 'default $B$K$9$k$H%U%'%$%9$r$D$1$^$;$s!#(B") (defface izonmoji-win-face '((((class color) (type tty)) (:foreground "cyan")) (((class color) (background light)) (:foreground "Aquamarine4")) (((class color) (background dark)) (:foreground "Aquamarine3")) (t (:underline t))) "Windows$B$N5!(B" "$(O-@(B" "$(O-A(B" "$(O-B(B" "$(O-C(B" "$(O-D(B" "$(O-E(B" "$(O-F(B" "$(O-G(B" "$(O-H(B" "$(O-I(B" "$(O-J(B" "$(O-K(B" "$(O-L(B" "$(O-M(B" "$(O-N(B" "$(O-O(B" "$(O-P(B" "$(O-Q(B" "$(O-R(B" "$(O-S(B" "$(O-T(B" "$(O-U(B" "$(O-V(B" "$(O-_(B" "$(O-`(B" "$(O-a(B" "$(O-b(B" "$(O-c(B" "$(O-d(B" "$(O-e(B" "$(O-f(B" "$(O-g(B" "$(O-h(B" "$(O-i(B" "$(O-j(B" "$(O-k(B" "$(O-l(B" "$(O-m(B" "$(O-n(B" "$(O-o(B" "$B"b(B" "$B"a(B" "$B"i(B" "$(O-s(B" "$B&2(B" "$B"e(B" "$B"](B" "$B"\(B" "$(O-x(B" "$(O-y(B" "$B"h(B" "$B"A(B" "$B"@(B" "$(Oz7(B" "$(O{n(B" "$(O}9(B" "$(O}.(B" "$(PvU(B" "$(O.9(B" "$(Po`(B" "$(Ou5(B" "$(Oui(B" "$(P{#(B" "$(Ou7(B" "$(Ot:(B" "$(O.$(B" "$(O.((B" "$(I"n(B" "$(P!?(B" "$(O.+(B" "$(D0c(B" "$(O.0(B" "$(P!M(B" "$(O.5(B" "$(P!N(B" "$(O.6(B" "$(D1>(B" "$(O.A(B" "$(P!](B" "$(D1H(B" "$(P!\(B" "$(P!`(B" "$(P!g(B" "$(P!_(B" "$(O.D(B" "$(IEt(B" "$(D2;(B" "$(O.O(B" "$(D2m(B" "$(O.T(B" "$(D2|(B" "$(I$[(B" "$(O.](B" "$(D3X(B" "$(P#C(B" "$(D3e(B" "$(O.g(B" "$(O.k(B" "$(O.l(B" "$(P#N(B" "$(D4@(B" "$(O.r(B" "$(O.t(B" "$(D4^(B" "$B".(B" "$(O.x(B" "$(P#l(B" "$(O/!(B" "$(O/#(B" "$(O/*(B" "$(J#a(B" "$(D7B(B" "$(P$l(B" "$(O/O(B" "$(O/N(B" "$(O/K(B" "$(O/W(B" "$(O/](B" "$(D8N(B" "$(P%:(B" "$(D8u(B" "$(P%E(B" "$(O/i(B" "$(D8|(B" "$(O/m(B" "$(D97(B" "$(OOV(B" "$(P($(B" "$(OxI(B" "$(OOY(B" "$(OOZ(B" "$(OO\(B" "$(P(C(B" "$(OOi(B" "$(I0b(B" "$(OOq(B" "$(OOu(B" "$(OOr(B" "$(P(U(B" "$(OOw(B" "$(OO|(B" "$(P(g(B" "$(D;y(B" "$(D(B" "$(OtE(B" "$(OtG(B" "$(D=g(B" "$(GUP(B" "$(P,M(B" "$(D>0(B" "$(OtU(B" "$Ac3(B" "$(P,X(B" "$(D>=(B" "$(Ot[(B" "$(OtZ(B" "$(P,i(B" "$(D?((B" "$(P-"(B" "$(Ott(B" "$(Otz(B" "$(P-P(B" "$(Ot|(B" "$(I66(B" "$(Ou,(B" "$(Ou.(B" "$(I-"(B" "$(Ou-(B" "$(DB+(B" "$(Ou/(B" "$(Ou2(B" "$(Ou>(B" "$(P-~(B" "$(Ou;(B" "$B".(B" "$(Ou?(B" "$(P.-(B" "$(OuD(B" "$(OuE(B" "$(P.3(B" "$(OuL(B" "$(DBp(B" "$(OuN(B" "$(OuP(B" "$(OuX(B" "$(Ou^(B" "$(OuZ(B" "$(Ou](B" "$(P._(B" "$(P.}(B" "$(P.y(B" "$(Oux(B" "$(Ouz(B" "$(P/6(B" "$(Ov"(B" "$(P/A(B" "$(Ov0(B" "$(P/S(B" "$(Ov1(B" "$(P/Z(B" "$(IZH(B" "$(Ov8(B" "$(OvK(B" "$(Pn5(B" "$(OvR(B" "$(OvW(B" "$(DFc(B" "$(PnD(B" "$(Ova(B" "$(Ovk(B" "$(DGC(B" "$(DGK(B" "$(Ovo(B" "$(Pnh(B" "$(I6|(B" "$(H6d(B" "$(Ovv(B" "$(DGn(B" "$(Ovz(B" "$(Pnp(B" "$(Pns(B" "$(Po$(B" "$(Ow/(B" "$(PoA(B" "$(Ow;(B" "$(Ow<(B" "$(PoJ(B" "$(Ow>(B" "$(OwE(B" "$(OwG(B" "$(OwL(B" "$(Pok(B" "$(OwW(B" "$(OwR(B" "$(OwS(B" "$(OwZ(B" "$(Ow^(B" "$(Owa(B" "$(Pp=(B" "$(Owi(B" "$(DK.(B" "$(Owo(B" "$(PpW(B" "$(DKf(B" "$(Owy(B" "$(Ow{(B" "$(Ow}(B" "$(DKn(B" "$(Ox!(B" "$(DKy(B" "$(Ox&(B" "$(Ox((B" "$(DL-(B" "$(Ox+(B" "$(Ox3(B" "$(Ox8(B" "$(Ox;(B" "$(OxG(B" "$(OxJ(B" "$ATm(B" "$(Pqo(B" "$(Oxc(B" "$(Oxa(B" "$(Oxd(B" "$B".(B" "$(Oxr(B" "$(P#D(B" "$(PrC(B" "$(Oy"(B" "$(PrF(B" "$(DOm(B" "$(Pr^(B" "$B".(B" "$(Oy<(B" "$(Oy=(B" "$(Prg(B" "$(OyA(B" "$(Prj(B" "$(Ps9(B" "$(Ps:(B" "$B".(B" "$(OyX(B" "$(Oyc(B" "$B".(B" "$(Oz"(B" "$(Oz$(B" "$(PtG(B" "$(Oz((B" "$(Oz,(B" "$(Oz5(B" "$(Oz9(B" "$(DU.(B" "$B".(B" "$(Ozl(B" "$(Ozm(B" "$(Pv3(B" "$(Oz}(B" "$(DXA(B" "$(O{((B" "$(O{/(B" "$(Pvq(B" "$(O{8(B" "$(DYQ(B" "$(O{:(B" "$(O{@(B" "$(Pw8(B" "$(PwE(B" "$(I[)(B" "$(O{m(B" "$(O{}(B" "$(O|"(B" "$(O|((B" "$(O|)(B" "$(Px`(B" "$(O|+(B" "$(O|.(B" "$(O|-(B" "$(D^K(B" "$(Pxo(B" "$(Py0(B" "$(O|:(B" "$(O|>(B" "$A8O(B" "$B".(B" "$(D`Y(B" "$(Pyn(B" "$B".(B" "$(Dab(B" "$(O|g(B" "$(O|j(B" "$(O|l(B" "$(O|p(B" "$(PzN(B" "$(O||(B" "$(Dc)(B" "$(O}"(B" "$(PzR(B" "$(O|~(B" "$(O}!(B" "$(Dc<(B" "$(O}%(B" "$(PzT(B" "$(O}((B" "$(O}*(B" "$(O})(B" "$(Pz\(B" "$(Pz_(B" "$(Pz](B" "$(O}'(B" "$(Pzc(B" "$(Pzo(B" "$(Dcq(B" "$(O}-(B" "$(Pz|(B" "$(Pzy(B" "$(Pzz(B" "$(Pzx(B" "$B".(B" "$(Dd@(B" "$(O}3(B" "$(O}2(B" "$(O}8(B" "$(O}7(B" "$(P{$(B" "$B".(B" "$(P{)(B" "$(O}4(B" "$(P{((B" "$(P{%(B" "$(O}?(B" "$(P{0(B" "$(De3(B" "$(O}C(B" "$(O}D(B" "$(DeP(B" "$(Deb(B" "$(P{M(B" "$(Dek(B" "$(Gbg(B" "$(O}](B" "$B".(B" "$(O}^(B" "$(P{l(B" "$(O}f(B" "$(O}g(B" "$(Dg.(B" "$(O}h(B" "$(O}j(B" "$(I*~(B" "$(P{|(B" "$(O~!(B" "$(O~%(B" "$B".(B" "$B".(B" "$(Dh](B" "$B".(B" "$(O~+(B" "$(O~3(B" "$(J6-(B" "$(P}2(B" "$(O~D(B" "$(O~C(B" "$(O~G(B" "$(P}J(B" "$(Djj(B" "$(O~O(B" "$(O~^(B" "$(P~4(B" "$B".(B" "$(P~O(B" "$(O~r(B" "$(O,5(B" "$(O,6(B" "$(O,7(B" "$(O,8(B" "$(O,9(B" "$(O,:(B" "$(O,;(B" "$(O,<(B" "$(O,=(B" "$(O,>(B" "$B"L(B" "$(O)%(B" "$(O"/(B" "$(O"0(B") "*Windows$B$N5!(B" "$(O-?(B" "$(O-W(B" "X$(O-7(B" "X$(O-8(B" "XV" "$(O,5(B" "$(O,6(B" "$(O,7(B" "$(O,8(B" "$(O,9(B" "$(O,:(B" "$(O,;(B" "$(O,<(B" "$(O,=(B" "$(O,>(B" "$(O,?(B" "$(O,@(B" "x$(O,7(B" "x$(O,8(B" "xv" "(a)" "(b)" "(c)" "(d)" "(e)" "(f)" "(g)" "(h)" "(i)" "(j)" "(k)" "(l)" "(m)" "(n)" "(o)" "(p)" "(q)" "(r)" "(s)" "(t)" "(u)" "(v)" "(w)" "(x)" "(y)" "(z)" "$(O-P(B" "mm$(O),(B" "$(O-Q(B" "$(O-Q),(B" "$(O-Q)-(B" "m" "$(O-V(B" "m$(O)-(B" "$(O-R(B" "k$(O-V(B" "$(O-S(B" "g" "$(O-T(B" "$(O-U(B" "m$(O#_(B" "d$(O#_(B" "$(O#_(B" "k$(O#_(B" "ms" "$B&L(Bs" "ns" "ps" "$(O!k(BF" "mb" "$(O#^(B" "Hz" "KB" "MB" "GB" "TB" "$(O-b(B" "$(O-c(B" "$(O-d(B" "FAX" "$(O&9(B" "$(O&?(B" "$(O&=(B" "$(O&;(B" "$(O&:(B" "$(O&@(B" "$(O&>(B" "$(O&<(B" "$(O&f(B" "$(O&g(B" "JIS" ;JIS$B%^!<%/(B "$B"*(B" "$B"+(B" "$B",(B" "$B"-(B" ;$B;X:9$7Lp0u(B "$(O#)(B" "$(O#)(B" "$B","-(B" "$B"-",(B" ;$B6v?tHVL\$O!">e2$OEI$jDY$7(B "($BF|(B)" "($B7n(B)" "($B2P(B)" "($B?e(B)" "($BLZ(B)" "($B6b(B)" "($BEZ(B)" "($B:W(B)" "($B=K(B)" "($B<+(B)" "($B;j(B)" "$(O-l(B" "($B8F(B)" "$(O-j(B" "($B;q(B)" "($BL>(B)" "$(O-k(B" "($B3X(B)" "($B:b(B)" "($B.(B)" "$(O-e(B" "$(O-f(B" "$(O-g(B" "$(O-h(B" "$(O-i(B" "($B0e(B)" "($B:b(B)" "($BM%(B)" "($BO+(B)" "($B0u(B)" "($B95(B)" "($BHk(B)" ;$BK\Ev$O4]IU$-(B "$(O-@(B" "$(O-B(B" "$(O-C(B" "$(O-A(B" "$(O-A-C(B" "(I2]A(B" "(IL(0D(B" "(IT0D^(B" "$(O-F(B" "$(O-G(B" "$(O-D(B" "$(O-A-D(B" "$(O-E(B" "$(O-H(B" "$(O-N(B" "(IMYB(B" "$(O-I(B" "$(O-J(B" "(IN0](B" "$(O-L(B" "$(O-K(B" "$(O-O(B" "$(O-M(B" "(I1J_0D(B" "(I:0N_(B" "(IJ2B(B" "(IK^Y(B" "(IO]<.](B" "$(O-m(B" "$(O-n(B" "$(O-o(B" "$(O-_(B" "$B3t<02q(B" "$B!A(B" "$B!a(B" "$B(!(B" ;$B2#D>@~(B "$B!D(B" "$B!E(B" "$B!J(B" "$B!K(B" "$B!L(B" "$B!M(B" "$B!N(B" "$B!O(B" "$B!P(B" "$B!Q(B" "$B!R(B" "$B!S(B" "$B!T(B" "$B!U(B" "$B!V(B" "$B!W(B" "$B!X(B" "$B!Y(B" "$B!Z(B" "$B![(B" "$B!a(B" "$B$!(B" "$B$#(B" "$B$%(B" "$B$'(B" "$B$)(B" "$B$C(B" "$B$c(B" "$B$e(B" "$B$g(B" "$B$n(B" "$B%!(B" "$B%#(B" "$B%%(B" "$B%'(B" "$B%)(B" "$B%C(B" "$B%c(B" "$B%e(B" "$B%g(B" "$B%n(B" "$B%u(B" "$B%v(B") "*Mac$B$N5!.J8;z(B) ) "*Windows$B$N5!.J8;z(B) (izonmoji-make-char-list 42 93 118) ;$B3g8LIU$-%"%k%U%!%Y%C%H(B (izonmoji-make-char-list 43 33 62) ;$BC10L(B (izonmoji-make-char-list 43 123 126) ;$BN,9f(B (izonmoji-make-char-list 44 33 40) ;$B%H%i%s%W(B (izonmoji-make-char-list 44 53 55) ;$BM9JX(B (izonmoji-make-char-list 44 73 88) ;$BLp0u(B (izonmoji-make-char-list 45 33 57) ;$BMKF|$J$I(B (izonmoji-make-char-list 45 113 126) ;$B4]IU$-J8;z(B (izonmoji-make-char-list 46 33 55) ;$B%+%?%+%JC10L(B (izonmoji-make-char-list 46 63 67) ;$B%"%Q!<%H(B (izonmoji-make-char-list 46 103 106) ;$B859f(B (izonmoji-make-char-list 46 124 126) ;$B3t<02ql9g!"(B1$B0J>e$N?t$J$i5! (prefix-numeric-value arg) 0) (not izonmoji-mode)) (izonmoji-mode-on) (izonmoji-mode-off))) (defun izonmoji-mode-on (&optional reverse win-face mac-face) "$B5! len 0) (setq table (vconcat table (make-vector len nil)))) (while priority (cond ((eq (car priority) 'win) (setq from izonmoji-win-chars-list to izonmoji-win-display-list face (or win-face izonmoji-win-face 'default))) ((eq (car priority) 'mac) (setq from izonmoji-mac-chars-list to izonmoji-mac-display-list face (or mac-face izonmoji-mac-face 'default)))) (setq priority (cdr priority)) (while (and from to) (if (or (eq face 'default) ;; XEmacs 21.1 $B$G(B face $B$rIU$1$k$HMn$A$k$N$G!#(B (and (= emacs-major-version 21) (= emacs-minor-version 1))) ;; face $B$r;XDj$7$J$$!#(B (aset table (car from) (car to)) (setq glyph (make-glyph (car to))) (set-glyph-face glyph face) (aset table (car from) glyph)) (setq from (cdr from) to (cdr to)))) (set-specifier current-display-table table (current-buffer)))) (t ;GNU Emacs (let (face-bits) (setq izonmoji-backuped-display-table buffer-display-table table (or (copy-sequence (or buffer-display-table standard-display-table)) (make-display-table))) (while priority (cond ((eq (car priority) 'win) (setq from izonmoji-win-chars-list to izonmoji-win-display-list face-bits (ash (face-id (or win-face izonmoji-win-face 'default)) 19))) ((eq (car priority) 'mac) (setq from izonmoji-mac-chars-list to izonmoji-mac-display-list face-bits (ash (face-id (or mac-face izonmoji-mac-face 'default)) 19)))) (setq priority (cdr priority)) (while (and from to) (aset table (car from) (apply 'vector (mapcar (lambda (ch) (logior ch face-bits)) (car to)))) (setq from (cdr from) to (cdr to)))) (setq buffer-display-table table))))) (setq izonmoji-mode t) (run-hooks 'izonmoji-mode-hook))) (defun izonmoji-mode-off (&optional initialize) "$B5! 0xFC) (r1 = (r0 == ?\x80)) (r1 |= (r0 == ?\xA0)) (r2 = (r0 > ?\xEF)) (r2 &= (r0 < ?\xFA)) (r1 |= r2) (r1 |= (r0 > ?\xFC)) (if r1 (write-repeat r0)) (r1 = (r0 <= ?\x9F)) (r1 |= (r0 >= ?\xE0)) (if r1 ((read r1) (r2 = (r1 < ?\x40)) (r2 |= (r1 == ?\x7F)) (r2 |= (r1 > ?\xFC)) (if r2 ((write r0) (write-repeat r1))) (if (r0 >= ?\xFA) ((if (r0 == ?\xFA) ((if (r1 <= ?\x49) ,(izonmoji-ccl-ibm-ext 12 -175)) (if (r1 <= ?\x53) ,(izonmoji-ccl-ibm-ext 115 -10)) (if (r1 <= ?\x57) ,(izonmoji-ccl-ibm-ext 12 -165)) (if (r1 == ?\x58) ,(izonmoji-ccl-ibm-ext 115 -50)) (if (r1 == ?\x59) ,(izonmoji-ccl-ibm-ext 115 -41)) (if (r1 == ?\x5A) ,(izonmoji-ccl-ibm-ext 115 -42)) (if (r1 == ?\x5B) ,(izonmoji-ccl-ibm-ext 115 -63)) (if (r1 <= ?\x7E) ,(izonmoji-ccl-ibm-ext 13 28)) (if (r1 <= ?\x9B) ,(izonmoji-ccl-ibm-ext 13 29)) (if (r1 <= ?\xFC) ,(izonmoji-ccl-ibm-ext 13 28)))) (if (r0 == ?\xFB) ((if (r1 <= ?\x5B) ,(izonmoji-ccl-ibm-ext 14 -161)) (if (r1 <= ?\x7E) ,(izonmoji-ccl-ibm-ext 13 28)) (if (r1 <= ?\x9B) ,(izonmoji-ccl-ibm-ext 13 29)) (if (r1 <= ?\xFC) ,(izonmoji-ccl-ibm-ext 13 28)))) (if (r0 == ?\xFC) ((if (r1 <= ?\x4B) ,(izonmoji-ccl-ibm-ext 14 -161)))) (write r0) (write-repeat r1))) ,@(izonmoji-ccl-write-sjis)) ((r0 &= ?\x7F) (r1 = ,(charset-id 'katakana-jisx0201)) (write-multibyte-character r1 r0) (repeat)))))) (define-ccl-program izonmoji-shift-jis-encode `(1 (loop (read r0) (if (r0 == ,(charset-id 'japanese-jisx0208)) ((read r0) (read r1) (r0 &= ?\x7F) (r1 &= ?\x7F) (r1 = (r0 en-sjis r1)) (write r1 r7) (repeat)) ((if (r0 == ,(charset-id 'katakana-jisx0201)) (read r0)) (write-repeat r0)))))) (if (featurep 'xemacs) (make-coding-system 'izonmoji-shift-jis 'ccl "Shift-JIS for displaying IBM ext characters" (list 'mnemonic "S" 'decode 'izonmoji-shift-jis-decode 'encode 'izonmoji-shift-jis-encode)) (make-coding-system 'izonmoji-shift-jis 4 ?S "Shift-JIS for displaying IBM ext characters" (cons 'izonmoji-shift-jis-decode 'izonmoji-shift-jis-encode) (list (cons 'safe-charsets (coding-system-get 'japanese-shift-jis 'safe-charsets)))))) (add-to-list 'minor-mode-alist '(izonmoji-mode " Iz")) (provide 'izonmoji-mode) ;;; izonmoji-mode.el ends here navi2ch/contrib/navi2ch-js-livedoor-move.el000066400000000000000000000052571173560164300211420ustar00rootroot00000000000000;;; navi2ch-js-livedoor-move.el --- Supports moving JBBS-shitaraba. ;; Copyright (C) 2004 by Navi2ch Project ;; Author: mami ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; jbbs.livedoor.com jbbs.livedoor.jp ؤΰžΥݡȡ ;;; Code: (provide 'navi2ch-js-livedoor-move) (eval-when-compile (require 'cl)) (require 'navi2ch) (defun navi2ch-js-livedoor-move () (interactive) (let* ((old-host "jbbs.livedoor.com") (new-host "jbbs.livedoor.jp") (etc-category (navi2ch-list-get-etc-category)) changed-list) ;; ư (dolist (board (cdr (assq 'child etc-category))) (let ((uri (cdr (assq 'uri board)))) (when (string-match (format "^http://%s/" (regexp-quote old-host)) uri) (let ((new-board (copy-tree board))) (setcdr (assq 'uri new-board) (navi2ch-replace-string (format "^http://%s/" (regexp-quote old-host)) (format "http://%s/" new-host) uri)) (push (list (cdr (assq 'id board)) board new-board) changed-list))))) (navi2ch-list-apply-changed-status (list (cons 'add nil) (cons 'change changed-list))) ;; etc.txt ѹ (save-current-buffer (let ((default-major-mode 'fundamental-mode)) (set-buffer (find-file-noselect (navi2ch-list-get-file-name navi2ch-list-etc-file-name)))) (while (re-search-forward "\\(.+\\)\n\\(.+\\)\n\\(.+\\)" nil t) (let ((name (match-string 1)) (uri (match-string 2)) (id (match-string 3))) (dolist (item changed-list) (when (and (string= id (car item)) (string= name (cdr (assq 'name (cadr item)))) (string= uri (cdr (assq 'uri (cadr item))))) (delete-region (match-beginning 0) (match-end 0)) (insert (cdr (assq 'name (caddr item))) "\n" (cdr (assq 'uri (caddr item))) "\n" (cdr (assq 'id (caddr item)))) (return))))) (save-buffer)) (navi2ch-list) (navi2ch-list-sync t))) ;;; navi2ch-js-livedoor-move.el ends here navi2ch/contrib/navi2ch-logo.el000066400000000000000000000166631173560164300167040ustar00rootroot00000000000000;;; navi2ch-logo.el --- Inline logo module for navi2ch ;; Copyright (C) 2002 by navi2ch Project ;; Author: ;; (not 1) ;; http://pc.2ch.net/test/read.cgi/unix/999166513/895 $B$NL>L5$7$5$s(B ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B%l%90lMw$N@hF,$K$=$NHD$N%m%4$rE=$j$D$1$k!#(B ;; ;; Emacs 21 $B$J$i(B navi2ch-logo.elc? $B$K(B load-path $B$rDL$7$F$3$&$7$k!*(B ;; ;; (require 'navi2ch-logo) ;; (add-hook 'navi2ch-hook 'navi2ch-logo-init) ;; ;; $B$$$^$N$H$3$m30It%W%m%0%i%`(B `gifsicle' $B$H(B `convert' $B$,I,?\!#(B ;; ;; gifsicle $B$O%"%K%a!<%7%g%s(B GIF $B$NHs%"%K%a!<%7%g%s2=$K;H$&!#(B ;; convert $B$O3F$5$J$/$A$c!#(B ;; ;; $BHD0lMw$NFI$_9~$_$O!"%m%4$r;}$C$F$/$k$V$sEvA3CY$/$J$k!#(B ;; $B%U%!%$%k$K$J$k(B") (defvar navi2ch-logo-temp-name-prefix "img-" "$B%F%s%]%i%j%U%!%$%k$N%5%U%#%C%/%9!#(B") (defvar navi2ch-logo-image-alist nil "\`($BHD$N(Bid $B$=$NHD$N%m%4$N(Bimage)\' $B$+$i$J$k(B alist$B!#(B $B$$$A$I(B create-image $B$7$?2hA|$O$3$3$KDI2C$7$F:FMxMQ$9$k!#(B") (defvar navi2ch-logo-previous-image nil) (defun navi2ch-logo-init () "navi2ch-logo $B$r=i4|2=$7$F;H$($k$h$&$K$9$k!#(B" (when (and navi2ch-on-emacs21 (not navi2ch-logo-temp-directory)) (setq navi2ch-logo-temp-directory (file-name-as-directory (make-temp-file navi2ch-logo-temp-directory-prefix t))) (add-hook 'navi2ch-exit-hook 'navi2ch-logo-cleanup) (add-hook 'navi2ch-bm-select-board-hook 'navi2ch-logo-update) (add-hook 'navi2ch-board-after-sync-hook 'navi2ch-logo-update))) (defun navi2ch-logo-cleanup () "$B%F%s%]%i%j%U%!%$%k$N8e;OKv$J$I$r$7$F!"JQ?t$r=i4|CM$KLa$9!#(B" (when (and navi2ch-logo-temp-directory (file-directory-p navi2ch-logo-temp-directory)) (dolist (file (directory-files navi2ch-logo-temp-directory t)) (and (file-regular-p file) (delete-file file))) (delete-directory navi2ch-logo-temp-directory)) (setq navi2ch-logo-temp-directory nil navi2ch-logo-image-alist nil)) (defun navi2ch-logo-update () "`navi2ch-board-mode' $B$GF0:n$7!"%m%4$rFI$_9~$s$G%P%C%U%!>eIt$KE=$jIU$1$k!#(B `navi2ch-board-select-board-hook' $B$+$i8F$P$l$k!#(B" (if (eq major-mode 'navi2ch-board-mode) (let* ((id (cdr (assq 'id navi2ch-board-current-board))) (image (cdr (assoc id navi2ch-logo-image-alist)))) (if (eq image t) (navi2ch-logo-remove-image (point-min)) (when (and (not image) (not navi2ch-offline)) (condition-case err (catch 'quit (setq image (navi2ch-logo-create-logo-image))) (t nil)) (setq navi2ch-logo-image-alist (navi2ch-put-alist id (or image t) navi2ch-logo-image-alist))) (when (and image (not (eq image navi2ch-logo-previous-image))) (navi2ch-logo-remove-image (point-min)) (navi2ch-logo-put-image (point-min) image) (setq navi2ch-logo-previous-image image)))) (navi2ch-logo-remove-image (point-min)))) (defun navi2ch-logo-put-image (point image) "POINT $B0LCV$K(B IMAGE $B$rE=$jIU$1$k!#(B IMAGE $B$rD>@\%P%C%U%!%F%-%9%H$N(B display property $B$K$9$k$N$O%^%:$$!#(B $B$J$<$J$i$3$N2hA|$OJ8;z$H$OFHN)$7$?$b$N$@$+$i!#(B $B$=$3$G!"(B (1) $B$^$:(B POINT $B0LCV$KD9$5(B 0 $B$N%*!<%P!<%l%$$r:n$k(B (2) $BE,Ev$JJ8;zNs$N(B text property ($B$N(B `display' property) $B$K(B IMAGE $B$r(B $B;XDj$7$F!"%F%-%9%H$H$7$F07$($k$h$&$K$9$k(B (3) (1) $B$G:n$C$?%*!<%P!<%l%$$N(B `before-string' $BB0@-$K!"(B(2) $B$NJ8;zNs$r(B $B;XDj$9$k(B $B$H$$$&e$X$N%]%$%s%H0\F0$r6X;_!#(B (overlay-put overlay 'intangible t) ;; `face' $B$K(B `default' $B$r;XDj$7$F!"6a$/$NJ8;z$N%F%-%9%H(B ;; $B%W%m%Q%F%#$N(B underline $B$d(B stroke $B$N1F6A$rGS=|!#(B (overlay-put overlay 'face 'default) ;; navi2ch-logo $B$,:n$C$?$H$$$&$3$H$,$o$+$k$h$&$K!#(B (overlay-put overlay 'navi2ch-logo t) (overlay-put overlay 'before-string str))) (defun navi2ch-logo-remove-image (&optional point) "`navi2ch-logo-put-image' $B$,CV$$$?2hA|$r(B POINT $B0LCV$+$i>C$9!#(B $B>C$9$Y$-2hA|$,$J$1$l$P2?$b$7$J$$!#(B" (unless point (setq point (point-min))) (let ((ls (overlays-in point point)) overlay) (while (and ls (not overlay)) (when (overlay-get (car ls) 'navi2ch-logo) (setq overlay (car ls))) (setq ls (cdr ls))) (when overlay (delete-overlay overlay)))) (defun navi2ch-logo-create-logo-image () "$B%m%4$r%@%&%s%m!<%I$7$F(B `create-image' $B$7$?7k2L$rJV$9!#(B $B30It%W%m%0%i%`(B \`gifsicle\' $B$O%"%K%a!<%7%g%s(B GIF $B$rHs%"%K%a2=(B $B$9$k$?$a$K;H$&!#(B\`convert\' $B$O2hA|$r0lN'$K(B XPM $B$KJQ49$9$k$?$a$K;H$C$F$k!#(B Emacs $B$O(B XPM $B0J30$b$b$A$m$s%5%]!<%H$7$F$k$+$i!"K\Mh$OA4It(B XPM $B$K(B $B$9$k$3$H$O$J$$!#(B`image-types' $B$r;2>H$9$k$J$j(B `create-image' $B$N(B $BJV$jCM$r8+$k$J$j$7$F!"30It%W%m%0%i%`$N5/F0$OI,MW:G>/8B$K$H$I$a$?(B $B$[$&$,$$$$!#(B" (let ((logo-file (navi2ch-net-download-logo navi2ch-board-current-board)) (xpm-file (concat navi2ch-logo-temp-directory (make-temp-name navi2ch-logo-temp-name-prefix) ".xpm")) temp-file) (unless logo-file (throw 'quit nil)) (when (string-match "\\.gif$" logo-file) (setq temp-file (concat navi2ch-logo-temp-directory (make-temp-name navi2ch-logo-temp-name-prefix) ".gif")) (when (/= 0 (call-process "gifsicle" logo-file nil nil "#-1" "--output" temp-file)) (throw 'quit nil)) (setq logo-file temp-file)) (when (/= 0 (call-process "convert" nil nil nil "-border" "1x1" "-bordercolor" "black" logo-file xpm-file)) (throw 'quit nil)) (if temp-file (delete-file temp-file)) (create-image xpm-file 'xpm))) ;;; navi2ch-logo.el ends here navi2ch/contrib/navi2ch-migemo.el000066400000000000000000000035161173560164300172120ustar00rootroot00000000000000;;; navi2ch-migemo.el --- migemo support for Navi2ch ;; Copyright (C) 2002 by Navi2ch Project ;; Author: Nanashi San ;; Keywords: 2ch, network, matching ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; To use this module, put following code into your `~/.navi2ch/init.el': ;; (require 'navi2ch-migemo) ;;; Code: (provide 'navi2ch-migemo) ;; migemo $B$,$J$/$F$b%3%s%Q%$%k$G$-$k$h$&$K!#(B (eval '(require 'migemo)) (require 'navi2ch-search) (defvar navi2ch-migemo-enable t "*$B8!:w%Q%?!<%s$K(Bmigemo$B$rE,MQ$9$k$+$I$&$+!#(B") (defadvice navi2ch-search-board-subject-regexp (before navi2ch-migemo-search-board-subject-regexp activate) "$B8!:w%Q%?!<%s$K(Bmigemo$B$rE,MQ$9$k!#(B" (if navi2ch-migemo-enable (ad-set-arg 1 (migemo-get-pattern (ad-get-arg 1))))) (defadvice navi2ch-search-article-regexp (before navi2ch-migemo-search-article-regexp activate) "$B8!:w%Q%?!<%s$K(Bmigemo$B$rE,MQ$9$k!#(B" (if navi2ch-migemo-enable (ad-set-arg 1 (migemo-get-pattern (ad-get-arg 1))))) (defun navi2ch-migemo-toggle-enable () (setq navi2ch-migemo-enable (not navi2ch-migemo-enable))) ;;; navi2ch-migemo.el ends here navi2ch/contrib/navi2ch-pizaunix.el000066400000000000000000000045341173560164300176050ustar00rootroot00000000000000;;; navi2ch-pizaunix.el --- View old Unix board module for Navi2ch. ;; Copyright (C) 2002 by Navi2ch Project ;; Author: Navi2ch Project ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; http://piza.2ch.net/log/unix/0008251/ $B$N(B ;; Unix $BHD2a5n%m%0AR8K$r8+$k$?$a$N(B multibbs module $B$G$9!#(B ;; http://pc.2ch.net/test/read.cgi/unix/972851555/ $B$b;2>H!#(B ;;; Code: (provide 'navi2ch-pizaunix) (defconst navi2ch-pizaunix-ident "$Id$") (require 'navi2ch-util) (require 'navi2ch-multibbs) (defvar navi2ch-pizaunix-func-alist '((bbs-p . navi2ch-pizaunix-p) (article-to-url . navi2ch-pizaunix-article-to-url) (article-update . navi2ch-pizaunix-article-update))) (defvar navi2ch-pizaunix-variable-alist '((coding-system . shift_jis))) (navi2ch-multibbs-regist 'pizaunix navi2ch-pizaunix-func-alist navi2ch-pizaunix-variable-alist) ;;------------- (defun navi2ch-pizaunix-p (uri) "URI $B$,(B pizaunix $B$J$i(B non-nil$B$rJV$9!#(B" (string-match "http://piza.2ch.net/log/unix/0008251/" uri)) (defun navi2ch-pizaunix-article-to-url (board article &optional start end nofirst) "BOARD, ARTICLE $B$+$i(B url $B$KJQ49!#(B START, END, NOFIRST $B$GHO0O$r;XDj$9$k(B" (concat "http://piza.2ch.net/log/unix/0008251/" (cdr (assq 'artid article)) ".html")) (defun navi2ch-pizaunix-article-update (board article start) "BOARD, ARTICLE $B$KBP1~$9$k%U%!%$%k$r99?7$9$k!#(B" (let ((file (navi2ch-article-get-file-name board article)) (url (concat "http://piza.2ch.net/log/unix/0008251/" (cdr (assq 'artid article)) ".dat"))) (list (navi2ch-net-update-file url file) 'kako))) ;;; navi2ch-pizaunix.el ends here navi2ch/contrib/navi2ch-spamfilter.el000066400000000000000000000265251173560164300201100ustar00rootroot00000000000000;;; navi2ch-spamfilter.el --- Navi2ch interface for spamfilter.el ;; Copyright (C) 2003, 2004 by Navi2ch Project ;; Copyright (C) 2003 http://pc.2ch.net/test/read.cgi/unix/1065246418/38 ;; Author: http://pc.2ch.net/test/read.cgi/unix/1065246418/38 ;; Keywords: 2ch, network, spam ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B;H$$J}(B ;; http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#spamfilter.el ;; $B$+$i(B spamfilter $B%Q%C%1!<%8$rF~uBV$K$9$k!#$3$N>uBV$G(B M-x navi2ch-article-register-to-corpus ;; $B$H$7!"%^!<%/$K1~$8$F%3!<%Q%9$KEPO?$7$F$d$k!#(B ;; $B$"$kDxEY%3!<%Q%9$,0i$C$?$i(B ~/.navi2ch/init.el $B$K(B ;; (navi2ch-spamf-enable) $B$r2C$($F<+F0E*$K%U%#%k%?$9$k$h$&$K$9$k!#(B ;; $B8mG'<1$,>/$J$/$J$C$?$i(B navi2ch-article-auto-spam-register-by-filter ;; $B$r(B non-nil $B$K@_Dj$7!"%U%#%k%?$N7k2L$K1~$8$F%3!<%Q%9$K:FEPO?$9$k!#(B ;;; Code: (defconst navi2ch-spamfilter-ident "$Id$") (eval-when-compile (require 'cl)) (require 'spamfilter) (require 'navi2ch) (defconst navi2ch-spamf-preferred-major 1) (defconst navi2ch-spamf-preferred-minor 10) (unless (and (boundp 'spamf-cvs-id) (string-match "\\([0-9]+\\)\\.\\([0-9]+\\)" spamf-cvs-id) (let ((major (string-to-number (match-string 1 spamf-cvs-id))) (minor (string-to-number (match-string 2 spamf-cvs-id)))) (or (> major navi2ch-spamf-preferred-major) (and (= major navi2ch-spamf-preferred-major) (>= minor navi2ch-spamf-preferred-minor))))) (error "Use spamfilter.el revision %d.%d or later." navi2ch-spamf-preferred-major navi2ch-spamf-preferred-minor)) (defvar navi2ch-article-bayesian-save-file-name (expand-file-name "spamfilter" navi2ch-directory)) (defvar navi2ch-article-auto-spam-register-by-filter nil "non-nil $B$N>l9g!"%U%#%k%?$N7k2L$r%3!<%Q%9$K:FEPO?$9$k!#(B $B<+F0E*$K1#$5$l$?%l%9$N(B spam $B$C$]$5$OA}2C$7!"1#$5$l$J$+$C$?%l%9$N(B spam $B$C$]$5$O8:>/$9$k!#(B non-nil $B$N$^$^$G8mH=Dj$rJ|CV$9$k$H8m$C$?3X=,$r$7$F$7$^$&$N$GCm0U!#(B") (defvar navi2ch-article-manual-spam-ratio (if navi2ch-article-auto-spam-register-by-filter 2 1) "$Bl9g$O(B 2 $B0J>e(B $B$K$7$F$*$$$?J}$,$$$$$H;W$&!#(B") (defvar navi2ch-article-register-normal-message-as-good t "non-nil $B$N>l9g!"%^!<%/$NIU$$$F$J$$%l%9$b(B good $B$H$7$FEPO?$9$k!#(B `navi2ch-article-register-to-corpus' $B$b;2>H!#(B") (defvar navi2ch-spamf-good-corpus (make-spamf-corpus :name "navi2ch-spamf-good-corpus" :table (make-hash-table :test #'eq) :message-count 0)) (defvar navi2ch-spamf-bad-corpus (make-spamf-corpus :name "navi2ch-spamf-bad-corpus" :table (make-hash-table :test #'eq) :message-count 0)) (defvar navi2ch-article-before-save-corpus-hook nil) (defvar navi2ch-spamf-additional-token-flag nil "non-nil $B$N>l9g!"%l%9$NF|;~!"HV9fEy$r%H!<%/%s$H$7$FDI2C$9$k!#(B $B7P83$G$O!"%3!<%Q%9$,Bg$-$/$J$k3d$K8z2L$OGv$$$H;W$o$l$k!#(B") (dolist (map (list navi2ch-article-mode-map navi2ch-popup-article-mode-map)) (define-key map "\C-c\C-g" 'navi2ch-article-add-message-filter-by-bayesian-good) (define-key map "\C-c\C-b" 'navi2ch-article-add-message-filter-by-bayesian-spam) (define-key map "\C-c\C-s" 'navi2ch-article-show-spam-probability)) (defsubst navi2ch-spamf-register-token (corpus token) (spamf-increase-word-count corpus (spamf-intern token)) (incf (spamf-corpus-message-count corpus))) (defsubst navi2ch-spamf-register-good-token (token) (interactive "MToken: ") (navi2ch-spamf-register-token navi2ch-spamf-good-corpus token)) (defsubst navi2ch-spamf-register-spam-token (token) (interactive "MToken: ") (navi2ch-spamf-register-token navi2ch-spamf-bad-corpus token)) (defsubst navi2ch-spamf-register-token-list (corpus list) (dolist (token list) (spamf-increase-word-count corpus (spamf-intern token))) (incf (spamf-corpus-message-count corpus))) (defsubst navi2ch-spamf-register-good-token-list (list) (navi2ch-spamf-register-token-list navi2ch-spamf-good-corpus list)) (defsubst navi2ch-spamf-register-spam-token-list (list) (navi2ch-spamf-register-token-list navi2ch-spamf-bad-corpus list)) (defun navi2ch-article-bayesian-tokenizer (alist) (nconc (funcall spamf-tokenize-string-function (cdr (assq 'data alist))) (if navi2ch-spamf-additional-token-flag (mapcar (lambda (str) (concat "date:" str)) (split-string (cdr (assq 'date alist)) "[ $B!!(B]+"))) (if (string-match "$B"!(B[^ ]+" (cdr (assq 'name alist))) (list (concat "trip:" (match-string 0 (cdr (assq 'name alist)))))) (let ((number (or (cdr (assq 'number alist)) (navi2ch-article-get-current-number)))) (when (and navi2ch-spamf-additional-token-flag (numberp number)) (list (concat "num:" (number-to-string number))))) (list (concat "mail:" (cdr (assq 'mail alist))) (concat "name:" (cdr (assq 'name alist)))))) (defsubst navi2ch-article-tokenize-current-message () (navi2ch-article-bayesian-tokenizer (navi2ch-article-get-message (navi2ch-article-get-current-number)))) (defun navi2ch-article-add-message-filter-by-bayesian-good () (interactive) (dotimes (i navi2ch-article-manual-spam-ratio) (navi2ch-spamf-register-good-token-list (navi2ch-article-tokenize-current-message)))) (defun navi2ch-article-add-message-filter-by-bayesian-spam () (interactive) (dotimes (i navi2ch-article-manual-spam-ratio) (navi2ch-spamf-register-spam-token-list (navi2ch-article-tokenize-current-message)))) (defsubst navi2ch-article-spam-probability (token) (spamf-sum-spam-probability (mapcar #'cdr (spamf-cutoff-words token spamf-cutoff-words-limit navi2ch-spamf-good-corpus navi2ch-spamf-bad-corpus)))) (defun navi2ch-article-show-spam-probability (&optional prefix) "$B%l%9$N(B spam $B$C$]$5$rI=<($9$k!#(B" (interactive "P") (let* ((token (navi2ch-article-tokenize-current-message)) (prob (navi2ch-article-spam-probability token))) (if prefix (with-output-to-temp-buffer "*spam probability*" (princ (format "Spam probability: %f\n\n" prob)) (dolist (pair (spamf-cutoff-words token spamf-cutoff-words-limit navi2ch-spamf-good-corpus navi2ch-spamf-bad-corpus)) (prin1 (cons (symbol-name (car pair)) (cdr pair))) (princ "\n"))) (message "Spam probability: %f" prob)))) (defun navi2ch-article-message-filter-by-bayesian (alist) (let ((token (navi2ch-article-bayesian-tokenizer alist))) (if (> (navi2ch-article-spam-probability token) spamf-spamness-limit) 'hide))) (defun navi2ch-article-save-corpus () (run-hooks 'navi2ch-article-before-save-corpus-hook) (message "Saving corpus file...") (spamf-save-corpus navi2ch-article-bayesian-save-file-name navi2ch-spamf-good-corpus navi2ch-spamf-bad-corpus) (message "Saving corpus file...done")) (defun navi2ch-article-load-corpus () (message "Loading corpus file...") (spamf-load-corpus navi2ch-article-bayesian-save-file-name) (message "Loading corpus file...done")) (defun navi2ch-article-register-to-corpus () "$B%l%9$N%^!<%/$K1~$8$F8=:_$N%9%l$r%3!<%Q%9$KEPO?$9$k!#(B important $B%^!<%/$N%l%9$r(B good $B$K!"(Bhide $B%^!<%/$N%l%9$r(B bad $B$KEPO?$9$k!#(B `navi2ch-article-register-normal-message-as-good' $B$,(B non-nil $B$N>l9g$O(B $B%^!<%/$NIU$$$F$J$$%l%9$b(B good $B$KEPO?$9$k!#(B" (interactive) (let ((hide (cdr (assq 'hide navi2ch-article-current-article))) (imp (cdr (assq 'important navi2ch-article-current-article)))) (dolist (x navi2ch-article-message-list) (let ((num (car x)) (alist (cdr x))) (if (stringp alist) (setq alist (navi2ch-article-parse-message alist))) (message "registering...%d" num) (cond ((memq num hide) (navi2ch-spamf-register-spam-token-list (navi2ch-article-bayesian-tokenizer alist))) ((or (memq num imp) navi2ch-article-register-normal-message-as-good) (navi2ch-spamf-register-good-token-list (navi2ch-article-bayesian-tokenizer alist)))))) (message "registering...done"))) ;; hook and advice (add-hook 'navi2ch-save-status-hook #'navi2ch-article-save-corpus) (add-hook 'navi2ch-hook #'navi2ch-article-load-corpus) (defadvice navi2ch-article-apply-message-filters (after navi2ch-article-register-spam-by-filter (alist)) (when navi2ch-article-auto-spam-register-by-filter (let ((token (navi2ch-article-bayesian-tokenizer alist))) (if (eq ad-return-value 'hide) (navi2ch-spamf-register-spam-token-list token) (navi2ch-spamf-register-good-token-list token)))) ad-return-value) (defadvice navi2ch-article-hide-message (before navi2ch-article-hide-message-as-spam) (navi2ch-article-add-message-filter-by-bayesian-spam)) (defadvice navi2ch-article-cancel-hide-message (before navi2ch-article-cancel-hide-message-as-good) (navi2ch-article-add-message-filter-by-bayesian-good)) (defadvice navi2ch-article-next-message (before navi2ch-article-next-message-as-good) (unless navi2ch-article-hide-mode (navi2ch-article-add-message-filter-by-bayesian-good))) (defconst navi2ch-spamf-advice-list '((navi2ch-article-apply-message-filters after navi2ch-article-register-spam-by-filter) (navi2ch-article-hide-message before navi2ch-article-hide-message-as-spam) (navi2ch-article-cancel-hide-message before navi2ch-article-cancel-hide-message-as-good) ;; (navi2ch-article-next-message ;; before ;; navi2ch-article-next-message-as-good) )) (defun navi2ch-spamf-enable () "spamfilter $B$rM-8z$K$9$k!#(B $B%Y%$%8%"%s%U%#%k%?$K$h$k<+F0%U%#%k%?%j%s%0!"%-!<$K$h$k<+F0%9%3%"%j%s%0$,(B $BM-8z$K$J$k!#(B" (interactive) (dolist (advice navi2ch-spamf-advice-list) (apply #'ad-enable-advice advice) (ad-activate (car advice))) (add-to-list 'navi2ch-article-message-filter-list #'navi2ch-article-message-filter-by-bayesian)) (defun navi2ch-spamf-disable () "spamfilter $B$rL58z$K$9$k!#(B $B%Y%$%8%"%s%U%#%k%?$K$h$k<+F0%U%#%k%?%j%s%0!"%-!<$K$h$k<+F0%9%3%"%j%s%0$,(B $BL58z$K$J$k!#(B" (interactive) (dolist (advice navi2ch-spamf-advice-list) (apply #'ad-disable-advice advice) (ad-activate (car advice))) (setq navi2ch-article-message-filter-list (delq #'navi2ch-article-message-filter-by-bayesian navi2ch-article-message-filter-list))) (provide 'navi2ch-spamfilter) ;;; navi2ch-spamfilter.el ends here navi2ch/contrib/navi2ch-track-mouse.el000066400000000000000000000035551173560164300201720ustar00rootroot00000000000000;;; navi2ch-track-mouse.el --- Emulate help-echo functionality on Emacs 20 ;; Copyright (C) 2002 by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Adapted-By: Nanashi San ;; Keywords: emulations, convenience ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; Emacs 20 $B$G$b!"(BEmacs 21 $B0J9_$G;H$($k(B help-echo $B%W%m%Q%F%#$rI=<($9$k!#(B ;; $B$G$b!"(Btrack-mouse $B$r(B t $B$K$9$k$s$G=E$$$+$b$h!#(B ;;; Code: (defun navi2ch-track-mouse (event) "Emulate help-echo functionality on Emacs 20." (interactive "e") (save-excursion (save-window-excursion (condition-case nil (progn (mouse-set-point event) (let ((help-echo (get-text-property (point) 'help-echo)) (message-log-max nil)) (cond ((functionp help-echo) (princ (funcall help-echo (selected-window) (current-buffer) (point)) t)) ((stringp help-echo) (princ help-echo))))))))) (when (and (not (featurep 'xemacs)) (= emacs-major-version 20)) (define-key global-map [mouse-movement] 'navi2ch-track-mouse) (setq track-mouse t)) (provide 'navi2ch-track-mouse) ;;; navi2ch-track-mouse.el ends here navi2ch/doc/000077500000000000000000000000001173560164300131635ustar00rootroot00000000000000navi2ch/doc/.cvsignore000066400000000000000000000003621173560164300151640ustar00rootroot00000000000000*.tar.gz Makefile navi2ch.info navi2ch.html navi2ch.pdf navi2ch.dvi navi2ch.aux navi2ch.log navi2ch.toc navi2ch.cp navi2ch.fn navi2ch.ky navi2ch.pg navi2ch.tp navi2ch.vr navi2ch.cps navi2ch.fns navi2ch.kys navi2ch.pgs navi2ch.tps navi2ch.vrs navi2ch/doc/ChangeLog000066400000000000000000000464371173560164300147530ustar00rootroot000000000000002010-09-01 TAKAHASHI Kaoru * navi2ch.texi: @table $B$N0z?tK:$l$N=$@5!#(B 2008-07-20 Naohiro Aota * releng.txt: Update. 2008-05-31 Naohiro Aota * Makefile.in: Specify -no-site-file. 2008-03-03 Naohiro Aota * navi2ch.texi: @cindex $B$NDI2C!#(B@uref $B$K%?%$%H%k$rDI2C!#(B $BI=5-$N@55,(B $B2=!#(B 2008-02-11 Naohiro Aota * batch-texi2info.el (batch-texi2info): texinfo-every-node-update() $B$r8F$V!#(B (texinfo-copying-text): $B?7JQ?t!#(B (texinfo-copying,texinfo-insertcopying): $B?74X?t!#(B (texinfo-format-scan): @copying $B$r=hM}$9$k(B advice. * navi2ch.texi: Copyright $BI=5-$r(B @copying $B!A(B @end copying $B$NCf$K0\(B $BF0!#(B 2008-02-03 Naohiro Aota * navi2ch.texi: Copyright $B$NI=5-$r99?7!#(B 2008-01-31 Naohiro Aota * navi2ch.texi: Copyright $B$NI=5-$r99?7!#(B 2008-01-30 Naohiro Aota * navi2ch.texi (Global Key Bindings): C-c C-l $B$N%-!<%P%$%s%I$K$D$$(B $B$FI=5-!#(B 2007-01-13 extra * navi2ch.texi (Article Message Filter): $B%U%#%k%?5!G=$N3HD%$K$H$b$J$&JQ99$NH?1G(B 2006-11-12 Nanashi San * navi2ch.texi (Compile): --with-emacs --with-xemacs $B$r:o=|(B EMACS EMACSLOADPATH $B4D6-JQ?t$rDI2C(B $B>e5-JQ99$r * navi2ch.texi (Getting Develop Version): CVS $B%[%9%H$r(B navi2ch.cvs.sourceforge.net $B$K(B 2006-10-29 Nanashi San * Makefile.am (.texi.info): $B:n@.A0$K(B *.info* $B$r:o=|(B * navi2ch.texi (How to Write): navi2ch-multibbs-send-message-retry-confirm-function $B$K$D$$$F$N5-=R(B $B$r:o=|(B 2006-10-22 Nanashi San * Makefile.am (.texi.info): source $B%G%#%l%/%H%j0J30$G(B configure $B$7$?>l9g$b(B info $B:n@.$G$-$k$h$&$K!#(B patch#1144721 2005-02-05 Taiki SUGAWARA * navi2ch.texi (Saving Send Log): $BAw?.95$($N%l%9$NI=<((B $B$rDI5-!#(B 2005-01-28 Taiki SUGAWARA * navi2ch.texi (How to Use Mona Font): navi2ch-mona-enable $B$7$F$b(B $B;H$($J$$>l9g$N@_Dj$rDI5-!#(B 2005-01-14 mami * navi2ch.texi (Board Questions): $B@0M}!#(B 2004-07-29 mami * navi2ch.texi (Misc Questions): expire $B$N%-!<%P%$%s%I$rJdB-!#(B 2004-05-08 Nanashi San * navi2ch.texi (Board Questions): typo $B=$@5!#(B $B@_Dj8e$K(B C-u s $B$,I,MW$J$3$H$rL@5-!#(B (Board Questions, How to Write, Misc Questions): $B%U%!%$%k$N(B $B%j%S%8%g%s$G$O$J$/!"(BNavi2ch $B$N%P!<%8%g%s$r5-:\!#(B 2004-04-29 Nanashi San * navi2ch.texi (Message Mode AA List): $B:G?7HG$KF14|!#(B (General Qestions): operation already in progress $B%(%i!<$NBP=hJ}K!(B $B$rJQ99$7$F%;%/%7%g%s$r0\F0!#(B (Board Questions): $BF1>e!#(B 2004-04-21 Nanashi San * navi2ch.texi (Getting Develop Version): CVS $B%[%9%H$r(B cvs.sourceforge.net $B$K!#(B 2004-04-14 Nanashi San * navi2ch.texi (Article Mode Key Bindings): "u" $B$rDI2C!#(B 2004-03-25 Nanashi San * navi2ch.texi (Board Questions): navi2ch-list-moved-board-alist $B$K$D$$$FDI5-!#(B 2004-03-22 mami * navi2ch.texi (Can not Read): $BHD0\E>$K$D$$$FDI5-!#(B (Board Questions): $B1?MQ>pJsHD$K$D$$$FDI5-!#(B 2004-01-17 Nanashi San * navi2ch.texi (Search Thread): Orphan $B$J%9%l$N8!:w$K$D$$$FDI5-!#(B 2003-10-29 mami * navi2ch.texi (Getting): $B%@%&%s%m!<%I%Z!<%8$rD>@\5-:\!#(B (Compile): $B * releng.txt: $B99?7!#(B 2003-09-21 mami * releng.txt: $B99?7!#(B 2003-09-08 Nanashi San * navi2ch.texi (Board Misc Mode Key Bindings): "C-c C-r" $B$rDI2C!#(B (Article Mode Key Bindings): "C-c C-r" $B$rDI2C!#(B 2003-07-16 mami * navi2ch.texi: Copyright $B99?7!#(B 2003-07-01 mami * navi2ch.texi (Getting Develop Version): URL $B$N:G8e$K(B / $B$rDI2C!#(B 2003-06-30 extra * navi2ch.texi (Article Mode): PopUp Article $B%b!<%I$G$N(B "D"$B!"(B"A"$B!"(B "d"$B!"(B"C-u d" $B$K$D$$$F5-=R!#(B (Article Message Filter): $B?7%N!<%I!#(B 2003-06-07 mami * navi2ch.texi (FAQ): @appendixsec $B$G%;%/%7%g%sJ,$1!#(B 2003-05-13 extra * navi2ch.texi (Article Mode Key Bindings): "!" $B$rDI2C!#(B 2003-04-09 Nanashi San * navi2ch.texi (FAQ): navi2ch-message-user-name $B$NJQ99$KBP1~!#(B 2003-04-02 Nanashi San * navi2ch.texi (Getting Develop Version): CVS HEAD $B$K$D$$$F8m2r$7(B $B$F$$$k?M$,$$$k$h$&$J$N$G * navi2ch.texi (How to Use Mona Font): navi2ch-mona-enable-article-list, navi2ch-mona-disable-article-list $B$K$D$$$FDI5-!#(B 2003-03-05 mami * navi2ch.texi (FAQ): $B"!(BYaAzLuckyc $B$5$s$N%Z!<%80\E>$KBP1~!#(B (How to Use Mona Font): $BC&;z$r=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1046402063/86 (How to Use Mona Font): $B%3%a%s%H:o=|!#(B (Global Key Bindings): $B8m;z$r=$@5!#(B 2003-02-26 extra * navi2ch.texi (Article Mode Key Bindings): "F" $B$H(B "x" $B$rDI2C!#(B 2003-02-26 SAITO Takuya * navi2ch.texi (Article Mode Key Bindings): "M-u" $B$r:o=|!#(B "M-i" $B$rDI2C!#(B 2003-02-16 mami * navi2ch.texi (Compile): --with-packagedir, --with-icondir, --infodir $B$rDI2C!#(B 2003-02-14 mami * navi2ch.texi (Board Misc Mode Key Bindings): "I" $B$rDI2C!#(B 2003-02-08 Nanashi San * navi2ch.texi (Article Mode): @key $B$r(B @kbd $B$G0O$s$@!#(B (Article View Range): $B?75,%N!<%I!#I=<(HO0O$K$D$$$F!#(B (FAQ): $BI=<(HO0O$K$D$$$F$rDI2C!#(B 2003-02-06 Nanashi San * navi2ch.texi (Board Misc Mode Key Bindings): "C-o" $B$rDI2C!#(B (Article Mode Key Bindings): "C-o" $B$rDI2C!#(B 2002-12-30 mami * navi2ch.texi (FAQ): $B%G%U%)%k%H$NL>A0$NJQ?tL>$r4V0c$($F$$$?$N$G!"(B $B=$@5!#(B (navi2ch-message-remember-user-name $B"*(B navi2ch-message-user-name) 2002-12-19 SAITO Takuya * navi2ch.texi (Updated Flag): $B?7%9%l%U%i%0$rDI2C!#(B (Article Mode): $B%l%9$N8!:w$rDI2C!#(B (Message Mode): $B!VAw?.95$(!WDI2C!#(B (Article Mode Key Bindings): "?" $B$rDI2C!#(B 2002-12-17 mami * navi2ch.texi (Start Navi2ch): M-x $B$K(B @key{RET} $B$rDI2C!#(B (FAQ): customize-group $B$K$D$$$FDI2C!#(B $B%G%U%)%k%H$NL>A0$K$D$$$F99?7!#(B read.cgi $B4XO"$N@_DjJ}K!DI2C!#(B $B%9%l$N%P%C%U%!?t@)8B$K$D$$$F4J7i2=!#(B M-x $B$K(B @key{RET} $B$rDI2C!#(B $B=gHVJQ99!"$6$C$HJ,N`!#(B 2002-12-16 Nanashi San * navi2ch.texi (FAQ): $B$?$^$K$O@hl9g$N(B $BBP=hJ}K!$r5-=R!#(B $B%G%#%l%/%H%j%m%C%/$K$D$$$F5-=R!#(B 2002-11-25 mami * navi2ch.texi (FAQ): bbsmenu $B$K$D$$$F99?7!#(B 2002-10-28 mami * navi2ch.texi (Top): $B!V%$%s%H!<%k!W$r!V%$%s%9%H!<%k!W$K=$@5!#(B http://pc.2ch.net/test/read.cgi/unix/1031231315/554 2002-09-19 mami * navi2ch.texi (Board Misc Mode Key Bindings): "R" $B$N@bL@$rJdB-!#(B "m R" $B$rDI2C!#(B (FAQ): Message $B%b!<%I$N(B "C-c C-i" $B$K$D$$$F5-=R!#(B 2002-08-28 mami * navi2ch.texi (Article Mode Key Bindings): "e" $B$rDI2C!#(B 2002-08-19 mami * navi2ch.texi (FAQ): navi2ch-head $B$K$D$$$FDI2C!#(B debug-on-error $B$K$D$$$F$r0lHV8e$m$K0\F0!#(B 2002-08-18 mami * navi2ch.texi (Bookmark Mode Key Bindings): "X" $B$H(B "S" $B$rDI2C!#(B (FAQ): bookmark $B%b!<%I$G(B sort $B8e$NJB$S=g$N5-21$K$D$$$FDI2C!#(B 2002-07-27 Nanashi San * navi2ch.texi (Board Mode Key Bindings): fix typo. http://pc.2ch.net/test/read.cgi/unix/1023884490/634 2002-07-26 Nanashi San * navi2ch.texi (Compile): configure $B$r;HMQ$7$J$$%3%s%Q%$%kJ}K!$K$D(B $B$$$FDI5-!#(B (Thanks): $B * navi2ch.texi (Compile): ./configure $B$N(B --help $B%*%W%7%g%s$K$D$$$F(B $BDI5-!#(B (FAQ): $BHD$K$h$C$F$O%9%lN)$F$i$l$J$$$+$b!"$rDI5-!#(B 2002-07-22 mami * navi2ch.texi (Message Mode): C-c C-o $B$K$D$$$FDI5-!#(B (Global Key Bindings): $BF1>e!#(B 2002-07-20 Nanashi San * navi2ch.texi (Compile): site-start.el $B$G%a%C%;!<%8$rI=<($7$F$k$H(B $B%^%:!<$J$N$G!"(B-no-site-file $B$K$D$$$FDI2C!#(B (How to Use Mona Font): $B$A$g$$$H=gHV$rJQ$($F5SCm$rDI2C$7$F$_$^$7$?!#(B $B$3$s$J$s$G$I$&$G$7$g!#(B 2002-07-20 mami * navi2ch.texi (FAQ): $B!V$K$A$c$s$M$k!W"*!V#2$A$c$s$M$k!W$KJQ99!#(B 2002-07-19 mami * navi2ch.texi (How to Use Mona Font): navi2ch-mona-arrange-message $B$NJQ99$KDI?o$7$FJQ99!&JdB-!#(B 2002-07-19 Nanashi San * navi2ch.texi: footnotestyle $B$r(B end $B$K!#(B 2002-07-18 mami * navi2ch.texi (Getting): $B0JA0$N%j%j!<%9$K$D$$$F$N5-=R$r%3%a%s%H2=!#(B 2002-07-17 Nanashi San * navi2ch.texi: Mona Fonts -> Mona Font 2002-07-15 Nanashi San * navi2ch.texi (FAQ): $B%(%i! * navi2ch.texi (FAQ): navi2ch-article-get-url-text $B$K$D$$$FDI5-!#(B 2002-07-10 Nanashi San * Makefile.am (CLEANFILES): navi2ch.info $B$r:o=|!#(B (.texi.info): $BJL%G%#%l%/%H%j$G$b:n@.$G$-$k$h$&$K!#(B 2002-07-07 Nanashi San * navi2ch.texi (Compile): XEmacs 21.4.8 $B$@$H(B ~/.xemacs $BD>2<$O%Q%C(B $B%1!<%8%G%#%l%/%H%j$H$_$J$5$J$$$h$&$J$N$G!"(Bconfigure $B$NNc$r(B ~/.xemacs/mule-packages $B$KJQ99!#(B 2002-07-06 Nanashi San * navi2ch.texi (navi2ch-doc-update-aa-list): navi2ch-message-aa-default-alist $B$+$iCM$r * navi2ch.texi: @ifinfo -> @ifnottex Copyright Notice $B$N>l=j$rJQ99!#(B(makeinfo --html $B$N%P%02sHr(B) * batch-texi2info.el: Emacs 20 $B$J$I$G$b(B @ifnottex $B$r;H$($k$h$&$K!#(B * Makefile.am (.texi.dvi): texi2dvi $B$+$i(B -c $B%U%i%0$r:o=|!#(B (.texi.html): makeinfo $B$+$i(B --ifinfo $B%U%i%0$r:o=|!#(B * navi2ch.texi (Start Navi2ch): require -> autoload $B$KJQ99!#(B (What is Mona Fonts): $B:G?7$N(B URL $B$K99?7!#(B (Getting Develop Version): section $B$K3J>e$2!#(BCompile $B$N8e$K0\F0!#(B 2002-07-04 Nanashi San * navi2ch.texi (Message Mode AA List): $B:G?7HG$KF14|!#(B ($B:G8eHx(B): AA List $B$N%"%C%W%G!<%H$,LLE]$K$J$C$?$N$G<+F0E*$KJT=8$9$k(B $B4X?t$r=q$$$F$_$?!#$&$^$/$9$l$P%-!<%P%$%s%I$NJT=8$b<+F02=$G$-$k(B? * Makefile.am (AUTOMAKE_OPTIONS): texinfo.tex $B$rDI2C$7$?$N$G:o=|!#(B (CLEANFILES): make clean $B$G>C$9%U%!%$%k$rDI2C!#(B (.texi.info): navi2ch.info~ $B$,;D$k$3$H$,$"$C$?$N$G%o%$%k%I%+!<%IDI2C!#(B (pdf, .texi.dvi, .dvi.pdf, html, .texi.html): $B?7%?!<%2%C%H!#(B 2002-07-03 Nanashi San * navi2ch.texi (Article Mode Key Bindings): $B:G?7HG$KF14|!#(B (Search Thread): cache $B8!:w$K$D$$$FDI2C!#HD$r(B m a m i $B$9$k$3$H$r4+(B $B$a$kJ8>O$r:o=|!#(B 2002-07-03 mami * navi2ch.texi (FAQ): $BM-;V%a%s%F$NHD0lMw(B http://www.onpuch.jp/board/bdleft.html $B$rDI2C!#(B 2002-07-02 Nanashi San * navi2ch.texi (Message Mode AA List): AA $BDI2C!#(B 2002-07-01 Nanashi San * navi2ch.texi: FSF Emacs -> GNU Emacs (Message Mode AA List): AA $BDI2C!#(B 2002-06-30 Nanashi San * navi2ch.texi (Board Misc Mode Key Bindings): $B:G?7HG$KF14|!#(B 2002-06-29 Nanashi San * navi2ch.texi (Message Mode Key Bindings): $B:G?7HG$KF14|!#(B (Message Mode AA List): $BF1>e!#(B 2002-06-28 Taiki SUGAWARA * navi2ch.texi (List Mode): $B:G?7HG$KF14|!#(B (Global Key Bindings): $BF1>e!#(B 2002-06-27 Nanashi San * navi2ch.texi (Bookmark Mode Key Bindings): $B:G?7HG$KF14|!#(B 2002-06-23 mami * navi2ch.texi (Board Misc Mode Key Bindings): $B:G?7HG$KF14|!#(B (Board Mode Key Bindings): $BF1>e!#(B (Bookmark Mode Key Bindings): $BF1>e!#(B 2002-06-13 Nanashi San $B%-!<%P%$%s%I$$$8$C$?;~$O$3$C$A$b99?7%-%\%s%L!#(B * navi2ch.texi (How to Use Mona Fonts): navi2ch-mona-enable $B$N@_Dj(B $B$@$1$G$h$/$J$C$?$N$G$=$N;]5-=R!#(B (Global Key Bindings): $B:G?7HG$KF14|!#(B (Board Misc Mode Key Bindings): $BF1>e!#(B (Article Mode Key Bindings): $BF1>e!#(B 2002-04-10 Taiki SUGAWARA * navi2ch.texi (FAQ): C-u s $B$K$D$$$F$N5-=R$rDI2C!#(B 2002-03-06 NOKUBI Takatsugu * navi2ch.texi (FAQ): $B?7JQ?t(B navi2ch-board-hide-updated-article $B$N5-=R$rDI2C(B 2002-02-26 NOKUBI Takatsugu * navi2ch.texi (FAQ): 2$B$D99?7(B navi2ch-auto-update $B$N$3$H(B w3m.el $B$N$3$H(B 2002-02-06 Nanashi San * navi2ch.texi: navi2ch -> Navi2ch $BF0:n$9$k(B Emacsen $B$+$i(B Mule $B$rH4$$$?!#(B(Emacs $B$HJBNs$K(B Mule $B$H=q$$$?(B $B>l9g$O(B Mule 2.3 $B$H4*0c$$$5$l$k$+$b$7$l$J$$$N$G(B) (List Mode): $B!VJQ$o$C$?HD!W$rDI2C!#(B (FAQ): $B!VJQ$o$C$?HD!W$K$D$$$FDI2C!#(B 2002-01-24 Nanashi San * navi2ch.texi (Article Mode Key Bindings): ESC b $B$r(B ESC d $B$K!#(B 2002-01-23 Nanashi San * navi2ch.texi: $B%a%K%e!<$r$-$l$$$K!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/652 * Makefile.am (Makefile): MAINTAINER_MODE_TRUE $B$G$b0MB84X78$r%A%'%C(B $B%/$9$k$h$&$K!#(B 2002-01-19 NOKUBI Takatsugu * navi2ch.texi (FAQ): part4 $B$K$"$C$? * navi2ch.texi: $B:G?7HG$KF14|!#(B (Global Key Bindings): $B?7%;%/%7%g%s!#(B (List Mode Key Bindings): $B6&DL%-!<%P%$%s%I$r>e5-%;%/%7%g%s$K0\F0!#(B (Board Misc Mode Key Bindings): $B?7%;%/%7%g%s!#(B (Board Mode Key Bindings): $B6&DL%-!<%P%$%s%I$r>e5-%;%/%7%g%s$K0\F0!#(B (Bookmark Mode Key Bindings): $BF1>e!#(B 2002-01-14 Nanashi San * Makefile.am: automake $B$,:n$k(B Makefile.in $B$N$h$&$K3F9T$r(B \ $B$G$D$J(B $B$$$G$_$k!#(B 2002-01-13 Nanashi San * navi2ch.texi (FAQ): navi2ch-article.el $B$NJQ99$KBP1~!#(B 2002-01-12 Nanashi San * navi2ch.texi (FAQ): $BJQ?t$N@_DjJ}K!$G$O(B ~/navi2ch/init.el $B$K8@5Z(B $B$;$:!"(BCustomize $B%N!<%I$X$N%/%m%9%j%U%!%l%s%9$rF~$l$k$h$&$K$7$?!#(B navi2ch-article-max-buffers $B$K$D$$$FDI2C!#(B * ChangeLog: $B$h$/8+$?$i$3$N%U%!%$%k(B EUC $B$8$c$s$h!"$F$3$H$G(B JIS $B$K(B $BJQ99!#(B 2002-01-07 Nanashi San * batch-texi2info.el (batch-texi2info): Emacs 21 $B$N%A%'%C%/$r$d$a$k!#(B * navi2ch.texi: Emacs 20 $B$G$b%U%)!<%^%C%H$G$-$k$h$&!"(B @ifnottex -> @ifinfo (About This Document): $B:o=|!#(B (Getting): $BF~ * batch-texi2info.el: $BG0$N$?$a!"(B(set-language-environment) $B$9$k!#(B (batch-texi2info): Emacs 21 $B0J>e$rMW5a$9$k$h$&$K$7$?!#(B Info $B%U%!%$%k$r=q$-=P$9:]$N(B coding system $B$r(B JIS $B$K!#(B * navi2ch.texi: @document$B$[$K$c$i$i(B $B$O(B HTML $B$N;~$@$1M-8z$K$9$k!#(B (List Mode): Naci2ch $B%+%F%4%j$NHD$K$D$$$FDI5-!#(B (Search Thread): $B?75,%N!<%I!#%9%l$N8!:w$K$D$$$FDI5-!#(B (Other Boards File): etc.txt $B$K$D$$$F$9$Y$-$+(B? * batch-texi2info.el (batch-texi2info): $B?7%U%!%$%k(B ($B?74X?t(B) $B$J$s$G(B texi2info $B$K$O(B batch $B%b!<%IMQ4X?t$,$J$$$N$h!"$C$F$3$H$G(B texinfmt.el $B$N(B batch-texinfo-format $B$+$i%3%T%Z!#(B * Makefile: $B$d$C$Q(B makeinfo $B$N(B fill $B$OJQ$J$N$G(B texinfo -> info $B$K(B $B$O>e5-$N4X?t$r;H$C$F(B emacs $B$G=hM}$9$k$3$H$K$7$?!#(B TeX $B$N%F%s%]%i%j%U%!%$%k$r$A$c$s$H%j%9%H%"%C%W!#(B 2002-01-04 Nanashi San * navi2ch.texi: SourceForge $B$K$D$$$FDI5-!#(B * Makefile: .dvi $B$r:n@.8e$K(B .log $B$r>C$5$J$$$h$&$K$7$?!#(B * navi2ch.texi: $B!V$3$N%I%-%e%a%s%H$K$D$$$F!W>O$rDI2C!#(B $B!V(BBookmark $B%b!<%I!W%;%/%7%g%s$rDI2C!#(B $B%-!<%P%$%s%I$N(B node $BL>$r!V!A(B Key Bindings$B!W$KE}0l!#(B 2$B%9%H%m!<%/%-!<$O4V$K%9%Z!<%9$rF~$l$?!#!@(BC-? $B$O(B C-? $B$KJQ99!#(B $B%/%m%9%j%U%!%l%s%9$r$A$g$C$H8+D>$7!#(B * Makefile: tar $B6L$K(B ChangeLog $B$rF~$l$k$h$&$K$7$?!#(B * ChangeLog: $B?7%U%!%$%k!#(B * navi2ch.texi: 56$B$5$s$N=q$$$F$/$l$?%^!<%/$H(BFAQ$B$r%^!<%8!#(B http://pc.2ch.net/test/read.cgi/unix/1009340234/56 HTML$B$^$o$j$r$7!#(B 2002-01-03 Nanashi San * .cvsignore: navi2ch.html $B$bL5;k$9$k$3$H$K!#(B * navi2ch.texi: $B * navi2ch.texi: Board $B%b!<%I$N@bL@$rC$9$h$&$K$7$?!#(B * Makefile: tar$B6L$r:n$k$H$-!"%G%#%l%/%H%j$b4^$`$h$&$K$7$?!#(B dvi$B$r:n$C$?8e$K%G%#%l%/%H%j$r$-$l$$$K$9$k!#(B navi2ch/doc/Makefile.am000066400000000000000000000011631173560164300152200ustar00rootroot00000000000000info_TEXINFOS = navi2ch.texi EXTRA_DIST = Makefile.pmake batch-texi2info.el CLEANFILES = navi2ch.pdf navi2ch.html .texi.info: rm -f $(@)* $(EMACS) -q -batch -l $(srcdir)/batch-texi2info.el \ -f batch-texi2info $< Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status # create PDF file pdf: navi2ch.pdf .texi.dvi: TEX=ptex texi2dvi $< .dvi.pdf: rm -f $@ && dvipdfm $< # create HTML file html: navi2ch.html .texi.html: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \ --html --no-split -o $@ $< navi2ch/doc/Makefile.in000066400000000000000000000300371173560164300152330ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog \ texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = INFO_DEPS = $(srcdir)/navi2ch.info am__TEXINFO_TEX_DIR = $(srcdir) DVIS = navi2ch.dvi PDFS = navi2ch.pdf PSS = navi2ch.ps HTMLS = navi2ch.html TEXINFOS = navi2ch.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__installdirs = "$(DESTDIR)$(infodir)" DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EMACS = @EMACS@ EMACSLOADPATH = @EMACSLOADPATH@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ icondir = @icondir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ packagedir = @packagedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ info_TEXINFOS = navi2ch.texi EXTRA_DIST = Makefile.pmake batch-texi2info.el CLEANFILES = navi2ch.pdf navi2ch.html all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $< $(srcdir)/navi2ch.info: navi2ch.texi navi2ch.dvi: navi2ch.texi navi2ch.pdf: navi2ch.texi navi2ch.html: navi2ch.texi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< uninstall-info-am: @$(PRE_UNINSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ for file in $$d/$$base*; do \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f $(distdir)/$$relfile || \ cp -p $$file $(distdir)/$$relfile; \ done; \ done mostlyclean-aminfo: -rm -rf navi2ch.aux navi2ch.cp navi2ch.cps navi2ch.fn navi2ch.fns navi2ch.ky \ navi2ch.kys navi2ch.log navi2ch.pg navi2ch.pgs navi2ch.tmp \ navi2ch.toc navi2ch.tp navi2ch.tps navi2ch.vr navi2ch.vrs \ navi2ch.dvi navi2ch.pdf navi2ch.ps navi2ch.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) installdirs: for dir in "$(DESTDIR)$(infodir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-exec-am: install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic dist-info \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-data install-data-am \ install-exec install-exec-am install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean mostlyclean-aminfo \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am .texi.info: rm -f $(@)* $(EMACS) -q -batch -l $(srcdir)/batch-texi2info.el \ -f batch-texi2info $< Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status # create PDF file pdf: navi2ch.pdf .texi.dvi: TEX=ptex texi2dvi $< .dvi.pdf: rm -f $@ && dvipdfm $< # create HTML file html: navi2ch.html .texi.html: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \ --html --no-split -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: navi2ch/doc/Makefile.pmake000066400000000000000000000024211173560164300157160ustar00rootroot00000000000000# pmake # δĶʳư뤳ȤϹͤƤʤޤǤ⻲ͤ͡ EMACS = emacs TEX = ptex TEXINDEX = jtexindex MAKEINFO = jmakeinfo MAKEINFOOPTIONS = --no-split -p 0 MAKEINFOHTMLOPTIONS = --html --ifinfo ${MAKEINFOOPTIONS} --number-sections --no-headers CLEAN_FILES =*.tar.gz navi2ch.info navi2ch.html navi2ch.pdf navi2ch.dvi \ navi2ch.aux navi2ch.log navi2ch.toc \ navi2ch.cp navi2ch.fn navi2ch.ky navi2ch.pg navi2ch.tp navi2ch.vr \ navi2ch.cps navi2ch.fns navi2ch.kys navi2ch.pgs navi2ch.tps navi2ch.vrs VERSION != date +%Y%m%d DISTNAME = navi2ch-doc-${VERSION} TARBALL = ${DISTNAME}.tar.gz TARFILES = ChangeLog Makefile navi2ch.info navi2ch.texi all: info everything: info pdf html info: navi2ch.info html: navi2ch.html pdf: navi2ch.pdf tar: ${TARBALL} .PHONY: ${TARBALL} ${TARBALL}: ${TARFILES} rm -rf $@ ${DISTNAME} mkdir ${DISTNAME} cp ${TARFILES} ${DISTNAME} tar -co -f - ${TARFILES:S/^/${DISTNAME}\//g}| gzip -9 > $@ rm -rf ${DISTNAME} clean: rm -f ${CLEAN_FILES} .SUFFIXES: .texi .info .html .dvi .pdf .texi.info: rm -f $@ ${EMACS} -q -batch -l ./batch-texi2info.el -f batch-texi2info $< .texi.html: ${MAKEINFO} ${MAKEINFOHTMLOPTIONS} -o $@ $< .texi.dvi: MAKEINFO=${MAKEINFO} TEXINDEX=${TEXINDEX} TEX=${TEX} texi2dvi $< .dvi.pdf: rm -f $@ dvipdfm $< navi2ch/doc/batch-texi2info.el000066400000000000000000000125531173560164300165010ustar00rootroot00000000000000;;; batch-texi2info.el --- run texi2info with emacs -batch ;; Copyright (C) 2002, 2008 by Navi2ch Project ;; Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, ;; 1994, 1995, 1996, 1997, 1998, 2000, 2001 ;; Free Software Foundation, Inc. ;; Copyright (C) 1999 Yoshiki Hayashi ;; Copyright (C) 2000, 2001, 2002 TAKAHASHI Kaoru ;; Author: ̵̾ʢäѤ ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;;; Code: (require 'texinfmt) (set-language-environment "Japanese") ;; workaround for emacs20 (unless (symbol-plist 'ifnottex) (put 'ifnottex 'texinfo-format 'texinfo-discard-line) (put 'ifnottex 'texinfo-end 'texinfo-discard-command)) ;; From ptexinfmt.el ;; @copying ... @end copying ;; that Emacs 21.4 and lesser and XEmacs don't support. (if (fboundp 'texinfo-copying) nil (defvar texinfo-copying-text "" "Text of the copyright notice and copying permissions.") (defun texinfo-copying () "Copy the copyright notice and copying permissions from the Texinfo file, as indicated by the @copying ... @end copying command; insert the text with the @insertcopying command." (let ((beg (progn (beginning-of-line) (point))) (end (progn (re-search-forward "^@end copying[ \t]*\n") (point)))) (setq texinfo-copying-text (buffer-substring-no-properties (save-excursion (goto-char beg) (forward-line 1) (point)) (save-excursion (goto-char end) (forward-line -1) (point)))) (delete-region beg end))) (defun texinfo-insertcopying () "Insert the copyright notice and copying permissions from the Texinfo file, which are indicated by the @copying ... @end copying command." (insert (concat "\n" texinfo-copying-text))) (defadvice texinfo-format-scan (before expand-@copying-section activate) "Extract @copying and replace @insertcopying with it." (goto-char (point-min)) (when (search-forward "@copying" nil t) (texinfo-copying)) (while (search-forward "@insertcopying" nil t) (delete-region (match-beginning 0) (match-end 0)) (texinfo-insertcopying)))) ;; batch-texinfo-format ۤܥԥ (defun batch-texi2info () "Runs texi2info on the files remaining on the command line. Must be used only with -batch, and kills emacs on completion. Each file will be processed even if an error occurred previously. For example, invoke \"emacs -batch -funcall batch-texi2nfo $docs/ ~/*.texinfo\"." (if (not noninteractive) (error "batch-tex2info may only be used -batch")) (let ((version-control t) (auto-save-default nil) (find-file-run-dired nil) (kept-old-versions 259259) (kept-new-versions 259259) (coding-system-for-read 'undecided) (coding-system-for-write 'iso-2022-7bit-unix)) (let ((error 0) file (files ())) (while command-line-args-left (setq file (expand-file-name (car command-line-args-left))) (cond ((not (file-exists-p file)) (message ">> %s does not exist!" file) (setq error 1 command-line-args-left (cdr command-line-args-left))) ((file-directory-p file) (setq command-line-args-left (nconc (directory-files file) (cdr command-line-args-left)))) (t (setq files (cons file files) command-line-args-left (cdr command-line-args-left))))) (while files (setq file (car files) files (cdr files)) (condition-case err (progn (if buffer-file-name (kill-buffer (current-buffer))) (find-file file) (buffer-disable-undo (current-buffer)) (set-buffer-modified-p nil) (texinfo-mode) (texinfo-every-node-update) (message "texinfo formatting %s..." file) (texi2info nil) (if (buffer-modified-p) (progn (message "Saving modified %s" (buffer-file-name)) (save-buffer)))) (error (message ">> Error: %s" (prin1-to-string err)) (message ">> point at") (let ((s (buffer-substring (point) (min (+ (point) 100) (point-max)))) (tem 0)) (while (setq tem (string-match "\n+" s tem)) (setq s (concat (substring s 0 (match-beginning 0)) "\n>> " (substring s (match-end 0))) tem (1+ tem))) (message ">> %s" s)) (setq error 1)))) (kill-emacs error)))) navi2ch/doc/navi2ch.texi000066400000000000000000001742441173560164300154240ustar00rootroot00000000000000\input texinfo @c -*- mode: texinfo; coding: euc-japan -*- @comment %**start of header @setfilename navi2ch.info @settitle Navi2ch, Navigator for 2ch for Emacsen @set REVISION $Revision$ @ifhtml @documentlanguage ja @end ifhtml @paragraphindent 0 @c @setchapternewpage off @iftex @afourpaper @end iftex @finalout @footnotestyle end @comment %**end of header @dircategory 2ch @direntry * Navi2ch: (navi2ch). Navigator for 2ch for Emacsen @end direntry @c commitˤ뤳: @c * C-c C-u C-a 롣Ƭ C-u ĤƤ@strong{ʤ} @c * make 塢navi2ch.info 򳫤 @kbd{M-x Info-validate} 롣 @c infoեѴˤϡ @c % makeinfo navi2ch.texi @c Ȥ뤫Emacs ǤΥե򳫤@kbd{M-x texi2info} Ȥ롣 @copying Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Navi2ch Project Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries a copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end copying @titlepage @title Navi2ch @subtitle Navigator for 2ch for Emacsen @subtitle @value{REVISION} @author Navi2ch Project @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @value{REVISION} @insertcopying @node Top @top Navi2ch Navi2ch ϡEmacsXEmacsMeadow ʤɤ Emacsen ư롢 ͤʥӥǤ롣 @menu * Install:: 󥹥ȡ * Usage:: Ȥ * Customize:: ޥ * Key Bindings:: Х * FAQ:: 褯Ȥ * Thanks:: ռ @detailmenu --- The Detailed Node Listing --- 󥹥ȡ * Getting:: ˡ * Compile:: ѥˡ * Getting Develop Version:: ȯǤ Ȥ * Start Navi2ch:: ưˡ * List Mode:: List ⡼ * Board Mode:: Board ⡼ * Bookmark Mode:: Bookmark ⡼ * Article Mode:: Article ⡼ * Message Mode:: Message ⡼ Board ⡼ * Updated Flag:: ե饰 * State Flag:: ֥ե饰 * Mark:: ޡ * Hide Thread:: 򱣤 * Search Thread:: θ * Web Search:: Web Ȥä Bookmark ⡼ * Adding Bookmark:: ֥åޡɲä * Operating Bookmark:: ֥åޡ * Browsing Bookmark:: ֥åޡ Article ⡼ * Article View Range:: ɽϰ * Article Message Filter:: 쥹Υե륿 Message ⡼ * Saving Send Log:: Ȥ ޥ * Emacs Customization Interface:: Emacs Υޥ󥿡ե Ѥ * Init File:: ե * Other Boards File:: ¾ΥƥĤɲä * Mona Font:: ʡեȤȤ ʡեȤȤ * What is Mona Font:: ʡեȤäƲ? * How to Use Mona Font:: ǡɤäƻȤ? Х * Global Key Bindings:: ٤ƤΥ⡼ɤǶ̤ΥХ * List Mode Key Bindings:: List ⡼ɤǤΥХ * Board Misc Mode Key Bindings:: Board ϥ⡼ɶ̤ΥХ * Board Mode Key Bindings:: Board ⡼ɤǤΥХ * Bookmark Mode Key Bindings:: Bookmark ⡼ɤǤΥХ * Article Mode Key Bindings:: Article ⡼ɤǤΥХ * Message Mode Key Bindings:: Message ⡼ɤǤΥХ * Message Mode AA List:: Message ⡼ɤǤΥȰ 褯Ȥ * General Qestions:: * How to Read:: ɤ * Can not Read:: ɤʤ * Board Questions:: ĴϢ * How to Write:: 񤭹 * Misc Questions:: ¾ @end detailmenu @end menu @end ifnottex @node Install @chapter 󥹥ȡ @menu * Getting:: ˡ * Compile:: ѥˡ * Getting Develop Version:: ȯǤ @end menu @node Getting @section ˡ @cindex @uref{http://sourceforge.net/project/showfiles.php?group_id=39552} ǿ navi2ch-X.Y.Z.tar.gz ꤹ롣 @uref{http://navi2ch.sourceforge.net/, Navi2ch Project Home Page} @uref{http://sourceforge.net/projects/navi2ch/, Navi2ch Project Summary Page}ץå @c Υ꡼ϺԤ (not 1) Υڡꤹ뤳ȤǤ롣 @c @uref{http://www.geocities.co.jp/SiliconValley-Oakland/7673/} @c ( sourceforge ˰ܤʡ) ͤ UNIX ġ@uref{Navi2ch , http://h.u.la/dance/?P=1&kenken=Navi2ch}⻲ȤΤȡ @node Compile @section ѥˡ @cindex ѥ @cindex configure @example @group % gzip -dc navi2ch-X.Y.Z.tar.gz | tar xvf - % cd navi2ch-X.Y.Z % ./configure; make # make install @end group @end example @dots{} 㤢ʤǰפ configure Υץ @table @option @item --help configure Υץɽ @item --with-lispdir Navi2ch 򥤥󥹥ȡ뤹ǥ쥯ȥꡣ @item --with-icondir ʤɤβե򥤥󥹥ȡ뤹ǥ쥯ȥꡣ @item --infodir Info ե򥤥󥹥ȡ뤹ǥ쥯ȥꡣ @item --with-packagedir Navi2ch 򥤥󥹥ȡ뤹ѥåǥ쥯ȥꡣ(XEmacs Τ) @end table configure ϰʲδĶѿѤ롣 @table @option @item EMACS emacs Υޥ̾ @item EMACSLOADPATH emacs 饤֥򤵤ѥ @end table 㤨 Meadow äʲΤȤꡣ @example @group ./configure EMACS=/meadow/bin/Meadow.exe --with-lispdir=/meadow/site-lisp/navi2ch @end group @end example XEmacs ȤäƤơۡǥ쥯ȥ˥󥹥ȡ뤷ϰʲ Τ褦ˤȤ⡣ @example @group ./configure EMACS=xemacs --with-packagedir=$HOME/.xemacs/mule-packages @end group @end example ȤˤäƤϡԤ󥹥ȡ뤷 Lisp ѥåˤä åɽ졢configure ޤưʤ礬롣 κݤ @option{EMACS="xemacs -no-site-file"} ʤɤä ޤ󥹥ȡǤ뤫⤷ʤ @subsection configure Ѥʤǥѥ뤹 @cindex configure ʤΥѥ @cindex Windows ǤΥѥ Cygwin 򥤥󥹥ȡ뤷Ƥʤ Windows ʤɡconfigure ư뤳 ǤʤĶǤϡʲΤȤꤹȥѥǤ뤫⤷ʤ @enumerate @item @file{EMACS-TOP-DIR/site-lisp}@footnote{@file{EMACS-TOP-DIR} @file{C:/Meadow} ʤɡEmacs 򥤥󥹥ȡ뤷ǥ쥯ȥ} β @file{navi2ch} Ȥǥ쥯ȥ롣 @item Navi2ch ʪƾ嵭Υǥ쥯ȥ˥ԡ롣 @item @kbd{C-x C-f @key{RET} @file{嵭ǥ쥯ȥ/bcomp.el} @key{RET}} Ϥ @file{bcomp.el} 򳫤 @item @kbd{M-x eval-current-buffer @key{RET}} ϤƼ¹Ԥ롣 @item Emacs Ω夲ľ @end enumerate @node Getting Develop Version @section ȯǤ @cindex ȯ @cindex CVS Navi2ch γȯ˶̣ʤ顢CVS ȤäƳȯǤꤹ뤳ȤǤ롣 @code{CVS password:} ʹƤ鲿Ϥ @kbd{@key{RET}} 򲡤ȡ @example @group % cvs -d:pserver:anonymous@@navi2ch.cvs.sourceforge.net:/cvsroot/navi2ch login % cvs -z3 -d:pserver:anonymous@@navi2ch.cvs.sourceforge.net:/cvsroot/navi2ch co navi2ch @r{(줾Ԥ)} @end group @end example checkout @file{navi2ch} ǥ쥯ȥ @example @group % cvs update -Pd @end group @end example ȤȺǿǤƱ뤳ȤǤ롣configure Ǥ @example @group % make update @end group @end example Τ褦ˤƤ⤤@footnote{GNU make ʳ make (㤨 FreeBSD ɸ make ʤ) ǤϡMakefile åȤƤ⡢Makefile ɤ߹ߤʤΤ롣update åȤϡΤ褦ʥƥ ⤦ޤư褦cvs update θ Makefile 򹹿롣} CVS ˤĤƤξܤ @uref{http://www.cvshome.org/} ʤɤ򻲾ȡ ʤȯǤϤޤǤⳫȯΤλǤΥʥåץåȤǤꡢ ꡼Ǥ褷ǿǤȤ櫓ǤϤʤ ȯԤˤʤ CVS commit 뤳ȤǤ褦ˤʤ롣 @uref{http://sourceforge.net/projects/navi2ch/, Navi2ch Project Summary Page}֥ץȴԡפ˥󥿥Ȥäơ Navi2ch γȯ˻äƤۤ @node Usage @chapter Ȥ @menu * Start Navi2ch:: ưˡ * List Mode:: List ⡼ * Board Mode:: Board ⡼ * Bookmark Mode:: Bookmark ⡼ * Article Mode:: Article ⡼ * Message Mode:: Message ⡼ @end menu @node Start Navi2ch @section ưˡ @cindex ư @cindex ץå @findex navi2ch @vindex navi2ch-display-splash-screen @file{~/.emacs} @lisp (autoload 'navi2ch "navi2ch" "Navigator for 2ch for Emacs" t) @end lisp Ƚ񤯡 @kbd{M-x navi2ch @key{RET}} ǵư Windows Ǥ Ķѿ @env{TZ} @code{JST-9} ȤƤ餷 ưΥץå `navi2ch-display-splash-screen' Ǥ롣 @node List Mode @section List ⡼ @cindex List ⡼ @cindex İ @cindex Navi2chץƥ @cindex ֥ե @cindex ɽ @cindex ָ @cindex @cindex ˤ @cindex ֥֥åޡץƥ @cindex ֤¾ץƥ @cindex Ѥäġץƥ Navi2ch ưȰʲΤ褦ʲ̤ˤʤ롣 @example @group [+]Navi2ch [+]֥åޡ [+]¾ [+]Ѥä : @end group @end example @code{[+]У} ιԤ˰ư @kbd{@key{SPC}} 򲡤ȡ ֥˥塼ưʲΤ褦ˤʤ롣 @example @group [-]У Windows Mac mac : ΤPC @end group @end example UNIX Ĥɤߤʤ顢 @code{UNIX} ιԤ˰ư @kbd{@key{SPC}} 򲡤 Ĥ̾ξ @kbd{a} 򲡤ȡĤ֥åޡɲä롣 @kbd{b} İȥ֥åޡɽߤؤ뤳ȤǤ롣( Х֥åޡ (@ref{Bookmark Mode}) Ȥϰ㤦Τա) List ⡼ɤǤϡŪˣͤĤƥꤴȤ¤Ǥ뤬 Ƭ4ĤΥƥ°ĤüĤǤ롣 @example @group [-]Navi2ch ե ɽ [+]֥åޡ [+]¾ @end group @end example Navi2chץƥĤϰʲΤȤꡣ @itemize @bullet @item ֥եפˤϺǸɽǥ쥯ȥΥΰ¸Ƥ 롣ǥ쥯ȥΥΰ @kbd{C-c C-f} 򲡤塢ǥ쥯ȥ ꤹɽǤ롣 @item ɽפˤϸߤΥåɽΰɲä롣 @item ָפˤϺǸ˹Ԥäη̤¸Ƥ롣ˤĤƤ Board ⡼ (@ref{Board Mode}) 򻲾ȤΤȡ @item פˤ (ߤΥå˸¤餺) ɽΰɲä롣 @end itemize ʾ4ĤĤˤ Navi2ch ưŪ˥ɲäƤʳϥ Х֥åޡƱǤ롣@xref{Browsing Bookmark}. ֥֥åޡץƥˤϥХ֥åޡޤޤ롣 @xref{Bookmark Mode}. ֤¾ץƥˤϼʬɲäĤޤޤ롣@xref{Other Boards File}. Ѥäġץƥˤ Navi2ch ưƤɲä줿ġž Ĥޤޤ롣 @node Board Mode @section Board ⡼ @cindex Board ⡼ @cindex @cindex ̥֥åޡ Ĥ򳫤ȤĤˤ륹ΰʲΤ褦ʲ̤ɽ롣 @c @TeX{} ǽȤοޤɤˤʤ󤫤ʤ @c @multitable ȤäƤߤ٤HTMLǤ롣ᡣ @c @verbatim ȤȤ? @example @group 16 +C ʤϤ˽񤭹ᡪʤǤ⥢4 ( 636) 17 =C*navi2ch for emacs (part 4) ( 50) 18 U ֤UnixäƤ뤦󤳤ɤ⡪ ( 101) ^ ^^^ : | ||| ȥ 쥹 | ||+- ޡ | |+-- ֥ե饰 | +--- ե饰 +----- ֹ @end group @end example ǽιफ顢ֹ֥סֹե饰ס־֥ե饰ס֥ޡס ֥ȥס֥쥹פȤʤ롣 ɤߤ˥ư @kbd{@key{SPC}} 򲡤ȤΥɤ ȤǤ롣 ξ @kbd{a} 򲡤ȡΥ֥åޡɲä롣@kbd{b} ǥȥ֥åޡɽߤؤ뤳ȤǤ롣( ֥åޡ (@ref{Bookmark Mode}) Ȥϰ㤦Τա) @kbd{?} 򲡤ȡ򸡺뤳ȤǤ롣@xref{Search Thread}. @menu * Updated Flag:: ե饰 * State Flag:: ֥ե饰 * Mark:: ޡ * Hide Thread:: 򱣤 * Search Thread:: θ * Web Search:: Web Ȥä @end menu @node Updated Flag @subsection ե饰 @cindex ե饰 @cindex `%' @cindex `+' @cindex `=' ե饰ΰ̣ϰʲΤȤꡣ @table @code @item % Ĥ򳫤ȤˤϤʤä졣 @item + Ĥ򳫤Ƥ鹹줿졣@kbd{+} 򲡤ȡ줿 ȿΤߤΰɽǤ롣 @item = Ĥ򳫤Ƥ鹹Ƥʤ졣¾ιե饰Υ ȤѤ롣 @item () Υե饰 (ʤɤ) ֥ե饰 (@code{VCU}) ̵ͭˤä ̣Ѳ롣 @code{C} ʤɤξ֥ե饰ΩäƤȤϰĤ򳫤Ȥ 줿Τɤޤˤǡ֥ե饰ΩäƤʤȤϰ ɤȤΤʤȤ̣ @end table @node State Flag @subsection ֥ե饰 @cindex ֥ե饰 @cindex `V' @cindex `C' @cindex `U' ֥ե饰ΰ̣ϰʲΤȤꡣ @table @code @item V Navi2ch buffer äƤ (ɽƤ) 졣 @item C ˥å夬륹졣 @item U @kbd{i} 򲡤ƹ줿 (buffer ̵⤷ʤ) 졣 @item () ɤȤ @kbd{i} ǹȤʤ졣 @end table @node Mark @subsection ޡ @cindex ޡ @cindex `*' ޡ뤳ȤǡĤΥޤȤƽ뤳ȤǤ롣 ޡˤ @code{*} ɽ롣 @example @group 16 +C ʤϤ˽񤭹ᡪʤǤ⥢4 ( 636) 17 =C*navi2ch for emacs (part 4) ( 50) 18 U ֤UnixäƤ뤦󤳤ɤ⡪ ( 101) ^^ : || |+- ޡ +-- ֥ե饰 @end group @end example @kbd{*} 򲡤ȥԤΥ줬ޡ롣٤ƤΥޡ Ȥ @kbd{m a} Ȥޤ꡼ꤷ @kbd{m r} 򲡤Х꡼Τ٤ƤΥޡǤ롣 ޡȤˤŪΥξ @kbd{u} 򲡤 @kbd{m i} Ϥȥޡ򹹿롣֥åޡϿ @kbd{m a} 򤷤Ƥ鹹ȤȤƤڤ @kbd{m i} ǹơ쥹ƤˤϾ֥ե饰 @code{U} ΩġƤʤɽѲʤ @node Hide Thread @subsection 򱣤 @cindex 򱣤 @cindex åɤܡ 硼ʤϸʤܤΤ⤤Ȥϥ򱣤 ǽ @kbd{d} 򲡤ȤǥΥ򱣤ȤǤ롣ٱ 졢˵ưɽʤ ˤʤäƱޤʤä顢@kbd{h} 򲡤ȤDZ ΰ򸫤⡼ɤ˰ܹԤǤ롣 @kbd{h} 򲡤и(ɽ 򸫤)⡼ɤ롣 򸫤⡼ɤ @kbd{d} 򲡤Сα ̾⡼ɤǸ褦ˤǤ롣 ˵󤲤ʳΥBoard ⡼ɤǤΥХ (@ref{Board Mode Key Bindings}) 򻲾ȤƤ硣 @node Search Thread @subsection θ @cindex θ @cindex ѤΥ Navi2ch Ǥϥåоݤ˥측뤳ȤǤ롣 ܡɥ⡼ɤ @kbd{?} 򲡤 @code{Search for: s)ubject a)rticle c)ache o)rphan} ʹΤǡΥȥΤߤоݤ˸Ԥʤ @kbd{s} Ƥоݤ˸Ԥʤ @kbd{a} 򲡤@kbd{c} 򲡤ȸ Ԥ鷺̤ϥå夬¸ߤ륹줹٤Ƥˤʤ롣@kbd{o} 򲡤 å夬¸ߤ뤬Ĥ⥰Х֥åޡ⻲Ȥ ʤ줬̤Ȥʤ롣 @code{Search from: b)oard a)ll} ʹΤǡ߳Ƥ (Board ⡼ɤξ) 䥫ΤԤΥ줬° (Bookmark ⡼ξ) оݤ˸ʤ @kbd{b} 򡢤٤ƤĤоݤ˸ ʤ @kbd{a} 򲡤٤ƤĤоݤ˥Ƥ򸡺ˤ ʤ֤Τա ƤθϥΥåоݤȤΤǡоݤȤ Ƥ򤢤餫ᥭå˼Ǥȡ ̤ Bookmark ⡼ɤȤ褯 Search ⡼ɥХåեɽ롣 @xref{List Mode}, @xref{Bookmark Mode}. ޤꥹȥ⡼ɤ @kbd{?} 򲡤 @code{Search for: s)ubject a)rticle c)ache o)rphan}ʹ줿Ȥ @kbd{s} Ȳȡ @code{Search from: c)ategory l)ocal w)eb} ʹƤ롣 λ˥ 뤬륫ƥ꤫õʤ @kbd{c} 򡢤٤Ƥ(å夷Ƥ) õʤ @kbd{l} Web Ȥä 2ch Τ鸡ʤ @kbd{w} 򲡤 Web ȤäˤĤƤξܺ٤ @xref{Web Search} 򸫤Ƥۤ @node Web Search @subsection Web Ȥä @cindex Web Ȥä @vindex navi2ch-search-web-search-method @vindex navi2ch-search-union-method-list navi2ch Ǥ http://find.2ch.net/ http://h.ula.cc/ Ȥä 2ch θ ӥȤäơåɤꤷɤ˰פ륹å 򸡺Ƥ뤳ȤǤ롣 򳫻Ϥˤϡꥹȥ⡼ɤ @kbd{? s w} ȲǤդΥ⡼ɤ @kbd{C-c C-s} Ȳȡ@code{Subject search from web: } ʹ ΤǡդϤФ褤 Web ˤ¿ˡ롣navi2ch ǤϰʲΤΤ򥵥ݡȤƤ롣 @table @code @item navi2ch-search-find-2ch-method http://find.2ch.net/ ȤäƸ롣 @item navi2ch-search-hula-method http://h.ula.cc/ ȤäƸ롣 @item navi2ch-search-union-method navi2ch-search-union-method-list ꤵƤƤθˤ븡 ̤礷ɽ롣 @end table Ȥ @lisp (setq navi2ch-search-web-search-method 'navi2ch-search-union-method) (setq navi2ch-search-union-method-list '(navi2ch-search-find-2ch-method navi2ch-search-hula-method)) @end lisp Τ褦ˤȡ http://find.2ch.net/ ˤ븡̤ http://h.ula.cc/ ˤ븡̤礵줿Τ򸡺̤Ȥ뤳 Ǥ롣 @node Bookmark Mode @section Bookmark ⡼ @cindex Bookmark ⡼ @cindex Х֥åޡ @cindex ü @cindex Ū @cindex Articles ⡼ @cindex Search ⡼ @cindex History ⡼ Х֥åޡȤϡĤΥޤȤ᤿Ū (Τ ʤ) Ǥ롣 ¾ü (Articles ⡼ɡSearch ⡼ɡHistory ⡼) ˤ Ƥ Bookmark ⡼ɤƱǤΤǡξϤ򻲾ȤƤۤ @xref{List Mode}. @menu * Adding Bookmark:: ֥åޡɲä * Operating Bookmark:: ֥åޡ * Browsing Bookmark:: ֥åޡ @end menu @node Adding Bookmark @subsection ֥åޡɲä @cindex ֥åޡɲ Board ⡼ (@ref{Board Mode}) Article ⡼(@ref{Article Mode}) @kbd{A} 򲡤ȤǡΥ򥰥Х֥åޡɲä뤳 ȤǤ롣 Board ⡼ɤǤϡ@kbd{m A} Ѥ뤳ȤǥޡդޤȤ ɲä뤳ȤǤ롣@xref{Mark}. ֥åޡɲäݡ@code{bookmark id:} ˤɲäХ ֥åޡΥ֥åޡ ID @code{Input bookmark name for [@var{BOOKMARK-ID}]:} ˤϤΥ֥åޡ ID ̾Ϥ롣 @c IDۤ @node Operating Bookmark @subsection ֥åޡ @cindex Х֥åޡԽ @cindex Х֥åޡκ List ⡼ (@ref{List Mode}) ǤϡƱ֥åޡ ID ĥ Ȥơ֥åޡƥ°ĤΤ褦ɽ롣 @example @group [+]Navi2ch [-]֥åޡ navi2ch for emacs [+]¾ @end group @end example ֥åޡΤԤ˥֤ @kbd{C} 򲡤ȤΥ֥åޡ ԽǤ@kbd{D} 򲡤ȤΥ֥åޡǤ롣 @node Browsing Bookmark @subsection ֥åޡ @cindex Х֥åޡα @cindex Х֥åޡ¤٤ ֥åޡ򳫤ȡBoard ⡼ (@ref{Board Mode}) Ȥ褯 Bookmark ⡼ɤˤʤ롣 @example @group 1 V navi2ch for emacs (part 4) [UNIX] 2 C 2chѥ֥饦Navi2ch [UNIX] 3 U ʥӷ [UNIX] ^ ^^ : | || ȥ | |+- ޡ | +-- ֥ե饰 +----- ֹ @end group @end example Board ⡼ɤȤΰ㤤ϰʲΤȤꡣ @itemize @bullet @item 쥹˥줬°Ĥɽ롣 @item 󳫤ǤΥ쥹Ӥʤᡢե饰¸ߤʤ @item @kbd{C-k}@kbd{C-y} ȤäƥåȥɥڡȤ뤳Ȥɽ ֤Ѥ롣 @end itemize ¾Υ Bookmark ⡼ɤǤΥХ (@ref{Bookmark Mode Key Bindings}) 򻲾ȤΤȡ @node Article Mode @section Article ⡼ @cindex Article ⡼ @cindex åɽ @cindex 󥫡 @cindex 褫 @vindex navi2ch-article-mode-line-format 򳫤Ⱦ岼2ĤΥڥʬ졢ˤϥˤϤΥ ƤʲΤ褦ɽ롣 @example @group From: [1] ̵̾ʢäѤ <> Date: 01/12/26 13:17 Emacsenư2chѥ֥饦navi2chåpart 4Ǥ ϤsourceforgeǤζƱȯϼ¸Τ * Ԥ(not 1)Υڡ http://www.geocities.co.jp/SiliconValley-Oakland/7673/ >>2 󥯡å >>3 󥹥ȡ롢ưΤ(READMEȴ) ________________________________________ From: [2] ̵̾ʢäѤ <> Date: 01/12/26 13:17 : @end group @end example @kbd{@key{SPC}}/@kbd{@key{DEL}} Ǽ/Υڡ@kbd{n}/@kbd{p} /Υ쥹˰ưΤǡŬɤ߿ʤ롣 򱣤(@ref{Hide Thread}) Ʊͤˡ @kbd{d} ǥ쥹򱣤Ȥ 롣̾ΰ⡼ɤȱ쥹򸫤⡼ɤؤΰܹ @kbd{h} Ǥ 쥹򸫤⡼ɤ @kbd{d} 򲡤Фޤ̾⡼ɤǤߤ뤳Ȥ Ǥ褦ˤʤ롣 Υ쥹֥åޡϡ򤽤Υ쥹˹碌 @kbd{a} 򲡤֥åޡ줿쥹򸫤ˤ @kbd{$} 򲡤 @kbd{$} 򲡤иΥ쥹֤롣 Navi2ch ˤϡ@code{>>1} ʤɤΤ褦˵Ҥ줿¾Υ쥹Ȥ䡢 @code{http://} ǻϤޤ󥯤ʤɤڤɤ뵡ǽѰդƤ 롣@kbd{@key{TAB}} 򲡤Ȥǡˤ뤽Υ󥯤 ưǤξ֤ @kbd{@key{RET}} 򲡤ȤdzֹΥ쥹 ꡢȤƤ URL ˥֥饦ƤӽФǤ롣쥹 Τ@kbd{l} 򲡤ȤǸΥ쥹뤳ȤǤ롣ޤꤹ @kbd{L} 򲡤ȤǵǤ롣 쥹񤭤 @kbd{w} (age ǽ񤯻) ޤ @kbd{W} (sage ǽ ) 򲡤 @kbd{?} 򲡤ȡ쥹򸡺뤳ȤǤ롣̾ (name)᡼ (mail) (date)ID (id)ۥ̾/IP (hostname)ʸ (body) Υȥ (subject) ȥ쥹 (reference) 鸡ӡ ʸϤ롣ѡѤߤΥåΤߤ򸡺оݤȤΤǡ 餫ḡϰϤΥåɽƤȡ ̤ɽХåեǤϡ@kbd{D} 򲡤ɽƤ쥹ޤȤ ƱȤǤ@kbd{A} 򲡤ƱͤˤޤȤƥ֥åޡ뤳Ȥ Ǥ롣ޤоݤˤʤ쥹Ȥϡ@kbd{d} ǥ֤Υ쥹뤳ȤǤ롣ְäƽƤޤä ϡ@kbd{C-u d} ǥ쥹褹롣 ɽХåե mode-line navi2ch-article-mode-line-format ˤ ꤵ롣̤ʸϤΤޤ޽Ϥ졢'%' ³ʸϰʲΤ褦 ִ롣 @table @samp @item %a å̾ @item %b ̾ @item %n ºݤΥ쥹 @item %N 쥹 @item %% % @end table @menu * Article View Range:: ɽϰ * Article Message Filter:: 쥹Υե륿 @end menu @node Article View Range @subsection ɽϰ @cindex ɽϰ @vindex navi2ch-article-auto-range @vindex navi2ch-article-new-message-range @vindex navi2ch-article-exist-message-range Navi2ch ǤϡΤ٤ƤΥ쥹٤˽Τ٤⤤ᡢ ɽ륹Υ쥹Τߤˤ뤳ȤǤ롣 ǥեȤǤϡΥƳƬ 100 쥹ȺǸΥ ƬΥ쥹ȺǸ 100 쥹ɽ롣 ưѤ @code{navi2ch-article-auto-range} @code{navi2ch-article-new-message-range} @code{navi2ch-article-exist-message-range} ѹ롣@xref{Customize}. ɽΥɽΰѤ @kbd{r} 򲡤 @node Article Message Filter @subsection 쥹Υե륿 @cindex 쥹Υե륿 @cindex ܡ @cindex ե륿ͭ/̵ڤؤ @cindex ִͭ/̵ڤؤ @vindex navi2ch-article-message-replace-below @vindex navi2ch-article-message-hide-below @vindex navi2ch-article-message-add-important-above Navi2ch ˤϡ̾ʸθʤɡ쥹˴ޤޤʸ Ȥƥե륿뵡ǽѰդƤ롣 @kbd{!} 򲡤ȡ @enumerate @item ̾ (name)᡼ (mail)ID (id)ۥ̾/IP (hostname)ʸ (body)Υȥ (subject) Τɤιܤǥե륿뤫 @item 쥹򸡺ˡ򡢳ĥˤäƤ路ꤹ (Use extended matching) ĥǻꤹ硢ʬ (substring)ޤ(fuzzy) (exact)ɽ (regexp) ΤɤˡȤ κݡʸȾʸΰ㤤̵뤹 (Ignore case) ʸפοžȽꤹ (Invert match) ¾Υץ(Ƚ̾夲(float)ȡե륿ͭϰ(scope)) ꤹ뤫 Ƚ̾夲ꤹϡ褷ƾ夲ʤ(never)˾夲 (always)ǥեư(default) ե륿ͭϰϤꤹϡΤ(board-local)Τ (article-local)ǥեư(default) @item ɤʸե륿оݤˤ뤫 @item 郎פ쥹Ф֤ (replace) (hide)֥åޡ (important)ä (score) Τɤν򤪤ʤ ֤ϡɤ֤뤫 äϡä뤫 @item ꤷե륿Υ˺ȿǤ뤫 @end enumerate ֤˼䤵졢ƤȡбѿͤưŪ˹ 롣 ʣιܡ㤨ХΥȥȥ쥹ʸξȤƥե륿 ϡޤ쥿ʸˤäƥ쥹դĤ˹ ˤäƥ쥹ޤե륿褦ˡ @code{navi2ch-article-message-replace-below} @code{navi2ch-article-message-hide-below} @code{navi2ch-article-message-add-important-above} ꤹȤ褤 @xref{Customize}. @kbd{F} 򲡤ȡե륿̵ͭڤؤ뤳Ȥ Ǥ롣ޤǥեȤǤϥե륿η̤ϥå夵졢ٸ 줿쥹Ϻٸʤ褦ˤʤäƤ뤬ե륿ξ ѹȤʤɤ餿ƥ쥹򸡺ˤϡ@kbd{C-u F} 򲡤 ȥå夬롣 ֤Υ쥹ե륿ˤ֤Ƥ硢@kbd{x} ȤΥ쥹̵֤ͭڤؤ뤳ȤǤ롣 @node Message Mode @section Message ⡼ @cindex Message ⡼ @cindex 쥹 @cindex 쥹 @cindex AA 쥹񤯺ݤϲ̤岼2ĤΥڥʬ졢ˤϤޤǸƤ 줬ˤ Message ⡼ ɽ롣 @example @group From: Mail: ---------------- @point{} @end group @end example @code{From:} θ˥ϥɥ@code{Mail:} θɬפʤ @code{sage} Ϥ@code{----------------} μιԤ쥹񤯡 @kbd{C-c C-y} ϤȡƤ쥹ʲΤ褦˰Ѥ뤳Ȥ 롣@kbd{C-u C-c C-y} ϤȡƤ쥹ֹѤ롣 ޤλ region ꤷƤС region ˴ޤޤ쥹Ф ưѤǤ롣 @example @group >>5 > äSRmonitorꤷȤޤ > Ϥ䤯ϿȤǤ͡ @end group @end example @kbd{C-c C-a ѻ} ǥȤ (@ref{Message Mode AA List}) ꤷơפ¸ʬʸ񤤤顢@kbd{C-c C-c} ǽ񤭹 ߤλ롣 񤭹ߤ򥭥󥻥뤹ˤϡ@kbd{C-c C-k} Ϥ롣 񤭹¾Υ򸫤ʤɤ̤ (Navi2ch ) Хåե˰ưȤϡ@kbd{C-c C-o} ǸΡ־ΥХåե񤭹ॹ졢ΥХåեǥ쥹񤯡פξ֤᤻롣 `navi2ch-message-samba24-show' t ʤС samba24 ޤǤ Ȳä뤫 mode-line ɽƤ롣 @menu * Saving Send Log:: Ȥ @end menu @node Saving Send Log @subsection Ȥ @cindex @vindex navi2ch-message-save-sendlog ʬν񤤤쥹¸ƤȤǤ롣 ǥեȤǤϹȤʤ Ȥˤϡޥ󥿡ե (@ref{Emacs Customization Interface}) Ѥ @code{navi2ch-message-save-sendlog} non-nil ˤ뤫 ե (@ref{Init File}) ˰ʲΤ褦˽񤤤Ƥ @lisp (setq navi2ch-message-save-sendlog t) (add-to-list 'navi2ch-list-navi2ch-category-alist navi2ch-message-sendlog-board) @end lisp Τ褦ˤȡNavi2chץƥˡĤɲä롣 @xref{List Mode}. @subsection Υ쥹ɽ @vindex navi2ch-message-sendlog-message-format-function Υ쥹ɽϥǥեȤǤϰʲΤ褦ˤʤäƤ롣 @example @group Subject: Navi2ch for Emacs (Part 14) URL: http://pc5.2ch.net/test/read.cgi/unix/1106152504/ hide 줿ĤɽäѤƤߤޤ äɤ ____________________________________________________________ @end group @end example ̾ɽȻפʤʲΤ褦ꤹФ @lisp (setq navi2ch-message-sendlog-message-format-function 'navi2ch-message-sendlog-message-format-with-board-name) @end lisp ȡΥ쥹ʲΤ褦ˤʤ롣 @example @group [UNIX]: Navi2ch for Emacs (Part 14) URL: http://pc5.2ch.net/test/read.cgi/unix/1106152504/ hide 줿ĤɽäѤƤߤޤ äɤ ____________________________________________________________ @end group @end example @node Customize @chapter ޥ @cindex ޥ @menu * Emacs Customization Interface:: Emacs Υޥ󥿡ե Ѥ * Init File:: ե * Other Boards File:: ¾ΥƥĤɲä * Mona Font:: ʡեȤȤ @end menu @node Emacs Customization Interface @section Emacs Υޥ󥿡եѤ롣 @cindex Emacs Υޥ󥿡ե Navi2ch Υޥ򤷤ϡ@kbd{M-x customize-group @key{RET} navi2ch @key{RET}} Ϥ롣customization buffer λȤ ˤĤƤ Emacs Υޥ˥奢򻲾ȤƤ͡ @node Init File @section ե @cindex ե @cindex @file{~/.navi2ch/init.el} Navi2ch ϵư @file{~/.navi2ch/init.el} ɤ롣 Navi2ch εư˿ʽ򤷤䡢Emacs Υޥ󥿡 եʤ󤫻ȤäƤ뤫륡ȤͤϡΥեԽ롣 ¸ߤʤϼʬǺ뤳ȡ @node Other Boards File @section ¾ΥƥĤɲä @cindex @cindex @file{~/.navi2ch/etc.txt} ͤĤɲä줿 List ⡼ɤĤɽʤ䡢 ͤȸߴΤ BBS Navi2ch ɤߤϡ @file{~/.navi2ch/etc.txt} Ȥե Navi2ch ɤ ȤǤ롣 񼰤ϰʲΤȤꡣ @example @group Ĥ̾ Ĥ URL Ĥ ID : (ʲ3ԤƱͤ³) @end group @end example ȤХ˥塼®Ĥɲäˤϡ@file{~/.navi2ch/etc.txt} ˰ Τ褦˽񤯡 @example @group ˥塼® http://news.2ch.net/newsplus/ newsplus @end group @end example Ĥ̾פˤ List ⡼ɤɽ̾򡢡Ĥ URLפˤϤ ֥饦ɽݤ URL Ƭ @code{http://@var{ۥ}/@var{ǥ쥯ȥ}/} ʬĤ ID ˤ Ĥդ˼̤Ǥñ ( @var{ǥ쥯ȥ} Ǥä) Ѥ롣 @node Mona Font @section ʡեȤȤ @cindex ʡե GNU Emacs 21ʹ XEmacs Ǥϥ쥹ɽݡȥե ꡼() ʥʡեȤȤեȤȤȤǤ롣 @menu * What is Mona Font:: ʡեȤäƲ? * How to Use Mona Font:: ǡɤäƻȤ? @end menu @node What is Mona Font @subsection ʡեȤäƲ? ʡեȤϣͤΥȤ򸫤뤿˺줿ե꡼ ΥեȤǤ ܤ @uref{http://monafont.sourceforge.net/} 򻲾ȤΤȡ :IPAʡեȤȤ̤ΤΤǤ @node How to Use Mona Font @subsection ǡɤäƻȤ? @cindex Υ/ĤǥʡեȤȤ @cindex Υ/ĤǤϥʡեȤȤʤ @vindex navi2ch-mona-enable @vindex navi2ch-mona-face-variable @vindex navi2ch-mona-enable-board-list @vindex navi2ch-mona-disable-board-list @vindex navi2ch-mona-enable-article-list @vindex navi2ch-mona-disable-article-list GNU Emacs 21 XEmacs ǥʡեȤȤ @file{~/.navi2ch/init.el} ˰ʲΤ褦˽񤤤Ƥ@xref{Init File}. @lisp (setq navi2ch-mona-enable t) @end lisp Ǥ٤ƤĤǥʡեȤȤ롣 ⤷Ǥɽʤ @lisp (setq navi2ch-mona-face-variable 'navi2ch-mona16-face) @end lisp ɵɽ뤫⤷ʤ @footnote{ʤߤˡ@code{navi2ch-mona16-face} 16 ʬ 12, 14 ꤹǤ롣} ĤǤΤߥʡեȤȤȤϡ嵭˲ä ʲΤ褦 @code{navi2ch-mona-enable-board-list} Ĥ ID ΥꥹȤƤ @footnote{ĤޤꡢΥСȤϰۤʤꡢnavi2ch-mona-enable non-nil ǤäƤ⡢ꤷĤǤʡեȤȤʤȤ ȤʤΤա} @lisp (setq navi2ch-mona-enable-board-list '("mona" "aastory" "kao")) @end lisp ξ⡢ĤǥʡեȤȤʤȤϡ ʲΤ褦 @code{navi2ch-mona-disable-board-list} Ĥ ID ΥꥹȤƤСĤǤϥʡեȤϻȤʤ @lisp (setq navi2ch-mona-disable-board-list '("unix" "linux" "network")) @end lisp ˡΥǥʡեȤȤȤ ʲΤ褦 @code{navi2ch-mona-enable-article-list} Ĥ ID ȥ ID alist Ƥ @lisp ;; http://pc.2ch.net/test/read.cgi/unix/1037275862/ ;; http://pc.2ch.net/test/read.cgi/linux/1037806127/ (setq navi2ch-mona-enable-article-list '(("unix" . "1037275862") ("linux" . "1037806127"))) @end lisp ޤΥǥʡեȤȤʤȤ ʲΤ褦 @code{navi2ch-mona-disable-article-list} Ĥ ID ȥ ID alist Ƥ @lisp ;; http://aa.2ch.net/test/read.cgi/mona/1047715077/ ;; http://aa.2ch.net/test/read.cgi/aastory/1032888547/ (setq navi2ch-mona-disable-article-list '(("mona" . "1047715077") ("aastory" . "1032888547"))) @end lisp Υ줴ȤĤȤͥ褵롣 ʤNavi2ch 1.5.1 ΥСǥʡեȤѤ Τ褦˽ɬפ롣 @lisp (when (eq window-system 'x) (require 'navi2ch-mona) (add-hook 'navi2ch-article-arrange-message-hook 'navi2ch-mona-arrange-message) (setq navi2ch-mona-enable t)) @end lisp ǰʤ顢GNU Emacs 20 ǤϲեȤѤ뤳ȤǤʤ ǥʡեȤϻѤǤʤ @node Key Bindings @appendix Х @menu * Global Key Bindings:: ٤ƤΥ⡼ɤǶ̤ΥХ * List Mode Key Bindings:: List ⡼ɤǤΥХ * Board Misc Mode Key Bindings:: Board ϥ⡼ɶ̤ΥХ * Board Mode Key Bindings:: Board ⡼ɤǤΥХ * Bookmark Mode Key Bindings:: Bookmark ⡼ɤǤΥХ * Article Mode Key Bindings:: Article ⡼ɤǤΥХ * Message Mode Key Bindings:: Message ⡼ɤǤΥХ * Message Mode AA List:: Message ⡼ɤǤΥȰ @end menu @node Global Key Bindings @appendixsec ٤ƤΥ⡼ɤǶ̤ΥХ ʲΥХɤϤ٤ƤΥ⡼ɤǻѤǤ롣⡼ɤǾ ƤϤ˽ @table @kbd @item C-c C-f @code{navi2ch-find-file} Υեޤϥե뤬¸ Ƥǥ쥯ȥ @item C-c C-t @code{navi2ch-toggle-offline} ե饤󡦥饤ڤؤ @item C-c C-u @code{navi2ch-goto-url} ꤷ URL ġɽ @item C-c C-v @code{navi2ch-version} Navi2ch ΥСߥ˥Хåեɽ @item C-c C-o @code{navi2ch-message-jump-to-message-buffer} 쥹񤤤Ƥʤ顢 쥹񤯥ХåեȽ񤭹ॹ/ĤΥХåեڤؤ @item C-c C-l @code{navi2ch-be2ch-toggle-login} Be@@2chؤΥ֤ڤؤ @item C-c C-s @code{navi2ch-search-web} Web Ȥäåɤθ @end table Message ⡼ɰʳǤϰʲΥХɤȤ롣⡼ɤǾ ƤϤ˽ @table @kbd @item 1 @code{navi2ch-one-pane} 1ڥɽڤؤ @item 2 @code{navi2ch-two-pane} 2ڥɽڤؤ @item 3 @code{navi2ch-three-pane} 3ڥɽڤؤ @item < @code{beginning-of-buffer} Хåեκǽ˰ư @item > @code{navi2ch-end-of-buffer} ХåեκǸ˰ư @item B @code{navi2ch-bookmark-goto-bookmark} Bookmark ⡼ɤɽ @item g @code{navi2ch-goto-board} ꤷĤɽ @item G @code{navi2ch-goto-board} ꤷĤɽ @item n @code{next-line} ιԤ˰ư @item p @code{previous-line} ιԤ˰ư @item t @code{navi2ch-toggle-offline} ե饤󡦥饤ڤؤ @item V @code{navi2ch-version} Navi2ch ΥСߥ˥Хåեɽ @end table @node List Mode Key Bindings @appendixsec List ⡼ɤǤΥХ @table @kbd @item @key{RET} @code{navi2ch-list-select-current-board} Ĥɽ @item q @code{navi2ch-exit} Navi2ch λ @item z @code{navi2ch-suspend} Navi2ch @item s @code{navi2ch-list-sync} ĥꥹȤɤ߹ @item @key{SPC} @code{navi2ch-list-select-current-board} Ĥɽ @item @key{DEL} @code{scroll-down} ˥ @item @key{BS} @code{scroll-down} ˥ @item a @code{navi2ch-list-add-bookmark} Ĥ֥åޡϿ @item b @code{navi2ch-list-toggle-bookmark} ֥åޡĥꥹȤɽڤؤ @item [mouse-2] @code{navi2ch-list-mouse-select} Ĥɽ @item / @code{navi2ch-list-toggle-open} ĥꥹȤγ @item [ @code{navi2ch-list-open-all-category} ٤ƤĥꥹȤ򳫤 @item ] @code{navi2ch-list-close-all-category} ٤ƤĥꥹȤĤ @item D @code{navi2ch-list-delete-global-bookmark} Х֥åޡ @item C @code{navi2ch-list-change-global-bookmark} Х֥åޡԽ @item ? @code{navi2ch-list-search} @item e @code{navi2ch-list-expire} Ťåե @end table @node Board Misc Mode Key Bindings @appendixsec Board ϥ⡼ɶ̤ΥХ @table @kbd @item @kbd{RET} @code{navi2ch-bm-select-article} ɽ @item [mouse-2] @code{navi2ch-bm-select-article} ɽ @item @kbd{SPC} @code{navi2ch-bm-select-article-or-scroll-up} ɽ (Ǥɽ Ƥ륹ʤХ̤˥) @item . @code{navi2ch-bm-display-article} ɽ (ϥ˰ư ) @item i @code{navi2ch-bm-fetch-article} 򹹿 @item e @code{navi2ch-bm-textize-article} ƥȤ¸ @item @key{DEL} @code{navi2ch-bm-select-article-or-scroll-down} ɽ (Ǥɽ Ƥ륹ʤХ̤򲼤˥) @item @key{BS} @code{navi2ch-bm-select-article-or-scroll-down} ɽ (Ǥɽ Ƥ륹ʤХ̤򲼤˥) @item n @code{navi2ch-bm-next-line} ιԤ˰ư @item p @code{navi2ch-bm-previous-line} ιԤ˰ư @item U @code{navi2ch-board-show-url} Ĥޤϥ URL 򥳥ԡޤĤ ֥饦ɽ @item l @code{navi2ch-bm-view-logo} ĤΥɽ @item A @code{navi2ch-board-add-global-bookmark} Х֥åޡϿ @item q @code{navi2ch-bm-exit} ĤĤ @item S @code{navi2ch-bm-sort} 򥽡 @item ? @code{navi2ch-bm-search} @item C-c C-m @code{navi2ch-message-pop-message-buffer} 񤭹ߤΤȤ񤭹߲̤ @item R @item C-c C-r @code{navi2ch-bm-remove-article} ξ ( .dat եɾʤ) ä @item C-o @code{navi2ch-bm-save-dat-file} .dat ե¸ @item I @code{navi2ch-bm-fetch-maybe-new-articles} ƤǽΤ륹򤹤٤ƹ @item * @code{navi2ch-bm-mark} ˥ޡĤ @item u @code{navi2ch-bm-unmark} Υޡ @item m r @code{navi2ch-bm-mark-region} ΰΥ˥ޡĤ @item m a @code{navi2ch-bm-mark-all} ٤ƤΥ˥ޡĤ @item m A @code{navi2ch-bm-add-global-bookmark-mark-article} ޡ Х֥åޡϿ @item m . @code{navi2ch-bm-display-mark-article} ޡɽ @item m i @code{navi2ch-bm-fetch-mark-article} ޡ򹹿 @item m e @code{navi2ch-bm-textize-mark-article} ޡƥȤ¸ @item m m @code{navi2ch-bm-mark-marks} (VCU) ˤʤäƤ륹ޡ @item m ? @code{navi2ch-bm-mark-by-query} ɽ˥ޥå륹䤤碌 ĥޡ (ȤưȻפ) @item m b @code{navi2ch-bm-add-bookmark-mark-article} ޡ֥ ޡϿ @item m R @code{navi2ch-bm-remove-mark-article} ޡξ ( .dat եɾʤ) ä @end table @node Board Mode Key Bindings @appendixsec Board ⡼ɤǤΥХ Board ϥ⡼ɶ̤ΥХɤ⻲ȡ@xref{Board Misc Mode Key Bindings}. @table @kbd @item s @code{navi2ch-board-sync} Ĥɤ߹ @item r @code{navi2ch-board-select-view-range} ɽѹ @item a @code{navi2ch-board-add-bookmark} ĤΥ֥åޡ˥Ͽ @item d @code{navi2ch-board-hide-article} 򱣤 @item h @code{navi2ch-board-toggle-hide} ɽ @item + @code{navi2ch-board-toggle-updated} 줿Τɽ @item b @code{navi2ch-board-toggle-bookmark} ֥åޡɽ @item w @code{navi2ch-board-write-message} ΩƤ @item @key{ESC} e @code{navi2ch-board-expire} Ťåե @item m d @code{navi2ch-board-hide-mark-article} ޡ򱣤 @end table @node Bookmark Mode Key Bindings @appendixsec Bookmark ⡼ɤǤΥХ Board ϥ⡼ɶ̤ΥХɤ⻲ȡ@xref{Board Misc Mode Key Bindings}. @table @kbd @item D @code{navi2ch-bookmark-delete} ֥åޡ @item d @code{navi2ch-bookmark-cut} ֥åޡ򥫥åȤ󥰤ɲ @item C-k @code{navi2ch-bookmark-cut} ֥åޡ򥫥åȤ󥰤ɲ @item C-y @code{navi2ch-bookmark-yank} 󥰤֥åޡĥդ @item o @code{navi2ch-bookmark-move} ̤Υ֥åޡ˰ư @item O @code{navi2ch-bookmark-copy} ̤Υ֥åޡ˥ԡ @item m d @code{navi2ch-bookmark-cut-mark-article} ޡ򥫥åȤ󥰤ɲ @item m o @code{navi2ch-bookmark-move-mark-article} ޡ̤Υ֥åޡ˰ư @item s @code{navi2ch-bookmark-sync} ֥åޡХåեǿξ˹ @item X @code{navi2ch-bookmark-remember-order} ֥åޡθߤΥ¤ӽ򵭲 @item S @code{navi2ch-bookmark-sort} 򥽡 @end table @node Article Mode Key Bindings @appendixsec Article ⡼ɤǤΥХ @table @kbd @item q @code{navi2ch-article-exit} Ĥ @item Q @code{navi2ch-article-goto-current-board} ΥΤĤɽ @item s @code{navi2ch-article-sync} ɤ߹ @item S @code{navi2ch-article-sync-disable-diff} ʬʤɤ߹ @item r @code{navi2ch-article-redraw-range} 쥹ɽѹ @item j @code{navi2ch-article-few-scroll-up} Ծإ @item k @code{navi2ch-article-few-scroll-down} Բإ @item @key{SPC} @code{navi2ch-article-scroll-up} ̾إ @item @key{DEL} @code{navi2ch-article-scroll-down} ̲إ @item @key{BS} @code{navi2ch-article-scroll-down} ̲إ @item w @code{navi2ch-article-write-message} 쥹񤭹 @item W @code{navi2ch-article-write-sage-message} 쥹 sage ǽ񤭹 @item @key{RET} @code{navi2ch-article-select-current-link} 󥯤ɽ @item [mouse-2] @code{navi2ch-article-mouse-select} 󥯤ޥ @item g @code{navi2ch-article-goto-number-or-board} ꤷ쥹Ĥ˥ @item l @code{navi2ch-article-pop-point} 줿֤˥ @item L @code{navi2ch-article-pop-poped-point} ֤˵ @item m @code{navi2ch-article-push-point} ߤΥ֤򵭲 @item U @code{navi2ch-article-show-url} 졦Υ쥹Ĥ URL 򥳥ԡ 뤤ϥ֥饦ɽ @item . @code{navi2ch-article-redisplay-current-message} Τ쥹 Хåեΰ־˰ư @item p @code{navi2ch-article-previous-message} ҤȤΥ쥹˰ư @item n @code{navi2ch-article-next-message} Υ쥹˰ư @item P @code{navi2ch-article-through-previous} ҤȤľΥ˰ư @item N @code{navi2ch-article-through-next} ҤȤIJΥ˰ư @item @key{SHIFT} @key{TAB} @code{navi2ch-article-previous-link} ҤȤΥ󥯤˰ư @item @key{ESC} @key{TAB} @code{navi2ch-article-previous-link} ҤȤΥ󥯤˰ư @item @key{TAB} @code{navi2ch-article-next-link} Υ󥯤˰ư @item > @code{navi2ch-article-goto-last-message} ǸΥ쥹˰ư @item < @code{navi2ch-article-goto-first-message} ǽΥ쥹˰ư @item @key{ESC} d @code{navi2ch-article-decode-message} ǥɤ롣 @item @key{ESC} i @code{navi2ch-article-auto-decode-toggle-text} ưǥɤƤɽ ڤ괹롣 @item v @code{navi2ch-article-view-aa} Ȥɽ ( aadisplay) @item f @code{navi2ch-article-forward-buffer} ΥХåե˰ư @item b @code{navi2ch-article-backward-buffer} ΥХåե˰ư @item d @code{navi2ch-article-hide-message} Τ쥹򱣤(@kbd{h} Τ) 쥹᤹(@kbd{$} Τ) 쥹֥åޡ @item a @code{navi2ch-article-add-important-message} Τ쥹֥ ޡϿ @item h @code{navi2ch-article-toggle-hide} 쥹ɽȥɽڤ ؤ @item $ @code{navi2ch-article-toggle-important} Υ֥åޡɽ @item A @code{navi2ch-article-add-global-bookmark} 򥰥Х֥åޡϿ @item C-c C-m @code{navi2ch-message-pop-message-buffer} 񤭹ߤΤȤ񤭹߲̤ @item i @code{navi2ch-article-fetch-link} Υ򹹿 @item G @code{navi2ch-article-goto-board} ꤷĤ˰ư @item e @code{navi2ch-article-textize-article} ƥȤ¸ @item ? @code{navi2ch-article-search} 쥹򸡺 @item C-o @code{navi2ch-article-save-dat-file} .dat ե¸ @item F @code{navi2ch-article-toggle-message-filter} 쥹Фե륿 ̵ͭڤؤ @item x @code{navi2ch-article-toggle-message-filter} Τ쥹Ф 쥹̵ִͭڤؤ @item ! @code{navi2ch-article-add-message-filter-rule} 쥹Ф ե륿ξŪɲä @item C-c C-r @code{navi2ch-article-remove-article} ξ ( .dat եɾʤ) ä @item u @code{navi2ch-article-show-url-at-point} β URL ɽ 󥰤˥ԡ롣 @end table @node Message Mode Key Bindings @appendixsec Message ⡼ɤǤΥХ @table @kbd @item C-c C-c @code{navi2ch-message-send-message} 񤭹ߤ @item C-c C-k @code{navi2ch-message-exit} 񤭹ߤ򥭥󥻥 @item C-c C-y @code{navi2ch-message-cite-original} Τ쥹 @item C-c y @code{navi2ch-message-cite-original-from-number} ֹǻꤷ쥹 @item C-c C-i @code{navi2ch-message-insert-backup} 񤤤쥹 @item C-c C-b @code{navi2ch-base64-insert-file} ե base64 󥳡ɤ @item @key{ESC} t @code{navi2ch-toggle-offline} ե饤󡦥饤ڤؤ @item C-c C-a ? @code{navi2ch-message-insert-aa} ȤΥꥹȤɽ @end table @node Message Mode AA List @appendixsec Message ⡼ɤǤΥȰ Message ⡼ɤǡ@kbd{C-c C-a} ³ƲΥ򲡤Ȥǣ ͤͭΥȤϤ뤳ȤǤ롣@kbd{C-c C-a ?} 򲡤 ȡȤΥꥹȤɽ뤳ȤǤ롣 (ۥȤȾѥ (äƲǤ?) ȤƤɡԹ礬 ΤǤǤѤ͡) @table @kbd @comment START-OF-AA-LIST @item a @samp{()} @item b @samp{(`)} @item B @samp{((())֥֥} @item f @samp{( _`)ա} @item e @samp{(`)} @item F @samp{()} @item g @samp{()륡} @item G @samp{(;)!} @item h @samp{()ϥ?} @item H @samp{(;)ϥϥ} @item i @samp{(ϡ)!!} @item I @samp{()ʥ!!} @item j @samp{(ϡ)ǥ} @item k @samp{(ϡ) !!!!!} @item K @samp{(ϡ)( )( )()( )(ϡ )(ϡ)!!!!} @item m @samp{(ϡ)} @item M @samp{()} @item n @samp{()˥} @item N @samp{(-`).(ʤǤ)} @item p @samp{ʡա˥ݥ} @item s @samp{ʡաlll˥} @item S @samp{(ء`)ܡ} @item t @samp{y=( ա).} @item u @samp{(ա)ޡ} @item U @samp{(--)ĥ} @comment END-OF-AA-LIST @end table @node FAQ @appendix 褯Ȥ @menu * General Qestions:: * How to Read:: ɤ * Can not Read:: ɤʤ * Board Questions:: ĴϢ * How to Write:: 񤭹 * Misc Questions:: ¾ @end menu @node General Qestions @appendixsec @table @asis @item Q. Navi2ch äƲ @item A. ͤѥ֥饦ǤEmacsXEmacsMeadow ʤɤ Emacsen ưޤ @item Q. Emacs εưƱ Navi2ch ưɡ @item A. @code{emacs -e navi2ch} 뤤 @code{emacs -f navi2ch} Ǥɤ @item Q. ե饤ǵưɡ @item A. @kbd{C-u M-x navi2ch @key{RET}} Ǥɤ @item Q. @code{Cannot open load file} ФƵưǤʤɡ @item A. ɥѥꤵƤʤ⡣@file{~/.emacs} ǧƤ͡ @item Q. 򢤢ˤɡ @item A. Ȥꤢ @file{navi2ch-vars.el} äƤե򸫤ƤߤƤ͡ 줫 @kbd{M-x customize-group @key{RET} navi2ch @key{RET}} 뤫@xref{Customize}. @item Q. 褦Ȥۤˤäƥ顼Фɡ @item A. ޤ Emacs λΩ夲ľƤ Navi2ch ưƤ Ƥ硣Ǥ⥨顼Ф褦ʤ顢 @kbd{M-x set-variable @key{RET} debug-on-error @key{RET} t @key{RET}} ơ顼 @code{*Backtrace*} ХåեƤ򣲤 Navi2ch 𤷤Ƥ͡κݡȤäƤ Emacs μС Navi2ch ΥС (CVS ǤȤäƤ ChangeLog ΰֺǸ ӥ) ⶵƤбᤤ⡣ @item Q. ֥ǥ쥯ȥΥå˼ԤޤפäƸɤ첿? @item A. Navi2ch Ʊʣưȡ@file{~/.navi2ch/} ʤ ʤä㤦ΤǡåեƤޤåեκ Ԥȡ¾ Navi2ch ưƤǽΤǤΥå ɽޤ Navi2ch εư Emacs λꤹȥåե뤬 ĤäƤޤηٹɽ礬ޤκݤ Navi2ch ʣư褦ȤƤʤȤǧ塢֤⤦ٻޤ?פ 䤤 @code{n} (䤤ϥСˤäƤϺƤޤ) ִΤ³ޤ?פ䤤 @code{yes} Ƥ @item Q. @code{connection failed: operation already in progress, navi2ch.sourcefoge.net, navi2ch connection} äƽФƵưǤʤɡġ @item A. ȤꤢȤС @lisp (setq navi2ch-open-network-stream-function #'navi2ch-open-network-stream-with-retry) @end lisp @end table @node How to Read @appendixsec ɤ @table @asis @item Q. @code{>>1} ߤʥ󥯤ǤäȤ˸Υ쥹ꤿɡ @item A. @kbd{l} ޤ @item Q. 򳫤ȰΥ쥹ɽʤ衣ɤߤɡ @item A. @kbd{r 0} Ǥɤ衣ܤ @ref{Article View Range} 򸫤Ƥ͡ @item Q. 򳫤Ȥ˥ǥեȤɽɡ @item A. ѿ @code{navi2ch-article-auto-range} ͤ @code{nil} ꤷޤ @xref{Customize}. @item Q. ʣΥ󤷤ɡ @item A. @kbd{*} Ȥ @kbd{m a} Ȥ @kbd{m r} ǥ˥ޡĤơ@kbd{m i} Ǥä@xref{Mark}. @item Q. URL ꤷƥ򳫤ɡ @item A. @kbd{C-c C-u} Ǥɤ @item Q. article 򳫤Ȥ˰̤dzߤɡ @item A. ʲ򤷤Ʋ @lisp (setq navi2ch-bm-stay-board-window nil) @end lisp @item Q. Navi2ch 򤺤äȻȤäƤ Emacs Υ̤ȤǤʤȤˤ ɡ @item A. ֤󥹥ΥХåեɤɤƤΤ @kbd{M-x navi2ch-article-expunge-buffers @key{RET}} Ȥȡ ΥХåեοѿ @code{navi2ch-article-max-buffers} ͤۤƤȤ˥Хåե롣 ޤѿ @code{navi2ch-article-auto-expunge} @code{nil} ʳ (@code{t} Ȥ) ꤹ 򳫤Ȥ˼ưŪ˥Хåեκ嵭ͤ¤롣@xref{Customize}. @end table @node Can not Read @appendixsec ɤʤ @table @asis @item Q. Фߤ @code{now connect...} Τޤ޻ߤޤäƤɡ ɤˤʤʤ? @item A. @kbd{C-g} ߤǤޤ @item Q. ɤ߹Ǥ @code{file is not updated} ȽФɽʤ ɡ̤Υ֥饦ȸ롣ɡƤ @item A. @kbd{C-u S} Ƕɤ߹ߤƤߤƤ͡ @item Q. 쳫 C-g ƥ˥å⥵å⤤ʤʤäɤ? @item A. @kbd{C-u s} ǶŪ˹롣 @item Q. Ĥ @code{checking file...moved} ȽФơʤ @item A. ʲ3ĤΤɤ줫Ǥɤ? @lisp (setq navi2ch-board-enable-readcgi nil navi2ch-board-use-subback-html nil) @end lisp @lisp (setq navi2ch-board-enable-readcgi nil navi2ch-board-use-subback-html t) @end lisp @lisp (setq navi2ch-board-enable-readcgi t) @end lisp 줫İžäΤ⡣@xref{Board Questions}. @item Q. Ĥǥɤ @code{checking file...moved} ȽФơ줬ʤ @item A. ʲ2ĤΤɤäǤɤ? @lisp (setq navi2ch-enable-readcgi nil) @end lisp @lisp (setq navi2ch-enable-readcgi t) @end lisp 줫İžäΤ⡣@xref{Board Questions}. @end table @node Board Questions @appendixsec ĴϢ @table @asis @item Q. Ʊ 2ch פ¾ηǼĤ Navi2ch ɤߤɡ @item A. @file{~/.navi2ch/etc.txt} ȤեäơʲΤ褦˽񤭤ޤ @example @group ---------- ----------- Ĥ̾ http://hoge.2ch.net/fuga/ fuga ---------- ޤ ----------- @end group @end example ǤĤİΡ֤¾פɲäޤаžʤܲȤ ꥹ (@code{bbstable}) ޤǤοǤ@xref{Other Boards File}. @item Q. ȤĤʤʤäߤʤɡ @item A. ͤĤΰžäΤ⡣ ޤ Ѿ (@uref{http://qb5.2ch.net/operate/}) ֿġİưץ (@uref{http://azlucky.s31.xrea.com/katjusha/}) žå褦 žä顢List ⡼ɤ @kbd{s} Ƥߤ褦 žĥꥹ (@code{bbstable}) ȿǤƤФɤϤ ȿǤƤʤä顢ȿǤޤǤδ֤ @kbd{C-c C-u} ǿĤ URL ϤɤǤ͡ URL ΤɤʤȤϡ Navi2ch 1.7.3 ʹߤʤ ѿ @code{navi2ch-list-moved-board-alist} ǿ URL ѴǤ衣 @lisp (setq navi2ch-list-moved-board-alist '(("http://pc.2ch.net/unix/" . "http://pc3.2ch.net/unix/") ("http://pc.2ch.net/linux/" . "http://pc3.2ch.net/linux/"))) @end lisp ʤɤȤơList ⡼ɤ @kbd{C-u s} ʬ URL ȴޥåʤΤǡ@file{~/.navi2ch/board.txt} ƤƱ褦˽񤤤Ƥ͡ Navi2ch 1.7.3 ŤСȤäƤ硢ˡϻȤʤΤ @file{~/.navi2ch/etc.txt} ȤƤФ졣 @item Q. 㤦ĥꥹ (@code{bbstable}) 򸫤褦ˤɡ @item A. ѿ @code{navi2ch-list-bbstable-url} ͤĥꥹȤ URL ꤷ @code{nil} ꤹܲȤΤΤѤޤ@xref{Customize}. ܲȤ¾֤ͭƥʥ󥹤ƤĥꥹȤ AzLucky ֣ͤե ܡɰ (@uref{http://azlucky.s25.xrea.com/}) Υڡˤ衣 @end table @node How to Write @appendixsec 񤭹 @table @asis @item Q. äĹʸΥ쥹񤤤Τˡ񤭹ߤ˼Ԥƽ񤤤쥹ΥХåե ää ä񤤤쥹ʤȤ᤻ʤ? @item A. @kbd{w} Message ⡼ɤä @kbd{C-c C-i} Ǥä @item Q. 쥹񤭹Ȥ̾ꤷ @item A. ѿ @code{navi2ch-message-user-name} ̾ʸꤹ롣 @xref{Customize}. ĤȤ˰㤦̾ȤȤϤʴǡ @lisp (setq navi2ch-message-user-name-alist '(("network" . "anonymous") ("tv" . "̵̾"))) @end lisp ĤΥǥեȤΡ̵̾פȤȤ϶ʸ @code{""} ꤹ롣 (Navi2ch 1.7 ʹߤǤϥǥեȤǶʸ) Ĥˤäƽ񤭹ʤä̾ fusianasan ˤʤäꤹΤա @item Q. ˥쥹񤤤Ȥ̾ФƤƤۤʤɡ @item A. ѿ @code{navi2ch-message-remember-user-name} ͤ @code{nil} ꤷޤ@xref{Customize}. @item Q. ΩƤɡ @item A. Board ⡼ɤ @kbd{w} ΩƤ뤱ɡĤˤäƤϤᤫ⡣ ΤȤϥ֥饦ΩƤƤޥ @item Q. ֣ţңңϣҡ⤦ä夤ƽ񤭤ߤƤפäܤ 㤦 @item A. פ碌ޤ礦 @end table @node Misc Questions @appendixsec ¾ @c ̤ʬࡢ͏٤áʤ @table @asis @item Q. ȤäƤ @file{~/.navi2ch/} ɤɤ礭ʤɡ @item A. List ⡼ɤ @kbd{e} Board ⡼ɤ @kbd{M-e} Ȱ֤Ť եǤ衣 @item Q. ܡ򤤤ʹǤ @item A. ѿ @code{navi2ch-net-save-old-file-when-aborn} ͤ @code{nil} ޤ@xref{Customize}. @item Q. ץ̤ɡ @item A. ѿ @code{navi2ch-net-http-proxy} ͤ @code{"127.0.0.1:8080"} Τ ˤޤ ǧڤɬפʥץȤˤϡ @code{navi2ch-net-http-proxy-userid} @code{navi2ch-net-http-proxy-password} ɲá Ķѿ @env{HTTP_PROXY} ꤹ뤳ȤǤץѤǤޤʸ ǤաѿˤϡURL Τ褦ʽ񼰤ꤷޤ㤨 ƱԤʤΤǤС@code{http://127.0.0.1:8080/} Ȥͤ ꤷޤ@xref{Customize}. @item Q. proxy Ȥäƽ񤭤ǤȡӤˤä˼Ԥ뤳Ȥ ߤ? @item A. ͤ¦εǡ80֥ݡȤ listen Ƥꤹ proxy Ȥߤʤ뤳ȤΤǡweb ФȤʤ ѥåȥե륿󥰤ǣͤ뤫³ΤߤȤʤ ư⡣ @item Q. Meadow + Cygwin ǤޤưʤȤɡ @item A. Ť gzip Ǥ꤬Τǡgzip 򹹿ľ뤫⡣ ⤷ @lisp (setq navi2ch-enable-readcgi nil) (setq navi2ch-net-accept-gzip nil) @end lisp Ȥ gzip ȤʤȤˡ⤢뤱ɡͤ˥ͥåȥŪ ٤ΤǿͤˤϤǤʤ @item Q. ѤäġפäƲ? @item A. Navi2ch ¹ԤƤѹäĤΤȤǤɲä줿 ꡢФžˤʤäĤΥƥ˴ޤޤޤѤĤΤȤǤ ޤ @item Q. URL w3m.el dzɡ @item A. @lisp (setq browse-url-browser-function 'w3m-browse-url) @end lisp @item Q. board mode + 򤹤 hide åɤФƤɡ @item A. @lisp (setq navi2ch-board-hide-updated-article t) @end lisp нФƤʤʤ롣 @item Q. Хåե TAB ƥ󥯤֤ȤäŤɡ @item A. @lisp (setq navi2ch-article-get-url-text nil) @end lisp зڤʤ뤫⡣(Navi2ch 1.6 ʹ) @item Q. bookmark ⡼ɤ sort Ƥ⡢˥֥åޡ򳫤ȸ¤ӽ Ƥ롣 ʤȤʤ? @item A. sort @kbd{X} Ǹߤ¤ӽ򵭲롣 ɤʤ顢 @lisp (setq navi2ch-bookmark-remember-order-after-sort t) @end lisp Ƥ sort ¤ӽ򤤤ĤǤ⵭褦ˤʤ롣 @item Q. ĤΥ롼äƸʤ? @item A. @lisp (require 'navi2ch-head) @end lisp Ȥ @kbd{H} Ǥɤ衣 @item Q. sssp 򸫤Ƥߤ @item A. URL ΤȤ RET 򲡤Х֥饦Ƹޤ @lisp (add-hook 'navi2ch-article-mode-hook 'navi2ch-article-show-sssp-icon) @end lisp ȤƤȡɽ˲Ÿޤ衣 @item Q. Samba24 εϤĤ? @item A. @lisp (setq navi2ch-message-samba24-show t) @end lisp Ƥ mode-line ˻Ĥ֤ɽޤ衣 @item Q. Be Ȥ @item A. @kbd{C-c C-l} ȥ/ȤؤǤޤ @lisp (setq navi2ch-be2ch-mail-address "᡼륢ɥ쥹" navi2ch-be2ch-password "ѥ") @end lisp ȤƤȡ᡼륢ɥ쥹ȥѥɤμάǤޤ @item Q. ˥֥饦󥰤ߤ줿ɡ @item A. @lisp (setq navi2ch-enable-status-check nil) @end lisp Ф衣 @item Q. Х֥åޡ'I'äƻ֤뤷wait͡ @item A. @lisp (setq navi2ch-bookmark-fetch-mark-article-check-update t) @end lisp ƤȡƤʤϥޡ򳰤Ƥ衣 ޤ @lisp (setq navi2ch-net-enable-http11 t) @end lisp ƤȡƱФؤ³³Ƥ롣 @item Q. Emacs 23 ǡ֡פȤ ƤǤʤɡ @item A. @lisp (coding-system-put 'cp932 :encode-translation-table (get 'japanese-ucs-jis-to-cp932-map 'translation-table)) @end lisp ȤƤȤ⡣ @ignore @item Q. աNavi2ch äʤ͡ȤǣͤäƲ @item A. ʤˤ Navi2ch ɬפʤǤ @end ignore @end table @c @node Concept Index @c @unnumbered ǰ @c @printindex cp @node Thanks @appendix ռ @c Author Navi2ch Project ˤʤä餳Ϥʤ͡ @ignore Navi2ch äƤ줿 (not 1) 󡢤ɤ⤢꤬Ȥ @end ignore ǽ perl Ǥä hc2ivan ˴դǤ Navi2ch APELWanderlust ΰѤƤޤԤ˴ա @bye ʲδؿξ֤ M-x eval-defun RET M-x navi2ch-doc-update-aa-list RET ȡAA ꥹȤΥåץǡȤڤˤʤ衣 @lisp (defun navi2ch-doc-update-aa-list () (interactive) (makunbound 'navi2ch-message-aa-default-alist) (load (expand-file-name "../navi2ch-vars.el" default-directory)) (let (start end) (goto-char (point-min)) (re-search-forward "^@comment START-OF-AA-LIST") (forward-line) (setq start (point)) (re-search-forward "^@comment END-OF-AA-LIST") (setq end (match-beginning 0)) (delete-region start end) (goto-char start) (dolist (elt navi2ch-message-aa-default-alist) (let ((item (car elt)) (aa (cdr elt))) (insert (format "@item %s\n@samp{%s}\n\n" item aa)))) (japanese-zenkaku-region start (point) t))) @end lisp navi2ch/doc/releng.txt000066400000000000000000000051041173560164300152000ustar00rootroot00000000000000-*- mode: outline; coding: iso-2022-7bit -*- $Id$ $B%j%j!<%9%(%s%8%K%"%j%s%0$K$D$$$F(B * $B;H$C$F$$$kF;6q(B GNU Automake 1.9.6 GNU Autoconf 2.62 GNU Emacs 23.0.60 * $B:n6HMQ%G%#%l%/%H%j(B configure.in $B$NJQ99$rH<$&$N$G!":n6HMQ%G%#%l%/%H%j$G$O(B % ./configure --enable-maintainer-mode $B$H$7$F$*$/$3$H!#(B * $B%j%j!<%9F|;~$r@k8@$9$k(B $BE,Ev$K7h$a$k!#%j%j!<%9$N0lF|A0$/$i$$$+$i(B commit $B6X;_$K$9$k!#(B (TBD: freeze $B$7$J$$$G%j%j!<%9MQ$K%V%i%s%A$r@Z$k$N$b$$$$$+$b!#(B) $BA02s$N%j%j!<%9$+$i$N(B ChangeLog $B$r$J$,$a$D$D!"(BNEWS $B$r99?7$9$k!#(B * $B&BHG$N%j%j!<%9(B configure.in $B$N(B AM_INIT_AUTOMAKE $B$r(B x.y.z-BETA $B$KJQ$($F(B % aclocal && autoconf && automake && make Makefiles && make dist elcdist $B$9$k!#(Btar $B6L$r(B http://navi2ch.sf.net/beta/ $B$KCV$$$F(B 2ch $B$N%9%l$G0FFb!#(B (.elc $B$N(B tar $B6L$K$O:n@.$7$?%[%9%HL>!&%f!<%6L>$,Kd$a9~$^$l$k$N$GCm0U!#(B $B5$$K$J$k$J$i(B compile farm $B$G:n6H$9$k$H$h$$!#(B https://sourceforge.net/docman/display_doc.php?docid=762&group_id=1 shell server $B>e$G$N:n6H$O$J$k$Y$/Hr$1$k!#(B shell server $B>e$G(B tar $B6L$r:n$k$HCf$N%U%!%$%k$N(B UID $B$,(B 65536 $B$rD6$($F$7$^$$!"(B $B4D6-$K$h$C$F$OE83+;~$K7Y9p$,=P$F$7$^$&$?$a!#(B) * $B%j%j!<%9HG:n@.(B configure.in $B$N(B AM_INIT_AUTOMAKE $B$r(B x.y.z $B$KJQ$($F(B ChangeLog $B$r5-:\!"(B % aclocal && autoconf && automake && make Makefiles && make dist elcdist $B$9$k!#(B($B$3$l$G(B configure $B$d(B navi2ch-version.el $B$J$I$,99?7$5$l$k!#(B) $B$&$^$/$$$C$?$i(B % cvs commit -m 'bump version to x.y.z' % cvs tag navi2ch-x_y_z $B$G%j%j!<%985$N=`Hw$r$9$k!#(B commit $BK:$lEy$N3NG'$N$?$a!"JL%G%#%l%/%H%j$G(B cvs export $B$7$F(B % cd navi2ch-x.y.z && ./configure && make dist elcdist $B$G(B tar $B6L$r:n$k!#$^$?$^$?$h$=$N%G%#%l%/%H%j$KE83+$7$FG[I[J*$r3NG'!"(B $B$h$5$2$J$i(B SourceForge $B$N(B File Release $B$KCV$/!#(B ($BCV$-J}$O0J2<$N(B URL $B$+$i%X%k%W$r8+$J$,$i!#(B https://sourceforge.net/project/admin/editpackages.php?group_id=39552 ) * $B%j%j!<%9$N%"%J%&%s%9(B 2ch $B$N%9%l!"(Bhttp://navi2ch.sf.net/$B!"(B https://sourceforge.net/news/?group_id=39552 $B$"$?$j$G%"%J%&%s%9$r$9$k!#(B * $B%P!<%8%g%s$r3+H/HG$KJQ99(B configure.in $B$N(B AM_INIT_AUTOMAKE $B$r(B x.y.z-DEV $B$KJQ$($F(B ChangeLog $B$r5-:\!"(B % aclocal && autoconf && automake && make Makefiles && make $B$7$F(B ($B:G8e$N(B make $B$rK:$l$k$H(B BUILT_SOURCES $B$,99?7$5$l$J$$(B) % cvs commit -m 'bump version to x.y.z-DEV' $B$G(B commit $B$9$k!#(B navi2ch/doc/texinfo.tex000066400000000000000000007015631173560164300153750ustar00rootroot00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2005-07-05.19} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software % Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2, or (at % your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, % Boston, MA 02110-1301, USA. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \message{Basics,} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % In some macros, we cannot use the `\? notation---the left quote is % in some cases the escape char. \chardef\backChar = `\\ \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\plusChar = `\+ \chardef\questChar = `\? \chardef\semiChar = `\; \chardef\underChar = `\_ \chardef\spaceChar = `\ % \chardef\spacecat = 10 \def\spaceisspace{\catcode\spaceChar=\spacecat} {% for help with debugging. % example usage: \expandafter\show\activebackslash \catcode`\! = 0 \catcode`\\ = \active !global!def!activebackslash{\} } % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\next{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % We cannot use \next here, as it holds the macro to run; % thus we reuse \temp. \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \next. % (Similarily, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as enviroments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At runtime, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Evironment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include file insert text of that file as input. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable \def\temp{\input #1 }% \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode\underChar = \active \gdef\mathunderscore{% \catcode\underChar=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus } } % @bullet and @minus need the same treatment as @math, just above. \def\bullet{$\ptexbullet$} \def\minus{$-$} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil .\hfil.\hfil.% \hskip 0pt plus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, to % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html % (and related messages, the final outcome is that it is up to the TeX % user to double the backslashes and otherwise make the string valid, so % that's we do). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslash{@catcode`@\=@active @otherbackslash} @gdef@activebackslashdouble{% @catcode@backChar=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens. I've % tinkered with it a little for texinfo, but it's definitely from there. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\backslashlparen}{#1}% \HyPsdSubst{)}{\backslashrparen}{#1}% } {\catcode\exclamChar = 0 \catcode\backChar = \other !gdef!backslashlparen{\(}% !gdef!backslashrparen{\)}% } \ifpdf \input pdfcolor \pdfcatalog{/PageMode /UseOutlines}% \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% % without \immediate, pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi \ifnum\pdftexversion<13 #1.pdf% \else {#1.pdf}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \atdummies \activebackslashdouble \def\pdfdestname{#1}% \backslashparens\pdfdestname \pdfdest name{\pdfdestname} xyz% }}% % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1}% % \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \activebackslash \input \jobname.toc \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi \def\pdfurl#1{% \begingroup \normalturnoffactive\def\@{@}% \makevalueexpandable \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\linkcolor = \relax \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1} \setfont\deftt\ttshape{10}{\magstep1} \setfont\defttsl\ttslshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} \def\authortt{\sectt} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000} \setfont\reducedtt\ttshape{10}{1000} \setfont\reducedbf\bfshape{10}{1000} \setfont\reducedit\itshape{10}{1000} \setfont\reducedsl\slshape{10}{1000} \setfont\reducedsf\sfshape{10}{1000} \setfont\reducedsc\scshape{10}{1000} \setfont\reducedttsl\ttslshape{10}{1000} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % % I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \textfonts \rm % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000} \setfont\shortconttt\ttshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\slanted=\smartslanted \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % @b, explicit bold. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \catcode`\_=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg'}% \fi\fi } % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct.' \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines \let\tt=\authortt} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rm #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\authorfont \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. Note that \everycr resets \everytab. \def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1', which must be on a line % by itself. \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \obeylines % \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. \def\enddoignore{\endgroup\ignorespaces} % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \undefined % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname\donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control% words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\L \definedummyword\OE \definedummyword\O \definedummyword\aa \definedummyword\ae \definedummyword\l \definedummyword\oe \definedummyword\o \definedummyword\ss \definedummyword\exclamdown \definedummyword\questiondown \definedummyword\ordf \definedummyword\ordm % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\minus \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\result % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % % Better have this without active chars. { \catcode`\~=\other \gdef\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sc \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\minus{-}% \def\pounds{pounds}% \def\point{.}% \def\print{-|}% \def\result{=>}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \ifvmode \dosubindsanitize \else \dosubindwrite \fi }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % % ..., ready, GO: % \def\dosubindsanitize{% % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \skip0 = \lastskip \edef\lastskipmacro{\the\lastskip}% \count255 = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\skip0 glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\skip0 \fi % \dosubindwrite % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\count255>9999 \penalty\count255 \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\skip0 \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this frozes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#1}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. % However, they are not reliable, because we don't use marks. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % \message{\putwordChapter\space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % \def\appendixnum{\putwordAppendix\space \appendixletter}% \message{\appendixnum}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% \pchapsepmacro {% \chapfonts \rm % % Have to define \thissection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\thissection{#1}% \gdef\thischaptername{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \gdef\thischapter{#1}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \gdef\thischapter{}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. And we don't % use \thissection because that changes with each section. % \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert space above the heading. \csname #2headingbreak\endcsname % % Only insert the space after the number if we have a section number. \def\sectionlevel{#2}% \def\temptype{#3}% % \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\thissection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \thissection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\thissection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\thissection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chfplain. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chfplain. \donoderef{#3}% % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp } \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \jobname.toc } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \def\thischapter{}% \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \jobname.toc \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \envdef\quotation{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % [Knuth] pp. 380,381,391 % Disable Spanish ligatures ?` and !` of \tt font \begingroup \catcode`\`=\active\gdef`{\relax\lq} \endgroup % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \catcode`\`=\active \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \catcode`\`=\active \tabexpand % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \defargscommonending, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % \ifnum\lastpenalty=10002 \penalty2000 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty 10002 % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remainnig is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \let\var=\ttslanted #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } \def\badparencount{% \errmessage{Unbalanced parentheses in @def}% \global\parencount=0 } \def\badbrackcount{% \errmessage{Unbalanced square braces in @def}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\scanctxt{% \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other } \def\scanargctxt{% \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% \scanctxt \catcode`\\=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \next} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \thissection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\thissection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \writexrdef{pg}{\folio}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf \leavevmode \getfilename{#4}% {\turnoffactive % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \ifnum\filenamelength>0 \startlink attr{/Border [0 0 0]}% goto file{\the\filename.pdf} name{\pdfxrefdest}% \else \startlink attr{/Border [0 0 0]}% goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \linkcolor \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR#1\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarily, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\bigskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \line\bgroup\hss \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \hss \egroup \bigbreak \fi % space after the image \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \thissection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\thissection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \thissection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % and i18n. % @documentlanguage is usually given very early, just after % @setfilename. If done too late, it may not override everything % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file if it exists. \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \input txi-#1.tex \fi \closein 1 \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? In the current directory should work if nowhere else does.} % @documentencoding should change something in TeX eventually, most % likely, but for now just recognize it. \let\documentencoding = \comment % Page size parameters. % \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}% {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {\voffset}{.25in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{51\baselineskip}{160mm} {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1 \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. {\catcode`\\=\active @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} } % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\backslashcurfont}} \catcode`\\=\active % Used sometimes to turn off (effectively) the active characters % even after parsing them. @def@turnoffactive{% @let"=@normaldoublequote @let\=@realbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @unsepspaces } % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. (Thus, \ is not expandable when this is in % effect.) % @def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\{ in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore navi2ch/elisp-comp000077500000000000000000000053201173560164300144140ustar00rootroot00000000000000#!/bin/sh # Copyright (C) 1995, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. scriptversion=2008-05-31.01 # Franc,ois Pinard , 1995. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No files. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: elisp-comp [--help] [--version] FILES... This script byte-compiles all `.el' files listed as FILES using GNU Emacs, and put the resulting `.elc' files into the current directory, so disregarding the original directories used in `.el' arguments. This script manages in such a way that all Emacs LISP files to be compiled are made visible between themselves, in the event they require or load-library one another. Report bugs to . EOF exit $? ;; -v | --v*) echo "elisp-comp $scriptversion" exit $? ;; esac if test -z "$EMACS" || test "$EMACS" = "t"; then # Value of "t" means we are running in a shell under Emacs. # Just assume Emacs is called "emacs". EMACS=emacs fi tempdir=elc.$$ # Cleanup the temporary directory on exit. trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 mkdir $tempdir cp "$@" $tempdir ( cd $tempdir echo "(setq load-path (cons nil load-path))" > script # $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $? $EMACS -batch -q -l script -l ../bcomp.el || exit $? mv *.elc .. ) || exit $? (exit 0); exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: navi2ch/icons/000077500000000000000000000000001173560164300135315ustar00rootroot00000000000000navi2ch/icons/.cvsignore000066400000000000000000000000111173560164300155210ustar00rootroot00000000000000Makefile navi2ch/icons/COPYING000066400000000000000000000014171173560164300145670ustar00rootroot00000000000000Copyright (C) 1998-2001 Yuuichi Teranishi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. navi2ch/icons/Makefile.am000066400000000000000000000005151173560164300155660ustar00rootroot00000000000000## Wanderlust (ftp://ftp.gohome.org/pub/elisp/) ä icondir = @icondir@ icon_DATA = plugged.xpm unplugged.xpm EXTRA_DIST = $(icon_DATA) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status navi2ch/icons/Makefile.in000066400000000000000000000205601173560164300156010ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = icons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(icondir)" iconDATA_INSTALL = $(INSTALL_DATA) DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EMACS = @EMACS@ EMACSLOADPATH = @EMACSLOADPATH@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ icondir = @icondir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ packagedir = @packagedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ icon_DATA = plugged.xpm unplugged.xpm EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu icons/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu icons/Makefile .PRECIOUS: Makefile $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) test -z "$(icondir)" || $(mkdir_p) "$(DESTDIR)$(icondir)" @list='$(icon_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(iconDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(icondir)/$$f'"; \ $(iconDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(icondir)/$$f"; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(icondir)/$$f'"; \ rm -f "$(DESTDIR)$(icondir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-iconDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-iconDATA install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA uninstall-info-am Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: navi2ch/icons/plugged.xpm000066400000000000000000000011311173560164300157020ustar00rootroot00000000000000/* XPM */ static char *plugged[] = { "32 12 8 1", " c None", ". c #a6caf0", "# c #8fa5cf", "a c #717171", "b c #5d5d97", "c c #8488ca", "d c #9f9f9f", "e c #7f8080", " ... ", " .ccb.... ", " accb####. ", " .accb#####.. ", " eeeeeeeeaccb#####.eeeeeeee ", " dddddddcaccb#####.dedddddd ", " dddddddcaccb#####.dedddddd ", " eeeeeeeeaccb#####.eeeeeeee ", " aaccb####aaa ", " accbaaaaa ", " aaaaaaaa ", " aaa " }; navi2ch/icons/unplugged.xpm000066400000000000000000000011651173560164300162540ustar00rootroot00000000000000/* XPM */ static char * unplugged_xpm[] = { "32 12 9 1", " s None c None", ". c tomato", "X c #a6caf0", "o c #8488ca", "O c #5d5d97", "+ c #8fa5cf", "@ c #717171", "# c #7f8080", "$ c #9f9f9f", " XXX...... ", " ... ... ", " ..O ....X ", " ..oO ...+..XX ", " ######.ooO ...+++.X##### ", " $$$$$o.ooO ...@+++.X$#$$$ ", " $$$$$o.ooO ... @+++.X$#$$$ ", " ######.ooO... @+++.X##### ", " ..o... @++..@@ ", " .... @@..@ ", " ... ...@ ", " ...... " }; navi2ch/install-sh000077500000000000000000000220211173560164300144170ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: navi2ch/missing000077500000000000000000000254061173560164300140240ustar00rootroot00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: navi2ch/mkinstalldirs000077500000000000000000000066221173560164300152320ustar00rootroot00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2005-06-29.22 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: navi2ch/navi2ch-article.el000066400000000000000000004531731173560164300157300ustar00rootroot00000000000000;;; navi2ch-article.el --- article view module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, ;; 2009 by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-article) (defconst navi2ch-article-ident "$Id$") (eval-when-compile (require 'cl) (defvar navi2ch-board-buffer-name) (defvar navi2ch-board-current-board) (defvar navi2ch-board-subject-list) (defvar navi2ch-board-last-seen-alist) (defvar navi2ch-popup-article-current-board) (defvar navi2ch-popup-article-current-article) (require 'wid-edit)) (require 'base64) (require 'widget) (require 'navi2ch) (defvar navi2ch-article-mode-map nil) (unless navi2ch-article-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-global-view-map) (define-key map "q" 'navi2ch-article-exit) (define-key map "Q" 'navi2ch-article-goto-current-board) (define-key map "s" 'navi2ch-article-sync) (define-key map "S" 'navi2ch-article-sync-disable-diff) (define-key map "r" 'navi2ch-article-redraw-range) (define-key map "j" 'navi2ch-article-few-scroll-up) (define-key map "k" 'navi2ch-article-few-scroll-down) (define-key map " " 'navi2ch-article-scroll-up) (navi2ch-define-delete-keys map 'navi2ch-article-scroll-down) (define-key map "w" 'navi2ch-article-write-message) (define-key map "W" 'navi2ch-article-write-sage-message) (define-key map "\r" 'navi2ch-article-select-current-link) (unless (featurep 'xemacs) (define-key map [follow-link] 'mouse-face)) (navi2ch-define-mouse-key map 2 'navi2ch-article-mouse-select) (define-key map "g" 'navi2ch-article-goto-number-or-board) ;; (define-key map "g" 'navi2ch-article-goto-number) (define-key map "l" 'navi2ch-article-pop-point) (define-key map "L" 'navi2ch-article-pop-poped-point) (define-key map "m" 'navi2ch-article-push-point) (define-key map "R" 'navi2ch-article-rotate-point) (define-key map "U" 'navi2ch-article-show-url) (define-key map "." 'navi2ch-article-redisplay-current-message) (define-key map "p" 'navi2ch-article-previous-message) (define-key map "n" 'navi2ch-article-next-message) (define-key map "P" 'navi2ch-article-through-previous) (define-key map "N" 'navi2ch-article-through-next) (define-key map [(shift tab)] 'navi2ch-article-previous-link) (define-key map [(iso-left-tab)] 'navi2ch-article-previous-link) (define-key map [(shift iso-lefttab)] 'navi2ch-article-previous-link) (define-key map "\e\C-i" 'navi2ch-article-previous-link) (define-key map "\C-\i" 'navi2ch-article-next-link) (define-key map "i" 'navi2ch-article-fetch-link) (define-key map ">" 'navi2ch-article-goto-last-message) (define-key map "<" 'navi2ch-article-goto-first-message) (define-key map "\ed" 'navi2ch-article-decode-message) (define-key map "\ei" 'navi2ch-article-auto-decode-toggle-text) (define-key map "v" 'navi2ch-article-view-aa) (define-key map "f" 'navi2ch-article-forward-buffer) (define-key map "b" 'navi2ch-article-backward-buffer) (define-key map "d" 'navi2ch-article-hide-message) (define-key map "a" 'navi2ch-article-add-important-message) (define-key map "h" 'navi2ch-article-toggle-hide) (define-key map "$" 'navi2ch-article-toggle-important) (define-key map "A" 'navi2ch-article-add-global-bookmark) (define-key map "\C-c\C-m" 'navi2ch-message-pop-message-buffer) (define-key map "G" 'navi2ch-article-goto-board) (define-key map "e" 'navi2ch-article-textize-article) (define-key map "?" 'navi2ch-article-search) (define-key map "\C-o" 'navi2ch-article-save-dat-file) (define-key map "F" 'navi2ch-article-toggle-message-filter) (define-key map "x" 'undefined) (define-key map "!" 'navi2ch-article-add-message-filter-cus) (define-key map "\C-c\C-r" 'navi2ch-article-remove-article) (navi2ch-ifxemacs (define-key map "\C-c\C- " 'navi2ch-article-toggle-sticky) (define-key map [(control c) (control ? )] 'navi2ch-article-toggle-sticky)) (define-key map "u" 'navi2ch-show-url-at-point) (define-key map "\C-c\C-y" 'navi2ch-article-write-cite-message) (define-key map "," 'navi2ch-thumbnail-select-current-link) (define-key map "V" 'navi2ch-thumbnail-save-content) (define-key map "\e\r" 'navi2ch-article-select-current-link) (define-key map "\C-c\C-d" 'navi2ch-thumbnail-image-delete-cache) (define-key map "T" 'navi2ch-thumbnail-all-show) (setq navi2ch-article-mode-map map))) (defvar navi2ch-article-mode-menu-spec '("Article" ["Toggle offline" navi2ch-toggle-offline] ["Sync" navi2ch-article-sync] ["Sync (no diff)" navi2ch-article-sync-disable-diff] ["Exit" navi2ch-article-exit] ["Write message" navi2ch-article-write-message] ["Write message (sage)" navi2ch-article-write-sage-message] ["Select Range" navi2ch-article-redraw-range])) (defvar navi2ch-article-view-range nil "$BI=<($9$k%9%l%C%I$NHO0O!#(B $B=q<0$O(B '(first . last) $B$G!"(B first $B$,:G=i$+$i$$$/$DI=<($9$k$+!"(B last $B$,:G8e$+$i$$$/$DI=<($9$k$+!#(B $BNc$($P!"(B(10 . 50) $B$G!":G=i$N(B10$B$H:G8e$N(B50$B$rI=<((B") (defvar navi2ch-article-buffer-name-prefix "*navi2ch article ") (defvar navi2ch-article-current-article nil) (defvar navi2ch-article-current-board nil) (defvar navi2ch-article-message-list nil) (defvar navi2ch-article-point-stack nil "$B0LCV$r3P$($H$/(B stack") (defvar navi2ch-article-poped-point-stack nil) (defvar navi2ch-article-hide-mode nil) (defvar navi2ch-article-through-next-function 'navi2ch-article-through-next) (defvar navi2ch-article-through-previous-function 'navi2ch-article-through-previous) (defvar navi2ch-article-through-forward-line-function 'navi2ch-bm-forward-line "$BA08e$N%9%l$K0\F0$9$k$?$a$K *") ;; important mode (defvar navi2ch-article-important-mode nil) (defvar navi2ch-article-important-mode-map nil) (unless navi2ch-article-important-mode-map (setq navi2ch-article-important-mode-map (make-sparse-keymap)) (define-key navi2ch-article-important-mode-map "d" 'navi2ch-article-delete-important-message) (define-key navi2ch-article-important-mode-map "a" 'undefined)) ;; hide mode (defvar navi2ch-article-hide-mode nil) (defvar navi2ch-article-hide-mode-map nil) (unless navi2ch-article-hide-mode-map (setq navi2ch-article-hide-mode-map (make-sparse-keymap)) (define-key navi2ch-article-hide-mode-map "d" 'navi2ch-article-cancel-hide-message) (define-key navi2ch-article-hide-mode-map "a" 'undefined)) ;; filter mode (defvar navi2ch-article-message-filter-mode nil) (defvar navi2ch-article-message-filter-mode-map nil) (unless navi2ch-article-message-filter-mode-map (setq navi2ch-article-message-filter-mode-map (make-sparse-keymap)) (define-key navi2ch-article-message-filter-mode-map "x" 'navi2ch-article-toggle-replace-message)) (defvar navi2ch-article-message-filter-cache nil) (defvar navi2ch-article-save-message-filter-cache-keys '(cache replace hide important)) ;; sticky mode (defvar navi2ch-article-sticky-mode nil) (make-variable-buffer-local 'navi2ch-article-sticky-mode) (add-to-list 'minor-mode-alist '(navi2ch-article-sticky-mode " Sticky")) (defvar navi2ch-article-message-filter-default-rule-alist '((?n :var navi2ch-article-message-filter-by-name-alist :string navi2ch-article-get-current-name) (?m :var navi2ch-article-message-filter-by-mail-alist :string navi2ch-article-get-current-mail) (?i :var navi2ch-article-message-filter-by-id-alist :string navi2ch-article-get-current-id :scope board-local :date t) (?h :var navi2ch-article-message-filter-by-hostname-alist :string navi2ch-article-get-current-hostname) (?b :var navi2ch-article-message-filter-by-message-alist :string (lambda () (or (navi2ch-article-get-current-word-in-body) ""))) (?s :var navi2ch-article-message-filter-by-subject-alist :string navi2ch-article-get-current-subject) (t :match-method "s"))) (defvar navi2ch-article-message-filter-wid-string) (defvar navi2ch-article-message-filter-wid-rule) (defvar navi2ch-article-message-filter-wid-method) (defvar navi2ch-article-message-filter-wid-case) (defvar navi2ch-article-message-filter-wid-invert) (defvar navi2ch-article-message-filter-wid-scope) (defvar navi2ch-article-message-filter-wid-float) (defvar navi2ch-article-message-filter-wid-var) (defvar navi2ch-article-message-filter-wid-date) (defvar navi2ch-article-message-filter-wid-window-configuration) ;; JIT (defvar navi2ch-article-jit-interval 0.1) (defvar navi2ch-article-jit-timer nil) (defvar navi2ch-article-use-jit nil) (defvar navi2ch-article-jit-buffers nil) (defvar navi2ch-article-jit-need-insert nil) ;; local variables (make-variable-buffer-local 'navi2ch-article-current-article) (make-variable-buffer-local 'navi2ch-article-current-board) (make-variable-buffer-local 'navi2ch-article-message-list) (make-variable-buffer-local 'navi2ch-article-message-filter-cache) (make-variable-buffer-local 'navi2ch-article-point-stack) (make-variable-buffer-local 'navi2ch-article-poped-point-stack) (make-variable-buffer-local 'navi2ch-article-view-range) (make-variable-buffer-local 'navi2ch-article-through-next-function) (make-variable-buffer-local 'navi2ch-article-through-previous-function) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-string) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-rule) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-method) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-case) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-invert) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-scope) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-float) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-var) (make-variable-buffer-local 'navi2ch-article-message-filter-wid-date) (make-variable-buffer-local 'navi2ch-article-jit-need-insert) ;; add hook (defun navi2ch-article-kill-emacs-hook () (navi2ch-article-expunge-buffers -1)) (add-hook 'navi2ch-kill-emacs-hook 'navi2ch-article-kill-emacs-hook) ;;; navi2ch-article functions (defun navi2ch-article-get-url (board article &optional no-kako) (let ((artid (cdr (assq 'artid article))) (url (navi2ch-board-get-uri board))) (if (and (not no-kako) (cdr (assq 'kako article))) (navi2ch-article-get-kako-url board article) (concat url "dat/" artid ".dat")))) (defun navi2ch-article-get-kako-url (board article) (let* ((artid (cdr (assq 'artid article))) (url (navi2ch-board-get-uri board)) (length (length artid))) (cond ((= length 9) (concat url "kako/" (substring artid 0 3) "/" artid ".dat.gz")) ((= length 10) (concat url "kako/" (substring artid 0 4) "/" (substring artid 0 5) "/" artid ".dat.gz")) (t nil)))) (defsubst navi2ch-article-get-file-name (board article) (navi2ch-board-get-file-name board (concat (cdr (assq 'artid article)) (if (cdr (or (assq 'compressed article) (assq 'compressed (navi2ch-article-load-info board article)))) ".dat.gz" ".dat")))) (defsubst navi2ch-article-get-info-file-name (board article) (navi2ch-board-get-file-name board (concat "info/" (cdr (assq 'artid article))))) (defsubst navi2ch-article-file-name-to-artid (filename) "*FILENAME $B$r%9%l(BID$B$KJQ49$9$k!#(B" (file-name-sans-extension (file-name-sans-extension (file-name-nondirectory filename)))) (defsubst navi2ch-article-inside-range-p (num range len) "NUM $B$,(B RANGE $B$G<($9HO0O$KF~$C$F$k$+!#(B LEN $B$O(B RANGE $B$GHO0O$r;XDj$5$l$k(B list $B$ND9$5!#(B" (or (not range) (<= num (car range)) (> num (- len (cdr range))))) (defsubst navi2ch-article-get-buffer-name (board article) (concat navi2ch-article-buffer-name-prefix (navi2ch-article-get-url board article 'no-kako))) (defsubst navi2ch-article-check-cached (board article) "BOARD $B$H(B ARTICLE $B$G;XDj$5$l$k%9%l%C%I$,%-%c%C%7%e$5$l$F$k$+!#(B" (cond ((get-buffer (navi2ch-article-get-buffer-name board article)) 'view) ((file-exists-p (navi2ch-article-get-file-name board article)) ;; ((member (concat (cdr (assq 'artid article)) ".dat") list) 'cache))) (defmacro navi2ch-article-summary-element-seen (element) `(plist-get ,element :seen)) (defmacro navi2ch-article-summary-element-access-time (element) `(plist-get ,element :access-time)) (defmacro navi2ch-article-summary-element-set-seen (element seen) `(setq ,element (plist-put ,element :seen ,seen))) (defmacro navi2ch-article-summary-element-set-access-time (element time) `(setq ,element (plist-put ,element :access-time ,time))) (defmacro navi2ch-article-save-view (&rest body) "BODY $BFb$G8=:_I=<($7$F$$$k%9%l$rI=<($7$J$*$9$H$-$K!"(B $B%&%#%s%I%&Fb$N%+!<%=%k$N0LCV$r$G$-$k$@$10];}$9$k!#(B" (let ((num (make-symbol "num")) (buf (make-symbol "buf")) (win (make-symbol "win")) (bol (make-symbol "bol")) (col (make-symbol "col")) (win-lin (make-symbol "win-lin")) (msg-lin (make-symbol "msg-lin")) (visible (make-symbol "visible"))) `(let* ((,num (navi2ch-article-get-current-number)) (,buf (current-buffer)) (,win (if (eq (window-buffer) ,buf) (selected-window) (get-buffer-window ,buf))) (,bol (navi2ch-line-beginning-position)) (,col (current-column)) ,win-lin ,msg-lin ,visible) (save-excursion (goto-char (window-start ,win)) (setq ,win-lin (count-lines (navi2ch-line-beginning-position) ,bol)) (if (null ,num) (setq ,msg-lin ,win-lin) (navi2ch-article-goto-number ,num) (setq ,msg-lin (count-lines (navi2ch-line-beginning-position) ,bol)))) (prog1 (progn ,@body) (with-current-buffer ,buf (when ,num (setq ,visible (navi2ch-article-get-visible-numbers)) (while (and (cdr ,visible) (< (car ,visible) ,num)) (setq ,visible (cdr ,visible)))) (navi2ch-article-goto-number (or (car ,visible) 1)) (forward-line ,msg-lin) (move-to-column ,col) (set-window-start ,win (navi2ch-line-beginning-position (- 1 ,win-lin))) (unless (eq (navi2ch-article-get-current-number) (car ,visible)) (navi2ch-article-goto-number (or (car ,visible) 1)))))))) (put 'navi2ch-article-save-view 'lisp-indent-function 0) (defun navi2ch-article-url-to-article (url) "URL $B$+$i(B article $B$KJQ49!#(B" (navi2ch-multibbs-url-to-article url)) (defun navi2ch-article-to-url (board article &optional start end nofirst) "BOARD, ARTICLE $B$+$i(B url $B$KJQ49!#(B START, END, NOFIRST $B$GHO0O$r;XDj$9$k(B" (navi2ch-multibbs-article-to-url board article start end nofirst)) (defun navi2ch-article-cleanup-message () (let (re) (when navi2ch-article-cleanup-trailing-newline ; $B%l%9KvHx$N6uGr$r *\\)+<>" nil t) (replace-match "<>"))) (when navi2ch-article-cleanup-white-space-after-old-br (goto-char (point-min)) (unless (re-search-forward "
[^ ]" nil t) (setq re "
"))) (when navi2ch-article-cleanup-trailing-whitespace (setq re (concat " *" (or re "
")))) (unless (or (not re) (string= re "
")) (goto-char (point-min)) (while (re-search-forward re nil t) (replace-match "
"))))) ; "\n" $B$G$b$$$$$+$b!#(B (defun navi2ch-article-parse-message (str) (unless (string= str "") (let ((board navi2ch-article-current-board) (article navi2ch-article-current-article)) (with-temp-buffer (let ((syms '(name mail date data subject)) alist max) (insert str) (navi2ch-article-cleanup-message) (setq max (point-max-marker)) (goto-char (point-min)) (setq alist (mapcar (lambda (sym) (cons sym (cons (point-marker) (if (re-search-forward navi2ch-article-separator nil t) (copy-marker (match-beginning 0)) (goto-char max) max)))) syms)) (let ((start (car (cdr (assq 'name alist)))) (end (cdr (cdr (assq 'name alist))))) (when (and start end) (goto-char start) (while (re-search-forward "\\([^<]+\\)\\|\\(]+>[^<]+\\)" end t) ;; fusianasan $B$d%H%j%C%W$J$I(B (replace-match (navi2ch-propertize (match-string 0) 'navi2ch-fusianasan-flag t) t t)))) (navi2ch-replace-html-tag-with-buffer) (dolist (x alist) (setcdr x (buffer-substring (cadr x) (cddr x)))) alist))))) (defun navi2ch-article-get-separator () (save-excursion (let ((string (buffer-substring (navi2ch-line-beginning-position) (navi2ch-line-end-position)))) (if (or (string-match "<>.*<>.*<>" string) (not (string-match ",.*,.*," string))) " *<> *" " *, *")))) (defun navi2ch-article-get-first-message () "current-buffer $B$N(B article $B$N:G=i$N(B message $B$rJV$9!#(B" (goto-char (point-min)) (navi2ch-article-parse-message (buffer-substring-no-properties (point) (progn (forward-line 1) (1- (point)))))) (defun navi2ch-article-get-first-message-from-file (file &optional board) "FILE $B$G;XDj$5$l$?(B article $B$N:G=i$N(B message $B$rJV$9!#(B BOARD non-nil $B$J$i$P!"$=$NHD$N(B coding-system $B$r;H$&!#(B" (with-temp-buffer (navi2ch-board-insert-file-contents board file) (navi2ch-apply-filters board navi2ch-article-filter-list) (navi2ch-article-get-first-message))) (defun navi2ch-article-get-message-list (file &optional begin end) "FILE $B$N(B BEGIN $B$+$i(B END $B$^$G$NHO0O$+$i%9%l$N(B list $B$r:n$k!#(B $B6u9T$O(B nil$B!#(B" (when (file-exists-p file) (let ((board navi2ch-article-current-board) message-list) (with-temp-buffer (navi2ch-board-insert-file-contents board file begin end) (run-hooks 'navi2ch-article-get-message-list-hook) (let ((i 1)) (navi2ch-apply-filters board navi2ch-article-filter-list) (message "Splitting current messages...") (goto-char (point-min)) (while (not (eobp)) (setq message-list (cons (cons i (let ((str (buffer-substring-no-properties (point) (progn (forward-line 1) (1- (point)))))) (unless (string= str "") str))) message-list)) (setq i (1+ i))) (message "Splitting current messages...done"))) (nreverse message-list)))) (defun navi2ch-article-append-message-list (list1 list2) (let ((num (length list1))) (append list1 (mapcar (lambda (x) (setq num (1+ num)) (cons num (cdr x))) list2)))) (defun navi2ch-article-update-previous-message-separator () "$B8=:_0LCV$ND>A0$N%l%96h@Z$r99?7$9$k!#(B" (let ((old-pos (point-marker))) (set-marker-insertion-type old-pos t) (save-excursion (let ((buffer-read-only nil) end beg) (if (= (point) (point-max)) (setq end (point)) (setq end (previous-single-property-change (point) 'message-separator))) (when end (if (get-text-property (max (1- end) (point-min)) 'message-separator) (setq beg (previous-single-property-change end 'message-separator)) (setq beg end) (setq end (next-single-property-change beg 'message-separator)))) (when (and beg end) (let ((number (get-text-property beg 'message-separator))) (goto-char beg) (delete-region beg end) (navi2ch-article-insert-message-separator number))))) (goto-char old-pos))) (defun navi2ch-article-insert-message-separator (number) "$B%l%96h@Z$rA^F~$9$k!#(B" (let ((p (point))) (funcall navi2ch-article-insert-message-separator-function) (when (and navi2ch-article-message-separator-insert-hide-number-p (navi2ch-article-insert-hide-number-following number)) (funcall navi2ch-article-insert-message-separator-function)) (when navi2ch-article-message-separator-insert-trailing-newline-p (insert "\n")) (put-text-property p (point) 'message-separator number))) (defun navi2ch-article-insert-hide-number-following (number) "$B%l%9HV9f(B NUMBER $B$N8e$KB3$/(B hide $B$5$l$?%l%9?t$rA^F~$9$k!#(B $BA^F~$7$?>l9g$O(B non-nil $B$rJV$9!#(B" (unless (or navi2ch-article-hide-mode navi2ch-article-important-mode) (let (hide beg end cnt) ;; hide $B>pJs$O(B filter mode $B$+$I$&$+$GJQ$o$C$F$/$k(B (setq hide (funcall (if navi2ch-article-message-filter-mode 'navi2ch-union 'navi2ch-set-difference) (cdr (assq 'hide navi2ch-article-current-article)) (cdr (assq 'hide navi2ch-article-message-filter-cache)))) (setq beg (car (memq (1+ number) hide))) (when beg (setq end beg) (while (memq (1+ end) hide) (setq end (1+ end))) (setq cnt (1+ (- end beg))) (let ((number-str (if (= cnt 1) (format "%d" beg) (format "%d-%d" beg end)))) (insert (format "[%d hidden message(s) (" cnt)) (let ((pos (point))) (insert ">>" number-str) (navi2ch-article-set-link-property-subr pos (point) 'number number-str) (insert ")]"))) 'found)))) (defun navi2ch-article-insert-message-separator-by-face () (let ((p (point))) (insert "\n") (put-text-property p (point) 'face 'underline))) (defun navi2ch-article-insert-message-separator-by-char () (let ((pos (point))) (insert (make-string (max 0 (- (eval navi2ch-article-message-separator-width) (current-column))) navi2ch-article-message-separator)) (put-text-property pos (point) 'face 'navi2ch-article-message-separator-face) (insert "\n"))) (defun navi2ch-article-set-link-property-subr (start end type value &optional object) (let ((face (cond ((eq type 'number) 'navi2ch-article-link-face) ((eq type 'url) 'navi2ch-article-url-face)))) (add-text-properties start end (list 'face face 'help-echo #'navi2ch-article-help-echo 'navi2ch-link-type type 'navi2ch-link value 'mouse-face navi2ch-article-mouse-face) object))) (defun navi2ch-article-link-regexp-alist-to-internal () (navi2ch-regexp-alist-to-internal (append navi2ch-article-link-regexp-alist (list (cons (concat navi2ch-article-number-prefix-regexp navi2ch-article-number-number-regexp) (lambda (match) (navi2ch-article-set-link-property-subr (match-beginning 0) (match-end 0) 'number (navi2ch-match-string-no-properties 1)) (while (looking-at (concat navi2ch-article-number-separator-regexp navi2ch-article-number-number-regexp)) (navi2ch-article-set-link-property-subr (match-beginning 1) (match-end 1) 'number (navi2ch-match-string-no-properties 1)) (goto-char (max (1+ (match-beginning 0)) (match-end 0)))))) (cons navi2ch-article-url-regexp (lambda (url) (if (string-match "\\`\\(h?t?tp\\)\\(s?:\\)" url) (replace-match "http\\2" nil nil url) url))))))) (defun navi2ch-article-set-link-property () ">>1 $B$H$+(B http:// $B$K(B property $B$rIU$1$k!#(B" (goto-char (point-min)) (let* ((reg-internal (or navi2ch-article-link-internal (navi2ch-article-link-regexp-alist-to-internal))) match rep literal) (while (setq match (navi2ch-re-search-forward-regexp-alist reg-internal nil t)) (setq rep (cdr match) literal nil) (when (functionp rep) (save-match-data (setq rep (funcall rep (navi2ch-match-string-no-properties 0)) literal t))) (when (stringp rep) (let ((start (match-beginning 0)) (end (match-end 0)) (url (navi2ch-match-string-no-properties 0))) (when (string-match (concat "\\`" (car match) "\\'") url) (setq url (replace-match rep nil literal url)) (navi2ch-article-set-link-property-subr start end 'url url)) (goto-char (max (1+ start) end))))))) (defun navi2ch-article-put-cite-face () (goto-char (point-min)) (while (re-search-forward navi2ch-article-citation-regexp nil t) (put-text-property (match-beginning 0) (match-end 0) 'face 'navi2ch-article-citation-face))) (defun navi2ch-article-arrange-message () (goto-char (point-min)) (let ((id (cdr (assq 'id navi2ch-article-current-board)))) (when (or (member id navi2ch-article-enable-fill-list) (and (not (member id navi2ch-article-disable-fill-list)) navi2ch-article-enable-fill)) (set-hard-newline-properties (point-min) (point-max)) (let ((fill-column (- (window-width) 5)) (use-hard-newlines t)) (fill-region (point-min) (point-max))))) (run-hooks 'navi2ch-article-arrange-message-hook)) (defun navi2ch-article-insert-message (num alist) (let ((p (point))) (insert (funcall navi2ch-article-header-format-function num (cdr (assq 'name alist)) (cdr (assq 'mail alist)) (cdr (assq 'date alist)))) (put-text-property p (1+ p) 'current-number num) (setq p (point)) (insert (cdr (assq 'data alist)) "\n") (save-excursion (save-restriction (narrow-to-region p (point)) ;; (navi2ch-article-cleanup-message) ; $B$d$C$QCY$$(B (put-text-property (point-min) (point-max) 'face 'navi2ch-article-face) (navi2ch-article-put-cite-face) (navi2ch-article-set-link-property) (if navi2ch-article-auto-decode-p (navi2ch-article-auto-decode-encoded-section)) (navi2ch-article-arrange-message) ;; $B%5%`%M%$%k2hA|$N%-%c%C%7%e$,$"$C$?$iI=<((B (navi2ch-thumbnail-insert-image-reload)))) (navi2ch-article-insert-message-separator num)) (defun navi2ch-article-insert-messages (list range) "LIST $B$r@07A$7$FA^F~$9$k!#(B" (let ((msg (if navi2ch-article-message-filter-mode "Filtering and inserting current messages..." "Inserting current messages...")) (len (length list)) (hide (cdr (assq 'hide navi2ch-article-current-article))) (imp (cdr (assq 'important navi2ch-article-current-article))) (unfilter (cdr (assq 'unfilter navi2ch-article-current-article))) (cache (cdr (assq 'cache navi2ch-article-message-filter-cache))) (rep (cdr (assq 'replace navi2ch-article-message-filter-cache))) (orig (cdr (assq 'original navi2ch-article-message-filter-cache))) (progress 0) (percent 0) (navi2ch-article-link-internal (navi2ch-article-link-regexp-alist-to-internal))) (unless navi2ch-article-use-jit (message msg)) (let ((func (if navi2ch-article-message-filter-mode #'navi2ch-union #'navi2ch-set-difference))) (setq hide (funcall func hide (cdr (assq 'hide navi2ch-article-message-filter-cache)))) (setq imp (funcall func imp (cdr (assq 'important navi2ch-article-message-filter-cache))))) (setq navi2ch-article-current-article (navi2ch-put-alist 'hide hide navi2ch-article-current-article)) (setq navi2ch-article-current-article (navi2ch-put-alist 'important imp navi2ch-article-current-article)) (dolist (x list) (let* ((num (car x)) (alist (cdr x)) (rep-alist (cdr (assq num rep))) (orig-alist (cdr (assq num orig))) suppress) (when (and alist (cond (navi2ch-article-hide-mode (memq num hide)) (navi2ch-article-important-mode (memq num imp)) (t (and (navi2ch-article-inside-range-p num range len) (not (memq num hide)))))) (if (stringp alist) (progn (setq alist (navi2ch-article-parse-message alist)) (cond ((and (string= "$B$"$\!<$s(B" (cdr (assq 'date alist))) (memq num cache)) ;; $B?7$7$/!V$"$\!<$s!W$5$l$?%l%9$O%-%c%C%7%e$r%/%j%"(B (setq unfilter (delq num unfilter)) (setq navi2ch-article-current-article (navi2ch-put-alist 'unfilter unfilter navi2ch-article-current-article)) (setq cache (delq num cache)) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'cache cache navi2ch-article-message-filter-cache))) (rep-alist ;; $BCV498e$N%-%c%C%7%e$,$"$k>l9g$OCV49A0$N%l%9$rB`Hr(B (setq orig-alist (mapcar (lambda (x) (cons (car x) (cdr (assq (car x) alist)))) rep-alist)) (setq orig (navi2ch-put-alist num orig-alist orig)) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'original orig navi2ch-article-message-filter-cache))))) (dolist (slot alist) (when (stringp (cdr slot)) (set-text-properties 0 (length (cdr slot)) nil (cdr slot))))) (if (and navi2ch-article-message-filter-mode (not (memq num unfilter))) (if (and navi2ch-article-use-message-filter-cache (memq num cache)) ;; $BCV498e$N%l%9$r%-%c%C%7%e$+$iCj=P(B (dolist (slot rep-alist) (when (cdr slot) (navi2ch-put-alist (car slot) (cdr slot) alist))) ;; $B%U%#%k%?=hM}$NK\BN(B (let ((result (navi2ch-article-apply-message-filters (navi2ch-put-alist 'number num alist)))) (when (and (eq result 'hide) (not navi2ch-article-hide-mode)) (setq suppress t)))) ;; $BCV49A0$N%l%9$r%-%c%C%7%e$+$iI|85(B (dolist (slot orig-alist) (when (cdr slot) (navi2ch-put-alist (car slot) (cdr slot) alist)))) (setq alist (navi2ch-put-alist 'point (point-marker) alist)) (setcdr x alist) ;; (setcdr x (navi2ch-put-alist 'point (point) alist)) (if suppress (navi2ch-article-update-previous-message-separator) (navi2ch-article-insert-message num alist) (set-marker-insertion-type (cdr (assq 'point alist)) t))) ;; $B?JD=I=<((B (unless navi2ch-article-use-jit (and (> (setq progress (+ progress 100)) 10000) (/= (/ progress len) percent) (navi2ch-no-logging-message "%s%d%%" msg (setq percent (/ progress len))))))) (unless navi2ch-article-use-jit (message "%sdone" msg)))) (defsubst navi2ch-article-get-message (num) "NUM $BHVL\$N%l%9$rF@$k!#(B" (cdr (assq num navi2ch-article-message-list))) (defun navi2ch-article-reinsert-partial-messages (start &optional end) "START $BHVL\$+$i!":G8e$^$?$O(B END $BHVL\$^$G$N%l%9$rA^F~$7$J$*$9!#(B" (let* ((nums (mapcar #'car navi2ch-article-message-list)) (len (length nums)) (last (car (last nums))) list visible start-point end-point) (when (minusp start) (setq start (+ start last 1))) (if (null end) (setq end last) (when (minusp end) (setq end (+ end last 1))) (when (> start end) (setq start (prog1 end (setq end start))))) (catch 'loop (dolist (num (nreverse nums)) (cond ((< num start) (throw 'loop nil)) ((and (<= num end) (or navi2ch-article-hide-mode navi2ch-article-important-mode (navi2ch-article-inside-range-p num navi2ch-article-view-range len))) (let ((slot (assq num navi2ch-article-message-list))) (when slot (setq list (cons slot list)))))))) (setq visible (navi2ch-article-get-visible-numbers)) (while (and visible (< (car visible) start)) (setq visible (cdr visible))) (when visible (setq start-point (cdr (assq 'point (navi2ch-article-get-message (car visible)))))) (while (and visible (<= (car visible) end)) (setq visible (cdr visible))) (when visible (setq end-point (cdr (assq 'point (navi2ch-article-get-message (car visible)))))) (if (null start-point) (goto-char (point-max)) (goto-char start-point) (delete-region start-point (or end-point (point-max)))) (navi2ch-article-insert-messages list nil))) (defun navi2ch-article-apply-message-filters (alist) (let* ((num (cdr (assq 'number alist))) (orig (cdr (assq 'original navi2ch-article-message-filter-cache)))) ;; $BCV49A0$N%l%9$r%-%c%C%7%e$+$iI|85(B (dolist (slot (cdr (assq num orig))) (when (cdr slot) (navi2ch-put-alist (car slot) (cdr slot) alist))) (let ((old-alist (copy-alist alist)) score result) (catch 'loop (dolist (filter navi2ch-article-message-filter-list) (setq result (funcall filter alist)) (cond ((numberp result) (setq score (+ (or score 0) result))) (result (throw 'loop nil))))) (when score (cond ((and navi2ch-article-message-add-important-above (> score navi2ch-article-message-add-important-above)) (setq result 'important)) ((and navi2ch-article-message-replace-below navi2ch-article-message-hide-below (< score (car navi2ch-article-message-replace-below)) (< score navi2ch-article-message-hide-below)) ;; `navi2ch-article-message-replace-below' $B$H(B ;; `navi2ch-article-message-hide-below' $B$,N>J}$H$b(B ;; $BE,MQ$5$l$&$k>l9g!"$7$-$$CM$NDc$$J}$rM%@h(B (if (< navi2ch-article-message-hide-below (car navi2ch-article-message-replace-below)) (setq result 'hide) (setq result (cdr navi2ch-article-message-replace-below)))) ((and navi2ch-article-message-replace-below (< score (car navi2ch-article-message-replace-below))) (setq result (cdr navi2ch-article-message-replace-below))) ((and navi2ch-article-message-hide-below (< score navi2ch-article-message-hide-below)) (setq result 'hide)))) (cond ((stringp result) (let ((case-fold-search nil)) (navi2ch-put-alist 'name result alist) (navi2ch-put-alist 'data result alist) (navi2ch-put-alist 'mail (if (string-match "sage" (cdr (assq 'mail alist))) "sage" "") alist) (navi2ch-put-alist 'date (navi2ch-replace-string " ID:.*" "" (cdr (assq 'date alist))) alist))) ((memq result '(hide important unfilter)) (let ((nums (cdr (assq result navi2ch-article-current-article)))) (unless (memq num nums) (setq navi2ch-article-current-article (navi2ch-put-alist result (cons num nums) navi2ch-article-current-article)))))) (unless (equal old-alist alist) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'original (navi2ch-put-alist num (navi2ch-set-difference old-alist alist) orig) navi2ch-article-message-filter-cache))) (when navi2ch-article-use-message-filter-cache (unless (equal alist old-alist) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'replace (navi2ch-put-alist num (copy-alist (navi2ch-set-difference alist old-alist)) (cdr (assq 'replace navi2ch-article-message-filter-cache))) navi2ch-article-message-filter-cache))) (unless (or (memq result '(nil cache replace original unfilter)) (stringp result)) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist result (cons num (cdr (assq result navi2ch-article-message-filter-cache))) navi2ch-article-message-filter-cache))) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'cache (cons num (cdr (assq 'cache navi2ch-article-message-filter-cache))) navi2ch-article-message-filter-cache))) result))) (defun navi2ch-article-extract-date (str) (cond ((not (stringp str)) nil) ((string-match "^[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]" str) (match-string 0 str)) ((string-match "^[0-9][0-9]/[0-9][0-9]/[0-9][0-9]" str) (concat "20" (match-string 0 str))) (t nil))) (defun navi2ch-article-message-filter-by-name (alist) (when navi2ch-article-message-filter-by-name-alist (navi2ch-article-message-filter-subr navi2ch-article-message-filter-by-name-alist (cdr (assq 'name alist)) (navi2ch-article-extract-date (cdr (assq 'date alist)))))) (defun navi2ch-article-message-filter-by-message (alist) (when navi2ch-article-message-filter-by-message-alist (navi2ch-article-message-filter-subr navi2ch-article-message-filter-by-message-alist (cdr (assq 'data alist)) (navi2ch-article-extract-date (cdr (assq 'date alist)))))) (defun navi2ch-article-message-filter-by-id (alist) (let ((case-fold-search nil)) (when (and navi2ch-article-message-filter-by-id-alist (string-match " ID:\\([^ ]+\\)" (cdr (assq 'date alist)))) (navi2ch-article-message-filter-subr navi2ch-article-message-filter-by-id-alist (match-string 1 (cdr (assq 'date alist))) (navi2ch-article-extract-date (cdr (assq 'date alist))))))) (defun navi2ch-article-message-filter-by-mail (alist) (when navi2ch-article-message-filter-by-mail-alist (navi2ch-article-message-filter-subr navi2ch-article-message-filter-by-mail-alist (cdr (assq 'mail alist)) (navi2ch-article-extract-date (cdr (assq 'date alist)))))) (defun navi2ch-article-message-filter-by-subject (alist) (when navi2ch-article-message-filter-by-subject-alist (navi2ch-article-message-filter-subr navi2ch-article-message-filter-by-subject-alist (if (equal (or (cdr (assq 'subject alist)) "") "") (navi2ch-article-get-current-subject) (cdr (assq 'subject alist))) (navi2ch-article-extract-date (cdr (assq 'date alist)))))) (defun navi2ch-article-message-filter-by-hostname (alist) (let ((case-fold-search nil) (date (cdr (assq 'date alist)))) (when (and navi2ch-article-message-filter-by-hostname-alist (or (string-match "\\[ \\([^ ]+\\) \\]" date) (string-match "$BH/?.85(B:\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" date))) (navi2ch-article-message-filter-subr navi2ch-article-message-filter-by-hostname-alist (match-string 1 date) (navi2ch-article-extract-date (cdr (assq 'date alist))))))) (defun navi2ch-article-message-filter-subr (rules string date) (let ((board-id (cdr (assq 'id navi2ch-article-current-board))) (artid (cdr (assq 'artid navi2ch-article-current-article))) score) (catch 'loop (dolist (rule rules) (when (or (not (consp (car rule))) (and (equal (or (plist-get (car rule) :board-id) board-id) (and (equal (or (plist-get (car rule) :artid) artid) artid) board-id)) (or (null (and date (plist-get (car rule) :date))) (equal date (plist-get (car rule) :date))))) (let* ((char (and (consp (car rule)) (stringp (car (car rule))) (string-to-char (symbol-name (cadr (car rule)))))) (case-fold-search (and char (eq char (setq char (downcase char))))) (regexp (cond ((null char) (regexp-quote (car rule))) ((eq char ?r) (car (car rule))) ((eq char ?s) (regexp-quote (car (car rule)))) ((eq char ?e) (concat "\\`" (regexp-quote (car (car rule))) "\\'")) ((eq char ?f) (navi2ch-fuzzy-regexp (car (car rule)) case-fold-search "[$B!!(B \f\t\n\r\v]*")) (t "")))) (when (if (and char (plist-get (car rule) :invert)) (not (string-match regexp string)) (string-match regexp string)) ;; $BE,MQ$7$?%U%#%k%?>r7o$r(B age (when (and (not (eq rule (car rules))) (> (or (and char (plist-get (car rule) :float)) (if navi2ch-article-sort-message-filter-rules 1 0)) 0)) (setcdr rules (cons (car rules) (delq rule (cdr rules)))) (setcar rules rule)) (if (numberp (cdr rule)) (setq score (+ (or score 0) (cdr rule))) (throw 'loop (if (and char (stringp (cdr rule)) (not (plist-get (car rule) :invert))) (navi2ch-expand-newtext (cdr rule) string) (cdr rule)))))))) score))) (defun navi2ch-article-separator-filter () "$B5l7A<0$N%;%Q%l!<%?$r;HMQ$7$F$$$k%9%l$r?77A<0$KJQ49$9$k%U%#%k%?!#(B" (save-excursion (goto-char (point-min)) (when (looking-at "^.*,.*,.*,") (while (re-search-forward ",\\|$B!w!.(B" nil t) (if (string= (match-string 0) ",") (replace-match "<>") (replace-match ",")))))) (defun navi2ch-article-date-format-be2ch (date) "BE $B$K%j%s%/$rIU$1$k!#(B" (when (string-match "BE:\\([0-9]*\\)-[^(]*([0-9]*)" date) (set-text-properties (match-beginning 0) (match-end 0) (list 'mouse-face navi2ch-article-mouse-face 'navi2ch-link (concat "http://be.2ch.net/test/p.php?i=" (match-string 1 date)) 'navi2ch-link-type 'url 'help-echo #'navi2ch-article-help-echo) date)) date) (defun navi2ch-article-default-header-format-function (number name mail date) "$B%G%U%)%k%H$N%X%C%@$r%U%)!<%^%C%H$9$k4X?t!#(B $B%X%C%@$N(B face $B$rIU$1$k$N$b$3$3$G!#(B" (when (string-match (concat "\\`" navi2ch-article-number-number-regexp "\\'") name) (navi2ch-article-set-link-property-subr (match-beginning 0) (match-end 0) 'number (match-string 0 name) name)) (let ((from-header (navi2ch-propertize "From: " 'face 'navi2ch-article-header-face)) (from (navi2ch-propertize (concat (format "[%d] " number) name (format " <%s>\n" mail)) 'face 'navi2ch-article-header-contents-face)) (date-header (navi2ch-propertize "Date: " 'face 'navi2ch-article-header-face)) (date (navi2ch-propertize (funcall navi2ch-article-date-format-function date) 'face 'navi2ch-article-header-contents-face)) (start 0) next) (while start (setq next (next-single-property-change start 'navi2ch-fusianasan-flag from)) (when (get-text-property start 'navi2ch-fusianasan-flag from) (add-text-properties start (or next (length from)) '(face navi2ch-article-header-fusianasan-face) from)) (setq start next)) (concat from-header from date-header date "\n\n"))) (defun navi2ch-article-appendweek (d) "YY/MM/DD$B7A<0$NF|IU$KMKF|$rB-$9!#(B" (let ((youbi '("$BF|(B" "$B7n(B" "$B2P(B" "$B?e(B" "$BLZ(B" "$B6b(B" "$BEZ(B")) year month day et dt time date) ;; "$B$"$\!<$s(B"$B$H$+(BID$B$H$+5l7A<0$NF|IU$K$bBP1~$7$F$$$k$O$:!%(B ;; $B@55,I=8=$K9)IW$,I,MW$+$b!D(B (if (string-match "^\\([0-9][0-9]/[0-9][0-9]/[0-9][0-9]\\) \\([A-Za-z0-9: +/?]+\\)$" d) (progn (setq time (match-string 2 d)) (setq date (match-string 1 d)) (string-match "\\(.+\\)/\\(.*\\)/\\(.*\\)" date) (setq year (+ (string-to-number (match-string 1 date)) 2000)) (setq month (string-to-number (match-string 2 date))) (setq day (string-to-number (match-string 3 date))) (setq et (encode-time 0 0 0 day month year)) (setq dt (decode-time et)) ;; $BF,$K(B20$B$rB-$7$F(BYYYY$B7A<0$K$9$k(B(2100$BG/LdBj%\%C%Q%DM=Dj(B) (concat "20" date "(" (nth (nth 6 dt) youbi) ") " time )) d))) (defun navi2ch-article-expunge-buffers (&optional num) "$B%9%l$N%P%C%U%!$r:o=|$7$F(B NUM $B8D$K$9$k!#(B NUM $B$r;XDj$7$J$$>l9g$O(B `navi2ch-article-max-buffers' $B$r;HMQ!#(B NUM $B$,(B 0 $B0J>e$N$H$-$O(B sticky $B%P%C%U%!$O:o=|$7$J$$!#(B NUM $B$,(B -1 $B$N$H$-$O(B sticky $B%P%C%U%!$b4^$a$F$9$Y$F:o=|!#(B" (interactive "P") (when (not (numberp num)) ; C-u $B$N$_$N;~(B4$B8D$K$7$?$$$o$1$8$c$J$$$H;W$o$l(B (setq num navi2ch-article-max-buffers)) (let* ((buffer-list (navi2ch-article-buffer-list)) (buffer-num (length buffer-list))) (when (> buffer-num num) (unless (< num 0) (save-excursion (setq buffer-list (nreverse (apply 'append (mapcar (lambda (buf) (set-buffer buf) (and (not navi2ch-article-sticky-mode) (list buf))) buffer-list)))))) (catch 'loop (dolist (buf buffer-list) (kill-buffer buf) (setq buffer-num (1- buffer-num)) (when (<= buffer-num num) (throw 'loop nil))))))) (defun navi2ch-article-view-article (board article &optional force number max-line dont-display) "$B%9%l$r8+$k!#(BFORCE $B$G6/@)FI$_9~$_(B MAX-LINE $B$GFI$_9~$`9T?t$r;XDj!#(B $B$?$@(B `navi2ch-article-max-line' $B$H$O5U$G(B t $B$GA4ItFI$_9~$_!#(B DONT-DISPLAY $B$,(B non-nil $B$N$H$-$O%9%l%P%C%U%!$rI=<($;$:$K navi2ch-article-max-buffers 0)) (navi2ch-article-expunge-buffers (1- navi2ch-article-max-buffers))) (setq buffer (get-buffer-create buf-name)) (if dont-display (set-buffer buffer) (switch-to-buffer buffer)) (if (eq major-mode 'navi2ch-article-mode) (setq list (navi2ch-article-sync force nil)) (setq navi2ch-article-current-board board navi2ch-article-current-article article) (when navi2ch-article-auto-range (if (file-exists-p (navi2ch-article-get-file-name board article)) (setq navi2ch-article-view-range navi2ch-article-exist-message-range) (setq navi2ch-article-view-range navi2ch-article-new-message-range))) (when navi2ch-article-auto-activate-message-filter (setq navi2ch-article-message-filter-mode t navi2ch-article-message-filter-cache (navi2ch-article-load-message-filter-cache))) (setq list (navi2ch-article-sync force 'first)) (navi2ch-article-mode)) (when (and number (not (equal (navi2ch-article-get-current-number) number))) (navi2ch-article-goto-number number t)) (navi2ch-history-add navi2ch-article-current-board navi2ch-article-current-article) (navi2ch-bm-update-article navi2ch-article-current-board navi2ch-article-current-article)) (when (and (buffer-live-p buffer) (or (not (eq (navi2ch-get-major-mode buffer) 'navi2ch-article-mode)) (null (with-current-buffer buffer navi2ch-article-message-list)))) (set-window-configuration window-configuration) (kill-buffer buffer) (setq list nil))) list)) (defun navi2ch-article-view-article-from-file (file) "FILE $B$+$i%9%l$r8+$k!#(B" (setq file (expand-file-name file)) (let* ((board (list (cons 'id "navi2ch") (cons 'uri (navi2ch-filename-to-url (file-name-directory file))) (cons 'name navi2ch-board-name-from-file))) (article (list (cons 'artid (navi2ch-article-file-name-to-artid file)))) (buf-name (navi2ch-article-get-buffer-name board article))) (if (get-buffer buf-name) (progn (switch-to-buffer buf-name) nil) (if (and navi2ch-article-auto-expunge (> navi2ch-article-max-buffers 0)) (navi2ch-article-expunge-buffers (1- navi2ch-article-max-buffers))) (switch-to-buffer (get-buffer-create buf-name)) (setq navi2ch-article-current-board board navi2ch-article-current-article article) (when navi2ch-article-auto-range (setq navi2ch-article-view-range navi2ch-article-new-message-range)) (when navi2ch-article-auto-activate-message-filter (setq navi2ch-article-message-filter-mode t navi2ch-article-message-filter-cache (navi2ch-article-load-message-filter-cache))) (prog1 (navi2ch-article-sync-from-file) (navi2ch-article-set-mode-line) (navi2ch-article-mode))))) (easy-menu-define navi2ch-article-mode-menu navi2ch-article-mode-map "Menu used in navi2ch-article" navi2ch-article-mode-menu-spec) (defun navi2ch-article-setup-menu () (easy-menu-add navi2ch-article-mode-menu)) (defun navi2ch-article-mode () "\\{navi2ch-article-mode-map}" (interactive) (setq major-mode 'navi2ch-article-mode) (setq mode-name "Navi2ch Article") (setq buffer-read-only t) (buffer-disable-undo) (make-local-variable 'truncate-partial-width-windows) (setq truncate-partial-width-windows nil) (use-local-map navi2ch-article-mode-map) (navi2ch-article-setup-menu) (setq navi2ch-article-point-stack nil) (navi2ch-make-local-hook 'kill-buffer-hook) (add-hook 'kill-buffer-hook 'navi2ch-article-kill-buffer-hook t t) (navi2ch-make-local-hook 'post-command-hook) (add-hook 'post-command-hook 'navi2ch-article-display-link-minibuffer nil t) (run-hooks 'navi2ch-article-mode-hook)) (defun navi2ch-article-kill-buffer-hook () ;; update $B$G$"$l$P(B cache $B$K$7$J$$(B ;; view $B$G$"$C$?$b$N$,(B update $B$K$J$C$?8e$K(B kill $B$5$l$?;~$NBP:v(B (setq navi2ch-article-jit-buffers (delq (current-buffer) navi2ch-article-jit-buffers)) (unless navi2ch-article-jit-buffers (when navi2ch-article-jit-timer (cancel-timer navi2ch-article-jit-timer) (setq navi2ch-article-jit-timer nil))) (let ((status (navi2ch-bm-get-state-from-article navi2ch-article-current-board navi2ch-article-current-article))) (cond ((eq status 'update)) ((eq status 'down) (navi2ch-bm-update-article navi2ch-article-current-board navi2ch-article-current-article 'down)) (t (navi2ch-bm-update-article navi2ch-article-current-board navi2ch-article-current-article 'cache)))) (navi2ch-article-save-info)) (defun navi2ch-article-exit (&optional kill) (interactive "P") ;; (navi2ch-article-add-number) (run-hooks 'navi2ch-article-exit-hook) (navi2ch-article-save-info) (let ((buf (current-buffer))) (if (or kill (null navi2ch-article-message-list)) (progn (delete-windows-on buf) (kill-buffer buf)) (unless (eq (selected-window) (next-window (selected-window) 'never)) (delete-windows-on buf))) ;; (bury-buffer navi2ch-article-buffer-name) (let ((board-win (get-buffer-window navi2ch-board-buffer-name)) (board-buf (get-buffer navi2ch-board-buffer-name))) (cond (board-win (select-window board-win)) (board-buf (switch-to-buffer board-buf)) (t (navi2ch-list)))))) (defun navi2ch-article-goto-current-board (&optional kill) "$B%9%l%C%I$HF1$8HD$X0\F0$9$k!#(B" (interactive "P") (let ((board navi2ch-article-current-board)) (navi2ch-article-exit kill) (navi2ch-board-select-board board))) (defun navi2ch-article-fix-range (num) "navi2ch-article-view-range $B$r(B NUM $B$,4^$^$l$kHO0O$KJQ99!#(B" (let ((len (length navi2ch-article-message-list)) (range navi2ch-article-view-range)) (unless (navi2ch-article-inside-range-p num range len) (let ((first (car range)) (last (+ navi2ch-article-fix-range-diff (- len num)))) (setq navi2ch-article-view-range (cons first last)))))) (defun navi2ch-article-sync (&optional force first number) "$B%9%l$r99?7$9$k!#(BFORCE $B$,(B non-nil $B$J$i6/@)!#(B FIRST $B$,(B nil $B$J$i$P!"%U%!%$%k$,99?7$5$l$F$J$1$l$P2?$b$7$J$$!#(B" (interactive "P") (when (not (navi2ch-board-from-file-p navi2ch-article-current-board)) (run-hooks 'navi2ch-article-before-sync-hook) (let* ((list navi2ch-article-message-list) (article navi2ch-article-current-article) (board navi2ch-article-current-board) (navi2ch-net-force-update (or navi2ch-net-force-update force)) (file (navi2ch-article-get-file-name board article)) (old-size (navi2ch-file-size file)) header start) (when first (setq article (navi2ch-article-load-info))) (navi2ch-article-set-mode-line) (if (and (or (cdr (assq 'kako article)) (cdr (assq 'down article))) (file-exists-p file) (not (and force ; force $B$,;XDj$5$l$J$$8B$j(Bsync$B$7$J$$(B (y-or-n-p "Re-sync kako/down article? ")))) (setq navi2ch-article-current-article article) (let ((ret (navi2ch-article-update-file board article force))) (setq article (nth 0 ret) navi2ch-article-current-article article header (nth 1 ret)))) (prog1 ;; $B99?7$G$-$?$i(B (when (or (and first (file-exists-p file)) (and header (not (navi2ch-net-get-state 'not-updated header)) (not (navi2ch-net-get-state 'error header)))) (if (or first (navi2ch-net-get-state 'aborn header) (navi2ch-net-get-state 'kako header) (not navi2ch-article-enable-diff)) (setq list (navi2ch-article-get-message-list file)) (setq start (max 1 (- (1+ (length list)) (or (cdr navi2ch-article-view-range) 0)))) (setq list (navi2ch-article-append-message-list list (navi2ch-article-get-message-list file old-size)))) (setq navi2ch-article-message-list list) (let ((num (or number (cdr (assq 'number article))))) (when (and navi2ch-article-fix-range-when-sync num) (navi2ch-article-fix-range num) (when (and navi2ch-article-view-range start) (setq start (min start (max 1 (- (1+ (length list)) (cdr navi2ch-article-view-range)))))))) (unless first (navi2ch-article-save-number)) (when (or (eq start 1) navi2ch-article-hide-mode navi2ch-article-important-mode) (setq start nil)) (setq navi2ch-article-hide-mode nil navi2ch-article-important-mode nil) (let ((buffer-read-only nil)) (if start (funcall (if navi2ch-article-use-jit 'navi2ch-article-jit-reinsert-partial-messages 'navi2ch-article-reinsert-partial-messages) start) (erase-buffer) (if navi2ch-article-use-jit (navi2ch-article-jit-insert-messages list navi2ch-article-view-range (or number (cdr (assq 'number navi2ch-article-current-article)) 1)) (navi2ch-article-insert-messages list navi2ch-article-view-range)))) (navi2ch-article-load-number) (navi2ch-article-save-info board article first) (navi2ch-article-thread-stop-p) (navi2ch-article-set-mode-line) (run-hooks 'navi2ch-article-after-sync-hook) list) (when (and navi2ch-article-fix-range-when-sync number) (navi2ch-article-fix-range number) (navi2ch-article-redraw)) (navi2ch-article-goto-number (or number (navi2ch-article-get-current-number))) (navi2ch-article-set-summary-element board article nil))))) (defun navi2ch-article-fetch-article (board article &optional force) (if (get-buffer (navi2ch-article-get-buffer-name board article)) (save-excursion (navi2ch-article-view-article board article force nil nil t)) (let (ret header file) (setq article (navi2ch-article-load-info board article) file (navi2ch-article-get-file-name board article)) (unless (and (or (cdr (assq 'kako article)) (cdr (assq 'down article))) (file-exists-p file) (not (and force ; force $B$,;XDj$5$l$J$$8B$j(B sync $B$7$J$$(B (y-or-n-p "Re-sync kako/down article? ")))) (setq ret (navi2ch-article-update-file board article force) article (nth 0 ret) header (nth 1 ret)) (when (and header (not (navi2ch-net-get-state 'not-updated header)) (not (navi2ch-net-get-state 'error header))) (navi2ch-article-save-info board article) (navi2ch-article-set-summary-element board article t) t))))) (defun navi2ch-article-check-message-suppression (board article start &optional end) (let ((buffer (get-buffer (navi2ch-article-get-buffer-name board article))) suppressed) (if buffer (with-current-buffer buffer (when navi2ch-article-message-filter-mode (let ((res (length navi2ch-article-message-list))) (when (and (>= res start) (or (null end) (<= res end))) (let ((hide (cdr (assq 'hide navi2ch-article-current-article))) (i start)) (while (memq i hide) (setq i (1+ i))) (when (> i res) (setq suppressed res))))))) (when navi2ch-article-auto-activate-message-filter (with-temp-buffer (setq navi2ch-article-current-board board) (setq navi2ch-article-message-list (navi2ch-article-get-message-list (navi2ch-article-get-file-name navi2ch-article-current-board article))) (message "Filtering current messages...") (let ((res (length navi2ch-article-message-list))) (when (and (>= res start) (or (null end) (<= res end))) (setq navi2ch-article-current-article (navi2ch-article-load-info navi2ch-article-current-board article)) (setq navi2ch-article-message-filter-cache (navi2ch-article-load-message-filter-cache navi2ch-article-current-board navi2ch-article-current-article)) (catch 'loop (dolist (x (nthcdr (1- start) navi2ch-article-message-list)) (unless (eq (navi2ch-article-apply-message-filters (navi2ch-put-alist 'number (car x) (navi2ch-article-parse-message (cdr x)))) 'hide) (throw 'loop nil))) (setq suppressed res)) (navi2ch-article-save-info navi2ch-article-current-board navi2ch-article-current-article) (navi2ch-article-save-message-filter-cache navi2ch-article-current-board navi2ch-article-current-article navi2ch-article-message-filter-cache))) (message "Filtering current messages...done")))) suppressed)) (defun navi2ch-article-get-last-read-number (board article) (let ((buffer (get-buffer (navi2ch-article-get-buffer-name board article))) hide num) (if buffer (with-current-buffer buffer (setq hide (cdr (assq 'hide navi2ch-article-current-article)) num (if (or navi2ch-article-hide-mode navi2ch-article-important-mode) (cdr (assq 'number navi2ch-article-current-article)) (navi2ch-article-get-current-number)))) (setq article (navi2ch-article-load-info board (copy-alist article))) (setq hide (cdr (assq 'hide article)) num (cdr (assq 'number article)))) (when num (while (memq (1+ num) hide) (setq num (1+ num))) num))) (defun navi2ch-article-update-file (board article &optional force) "BOARD, ARTICLE $B$KBP1~$9$k%U%!%$%k$r99?7$9$k!#(B $BJV$jCM$O(B \(article header) $B$N%j%9%H!#(B" (let (header) (unless navi2ch-offline (let ((navi2ch-net-force-update (or navi2ch-net-force-update force)) (file (navi2ch-article-get-file-name board article)) start) (when (and (file-exists-p file) navi2ch-article-enable-diff) (setq start (1+ (navi2ch-count-lines-file file)))) (setq header (navi2ch-multibbs-article-update board article start)) (when header (unless (or (navi2ch-net-get-state 'not-updated header) (navi2ch-net-get-state 'error header)) (setq article (navi2ch-put-alist 'time (or (cdr (assq 'last-modified header)) (cdr (assq 'date header))) article))) (when (navi2ch-net-get-state 'kako header) (setq article (navi2ch-put-alist 'kako t article))) (when (and (cdr (assq 'down article)) (or (navi2ch-net-get-state 'not-updated header) (not (navi2ch-net-get-state 'error header)))) (setq article (navi2ch-put-alist 'down nil article)) (navi2ch-article-uncompress board article) (navi2ch-article-save-info board article)) (when (and (file-exists-p file) (file-readable-p file)) (with-temp-buffer (navi2ch-insert-file-contents file) (setq article (navi2ch-put-alist 'response (number-to-string (count-lines (point-min) (point-max))) article))))))) (list article header))) (defun navi2ch-article-sync-from-file () "from-file $B$J%9%l$r99?7$9$k!#(B" (let ((file (navi2ch-article-get-file-name navi2ch-article-current-board navi2ch-article-current-article))) (when (and (navi2ch-board-from-file-p navi2ch-article-current-board) (file-exists-p file)) (let ((list (navi2ch-article-get-message-list file)) (range navi2ch-article-view-range) (buffer-read-only nil)) (erase-buffer) (navi2ch-article-insert-messages list range) (prog1 (setq navi2ch-article-message-list list) (navi2ch-article-goto-number 1)))))) (defun navi2ch-article-set-mode-line () (let ((article navi2ch-article-current-article) (x (cdr (car navi2ch-article-message-list)))) (unless (assq 'subject article) (setq article (navi2ch-put-alist 'subject (cdr (assq 'subject (if (stringp x) (navi2ch-article-parse-message x) x))) article) navi2ch-article-current-article article)) (setq navi2ch-mode-line-identification (navi2ch-article-make-mode-line-identification article))) (navi2ch-set-mode-line-identification)) (defvar navi2ch-article-mode-line-format "%a (%n/%N) [%b] [%s]" "$B%9%lI=<(%P%C%U%!$N(B mode-line $B$N%U%)!<%^%C%H(B $B0J2<$N$b$N$,CV$-49$($i$l$k!#(B %a - $B%9%l%C%IL>(B %b - $BHDL>(B %n - $B n ?9)) (error "%c is bad key" n)) (setq n (- n ?0)) (setq range (if (eq n 0) nil (nth (1- n) navi2ch-article-view-range-list))))) (if (bufferp buf) (kill-buffer buf))) range))) (defun navi2ch-article-redraw-range () "$BI=<($9$kHO0O$r;XDj$7$?8e(B redraw $B$9$k!#(B" (interactive) (setq navi2ch-article-view-range (navi2ch-article-select-view-range-subr)) (sit-for 0) (navi2ch-article-redraw)) (defun navi2ch-article-save-number () (unless (or navi2ch-article-hide-mode navi2ch-article-important-mode) (let ((num (navi2ch-article-get-current-number))) (when num (setq navi2ch-article-current-article (navi2ch-put-alist 'number num navi2ch-article-current-article)))))) (defun navi2ch-article-load-number () (let ((num (cdr (assq 'number navi2ch-article-current-article))) (list (cond (navi2ch-article-hide-mode (cdr (assq 'hide navi2ch-article-current-article))) (navi2ch-article-important-mode (cdr (assq 'important navi2ch-article-current-article))) (t nil)))) (when list (let (nearest_len nearest_n) (dolist (n list) (let ((len (abs (- n num)))) (when (or (null nearest_len) (< len nearest_len)) (setq nearest_len len nearest_n n)))) (setq num nearest_n))) (when (or list (not (or navi2ch-article-hide-mode navi2ch-article-important-mode))) (navi2ch-article-goto-number (or num 1))))) (defun navi2ch-article-save-info (&optional board article first) (let (ignore) (when (eq major-mode 'navi2ch-article-mode) (if (navi2ch-board-from-file-p (or board navi2ch-article-current-board)) (setq ignore t) (when (and navi2ch-article-message-list (not first)) (navi2ch-article-save-number)) (or board (setq board navi2ch-article-current-board)) (or article (setq article navi2ch-article-current-article)))) (when (and (not ignore) board article) (let* ((article-tmp (if navi2ch-article-save-info-wrapper-func (funcall navi2ch-article-save-info-wrapper-func article) article)) (alist (mapcar (lambda (x) (assq x article-tmp)) navi2ch-article-save-info-keys))) (navi2ch-save-info (navi2ch-article-get-info-file-name board article) alist) (navi2ch-article-save-message-filter-cache board article))))) (defun navi2ch-article-load-info (&optional board article) (let (ignore alist) (if (navi2ch-board-from-file-p (or board navi2ch-article-current-board)) (setq ignore t) (or board (setq board navi2ch-article-current-board)) (or article (setq article navi2ch-article-current-article))) (when (and (not ignore) board article) (setq alist (navi2ch-load-info (navi2ch-article-get-info-file-name board article))) (dolist (x alist) (setq article (navi2ch-put-alist (car x) (cdr x) article))) article))) (defun navi2ch-article-write-message (&optional sage cite) (interactive) (if (cdr (assq 'stop navi2ch-article-current-article)) (error "$B%9%l%9%H$5$l$?%9%l$K$O=q$-9~$a$^$;$s(B")) (when (not (navi2ch-board-from-file-p navi2ch-article-current-board)) (navi2ch-article-save-number) (navi2ch-message-write-message navi2ch-article-current-board navi2ch-article-current-article nil sage cite))) (defun navi2ch-article-write-sage-message () (interactive) (navi2ch-article-write-message 'sage)) (defun navi2ch-article-write-cite-message () (interactive) (navi2ch-article-write-message 'sage 'cite)) (defun navi2ch-article-str-to-num (str) "$B%l%9;2>H$NJ8;zNs$r?t;z$+?t;z$N(B list $B$KJQ49!#(B" (cond ((string-match "\\([0-9]+\\)-\\([0-9]+\\)" str) (let* ((n1 (string-to-number (match-string 1 str))) (n2 (string-to-number (match-string 2 str))) (min (max (min n1 n2) 1)) (i (min (max n1 n2) (1+ (navi2ch-article-get-article-length)))) list) (while (>= i min) (push i list) (setq i (1- i))) list)) ((string-match "\\([0-9]+,\\)+[0-9]+" str) (mapcar 'string-to-number (split-string str ","))) (t (string-to-number str)))) (defun navi2ch-article-get-article-length () (let* ((board (or navi2ch-article-current-board navi2ch-popup-article-current-board)) (article (or navi2ch-article-current-article navi2ch-popup-article-current-article)) (buffer-name (navi2ch-article-get-buffer-name board article))) (with-current-buffer (or (get-buffer buffer-name) (progn (navi2ch-article-view-article board article nil nil nil t) buffer-name)) (length navi2ch-article-message-list)))) (defun navi2ch-article-get-number-list (number-property &optional limit) (or (and (string-match "[^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ]" number-property) (let (nums) (dolist (msg navi2ch-article-message-list (nreverse nums)) (when (listp (cdr msg)) (let ((date (cdr (assq 'date (cdr msg)))) (name (cdr (assq 'name (cdr msg))))) (when (or (and date (string-match " ID:\\([^ ][^ ][^ ][^ ]+\\)" ;; ID:??? $B$O%9%k!<(B date) (string-match (regexp-quote (match-string 1 date)) number-property)) (and name (string-match "$B"!(B\\([^ ]+\\)" name) (string-match (regexp-quote (match-string 1 name)) number-property))) (if (and (numberp limit) (>= (car msg) limit) nums) (return (car nums)) (push (car msg) nums)))))))) (navi2ch-article-str-to-num (japanese-hankaku number-property)))) (defun navi2ch-article-select-current-link (&optional browse-p) (interactive "P") (let ((type (get-text-property (point) 'navi2ch-link-type)) (prop (get-text-property (point) 'navi2ch-link))) (cond ((eq type 'number) (navi2ch-article-select-current-link-number (navi2ch-article-get-number-list prop) browse-p)) ((eq type 'url) (navi2ch-article-select-current-link-url prop browse-p nil)) ((eq type 'content) (navi2ch-article-save-content))))) (defun navi2ch-article-number-list-to-url (number-list) (navi2ch-article-to-url navi2ch-article-current-board navi2ch-article-current-article (if (numberp number-list) number-list (apply #'min number-list)) (if (numberp number-list) number-list (apply #'max number-list)) t)) (defun navi2ch-article-select-current-link-number (prop browse-p) ;; prop $B$O!V?t$N(B list$B!W$+!V?t!W!#(B (cond (browse-p (navi2ch-browse-url-internal (navi2ch-article-number-list-to-url prop))) ((eq navi2ch-article-select-current-link-number-style 'popup) (navi2ch-popup-article (if (listp prop) prop (list prop)))) ((eq navi2ch-article-select-current-link-number-style 'jump) (let ((navi2ch-article-redraw-when-goto-number t)) (navi2ch-article-goto-number (if (listp prop) (car prop) prop) t t))) ;; (eq navi2ch-article-select-current-link-number-style 'auto) ((numberp prop) (let ((hide (cdr (assq 'hide navi2ch-article-current-article))) (imp (cdr (assq 'important navi2ch-article-current-article))) (range navi2ch-article-view-range) (len (length navi2ch-article-message-list))) (if (cond (navi2ch-article-hide-mode (memq prop hide)) (navi2ch-article-important-mode (memq prop imp)) (t (and (navi2ch-article-inside-range-p prop range len) (not (memq prop hide))))) (navi2ch-article-goto-number prop t t) (navi2ch-popup-article (list prop))))) (t (navi2ch-popup-article prop)))) (defun navi2ch-article-select-current-link-url (url browse-p popup) (if (and (not browse-p) (navi2ch-2ch-url-p url)) (progn (if popup (navi2ch-popup-article-exit) (and (get-text-property (point) 'help-echo) (let ((buffer-read-only nil)) (navi2ch-article-change-help-echo-property (point) (function navi2ch-article-help-echo))))) (navi2ch-goto-url url)) (navi2ch-browse-url-internal url))) (defun navi2ch-article-mouse-select (e) (interactive "e") (mouse-set-point e) (navi2ch-article-select-current-link)) (defun navi2ch-article-recenter (num) "NUM $BHVL\$N%l%9$r2hLL$N0lHV>e$K!#(B" (let ((win (if (eq (window-buffer) (current-buffer)) (selected-window) (get-buffer-window (current-buffer))))) (if (and win (numberp num)) (set-window-start win (cdr (assq 'point (navi2ch-article-get-message num))))))) (defun navi2ch-article-goto-number-or-board () "$BF~NO$5$l$??t;z$N0LCV$K0\F0$9$k$+!"F~NO$5$l$?HD$rI=<($9$k!#(B $BL>A0$,?t;z$J$i$P%G%U%)%k%H$O$=$NL>A0$N?t;z!#(B" (interactive) (let (default alist ret) (setq default (let* ((msg (navi2ch-article-get-message (navi2ch-article-get-current-number))) (from (cdr (assq 'name msg))) (data (cdr (assq 'data msg)))) (or (and from (string-match "^[^$B"!(B0-9$B#0(B-$B#9(B]*\\([0-9$B#0(B-$B#9(B]+\\)" from) (japanese-hankaku (match-string 1 from))) (and data (string-match "[0-9$B#0(B-$B#9(B]+" data) (japanese-hankaku (match-string 0 data))) nil))) (setq alist (mapcar (lambda (x) (cons (cdr (assq 'id x)) x)) navi2ch-list-board-name-list)) (setq ret (completing-read (concat "Input number or board" (and default (format "(%s)" default)) ": ") alist nil nil)) (setq ret (if (string= ret "") default ret)) (if ret (let ((num (string-to-number ret))) (if (and (> num 0) (equal ret (number-to-string num))) (navi2ch-article-goto-number num t t) (let (board board-id) (setq board-id (try-completion ret alist)) (and (eq board-id t) (setq board-id ret)) (setq board (cdr (assoc board-id alist))) (if board (progn (when (eq (navi2ch-get-major-mode navi2ch-board-buffer-name) 'navi2ch-board-mode) (navi2ch-board-save-info navi2ch-board-current-board)) (navi2ch-article-exit) (navi2ch-bm-select-board board)) (error "No such board")))))))) (defun navi2ch-article-goto-number (num &optional save pop) "NUM $BHVL\$N%l%9$K0\F0!#(B" (interactive "nInput number: ") (when (and num (> num 0) navi2ch-article-message-list) (when (or (interactive-p) save) (navi2ch-article-push-point)) (catch 'break (let ((len (length navi2ch-article-message-list)) (range navi2ch-article-view-range) (first (caar navi2ch-article-message-list)) (last (caar (last navi2ch-article-message-list)))) (setq num (max first (min last num))) (unless (or navi2ch-article-hide-mode navi2ch-article-important-mode (if navi2ch-article-use-jit (condition-case nil (cdr (assq 'point (navi2ch-article-get-message num))) (error nil)) (navi2ch-article-inside-range-p num range len))) (if navi2ch-article-redraw-when-goto-number (if navi2ch-article-use-jit (let (buffer-read-only) (navi2ch-article-reinsert-partial-messages num num)) (navi2ch-article-fix-range num) (navi2ch-article-redraw)) (if (or (interactive-p) pop) (progn (when (or (interactive-p) save) (navi2ch-article-pop-point)) (navi2ch-popup-article (list num)) (throw 'break nil)) (setq num (1+ (- len (cdr range)))))))) (condition-case nil (goto-char (cdr (assq 'point (navi2ch-article-get-message num)))) (error nil)) (if navi2ch-article-goto-number-recenter (navi2ch-article-recenter (navi2ch-article-get-current-number)))) (force-mode-line-update t))) (defun navi2ch-article-goto-board (&optional board) "BOARD $B$G;XDj$5$l$?HD$K0\F0!#(B BOARD $B$,(B nil $B$J$i$P!"8=:_3+$$$F$$$k%9%l$NHD$K0\F0!#(B" (interactive) (navi2ch-list-goto-board (or board navi2ch-article-current-board))) (defun navi2ch-article-get-point (&optional point) (save-window-excursion (save-excursion (if point (goto-char point) (setq point (point))) (let ((num (navi2ch-article-get-current-number))) (navi2ch-article-goto-number num) (cons num (- point (point))))))) (defun navi2ch-article-pop-point () "stack $B$+$i(B pop $B$7$?0LCV$K0\F0$9$k!#(B" (interactive) (let ((point (pop navi2ch-article-point-stack))) (if point (progn (push (navi2ch-article-get-point (point)) navi2ch-article-poped-point-stack) (navi2ch-article-goto-number (car point)) (forward-char (cdr point))) (message "Stack is empty")))) (defun navi2ch-article-push-point (&optional point) "$B8=:_0LCV$+(B POINT $B$r(B stack $B$K(B push $B$9$k!#(B" (interactive) (setq navi2ch-article-poped-point-stack nil) (push (navi2ch-article-get-point point) navi2ch-article-point-stack) (message "Push current point")) (defun navi2ch-article-pop-poped-point () ; $BL>A0$@$;$'!"$C$F$+2?$+0c$&!#(B (interactive) (let ((point (pop navi2ch-article-poped-point-stack))) (if point (progn (push (navi2ch-article-get-point (point)) navi2ch-article-point-stack) (navi2ch-article-goto-number (car point)) (forward-char (cdr point))) (message "Stack is empty")))) (defun navi2ch-article-rotate-point () "stack $B$X(B push $B$7$?0LCV$r=d2s$9$k!#(B" (interactive) (let ((cur (navi2ch-article-get-point nil)) ; $B8=:_CO(B (top (pop navi2ch-article-point-stack))) ; $B%H%C%W(B (if top (progn (setq navi2ch-article-point-stack (append navi2ch-article-point-stack (list cur))) ; $B:G8eHx$XJ]B8(B (navi2ch-article-goto-number (car top)) ; $B%H%C%W$N(B (forward-char (cdr top))) ; $B0JA0$$$?J8;z$X(B (message "Stack is empty")))) (defun navi2ch-article-goto-last-message () "$B:G8e$N%l%9$X0\F0!#(B" (interactive) (navi2ch-article-goto-number (save-excursion (goto-char (point-max)) (navi2ch-article-get-current-number)) t)) (defun navi2ch-article-goto-first-message () "$B:G=i$N%l%9$X0\F0!#(B" (interactive) (navi2ch-article-goto-number (save-excursion (goto-char (point-min)) (navi2ch-article-get-current-number)) t)) (defun navi2ch-article-few-scroll-up (n) (interactive "P") (scroll-up (or n 1))) (defun navi2ch-article-few-scroll-down (n) (interactive "P") (scroll-down (or n 1))) (defun navi2ch-article-scroll-up () (interactive) (condition-case nil (scroll-up) (end-of-buffer (funcall navi2ch-article-through-next-function))) (force-mode-line-update t)) (defun navi2ch-article-scroll-down () (interactive) (condition-case nil (scroll-down) (beginning-of-buffer (funcall navi2ch-article-through-previous-function))) (force-mode-line-update t)) (defun navi2ch-article-through-ask-y-or-n-p (num title) "$BA0$N%3%^%s%I$HF1$8$+$G3NG'$9$k!#(B" (let* ((accept-value (if title t 'quit)) (prompt (if title (format "Type %s for %s " (single-key-description last-command-event) title) (format "The %s article. Type %s for quit " (if (< num 0) "first" "last") (single-key-description last-command-event)))) (e (navi2ch-read-event prompt))) (if (equal e last-command-event) accept-value (push e unread-command-events) nil))) (defun navi2ch-article-through-ask (no-ask num) "$B num 0) (point-max) (point-min))) (navi2ch-article-exit)) (ret ;;; (goto-char (if (> num 0) (point-max) (point-min))) (let ((window (get-buffer-window navi2ch-board-buffer-name))) (if window (progn (delete-window) (select-window window)) (switch-to-buffer navi2ch-board-buffer-name))) (if (zerop (funcall navi2ch-article-through-forward-line-function num)) (progn (recenter (/ navi2ch-board-window-height 2)) (navi2ch-bm-select-article)) (message "Can't through article"))) (t (message "Don't through article")))) (message "Don't through article")))) (defun navi2ch-article-through-next () "$Be(B?) $B$K!#(B" (interactive) (navi2ch-article-recenter (navi2ch-article-get-current-number))) (defun navi2ch-article-next-message () "$BO$rF@$k!#(B" (let ((msg (navi2ch-article-get-message num))) (when (stringp msg) (setq msg (navi2ch-article-parse-message msg))) (cdr (assq 'data msg)))) (defun navi2ch-article-cached-subject-minimum-size (board article) "$B%9%l%?%$%H%k$rF@$k$N$K==J,$J%U%!%$%k%5%$%:$r5a$a$k!#(B" (with-temp-buffer (let ((beg 0) (end 0) (n 1)) (while (and (= (point) (point-max)) (> n 0)) (setq beg end) (setq end (+ end 1024)) (setq n (car (cdr (navi2ch-board-insert-file-contents board (navi2ch-article-get-file-name board article) beg end)))) (forward-line)) end))) (defun navi2ch-article-cached-subject (board article) "$B%-%c%C%7%e$5$l$F$$$k(B dat $B%U%!%$%k$+$i%9%l%?%$%H%k$rF@$k!#(B" ;; "$B%-%c%C%7%e$5$l$F$$$k(B dat $B%U%!%$%k$d%9%l0lMw$+$i%9%l%?%$%H%k$rF@$k!#(B" (let ((state (navi2ch-article-check-cached board article)) subject) (if (eq state 'view) (with-current-buffer (navi2ch-article-get-buffer-name board article) (setq subject ; nil $B$K$J$k$3$H$,$"$k(B (cdr (assq 'subject navi2ch-article-current-article))))) (when (not subject) (if (eq state 'cache) (let* ((file (navi2ch-article-get-file-name board article)) (msg-list (navi2ch-article-get-message-list file 0 (navi2ch-article-cached-subject-minimum-size board article)))) (setq subject (cdr (assq 'subject (navi2ch-article-parse-message (cdar msg-list)))))))) (when (not subject) (let ((subject-list (if (equal (cdr (assq 'name board)) (cdr (assq 'name navi2ch-board-current-board))) navi2ch-board-subject-list ;;; (navi2ch-board-get-subject-list ;;; (navi2ch-board-get-file-name board)) ))) (setq subject (catch 'subject (dolist (s subject-list) (if (equal (cdr (assq 'artid article)) (cdr (assq 'artid s))) (throw 'subject (cdr (assq 'subject s))))))))) (when (not subject) (setq subject "navi2ch: ???")) ; $BJQ?t$K$7$F(B navi2ch-vars.el $B$KF~$l$k$Y$-(B? subject)) (eval-when-compile (defvar mark-active) (defvar deactivate-mark)) (defun navi2ch-article-get-link-text-subr (&optional point) "POINT ($B>JN,;~$O%+%l%s%H%]%$%s%H(B) $B$N%j%s%/@h$rF@$k!#(B" (setq point (or point (point))) (let (mark-active deactivate-mark) ; transient-mark-mode $B$,@Z$l$J$$$h$&(B (catch 'ret (when (or (eq major-mode 'navi2ch-article-mode) (eq major-mode 'navi2ch-popup-article-mode)) (let ((type (get-text-property point 'navi2ch-link-type)) (prop (get-text-property point 'navi2ch-link)) num-list num) (cond ((eq type 'number) (setq num-list (navi2ch-article-get-number-list prop (navi2ch-article-get-current-number))) (cond ((numberp num-list) (setq num num-list)) (t (setq num (car num-list)))) (let ((msg (navi2ch-article-get-message-string num))) (when msg (setq msg (navi2ch-replace-string navi2ch-article-citation-regexp "" msg t)) (setq msg (navi2ch-replace-string "\\(\\cj\\)\n+\\(\\cj\\)" "\\1\\2" msg t)) (setq msg (navi2ch-replace-string "\n+" " " msg t)) (throw 'ret (format "%s" (truncate-string-to-width (format "[%d]: %s" num msg) (eval navi2ch-article-display-link-width))))))) ((and navi2ch-article-get-url-text (eq type 'url)) (if (navi2ch-2ch-url-p prop) (let ((board (navi2ch-board-url-to-board prop)) (article (navi2ch-article-url-to-article prop))) (throw 'ret (format "%s" (truncate-string-to-width (if article (format "[%s]: %s" (cdr (assq 'name board)) (navi2ch-article-cached-subject board article)) (format "[%s]" (cdr (assq 'name board)))) (eval navi2ch-article-display-link-width)))))))))) nil))) (defun navi2ch-article-get-link-text (&optional point) "POINT ($B>JN,;~$O%+%l%s%H%]%$%s%H(B) $B$N%j%s%/@h$rF@$k!#(B $B7k2L$r(B help-echo $B%W%m%Q%F%#$K@_Dj$7$F%-%c%C%7%e$9$k!#(B" (setq point (or point (point))) (let ((help-echo-prop (get-text-property point 'help-echo)) mark-active deactivate-mark) ; transient-mark-mode $B$,@Z$l$J$$$h$&(B (unless (or (null help-echo-prop) (stringp help-echo-prop)) (setq help-echo-prop (navi2ch-article-get-link-text-subr point)) (let ((buffer-read-only nil)) (navi2ch-article-change-help-echo-property point help-echo-prop))) help-echo-prop)) (defun navi2ch-article-change-help-echo-property (point value) (unless (get-text-property point 'help-echo) (error "POINT (%d) does not have property help-echo" point)) (let* ((end (or (min (next-single-property-change point 'help-echo) (or (navi2ch-next-property point 'navi2ch-link) (point-max))) point)) (start (or (max (previous-single-property-change end 'help-echo) (or (navi2ch-previous-property end 'navi2ch-link) (point-min))) point))) (put-text-property start end 'help-echo value))) (defvar navi2ch-article-disable-display-link-commands '(navi2ch-show-url-at-point navi2ch-article-select-current-link eval-expression) "$B$3$N%3%^%s%I$N8e$G$O(B minibuffer $B$K%j%s%/@h$rI=<($7$J$$!#(B") (defvar navi2ch-article-info-cache nil) (defvar navi2ch-article-info-cache-limit 100) (defun navi2ch-article-display-link-minibuffer (&optional point) "POINT ($B>JN,;~$O%+%l%s%H%]%$%s%H(B) $B$N%j%s%/@h$r(B minibuffer $B$KI=<(!#(B" (unless (or isearch-mode (memq this-command navi2ch-article-disable-display-link-commands)) (save-match-data (save-excursion (let ((text (navi2ch-article-get-link-text point))) (if (stringp text) (message "%s" text))))))) (defun navi2ch-article-help-echo (window-or-extent &optional object position) (save-match-data (save-excursion (navi2ch-ifxemacs (when (extentp window-or-extent) (setq object (extent-object window-or-extent)) (setq position (extent-start-position window-or-extent)))) (when (buffer-live-p object) (with-current-buffer object (navi2ch-article-get-link-text position)))))) (defsubst navi2ch-article-load-article-summary (board) (navi2ch-load-info (navi2ch-board-get-file-name board navi2ch-article-summary-file-name))) (defsubst navi2ch-article-save-article-summary (board summary) (navi2ch-save-info (navi2ch-board-get-file-name board navi2ch-article-summary-file-name) summary)) (defun navi2ch-article-next-link () "$B(B start: $B%(%s%3!<%I$5$l$?NN0h$N@hF,(B($B%G%j%_%?$r4^$`(B)$B$N%]%$%s%H(B end: $B%(%s%3!<%I$5$l$?NN0h$NKvHx(B($B%G%j%_%?$Nl9gKvHx$N%G%j%_%?$,L5$/@hF,$N%G%j%_%?$N$_$"$k$3$H$r0UL#$9$k!#(B" ;; start $B$,(B nil $B$N>l9g@hF,$N%G%j%_%?$,L5$/KvHx$N%G%j%_%?$N$_$"$k$3$H$r0UL#$7!"(B ;; $B",(B $B$9$k$H!"8mH=Dj$,B?$=$&$J$N$G$d$a!#(B (let ((dels (list (cons 'base64 (cons navi2ch-base64-begin-delimiter-regexp navi2ch-base64-end-delimiter-regexp)) (cons 'base64 (cons navi2ch-base64-susv3-begin-delimiter-regexp navi2ch-base64-susv3-end-delimiter-regexp)) (cons 'uudecode (cons navi2ch-uuencode-begin-delimiter-regexp navi2ch-uuencode-end-delimiter-regexp)))) regions type fname start end) (save-excursion (dolist (d dels) (goto-char (point-min)) (while (re-search-forward (cadr d) nil t) (setq type (car d) start (match-beginning 0) fname (navi2ch-match-string-no-properties 2) end (and (re-search-forward (cddr d) nil t) (navi2ch-line-beginning-position 2)) regions (cons (list type fname start end) regions))))) (when sort (setq regions (sort regions (lambda (r1 r2) (< (nth 2 r1) (nth 2 r2))))) ;; end $B$,(B nil $B$O!":G8e$N$_5v$9!#(B (let ((r regions)) (while (> (length r) 1) (when (null (nth 3 (car r))) (setq regions (delete (car r) regions))) (setq r (cdr r))))) regions)) (defun navi2ch-article-decode-message (prefix) "$B8=:_$N%l%9$r%G%3!<%I$9$k!#(B PREFIX $B$r;XDj$7$?>l9g$O!"(Bmark $B$N$"$k%l%9$H8=:_$N%l%9$N4V$NHO0O$,BP>]$K$J$k!#(B $BJ#?t%l%9$KJ,3d$5$l$?%(%s%3!<%I%;%/%7%g%s$r%G%3!<%I$7$?$$>l9g$O!"(B $B%(%s%3!<%I%;%/%7%g%s$N@hF,$N%l%9$G!"(BPREFIX $B$r;XDj$;$:$Kl9g!"BP1~$9$kKvHx$N%G%j%_%?$,(B $B8=$l$k%l%9$^$G%G%3!<%I$9$kNN0h$r3HD%$9$k!#(B $B%G%j%_%?$H$_$J$9$N$O!"(B `navi2ch-base64-begin-delimiter-regexp' `navi2ch-base64-end-delimiter-regexp' `navi2ch-base64-susv3-begin-delimiter-regexp' `navi2ch-base64-susv3-end-delimiter-regexp' `navi2ch-uuencode-begin-delimiter-regexp' `navi2ch-uuencode-end-delimiter-regexp' $B$N(B3$BAH$N$$$:$l$+$K%^%C%A$9$k9T$H$9$k!#(B" (interactive "P") (let* ((num (navi2ch-article-get-current-number)) (num2 (or (and prefix (car (navi2ch-article-get-point (mark)))) num)) (abuf (current-buffer)) (nmax (caar (last navi2ch-article-message-list))) end regions) (when (> num num2) (setq num (prog1 num2 (setq num2 num)))) (with-temp-buffer (while (<= num num2) (insert (or (with-current-buffer abuf (navi2ch-article-get-message-string num)) "") "\n") (setq num (1+ num))) (setq end (point)) (setq regions (navi2ch-article-detect-encoded-regions 'sort)) ;; $BJ#?t%l%9$KJ,3d$5$l$?$b$N$rC5$9!#(B (when (and (not prefix) regions) (while (and (null (nth 3 (car (last regions)))) (< (nth 2 (car (last regions))) end) (<= num nmax)) (insert (or (with-current-buffer abuf (navi2ch-article-get-message-string num)) "") "\n") (setq num (1+ num)) (setq regions (navi2ch-article-detect-encoded-regions 'sort))) (while (and regions (>= (nth 2 (car (last regions))) end)) (setq regions (delete (car (last regions)) regions)))) (unless regions (let ((c (navi2ch-read-char-with-retry "(u)udecode or (b)ase64: " "Please answer u, or b. (u)udecode or (b)ase64: " '(?u ?U ?b ?B)))) (cond ((memq c '(?u ?U)) (setq regions (list (list 'uudecode nil nil nil)))) ((memq c '(?b ?B)) (setq regions (list (list 'base64 nil nil nil))))))) (dolist (r regions) (condition-case err (cond ((eq (car r) 'uudecode) (navi2ch-uudecode-write-region (or (nth 2 r) (point-min)) (or (nth 3 r) end))) ((eq (car r) 'base64) (navi2ch-base64-write-region (or (nth 2 r) (point-min)) (or (nth 3 r) end)))) (error (ding) (message "%s" (error-message-string err)) (sit-for 1))))))) (defun navi2ch-article-auto-decode-encoded-section () "$B%(%s%3!<%I$5$l$?%;%/%7%g%s$r%G%3!<%I$7$?$b$N$X$N%"%s%+!<$K$9$k!#(B" (let ((regions (delq nil (mapcar (lambda (r) (when (and (nth 2 r) (nth 3 r)) (list (nth 0 r) (nth 1 r) (copy-marker (nth 2 r)) ;; line-end (copy-marker (1- (nth 3 r)))))) (navi2ch-article-detect-encoded-regions)))) type filename begin end encoded decoded) (dolist (r regions) (setq type (nth 0 r) filename (nth 1 r) begin (nth 2 r) end (nth 3 r) encoded (cond ((eq type 'uudecode) (buffer-substring-no-properties begin (progn (goto-char end) (navi2ch-line-beginning-position 2)))) ((eq type 'base64) (buffer-substring-no-properties (progn (goto-char begin) (navi2ch-line-beginning-position 2)) (progn (goto-char end) (navi2ch-line-end-position 0))))) decoded nil) (with-temp-buffer (insert encoded) (condition-case nil (progn (cond ((eq type 'uudecode) (goto-char (point-min)) (while (search-forward "$B!)(B" nil t) ;for 2ch (replace-match "&#" nil t)) (navi2ch-uudecode-region (point-min) (point-max))) ((eq type 'base64) (base64-decode-region (point-min) (point-max)))) (setq decoded (buffer-string))) (error nil))) (when decoded (let ((fname (unless (or (null filename) (equal filename "")) filename)) part-begin) (delete-region begin end) (goto-char begin) (insert (navi2ch-propertize "> " 'face 'navi2ch-article-auto-decode-face) (navi2ch-propertize (format "%s" (or fname "$BL>L5$7%U%!%$%k$5$s(B")) 'face '(navi2ch-article-url-face navi2ch-article-auto-decode-face) 'link t 'mouse-face navi2ch-article-mouse-face 'file-name fname 'navi2ch-link-type 'content 'navi2ch-link decoded)) (put-text-property begin (1+ begin) 'auto-decode-text 'off) (put-text-property (+ 2 begin) (+ 3 begin) 'link-head t) (setq part-begin (point)) (insert (format " (%.1fKB)\n" (/ (length decoded) 1024.0))) (put-text-property part-begin (point) 'face 'navi2ch-article-auto-decode-face) (add-text-properties begin (point) (list 'auto-decode t 'hard t)) (when navi2ch-article-auto-decode-insert-text (forward-line -1) (navi2ch-article-auto-decode-text-on)))) (set-marker begin nil) (set-marker end nil)))) (defun navi2ch-article-auto-decode-text-on (&optional coding-system compress) (save-excursion (beginning-of-line) (let* ((point (next-single-property-change (point) 'navi2ch-link nil (navi2ch-line-end-position))) (content (get-text-property point 'navi2ch-link)) (filename (get-text-property point 'file-name)) ret) (when (and (eq (get-text-property (point) 'auto-decode-text) 'off) content) (with-temp-buffer (let ((buffer-file-coding-system 'binary) (coding-system-for-read 'binary) (coding-system-for-write 'binary) exit-status) (insert content) ;; extract (cond ((or (eq compress 'gzip) (and (null compress) filename (string-match "\\.t?gz$" filename))) (setq exit-status (let ((default-directory (navi2ch-default-directory))) (apply 'call-process-region (point-min) (point-max) navi2ch-net-gunzip-program t t nil navi2ch-net-gunzip-args))) (unless (= exit-status 0) (erase-buffer) (insert content))) ((or (eq compress 'bzip2) (and (null compress) filename (string-match "\\.bz2$" filename) (navi2ch-which navi2ch-bzip2-program))) (setq exit-status (let ((default-directory (navi2ch-default-directory))) (apply 'call-process-region (point-min) (point-max) navi2ch-bzip2-program t t nil navi2ch-bzip2-args))) (unless (= exit-status 0) (erase-buffer) (insert content)))) ;; decode (unless coding-system (let ((detect (detect-coding-region (point-min) (point-max))) name) (setq coding-system (or (car-safe detect) detect) name (navi2ch-ifxemacs (coding-system-name (coding-system-base coding-system)) (coding-system-base coding-system))) (when (memq name '(raw-text binary)) ;$BE,Ev(B (setq ret 'binary coding-system nil content nil)))) (when coding-system (decode-coding-region (point-min) (point-max) coding-system) (setq content (buffer-string))))) (when content (setq ret t) (let ((buffer-read-only nil)) (put-text-property (point) (1+ (point)) 'auto-decode-text 'on) (forward-line) (setq point (point)) (insert content) (add-text-properties point (point) (list 'auto-decode t 'hard t 'face 'navi2ch-article-auto-decode-face)) (set-buffer-modified-p nil)))) ret))) (defun navi2ch-article-auto-decode-text-off () (when (get-text-property (point) 'auto-decode) (let ((buffer-read-only nil) (start (or (and (get-text-property (point) 'auto-decode-text) (point)) (navi2ch-previous-property (point) 'auto-decode-text))) bs be) (when (eq (get-text-property start 'auto-decode-text) 'on) (put-text-property start (1+ start) 'auto-decode-text 'off) (save-excursion (goto-char start) (forward-line) (setq bs (point) be (min (next-single-property-change bs 'auto-decode nil (point-max)) (next-single-property-change bs 'auto-decode-text nil (point-max))))) (delete-region bs be) (when (>= (point) bs) (forward-line -1)) (set-buffer-modified-p nil))))) (defun navi2ch-article-auto-decode-toggle-text (&optional ask) "$B%(%s%3!<%I$5$l$?%;%/%7%g%s$r%G%3!<%I$7$?$b$N$NI=<($r@Z$j49$($k!#(B ASK $B$,(B non-nil $B$@$H!"%G%3!<%I$7$?$b$N$NJ8;z%3!<%I$H05=L7A<0$rJ9$$$F$/$k!#(B" (interactive "P") (if (not (get-text-property (point) 'auto-decode)) (error "Decoded text is not here") (if (eq (or (get-text-property (point) 'auto-decode-text) (get-text-property (navi2ch-previous-property (point) 'auto-decode-text) 'auto-decode-text)) 'on) (navi2ch-article-auto-decode-text-off) (let* ((cs (and ask (read-coding-system "Coding-system (guess): "))) (ch (and ask (navi2ch-read-char "Compression type (guess): g)zip b)zip2 n)one: "))) (cmp (cond ((eq ch ?g) 'gzip) ((eq ch ?b) 'bzip2) ((eq ch ?n) t))) ret) (message "Inserting decoded content...") (setq ret (navi2ch-article-auto-decode-text-on cs cmp)) (cond ((eq ret 'binary) (message "Content may be a binary")) (ret (message "Inserting decoded content...done")) (t (message "Not inserted"))))))) (defun navi2ch-article-save-content () (interactive) (let ((prop (get-text-property (point) 'navi2ch-link)) (default-filename (get-text-property (point) 'file-name)) filename) (when default-filename (setq default-filename (file-name-nondirectory default-filename))) (setq filename (read-file-name (if default-filename (format "Save file (default `%s'): " default-filename) "Save file: ") nil default-filename)) (when (file-directory-p filename) (if default-filename (setq filename (expand-file-name default-filename filename)) (error "%s is a directory" filename))) (if (not (file-writable-p filename)) (error "File not writable: %s" filename) (with-temp-buffer (let ((buffer-file-coding-system 'binary) (coding-system-for-write 'binary) ;; auto-compress-mode $B$r(B disable $B$K$9$k(B (inhibit-file-name-operation 'write-region) (inhibit-file-name-handlers (cons 'jka-compr-handler inhibit-file-name-handlers))) (insert prop) (if (or (not (file-exists-p filename)) (y-or-n-p (format "File `%s' exists; overwrite? " filename))) (write-region (point-min) (point-max) filename))))))) (defun navi2ch-article-textize-article (&optional dir-or-file buffer) (interactive) (let* ((article navi2ch-article-current-article) (board navi2ch-article-current-board) (id (cdr (assq 'id board))) (subject (cdr (assq 'subject article))) (basename (format "%s_%s.txt" id (cdr (assq 'artid article)))) dir file) (and dir-or-file (file-directory-p dir-or-file) (setq dir dir-or-file)) (setq file (if (or (not dir-or-file) (and dir (interactive-p))) (expand-file-name (read-file-name "Write thread to file: " dir nil nil basename)) (expand-file-name basename dir))) (and buffer (with-current-buffer buffer (goto-char (point-max)) (insert (format "
%s
\n" file subject)))) (when navi2ch-article-view-range (setq navi2ch-article-view-range nil) (navi2ch-article-redraw)) (let ((coding-system-for-write navi2ch-coding-system)) (navi2ch-write-region (point-min) (point-max) file)) (message "Wrote %s" file))) ;; shut up XEmacs warnings (eval-when-compile (defvar w32-start-process-show-window)) (defun navi2ch-article-call-aadisplay (str) (let* ((coding-system-for-write navi2ch-article-aadisplay-coding-system) (file (expand-file-name (make-temp-name (navi2ch-temp-directory))))) (unwind-protect (progn (with-temp-file file (insert str)) (let ((w32-start-process-show-window t) ; for meadow (default-directory (navi2ch-default-directory))) (call-process navi2ch-article-aadisplay-program nil nil nil file))) (ignore-errors (delete-file file))))) (defun navi2ch-article-popup-dialog (str) (navi2ch-ifxemacs (ignore str) ; $B$H$j$"$($:2?$b$7$J$$(B (x-popup-dialog t (cons "navi2ch" (mapcar (lambda (x) (cons (if (string= x "") " " x) t)) (split-string str "\n")))))) (defun navi2ch-article-view-aa () (interactive) (funcall navi2ch-article-view-aa-function (cdr (assq 'data (navi2ch-article-get-message (navi2ch-article-get-current-number)))))) (defun navi2ch-article-set-summary-element (board article remove-seen) "BOARD, ARTICLE $B$KBP1~$7$?>pJs$r(B article-summary $B$KJ]B8$9$k!#(B" (let* ((summary (navi2ch-article-load-article-summary board)) (artid (cdr (assq 'artid article))) (element (cdr (assoc artid summary)))) (navi2ch-article-summary-element-set-seen element (unless remove-seen (with-current-buffer (navi2ch-article-get-buffer-name board article) (length navi2ch-article-message-list)))) (navi2ch-article-summary-element-set-access-time element (current-time)) (setq summary (navi2ch-put-alist artid element summary)) (navi2ch-article-save-article-summary board summary))) (defun navi2ch-article-add-board-bookmark () (interactive) (navi2ch-board-add-bookmark-subr navi2ch-article-current-board navi2ch-article-current-article)) (defun navi2ch-article-add-global-bookmark (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Bookmark ID: "))) (navi2ch-bookmark-add bookmark-id navi2ch-article-current-board navi2ch-article-current-article)) (defun navi2ch-article-buffer-list () "`navi2ch-article-mode' $B$N(B buffer $B$N(B list $B$rJV$9!#(B" (let (list) (dolist (x (buffer-list)) (when (with-current-buffer x (eq major-mode 'navi2ch-article-mode)) (setq list (cons x list)))) (nreverse list))) (defun navi2ch-article-toggle-sticky () "$B8=:_$N%P%C%U%!$N(B sticky $B%b!<%I$r(B toggle $B$9$k!#(B" (interactive) (setq navi2ch-article-sticky-mode (not navi2ch-article-sticky-mode)) (force-mode-line-update) (if navi2ch-article-sticky-mode (message "Marked as sticky") (message "Marked as non-sticky"))) (defun navi2ch-article-current-buffer (&optional sticky) "BUFFER-LIST $B$N0lHV:G=i$N(B `navi2ch-article-mode' $B$N(B buffer $B$rJV$9!#(B STICKY $B$,(B non-nil $B$N$H$-$O0lHV:G=i$N(B sticky article buffer $B$rJV$9!#(B" (let ((list (buffer-list))) (catch 'loop (while list (when (with-current-buffer (car list) (and (eq major-mode 'navi2ch-article-mode) (or (not sticky) navi2ch-article-sticky-mode))) (throw 'loop (car list))) (setq list (cdr list))) nil))) (defun navi2ch-article-forward-buffer (&optional sticky) "$Bl9g$O!"$=$N%l%9$r(B unfilter $B$H$7$F5-O?$9$k!#(B FUNC $B$O(B (NUMBER, LIST) $B$r0z?t$KA0(B (name)$B!"%a!<%k(B (mail)$B!"F|IU(B (date)$B!"(BID (id)$B!"%[%9%H(B $BL>(B(hostname)$B!"K\J8(B (body)$B!";2>H(B(reference) $B$+$i8!:w>r7o$rA*$V$3$H(B $B$,$G$-$^$9!#(B $B%Q!<%::Q$_$N%a%C%;!<%8$N$_$r8!:wBP>]$H$9$k$N$G!"$"$i$+$8$a(B `navi2ch-article-redraw-range' $B$r;H$&$J$I$7$F8!:w$7$?$$%a%C%;!<%8$r(B $BI=<($7$F$*$/$3$H!#(B" (interactive) (let* ((has-id (navi2ch-article-get-current-id)) (has-hostname (navi2ch-article-get-current-hostname)) (ch (navi2ch-read-char-with-retry (concat "Search for: n)ame m)ail d)ate " (and has-id "i)d ") (and has-hostname "h)ostname ") "b)ody s)ubject r)eference: ") nil (append '(?n ?m ?b ?s ?d ?r) (and has-id (list ?i)) (and has-hostname (list ?h)))))) (cond ((eq ch ?n) (navi2ch-article-search-name)) ((eq ch ?m) (navi2ch-article-search-mail)) ((eq ch ?d) (navi2ch-article-search-date)) ((eq ch ?i) (navi2ch-article-search-id)) ((eq ch ?h) (navi2ch-article-search-hostname)) ((eq ch ?b) (navi2ch-article-search-body)) ((eq ch ?r) (navi2ch-article-search-reference))))) (defun navi2ch-article-search-name (&optional name) (interactive) (unless name (setq name (navi2ch-read-string "Name: " (navi2ch-article-get-current-name) 'navi2ch-search-history))) (navi2ch-article-search-subr 'name (regexp-quote name))) (defun navi2ch-article-search-mail (&optional mail) (interactive) (unless mail (setq mail (navi2ch-read-string "Mail: " (navi2ch-article-get-current-mail) 'navi2ch-search-history))) (navi2ch-article-search-subr 'mail (regexp-quote mail))) (defun navi2ch-article-search-date (&optional date) (interactive) (unless date (setq date (navi2ch-read-string "Date: " (navi2ch-article-get-current-date) 'navi2ch-search-history))) (navi2ch-article-search-subr 'date (concat (regexp-quote date) (if (navi2ch-article-get-current-id) ".* ID:" "")))) (defun navi2ch-article-search-id (&optional id) (interactive) (unless id (setq id (navi2ch-read-string "ID: " (navi2ch-article-get-current-id) 'navi2ch-search-history))) (navi2ch-article-search-subr 'date (concat " ID:[^ ]*" (regexp-quote id)))) (defun navi2ch-article-search-hostname (&optional host) (interactive) (unless host (setq host (navi2ch-read-string "Host: " (navi2ch-article-get-current-hostname) 'navi2ch-search-history))) (navi2ch-article-search-subr 'date (concat "\\(?:\\[ \\|$BH/?.85(B:\\)" (regexp-quote host)))) (defun navi2ch-article-search-body (&optional body) (interactive) (unless body (setq body (navi2ch-read-string "Body: " (navi2ch-article-get-current-word-in-body) 'navi2ch-search-history))) (navi2ch-article-search-subr 'data (regexp-quote body))) (defun navi2ch-article-search-reference (&optional num) (interactive) (unless (and num (numberp num)) (setq num (read-number "Reference: " (navi2ch-article-get-current-number)))) (let ((num-regexp (navi2ch-fuzzy-regexp (number-to-string num))) (board navi2ch-article-current-board) (article navi2ch-article-current-article) num-list len) (dolist (msg navi2ch-article-message-list) (when (and (listp (cdr msg)) (or (string-match num-regexp (or (cdr (assq 'name (cdr msg))) "")) (catch 'result (with-temp-buffer (setq navi2ch-article-current-board board navi2ch-article-current-article article) (insert (or (cdr (assq 'data (cdr msg))) "")) (goto-char (point-min)) (while (re-search-forward (concat navi2ch-article-number-prefix-regexp navi2ch-article-number-number-regexp) nil t) (when (navi2ch-eq-or-memq num (navi2ch-article-str-to-num (japanese-hankaku (match-string 1)))) (throw 'result t)) (while (looking-at (concat navi2ch-article-number-separator-regexp navi2ch-article-number-number-regexp)) (when (navi2ch-eq-or-memq num (navi2ch-article-str-to-num (japanese-hankaku (match-string 1)))) (throw 'result t)) (goto-char (max (1+ (match-beginning 0)) (match-end 0)))))) nil))) (setq num-list (cons (car msg) num-list)))) (setq len (length num-list)) (if (= len 0) (message "No message found") (navi2ch-popup-article (nreverse num-list)) (message (format "%d message%s found" len (if (= len 1) "" "s")))))) (defun navi2ch-article-search-subr (field regexp) (let (num-list len) (dolist (msg navi2ch-article-message-list) (when (and (listp (cdr msg)) (string-match regexp (or (cdr (assq field (cdr msg))) ""))) (setq num-list (cons (car msg) num-list)))) (setq len (length num-list)) (if (= len 0) (message "No message found") (navi2ch-popup-article (nreverse num-list)) (message (format "%d message%s found" len (if (= len 1) "" "s")))))) (defun navi2ch-article-save-dat-file (board article) (interactive (list navi2ch-article-current-board navi2ch-article-current-article)) (let ((file (navi2ch-article-get-file-name board article))) (cond ((not (file-exists-p file)) (message ".dat $B%U%!%$%k$,$"$j$^$;$s!#$^$:%9%l$re=q$-$7$^$9$+(B? ")) (copy-file file newname t) (message "`%s' $B$KJ]B8$7$^$7$?!#(B" newname))))))) ;;; filter mode (navi2ch-set-minor-mode 'navi2ch-article-message-filter-mode " Filter" navi2ch-article-message-filter-mode-map) (defsubst navi2ch-article-get-message-filter-cache-file-name (board article) (concat (navi2ch-article-get-info-file-name board article) ".filter")) (defun navi2ch-article-save-message-filter-cache (&optional board article cache) (unless (and board article cache) (let ((buffer (get-buffer (navi2ch-article-get-buffer-name board article)))) (when buffer (with-current-buffer buffer (or board (setq board navi2ch-article-current-board)) (or article (setq article navi2ch-article-current-article)) (or cache (setq cache navi2ch-article-message-filter-cache)))))) (when cache (let ((file (navi2ch-article-get-message-filter-cache-file-name board article)) (alist (delq nil (mapcar (lambda (key) (let ((slot (assq key cache))) (and (cdr slot) slot))) navi2ch-article-save-message-filter-cache-keys)))) (if (and (null alist) (file-exists-p file)) (condition-case nil (delete-file file) (error nil)) (navi2ch-save-info file alist))))) (defun navi2ch-article-load-message-filter-cache (&optional board article) (navi2ch-load-info (navi2ch-article-get-message-filter-cache-file-name (or board navi2ch-article-current-board) (or article navi2ch-article-current-article)))) (defun navi2ch-article-toggle-replace-message (&optional prefix) "$B8=:_$N%l%9$NCV49$NM-8z!&L58z$r@Z$jBX$($k!#(B" (interactive "P") (let ((unfilter (cdr (assq 'unfilter navi2ch-article-current-article))) (rep (cdr (assq 'replace navi2ch-article-message-filter-cache))) (num (navi2ch-article-get-current-number)) (msg "No replacement cached")) (when (cdr (assq num rep)) (if (memq num unfilter) (setq unfilter (delq num unfilter) msg "Replace message") (setq unfilter (cons num unfilter) msg "Undo replace message")) (setq navi2ch-article-current-article (navi2ch-put-alist 'unfilter unfilter navi2ch-article-current-article)) (let ((buffer-read-only nil)) (navi2ch-article-save-view (navi2ch-article-reinsert-partial-messages num num))) (when (and prefix (memq num unfilter)) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'replace (delq (assq num rep) rep) navi2ch-article-message-filter-cache)) (let ((orig (cdr (assq 'original navi2ch-article-message-filter-cache))) (cache (cdr (assq 'cache navi2ch-article-message-filter-cache)))) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'original (delq (assq num orig) orig) navi2ch-article-message-filter-cache)) (setq navi2ch-article-message-filter-cache (navi2ch-put-alist 'cache (delq (assq num cache) cache) navi2ch-article-message-filter-cache))))) (message msg))) (defun navi2ch-article-toggle-message-filter (&optional prefix) "$B%U%#%k%?5!G=$N(B on/off $B$r@Z$jBX$($k!#(B PREFIX $B$,M?$($i$l$?>l9g$O!"(B $B%-%c%C%7%e$r%/%j%"$7!"%U%#%k%?5!G=$r(B on $B$K$7$F%9%l$rI=<($7$J$*$9!#(B" (interactive "P") (if (null prefix) (progn (setq navi2ch-article-message-filter-mode (not navi2ch-article-message-filter-mode)) (when (and navi2ch-article-message-filter-mode (null navi2ch-article-message-filter-cache)) (setq navi2ch-article-message-filter-cache (navi2ch-article-load-message-filter-cache)))) (when navi2ch-article-message-filter-cache ;; $B%U%#%k%?A0$N%l%9$N>uBV$r%-%c%C%7%e$+$iI|85(B (when navi2ch-article-message-filter-mode (dolist (slots (cdr (assq 'original navi2ch-article-message-filter-cache))) (let ((alist (navi2ch-article-get-message (car slots)))) (dolist (slot (cdr slots)) (when (cdr slot) (navi2ch-put-alist (car slot) (cdr slot) alist)))))) (setq navi2ch-article-current-article (navi2ch-put-alist 'hide (navi2ch-set-difference (cdr (assq 'hide navi2ch-article-current-article)) (cdr (assq 'hide navi2ch-article-message-filter-cache))) navi2ch-article-current-article)) (setq navi2ch-article-current-article (navi2ch-put-alist 'important (navi2ch-set-difference (cdr (assq 'important navi2ch-article-current-article)) (cdr (assq 'important navi2ch-article-message-filter-cache))) navi2ch-article-current-article)) ;; $B%-%c%C%7%e$r%/%j%"(B (setq navi2ch-article-message-filter-cache nil)) (setq navi2ch-article-message-filter-mode t)) (force-mode-line-update) (let ((buffer-read-only nil) (navi2ch-article-sort-message-filter-rules nil)) (navi2ch-article-save-view (erase-buffer) (navi2ch-article-insert-messages navi2ch-article-message-list navi2ch-article-view-range))) navi2ch-article-message-filter-mode) (defun navi2ch-article-add-message-filter-rule (&optional prefix) "$B%l%9$N%U%#%k%?>r7o$rBPOCE*$KDI2C$9$k!#(B" (interactive "P") (let* ((has-id (navi2ch-article-get-current-id)) (has-hostname (navi2ch-article-get-current-hostname)) (char (navi2ch-read-char-with-retry (concat "Filter by: n)ame m)ail " (and has-id "i)d ") (and has-hostname "h)ostname ") "b)ody s)ubject: ") nil (append '(?n ?m ?b ?s) (and has-id (list ?i)) (and has-hostname (list ?h)))))) (cond ((eq char ?n) (navi2ch-article-add-message-filter-by-name prefix)) ((eq char ?m) (navi2ch-article-add-message-filter-by-mail prefix)) ((eq char ?i) (navi2ch-article-add-message-filter-by-id prefix)) ((eq char ?h) (navi2ch-article-add-message-filter-by-hostname prefix)) ((eq char ?b) (navi2ch-article-add-message-filter-by-message prefix)) ((eq char ?s) (navi2ch-article-add-message-filter-by-subject prefix))))) (defun navi2ch-article-add-message-filter-cus (&optional prefix) "$B%l%9$N%U%#%k%?>r7o$r%+%9%?%`%(%G%#%?7A<0$GDI2C$9$k!#(B" (interactive "P") (let* ((has-id (navi2ch-article-get-current-id)) (has-hostname (navi2ch-article-get-current-hostname)) (char (navi2ch-read-char-with-retry (concat "Filter by: n)ame m)ail " (and has-id "i)d ") (and has-hostname "h)ostname ") "b)ody s)ubject: ") nil (append '(?n ?m ?b ?s) (and has-id (list ?i)) (and has-hostname (list ?h))))) (rule (cdr (assq char navi2ch-article-message-filter-default-rule-alist))) (default-rule (cdr (assq t navi2ch-article-message-filter-default-rule-alist))) (str (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (or (plist-get rule :string) (plist-get default-rule :string)))) (date (navi2ch-article-extract-date (navi2ch-article-get-current-date))) (article navi2ch-article-current-article) (board navi2ch-article-current-board)) (setq str (cond ((stringp str) str) ((functionp str) (funcall str)) (t (error "rule type missmatch: string"))) navi2ch-article-message-filter-wid-window-configuration (current-window-configuration)) (kill-buffer (get-buffer-create "*navi2ch Add filter*")) (pop-to-buffer (get-buffer-create "*navi2ch Add filter*")) (kill-all-local-variables) (buffer-disable-undo) (setq navi2ch-article-message-filter-wid-var (or (plist-get rule :var) (plist-get default-rule :var)) navi2ch-article-current-article article navi2ch-article-current-board board) (insert "navi2ch Filter Editor\n\nString: ") (setq navi2ch-article-message-filter-wid-string (widget-create 'editable-field str)) (insert "\nRule:\n") (setq navi2ch-article-message-filter-wid-rule (widget-create 'radio-button-choice :value (or (plist-get rule :rule) (plist-get default-rule :rule)) '(editable-field :tag "replace" :format "%t: %v" "$B$"$\$\!<$s(B") '(item :tag "hide" :value hide) '(item :tag "important" :value important) '(editable-field :tag "score" :format "%t: %v" "0"))) (insert "\n") (widget-create 'push-button :notify 'navi2ch-article-add-message-filter-cus-done "Done") (insert "\n\nMatch method:\n") (setq navi2ch-article-message-filter-wid-method (widget-create 'radio-button-choice :value (or (plist-get rule :match-method) (plist-get default-rule :match-method)) '(item :tag "substring" :value "s") '(item :tag "fuzzy" :value "f") '(item :tag "exact" :value "e") '(item :tag "regexp" :value "r"))) (insert "\nIgnore case: ") (setq navi2ch-article-message-filter-wid-case (widget-create 'toggle :value (or (plist-get rule :ignore-case) (plist-get default-rule :ignore-case)))) ;;; (widget-create 'radio-button-choice ;;; :value nil ;;; '(item :tag "On" :value t) ;;; '(item :tag "Off" :value nil))) (insert "Invert match: ") (setq navi2ch-article-message-filter-wid-invert ;;; (widget-create 'radio-button-choice ;;; :value nil ;;; '(item :tag "On" :value t) ;;; '(item :tag "Off" :value nil))) (widget-create 'toggle :value (or (plist-get rule :invert-match) (plist-get default-rule :invert-match)))) (insert "\nScope:\n") (setq navi2ch-article-message-filter-wid-scope (widget-create 'radio-button-choice :value (or (plist-get rule :scope) (plist-get default-rule :scope)) '(item :tag "board local" :value board-local) '(item :tag "article local" :value article-local) '(item :tag "global" :value nil))) (insert "\nFloating:\n") (setq navi2ch-article-message-filter-wid-float (widget-create 'radio-button-choice :value (or (plist-get rule :floating) (plist-get default-rule :floating)) '(item :tag "never" :value 0) '(item :tag "always" :value 1) '(item :tag "default" :value nil))) (insert "\nDate:\n") (setq navi2ch-article-message-filter-wid-date (widget-create 'radio-button-choice :value (and (or (plist-get rule :date) (plist-get default-rule :date)) date) `(editable-field :tag "date local" :format "%t: %v" ,date) '(item :tag "none specified" :value nil))) (insert "\n") (widget-create 'push-button :notify 'navi2ch-article-add-message-filter-cus-done "Done") (insert "\n") (use-local-map widget-keymap) (widget-setup) (goto-char (point-min)) (when (or (plist-get rule :auto) (plist-get default-rule :auto)) (navi2ch-article-add-message-filter-cus-done)))) (defun navi2ch-article-add-message-filter-cus-done (&rest ignore) (let* ((variable navi2ch-article-message-filter-wid-var) (char (widget-value navi2ch-article-message-filter-wid-method)) (scope (widget-value navi2ch-article-message-filter-wid-scope)) (match (list (widget-value navi2ch-article-message-filter-wid-string) (intern (if (widget-value navi2ch-article-message-filter-wid-case) char (upcase char))) :invert (widget-value navi2ch-article-message-filter-wid-invert) :board-id (and (or (eq scope 'board-local) (eq scope 'article-local)) (cdr (assq 'id navi2ch-article-current-board))) :artid (and (eq scope 'article-local) (cdr (assq 'artid navi2ch-article-current-article))) :float (widget-value navi2ch-article-message-filter-wid-float) :date (widget-value navi2ch-article-message-filter-wid-date))) (res (widget-value navi2ch-article-message-filter-wid-rule)) (rule-children (widget-get navi2ch-article-message-filter-wid-rule :children)) (result (cond ((or (eq res 'hide) (eq res 'important) (widget-apply (nth 0 rule-children) :active)) res) ((widget-apply (nth 3 rule-children) :active) (string-to-number res)) (t (error "You should select rule.")))) (current (assoc match (symbol-value variable)))) (set variable (cons (cons match result) (delq current (symbol-value variable)))) (navi2ch-auto-modify-variables (list variable)) (bury-buffer) (set-window-configuration navi2ch-article-message-filter-wid-window-configuration) (if (y-or-n-p "Apply new rules to current messages now? ") (navi2ch-article-toggle-message-filter t) (message "Don't apply now")))) (defun navi2ch-article-add-message-filter-by-name (&optional prefix) (interactive "P") (navi2ch-article-add-message-filter-rule-subr 'navi2ch-article-message-filter-by-name-alist "Name: " (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (navi2ch-article-get-current-name)))) (defun navi2ch-article-add-message-filter-by-mail (&optional prefix) (interactive "P") (navi2ch-article-add-message-filter-rule-subr 'navi2ch-article-message-filter-by-mail-alist "Mail: " (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (navi2ch-article-get-current-mail)))) (defun navi2ch-article-add-message-filter-by-id (&optional prefix) (interactive "P") (navi2ch-article-add-message-filter-rule-subr 'navi2ch-article-message-filter-by-id-alist "ID: " (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (navi2ch-article-get-current-id)))) (defun navi2ch-article-add-message-filter-by-message (&optional prefix) (interactive "P") (navi2ch-article-add-message-filter-rule-subr 'navi2ch-article-message-filter-by-message-alist "Body: " (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (navi2ch-article-get-current-word-in-body)))) (defun navi2ch-article-add-message-filter-by-subject (&optional prefix) (interactive "P") (navi2ch-article-add-message-filter-rule-subr 'navi2ch-article-message-filter-by-subject-alist "Subject: " (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (navi2ch-article-get-current-subject)))) (defun navi2ch-article-add-message-filter-by-hostname (&optional prefix) (interactive "P") (navi2ch-article-add-message-filter-rule-subr 'navi2ch-article-message-filter-by-hostname-alist "Hostname: " (if prefix (buffer-substring-no-properties (region-beginning) (region-end)) (navi2ch-article-get-current-hostname)))) (defun navi2ch-article-add-message-filter-rule-subr (variable prompt &optional initial-input) (let* ((match (navi2ch-article-read-message-filter-match prompt initial-input)) (current (assoc match (symbol-value variable))) (result (navi2ch-article-read-message-filter-result (cdr current)))) (set variable (cons (cons match result) (delq current (symbol-value variable)))) (navi2ch-auto-modify-variables (list variable)) (if (y-or-n-p "Apply new rules to current messages now? ") (navi2ch-article-toggle-message-filter t) (message "Don't apply now")))) (defun navi2ch-article-read-message-filter-match (prompt &optional initial-input) (let (str list) (when (y-or-n-p "Use extended matching? ") (let ((char (navi2ch-read-char-with-retry "Type: s)ubstring f)uzzy e)xact r)egxp: " nil '(?s ?f ?e ?r)))) (when (and (eq char ?r) initial-input) (setq initial-input (regexp-quote initial-input))) (unless (y-or-n-p "Ignore case? ") (setq char (upcase char))) (setq list (list initial-input (intern (char-to-string char)))) (when (y-or-n-p "Invert match? ") (setq list (plist-put list :invert t))))) (setq str (navi2ch-read-string prompt initial-input 'navi2ch-search-history)) (if (null list) str (setcar list str) (let ((options '("s)cope" "f)loating" "d)ate"))) (while (and options (y-or-n-p "Set other options? ")) (let ((char (navi2ch-read-char-with-retry (concat "Options: " (mapconcat #'identity options " ") ": ") nil (mapcar (lambda (x) (aref x (1- (string-match ")" x)))) options)))) (cond ((eq char ?s) (let ((char (navi2ch-read-char-with-retry "Scope: b)oard-local a)rticle-local d)efault: " nil '(?b ?a ?d)))) (when (memq char '(?b ?a)) (setq list (plist-put list :board-id (cdr (assq 'id navi2ch-article-current-board)))) (when (eq char ?a) (setq list (plist-put list :artid (cdr (assq 'artid navi2ch-article-current-article)))))) (setq options (delete "s)cope" options)))) ((eq char ?f) (let ((char (navi2ch-read-char-with-retry "Floating: n)ever a)lways d)efault: " nil '(?n ?a ?d)))) (cond ((eq char ?n) (setq list (plist-put list :float 0))) ((eq char ?a) (setq list (plist-put list :float 1)))) (setq options (delete "f)loating" options)))) ((eq char ?d) (when (y-or-n-p "Set the rule date local? ") (let ((date (navi2ch-read-string "Date local: " (navi2ch-article-extract-date (navi2ch-article-get-current-date))))) (when (not (string= date "")) (setq list (plist-put list :date date)))))))))) list))) (defun navi2ch-article-read-message-filter-result (&optional initial-input) (let ((char (navi2ch-read-char-with-retry "Result: r)eplace h)ide i)mportant s)core: " nil '(?r ?h ?i ?s)))) (cond ((eq char ?r) (navi2ch-read-string "Relace with: " (if (stringp initial-input) initial-input "$B$"$\$\!<$s(B"))) ((eq char ?h) 'hide) ((eq char ?i) 'important) ((eq char ?s) (string-to-number (navi2ch-read-string "Score: " (if (numberp initial-input) (number-to-string initial-input) "0"))))))) (defun navi2ch-article-remove-article () (interactive) (let ((board navi2ch-article-current-board) (article navi2ch-article-current-article)) (when (and board article) (navi2ch-article-exit) (navi2ch-bm-remove-article-subr board article)))) (defun navi2ch-article-orphan-p (board article) "BOARD $B$H(B ARTICLE $B$G;XDj$5$l$k%9%l$,%*%k%U%!%s$J>l9g!"(Bnon-nil $B$rJV$9!#(B" (cond ((navi2ch-bookmark-exist-all board article) nil) ((let ((subject-list (navi2ch-board-get-subject-list (navi2ch-board-get-file-name board))) (artid (cdr (assq 'artid article)))) (catch 'break (dolist (s subject-list) (if (equal (cdr (assq 'artid s)) artid) (throw 'break t))))) nil) (t t))) (defun navi2ch-article-url-at-point (point) "POINT $B$N2<$N%j%s%/$r;X$9(B URL $B$rF@$k!#(B" (let ((type (get-text-property point 'navi2ch-link-type)) (prop (get-text-property point 'navi2ch-link))) (cond ((eq type 'number) (navi2ch-article-number-list-to-url (navi2ch-article-get-number-list prop))) ((eq type 'url) prop)))) (defun navi2ch-article-show-sssp-icon () "sssp://$B$N%"%$%3%s$rI=<(!#(B" (interactive) (if (display-images-p) (let ((buffer-read-only nil) (sssp_dir (expand-file-name "sssp_icon/" navi2ch-directory)) url image file) (unless (file-directory-p sssp_dir) (make-directory sssp_dir)) (save-excursion (goto-char (point-min)) (while (re-search-forward (concat "sssp://\\([^ \t\n\r]+\\.\\(" (regexp-opt navi2ch-browse-url-image-extentions) "\\)\\)") nil t) (setq url (concat "http://" (match-string 1))) (when (string-match "/\\([^/]+\\)$" url) (setq file (expand-file-name (match-string 1 url) sssp_dir)) ;; $B%U%!%$%k$,4{$K%m!<%+%k$KB8:_$7$F$k$N$J$i%"%C%W%G!<%H$7$J$$(B ;; ($B99?7$OL5$5$=$&$@$7(B) (unless (file-exists-p file) (save-excursion (navi2ch-net-update-file url file))) (forward-line) (if (featurep 'xemacs) (set-extent-end-glyph (make-overlay (point) (point)) (make-glyph (vector 'gif :file file))) (insert-image (create-image file))) (put-text-property (1- (point)) (point) 'help-echo (navi2ch-propertize "[image]" 'display image)) (insert "\n"))))))) (defsubst navi2ch-article-jit-insert-1 (n cur diffpos wintop-pos start end) (when (and (<= start n) (<= n end)) (let* ((alist (cdr (assq n navi2ch-article-message-list))) (p (and (listp alist) (cdr (assq 'point (assq n navi2ch-article-message-list)))))) (when (or (null p) (= p (point-max))) (navi2ch-article-reinsert-partial-messages n n) (when (and cur diffpos) (let ((navi2ch-article-goto-number-recenter t)) (navi2ch-article-goto-number cur)) (goto-char (+ (point) diffpos 1)) (when wintop-pos (set-window-start (selected-window) (- (point) wintop-pos)))) (redisplay))))) (defun navi2ch-article-jit-insert () (let ((buffer (if (memq (current-buffer) navi2ch-article-jit-buffers) (current-buffer) (car navi2ch-article-jit-buffers)))) (if (buffer-live-p buffer) (let ((wintop-pos (and (eq (window-buffer) buffer) (- (point) (window-start))))) (with-current-buffer buffer (let ((n (navi2ch-article-get-current-number)) diffpos) (if (get-text-property (point) 'current-number) (setq diffpos -1) (setq diffpos (previous-single-property-change (point) 'current-number)) (when diffpos (setq diffpos (- (point) diffpos)))) (let ((i 1) (start (car navi2ch-article-jit-need-insert)) (end (cdr navi2ch-article-jit-need-insert)) (buffer-read-only nil) (repeat t)) (while (and repeat (or (and (<= start (- n i)) (<= (- n i) end)) (and (<= start (+ n i)) (<= (+ n i) end)))) (navi2ch-article-jit-insert-1 (+ n i) n diffpos wintop-pos start end) (navi2ch-article-jit-insert-1 (- n i) n diffpos wintop-pos start end) (setq i (1+ i)) (setq repeat (not (input-pending-p)))) (when repeat (setq navi2ch-article-jit-buffers (delq (current-buffer) navi2ch-article-jit-buffers)) (unless navi2ch-article-jit-buffers (when navi2ch-article-jit-timer (cancel-timer navi2ch-article-jit-timer) (setq navi2ch-article-jit-timer nil)))))))) (setq navi2ch-article-jit-buffers (delq buffer navi2ch-article-jit-buffers))))) (defun navi2ch-article-jit-reinsert-partial-messages (start &optional end) (let* ((nums (mapcar #'car navi2ch-article-message-list)) (len (length nums)) (last (car (last nums))) (cur-res (navi2ch-article-get-current-number)) range-list) (when (minusp start) (setq start (+ start last 1))) (if (null end) (setq end last) (when (minusp end) (setq end (+ end last 1))) (when (> start end) (setq start (prog1 end (setq end start))))) (navi2ch-article-reinsert-partial-messages start start) (navi2ch-article-reinsert-partial-messages end end) (setq navi2ch-article-jit-need-insert (if navi2ch-article-jit-need-insert (cons (min (car navi2ch-article-jit-need-insert) start) (max (cdr navi2ch-article-jit-need-insert) end)) (cons start end))) (push (current-buffer) navi2ch-article-jit-buffers) (unless navi2ch-article-jit-timer (setq navi2ch-article-jit-timer (run-with-idle-timer navi2ch-article-jit-interval t 'navi2ch-article-jit-insert))))) (defun navi2ch-article-jit-insert-messages (list range number) (let ((len (length list))) (if (navi2ch-article-inside-range-p number range len) (progn (navi2ch-article-reinsert-partial-messages 1 1) (navi2ch-article-reinsert-partial-messages number number) (navi2ch-article-reinsert-partial-messages len len) (setq navi2ch-article-jit-need-insert (cons 1 len)) (push (current-buffer) navi2ch-article-jit-buffers) (unless navi2ch-article-jit-timer (setq navi2ch-article-jit-timer (run-with-idle-timer navi2ch-article-jit-interval t 'navi2ch-article-jit-insert)))) ;; $BI=<(3+;O>l=j$,I=<(HO0O$K$J$$;~$O$^$k$J$2(B (navi2ch-article-insert-messages list range)))) (defun navi2ch-article-compress (&optional board article) (let (ignore) (when (eq major-mode 'navi2ch-article-mode) (if (navi2ch-board-from-file-p (or board navi2ch-article-current-board)) (setq ignore t) (or board (setq board navi2ch-article-current-board)) (or article (setq article navi2ch-article-current-article)))) (when (and (not ignore) board article (not (cdr (assq 'compressed article)))) (let* ((file (navi2ch-article-get-file-name board article)) (gzfile (concat file ".gz"))) (when (file-exists-p file) (with-temp-file gzfile (navi2ch-set-buffer-multibyte nil) (insert-file-contents file)) (delete-file file)) (setq article (navi2ch-put-alist 'compressed t article)) (navi2ch-article-save-info board article))))) (defun navi2ch-article-uncompress (&optional board article) (let (ignore) (when (eq major-mode 'navi2ch-article-mode) (if (navi2ch-board-from-file-p (or board navi2ch-article-current-board)) (setq ignore t) (or board (setq board navi2ch-article-current-board)) (or article (setq article navi2ch-article-current-article)))) (when (and (not ignore) board article (cdr (assq 'compressed article))) (let* ((gzfile (navi2ch-article-get-file-name board article)) (file (file-name-sans-extension gzfile))) (when (file-exists-p gzfile) (with-temp-file file (navi2ch-set-buffer-multibyte nil) (insert-file-contents gzfile)) (delete-file gzfile)) (setq article (navi2ch-put-alist 'compressed nil article)) (navi2ch-article-save-info board article))))) (run-hooks 'navi2ch-article-load-hook) ;;; navi2ch-article.el ends here navi2ch/navi2ch-articles.el000066400000000000000000000113771173560164300161070ustar00rootroot00000000000000;;; navi2ch-articles.el --- Article List Module for Navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2008 by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-articles) (defconst navi2ch-articles-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch) (defvar navi2ch-articles-mode-map nil) (unless navi2ch-articles-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-bm-mode-map) ;; (define-key navi2ch-articles-mode-map "q" 'navi2ch-articles-exit) (define-key map "d" 'navi2ch-articles-delete) (define-key map "md" 'navi2ch-articles-delete-mark-aritcle) (define-key map "R" 'navi2ch-articles-remove-article) (define-key map "mR" 'navi2ch-articles-remove-mark-article) (define-key map "s" 'navi2ch-articles-sync) (setq navi2ch-articles-mode-map map))) (defvar navi2ch-articles-mode-menu-spec (navi2ch-bm-make-menu-spec "Articles" nil)) (defvar navi2ch-articles-board '((name . "$BI=<(%9%l0lMw(B") (type . articles) (id . "#articles"))) ;;; navi2ch-bm callbacks (defun navi2ch-articles-set-property (begin end item) (put-text-property begin end 'buffer item)) (defun navi2ch-articles-get-property (point) (get-text-property point 'buffer)) (defun navi2ch-articles-get-article (item) (when (and item (buffer-live-p item)) (with-current-buffer item navi2ch-article-current-article))) (defun navi2ch-articles-get-board (item) (when (and item (buffer-live-p item)) (with-current-buffer item navi2ch-article-current-board))) (defun navi2ch-articles-exit () (run-hooks 'navi2ch-articles-exit-hook)) ;; regist board (navi2ch-bm-regist-board 'articles 'navi2ch-articles navi2ch-articles-board) ;;; navi2ch-articles functions (defun navi2ch-articles-insert-subjects () (let ((i 1)) (dolist (x (navi2ch-article-buffer-list)) (let ((article (navi2ch-articles-get-article x)) (board (navi2ch-articles-get-board x))) (navi2ch-bm-insert-subject x i (cdr (assq 'subject article)) (format "[%s]" (cdr (assq 'name board)))) (setq i (1+ i)))))) (defun navi2ch-articles-delete () "$B$=$N9T$r(B articles $B$+$i:o=|$7$F!"$=$N(B article buffer $B$b>C$9!#(B" (interactive) (let ((buf (save-excursion (beginning-of-line) (navi2ch-articles-get-property (point))))) (if buf (let ((buffer-read-only nil)) (kill-buffer buf) (delete-region (save-excursion (beginning-of-line) (point)) (save-excursion (forward-line) (point))) (and (eobp) (not (bobp)) (forward-line -1))) (message "Can't select this line!")))) (defun navi2ch-articles-delete-mark-aritcle () (interactive) (navi2ch-bm-exec-subr 'navi2ch-articles-delete)) (defun navi2ch-articles-remove-article () (interactive) (navi2ch-bm-remove-article) (navi2ch-articles-delete)) (defun navi2ch-articles-remove-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-articles-remove-article)) (defun navi2ch-articles (&rest args) "articles $B$rI=<($9$k!#(B" (navi2ch-articles-mode) (navi2ch-bm-setup 'navi2ch-articles) (navi2ch-articles-sync)) (defun navi2ch-articles-sync () (interactive) (let ((buffer-read-only nil)) (erase-buffer) (save-excursion (navi2ch-articles-insert-subjects)))) (easy-menu-define navi2ch-articles-mode-menu navi2ch-articles-mode-map "Menu used in navi2ch-articles" navi2ch-articles-mode-menu-spec) (defun navi2ch-articles-setup-menu () (easy-menu-add navi2ch-articles-mode-menu)) (defun navi2ch-articles-mode () "\\{navi2ch-articles-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-articles-mode) (setq mode-name "Navi2ch Articles") (setq buffer-read-only t) (buffer-disable-undo) (use-local-map navi2ch-articles-mode-map) (navi2ch-articles-setup-menu) (run-hooks 'navi2ch-bm-mode-hook 'navi2ch-articles-mode-hook)) (run-hooks 'navi2ch-articles-load-hook) ;;; navi2ch-articles.el ends here navi2ch/navi2ch-auto-modify.el000066400000000000000000000203111173560164300165220ustar00rootroot00000000000000;;; navi2ch-auto-modify.el --- auto file modification module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2003, 2005, 2006 by Navi2ch Project ;; Author: extra ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-auto-modify) (defconst navi2ch-auto-modify-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch-vars) (require 'navi2ch-util) (defvar navi2ch-auto-modify-variable-list nil "$B@_Dj$r<+F0E*$KJQ99$7$FJ]B8$9$kJQ?tL>$N%j%9%H!#(B") (add-hook 'navi2ch-exit-hook 'navi2ch-auto-modify-save) (defun navi2ch-auto-modify-subr (body) (prog2 (setq navi2ch-auto-modify-variable-list nil) (eval (cons 'progn body)) (let (added) (dolist (sexp body) (when (memq (car-safe sexp) '(setq setq-default)) (setq sexp (cdr sexp)) (while sexp (unless (or (memq (car sexp) navi2ch-auto-modify-variable-list) (memq (car sexp) added)) (setq added (cons (car sexp) added))) (setq sexp (cddr sexp))))) (when added (setq navi2ch-auto-modify-variable-list (append navi2ch-auto-modify-variable-list (nreverse added))))))) (defmacro navi2ch-auto-modify (&rest body) "`navi2ch-auto-modify-file' $B$G;XDj$5$l$?%U%!%$%k$K5-=R$9$k$H!"(B $B$=$NCf$K4^$^$l$kJQ?t$N@_Dj$r<+F0E*$KJQ99$7$FJ]B8$9$k!#(B $BNc$($P2<5-$N$h$&$K5-=R$9$k$H!"(B $BJQ?t(B `navi2ch-article-message-filter-by-id-alist' $B$H(B `navi2ch-article-message-filter-by-message-alist' $B$N@_DjCM$O!"(B Navi2ch $B=*N;;~$K<+F0E*$KJQ99!&J]B8$5$l$k!#(B \(navi2ch-auto-modify (setq navi2ch-article-message-filter-by-id-alist ...) (setq navi2ch-article-message-filter-by-message-alist ...))" `(navi2ch-auto-modify-subr ',body)) (put 'navi2ch-auto-modify 'lisp-indent-function 0) (defun navi2ch-auto-modify-variables (variables) (let (added) (dolist (var variables) (unless (or (memq var navi2ch-auto-modify-variable-list) (memq var added)) (setq added (cons var added)))) (when added (setq navi2ch-auto-modify-variable-list (append navi2ch-auto-modify-variable-list (nreverse added))))) (navi2ch-auto-modify-save)) (eval-when-compile (defmacro default-major-mode () (if (and (<= 23 emacs-major-version) (<= 1 emacs-minor-version)) ''major-mode ''default-major-mode))) (defun navi2ch-auto-modify-save () (run-hooks 'navi2ch-auto-modify-save-hook) (navi2ch-auto-modify-truncate-lists) (when navi2ch-auto-modify-variable-list (let ((navi2ch-auto-modify-file (if (eq navi2ch-auto-modify-file t) (locate-library (expand-file-name navi2ch-init-file navi2ch-directory)) navi2ch-auto-modify-file))) (when navi2ch-auto-modify-file (let ((inhibit-read-only t) (require-final-newline (eq require-final-newline t)) (value-buffer (current-buffer)) (exist-buffer (get-file-buffer navi2ch-auto-modify-file))) (save-current-buffer (let ((default-major-mode 'fundamental-mode)) (set-buffer (find-file-noselect navi2ch-auto-modify-file))) (save-excursion (save-restriction (widen) (navi2ch-auto-modify-narrow) (navi2ch-auto-modify-save-variables value-buffer))) (unless exist-buffer (basic-save-buffer) (kill-buffer (current-buffer)))))) (navi2ch-auto-modify-customize-variables)))) (defun navi2ch-auto-modify-skip-comments () (while (and (not (eobp)) (forward-comment 1)))) (defun navi2ch-auto-modify-narrow () (goto-char (point-min)) (navi2ch-auto-modify-skip-comments) ;; Test for scan errors. (save-excursion (while (not (eobp)) (forward-sexp))) (catch 'loop (let ((standard-input (current-buffer))) (while (not (eobp)) (condition-case nil (let ((beg (point)) (sexp (read))) (when (consp sexp) (if (eq (car sexp) 'navi2ch-auto-modify) (progn (narrow-to-region beg (point)) (throw 'loop nil)) (when (re-search-backward "\\" (1+ beg) t) (goto-char (1+ beg)))))) (invalid-read-syntax nil)) (navi2ch-auto-modify-skip-comments))) (unless (bobp) (skip-chars-backward "\n" (1- (point))) (let ((count (save-excursion (skip-chars-backward "\n")))) (when (> count -2) (insert-char ?\n (+ count 2)))) (narrow-to-region (point) (point))) (insert "(navi2ch-auto-modify)"))) (defun navi2ch-auto-modify-save-variables (&optional buffer) (goto-char (1+ (point-min))) ; "\\`(" (forward-sexp) ; "navi2ch-auto-modify" (navi2ch-auto-modify-skip-comments) (let ((standard-input (current-buffer)) (standard-output (current-buffer)) (print-length nil) (print-level nil) modified) (condition-case nil (while (not (eobp)) (let ((beg (point)) (sexp (read))) (when (memq (car-safe sexp) '(setq setq-default)) (save-excursion (goto-char (1+ beg)) ; "(" (forward-sexp) ; "setq\\(-default\\)?" (navi2ch-auto-modify-skip-comments) (condition-case nil (while (not (eobp)) (let ((var (read)) start end) (navi2ch-auto-modify-skip-comments) (setq start (point)) (forward-sexp) (delete-region start (point)) (pp (navi2ch-quote-maybe (if (and buffer (local-variable-p var buffer)) (with-current-buffer buffer (symbol-value var)) (symbol-value var)))) (setq end (point-marker)) (goto-char start) (indent-sexp) (forward-sexp) (delete-region (point) end) (unless (memq var modified) (setq modified (cons var modified)))) (navi2ch-auto-modify-skip-comments)) (invalid-read-syntax nil))))) ; ")" (navi2ch-auto-modify-skip-comments)) (invalid-read-syntax nil)) ; ")\\'" (backward-char) (dolist (var navi2ch-auto-modify-variable-list) (unless (memq var modified) (unless (navi2ch-auto-modify-customize-variable-p var) (insert ?\n) (lisp-indent-line) (let ((start (point)) end) (pp (list (if (local-variable-if-set-p var (current-buffer)) 'setq-default 'setq) var (navi2ch-quote-maybe (if (and buffer (local-variable-p var buffer)) (with-current-buffer buffer (symbol-value var)) (symbol-value var))))) (setq end (point-marker)) (goto-char start) (indent-sexp) (forward-sexp) (delete-region (point) end))) (setq modified (cons var modified)))) (setq navi2ch-auto-modify-variable-list (nreverse modified)))) (defun navi2ch-auto-modify-customize-variable-p (variable) (or (null navi2ch-auto-modify-file) (get variable 'saved-value) ; From `customize-saved' (get variable 'saved-variable-comment))) ; For XEmacs (defun navi2ch-auto-modify-customize-variables () (let (customized) (dolist (var navi2ch-auto-modify-variable-list) (when (navi2ch-auto-modify-customize-variable-p var) (customize-set-variable var (symbol-value var)) (setq customized t))) (when customized (customize-save-customized)))) (defun navi2ch-auto-modify-truncate-lists () (when navi2ch-auto-modify-truncate-list-alist (let (added) (dolist (slot navi2ch-auto-modify-truncate-list-alist) (when (> (length (symbol-value (car slot))) (cdr slot)) (if (zerop (cdr slot)) (set (car slot) nil) (setcdr (nthcdr (1- (cdr slot)) (symbol-value (car slot))) nil)) (unless (or (memq (car slot) navi2ch-auto-modify-variable-list) (memq (car slot) added)) (setq added (cons (car slot) added))))) (when added (setq navi2ch-auto-modify-variable-list (append navi2ch-auto-modify-variable-list (nreverse added))))))) ;;; navi2ch-auto-modify.el ends here navi2ch/navi2ch-be2ch.el000066400000000000000000000061271173560164300152610ustar00rootroot00000000000000;;; navi2ch-be2ch.el --- View be@2ch module for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2005, 2008 by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-be2ch) (eval-when-compile (require 'cl)) (require 'navi2ch-net) (require 'navi2ch-util) (defconst navi2ch-be2ch-ident "$Id$") (defconst navi2ch-be2ch-coding-system 'euc-jp) (defconst navi2ch-be2ch-cookie-names '("MDMD" "DMDM")) (defconst navi2ch-be2ch-cookie-domain '2ch.net) (defconst navi2ch-be2ch-cookie-path '/) (defvar navi2ch-be2ch-login-url "http://be.2ch.net/test/login.php") (defvar navi2ch-be2ch-mail-address nil) (defvar navi2ch-be2ch-password nil) (defvar navi2ch-be2ch-login-flag nil) (defun navi2ch-be2ch-login-p () (let ((cookies (navi2ch-net-match-cookies navi2ch-be2ch-login-url))) (setq navi2ch-be2ch-login-flag (null (memq nil (mapcar (lambda (name) (assoc name cookies)) navi2ch-be2ch-cookie-names)))))) (defun navi2ch-be2ch-login (mail password) (interactive (list (or navi2ch-be2ch-mail-address (read-string "mail address: ")) (or navi2ch-be2ch-password (read-passwd "password: ")))) (navi2ch-be2ch-logout t) (let ((proc (navi2ch-net-send-request navi2ch-be2ch-login-url "POST" (list (cons "Referer" navi2ch-be2ch-login-url) (cons "Content-Type" "application/x-www-form-urlencoded")) (navi2ch-net-get-param-string (list (cons "m" mail) (cons "p" password) (cons "submit" "$BEPO?(B")) navi2ch-be2ch-coding-system)))) (navi2ch-net-update-cookies navi2ch-be2ch-login-url proc navi2ch-be2ch-coding-system) (navi2ch-net-save-cookies) (when (navi2ch-be2ch-login-p) (message "Be@2ch $B$K%m%0%$%s$7$^$7$?!#(B")))) (defun navi2ch-be2ch-logout (&optional no-msg) (interactive) (dolist (name navi2ch-be2ch-cookie-names) (navi2ch-net-store-cookie (list name "" 0 0) navi2ch-be2ch-cookie-domain navi2ch-be2ch-cookie-path)) (navi2ch-net-save-cookies) (setq navi2ch-be2ch-login-flag nil) (unless no-msg (message "Be@2ch $B$+$i%m%0%"%&%H$7$^$7$?!#(B"))) (defun navi2ch-be2ch-toggle-login () "Be@2ch $B$X$N%m%0%$%s>uBV$r@Z$jBX$($k!#(B" (interactive) (if navi2ch-be2ch-login-flag (navi2ch-be2ch-logout) (call-interactively 'navi2ch-be2ch-login))) ;;; navi2ch-be2ch.el ends here navi2ch/navi2ch-board-misc.el000066400000000000000000001036221173560164300163140ustar00rootroot00000000000000;;; navi2ch-board-misc.el --- Miscellaneous Functions for Navi2ch Board Mode -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010 ;; by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-board-misc) (defconst navi2ch-board-misc-ident "$Id$") (eval-when-compile (require 'cl) (defvar navi2ch-board-last-seen-alist) (defvar navi2ch-board-subject-alist) (defvar navi2ch-board-current-board)) ;; Avoid byte-compile warnings (contrib/izonmoji-mode.el). (eval-when-compile (defvar izonmoji-mode nil)) (require 'navi2ch) (defvar navi2ch-bm-mode-map nil) (unless navi2ch-bm-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-global-view-map) (define-key map "\r" 'navi2ch-bm-select-article) (unless (featurep 'xemacs) (define-key map [follow-link] 'mouse-face)) (navi2ch-define-mouse-key map 2 'navi2ch-bm-mouse-select) (define-key map " " 'navi2ch-bm-select-article-or-scroll-up) (define-key map "." 'navi2ch-bm-display-article) (define-key map "i" 'navi2ch-bm-fetch-article) (define-key map "e" 'navi2ch-bm-textize-article) (navi2ch-define-delete-keys map 'navi2ch-bm-select-article-or-scroll-down) (define-key map "n" 'navi2ch-bm-next-line) (define-key map "p" 'navi2ch-bm-previous-line) (define-key map "U" 'navi2ch-bm-show-url) (define-key map "l" 'navi2ch-bm-view-logo) (define-key map "A" 'navi2ch-bm-add-global-bookmark) (define-key map "g" 'navi2ch-bm-goto-board) (define-key map "q" 'navi2ch-bm-exit) (define-key map "S" 'navi2ch-bm-sort) (define-key map "?" 'navi2ch-bm-search) (define-key map "\C-c\C-m" 'navi2ch-message-pop-message-buffer) (define-key map "R" 'navi2ch-bm-remove-article) (define-key map "\C-c\C-r" 'navi2ch-bm-remove-article) (define-key map "\C-o" 'navi2ch-bm-save-dat-file) (define-key map "I" 'navi2ch-bm-fetch-maybe-new-articles) ;; mark command (define-key map "*" 'navi2ch-bm-mark) (define-key map "u" 'navi2ch-bm-unmark) (define-key map "m" nil) (define-key map "mr" 'navi2ch-bm-mark-region) (define-key map "ma" 'navi2ch-bm-mark-all) (define-key map "mA" 'navi2ch-bm-add-global-bookmark-mark-article) (define-key map "m." 'navi2ch-bm-display-mark-article) (define-key map "mi" 'navi2ch-bm-fetch-mark-article) (define-key map "me" 'navi2ch-bm-textize-mark-article) (define-key map "mm" 'navi2ch-bm-mark-marks) (define-key map "m?" 'navi2ch-bm-mark-by-query) (define-key map "mb" 'navi2ch-bm-add-bookmark-mark-article) (define-key map "mR" 'navi2ch-bm-remove-mark-article) (setq navi2ch-bm-mode-map map))) (defvar navi2ch-bm-mode-menu-spec '(["Toggle offline" navi2ch-toggle-offline] ["Exit" navi2ch-bm-exit] ["Sort" navi2ch-bm-sort] ["Search" navi2ch-bm-search]) "Menu $B$N85(B") (defvar navi2ch-board-buffer-name "*navi2ch board*") ;; set by navi2ch-bm-setup (defvar navi2ch-bm-get-property-function nil "$B$=$N0LCV$N(B text-property $B$rF@$k4X?t!#0z?t$O(B POINT") (defvar navi2ch-bm-set-property-function nil "text-property $B$r@_Dj$9$k4X?t!#0z?t$O(B BEGIN END ITEM") (defvar navi2ch-bm-get-board-function nil "$BHD$rF@$k4X?t!#0z?t$O(B ITEM") (defvar navi2ch-bm-get-article-function nil "$B%9%l$rF@$k4X?t!#0z?t$O(B ITEM") (defvar navi2ch-bm-exit-function nil) ;; stub functions ;; set by navi2ch-bm-setup (defun navi2ch-bm-get-property-internal (point)) (defun navi2ch-bm-set-property-internal (begin end item)) (defun navi2ch-bm-get-board-internal (item)) (defun navi2ch-bm-get-article-internal (item)) (defun navi2ch-bm-exit-internal ()) (defvar navi2ch-bm-fetched-article-list nil) (defvar navi2ch-bm-board-type-alist nil) (defvar navi2ch-bm-state-char-table (navi2ch-alist-to-hash '((view . ?V) (cache . ?C) (update . ?U) (down . ?D) (nil . ? )) :test 'eq)) (eval-and-compile (let ((state-list '(view cache update down nil)) (update-list '(nil new updated seen))) (let ((func (lambda (f) (navi2ch-alist-to-hash (mapcar (lambda (state) (cons state (navi2ch-alist-to-hash (mapcar (lambda (update) (cons update (funcall f state update))) update-list) :test 'eq))) state-list) :test 'eq)))) (defconst navi2ch-bm-state-face-table (funcall func (lambda (state update) (intern (format "navi2ch-bm%s-%s-face" (if update (format "-%s" update) "") (or state 'unread)))))) (defconst navi2ch-bm-state-mark-face-table (funcall func (lambda (state update) (intern (format "navi2ch-bm%s-mark-face" (if update (format "-%s" update) ""))))))))) (defconst navi2ch-bm-updated-mark-table (navi2ch-alist-to-hash '((new . ?%) (updated . ?+) (seen . ?=) (nil . ? )) :test 'eq)) (defvar navi2ch-bm-move-downward t) ;; add hook (add-hook 'navi2ch-save-status-hook 'navi2ch-bm-save-info) (add-hook 'navi2ch-load-status-hook 'navi2ch-bm-load-info) (defmacro navi2ch-bm-set-func (sym val) `(let ((val-str (symbol-name ',val)) (sym-str (symbol-name ,sym)) func-str) (when (string-match "navi2ch-bm-\\(.+\\)" val-str) (setq func-str (format "%s-%s" sym-str (match-string 1 val-str))) (set (intern (concat val-str "-function")) (intern func-str)) (fset (intern (concat val-str "-internal")) (intern func-str))))) (defun navi2ch-bm-setup (prefix) (navi2ch-bm-set-func prefix navi2ch-bm-get-property) (navi2ch-bm-set-func prefix navi2ch-bm-set-property) (navi2ch-bm-set-func prefix navi2ch-bm-get-board) (navi2ch-bm-set-func prefix navi2ch-bm-get-article) ;; (navi2ch-bm-set-func prefix navi2ch-bm-get-subject) (navi2ch-bm-set-func prefix navi2ch-bm-exit) (setq navi2ch-bm-move-downward t)) (defun navi2ch-bm-make-menu-spec (title menu-spec) "$B%?%$%H%k$,(B TITLE $B$G(B $BFbMF$,(B `navi2ch-bm-mode-menu-spec' $B$H(B MENU-SPEC $B$r7R$2$?%a%K%e!<$r:n$k!#(B" (append (list title) navi2ch-bm-mode-menu-spec '("----") menu-spec)) ;; (defvar navi2ch-list-navi2ch-category-alist nil) ; $B%3%s%Q%$%k$rDL$90Y(B (defun navi2ch-bm-regist-board (type open-func &optional board) "TYPE $B$JHD$r3+$/4X?t(B OPEN-FUNC $B$r(B `navi2ch-bm-board-type-alist' $B$KEP(B $BO?$9$k!#$^$?!"F1;~$K(B BOARD $B$r(B `navi2ch-list-navi2ch-category-alist' $B$K(B $BEPO?$9$k!#(B" (setq navi2ch-bm-board-type-alist (navi2ch-put-alist type open-func navi2ch-bm-board-type-alist)) (when board (add-to-list 'navi2ch-list-navi2ch-category-alist board))) (defun navi2ch-bm-select-board (board &optional force) (let ((buf (get-buffer-create navi2ch-board-buffer-name)) (type (cdr (assq 'type board)))) (set-buffer buf) (funcall (cdr (assq type navi2ch-bm-board-type-alist)) board force) (switch-to-buffer buf)) (run-hooks 'navi2ch-bm-select-board-hook) (navi2ch-set-mode-line-identification)) (defun navi2ch-bm-set-property (begin end item state &optional updated mark) (navi2ch-bm-set-property-internal begin end item) (let ((updated (or updated (get-text-property begin 'navi2ch-bm-updated))) (face-table (if mark navi2ch-bm-state-mark-face-table navi2ch-bm-state-face-table))) (add-text-properties begin end (list 'navi2ch-bm-updated updated 'navi2ch-bm-state state 'navi2ch-bm-mark mark 'mouse-face navi2ch-bm-mouse-face 'face (gethash updated (gethash state face-table)))))) (defun navi2ch-bm-down-article-p (board article) (cdr (or (assq 'down article) (assq 'down (navi2ch-article-load-info board article))))) (defun navi2ch-bm-get-state-from-article (board article) (cond ((navi2ch-board-from-file-p board) (cond ((get-buffer (navi2ch-article-get-buffer-name board article)) 'view) ((file-exists-p (navi2ch-article-get-file-name board article)) 'cache) (t nil))) ((navi2ch-bm-fetched-article-p board article) 'update) ((navi2ch-bm-down-article-p board article) 'down) (t (navi2ch-article-check-cached board article)))) (defun navi2ch-bm-format-subject (number updated-char state-char subject other) (format (concat "%" (number-to-string navi2ch-bm-number-width) "d %c%c %s%s%s\n") number updated-char state-char subject (make-string (max (- navi2ch-bm-subject-width (string-width subject)) 1) ? ) other)) (defun navi2ch-bm-insert-subject (item number subject other &optional updated) (let* ((article (navi2ch-bm-get-article-internal item)) (board (navi2ch-bm-get-board-internal item)) (point (point)) (state (navi2ch-bm-get-state-from-article board article)) (string (navi2ch-bm-format-subject number (gethash updated navi2ch-bm-updated-mark-table) (gethash state navi2ch-bm-state-char-table) (or subject navi2ch-bm-empty-subject) other))) ;; for contrib/izonmoji-mode.el (navi2ch-ifxemacs (insert string) (let ((buffer-display-table (if (and (boundp 'izonmoji-mode) izonmoji-mode) nil buffer-display-table))) (insert string))) (save-excursion (goto-char point) (set-text-properties (navi2ch-line-beginning-position) (1+ (navi2ch-line-end-position)) nil) (navi2ch-bm-set-property (navi2ch-line-beginning-position) (navi2ch-line-end-position) item state updated)))) (defun navi2ch-bm-exit () (interactive) (dolist (x (navi2ch-article-buffer-list)) (when x (delete-windows-on x))) (navi2ch-bm-exit-internal) (run-hooks 'navi2ch-bm-exit-hook) (when (get-buffer navi2ch-board-buffer-name) (delete-windows-on navi2ch-board-buffer-name) (bury-buffer navi2ch-board-buffer-name)) (when navi2ch-list-buffer-name (let ((win (get-buffer-window navi2ch-list-buffer-name))) (if win (select-window win) (navi2ch-list))))) ;;; goto-*-column (defsubst navi2ch-bm-goto-updated-mark-column () (beginning-of-line) (when (looking-at " *[0-9]+ ") (goto-char (match-end 0)))) (defsubst navi2ch-bm-goto-state-column () (when (navi2ch-bm-goto-updated-mark-column) (forward-char 1))) (defsubst navi2ch-bm-goto-mark-column () (when (navi2ch-bm-goto-updated-mark-column) (forward-char 2))) (defun navi2ch-bm-goto-other-column () (let ((sbj (cdr (assq 'subject (navi2ch-bm-get-article-internal (navi2ch-bm-get-property-internal (point))))))) (navi2ch-bm-goto-mark-column) (forward-char 1) (unless sbj (setq sbj navi2ch-bm-empty-subject)) (when (and (not (string= sbj "")) (search-forward sbj nil t)) (goto-char (match-end 0))) (skip-chars-forward " "))) (defun navi2ch-bm-insert-state (item state &optional updated) ;; (setq article (navi2ch-put-alist 'cache 'view article)) (let ((buffer-read-only nil)) (save-excursion (navi2ch-bm-goto-state-column) (backward-char 1) (delete-char 2) (insert (gethash updated navi2ch-bm-updated-mark-table) (gethash state navi2ch-bm-state-char-table)) (navi2ch-bm-set-property (navi2ch-line-beginning-position) (navi2ch-line-end-position) item state updated)))) (defsubst navi2ch-bm-get-state (&optional point) "$B$=$N0LCV$N(B state $B$rD4$Y$k!#(B" (get-text-property (or point (point)) 'navi2ch-bm-state)) (defsubst navi2ch-bm-get-updated-mark (&optional point) "$B$=$N0LCV$N(B updated-mark $B$rD4$Y$k!#(B" (get-text-property (or point (point)) 'navi2ch-bm-updated)) (defun navi2ch-bm-select-article (&optional max-line) (interactive "P") (let* ((item (navi2ch-bm-get-property-internal (point))) (board (navi2ch-bm-get-board-internal item)) (article (navi2ch-article-load-info board (navi2ch-bm-get-article-internal item))) (buf (current-buffer)) (window-configuration (current-window-configuration))) (unwind-protect (if article (progn (navi2ch-split-window 'article) (let (state) (setq state (if (navi2ch-board-from-file-p board) (navi2ch-article-view-article-from-file (navi2ch-article-get-file-name board article)) (navi2ch-article-view-article board article nil nil max-line))) (with-current-buffer buf (when (or state (navi2ch-bm-fetched-article-p board article) (eq (navi2ch-bm-get-state) 'view)) (navi2ch-bm-remove-fetched-article board article) (if (eq major-mode 'navi2ch-board-mode) (navi2ch-bm-insert-state item 'view 'seen) (navi2ch-bm-insert-state item 'view)))) (when (eq major-mode 'navi2ch-article-mode) (setq window-configuration (current-window-configuration))))) (message "Can't select this line!")) (set-window-configuration window-configuration)))) (defun navi2ch-bm-show-url () "$BHD$N(B url $B$rI=<($7$F!"$=$N(B url $B$r8+$k$+(B kill ring $B$K%3%T!<$9$k!#(B" (interactive) (let* ((board (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point)))) (url (navi2ch-board-to-url board))) (if (not url) (message "Can't select this line!") (let ((char (navi2ch-read-char-with-retry (format "c)opy v)iew t)itle? URL: %s: " url) nil '(?c ?v ?t)))) (if (eq char ?t) (navi2ch-bm-copy-title board) (setq url (navi2ch-bm-show-url-subr board)) (cond ((not url) (message "Can't select this line!")) ((eq char ?c) (kill-new url) (message "Copy: %s" url)) ((eq char ?v) (navi2ch-browse-url-internal url) (message "View: %s" url)))))))) (defun navi2ch-bm-show-url-subr (board) "$B%a%K%e!<$rI=<($7$F!"(Burl $B$rF@$k!#(B" (let ((char (navi2ch-read-char-with-retry (format "b)oard a)rticle l)ast%d: " navi2ch-article-show-url-number) nil '(?b ?a ?l))) (article (navi2ch-bm-get-article-internal (navi2ch-bm-get-property-internal (point))))) (cond ((eq char ?b) (navi2ch-board-to-url board)) ((eq char ?a) (when article (navi2ch-article-to-url board article))) ((eq char ?l) (let ((l (format "l%d" navi2ch-article-show-url-number))) (when article (navi2ch-article-to-url board article l l))))))) (defun navi2ch-bm-copy-title (board) "$B%a%K%e!<$rI=<($7$F!"%?%$%H%k$rF@$k!#(B" (navi2ch-article-copy-title board (navi2ch-bm-get-article-internal (navi2ch-bm-get-property-internal (point))))) (defun navi2ch-bm-display-article (&optional max-line) (interactive "P") (let ((win (selected-window))) (navi2ch-bm-select-article max-line) (select-window win))) (defun navi2ch-bm-remember-fetched-article (board article) (let* ((uri (navi2ch-board-get-uri board)) (list (assoc uri navi2ch-bm-fetched-article-list)) (artid (cdr (assq 'artid article)))) (if list (unless (member artid (cdr list)) (push artid (cdr list))) (push (list uri artid) navi2ch-bm-fetched-article-list)))) (defun navi2ch-bm-fetched-article-p (board article) (member (cdr (assq 'artid article)) (cdr (assoc (navi2ch-board-get-uri board) navi2ch-bm-fetched-article-list)))) (defun navi2ch-bm-remove-fetched-article (board article) (let* ((uri (navi2ch-board-get-uri board)) (list (assoc uri navi2ch-bm-fetched-article-list)) (artid (cdr (assq 'artid article)))) (when (member artid list) (setcdr list (delete artid (cdr list))) (unless (cdr list) (setq navi2ch-bm-fetched-article-list (delq list navi2ch-bm-fetched-article-list)))))) (defun navi2ch-bm-fetch-article (&optional force) (interactive "P") (let* ((item (navi2ch-bm-get-property-internal (point))) (board (navi2ch-bm-get-board-internal item)) (article (navi2ch-bm-get-article-internal item)) state) (if (and article (not (navi2ch-board-from-file-p board))) (let (summary artid element seen) (when (and navi2ch-board-check-article-update-suppression-length (not (navi2ch-bm-fetched-article-p board article))) (setq summary (navi2ch-article-load-article-summary board)) (setq artid (cdr (assq 'artid article))) (setq element (cdr (assoc artid summary))) (setq seen (or (navi2ch-article-summary-element-seen element) (cdr (assoc artid navi2ch-board-last-seen-alist)) 0))) (setq state (navi2ch-article-fetch-article board article force)) (when state (let ((state-mark 'update) (updated-mark (navi2ch-bm-get-updated-mark))) (when seen (setq seen (and (catch 'break (<= (string-to-number (or (cdr (assoc artid navi2ch-board-subject-alist)) (throw 'break t))) (+ seen navi2ch-board-check-article-update-suppression-length))) (navi2ch-article-check-message-suppression board article (1+ seen) (+ seen navi2ch-board-check-article-update-suppression-length))))) (if seen (progn (navi2ch-article-summary-element-set-seen element seen) (navi2ch-article-save-article-summary board summary) (setq state-mark (navi2ch-bm-get-state)) (when (memq updated-mark '(new updated)) (setq updated-mark 'seen)) (message "No updates need seeing")) (navi2ch-bm-remember-fetched-article board article)) (navi2ch-bm-insert-state item state-mark updated-mark)))) (message "Can't select this line!")) state)) (defun navi2ch-bm-textize-article (&optional dir-or-file buffer) (interactive) (let* ((navi2ch-article-view-range nil) (navi2ch-article-auto-range nil) window) (setq window (selected-window)) (navi2ch-bm-display-article) (select-window (get-buffer-window (navi2ch-article-current-buffer))) (when navi2ch-article-view-range (setq navi2ch-article-view-range nil) (navi2ch-article-redraw)) (navi2ch-article-textize-article dir-or-file buffer) (select-window window))) (defun navi2ch-bm-select-article-or-scroll (way &optional max-line) (let ((article (navi2ch-bm-get-article-internal (navi2ch-bm-get-property-internal (point))))) (if (and (navi2ch-article-current-buffer) (string= (cdr (assq 'artid article)) (with-current-buffer (navi2ch-article-current-buffer) (cdr (assq 'artid navi2ch-article-current-article)))) (get-buffer-window (navi2ch-article-current-buffer))) (let ((win (selected-window))) (unwind-protect (progn (select-window (get-buffer-window (navi2ch-article-current-buffer))) (cond ((eq way 'up) (navi2ch-article-scroll-up)) ((eq way 'down) (navi2ch-article-scroll-down)))) (select-window win))) (navi2ch-bm-select-article max-line)))) (defun navi2ch-bm-select-article-or-scroll-up (&optional max-line) (interactive "P") (navi2ch-bm-select-article-or-scroll 'up max-line)) (defun navi2ch-bm-select-article-or-scroll-down (&optional max-line) (interactive "P") (navi2ch-bm-select-article-or-scroll 'down max-line)) (defun navi2ch-bm-mouse-select (e) (interactive "e") (mouse-set-point e) (save-excursion (beginning-of-line) (navi2ch-bm-select-article))) (defun navi2ch-bm-goto-board () (interactive) (navi2ch-list-goto-board (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point))))) (defun navi2ch-bm-renumber () (interactive) (save-excursion (goto-char (point-min)) (let ((buffer-read-only nil) (i 1)) (while (not (eobp)) (let ((props (text-properties-at (point))) (num-string (format (concat "%" (number-to-string navi2ch-bm-number-width) "d") i))) (delete-region (point) (save-excursion (navi2ch-bm-goto-state-column) (- (point) 2))) (insert num-string) (set-text-properties (- (point) (length num-string)) (point) props) (forward-line 1) (setq i (1+ i))))))) (defun navi2ch-bm-view-logo () "$B$=$NHD$N%m%4$r8+$k!#(B" (interactive) (let ((board (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point)))) (board-mode-p (eq major-mode 'navi2ch-board-mode)) file old-file) (unless board-mode-p (setq board (navi2ch-board-load-info board))) (setq old-file (cdr (assq 'logo board))) (if navi2ch-offline (setq file old-file) (setq file (navi2ch-net-download-logo board)) (when file (setq file (file-name-nondirectory (navi2ch-net-download-logo board))) (when (and old-file navi2ch-board-delete-old-logo (not (string-equal file old-file))) (delete-file (navi2ch-board-get-file-name board old-file))) (if board-mode-p (setq navi2ch-board-current-board board) (navi2ch-board-save-info board)))) (if file (apply 'start-process "navi2ch view logo" nil navi2ch-board-view-logo-program (append navi2ch-board-view-logo-args (list (navi2ch-board-get-file-name board file)))) (message "Can't find logo file")))) (defun navi2ch-bm-add-global-bookmark (&optional bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Bookmark ID: "))) (let* ((item (navi2ch-bm-get-property-internal (point))) (board (navi2ch-bm-get-board-internal item)) (article (navi2ch-bm-get-article-internal item))) (if item (navi2ch-bookmark-add bookmark-id board article) (message "Can't select this line!")))) ;;; move (defun navi2ch-bm-forward-line (&optional n) (interactive "p") (let ((ret (forward-line n))) (when (eobp) (forward-line -1) (setq ret (1+ ret))) ret)) (defun navi2ch-bm-next-line (num) (interactive "p") (unless (zerop (navi2ch-bm-forward-line num)) (message "No more articles")) (setq navi2ch-bm-move-downward t)) (defun navi2ch-bm-previous-line (num) (interactive "p") (unless (zerop (navi2ch-bm-forward-line (- num))) (message "No more articles")) (setq navi2ch-bm-move-downward nil)) ;;; mark (defun navi2ch-bm-mark-subr (mark &optional arg interactive) "mark $B$9$k!#(B INTERACTIVE $B$,(B non-nil $B$J$i(B mark $B$7$?$"$H0\F0$9$k!#(B ARG $B$,(B non-nil $B$J$i0\F0J}8~$r5U$K$9$k!#(B" (let ((item (navi2ch-bm-get-property-internal (point))) (state (navi2ch-bm-get-state (point))) (table (and mark navi2ch-bm-state-mark-face-table))) (when item (let ((buffer-read-only nil) (pos (point))) (navi2ch-bm-goto-mark-column) (delete-char 1) (insert (if mark ?* ? )) (navi2ch-bm-set-property (navi2ch-line-beginning-position) (navi2ch-line-end-position) item state nil table) (goto-char pos))) (when (and navi2ch-bm-mark-and-move interactive) (let (downward) (cond ((eq navi2ch-bm-mark-and-move 'follow) (setq downward (if arg (not navi2ch-bm-move-downward) navi2ch-bm-move-downward))) ((eq navi2ch-bm-mark-and-move t) (setq downward (not arg)))) (navi2ch-bm-forward-line (if downward 1 -1)))))) (defun navi2ch-bm-mark (&optional arg) (interactive "P") (navi2ch-bm-mark-subr t arg (interactive-p))) (defun navi2ch-bm-unmark (&optional arg) (interactive "P") (navi2ch-bm-mark-subr nil arg (interactive-p))) (defun navi2ch-bm-exec-subr (func &rest args) (save-excursion (goto-char (point-min)) (while (not (eobp)) (navi2ch-bm-goto-mark-column) (if (looking-at "\\*") (progn (condition-case nil (save-excursion (navi2ch-bm-unmark) (apply func args)) (navi2ch-update-failed nil)) (sit-for 0) (discard-input)) (forward-line))))) (defsubst navi2ch-bm-display-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-bm-display-article)) (defun navi2ch-bm-fetch-mark-article (&optional force) (interactive "P") (unless navi2ch-offline (navi2ch-bm-exec-subr #'navi2ch-bm-fetch-article force))) (defun navi2ch-bm-textize-mark-article (directory &optional file) (interactive "DDirectory: \nFList file: ") (let ((buffer (get-buffer-create (make-temp-name "*navi2ch ")))) (navi2ch-bm-exec-subr 'navi2ch-bm-textize-article directory buffer) (with-current-buffer buffer (when file (navi2ch-write-region (point-min) (point-max) file))) (kill-buffer buffer))) (defun navi2ch-bm-add-global-bookmark-mark-article (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Bookmark ID: "))) (navi2ch-bm-exec-subr 'navi2ch-bm-add-global-bookmark bookmark-id)) ;; add marked ones to the board bookmark (defun navi2ch-bm-add-bookmark-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-board-add-bookmark)) (defun navi2ch-bm-mark-region-subr (begin end mark) (save-excursion (save-restriction (narrow-to-region begin end) (goto-char (point-min)) (while (not (eobp)) (navi2ch-bm-mark-subr mark) (forward-line))))) (defun navi2ch-bm-mark-region (begin end &optional arg) (interactive "r\nP") (navi2ch-bm-mark-region-subr (save-excursion (goto-char begin) (beginning-of-line) (point)) (save-excursion (goto-char (max (1- end) (point-min))) (end-of-line) (point)) (not arg))) (defun navi2ch-bm-fetch-maybe-new-articles () "$B99?7$5$l$F$$$k2DG=@-$N$"$k%9%l$r(B fetch $B$9$k!#(B" (interactive) (unless navi2ch-offline (navi2ch-bm-mark-states "[^=]") (sit-for 0) (navi2ch-bookmark-fetch-mark-article))) (defun navi2ch-bm-mark-all (&optional arg) (interactive "P") (navi2ch-bm-mark-region (point-min) (point-max) arg)) (defun navi2ch-bm-mark-marks (mark &optional arg) (interactive "cInput mark: \nP") (navi2ch-bm-mark-states (format ".%c" (upcase mark)) arg)) (defun navi2ch-bm-mark-states (regexp &optional arg) (save-excursion (goto-char (point-min)) (while (not (eobp)) (navi2ch-bm-goto-updated-mark-column) (when (looking-at regexp) (navi2ch-bm-mark-subr (not arg))) (forward-line)))) ;; mark by regexp query (defun navi2ch-bm-mark-by-query (query &optional arg) (interactive "MQuery (regexp): ") (save-excursion (goto-char (point-min)) (while (re-search-forward query nil t) (navi2ch-bm-mark-subr (not arg))))) ;;; sort (defun navi2ch-bm-sort-subr (rev start-key-fun end-key-fun) (let ((buffer-read-only nil)) (save-excursion (goto-char (point-min)) (sort-subr rev 'forward-line 'end-of-line start-key-fun end-key-fun)))) (defun navi2ch-bm-sort-by-number (&optional rev) (interactive "P") (navi2ch-bm-sort-subr rev (lambda () (beginning-of-line) (save-match-data (if (looking-at "^ *\\([0-9]+\\)") (string-to-number (buffer-substring (match-beginning 1) (match-end 1))) ;; not a number -1))) nil)) (defun navi2ch-bm-sort-by-state (&optional rev) (interactive "P") (navi2ch-bm-sort-subr rev (lambda () (navi2ch-bm-goto-state-column) (backward-char) (or (cdr (assoc (buffer-substring (point) (+ (point) 2)) navi2ch-bm-sort-by-state-order)) ;; $BL$CN$N>uBV!#(B 1000)) nil)) (defun navi2ch-bm-sort-by-subject (&optional rev) (interactive "P") (navi2ch-bm-sort-subr rev (lambda () (navi2ch-bm-goto-mark-column) (forward-char 1)) 'navi2ch-bm-goto-other-column)) (defun navi2ch-bm-sort-by-other (&optional rev) (interactive "P") (navi2ch-bm-sort-subr rev (lambda () (navi2ch-bm-goto-other-column) nil) ; end-key-fun $B$r8F$P$;$k$K$O(B nil $B$,M_$7$$$i$7$$!#$O$^$C$?(B($B5c(B)$B!#(B 'end-of-line)) (defun navi2ch-bm-sort-by-date (&optional rev) (interactive "P") (navi2ch-bm-sort-subr (not rev) (lambda () (string-to-number (cdr (assq 'artid (navi2ch-bm-get-article-internal (navi2ch-bm-get-property-internal (point))))))) nil)) (defun navi2ch-bm-sort (&optional arg) (interactive "P") (let ((ch (navi2ch-read-char-with-retry "Sort by n)umber s)tate t)itle o)ther d)ate? " nil '(?n ?s ?t ?o ?d)))) (message "Sorting...") (funcall (cond ((eq ch ?n) 'navi2ch-bm-sort-by-number) ((eq ch ?s) 'navi2ch-bm-sort-by-state) ((eq ch ?t) 'navi2ch-bm-sort-by-subject) ((eq ch ?o) 'navi2ch-bm-sort-by-other) ((eq ch ?d) 'navi2ch-bm-sort-by-date)) arg) (message "Sorting...done"))) ;;; search (defun navi2ch-bm-search-current-board-subject () (interactive) (navi2ch-search-subject-subr (list (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point)))))) (defun navi2ch-bm-search-current-board-article () (interactive) (navi2ch-search-article-subr (list (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point)))))) (defun navi2ch-bm-search-current-board-cache () (interactive) (navi2ch-search-cache-subr (list (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point)))))) (defun navi2ch-bm-search-current-board-orphan () (interactive) (navi2ch-search-orphan-subr (list (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal (point)))))) (defun navi2ch-bm-search () (interactive) (let ((ch (navi2ch-read-char-with-retry "Search for: s)ubject a)rticle c)ache o)rphan: " nil '(?s ?a ?c ?o))) (ch2 (navi2ch-read-char-with-retry "Search from: b)oard a)ll: " nil '(?b ?a)))) (cond ((eq ch ?s) (cond ((eq ch2 ?b) (navi2ch-bm-search-current-board-subject)) ((eq ch2 ?a) (navi2ch-search-all-subject)))) ((eq ch ?a) (cond ((eq ch2 ?b) (navi2ch-bm-search-current-board-article)) ((eq ch2 ?a) (navi2ch-search-all-article)))) ((eq ch ?c) (cond ((eq ch2 ?b) (navi2ch-bm-search-current-board-cache)) ((eq ch2 ?a) (navi2ch-search-all-cache)))) ((eq ch ?o) (cond ((eq ch2 ?b) (navi2ch-bm-search-current-board-orphan)) ((eq ch2 ?a) (navi2ch-search-all-orphan))))))) ;;; save and load info (defun navi2ch-bm-save-info () (navi2ch-save-info navi2ch-bm-fetched-info-file navi2ch-bm-fetched-article-list t)) (defun navi2ch-bm-load-info () (setq navi2ch-bm-fetched-article-list (navi2ch-load-info navi2ch-bm-fetched-info-file))) (defun navi2ch-bm-update-article (board article &optional state updated) "$BHD%P%C%U%!$N$&$A!"(BBOARD $B$H(B ARTICLE $B$K%^%C%A$9$k9T$r99?7$9$k!#(B" (let ((buffer (get-buffer navi2ch-board-buffer-name))) (when buffer (with-current-buffer buffer (let ((buffer-read-only nil)) (save-excursion (goto-char (point-min)) (while (not (eobp)) (let* ((item (navi2ch-bm-get-property-internal (point))) (item-article (navi2ch-bm-get-article-internal item)) (item-board (navi2ch-bm-get-board-internal item))) (when (and (equal (cdr (assq 'id board)) (cdr (assq 'id item-board))) (equal (cdr (assq 'artid article)) (cdr (assq 'artid item-article)))) (let ((state (or state (navi2ch-bm-get-state-from-article board article))) (updated (or updated (navi2ch-bm-get-updated-mark)))) (navi2ch-bm-insert-state item state updated) (navi2ch-bm-set-property (navi2ch-line-beginning-position) (navi2ch-line-end-position) item state updated)))) (forward-line)))))))) (defun navi2ch-bm-remove-article-subr (board articles) "BOARD $B$H(B ARTICLES $B$G;XDj$5$l$k%9%l$N>pJs$r>C$9!#(B ARTILCES $B$,(B alist $B$N>l9g$O$=$N%9%l$N$_$r!"(Balist $B$N(B list $B$N>l9g$O;XDj$5(B $B$l$k$9$Y$F$N%9%l$rBP>]$K$9$k!#(B" (let ((summary (navi2ch-article-load-article-summary board))) (setq articles (cond ((cdr (assq 'artid articles)) ; $B%9%l(B alist (list articles)) ((cdr (assq 'artid (car articles))) ; $B%9%l(B alist $B$N(B list articles))) (dolist (article articles) (let ((artid (cdr (assq 'artid article))) (buffer (get-buffer (navi2ch-article-get-buffer-name board article))) (info-file (navi2ch-article-get-info-file-name board article)) elt) (when buffer (delete-windows-on buffer) (kill-buffer buffer)) (dolist (file (list info-file (navi2ch-make-backup-file-name info-file) (navi2ch-article-get-file-name board article) (navi2ch-article-get-message-filter-cache-file-name board article))) (condition-case nil (if (file-exists-p file) (delete-file file)) (file-error nil)) (navi2ch-cache-remove file navi2ch-info-cache)) (navi2ch-bm-remove-fetched-article board article) (while (setq elt (assoc artid summary)) (setq summary (delq elt summary)))) (navi2ch-bm-update-article board article)) (navi2ch-article-save-article-summary board summary))) (defun navi2ch-bm-remove-article () (interactive) (let* ((item (navi2ch-bm-get-property-internal (point))) (article (navi2ch-bm-get-article-internal item)) (board (navi2ch-bm-get-board-internal item))) (when (and board article) (navi2ch-bm-remove-article-subr board article)))) (defun navi2ch-bm-remove-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-bm-remove-article)) (defun navi2ch-bm-save-dat-file () (interactive) (let* ((item (navi2ch-bm-get-property-internal (point))) (article (navi2ch-bm-get-article-internal item)) (board (navi2ch-bm-get-board-internal item))) (when (and board article) (navi2ch-article-save-dat-file board article)))) (defun navi2ch-bm-url-at-point (point) "POINT $B$N2<$N%j%s%/$r;X$9(B URL $B$rF@$k!#(B" (let ((board (navi2ch-bm-get-board-internal (navi2ch-bm-get-property-internal point))) (article (navi2ch-bm-get-article-internal (navi2ch-bm-get-property-internal point)))) (navi2ch-article-to-url board article))) (run-hooks 'navi2ch-board-misc-load-hook) ;;; navi2ch-board-misc.el ends here navi2ch/navi2ch-board.el000066400000000000000000000607611173560164300153710ustar00rootroot00000000000000;;; navi2ch-board.el --- subject list module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2010 ;; by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-board) (defconst navi2ch-board-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch) (defvar navi2ch-board-mode-map nil) (unless navi2ch-board-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-bm-mode-map) ;; (define-key map "q" 'navi2ch-board-exit) (define-key map "s" 'navi2ch-board-sync) (define-key map "r" 'navi2ch-board-select-view-range) (define-key map "a" 'navi2ch-board-add-bookmark) (define-key map "d" 'navi2ch-board-hide-article) (define-key map "h" 'navi2ch-board-toggle-hide) (define-key map "+" 'navi2ch-board-toggle-updated) (define-key map "b" 'navi2ch-board-toggle-bookmark) (define-key map "w" 'navi2ch-board-write-message) (define-key map "\M-e" 'navi2ch-board-expire) (define-key map "md" 'navi2ch-board-hide-mark-article) (setq navi2ch-board-mode-map map))) (defvar navi2ch-board-mode-menu-spec (navi2ch-bm-make-menu-spec "Board" '(["Sync" navi2ch-board-sync] ["Add bookmark" navi2ch-board-add-bookmark] ["Add global bookmark" navi2ch-board-add-global-bookmark] ["Hide line" navi2ch-board-hide-article]))) (defvar navi2ch-board-regexp-list '("^\\([0-9]+\\)\\.dat,\\(.*\\)(\\([0-9]+\\))\n" "^\\([0-9]+\\)\\.dat<>\\(.*\\)<\\([0-9]+\\)>\n" "^\\([0-9]+\\)\\.dat<>\\(.*\\)(\\([0-9]+\\))\n" "^\\([0-9]+\\)\\.dat,\\(.*\\)$B!J(B\\([0-9]+\\)$B!K(B\n")) (defvar navi2ch-board-current-board nil) (defvar navi2ch-board-subject-list nil) (defvar navi2ch-board-old-subject-list nil) (defvar navi2ch-board-subject-alist nil) (defvar navi2ch-board-old-subject-alist nil) (defvar navi2ch-board-subject-file-name "subject.txt") (defvar navi2ch-board-old-subject-file-name "old-subject.txt") (defvar navi2ch-board-last-seen-alist nil) (defvar navi2ch-board-subback-file-name "subback.html") (defvar navi2ch-board-use-subback-html nil) (defvar navi2ch-board-minor-mode-list '(navi2ch-board-bookmark-mode navi2ch-board-hide-mode navi2ch-board-updated-mode)) ;; bookmark mode (defvar navi2ch-board-bookmark-mode nil) (defvar navi2ch-board-bookmark-mode-map nil) (unless navi2ch-board-bookmark-mode-map (setq navi2ch-board-bookmark-mode-map (make-sparse-keymap)) (define-key navi2ch-board-bookmark-mode-map "d" 'navi2ch-board-delete-bookmark) (define-key navi2ch-board-bookmark-mode-map "md" 'navi2ch-board-delete-bookmark-mark-article) (define-key navi2ch-board-bookmark-mode-map "a" 'undefined)) ;; hide mode (defvar navi2ch-board-hide-mode nil) (defvar navi2ch-board-hide-mode-map nil) (unless navi2ch-board-hide-mode-map (setq navi2ch-board-hide-mode-map (make-sparse-keymap)) (define-key navi2ch-board-hide-mode-map "d" 'navi2ch-board-cancel-hide) (define-key navi2ch-board-hide-mode-map "md" 'navi2ch-board-cancel-hide-mark-article) (define-key navi2ch-board-hide-mode-map "a" 'undefined)) ;; updated mode (defvar navi2ch-board-updated-mode nil) (defvar navi2ch-board-updated-mode-map nil) (unless navi2ch-board-updated-mode-map (setq navi2ch-board-updated-mode-map (make-sparse-keymap))) ;;; navi2ch-bm callbacks (defsubst navi2ch-board-set-property (begin end item) (put-text-property begin end 'article item)) (defsubst navi2ch-board-get-property (point) (get-text-property (save-excursion (goto-char point) (beginning-of-line) (point)) 'article)) (defalias 'navi2ch-board-get-article 'identity) (defsubst navi2ch-board-get-board (item) navi2ch-board-current-board) (defsubst navi2ch-board-exit () (run-hooks 'navi2ch-board-exit-hook) (navi2ch-board-save-info)) ;; regist board (navi2ch-bm-regist-board 'board 'navi2ch-board-select-board) ;; add hook (add-hook 'navi2ch-save-status-hook 'navi2ch-board-save-info) ;;; navi2ch-board functions (defsubst navi2ch-board-get-uri (board) "$B8e$m$N(B / $B$,IU$$$?(B uri $B$rJV$9!#(B" (let ((uri (cdr (assq 'uri board)))) (when uri (when (string-match "[^/]$" uri) (setq uri (concat uri "/"))) uri))) (defun navi2ch-board-get-host (board) (navi2ch-url-to-host (cdr (assq 'uri board)))) (defun navi2ch-board-get-url (board &optional file-name) (if (and file-name (string-match "^/" file-name)) (concat "http://" (navi2ch-board-get-host board) file-name) (concat (navi2ch-board-get-uri board) (or file-name navi2ch-board-subject-file-name)))) (defcustom navi2ch-board-default-bbscgi-path "/test/bbs.cgi" "*bbs.cgi $B$N%G%U%)%k%H$N(B path$B!#(B" :type 'string :group 'navi2ch-board) (defcustom navi2ch-board-bbscgi-path-alist nil "*$BHD(B URL $B$+$i(B bbs.cgi $B$N(B path $B$X$N(B alist$B!#(B" :type '(repeat (cons (string :tag "URL") (string :tag "path"))) :group 'navi2ch-board) (defun navi2ch-board-get-bbscgi-path (board) "bbs.cgi $B$N(B path $B$rJV$9!#(B" (let ((uri (navi2ch-board-get-uri board))) (or (cdr (assoc uri navi2ch-board-bbscgi-path-alist)) navi2ch-board-default-bbscgi-path))) (defun navi2ch-board-get-bbscgi-url (board) "bbs.cgi $B$N(B url $B$rJV$9!#(B" (let ((uri (navi2ch-board-get-uri board))) (string-match "\\(.+\\)/[^/]+/$" uri) (concat (match-string 1 uri) (navi2ch-board-get-bbscgi-path board)))) (defsubst navi2ch-board-equal (board1 board2) (string= (cdr (assq 'uri board1)) (cdr (assq 'uri board2)))) (defsubst navi2ch-board-get-file-name (board &optional file-name) (navi2ch-multibbs-board-get-file-name board file-name)) (defsubst navi2ch-board-from-file-p (board) (string= (cdr (assq 'name board)) navi2ch-board-name-from-file)) (defsubst navi2ch-board-get-matched-article () "match $B$7$?7k2L$+$i(B article $B$rF@$k!#(B" (let ((id (match-string 1)) (str (match-string 2)) (num (match-string 3))) ;; (setq str (navi2ch-replace-string "^ +" "" str) ;; str (navi2ch-replace-string " +$" "" str)) ;; $B$OCY$$!#(B (when (string-match "^ +" str) (setq str (replace-match "" nil t str))) (when (string-match " +$" str) (setq str (replace-match "" nil t str))) (list (cons 'subject str) (cons 'response num) (cons 'artid id) (cons 'down nil) (cons 'compressed nil)))) (defun navi2ch-board-url-to-board (url) "URL $B$+$i(B board $B$rF@$k!#(B" (let* ((alist (navi2ch-multibbs-url-to-board url)) (uri (cdr (assq 'uri alist))) (id (cdr (assq 'id alist))) board) (when id (dolist (x navi2ch-list-board-name-list) (when (string= (cdr (assq 'uri x)) uri) (setq board x))) (or board (let* ((alist (navi2ch-alist-list-to-alist navi2ch-list-board-name-list 'id 'name)) (host (navi2ch-url-to-host uri)) (name (concat (or (cdr (assoc id alist)) "No Name") "(" host ")"))) (list (cons 'uri uri) (cons 'id id) (cons 'type 'board) (cons 'name name))))))) (defun navi2ch-board-to-url (board) "BOARD $B$+$i(B url $B$KJQ49!#(B" (navi2ch-board-get-uri board)) (defun navi2ch-board-get-subject-list (file) "FILE $B$+$i%9%l$N(B list $B$r:n$k!#(B" (when (file-exists-p file) (with-temp-buffer (navi2ch-board-insert-file-contents navi2ch-board-current-board file nil nil) (run-hooks 'navi2ch-board-get-subject-list-hook) (navi2ch-apply-filters navi2ch-board-current-board navi2ch-board-filter-list) (navi2ch-replace-html-tag-with-buffer) (goto-char (point-min)) (let ((regexp (navi2ch-board-regexp-test)) ;; (file-list (directory-files ;; (navi2ch-board-get-file-name ;; navi2ch-board-current-board "") nil "\\.dat$")) list) (if (null regexp) nil (while (re-search-forward regexp nil t) (setq list (cons (navi2ch-board-get-matched-article) list))) (nreverse list)))))) (defun navi2ch-board-get-updated-subject-list (board) "$B0l;~E*$K(B update $B$7$F$+$i%9%l$N(B list $B$r:n$k!#(B" (let ((file (navi2ch-board-get-file-name board))) (unwind-protect (progn (navi2ch-board-save-old-subject-file board) (navi2ch-board-update-file board) (navi2ch-board-get-subject-list file)) (ignore-errors (navi2ch-board-save-old-subject-file board 'restore))))) (defun navi2ch-board-updated-article-p (article seen) (let* ((artid (cdr (assq 'artid article))) (res (cdr (assoc artid navi2ch-board-subject-alist))) old-res) (when res (if (setq old-res (cdr (assoc artid navi2ch-board-old-subject-alist))) (when (> (string-to-number res) (or seen (string-to-number old-res))) 'updated) 'new)))) (defun navi2ch-board-regexp-test () (save-excursion (beginning-of-line) (catch 'loop (dolist (regexp navi2ch-board-regexp-list) (when (looking-at regexp) (throw 'loop regexp)))))) (defun navi2ch-board-insert-subjects (list) (let ((bookmark (cdr (assq 'bookmark navi2ch-board-current-board))) (hide (cdr (assq 'hide navi2ch-board-current-board))) (summary (navi2ch-article-load-article-summary navi2ch-board-current-board)) (i 1)) (dolist (article list) (let* ((artid (cdr (assq 'artid article))) (seen (navi2ch-article-summary-element-seen (cdr (assoc artid summary)))) updated) (when (cond (navi2ch-board-bookmark-mode (member artid bookmark)) (navi2ch-board-hide-mode (member artid hide)) (navi2ch-board-updated-mode (if navi2ch-board-hide-updated-article (and (navi2ch-board-updated-article-p article seen) (not (member artid hide))) (navi2ch-board-updated-article-p article seen))) (t (not (member artid hide)))) (navi2ch-bm-insert-subject article i (cdr (assq 'subject article)) (let ((res (cdr (assq 'response article))) (last (and navi2ch-board-insert-subject-with-diff (or seen (cdr (assoc artid navi2ch-board-last-seen-alist)) (catch 'break (string-to-number (or (cdr (assoc artid navi2ch-board-old-subject-alist)) (throw 'break nil))))))) (read (and navi2ch-board-insert-subject-with-unread (navi2ch-article-get-last-read-number navi2ch-board-current-board article)))) (concat "(" (format "%4s" res) (and navi2ch-board-insert-subject-with-diff (concat "/" (if last (format "%5s" (format "+%d" (- (string-to-number res) last))) " -"))) (and navi2ch-board-insert-subject-with-unread (concat "/" (if read (substring (format " $B&$(B%d" (max 0 (- (string-to-number res) read))) -5) " -"))) ")")) (cond ((and navi2ch-board-check-updated-article-p (setq updated (navi2ch-board-updated-article-p article seen))) updated) (seen 'seen))) (setq i (1+ i))))))) (defun navi2ch-board-select-board (board &optional force) (let ((old-mode major-mode)) (navi2ch-board-mode) (navi2ch-bm-setup 'navi2ch-board) (setq navi2ch-board-bookmark-mode nil) (save-excursion (if (and (eq navi2ch-board-current-board board) (eq old-mode major-mode)) (navi2ch-board-sync force) (setq navi2ch-board-current-board (navi2ch-board-load-info board)) (run-hooks 'navi2ch-board-select-board-hook) (navi2ch-board-sync force 'first))))) (easy-menu-define navi2ch-board-mode-menu navi2ch-board-mode-map "Menu used in navi2ch-board" navi2ch-board-mode-menu-spec) (defun navi2ch-board-setup-menu () (easy-menu-add navi2ch-board-mode-menu)) (defun navi2ch-board-mode () "\\{navi2ch-board-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-board-mode) (setq mode-name "Navi2ch Board") (setq buffer-read-only t) (buffer-disable-undo) (use-local-map navi2ch-board-mode-map) (navi2ch-board-setup-menu) (run-hooks 'navi2ch-bm-mode-hook 'navi2ch-board-mode-hook) (force-mode-line-update)) (defun navi2ch-board-save-old-subject-file (board &optional restore) (let ((from (navi2ch-board-get-file-name board)) (to (navi2ch-board-get-file-name board navi2ch-board-old-subject-file-name))) (when restore (setq from (prog1 to (setq to from)))) (when (file-exists-p from) (let ((coding-system-for-write (navi2ch-board-get-coding-system board))) (with-temp-file to (navi2ch-board-insert-file-contents board from)))))) (defun navi2ch-board-update-seen-articles () (let ((summary (navi2ch-article-load-article-summary navi2ch-board-current-board))) (dolist (x summary) (let* ((element (cdr x)) (artid (car x)) (seen (navi2ch-article-summary-element-seen element))) (when (navi2ch-board-updated-article-p (list (cons 'artid artid)) seen) (setq navi2ch-board-last-seen-alist (navi2ch-put-alist artid seen navi2ch-board-last-seen-alist)) (navi2ch-article-summary-element-set-seen element nil)) (navi2ch-put-alist artid element summary))) (navi2ch-article-save-article-summary navi2ch-board-current-board summary))) (defun navi2ch-board-update-file (board) (unless navi2ch-offline (navi2ch-multibbs-board-update board))) (defun navi2ch-board-sync (&optional force first) (interactive "P") (run-hooks 'navi2ch-board-before-sync-hook) (save-excursion (let* ((buffer-read-only nil) (navi2ch-net-force-update (or navi2ch-net-force-update force)) (board navi2ch-board-current-board) (file (navi2ch-board-get-file-name board)) (old-file (navi2ch-board-get-file-name board navi2ch-board-old-subject-file-name)) time header) (unless navi2ch-offline (navi2ch-board-save-old-subject-file board) (setq header (navi2ch-board-update-file board)) (setq time (and (not (navi2ch-net-get-state 'not-updated header)) (not (navi2ch-net-get-state 'error header)) (or (cdr (assq 'last-modified header)) (cdr (assq 'date header))))) (when time (setq board (navi2ch-put-alist 'time time board)))) (setq navi2ch-board-current-board board) (when (or first time) (erase-buffer) (setq navi2ch-board-subject-list (navi2ch-board-get-subject-list file)) (setq navi2ch-board-subject-alist (navi2ch-alist-list-to-alist navi2ch-board-subject-list 'artid 'response)) (setq navi2ch-board-old-subject-list (navi2ch-board-get-subject-list old-file)) (setq navi2ch-board-old-subject-alist (navi2ch-alist-list-to-alist navi2ch-board-old-subject-list 'artid 'response)) (setq navi2ch-board-last-seen-alist nil) (when time (navi2ch-board-update-seen-articles)) (navi2ch-board-insert-subjects navi2ch-board-subject-list) (navi2ch-board-save-info) (navi2ch-board-set-mode-line)))) (run-hooks 'navi2ch-board-after-sync-hook)) (defun navi2ch-board-make-subject-txt () "subback.html $B$+$i(B (navi2ch $BMQ$N(B) subject.txt $B$r:n$k!#(B `navi2ch-net-update-file' $B$N%O%s%I%i!#(B" (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary) (case-fold-search t) (beg (point))) (while (re-search-forward ;; $B$3$N@55,I=8=$b;EMMJQ99$G$@$a$K$J$k$N$+$b!#(B ;; $B!D!D$J$j$^$7$?!#(B "]*\">[0-9]+[^0-9].\\(.*\\)" nil t) (let ((dat (match-string 1)) (title (match-string 2))) (delete-region beg (point)) (insert (format "%s.dat<>%s\n" dat title)) (setq beg (point)))) (delete-region beg (point-max)))) (defun navi2ch-board-set-mode-line () (let* ((board navi2ch-board-current-board) (host (navi2ch-url-to-host (cdr (assq 'uri board))))) (setq navi2ch-mode-line-identification (format "%s (%s) [%s]" (cdr (assq 'name board)) (cdr (assq 'id board)) host)) (navi2ch-set-mode-line-identification))) (defun navi2ch-board-write-message () (interactive) (navi2ch-message-write-message navi2ch-board-current-board nil t)) (defun navi2ch-board-save-info (&optional board) (or board (setq board navi2ch-board-current-board)) (when board (navi2ch-save-info (navi2ch-board-get-file-name board "board.info") (list (assq 'bookmark board) (assq 'hide board) (assq 'time board) (assq 'logo board))))) (defun navi2ch-board-load-info (&optional board) (or board (setq board navi2ch-board-current-board)) (let ((alist (navi2ch-load-info (navi2ch-board-get-file-name board "board.info")))) (dolist (x alist) (setq board (navi2ch-put-alist (car x) (cdr x) board))) board)) (defun navi2ch-board-save-spid (board spid) (navi2ch-save-info (navi2ch-board-get-file-name board "spid.txt") spid)) (defun navi2ch-board-load-spid (board) (navi2ch-load-info (navi2ch-board-get-file-name board "spid.txt"))) (defun navi2ch-board-select-view-range () (interactive) (setq-default navi2ch-article-view-range (navi2ch-article-select-view-range-subr))) (defun navi2ch-board-delete-line (sym func msg) (let ((artid (cdr (assq 'artid (get-text-property (point) 'article)))) (list (cdr (assq sym navi2ch-board-current-board)))) (if artid (progn (setq list (funcall func artid list)) (setq navi2ch-board-current-board (navi2ch-put-alist sym list navi2ch-board-current-board)) (let ((buffer-read-only nil)) (delete-region (save-excursion (beginning-of-line) (point)) (save-excursion (forward-line) (point)))) (and (eobp) (not (bobp)) (forward-line -1)) (message msg)) (message "Can't select this line!")))) (defun navi2ch-board-expire-date-p (key-time file access-time) (let ((time (ignore-errors (or access-time (navi2ch-file-mtime file))))) (and time key-time (navi2ch-compare-times key-time time)))) (defun navi2ch-board-expire (&optional board ask) (interactive) (and (interactive-p) (setq ask t)) (or board (setq board navi2ch-board-current-board)) (unless (eq board navi2ch-board-current-board) (setq board (navi2ch-board-load-info board))) (let ((dir (navi2ch-board-get-file-name board ""))) (when (and (file-exists-p dir) (or (not ask) (y-or-n-p "Expire current borad? ")) navi2ch-board-expire-date) (let ((article-list (mapcar (lambda (file) (list (cons 'artid (navi2ch-article-file-name-to-artid file)))) (directory-files dir nil navi2ch-article-local-dat-regexp))) (summary (navi2ch-article-load-article-summary board)) (key-time (navi2ch-add-days-to-time (current-time) (- navi2ch-board-expire-date))) (remove-list nil)) (message "Expiring %s..." (cdr (assq 'name board))) (dolist (article article-list) (let ((artid (cdr (assq 'artid article))) (file (navi2ch-article-get-file-name board article))) (when (and (or navi2ch-board-expire-bookmark-p (not (or (member artid (cdr (assq 'bookmark board))) (navi2ch-bookmark-exist-all board article)))) (or (not navi2ch-board-expire-orphan-only) (navi2ch-article-orphan-p board article)) (navi2ch-board-expire-date-p key-time file (navi2ch-article-summary-element-access-time (cdr (assoc artid summary))))) (push article remove-list) (when (assq 'hide board) (setcdr (assq 'hide board) (delq artid (cdr (assq 'hide board))))) (when navi2ch-board-expire-bookmark-p (when (assq 'bookmark board) (setcdr (assq 'bookmark board) (delq artid (cdr (assq 'bookmark board))))) (navi2ch-bookmark-delete-article-all board article))))) (navi2ch-bm-remove-article-subr board remove-list) (navi2ch-board-save-info board) (message "Expiring %s...done" (cdr (assq 'name board))))))) (defun navi2ch-board-toggle-minor-mode (mode) (dolist (m navi2ch-board-minor-mode-list) (if (eq m mode) (set m (not (symbol-value m))) (set m nil))) (force-mode-line-update) (let ((buffer-read-only nil)) (save-excursion (erase-buffer) (navi2ch-board-insert-subjects navi2ch-board-subject-list)))) ;;; bookmark mode (navi2ch-set-minor-mode 'navi2ch-board-bookmark-mode " Bookmark" navi2ch-board-bookmark-mode-map) (defun navi2ch-board-update-buffer (buffer) (let (point) (with-current-buffer buffer (let ((buffer-read-only nil) (artid (cdr (assq 'artid (get-text-property (point) 'article)))) p) (erase-buffer) (navi2ch-board-insert-subjects navi2ch-board-subject-list) (setq p (point-min)) (while p (if (equal artid (cdr (assq 'artid (get-text-property p 'article)))) (progn (goto-char p) (setq point p p nil)) (setq p (next-single-property-change p 'article)))))) (if point ;; $BI=<($7$F$k%P%C%U%!$N%+!<%=%k0LCV$r$9$Y$F99?7$9$k!#(B (save-selected-window (dolist (win (get-buffer-window-list buffer nil t)) (select-window win) (goto-char point)))))) (defun navi2ch-board-add-bookmark-subr (board article) (let ((buffer (get-buffer navi2ch-board-buffer-name)) (artid (cdr (assq 'artid article))) current-board list) (setq board (if (and (bufferp buffer) (eq (with-current-buffer buffer major-mode) 'navi2ch-board-mode) (equal (cdr (assq 'id navi2ch-board-current-board)) (cdr (assq 'id board)))) (progn (setq current-board t) navi2ch-board-current-board) (navi2ch-board-load-info board))) (setq list (cdr (assq 'bookmark board))) (when (and artid (not (member artid list))) (setq board (navi2ch-put-alist 'bookmark (cons artid list) board)) (message "Add bookmark") (if current-board (with-current-buffer buffer (setq navi2ch-board-current-board board) (if navi2ch-board-bookmark-mode (navi2ch-board-update-buffer buffer))) (navi2ch-board-save-info board))))) (defun navi2ch-board-add-bookmark () (interactive) (unless navi2ch-board-bookmark-mode (let ((article (get-text-property (point) 'article))) (if article (navi2ch-board-add-bookmark-subr navi2ch-board-current-board article) (message "Can't select this line!"))))) (defun navi2ch-board-delete-bookmark () (interactive) (navi2ch-board-delete-line 'bookmark 'delete "Delete bookmark")) (defun navi2ch-board-delete-bookmark-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-board-delete-bookmark)) (defun navi2ch-board-toggle-bookmark () (interactive) (navi2ch-board-toggle-minor-mode 'navi2ch-board-bookmark-mode)) (defun navi2ch-board-get-coding-system (board) "`navi2ch-board-coding-system-alist' $B$K(B BOARD $B$KBP1~$9$k(B coding-system $B$,$"(B $B$l$P$=$l$rJV$9!#(B $B$J$$>l9g$O(B `navi2ch-coding-system' $B$rJV$9!#(B" (or (cdr (assoc (cdr (assq 'id board)) navi2ch-board-coding-system-alist)) navi2ch-coding-system)) (defun navi2ch-board-insert-file-contents (board file &optional begin end) "`navi2ch-board-get-coding-system' $B$GFCDj$5$l$k(B coding-system $B$G(B `navi2ch-insert-file-contents' $B$9$k!#(B" (navi2ch-insert-file-contents file begin end (navi2ch-board-get-coding-system board))) ;;; hide mode (navi2ch-set-minor-mode 'navi2ch-board-hide-mode " Hide" navi2ch-board-hide-mode-map) (defun navi2ch-board-hide-article () (interactive) (navi2ch-board-delete-line 'hide (lambda (artid list) (if (member artid list) list (cons artid list))) "Hide article")) (defun navi2ch-board-hide-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-board-hide-article)) (defun navi2ch-board-cancel-hide () (interactive) (navi2ch-board-delete-line 'hide 'delete "Cancel hide article")) (defun navi2ch-board-cancel-hide-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-board-cancel-hide)) (defun navi2ch-board-toggle-hide () (interactive) (navi2ch-board-toggle-minor-mode 'navi2ch-board-hide-mode)) ;;; updated mode (navi2ch-set-minor-mode 'navi2ch-board-updated-mode " Updated" navi2ch-board-updated-mode-map) (defun navi2ch-board-toggle-updated () (interactive) (navi2ch-board-toggle-minor-mode 'navi2ch-board-updated-mode)) (run-hooks 'navi2ch-board-load-hook) ;;; navi2ch-board.el ends here navi2ch/navi2ch-bookmark.el000066400000000000000000000446511173560164300161070ustar00rootroot00000000000000;;; navi2ch-bookmark.el --- global bookmark module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008 by Navi2ch ;; Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-bookmark) (defconst navi2ch-bookmark-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch) (defvar navi2ch-bookmark-mode-map nil) (unless navi2ch-bookmark-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-bm-mode-map) ;; (define-key map "q" 'navi2ch-bookmark-exit) (define-key map "i" 'navi2ch-bookmark-fetch-article) (define-key map "D" 'navi2ch-bookmark-delete) (define-key map "d" 'navi2ch-bookmark-cut) (define-key map "\C-k" 'navi2ch-bookmark-cut) (define-key map "\C-y" 'navi2ch-bookmark-yank) (define-key map "o" 'navi2ch-bookmark-move) (define-key map "O" 'navi2ch-bookmark-copy) (define-key map "mi" 'navi2ch-bookmark-fetch-mark-article) (define-key map "md" 'navi2ch-bookmark-cut-mark-article) (define-key map "mD" 'navi2ch-bookmark-delete-mark-article) (define-key map "mo" 'navi2ch-bookmark-move-mark-article) (define-key map "s" 'navi2ch-bookmark-sync) (define-key map "X" 'navi2ch-bookmark-remember-order) (define-key map "S" 'navi2ch-bookmark-sort) (setq navi2ch-bookmark-mode-map map))) (defvar navi2ch-bookmark-mode-menu-spec (navi2ch-bm-make-menu-spec "Bookmark" nil)) (defvar navi2ch-bookmark-list nil "bookmark $B$rI=$9%j%9%H!#(B \((BOOKMARK-ID BOOKMARK-NAME (KEY (board BOARD) (article ARTICLE))...) ...) $B$H$$$&7A$r$7$F$$$k!#(B KEY $B$O(B (concat URI ARTID)") (defvar navi2ch-bookmark-cut-stack nil) (defvar navi2ch-bookmark-current-bookmark-id nil) (defvar navi2ch-bookmark-fetch-mark-article-check-update t) (defvar navi2ch-bookmark-fetch-mark-article-no-check-regexp nil) ;;; navi2ch-bm callbacks (defun navi2ch-bookmark-set-property (begin end item) (put-text-property begin end 'item item)) (defsubst navi2ch-bookmark-get-property (point) (get-text-property (save-excursion (goto-char point) (beginning-of-line) (point)) 'item)) (defsubst navi2ch-bookmark-get-article (item) (cdr (assq 'article (cdr (assoc item (cddr (assoc navi2ch-bookmark-current-bookmark-id navi2ch-bookmark-list))))))) (defsubst navi2ch-bookmark-get-board (item) (cdr (assq 'board (cdr (assoc item (cddr (assoc navi2ch-bookmark-current-bookmark-id navi2ch-bookmark-list))))))) (defsubst navi2ch-bookmark-exit () (run-hooks 'navi2ch-bookmark-exit-hook)) ;; regist board (navi2ch-bm-regist-board 'bookmark 'navi2ch-bookmark) ;; add hook (add-hook 'navi2ch-save-status-hook 'navi2ch-bookmark-save-info) (add-hook 'navi2ch-load-status-hook 'navi2ch-bookmark-load-info) ;;; navi2ch-bookmark functions (defun navi2ch-bookmark-convert () (interactive) (unless navi2ch-bookmark-list (navi2ch-bookmark-load-info)) (let ((id (navi2ch-read-string "input bookmark id: " "bmark")) (name (navi2ch-read-string "input bookmark name: " "$B%V%C%/%^!<%/(B")) (list navi2ch-bookmark-list)) (setq navi2ch-bookmark-list (list (append (list id name) list)))) (navi2ch-bookmark-save-info)) (defun navi2ch-bookmark-fix () (interactive) (dolist (bookmark navi2ch-bookmark-list) (while (assoc "" bookmark) (delete (assoc "" bookmark) bookmark)))) (defun navi2ch-bookmark-read-id (prompt) (completing-read prompt navi2ch-bookmark-list nil nil)) (defun navi2ch-bookmark-get-key (board article) (concat (cdr (assq 'uri board)) (cdr (assq 'artid article)))) (defun navi2ch-bookmark-exist (bookmark-id board article) (assoc (navi2ch-bookmark-get-key board article) (cddr (assoc bookmark-id navi2ch-bookmark-list)))) (defun navi2ch-bookmark-exist-all (board article) (catch 'exist (dolist (id (mapcar 'car navi2ch-bookmark-list)) (when (navi2ch-bookmark-exist id board article) (throw 'exist t))))) (defun navi2ch-bookmark-create-bookmark (bookmark-id) "$B%V%C%/%^!<%/(B BOOKMARK-ID $B$rDI2C$9$k!#(B" (unless (assoc bookmark-id navi2ch-bookmark-list) (when (member bookmark-id (mapcar (lambda (x) (cdr (assq 'id x))) navi2ch-list-board-name-list)) (error "Can't create this id's bookmark!")) (let ((name (read-string (concat "Input bookmark name for [" bookmark-id "]: ") bookmark-id))) (push (list bookmark-id name) navi2ch-bookmark-list) (with-current-buffer navi2ch-list-buffer-name (navi2ch-list-sync-global-bookmark-category)) (navi2ch-bookmark-save-info)))) (defun navi2ch-bookmark-delete-bookmark (bookmark-id) "$B%V%C%/%^!<%/(B BOOKMARK-ID $B$r:o=|$9$k!#(B" (let ((bookmark (assoc bookmark-id navi2ch-bookmark-list))) (when (y-or-n-p (concat "delete global bookmark " (cadr bookmark) "? ")) (setq navi2ch-bookmark-list (delete bookmark navi2ch-bookmark-list)) (save-current-buffer (set-buffer navi2ch-list-buffer-name) (navi2ch-list-sync-global-bookmark-category)) (navi2ch-bookmark-save-info)))) (defun navi2ch-bookmark-change-bookmark (bookmark-id) "$B%V%C%/%^!<%/(B BOOKMARK-ID $B$N(B ID$B!"L>>N$rJQ99$9$k!#(B" (let* ((bookmark (assoc bookmark-id navi2ch-bookmark-list)) (id (navi2ch-read-string "new bookmark ID: " (car bookmark))) (name (navi2ch-read-string "new bookmark name: " (cadr bookmark)))) (setcar bookmark id) (setcar (cdr bookmark) name) (with-current-buffer navi2ch-list-buffer-name (navi2ch-list-sync-global-bookmark-category)) (navi2ch-bookmark-save-info))) (defun navi2ch-bookmark-add-subr (bookmark-id board article) "BOARD $B$H(B ARTICLE $B$GI=$5$l$k(B $B%9%l%C%I$rDI2C!#(B" (unless (assoc bookmark-id navi2ch-bookmark-list) (navi2ch-bookmark-create-bookmark bookmark-id)) (let ((bookmark (assoc bookmark-id navi2ch-bookmark-list))) (setcdr (cdr bookmark) (navi2ch-put-alist (navi2ch-bookmark-get-key board article) (list (cons 'board board) (cons 'article article)) (cddr bookmark)))) (navi2ch-bookmark-save-info)) (defun navi2ch-bookmark-add (bookmark-id board article) (navi2ch-bookmark-add-subr bookmark-id board article) (message "Add current article to global bookmark")) (defun navi2ch-bookmark-insert-subject (num item) (navi2ch-bm-insert-subject item num (cdr (assq 'subject (navi2ch-bookmark-get-article item))) (format "[%s]" (cdr (assq 'name (navi2ch-bookmark-get-board item)))))) (defun navi2ch-bookmark-insert-subjects () (let ((i 1)) (dolist (x (cddr (assoc navi2ch-bookmark-current-bookmark-id navi2ch-bookmark-list))) (navi2ch-bookmark-insert-subject i (car x)) (setq i (1+ i))))) (defun navi2ch-bookmark-delete-key (bookmark-id key) "$B%V%C%/%^!<%/(B BOOKMARK-ID $B$+$i%9%l%C%I$r:o=|$9$k!#(B $B:o=|$5$l$k$N$O(B KEY $B$GI=$o$5$l$k%9%l%C%I!#(B" (let* ((bookmark (assoc bookmark-id navi2ch-bookmark-list)) (node (assoc key (cddr bookmark)))) (when bookmark (setcdr bookmark (delete node (cdr bookmark))) (navi2ch-bookmark-save-info) t))) (defun navi2ch-bookmark-delete-article (bookmark-id board article) "$B%V%C%/%^!<%/(B BOOKMARK-ID $B$+$i%9%l%C%I$r:o=|$9$k!#(B $B:o=|$5$l$k$N$O(B BOARD, ARTICLE $B$GI=$o$5$l$k%9%l%C%I!#(B" (navi2ch-bookmark-delete-key bookmark-id (navi2ch-bookmark-get-key board article))) (defun navi2ch-bookmark-delete-article-all (board article) "BOARD, ARTICLE $B$GI=$o$5$l$k%9%l%C%I$rA4$F$N%V%C%/%^!<%/$+$i:o=|$9$k!#(B" (dolist (node navi2ch-bookmark-list) (navi2ch-bookmark-delete-article (car node) board article))) (defun navi2ch-bookmark-delete-subr () "$B$=$N9T$r(B bookmark $B$+$i3NG'$J$7$G:o=|$9$k!#(B" (let ((item (save-excursion (beginning-of-line) (navi2ch-bookmark-get-property (point)))) (buffer-read-only nil)) (if item (when (navi2ch-bookmark-delete-key navi2ch-bookmark-current-bookmark-id item) (delete-region (save-excursion (beginning-of-line) (point)) (save-excursion (forward-line) (point))) (navi2ch-bm-renumber) (and (eobp) (not (bobp)) (forward-line -1))) (message "Can't select this line!")))) (defun navi2ch-bookmark-delete () "$B$=$N9T$r(B bookmark $B$+$i:o=|$9$k!#(B" (interactive) (if (y-or-n-p "Delete this line? ") (navi2ch-bookmark-delete-subr))) (defun navi2ch-bookmark-delete-mark-article () (interactive) (if (y-or-n-p "Delete these lines? ") (navi2ch-bm-exec-subr 'navi2ch-bookmark-delete-subr))) (defun navi2ch-bookmark-copy (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Copy to: "))) (if (equal bookmark-id navi2ch-bookmark-current-bookmark-id) (message "Same bookmark") (save-excursion (beginning-of-line) (let ((item (navi2ch-bookmark-get-property (point)))) (navi2ch-bookmark-add-subr bookmark-id (navi2ch-bookmark-get-board item) (navi2ch-bookmark-get-article item)) (navi2ch-bookmark-save-info))))) (defun navi2ch-bookmark-move (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Move to: "))) (if (equal bookmark-id navi2ch-bookmark-current-bookmark-id) (message "Same bookmark") (navi2ch-bookmark-copy bookmark-id) (navi2ch-bookmark-delete-subr))) (defun navi2ch-bookmark-move-mark-article (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Move to: "))) (navi2ch-bm-exec-subr 'navi2ch-bookmark-move bookmark-id)) (defun navi2ch-bookmark-cut () (interactive) (let ((item (save-excursion (beginning-of-line) (navi2ch-bookmark-get-property (point)))) (bookmark (assoc navi2ch-bookmark-current-bookmark-id navi2ch-bookmark-list))) (if item (progn (push (assoc item (cddr bookmark)) navi2ch-bookmark-cut-stack) (navi2ch-bookmark-delete-subr)) (message "Can't select this line!")))) (defun navi2ch-bookmark-cut-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-bookmark-cut)) (defun navi2ch-bookmark-yank () (interactive) (let ((pair (pop navi2ch-bookmark-cut-stack)) (bookmark (assoc navi2ch-bookmark-current-bookmark-id navi2ch-bookmark-list))) (if pair (progn (if (eobp) (setcdr (last bookmark) (list pair)) (let ((list (member (assoc (navi2ch-bookmark-get-property (point)) (cddr bookmark)) (cddr bookmark)))) (setcdr list (copy-sequence list)) (setcar list pair))) (beginning-of-line) (let ((buffer-read-only nil)) (navi2ch-bookmark-insert-subject 0 (car pair))) (navi2ch-bm-renumber) (forward-line -1)) (message "Stack is empty")))) ;; (defun navi2ch-bookmark-exit () ;; (interactive) ;; (bury-buffer) ;; (set-window-configuration navi2ch-bookmark-window-configuration)) (defun navi2ch-bookmark-goto-bookmark (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Bookmark ID: "))) (let ((bookmark (assoc bookmark-id navi2ch-bookmark-list))) (navi2ch-list-select-board (list (cons 'id (car bookmark)) (cons 'name (cadr bookmark)) (cons 'type 'bookmark))))) (defun navi2ch-bookmark (board &rest args) "bookmark $B$rI=<($9$k!#(B" (let ((bookmark-id (cdr (assq 'id board)))) (navi2ch-bookmark-mode) (setq navi2ch-bookmark-current-bookmark-id bookmark-id) (navi2ch-bm-setup 'navi2ch-bookmark) (navi2ch-bookmark-sync))) (defun navi2ch-bookmark-sync () (interactive) (let ((buffer-read-only nil)) (erase-buffer) (save-excursion (navi2ch-bookmark-insert-subjects)))) (easy-menu-define navi2ch-bookmark-mode-menu navi2ch-bookmark-mode-map "Menu used in navi2ch-bookmark" navi2ch-bookmark-mode-menu-spec) (defun navi2ch-bookmark-setup-menu () (easy-menu-add navi2ch-bookmark-mode-menu)) (defun navi2ch-bookmark-mode () "\\{navi2ch-bookmark-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-bookmark-mode) (setq mode-name "Navi2ch Bookmark") (setq buffer-read-only t) (buffer-disable-undo) (use-local-map navi2ch-bookmark-mode-map) (navi2ch-bookmark-setup-menu) (run-hooks 'navi2ch-bm-mode-hook 'navi2ch-bookmark-mode-hook)) (defun navi2ch-bookmark-save-info () (let ((info (mapcar (lambda (y) (append (list (car y) (cadr y)) (mapcar (lambda (x) (let ((board (cdr (assq 'board (cdr x)))) (article (cdr (assq 'article (cdr x))))) (cons (car x) (list (cons 'board (list (assq 'name board) (assq 'uri board) (assq 'id board))) (cons 'article (list (assq 'subject article) (assq 'artid article))))))) (cddr y)))) navi2ch-bookmark-list))) (navi2ch-save-info navi2ch-bookmark-file info t))) (defun navi2ch-bookmark-load-info () (setq navi2ch-bookmark-list (navi2ch-load-info navi2ch-bookmark-file))) (defun navi2ch-bookmark-fetch-article (&optional force) ;; navi2ch-bm-fetch-article $B$N(B wrapper $B$H$7$FF/$-!"(Bsubject $B$,(B nil $B$J$i(B ;; $B%U%!%$%k$+$i(B subject $B$r8+$D$1$F99?7$9$k!#(B (interactive "P") (let* ((item (navi2ch-bookmark-get-property (point))) (board (navi2ch-bookmark-get-board item)) (article (navi2ch-bookmark-get-article item)) state) (setq state (navi2ch-bm-fetch-article force)) (unless (assq 'subject article) (let ((newsubject (let ((file (navi2ch-article-get-file-name board article))) (when (and file (file-exists-p file)) ;; dat $B$r(B $BA4ItFI$^$:!"F,$N(B1$B9T$@$1FI$`$N$O$I$&$9$l$P(B? ;; $B26$bCN$i$J$$$G$9(B:-) (cdr (assq 'subject (navi2ch-article-get-first-message-from-file file board))))))) (when newsubject (setq article (navi2ch-put-alist 'subject newsubject article)) (navi2ch-bookmark-add-subr navi2ch-bookmark-current-bookmark-id board article)))) state)) (defun navi2ch-bookmark-fetch-mark-article (&optional force) (interactive "P") (unless navi2ch-offline (when navi2ch-bookmark-fetch-mark-article-check-update (save-excursion (let ((board-data-cache (navi2ch-make-cache nil 'equal))) (goto-char (point-min)) (while (not (eobp)) (navi2ch-bm-goto-mark-column) (when (looking-at "\\*") (let* ((item (navi2ch-bm-get-property-internal (point))) (board (navi2ch-bm-get-board-internal item)) (article (navi2ch-bm-get-article-internal item)) ;; (bbstype (cdr (assq 'bbstype board))) (board-uri (cdr (assq 'uri board))) (art-id (cdr (assq 'artid article))) (info (navi2ch-article-load-info board article)) (res (string-to-number (or (cdr (assq 'response info)) "0"))) new-res board-data) (when (or (null navi2ch-bookmark-fetch-mark-article-no-check-regexp) (not (string-match navi2ch-bookmark-fetch-mark-article-no-check-regexp board-uri))) (setq board-data (navi2ch-cache-get board-uri (mapcar (lambda (x) (cons (cdr (assq 'artid x)) (string-to-number (cdr (assq 'response x))))) (navi2ch-board-get-updated-subject-list board)) board-data-cache)) (setq new-res (cdr (assoc art-id board-data))) (cond ;; $B$*$A$F$k(B ((not new-res) (unless (memq (navi2ch-bm-get-state) '(view update)) (navi2ch-bm-insert-state (navi2ch-bm-get-property-internal (point)) 'down)) (setq info (navi2ch-put-alist 'down t info)) (navi2ch-article-save-info board info) (navi2ch-article-compress board info) (navi2ch-bm-unmark)) ((and res new-res) ;; $BH!#(B" (setq navi2ch-bookmark-list (mapcar (lambda (bookmark) (append (list (car bookmark) (cadr bookmark)) (mapcar (lambda (node) (let* ((board (cdr (assq 'board node))) (article (cdr (assq 'article node))) (changed (assoc (cdr (assq 'id board)) changed-list))) (if changed (let ((new-board (caddr changed))) (list (navi2ch-bookmark-get-key new-board article) (cons 'board new-board) (cons 'article article))) node))) (cddr bookmark)))) navi2ch-bookmark-list)) (navi2ch-bookmark-save-info)) (defun navi2ch-bookmark-get-buffer (bookmark-id) "BOOKMARK-ID $B$G;XDj$9$k(B bookmark $B%P%C%U%!$rJV$9!#(B" (save-current-buffer (let ((buf (get-buffer navi2ch-board-buffer-name))) (when (and buf (progn ; $B0O$`I,MW$J$5$=$&$@$1$IG0$N$?$a(B (set-buffer buf) (eq major-mode 'navi2ch-bookmark-mode)) bookmark-id (equal navi2ch-bookmark-current-bookmark-id bookmark-id)) buf)))) (defun navi2ch-bookmark-remember-order () "$B%V%C%/%^!<%/$N8=:_$N%9%l$NJB$S=g$r5-21$9$k!#(B" (interactive) (let ((bookmark (assoc navi2ch-bookmark-current-bookmark-id navi2ch-bookmark-list)) list item) (save-excursion (goto-char (point-max)) (while (eq 0 (forward-line -1)) (and (setq item (navi2ch-bookmark-get-property (point))) (push (assoc item (cddr bookmark)) list)))) (setcdr (cdr bookmark) list) (navi2ch-bm-renumber))) (defun navi2ch-bookmark-sort (&optional arg) (interactive "P") (navi2ch-bm-sort arg) (and navi2ch-bookmark-remember-order-after-sort (navi2ch-bookmark-remember-order))) (run-hooks 'navi2ch-bookmark-load-hook) ;;; navi2ch-bookmark.el ends here navi2ch/navi2ch-config.el.in000066400000000000000000000021221173560164300161370ustar00rootroot00000000000000;;; -*- Emacs-Lisp -*- ;;; @configure_input@ ;;; navi2ch-config.el --- configure variables ;; Copyright (C) 2006 Navi2ch Project ;; Author: Nanashi San ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-config) (defconst navi2ch-config-ident "$Id$") (defconst navi2ch-config-icondir "@icondir@") ;;; navi2ch-config.el ends here navi2ch/navi2ch-directory.el000066400000000000000000000113461173560164300163010ustar00rootroot00000000000000;;; navi2ch-directory.el --- List directory files Module for Navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004, 2005, 2008 by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-directory) (defconst navi2ch-directory-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch) (defvar navi2ch-directory-mode-map nil) (unless navi2ch-directory-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-bm-mode-map) (define-key map "s" 'navi2ch-directory-sync) (setq navi2ch-directory-mode-map map))) (defvar navi2ch-directory-mode-menu-spec (navi2ch-bm-make-menu-spec "Directory" nil)) (defvar navi2ch-directory-board '((name . "$B%U%!%$%k0lMw(B") (type . directory) (id . "#directory"))) (defvar navi2ch-directory-current-board nil) (defvar navi2ch-directory-subject-list nil) ;;; navi2ch-bm callbacks (defun navi2ch-directory-set-property (begin end item) (put-text-property begin end 'item item)) (defun navi2ch-directory-get-property (point) (get-text-property (save-excursion (goto-char point) (beginning-of-line) (point)) 'item)) (defun navi2ch-directory-get-article (item) item) (defun navi2ch-directory-get-board (item) navi2ch-directory-current-board) (defun navi2ch-directory-exit () (run-hooks 'navi2ch-directory-exit-hook)) ;; regist board (navi2ch-bm-regist-board 'directory 'navi2ch-directory navi2ch-directory-board) ;;; navi2ch-directory functions (defun navi2ch-directory-insert-subjects () (let ((i 1)) (dolist (article navi2ch-directory-subject-list) (navi2ch-bm-insert-subject article i (cdr (assq 'subject article)) (format "[%s]" (cdr (assq 'artid article)))) (setq i (1+ i))))) (defun navi2ch-directory-set-current-board (directory) (setq directory (expand-file-name directory)) (setq navi2ch-directory-current-board (list (cons 'name navi2ch-board-name-from-file) (cons 'uri (navi2ch-filename-to-url directory)) (cons 'id "navi2ch")))) (defun navi2ch-directory-set-subject-list (directory) (setq directory (file-name-as-directory (expand-file-name directory))) (setq navi2ch-directory-subject-list (mapcar (lambda (file) (setq file (concat directory file)) (list (cons 'subject (cdr (assq 'subject (navi2ch-article-get-first-message-from-file file)))) (cons 'artid (navi2ch-article-file-name-to-artid file)))) (sort (directory-files directory nil navi2ch-article-local-dat-regexp t) (lambda (x y) (not (navi2ch-right-aligned-string< x y))))))) (defun navi2ch-directory-find-directory (directory) (interactive "DDirectory: ") (when (file-directory-p directory) (setq directory (expand-file-name directory)) (setq default-directory directory) (navi2ch-directory-set-current-board directory) (navi2ch-directory-set-subject-list directory) (navi2ch-bm-select-board navi2ch-directory-board))) (defun navi2ch-directory (&rest args) "directory $B$rI=<($9$k!#(B" (navi2ch-directory-mode) (navi2ch-bm-setup 'navi2ch-directory) (navi2ch-directory-sync)) (defun navi2ch-directory-sync () (interactive) (let ((buffer-read-only nil)) (erase-buffer) (save-excursion (navi2ch-directory-insert-subjects)))) (easy-menu-define navi2ch-directory-mode-menu navi2ch-directory-mode-map "Menu used in navi2ch-directory" navi2ch-directory-mode-menu-spec) (defun navi2ch-directory-setup-menu () (easy-menu-add navi2ch-directory-mode-menu)) (defun navi2ch-directory-mode () "\\{navi2ch-directory-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-directory-mode) (setq mode-name "Navi2ch Directory") (setq buffer-read-only t) (buffer-disable-undo) (use-local-map navi2ch-directory-mode-map) (navi2ch-directory-setup-menu) (run-hooks 'navi2ch-bm-mode-hook 'navi2ch-directory-mode-hook)) (run-hooks 'navi2ch-directory-load-hook) ;;; navi2ch-directory.el ends here navi2ch/navi2ch-e21.el000066400000000000000000000056401173560164300146640ustar00rootroot00000000000000;;; navi2ch-e21.el --- GNU Emacs 21 module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2004 by Navi2ch Project ;; Copyright (C) 2000,2001 Katsumi Yamaoka ;; Copyright (C) 2000,2001 Yuuichi Teranishi ;; Author: UEYAMA Rui ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-e21) (defconst navi2ch-e21-ident "$Id$") (require 'navi2ch) ;;; $B0J2 ;; Keywords: network 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-face) (defconst navi2ch-face-ident "$Id$") (defgroup navi2ch-face nil "Navi2ch, Faces." :prefix "navi2ch-" :group 'navi2ch) (defface navi2ch-list-category-face '((((class color) (background light)) (:foreground "Gray30" :bold t)) (((class color) (background dark)) (:foreground "SkyBlue" :bold t))) "$B%+%F%4%j$N(B face" :group 'navi2ch-face) (defface navi2ch-list-board-name-face '((((class color) (background light)) (:foreground "Navy")) (((class color) (background dark)) (:foreground "SkyBlue"))) "$BHDL>$N(B face" :group 'navi2ch-face) (defface navi2ch-list-add-board-name-face '((((class color) (background light)) (:foreground "FireBrick" :bold t)) (((class color) (background dark)) (:foreground "cyan" :bold t))) "$BDI2C$5$l$?HDL>$N(B face" :group 'navi2ch-face) (defface navi2ch-list-change-board-name-face '((((class color) (background light)) (:foreground "DarkOliveGreen" :bold t)) (((class color) (background dark)) (:foreground "GreenYellow" :bold t))) "$BJQ99$5$l$?HDL>$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-unread-face '((((class color) (background light)) (:foreground "DarkOliveGreen")) (((class color) (background dark)) (:foreground "GreenYellow"))) "$BFI$s$G$J$$%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-view-face '((((class color) (background light)) (:foreground "FireBrick")) (((class color) (background dark)) (:foreground "cyan"))) "$BI=<($7$F$$$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-cache-face '((((class color) (background light)) (:foreground "Navy")) (((class color) (background dark)) (:foreground "SkyBlue"))) "$BFI$s$@;v$,$"$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-update-face '((((class color) (background light)) (:foreground "SaddleBrown")) (((class color) (background dark)) (:foreground "LightSkyBlue"))) "$B99?7$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-down-face '((((class color) (background light)) (:foreground "Black" :bold t)) (((class color) (background dark)) (:foreground "White" :bold t))) "dat$BMn$A$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-mark-face '((((class color) (background light)) (:foreground "Tomato3")) (((class color) (background dark)) (:foreground "tomato"))) "$B%^!<%/$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-new-unread-face '((((class color) (background light)) (:foreground "DarkOliveGreen" :bold t)) (((class color) (background dark)) (:foreground "GreenYellow" :bold t))) "$B?7$7$$FI$s$G$J$$%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-new-view-face '((((class color) (background light)) (:foreground "FireBrick" :bold t)) (((class color) (background dark)) (:foreground "PaleGreen" :bold t))) "$B?7$7$$I=<($7$F$$$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-new-cache-face '((((class color) (background light)) (:foreground "Navy" :bold t)) (((class color) (background dark)) (:foreground "SkyBlue" :bold t))) "$B?7$7$$FI$s$@;v$,$"$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-new-update-face '((((class color) (background light)) (:foreground "SaddleBrown" :bold t)) (((class color) (background dark)) (:foreground "LightSkyBlue" :bold t))) "$B?7$7$$99?7$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-new-mark-face '((((class color) (background light)) (:foreground "Tomato3" :bold t)) (((class color) (background dark)) (:foreground "tomato" :bold t))) "$B?7$7$$%^!<%/$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-updated-unread-face '((((class color) (background light)) (:foreground "DarkOliveGreen" :bold t)) (((class color) (background dark)) (:foreground "GreenYellow" :bold t))) "$B%l%9$,$"$C$?FI$s$G$J$$%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-updated-view-face '((((class color) (background light)) (:foreground "FireBrick" :bold t)) (((class color) (background dark)) (:foreground "PaleGreen" :bold t))) "$B%l%9$,$"$C$?I=<($7$F$$$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-updated-cache-face '((((class color) (background light)) (:foreground "Navy" :bold t)) (((class color) (background dark)) (:foreground "SkyBlue" :bold t))) "$B%l%9$,$"$C$?FI$s$@;v$,$"$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-updated-update-face '((((class color) (background light)) (:foreground "SaddleBrown" :bold t)) (((class color) (background dark)) (:foreground "LightSkyBlue" :bold t))) "$B%l%9$,$"$C$?99?7$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-updated-mark-face '((((class color) (background light)) (:foreground "Tomato3" :bold t)) (((class color) (background dark)) (:foreground "tomato" :bold t))) "$B%l%9$,$"$C$?%^!<%/$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-seen-unread-face '((((class color) (background light)) (:foreground "DarkOliveGreen" :underline t)) (((class color) (background dark)) (:foreground "GreenYellow" :underline t))) "$B$9$G$K8+$?FI$s$G$J$$%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-seen-view-face '((((class color) (background light)) (:foreground "FireBrick" :underline t)) (((class color) (background dark)) (:foreground "PaleGreen" :underline t))) "$B$9$G$K8+$?I=<($7$F$$$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-seen-cache-face '((((class color) (background light)) (:foreground "Navy" :underline t)) (((class color) (background dark)) (:foreground "SkyBlue" :underline t))) "$B$9$G$K8+$?FI$s$@;v$,$"$k%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-seen-update-face '((((class color) (background light)) (:foreground "SaddleBrown" :underline t)) (((class color) (background dark)) (:foreground "LightSkyBlue" :underline t))) "$B$9$G$K8+$?99?7$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-bm-seen-mark-face '((((class color) (background light)) (:foreground "Tomato3" :underline t)) (((class color) (background dark)) (:foreground "tomato" :underline t))) "$B$9$G$K8+$?%^!<%/$7$?%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-article-header-face '((((class color) (background light)) (:foreground "Gray30" :bold t)) (((class color) (background dark)) (:foreground "gray" :bold t))) "$B%X%C%@$N(B From $B$H$+$NItJ,$N(B face" :group 'navi2ch-face) (defface navi2ch-article-header-contents-face '((((class color) (background light)) (:foreground "Navy")) (((class color) (background dark)) (:foreground "yellow"))) "$B%X%C%@$NFbMF$NJ}$N(B face" :group 'navi2ch-face) (defface navi2ch-article-header-fusianasan-face '((((class color) (background light)) (:underline t :foreground "Navy")) (((class color) (background dark)) (:underline t :foreground "yellow"))) "$B$U$7$"$J$5$s$rI=<($9$k:]$N(B face" :group 'navi2ch-face) (defface navi2ch-article-link-face '((((class color) (background light)) (:bold t)) (((class color) (background dark)) (:bold t))) "$BF1$8%9%lCf$X$N%j%s%/$N(B face" :group 'navi2ch-face) (defface navi2ch-article-url-face '((((class color) (background light)) (:bold t)) (((class color) (background dark)) (:bold t))) "url $B$N(B face" :group 'navi2ch-face) (defface navi2ch-article-citation-face '((((class color) (background light)) (:foreground "FireBrick")) (((class color) (background dark)) (:foreground "HotPink1"))) "$B0zMQ$N(B face" :group 'navi2ch-face) (defface navi2ch-article-face nil "$B%9%l$N(B face" :group 'navi2ch-face) (defface navi2ch-article-auto-decode-face '((((class color) (background light)) (:background "gray90")) (((class color) (background dark)) (:foreground "gray10"))) "$B%9%l$N%(%s%3!<%I$5$l$?%;%/%7%g%s$N(B face" :group 'navi2ch-face) (defface navi2ch-article-message-separator-face '((((class color) (background light)) (:foreground "SpringGreen4")) (((class color) (background dark)) (:foreground "firebrick"))) "$B%l%9$N6h@Z$N(B face" :group 'navi2ch-face) (defface navi2ch-splash-screen-face '((((type tty) (background dark)) (:foreground "cyan")) (((class color) (background dark)) (:foreground "SkyBlue")) (((class color) (background light)) (:foreground "SteelBlue"))) "Face used for displaying splash screen." :group 'navi2ch-face) (defface navi2ch-message-link-face '((((class color) (background light)) (:bold t)) (((class color) (background dark)) (:bold t))) "$BF1$8%9%lCf$X$N%j%s%/$N(B face" :group 'navi2ch-face) (defface navi2ch-message-url-face '((((class color) (background light)) (:bold t)) (((class color) (background dark)) (:bold t))) "url $B$N(B face" :group 'navi2ch-face) (defface navi2ch-message-citation-face '((((class color) (background light)) (:foreground "FireBrick")) (((class color) (background dark)) (:foreground "HotPink1"))) "$B0zMQ$N(B face" :group 'navi2ch-face) (run-hooks 'navi2ch-face-load-hook) ;;; navi2ch-face.el ends here navi2ch/navi2ch-futaba.el000066400000000000000000000032311173560164300155310ustar00rootroot00000000000000;;; navi2ch-futaba.el --- View futaba module for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004 by Navi2ch Project ;; Author: ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-futaba) (eval-when-compile (require 'cl)) (require 'navi2ch-util) (require 'navi2ch-multibbs) (defvar navi2ch-futaba-func-alist '((bbs-p . navi2ch-futaba-p) (send-success-p . navi2ch-futaba-send-message-success-p) )) (defvar navi2ch-futaba-variable-alist (list (cons 'coding-system navi2ch-coding-system))) (navi2ch-multibbs-regist 'futaba navi2ch-futaba-func-alist navi2ch-futaba-variable-alist) ;;------------- (defun navi2ch-futaba-p (uri) "URI $B$,$U$?$P$A$c$s$M$k$J$i$P(B non-nil$B$rJV$9!#(B" (string-match "http://www.2chan.net/" uri)) (defun navi2ch-futaba-send-message-success-p (proc) (string= "302" (navi2ch-net-get-status proc))) (provide 'navi2ch-futaba) ;;; navi2ch-futaba.el ends here navi2ch/navi2ch-head.el000066400000000000000000000163671173560164300152060ustar00rootroot00000000000000;;; navi2ch-head.el --- View a local rule mode for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2008 by Navi2ch Project ;; Author: $BI($rBG$DC$9!#(B" (interactive) (run-hooks 'navi2ch-head-exit-hook) (let ((exit (get-text-property (point-min) 'navi2ch-head-exit)) (board navi2ch-head-current-board) (article navi2ch-head-current-article) win buf) (cond ((eq exit 'navi2ch-article-mode) (setq buf (get-buffer (navi2ch-article-get-buffer-name board article))) (if buf (if (setq win (get-buffer-window buf)) (select-window win) (switch-to-buffer buf)) (navi2ch-article-view-article board article))) ((eq exit 'navi2ch-board-mode) (setq buf (get-buffer navi2ch-board-buffer-name)) (if buf (if (setq win (get-buffer-window buf)) (select-window win) (switch-to-buffer buf)) (navi2ch-bm-select-board board))) ((eq exit 'navi2ch-list-mode) (setq buf (get-buffer navi2ch-list-buffer-name)) (if buf (if (setq win (get-buffer-window buf)) (select-window win) (switch-to-buffer buf)) (navi2ch-list)))) (navi2ch-head-kill-buffer))) (defun navi2ch-head-select-current-w3m-link (&optional browse-p) "Emacs-w3m $B$N%j%s%/$r(B navi2ch $B$r;H$C$F$?$I$k!#(B" (interactive "P") (let ((url (get-text-property (point) 'w3m-href-anchor))) (if url (if (and (navi2ch-2ch-url-p url) (or (navi2ch-board-url-to-board url) (navi2ch-article-url-to-article url)) (not browse-p)) (navi2ch-goto-url url) (navi2ch-browse-url-internal url)) (message "No URL at point")))) (defun navi2ch-head-set-mode-line () (setq navi2ch-mode-line-identification (format "[%s]" (cdr (assq 'name navi2ch-head-current-board)))) (navi2ch-set-mode-line-identification)) ;; Entry points from navi2ch-{article,board,list}-mode (define-key navi2ch-article-mode-map "H" 'navi2ch-head-get-head-txt) (define-key navi2ch-board-mode-map "H" 'navi2ch-head-get-head-txt) (define-key navi2ch-list-mode-map "H" 'navi2ch-head-get-head-txt) (defun navi2ch-head-get-head-txt (&optional force) "$B%m!<%+%k%k!<%k$r;}$C$F$-$FI=<(!#(Bhead.txt $B$KJ]B8$7$A$c$&$h!#(B emacs-w3m $B$,$"$l$P(B w3m $B$GI=<($7$^$D!#(B" (interactive "P") (cond ((eq major-mode 'navi2ch-article-mode) (setq navi2ch-head-current-board navi2ch-article-current-board navi2ch-head-current-article navi2ch-article-current-article)) ((eq major-mode 'navi2ch-board-mode) (setq navi2ch-head-current-board navi2ch-board-current-board navi2ch-head-current-article nil)) ((eq major-mode 'navi2ch-list-mode) (setq navi2ch-head-current-board (get-text-property (navi2ch-line-beginning-position) 'board) navi2ch-head-current-article nil) (unless (eq (cdr (assq 'type navi2ch-head-current-board)) 'board) (setq navi2ch-head-current-board nil)))) (unless (or navi2ch-head-current-board navi2ch-head-current-article) (error "Cannot get local rule here")) (let* ((navi2ch-net-force-update (or navi2ch-net-force-update force)) (board navi2ch-head-current-board) (uri (navi2ch-board-get-url board navi2ch-head-file-name)) (file (navi2ch-board-get-file-name board navi2ch-head-file-name)) (exit major-mode) (win (or (get-buffer-window navi2ch-head-buffer-name) (and (navi2ch-article-current-buffer) (get-buffer-window (navi2ch-article-current-buffer))) (get-buffer-window navi2ch-board-buffer-name))) time header) (unless (or navi2ch-offline ;; navi2ch-multibbs-head-update $BI,MW!)(B (eq (navi2ch-multibbs-get-bbstype board) 'localfile)) (setq time (navi2ch-head-load-time)) (setq header (navi2ch-net-update-file uri file time)) (setq time (and (not (navi2ch-net-get-state 'not-updated header)) (not (navi2ch-net-get-state 'error header)) (or (cdr (assq 'last-modified header)) (cdr (assq 'date header))))) (when time (navi2ch-head-save-time time))) (when win (select-window win)) (set-buffer (get-buffer-create navi2ch-head-buffer-name)) (navi2ch-head-mode) (let ((buffer-read-only nil)) (erase-buffer) (when (file-exists-p file) (navi2ch-insert-file-contents file)) (if (eq (point-max) (point-min)) (insert "'H'$B$r2!$9!#(B\n" " $B"-(B\n" "$BHD%m!<%+%k%k!<%k$r8+$k!#(B\n" " $B"-(B\n" "$BHD%m!<%+%k%k!<%k$O$J$$(B!\n" " $B"-(B\n" "((I_$B'U(I_(B)(IO<^3O0(B\n") (when (locate-library "w3m") (require 'w3m) (w3m-region (point-min) (point-max) uri) (w3m-minor-mode 1))) (goto-char (point-min)) (put-text-property (point) (1+ (point)) 'navi2ch-head-exit exit) (set-buffer-modified-p nil)) (switch-to-buffer (current-buffer)) (navi2ch-head-set-mode-line))) (run-hooks 'navi2ch-head-load-hook) ;;; navi2ch-head.el ends here navi2ch/navi2ch-history.el000066400000000000000000000177431173560164300160050ustar00rootroot00000000000000;;; navi2ch-history.el --- global history module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2008 by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-history) (defconst navi2ch-history-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch) (defvar navi2ch-history-mode-map nil) (unless navi2ch-history-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-bm-mode-map) ;; (define-key map "q" 'navi2ch-history-exit) (define-key map "\C-k" 'navi2ch-history-cut) (define-key map "\C-y" 'navi2ch-history-yank) (define-key map "d" 'navi2ch-history-cut) (define-key map "D" 'navi2ch-history-delete) (define-key map "md" 'navi2ch-history-cut-mark-article) (define-key map "mD" 'navi2ch-history-delete-mark-article) (define-key map "s" 'navi2ch-history-sync) (setq navi2ch-history-mode-map map))) (defvar navi2ch-history-mode-menu-spec (navi2ch-bm-make-menu-spec "History" nil)) (defvar navi2ch-history-alist nil "history $B$rI=$9O"A[%j%9%H!#(B '((key board article) ...) $B$H$$$&7A$r$7$F$$$k!#(B key $B$O(B (concat uri artid)$B!#(B") (defvar navi2ch-history-buffer-name "*navi2ch history*") (defvar navi2ch-history-board '((name . "$BMzNr(B") (type . history) (id . "#hist"))) (defvar navi2ch-history-cut-stack nil) ;;; navi2ch-bm callbacks (defun navi2ch-history-set-property (begin end item) (put-text-property begin end 'item item)) (defun navi2ch-history-get-property (point) (get-text-property (save-excursion (goto-char point) (beginning-of-line) (point)) 'item)) (defun navi2ch-history-get-board (item) (nth 1 (assoc item navi2ch-history-alist))) (defun navi2ch-history-get-article (item) (nth 2 (assoc item navi2ch-history-alist))) (defun navi2ch-history-exit () (run-hooks 'navi2ch-history-exit-hook)) ;; regist board (navi2ch-bm-regist-board 'history 'navi2ch-history navi2ch-history-board) ;; add hook (add-hook 'navi2ch-save-status-hook 'navi2ch-history-save-info) (add-hook 'navi2ch-load-status-hook 'navi2ch-history-load-info) ;;; navi2ch-history functions (defun navi2ch-history-get-key (board article) (concat (cdr (assq 'uri board)) (cdr (assq 'artid article)))) (defun navi2ch-history-add (board article) "BOARD $B$H(B ARTICLE $B$GI=$5$l$k(B $B%9%l%C%I$rDI2C!#(B" (let* ((key (navi2ch-history-get-key board article)) (article (list (assq 'subject article) (assq 'artid article))) (old-node (assoc key navi2ch-history-alist)) (old-subject (cdr (assq 'subject (nth 2 old-node)))) (subject (cdr (assq 'subject article)))) (setq navi2ch-history-alist (delete old-node navi2ch-history-alist)) (setq navi2ch-history-alist (cons (if (or subject (not old-subject)) (list key board article) old-node) navi2ch-history-alist))) (when (and navi2ch-history-max-line (> (length navi2ch-history-alist) navi2ch-history-max-line)) (setcdr (nthcdr (1- navi2ch-history-max-line) navi2ch-history-alist) nil))) (defun navi2ch-history-insert-subject (num item) (navi2ch-bm-insert-subject item num (or (cdr (assq 'subject (navi2ch-history-get-article item))) (navi2ch-history-get-key (navi2ch-history-get-board item) (navi2ch-history-get-article item))) (format "[%s]" (cdr (assq 'name (navi2ch-history-get-board item)))))) (defun navi2ch-history-insert-subjects () (let ((i 1)) (dolist (x navi2ch-history-alist) (navi2ch-history-insert-subject i (car x)) (setq i (1+ i))))) (defun navi2ch-history (&rest args) "history $B$rI=<($9$k!#(B" (navi2ch-history-mode) (navi2ch-bm-setup 'navi2ch-history) (navi2ch-history-sync)) (defun navi2ch-history-sync () (interactive) (let ((buffer-read-only nil)) (erase-buffer) (save-excursion (navi2ch-history-insert-subjects)))) (easy-menu-define navi2ch-history-mode-menu navi2ch-history-mode-map "Menu used in navi2ch-history" navi2ch-history-mode-menu-spec) (defun navi2ch-history-setup-menu () (easy-menu-add navi2ch-history-mode-menu)) (defun navi2ch-history-mode () "\\{navi2ch-history-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-history-mode) (setq mode-name "Navi2ch History") (setq buffer-read-only t) (buffer-disable-undo) (use-local-map navi2ch-history-mode-map) (navi2ch-history-setup-menu) (run-hooks 'navi2ch-bm-mode-hook 'navi2ch-history-mode-hook)) (defun navi2ch-history-save-info () (let ((info (mapcar (lambda (x) (let ((board (nth 1 x)) (article (nth 2 x))) (list (list (assq 'name board) (assq 'uri board) (assq 'id board)) (list (assq 'subject article) (assq 'artid article))))) navi2ch-history-alist))) (navi2ch-save-info navi2ch-history-file info t))) (defun navi2ch-history-load-info () (setq navi2ch-history-alist (mapcar (lambda (x) (cons (navi2ch-history-get-key (car x) (cadr x)) x)) (navi2ch-load-info navi2ch-history-file)))) (defun navi2ch-history-delete () "$B$=$N9T$r(B history $B$+$i:o=|$9$k!#(B" (interactive) (save-excursion (beginning-of-line) (let ((item (navi2ch-history-get-property (point)))) (if item (let ((pair (assoc item navi2ch-history-alist)) (buffer-read-only nil)) (setq navi2ch-history-alist (delq pair navi2ch-history-alist)) (delete-region (point) (save-excursion (forward-line) (point))) (navi2ch-bm-renumber)) (message "Can't select this line!"))))) (defun navi2ch-history-delete-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-history-delete)) (defun navi2ch-history-cut () (interactive) (save-excursion (beginning-of-line) (let ((item (navi2ch-history-get-property (point)))) (if item (progn (push (assoc item navi2ch-history-alist) navi2ch-history-cut-stack) (navi2ch-history-delete)) (message "Can't select this line!"))))) (defun navi2ch-history-cut-mark-article () (interactive) (navi2ch-bm-exec-subr 'navi2ch-history-cut)) (defun navi2ch-history-yank () (interactive) (let ((pair (pop navi2ch-history-cut-stack))) (if pair (progn (if (eobp) (if navi2ch-history-alist (setcdr (last navi2ch-history-alist) (list pair)) (setq navi2ch-history-alist (list pair))) (let ((list (member (assoc (navi2ch-history-get-property (point)) navi2ch-history-alist) navi2ch-history-alist))) (setcdr list (copy-sequence list)) (setcar list pair))) (let ((buffer-read-only nil)) (navi2ch-history-insert-subject 0 (car pair))) (navi2ch-bm-renumber)) (message "Stack is empty")))) (defun navi2ch-history-change (changed-list) "$BJQ99$5$l$?HD$NMzNr$r=$@5$9$k!#(B CHANGED-LIST $B$K$D$$$F$O(B `navi2ch-list-get-changed-status' $B$r;2>H!#(B" (setq navi2ch-history-alist (mapcar (lambda (node) (let* ((board (cadr node)) (article (caddr node)) (changed (assoc (cdr (assq 'id board)) changed-list))) (if changed (let ((new-board (caddr changed))) (list (navi2ch-history-get-key new-board article) new-board article)) node))) navi2ch-history-alist)) (navi2ch-history-save-info)) (run-hooks 'navi2ch-history-load-hook) ;;; navi2ch-history.el ends here navi2ch/navi2ch-http-date.el000066400000000000000000000120231173560164300161600ustar00rootroot00000000000000;;; navi2ch-http-date.el --- parser / generator of HTTP-date format -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2008 by Navi2ch Project ;; Author: Nanashi San ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; From RFC 2616 ;; 3.3.1 Full Date ;; ;; HTTP applications have historically allowed three different formats ;; for the representation of date/time stamps: ;; ;; Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 ;; Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 ;; Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format ;; ;; The first format is preferred as an Internet standard and represents ;; a fixed-length subset of that defined by RFC 1123 [8] (an update to ;; RFC 822 [9]). The second format is in common use, but is based on the ;; obsolete RFC 850 [12] date format and lacks a four-digit year. ;; HTTP/1.1 clients and servers that parse the date value MUST accept ;; all three formats (for compatibility with HTTP/1.0), though they MUST ;; only generate the RFC 1123 format for representing HTTP-date values ;; in header fields. See section 19.3 for further information. ;; ;; Note: Recipients of date values are encouraged to be robust in ;; accepting date values that may have been sent by non-HTTP ;; applications, as is sometimes the case when retrieving or posting ;; messages via proxies/gateways to SMTP or NNTP. ;; ;; All HTTP date/time stamps MUST be represented in Greenwich Mean Time ;; (GMT), without exception. For the purposes of HTTP, GMT is exactly ;; equal to UTC (Coordinated Universal Time). This is indicated in the ;; first two formats by the inclusion of "GMT" as the three-letter ;; abbreviation for time zone, and MUST be assumed when reading the ;; asctime format. HTTP-date is case sensitive and MUST NOT include ;; additional LWS beyond that specifically included as SP in the ;; grammar. ;; ;; HTTP-date = rfc1123-date | rfc850-date | asctime-date ;; rfc1123-date = wkday "," SP date1 SP time SP "GMT" ;; rfc850-date = weekday "," SP date2 SP time SP "GMT" ;; asctime-date = wkday SP date3 SP time SP 4DIGIT ;; date1 = 2DIGIT SP month SP 4DIGIT ;; ; day month year (e.g., 02 Jun 1982) ;; date2 = 2DIGIT "-" month "-" 2DIGIT ;; ; day-month-year (e.g., 02-Jun-82) ;; date3 = month SP ( 2DIGIT | ( SP 1DIGIT )) ;; ; month day (e.g., Jun 2) ;; time = 2DIGIT ":" 2DIGIT ":" 2DIGIT ;; ; 00:00:00 - 23:59:59 ;; wkday = "Mon" | "Tue" | "Wed" ;; | "Thu" | "Fri" | "Sat" | "Sun" ;; weekday = "Monday" | "Tuesday" | "Wednesday" ;; | "Thursday" | "Friday" | "Saturday" | "Sunday" ;; month = "Jan" | "Feb" | "Mar" | "Apr" ;; | "May" | "Jun" | "Jul" | "Aug" ;; | "Sep" | "Oct" | "Nov" | "Dec" ;; ;; Note: HTTP requirements for the date/time stamp format apply only ;; to their usage within the protocol stream. Clients and servers are ;; not required to use these formats for user presentation, request ;; logging, etc. ;;; Code: (provide 'navi2ch-http-date) (defconst navi2ch-http-date-ident "$Id$") (require 'regexp-opt) (require 'timezone) (defun navi2ch-http-date-encode (time) "$BFbIt7A<0(B TIME $B$r(B RFC 1123 $B7A<0$KJQ49$9$k!#(B" (apply (lambda (wday month day time year) (format "%s, %02d %s %s %s GMT" wday (string-to-number day) month year time)) (split-string (current-time-string (let ((decoded (decode-time time))) (apply #'encode-time (- (car decoded) (car (last decoded))) (cdr decoded))))))) (defun navi2ch-http-date-decode (http-date) "HTTP-DATE $B$rFbIt7A<0$KJQ49$9$k!#(B" ;; XEmacs $B$@$H(B RFC 850 $B7A<0$N(B "-" $BIU$-$NF|IU$r%Q!<%9$G$-$J$$$N$G!#(B (if (string-match "\\([0-9]+\\)-\\([A-Za-z]+\\)-\\([0-9]+\\)" http-date) (setq http-date (replace-match "\\1 \\2 \\3" nil nil http-date))) (let ((now (timezone-fix-time http-date "GMT" "GMT"))) (encode-time (aref now 5) (aref now 4) (aref now 3) (aref now 2) (aref now 1) (aref now 0) (aref now 6)))) ;;; navi2ch-http-date.el ends here navi2ch/navi2ch-jbbs-net.el000066400000000000000000000144351173560164300160030ustar00rootroot00000000000000;;; navi2ch-jbbs-net.el --- View jbbs.net module for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004 by Navi2ch Project ;; Author: ;; Part5 $B%9%l$N(B 509 $B$NL>L5$7$5$s(B ;; ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-jbbs-net) (defconst navi2ch-jbbs-net-ident "$Id$") (require 'navi2ch-multibbs) (defvar navi2ch-jbbs-func-alist '((bbs-p . navi2ch-jbbs-p) (subject-callback . navi2ch-jbbs-subject-callback) (article-update . navi2ch-jbbs-article-update) (article-to-url . navi2ch-jbbs-article-to-url) (send-message . navi2ch-jbbs-send-message) (send-success-p . navi2ch-jbbs-send-message-success-p) (board-update . navi2ch-jbbs-board-update))) (defvar navi2ch-jbbs-variable-alist (list (cons 'coding-system navi2ch-coding-system))) (navi2ch-multibbs-regist 'jbbs-net navi2ch-jbbs-func-alist navi2ch-jbbs-variable-alist) ;;------------- (defun navi2ch-jbbs-p (uri) "URI $B$,(B jbbs.net $B$J$i(B non-nil$B$rJV$9!#(B" (string-match "http://[^\\.]+\\.jbbs\\.net/" uri)) (navi2ch-multibbs-defcallback navi2ch-jbbs-subject-callback (jbbs-net) "subject.txt $B$r\\([0-9]+\\) $BL>A0!'(B\\(\\|<[^>]+>\\)\ \\(.*\\) <[^>]+> $BEj9FF|!'(B \\(.*\\)
\\(.*\\)

\n") (defun navi2ch-jbbs-parse () (let ((case-fold-search t)) (re-search-forward navi2ch-jbbs-parse-regexp nil t))) (defun navi2ch-jbbs-make-article () (let ((mail (match-string 3)) (name (match-string 4)) (date (match-string 5)) (contents (match-string 6))) ;; $B:9J,$NA0$N%;%Q%l!<%?$,(B "," $B$G8e$,(B "<>" $B$K$J$k$N$,$A$g$C$H%$%d!#(B (format "%s<>%s<>%s<>%s<>\n" name (or mail "") date contents ))) (navi2ch-multibbs-defcallback navi2ch-jbbs-article-callback (jbbs-net) (let ((beg (point)) (max-num 0) alist num min-num) (while (navi2ch-jbbs-parse) (setq num (string-to-number (match-string 1)) min-num (or min-num num) max-num (max max-num num) alist (cons (cons (string-to-number (match-string 1)) (navi2ch-jbbs-make-article)) alist))) (delete-region beg (point-max)) (when (and min-num max-num) (let ((i min-num)) (while (<= i max-num) (insert (or (cdr (assoc i alist)) "$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>\n")) (setq i (1+ i))))))) (defun navi2ch-jbbs-board-update (board) (let ((url (navi2ch-board-get-url board)) (file (navi2ch-board-get-file-name board)) (time (cdr (assq 'time board))) (func (navi2ch-multibbs-subject-callback board))) (navi2ch-net-update-file url file time func))) ;;; navi2ch-jbbs-net.el ends here navi2ch/navi2ch-jbbs-shitaraba.el000066400000000000000000000241111173560164300171430ustar00rootroot00000000000000;;; navi2ch-jbbs-shitaraba.el --- View jbbs-shitaraba module for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004, 2006 by Navi2ch Project ;; Author: ;; Part5 $B%9%l$N(B 509 $B$NL>L5$7$5$s(B ;; ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B#J#B#B#S!w$7$?$i$P$N;EMM$O2<5-;2>H!#(B ;; http://jbbs.shitaraba.com/bbs/read.cgi/computer/351/1040452916/126-140n ;;; Code: (provide 'navi2ch-jbbs-shitaraba) (defconst navi2ch-jbbs-shitaraba-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch-util) (require 'navi2ch-multibbs) (eval-when-compile (navi2ch-defalias-maybe 'coding-system-list 'ignore)) (defvar navi2ch-js-func-alist '((bbs-p . navi2ch-js-p) (subject-callback . navi2ch-js-subject-callback) (article-update . navi2ch-js-article-update) (article-to-url . navi2ch-js-article-to-url) (url-to-board . navi2ch-js-url-to-board) (url-to-article . navi2ch-js-url-to-article) (send-message . navi2ch-js-send-message) (send-success-p . navi2ch-js-send-message-success-p) (error-string . navi2ch-js-send-message-error-string) (board-update . navi2ch-js-board-update))) (defvar navi2ch-js-coding-system (or (car (memq 'eucjp-ms (coding-system-list))) 'euc-japan)) (defvar navi2ch-js-variable-alist (list (cons 'coding-system navi2ch-js-coding-system))) (navi2ch-multibbs-regist 'jbbs-shitaraba navi2ch-js-func-alist navi2ch-js-variable-alist) (defvar navi2ch-js-host-list '("jbbs.shitaraba.com" "jbbs.shitaraba.net" "jbbs.livedoor.com" "jbbs.livedoor.jp")) ;;------------- (defun navi2ch-js-p (uri) "URI $B$,(BJBBS$B!w$7$?$i$P$J$i(B non-nil $B$rJV$9!#(B" (let ((list navi2ch-js-host-list) host result) (while (and list (not result)) (setq host (car list)) (setq list (cdr list)) (setq result (string-match (format "^http://%s" (regexp-quote host)) uri))) result)) (navi2ch-multibbs-defcallback navi2ch-js-subject-callback (jbbs-shitaraba) "subject.txt $B$r$B=q$-$3$_$^$7$?!#(B" str) (string= "" str)))) (defun navi2ch-js-send-message-error-string (proc) (let ((str (decode-coding-string (navi2ch-net-get-content proc) navi2ch-js-coding-system))) (cond ((string-match "$B#E#R#R#O#R!'(B\\([^<]+\\)" str) (match-string 1 str)) ((string-match "\\([^<]+\\)" str) (match-string 1 str))))) (defun navi2ch-js-article-to-url-subr (string board article &optional start end nofirst) "BOARD, ARTICLE $B$+$i(B STRING.cgi $B$N(B url $B$KJQ49!#(B START, END, NOFIRST $B$GHO0O$r;XDj$9$k!#(B" (let ((url (concat (navi2ch-js-get-cgi-url string board) (cdr (assq 'artid article)) "/"))) (if (numberp start) (setq start (number-to-string start))) (if (numberp end) (setq end (number-to-string end))) (if (equal start end) (concat url start) (concat url start (and (or start end) "-") end (and nofirst "n"))))) (defun navi2ch-js-article-to-url (board article &optional start end nofirst) "BOARD, ARTICLE $B$+$i(B read.cgi $B$N(B url $B$KJQ49!#(B START, END, NOFIRST $B$GHO0O$r;XDj$9$k(B" (navi2ch-js-article-to-url-subr "read" board article start end nofirst)) (defun navi2ch-js-article-to-rawmode-url (board article &optional start end nofirst) "BOARD, ARTICLE $B$+$i(B rawmode.cgi $B$N(B url $B$KJQ49!#(B START, END, NOFIRST $B$GHO0O$r;XDj$9$k(B" (navi2ch-js-article-to-url-subr "rawmode" board article start end nofirst)) ;;------------------ (defvar navi2ch-js-parse-regexp ;; $B%l%9HV(B $BL>A0(B $B%a!<%k(B $BEj9FF|;~(B $BK\J8(B $B%9%l%?%$%H%k(B ID/$B%j%b%[(B "\\([0-9]+\\)<>\\(.*\\)<>\\(.*\\)<>\\(.*\\)<>\\(.*\\)<>\\(.*\\)<>\\(.*\\)\n") (defun navi2ch-js-parse () (let ((case-fold-search t)) (re-search-forward navi2ch-js-parse-regexp nil t))) (navi2ch-multibbs-defcallback navi2ch-js-article-callback (jbbs-shitaraba &optional start) (let ((i (or start 1)) (beg (point)) num name mail date contents subject id) (while (navi2ch-js-parse) (setq num (match-string 1) name (match-string 2) mail (match-string 3) date (match-string 4) contents (match-string 5) subject (match-string 6) id (match-string 7)) (delete-region beg (match-end 0)) (while (< i (string-to-number num)) (insert "$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>\n") (setq i (1+ i))) (insert (format "%s<>%s<>%s%s<>%s<>%s\n" name (or mail "") date (if (= 0 (length id)) "" (concat " ID:" id)) contents (or subject ""))) (setq i (1+ i)) (setq beg (point))))) (defconst navi2ch-js-url-regexp ;; prefix $B%+%F%4%j(B BBS$BHV9f(B "\\`\\(.+\\)/\\([^/]+\\)/\\([^/]+\\)/\\'") (defun navi2ch-js-get-cgi-url (string board) "STRING.cgi $B$N(B url $B$rJV$9!#(B" (let ((uri (navi2ch-board-get-uri board))) (and (string-match navi2ch-js-url-regexp uri) (format "%s/bbs/%s.cgi/%s/%s/" (match-string 1 uri) string (match-string 2 uri) (match-string 3 uri))))) (defun navi2ch-js-get-dir (board) "write.cgi $B$KEO$9(B DIR $B%Q%i%a!<%?$rJV$9!#(B" (let ((uri (navi2ch-board-get-uri board))) (and (string-match navi2ch-js-url-regexp uri) (match-string 2 uri)))) (defun navi2ch-js-board-update (board) (let ((url (navi2ch-board-get-url board)) (file (navi2ch-board-get-file-name board)) (time (cdr (assq 'time board))) (func (navi2ch-multibbs-subject-callback board))) (navi2ch-net-update-file url file time func))) ;;; navi2ch-jbbs-shitaraba.el ends here navi2ch/navi2ch-list.el000066400000000000000000000767501173560164300152620ustar00rootroot00000000000000;;; navi2ch-list.el --- board list module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 by ;; Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; http://salad.2ch.net/bbstable.html $B$+$i!":n$C$?J}$,$$$$$s$+$J!#(B ;;; Code: (provide 'navi2ch-list) (defconst navi2ch-list-ident "$Id$") (eval-when-compile (require 'cl) (defvar navi2ch-bookmark-list) (defvar navi2ch-list-bookmark-mode) (defvar navi2ch-board-buffer-name) (defvar navi2ch-board-current-board)) (require 'navi2ch) (defvar navi2ch-list-mode-map nil) (unless navi2ch-list-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-global-view-map) (define-key map "\r" 'navi2ch-list-select-current-board) (define-key map "q" 'navi2ch-exit) (define-key map "z" 'navi2ch-suspend) (define-key map "s" 'navi2ch-list-sync) (define-key map " " 'navi2ch-list-select-current-board) (navi2ch-define-delete-keys map 'scroll-down) (define-key map "a" 'navi2ch-list-add-bookmark) (define-key map "b" 'navi2ch-list-toggle-bookmark) (unless (featurep 'xemacs) (define-key map [follow-link] 'mouse-face)) (navi2ch-define-mouse-key map 2 'navi2ch-list-mouse-select) (define-key map "/" 'navi2ch-list-toggle-open) (define-key map "[" 'navi2ch-list-open-all-category) (define-key map "]" 'navi2ch-list-close-all-category) (define-key map "D" 'navi2ch-list-delete-global-bookmark) (define-key map "C" 'navi2ch-list-change-global-bookmark) (define-key map "?" 'navi2ch-list-search) (define-key map "e" 'navi2ch-list-expire) (define-key map "U" 'navi2ch-list-show-url) (setq navi2ch-list-mode-map map))) (defvar navi2ch-list-mode-menu-spec '("List" ["Sync board list" navi2ch-list-sync] ["Toggle offline" navi2ch-toggle-offline] ["Open all category" navi2ch-list-open-all-category] ["Close all category" navi2ch-list-close-all-category] ["Toggle current category" navi2ch-list-toggle-open] ["Toggle bookmark" navi2ch-list-toggle-bookmark] ["Select current board" navi2ch-list-select-current-board]) "Menu definition for navi2ch-list.") (defvar navi2ch-list-ignore-category-list '("$B%A%c%C%H(B" "$B$*3($+$-(B" "$B1?1D0FFb(B" "$B%D!<%kN`(B" "$BB>$N7G<(HD(B" "$BB>$N%5%$%H(B" "$BFCJL4k2h(B")) (defvar navi2ch-list-buffer-name "*navi2ch list*") (defvar navi2ch-list-current-list nil) (defvar navi2ch-list-category-list nil) (defvar navi2ch-list-board-name-list nil) (defvar navi2ch-list-navi2ch-category-name "Navi2ch") (defvar navi2ch-list-changed-category-name "$BJQ$o$C$?HD(B") (defvar navi2ch-list-navi2ch-category-alist nil) (defvar navi2ch-list-state-table (navi2ch-alist-to-hash '((add "A" navi2ch-list-add-board-name-face) (change "C" navi2ch-list-change-board-name-face) (nil " " navi2ch-list-board-name-face)))) (defconst navi2ch-list-bbstable-default-url "http://menu.2ch.net/bbsmenu.html") ;; add hook (add-hook 'navi2ch-save-status-hook 'navi2ch-list-save-info) (defun navi2ch-list-get-file-name (&optional name) (navi2ch-expand-file-name (or name "board.txt"))) (defun navi2ch-list-get-category-list-subr () (let (list) (while (re-search-forward "\\(.+\\)\n\\(.+\\)\n\\(.+\\)" nil t) (setq list (cons (list (cons 'name (match-string 1)) (cons 'uri (match-string 2)) (cons 'id (match-string 3)) (cons 'type 'board) (cons 'seen nil)) list))) (nreverse list))) (defun navi2ch-list-get-category (name list) (list name (cons 'open (or navi2ch-list-init-open-category (cdr (assq 'open (cdr (assoc name navi2ch-list-category-list)))))) (cons 'child list))) (defun navi2ch-list-set-category (name list) (let ((category (assoc name navi2ch-list-category-list))) (setcdr category (list (cadr category) (cons 'child list)))) (setq navi2ch-list-board-name-list (navi2ch-list-get-board-name-list navi2ch-list-category-list))) (defun navi2ch-list-get-global-bookmark-board-list () (mapcar (lambda (x) (list (cons 'name (cadr x)) (cons 'type 'bookmark) (cons 'id (car x)))) navi2ch-bookmark-list)) (defun navi2ch-list-get-global-bookmark-category () (navi2ch-list-get-category navi2ch-list-global-bookmark-category-name (navi2ch-list-get-global-bookmark-board-list))) (defun navi2ch-list-set-global-bookmark-category () (navi2ch-list-set-category navi2ch-list-global-bookmark-category-name (navi2ch-list-get-global-bookmark-board-list))) (defun navi2ch-list-sync-global-bookmark-category () (navi2ch-list-set-global-bookmark-category) (let ((buffer-read-only nil) (p (point))) (erase-buffer) (navi2ch-list-insert-board-names navi2ch-list-category-list) (goto-char p))) (defun navi2ch-list-delete-global-bookmark () (interactive) (let ((board (get-text-property (point) 'board))) (if (eq (cdr (assq 'type board)) 'bookmark) (navi2ch-bookmark-delete-bookmark (cdr (assq 'id board))) (message "This line is not bookmark!")))) (defun navi2ch-list-change-global-bookmark () (interactive) (let ((board (get-text-property (point) 'board))) (if (eq (cdr (assq 'type board)) 'bookmark) (navi2ch-bookmark-change-bookmark (cdr (assq 'id board))) (message "This line is not bookmark!")))) (defun navi2ch-list-get-category-list (file) (when (file-exists-p file) (with-temp-buffer (navi2ch-insert-file-contents file) (run-hooks 'navi2ch-list-get-category-list-hook) (navi2ch-apply-filters navi2ch-list-current-list navi2ch-list-filter-list) (goto-char (point-min)) (let (list) (while (re-search-forward "\\(.+\\)\n\n\n" nil t) (setq list (cons (list (match-string 1) (match-beginning 0) (match-end 0)) list))) (goto-char (point-min)) (setq list (nreverse list)) (let (list2) (while list (save-restriction (narrow-to-region (nth 2 (car list)) (or (nth 1 (cadr list)) (point-max))) (setq list2 (cons (navi2ch-list-get-category (caar list) (navi2ch-list-get-category-list-subr)) list2))) (setq list (cdr list))) (nreverse list2)))))) (defun navi2ch-list-get-etc-category () (let ((file (expand-file-name navi2ch-list-etc-file-name navi2ch-directory))) (when (file-exists-p file) (with-temp-buffer (insert-file-contents file) (goto-char (point-min)) (navi2ch-list-get-category navi2ch-list-etc-category-name (navi2ch-list-get-category-list-subr)))))) (defun navi2ch-list-insert-board-names-subr (list) (let ((prev (point)) (indent (make-string (1- navi2ch-list-indent-width) ?\ )) (change (cdr (assq 'change navi2ch-list-current-list)))) (dolist (board list) (let* ((board-id (cdr (assq 'id board))) (state (gethash (cdr (assoc board-id change)) navi2ch-list-state-table))) (insert (car state) indent (cdr (assq 'name board))) (when navi2ch-list-display-board-id-p (insert " ") (indent-to-column navi2ch-list-board-id-column) (insert "(" board-id ")")) (insert "\n") (set-text-properties prev (point) nil) (set-text-properties (+ prev (length (car state)) (length indent)) (1- (point)) (list 'mouse-face navi2ch-list-mouse-face 'face (cadr state)))) (put-text-property prev (point) 'board board) (setq prev (point))))) (defun navi2ch-list-insert-board-names (list) "LIST $B$NFbMF$r%P%C%U%!$KA^F~!#(B" (if navi2ch-list-bookmark-mode (navi2ch-list-insert-bookmarks list) (let ((prev (point))) (dolist (pair list) (let* ((alist (cdr pair)) (open (cdr (assq 'open alist)))) (insert "[" (if open "-" "+") "]" (car pair) "\n") (set-text-properties prev (1- (point)) (list 'mouse-face navi2ch-list-mouse-face 'face 'navi2ch-list-category-face)) (put-text-property prev (point) 'genre (car pair)) (when open (navi2ch-list-insert-board-names-subr (cdr (assq 'child alist)))) (setq prev (point))))))) (defun navi2ch-list-bookmark-node (board) "BOARD $B$+$i(B bookmark $B$K3JG<$9$k(B node $B$rA0$H(B id $B$N(B : $B0JA0$,F1$8$@$C$?$iJQ$o$C$?HD$KDI2C$9$k(B (when (and (string= new-name old-name) (string= new-pure-id old-pure-id)) (push (list (cdr (assq 'id (cdr new))) (cdr x) (cdr new)) changed-list) (throw 'break nil))) ;; $B8=:_$NHD0lMw$N(B id $B$,0JA0$NHD0lMw$+$i8+$D$+$i$J$+$C$?$i(B ;; $BDI2C$5$l$?;v$K$9$k(B (push (cdr (assq 'id (cdr new))) added-list))))))) (list (cons 'add added-list) (cons 'change changed-list)))) (defun navi2ch-list-change (changed-list) "CHANGED-LIST $B$r$b$H$KHD%V%C%/%^!<%/$r99?7!#(B" (let ((changed-alist (mapcar (lambda (elt) (cons (navi2ch-list-bookmark-node (nth 1 elt)) (navi2ch-list-bookmark-node (nth 2 elt)))) changed-list))) (setq navi2ch-list-current-list (navi2ch-put-alist 'bookmark (mapcar (lambda (node) (or (cdr (assoc node changed-alist)) node)) (cdr (assq 'bookmark navi2ch-list-current-list))) navi2ch-list-current-list)))) (defun navi2ch-list-apply-changed-status (changed-status) "CHANGED-STATUS $B$r$b$H$KHD$NJQ99$r$$$m$s$J=j$KH?1G$9$k!#(B" (message "Applying board changes...") (let ((added-list (cdr (assq 'add changed-status))) (changed-list (cdr (assq 'change changed-status)))) (when changed-status (setq navi2ch-list-current-list (navi2ch-put-alist 'change (append (mapcar (lambda (id) (cons id 'add)) added-list) (mapcar (lambda (pair) (cons (car pair) 'change)) changed-list)) navi2ch-list-current-list)) (navi2ch-change-log-directory changed-list) (navi2ch-bookmark-change changed-list) (navi2ch-history-change changed-list) (navi2ch-list-change changed-list) (message "Applying board changes...done")))) (defun navi2ch-list-get-changed-category (category-list) (let ((alist (navi2ch-alist-list-to-alist (navi2ch-list-get-board-name-list category-list) 'id))) (navi2ch-list-get-category navi2ch-list-changed-category-name (mapcar (lambda (pair) (cdr (assoc (car pair) alist))) (cdr (assq 'change navi2ch-list-current-list)))))) (defun navi2ch-list-sync (&optional force first) (interactive "P") (save-excursion (let ((buffer-read-only nil) (navi2ch-net-force-update (or navi2ch-net-force-update force)) (file (navi2ch-list-get-file-name)) (bbstable (or navi2ch-list-bbstable-url navi2ch-list-bbstable-default-url)) (change (cdr (assq 'change navi2ch-list-current-list))) updated header time old-category-list) (when first (navi2ch-list-load-info)) (navi2ch-set-mode-line-identification) (setq old-category-list (navi2ch-list-get-normal-category-list navi2ch-list-category-list)) (unless (or navi2ch-offline (and first (not navi2ch-list-sync-update-on-boot) (file-exists-p file))) (setq time (and (equal (cdr (assq 'bbstable navi2ch-list-current-list)) bbstable) (cdr (assq 'time navi2ch-list-current-list)))) (setq header (navi2ch-net-update-file bbstable file time 'navi2ch-list-make-board-txt)) (setq updated (and header (not (navi2ch-net-get-state 'not-updated header)) (not (navi2ch-net-get-state 'error header))))) (when updated (setq navi2ch-list-current-list (navi2ch-put-alist 'time (or (cdr (assq 'last-modified header)) (cdr (assq 'date header))) navi2ch-list-current-list)) (setq navi2ch-list-current-list (navi2ch-put-alist 'bbstable bbstable navi2ch-list-current-list))) ;; bbstable, etc.txt, navi2ch-list-navi2ch-category-alist ;; $B$N$$$:$l$+$,99?7$5$l$F$$$l$P(B $B0J2<$N=hM}$,I,MW!#(B ;; $B$H$j$"$($:!">o$K[^>]+" nil t) (goto-char (match-beginning 0)) (while (re-search-forward "<\\([ab]\\)\\([^>]*\\)>\\([^<]+\\)" nil t) (let ((tag (match-string 1)) (attr (match-string 2)) (cont (match-string 3))) (delete-region beg (point)) (if (string-match "a" tag) (let (url board-id id u) (when (and (not ignore) (string-match "href=\\(.+/\\([^/]+\\)/\\)" attr)) (setq url (match-string 1 attr)) (setq url (or (cdr (assoc url navi2ch-list-moved-board-alist)) url)) (when (and (navi2ch-list-valid-board url) (setq board-id (navi2ch-list-board-id-from-url url))) (setq id (intern board-id)) (when (and (setq u (gethash id id-to-url-table)) (not (string= u url))) ;; $BF1$8(B ID $B$G(B URL $B$,0c$&HD$,$"$k>l9g(B (let ((i 2) newid) (while (and (setq newid (intern (format "%s:%d" id i))) (setq u (gethash newid id-to-url-table)) (not (string= u url))) (setq i (1+ i))) (setq id newid))) (puthash id url id-to-url-table) (insert cont "\n" url "\n" (symbol-name id) "\n")))) (setq ignore (member (decode-coding-string cont navi2ch-coding-system) navi2ch-list-ignore-category-list)) (when (not ignore) (insert cont "\n\n\n")))) (setq beg (point)))) (delete-region beg (point-max)))) (defun navi2ch-list-valid-board (uri) (save-match-data (when (string-match "http://\\([^/]+\\)/\\([^/]+\\)/" uri) (let ((host (match-string 1 uri))) (and (not (string-match navi2ch-list-invalid-host-regexp host)) (string-match navi2ch-list-valid-host-regexp host)))))) (defun navi2ch-list-mouse-select (e) (interactive "e") (beginning-of-line) (mouse-set-point e) (save-excursion (navi2ch-list-select-current-board))) (defun navi2ch-list-goto-board (&optional default) (interactive) (let (alist board) (setq alist (mapcar (lambda (x) (cons (cdr (assq 'id x)) x)) navi2ch-list-board-name-list)) (save-window-excursion (setq board (cdr (assoc (completing-read (concat "Board name" (when default (format " (%s)" (cdr (assq 'id default)))) ": ") alist nil t) alist)))) (setq board (or board (assoc (cdr (assq 'id default)) alist))) (when board (when (eq (navi2ch-get-major-mode navi2ch-board-buffer-name) 'navi2ch-board-mode) (navi2ch-board-save-info)) (navi2ch-list-select-board board)))) (defun navi2ch-list-get-normal-category-list (list) (setq list (copy-sequence list)) ; delq $B$9$k$+$i(B (when (assoc navi2ch-list-navi2ch-category-name list) (setq list (delq (assoc navi2ch-list-navi2ch-category-name list) list))) (when (assoc navi2ch-list-global-bookmark-category-name list) (setq list (delq (assoc navi2ch-list-global-bookmark-category-name list) list)))) (defun navi2ch-list-get-board-name-list (list) (let (alist id) (dolist (x list) (unless (string= (car x) navi2ch-list-changed-category-name) (dolist (y (cdr (assq 'child x))) (setq id (cdr (assq 'id y))) ;; $BF1$8(B id $B$KBP$7$F$O0l$D$N$_JV$9!#(B (setq alist (cons (cons id y) (delq (assoc id alist) alist)))))) (mapcar #'cdr (nreverse alist)))) (defun navi2ch-list-normalize-bookmark (list) (let ((bookmark (cdr (assq 'bookmark list))) ret) (dolist (x (navi2ch-list-get-board-name-list navi2ch-list-category-list)) (let ((node (navi2ch-list-bookmark-node x))) (when (member node bookmark) (setq ret (cons node (delq node ret)))))) (nreverse ret))) (defun navi2ch-list-save-info () (when navi2ch-list-category-list (let ((list (mapcar (lambda (elt) (list (car elt) (assq 'open (cdr elt)))) navi2ch-list-category-list))) (setq navi2ch-list-current-list (navi2ch-put-alist 'category list navi2ch-list-current-list)))) (when navi2ch-list-current-list (navi2ch-save-info (navi2ch-list-get-file-name "list.info") (list (cons 'bookmark (navi2ch-list-normalize-bookmark navi2ch-list-current-list)) (assq 'category navi2ch-list-current-list) (assq 'change navi2ch-list-current-list) (assq 'bbstable navi2ch-list-current-list) (assq 'time navi2ch-list-current-list)) t))) (defun navi2ch-list-load-info () (setq navi2ch-list-current-list (navi2ch-load-info (navi2ch-list-get-file-name "list.info"))) (if navi2ch-list-load-category-list (setq navi2ch-list-category-list (cdr (assq 'category navi2ch-list-current-list)))) (let* ((file (navi2ch-list-get-file-name)) (category-list (navi2ch-list-get-category-list file))) (setq navi2ch-list-category-list (append (delq nil (list (navi2ch-list-get-category navi2ch-list-navi2ch-category-name navi2ch-list-navi2ch-category-alist) (navi2ch-list-get-global-bookmark-category) (navi2ch-list-get-etc-category) (navi2ch-list-get-changed-category category-list))) category-list)) (setq navi2ch-list-board-name-list (navi2ch-list-get-board-name-list navi2ch-list-category-list)))) (defun navi2ch-list-get-current-category-list () (save-excursion (end-of-line) (when (re-search-backward "^\\[[+-]\\]" nil t) (let ((category (get-text-property (point) 'genre))) (cdr (assq 'child (cdr (assoc category navi2ch-list-category-list)))))))) ;;; bookmark mode (defvar navi2ch-list-bookmark-mode nil) (defvar navi2ch-list-bookmark-mode-map nil) (unless navi2ch-list-bookmark-mode-map (setq navi2ch-list-bookmark-mode-map (make-sparse-keymap)) (define-key navi2ch-list-bookmark-mode-map "d" 'navi2ch-list-delete-bookmark) (define-key navi2ch-list-bookmark-mode-map "a" 'undefined)) (navi2ch-set-minor-mode 'navi2ch-list-bookmark-mode " Bookmark" navi2ch-list-bookmark-mode-map) (defun navi2ch-list-add-bookmark () (interactive) (let ((node (navi2ch-list-bookmark-node (get-text-property (point) 'board))) (list (cdr (assq 'bookmark navi2ch-list-current-list)))) (if node (unless (member node list) (setq list (cons node list)) (setq navi2ch-list-current-list (navi2ch-put-alist 'bookmark list navi2ch-list-current-list)) (message "Add bookmark")) (message "Can't select this line!")))) (defun navi2ch-list-delete-bookmark () (interactive) (let ((node (navi2ch-list-bookmark-node (get-text-property (point) 'board))) (list (cdr (assq 'bookmark navi2ch-list-current-list)))) (if node (progn (setq list (delete node list)) (setq navi2ch-list-current-list (navi2ch-put-alist 'bookmark list navi2ch-board-current-board)) (let ((buffer-read-only nil)) (delete-region (save-excursion (beginning-of-line) (point)) (save-excursion (forward-line) (point)))) (message "Delete bookmark")) (message "Can't select this line!")))) (defun navi2ch-list-toggle-bookmark () (interactive) (setq navi2ch-list-bookmark-mode (not navi2ch-list-bookmark-mode)) (let ((buffer-read-only nil)) (save-excursion (erase-buffer) (navi2ch-list-insert-board-names navi2ch-list-category-list)))) ;;; search (defun navi2ch-list-search-current-board-subject () (interactive) (navi2ch-search-subject-subr (list (get-text-property (point) 'board)))) (defun navi2ch-list-search-current-category-subject () (interactive) (navi2ch-search-subject-subr (navi2ch-list-get-current-category-list))) (defun navi2ch-list-search-current-board-article () (interactive) (navi2ch-search-article-subr (list (get-text-property (point) 'board)))) (defun navi2ch-list-search-current-category-article () (interactive) (navi2ch-search-article-subr (navi2ch-list-get-current-category-list))) (defun navi2ch-list-search-current-board-cache () (interactive) (navi2ch-search-cache-subr (list (get-text-property (point) 'board)))) (defun navi2ch-list-search-current-category-cache () (interactive) (navi2ch-search-cache-subr (navi2ch-list-get-current-category-list))) (defun navi2ch-list-search-current-board-orphan () (interactive) (navi2ch-search-orphan-subr (list (get-text-property (point) 'board)))) (defun navi2ch-list-search-current-category-orphan () (interactive) (navi2ch-search-orphan-subr (navi2ch-list-get-current-category-list))) (defun navi2ch-list-search () (interactive) (let* ((ch (navi2ch-read-char-with-retry "Search for: s)ubject a)rticle c)ache o)rphan: " nil '(?s ?a ?c ?o))) (board (get-text-property (point) 'board)) (ch2 (if (eq ch ?s) (if (and board (navi2ch-board-get-file-name board)) (navi2ch-read-char-with-retry "Search from: b)oard c)ategory l)ocal w)eb: " nil '(?b ?c ?l ?w)) (navi2ch-read-char-with-retry "Search from: c)ategory l)ocal w)eb: " nil '(?c ?l ?w))) (if (and board (navi2ch-board-get-file-name board)) (navi2ch-read-char-with-retry "Search from: b)oard c)ategory l)ocal: " nil '(?b ?c ?l)) (navi2ch-read-char-with-retry "Search from: c)ategory l)ocal: " nil '(?c ?l)))))) (cond ((eq ch ?s) (cond ((eq ch2 ?b) (navi2ch-list-search-current-board-subject)) ((eq ch2 ?c) (navi2ch-list-search-current-category-subject)) ((eq ch2 ?l) (navi2ch-search-all-subject)) ((eq ch2 ?w) (navi2ch-search-web)))) ((eq ch ?a) (cond ((eq ch2 ?b) (navi2ch-list-search-current-board-article)) ((eq ch2 ?c) (navi2ch-list-search-current-category-article)) ((eq ch2 ?l) (navi2ch-search-all-article)))) ((eq ch ?c) (cond ((eq ch2 ?b) (navi2ch-list-search-current-board-cache)) ((eq ch2 ?c) (navi2ch-list-search-current-category-cache)) ((eq ch2 ?l) (navi2ch-search-all-cache)))) ((eq ch ?o) (cond ((eq ch2 ?b) (navi2ch-list-search-current-board-orphan)) ((eq ch2 ?c) (navi2ch-list-search-current-category-orphan)) ((eq ch2 ?l) (navi2ch-search-all-orphan))))))) ;;; expire (defun navi2ch-list-expire-current-board (&optional ask) (interactive) (navi2ch-board-expire (get-text-property (point) 'board) ask)) (defun navi2ch-list-expire-current-category (&optional ask) (interactive) (and (interactive-p) (setq ask t)) (when (or (not ask) (y-or-n-p "Expire current category boards? ")) (dolist (board (navi2ch-list-get-current-category-list)) (navi2ch-board-expire board)) (message "Expiring current category is done"))) (defun navi2ch-list-expire-all (&optional ask) (interactive) (and (interactive-p) (setq ask t)) (when (or (not ask) (y-or-n-p "Expire all boards? ")) (dolist (board navi2ch-list-board-name-list) (when (eq (cdr (assq 'type board)) 'board) (navi2ch-board-expire board))) (message "Expiring all board is done"))) (defun navi2ch-list-expire () (interactive) (let ((ch (navi2ch-read-char-with-retry "Expire b)oard c)ategory a)ll? " nil '(?b ?c ?a)))) (cond ((eq ch ?b) (navi2ch-list-expire-current-board 'ask)) ((eq ch ?c) (navi2ch-list-expire-current-category 'ask)) ((eq ch ?a) (navi2ch-list-expire-all 'ask))))) (defun navi2ch-list-show-url () (interactive) (let* ((board (get-text-property (point) 'board)) (uri (cdr (assq 'uri board))) (name (cdr (assq 'name board)))) (if (not uri) (message "Can't select this line!") (let ((char (navi2ch-read-char-with-retry (format "c)opy v)iew t)itle u)rl&title? URL: %s: " uri) nil '(?c ?v ?t ?u)))) (if (eq char ?v) (navi2ch-browse-url-internal uri) (let ((str (cond ((eq char ?c) uri) ((eq char ?t) name) ((eq char ?u) (format "%s\n%s" name uri))))) (if (not str) (ding) (kill-new str) (message "Copy: %s" str)))))))) (defun navi2ch-list-url-at-point (point) (let ((board (get-text-property point 'board))) (cdr (assq 'uri board)))) (run-hooks 'navi2ch-list-load-hook) ;;; navi2ch-list.el ends here navi2ch/navi2ch-localfile.el000066400000000000000000000361151173560164300162300ustar00rootroot00000000000000;;; navi2ch-localfile.el --- View localfile for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008 by Navi2ch Project ;; Author: Nanashi San ;; Part6 $B%9%l$N(B 427 $B$NL>L5$7$5$s(B ;; ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B$^$:!"(BBBS $B$rMQ0U$7$?$$%G%#%l%/%H%j$r:n$k!#(B ;; % mkdir /tmp/localfile ;; $BpJs$rJ]B8$9$k%G%#%l%/%H%j$NL>A0!#(B `navi2ch-directory' $B$+$i$NAjBP%Q%9$r;XDj$9$k!#(B" :type 'string :group 'navi2ch-localfile) (defcustom navi2ch-localfile-default-file-modes (+ (* 64 7) (* 8 7) 5) "*$B%m!<%+%k(B BBS $B$K%U%!%$%k$r=q$-9~$`:]$K;HMQ$9$k(B `default-file-modes'$B!#(B $B0UL#$,$"$k$N$O(B8$B?J?t$J$N$G@8$GA`:n$9$k;~$OCm0U!#(B" :type '(choice (const :tag "$BFCDj%0%k!<%W$NE[$i$N$_$,=q$-$3$a$k(B" (+ (* 64 7) (* 8 7) 5)) (const :tag "$B<+J,$N$_$,=q$-$3$a$k(B" (+ (* 64 7) (* 8 5) 5)) (const :tag "$BFCDj%0%k!<%W$NE[$i$N$_$,FI$_=q$-$G$-$k(B" (+ (* 64 7) (* 8 5))) (const :tag "$B<+J,$N$_$,FI$_=q$-$G$-$k(B" (* 64 7))) :group 'navi2ch-localfile) (defcustom navi2ch-localfile-default-user-name "$BL>L5$7$5$s(B" "*$B%m!<%+%k(B BBS $B$K=q$-9~$`:]$NL>L5$7$NL>A0!#(B" :type 'string :group 'navi2ch-localfile) (defvar navi2ch-localfile-regexp "\\`x-localbbs://") (defvar navi2ch-localfile-use-lock t) (defvar navi2ch-localfile-lock-name "lockdir_localfile") (defvar navi2ch-localfile-func-alist '((bbs-p . navi2ch-localfile-p) (article-update . navi2ch-localfile-article-update) (article-to-url . navi2ch-localfile-article-to-url) (url-to-board . navi2ch-localfile-url-to-board) (url-to-article . navi2ch-localfile-url-to-article) (send-message . navi2ch-localfile-send-message) (send-success-p . navi2ch-localfile-send-message-success-p) (error-string . navi2ch-localfile-error-string) (board-update . navi2ch-localfile-board-update) (board-get-file-name . navi2ch-localfile-board-get-file-name))) (defvar navi2ch-localfile-variable-alist (list (cons 'coding-system navi2ch-coding-system))) (navi2ch-multibbs-regist 'localfile navi2ch-localfile-func-alist navi2ch-localfile-variable-alist) ;;------------- ;; internal functions like bbs.cgi (defconst navi2ch-localfile-coding-system (intern (format "%s-unix" navi2ch-coding-system))) (defvar navi2ch-localfile-encode-html-tag-alist '((">" . ">") ("<" . "<") ("\n" . "
"))) (defvar navi2ch-localfile-subject-file-name "subject.txt") (defun navi2ch-localfile-lock (dir) "`navi2ch-directory' $B$r%m%C%/$9$k!#(B" (when navi2ch-localfile-use-lock (let ((redo t) error-message) (while redo (setq redo nil) (unless (navi2ch-lock-directory dir navi2ch-localfile-lock-name) (setq error-message "$B%G%#%l%/%H%j$N%m%C%/$K<:GT$7$^$7$?!#(B") (cond ((y-or-n-p (format "%s$B$b$&0lEY;n$7$^$9$+(B? " error-message)) (setq redo t)) ((yes-or-no-p (format "%s$B4m81$r>5CN$GB3$1$^$9$+(B? " error-message)) nil) (t (error "Lock failed")))))))) (defun navi2ch-localfile-unlock (dir) "DIR $B$N%m%C%/$r2r=|$9$k!#(B" (when navi2ch-localfile-use-lock (navi2ch-unlock-directory dir navi2ch-localfile-lock-name))) (defmacro navi2ch-localfile-with-lock (directory &rest body) "DIRECTORY $B$r%m%C%/$7!"(BBODY $B$r%s<>%s<>%s<>%s\n" (navi2ch-localfile-encode-string from) (navi2ch-localfile-encode-string mail) (format-time-string "%y/%m/%d %R" time) (navi2ch-localfile-encode-string message) (navi2ch-localfile-encode-string (or subject "")))) (defun navi2ch-localfile-update-subject-file (directory &optional article-id sage-flag) "DIRECTORY $B0J2<$N(B `navi2ch-localfile-subject-file-name' $B$r99?7$9$k!#(B ARTICLE-ID $B$,;XDj$5$l$F$$$l$P$=$N%"!<%F%#%/%k$N$_$r99?7$9$k!#(B `navi2ch-localfile-subject-file-name' $B$K;XDj$5$l$?%"!<%F%#%/%k$,L5$$>l(B $B9g$O(B SUBJECT $B$r;HMQ$9$k!#(BDIRECTORY $B$O8F$S=P$785$G%m%C%/$7$F$*$/$3$H!#(B" (if (not article-id) (dolist (file (directory-files (expand-file-name "dat" directory) nil "\\`[0-9]+\\.dat\\'")) (navi2ch-localfile-update-subject-file directory (file-name-sans-extension file))) (let* ((coding-system-for-read navi2ch-localfile-coding-system) (coding-system-for-write navi2ch-localfile-coding-system) (dat-directory (expand-file-name "dat" directory)) (article-file (expand-file-name (concat article-id ".dat") dat-directory)) (subject-file (expand-file-name navi2ch-localfile-subject-file-name directory)) (temp-file (navi2ch-make-temp-file subject-file)) subject lines new-line) (unwind-protect (progn (with-temp-buffer (insert-file-contents article-file) (setq lines (count-lines (point-min) (point-max))) (goto-char (point-min)) (let ((list (split-string (buffer-substring (point-min) (progn (end-of-line) (point))) "<>"))) (setq subject (or (nth 4 list) "")))) (setq new-line (format "%s.dat<>%s (%d)\n" article-id subject lines)) (with-temp-file temp-file (if (file-exists-p subject-file) (insert-file-contents subject-file)) (goto-char (point-min)) (if (re-search-forward (format "^%s\\.dat<>[^\n]+\n" article-id) nil t) (replace-match "") (goto-char (point-max)) (if (and (char-before) (not (= (char-before) ?\n))) ; $BG0$N$?$a(B (insert "\n"))) (unless sage-flag (goto-char (point-min))) (insert new-line)) (rename-file temp-file subject-file t)) (if (file-exists-p temp-file) (delete-file temp-file)))))) ;; $B"-$H$j$"$($:%9%?%V!#>-MhE*$K$O(B SETTING.TXT $B$rFI$`$h$&$K$7$?$$!#(B (defun navi2ch-localfile-default-user-name (directory) "DIRECTORY $B$G$N%G%U%)%k%H$NL>L5$7$5$s$rJV$9!#(B" navi2ch-localfile-default-user-name) (defun navi2ch-localfile-create-thread (directory from mail message subject) "DIRECTORY $B0J2<$K%9%l$r:n$k!#(B" (if (string= from "") (setq from (navi2ch-localfile-default-user-name directory))) (navi2ch-with-default-file-modes navi2ch-localfile-default-file-modes (navi2ch-localfile-with-lock directory (let ((coding-system-for-read navi2ch-localfile-coding-system) (coding-system-for-write navi2ch-localfile-coding-system) (dat-directory (expand-file-name "dat" directory)) now article-id file) (unless (file-exists-p dat-directory) (make-directory dat-directory t)) (while (progn (setq now (current-time) article-id (format-time-string "%s" now) file (expand-file-name (concat article-id ".dat") dat-directory)) ;; $B$3$3$G%U%!%$%k$r%"%H%_%C%/$K:n$j$?$$$H$3$@$1$I!"(B ;; write-region $B$K(B mustbenew $B0z?t$NL5$$(B XEmacs $B$G$I$&(B ;; $B$d$l$P$$$$$s$@$m$&!#!#!#(B (file-exists-p file)) (sleep-for 1)) ; $B$A$g$C$HBT$C$F$_$k!#(B (with-temp-file file (insert (navi2ch-localfile-encode-message from mail now message subject))) (navi2ch-localfile-update-subject-file directory article-id (string-match "sage" mail)))))) (defun navi2ch-localfile-append-message (directory article-id from mail message) "DIRECTORY $B$N(B ARTICLE-ID $B%9%l$K%l%9$rIU$1$k!#(B" (if (string= from "") (setq from (navi2ch-localfile-default-user-name directory))) (navi2ch-with-default-file-modes navi2ch-localfile-default-file-modes (navi2ch-localfile-with-lock directory (let* ((coding-system-for-read navi2ch-localfile-coding-system) (coding-system-for-write navi2ch-localfile-coding-system) (dat-directory (expand-file-name "dat" directory)) (file (expand-file-name (concat article-id ".dat") dat-directory)) (temp-file (navi2ch-make-temp-file file))) (unwind-protect (when (file-readable-p file) (with-temp-file temp-file (insert-file-contents file) (goto-char (point-max)) (if (not (= (char-before) ?\n)) ; $BG0$N$?$a(B (insert "\n")) (insert (navi2ch-localfile-encode-message from mail (current-time) message))) (rename-file temp-file file t)) (if (file-exists-p temp-file) (delete-file temp-file))) (navi2ch-localfile-update-subject-file directory article-id (string-match "sage" mail)))))) ;; interface functions for multibbs (defun navi2ch-localfile-p (uri) "URI $B$,(B localfile $B$J$i(B non-nil$B$rJV$9!#(B" (string-match navi2ch-localfile-regexp uri)) (defun navi2ch-localfile-article-update (board article start) "BOARD ARTICLE $B$N5-;v$r99?7$9$k!#(B" (let* ((url (navi2ch-article-get-url board article)) (file (navi2ch-article-get-file-name board article)) (time (or (cdr (assq 'time article)) (and (file-exists-p file) (navi2ch-http-date-encode (navi2ch-file-mtime file)))))) (navi2ch-localfile-update-file url file time))) (defun navi2ch-localfile-article-to-url (board article &optional start end nofirst) (let* ((uri (cdr (assq 'uri board))) (artid (cdr (assq 'artid article))) url) (unless (string= (substring uri -1) "/") (setq uri (concat uri "/"))) (if (null artid) uri (setq url (concat uri "dat/" artid ".dat/")) (when (numberp start) (setq start (number-to-string start))) (when (numberp end) (setq end (number-to-string end))) (if (equal start end) (concat url start) (concat url start (and (or start end) "-") end (and nofirst "n")))))) (defun navi2ch-localfile-url-to-board (url) (let (list uri id) (cond ((string-match "\\`\\(x-localbbs://.*/\\([^/]+\\)\\)/dat/[0-9]+\\.dat" url) (setq uri (match-string 1 url) id (match-string 2 url))) ((string-match "\\`\\(x-localbbs://.*/\\([^/]+\\)\\)/?$" url) (setq uri (match-string 1 url) id (match-string 2 url)))) (when uri (setq uri (concat uri "/")) (setq list (cons (cons 'uri uri) list))) (when id (setq list (cons (cons 'id id) list))) list)) (defun navi2ch-localfile-url-to-article (url) (let (list) (when (string-match "\\`x-localbbs://.*/\\([0-9]+\\)\\.dat/?\\([0-9]+\\)?" url) (setq list (cons (cons 'artid (match-string 1 url)) list)) (when (match-string 2 url) (setq list (cons (cons 'number (string-to-number (match-string 2 url))) list)))) list)) (defvar navi2ch-localfile-last-error nil) (defun navi2ch-localfile-send-message (from mail message subject bbs key time board article &optional post) (setq navi2ch-localfile-last-error (catch 'error (when (= (length message) 0) (throw 'error "$BK\J8$,=q$+$l$F$$$^$;$s!#(B")) (when (and subject (= (length subject) 0)) (throw 'error "Subject $B$,=q$+$l$F$$$^$;$s!#(B")) (save-match-data (let* ((url (navi2ch-board-get-url board)) directory) (if (string-match (concat navi2ch-localfile-regexp "\\(.+\\)") url) (setq directory (file-name-directory (match-string 1 url))) (throw 'error "$B2?$+JQ$G$9!#(B")) (if subject ;; $B%9%lN)$F(B (navi2ch-localfile-create-thread directory from mail message subject) ;; $B%l%9=q$-(B (navi2ch-localfile-append-message directory key from mail message)))) nil))) (defun navi2ch-localfile-send-message-success-p (proc) (null navi2ch-localfile-last-error)) (defun navi2ch-localfile-error-string (proc) navi2ch-localfile-last-error) (defun navi2ch-localfile-board-update (board) (let* ((url (navi2ch-board-get-url board)) (file (navi2ch-board-get-file-name board)) (time (or (cdr (assq 'time board)) (and (file-exists-p file) (navi2ch-http-date-encode (navi2ch-file-mtime file)))))) (navi2ch-localfile-update-file url file time))) (defun navi2ch-localfile-board-get-file-name (board &optional file-name) (let ((uri (navi2ch-board-get-uri board)) (cache-dir (navi2ch-expand-file-name navi2ch-localfile-cache-name))) (when (and uri (string-match (concat navi2ch-localfile-regexp "/*\\(.:/\\)?\\(.+\\)") uri)) (expand-file-name (or file-name navi2ch-board-subject-file-name) (expand-file-name (match-string 2 uri) cache-dir))))) (defun navi2ch-localfile-update-file (url file &optional time &rest args) (let ((directory (file-name-directory file))) (unless (file-exists-p directory) (make-directory directory t))) (let (source-file) (save-match-data (when (string-match (concat navi2ch-localfile-regexp "\\(.+\\)") url) (setq source-file (match-string 1 url)))) (when (and source-file (file-readable-p source-file)) (message "Checking file...") (let* ((mtime (navi2ch-file-mtime source-file)) (mtime-string (navi2ch-http-date-encode mtime)) header) (when time (setq time (navi2ch-http-date-decode time))) (setq header (list (cons 'date mtime-string) (cons 'server "localfile"))) (if (or navi2ch-net-force-update (navi2ch-compare-times mtime time) (not (file-exists-p file))) (progn (copy-file source-file file t) (setq header (cons (cons 'last-modified mtime-string) header)) (message "%supdated" (current-message))) (setq header (navi2ch-net-add-state 'not-updated header)) (message "%snot updated" (current-message))) header)))) ;;; navi2ch-localfile.el ends here navi2ch/navi2ch-machibbs.el000066400000000000000000000210601173560164300160370ustar00rootroot00000000000000;;; navi2ch-machibbs.el --- View machiBBS module for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004, 2009 by Navi2ch Project ;; Author: ;; Part5 $B%9%l$N(B 509 $B$NL>L5$7$5$s(B ;; ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-machibbs) (defconst navi2ch-machibbs-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch-multibbs) (defvar navi2ch-machibbs-func-alist '((bbs-p . navi2ch-machibbs-p) (subject-callback . navi2ch-machibbs-subject-callback) (article-update . navi2ch-machibbs-article-update) (article-to-url . navi2ch-machibbs-article-to-url) (url-to-board . navi2ch-machibbs-url-to-board) (url-to-article . navi2ch-machibbs-url-to-article) (send-message . navi2ch-machibbs-send-message) (send-success-p . navi2ch-machibbs-send-message-success-p) (board-update . navi2ch-machibbs-board-update))) (defvar navi2ch-machibbs-variable-alist (list (cons 'coding-system navi2ch-coding-system))) (navi2ch-multibbs-regist 'machibbs navi2ch-machibbs-func-alist navi2ch-machibbs-variable-alist) ;; (defvar navi2ch-machibbs-subject-max-bytes 5000 ;; "$B%9%l$N0lMw$r$I$l$@$1I=<($9$k$+!#(B ;; 0$B$N>l9g$OA4$FI=<($9$k!#(B") ;;------------- (defun navi2ch-machibbs-p (uri) "URI $B$,(B machibbs $B$J$i(B non-nil$B$rJV$9!#(B" (or (string-match "http://[^\\.]+\\.machibbs\\.com/" uri) (string-match "http://[^\\.]+\\.machi\\.to/" uri))) ;; (defun navi2ch-machibbs-subject-callback (string) ;; "subject.txt $B$r navi2ch-machibbs-subject-max-bytes 0) ;; (substring string 0 navi2ch-machibbs-subject-max-bytes) ;; string))) ;; (navi2ch-replace-string ;; "\\([0-9]+\\.\\)cgi\\([^\n]+\n\\)" "\\1dat\\2" sub-string t))) (navi2ch-multibbs-defcallback navi2ch-machibbs-subject-callback (machibbs) "subject.txt $B$r\\([0-9]+\\)<>\\([^\n]+\n\\)" nil t) (replace-match "\\1.dat<>\\2"))) (defun navi2ch-machibbs-article-update (board article start) "BOARD ARTICLE $B$N5-;v$r99?7$9$k!#(B START $B$,(B non-nil $B$J$i$P%l%9HV9f(B START $B$+$i$N:9J,$r\\([0-9]+\\) ?$BL>A0!'(B\\(
?\\|]*>\ ?\\)\\(.*\\) ?.+ ?$BEj9FF|!'(B ?\\(.*\\)\\(\n\\( ?]\\)\\)?
\
?\\(.*\\) ?

$") (defvar navi2ch-machibbs-parse-subject-regexp "\\(.*\\)") (defun navi2ch-machibbs-parse-subject () (let ((case-fold-search t)) (and (re-search-forward navi2ch-machibbs-parse-subject-regexp nil t) (match-string 1)))) (defun navi2ch-machibbs-parse () (let ((case-fold-search t)) (re-search-forward navi2ch-machibbs-parse-regexp nil t))) (defun navi2ch-machibbs-make-article (&optional subject) (let ((mail (match-string 3)) (name (match-string 4)) (date (match-string 5)) (date-tail (match-string 7)) (contents (match-string 8))) (format "%s<>%s<>%s<>%s<>%s\n" name (or mail "") (concat date (or date-tail "")) contents (or subject "")))) (navi2ch-multibbs-defcallback navi2ch-machibbs-article-callback (machibbs &optional diff) (let ((beg (point)) (max-num 0) subject alist num min-num) (unless diff (setq subject (navi2ch-machibbs-parse-subject))) (while (navi2ch-machibbs-parse) (setq num (string-to-number (match-string 1)) min-num (or min-num num) max-num (max max-num num) alist (cons (cons (string-to-number (match-string 1)) (navi2ch-machibbs-make-article subject)) alist) subject nil)) (delete-region beg (point-max)) (when (and min-num max-num) (let ((i min-num)) (while (<= i max-num) (insert (or (cdr (assoc i alist)) "$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>\n")) (setq i (1+ i))))))) (defun navi2ch-machibbs-article-callback-diff () (navi2ch-machibbs-article-callback t)) (defun navi2ch-machibbs-board-update (board) (let ((uri (navi2ch-board-get-uri board))) (when (string-match "\\(.+\\)/\\([^/]+\\)/$" uri) (let ((url (format "%s/bbs/offlaw.cgi/%s/" (match-string 1 uri) (cdr (assq 'id board)))) (file (navi2ch-board-get-file-name board)) (time (cdr (assq 'time board))) (func (navi2ch-multibbs-subject-callback board))) (navi2ch-net-update-file url file time func))))) ;;; navi2ch-machibbs.el ends here navi2ch/navi2ch-megabbs.el000066400000000000000000000263461173560164300157030ustar00rootroot00000000000000;;; navi2ch-megabbs.el --- View megabbs.net module for Navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2004, 2006 by Navi2ch Project ;; Author: ;; Part5 $B%9%l$N(B 509 $B$NL>L5$7$5$s(B ;; ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;;; ----------$BNc(B---------- ;;; $BIaDL$K1\Mw$7$?$H$-(B ;;; http://www.megabbs.com/egame/index.html ;;; ;;; $B%9%l0lMw$NA4$F(B ($B2a5n%m%0%a%K%e!<(B) ;;; http://www.megabbs.com/cgi-bin/readtitle.cgi?bo=egame&br=off ;;; html $B$GMn$A$F$/$k!%(B`br' $B$O(B
$B$NM-L5(B[on|off]$B!%(B ;;; ;;; http://www.megabbs.com/egame/egame_newb.txt ;;; text $B$GMn$A$F$/$k!%(B1 $B9TL\$H:G8e$N9T$OITMW!%(B ;;; ;;; $B%9%l(B ($B%l%9$rA4It8+$k(B) ;;; http://www.megabbs.com/cgi-bin/readres.cgi?bo=egame&vi=1080276946 ;;; html $B$GMn$A$F$/$k!%(B ;;; ;;; $B%9%l(B ($B:G?7(B 100 $B7o(B) ;;; http://www.megabbs.com/cgi-bin/readres.cgi?bo=egame&vi=1080276946&rm=100 ;;; html $B$GMn$A$F$/$k!%(B ;;; ;;; readres.cgi $B$K$F!$(B>>1$B$r=|5n(B ;;; fi=no ;;; ;;; readres.cgi $B$K$F!$(B>>30$B$N$_(B ;;; res=30 ;;; Code: (provide 'navi2ch-megabbs) (defconst navi2ch-megabbs-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch-util) (require 'navi2ch-multibbs) (defvar navi2ch-megabbs-func-alist '((bbs-p . navi2ch-megabbs-p) (subject-callback . navi2ch-megabbs-subject-callback) (article-update . navi2ch-megabbs-article-update) (article-to-url . navi2ch-megabbs-article-to-url) (url-to-board . navi2ch-megabbs-url-to-board) (url-to-article . navi2ch-megabbs-url-to-article) (send-message . navi2ch-megabbs-send-message) (send-success-p . navi2ch-megabbs-send-message-success-p) ; (error-string . navi2ch-megabbs-send-message-error-string) (board-update . navi2ch-megabbs-board-update) (board-get-file-name . navi2ch-megabbs-board-get-file-name))) (defvar navi2ch-megabbs-variable-alist (list (cons 'coding-system navi2ch-coding-system))) (navi2ch-multibbs-regist 'megabbs navi2ch-megabbs-func-alist navi2ch-megabbs-variable-alist) (defgroup navi2ch-megabbs nil "*Navi2ch, megabbs." :prefix "navi2ch-megabbs-" :group 'navi2ch) (defcustom navi2ch-megabbs-max-articles 300 "$B%9%l0lMw$N:GBgCM!%(B" :type '(choice (const :tag "$BL5@)8B(B" 0) (integer :tag "$B@)8BCM(B")) :group 'navi2ch-megabbs) ;;------------- (defun navi2ch-megabbs-p (uri) "URI $B$,(B megabbs.net $B$J$i(B non-nil$B$rJV$9!#(B" (string-match "^http://www.megabbs.com/" uri)) (navi2ch-multibbs-defcallback navi2ch-megabbs-subject-callback (megabbs) "subject.txt $B$r\\(.*\\)<>\\(.*\\)\n" nil t) (replace-match "\\1.dat,\\2(\\3)\n" t) t)) (defun navi2ch-megabbs-article-update (board article start) "BOARD ARTICLE $B$N5-;v$r99?7$9$k!#(B START $B$,(B non-nil $B$J$i$P%l%9HV9f(B START $B$+$i$N:9J,$r
]*>\\([0-9]+\\)[^<]*\\(.*\\)[ $B!!(B]*\ \\([^<]*\\).*\n
\\(.*\\)]*>$" ) (defvar navi2ch-megabbs-parse-subject-regexp "\\(.*\\)") (defun navi2ch-megabbs-parse-subject () (let ((case-fold-search t)) (re-search-forward navi2ch-megabbs-parse-subject-regexp nil t) (match-string 1))) (defun navi2ch-megabbs-parse () (let ((case-fold-search t)) (re-search-forward navi2ch-megabbs-parse-regexp nil t))) (defun navi2ch-megabbs-make-article (&optional subject) (let* ((mail+name (match-string 2)) (date (match-string 3)) (contents-with-id (match-string 4)) mail name id) (progn (setq mail+name (navi2ch-replace-string "]*>\\|\\|\\|\\|" "" mail+name t)) (string-match "\\(\\(.*\\)\\|\\(.*\\)\\)" mail+name) (setq mail (match-string 2 mail+name)) (setq name (match-string (if mail 3 4) mail+name))) (let ((m (string-match "^" contents-with-id))) (setq id (and m (match-string 1 contents-with-id)))) (format "%s<>%s<>%s<>%s<>%s\n" name (or mail "") (concat date (and id " ID:") (or id "")) contents-with-id (or subject "")))) (navi2ch-multibbs-defcallback navi2ch-megabbs-article-callback (megabbs &optional diff) (let ((beg (point)) (max-num 0) subject alist num min-num) (unless diff (setq subject (navi2ch-megabbs-parse-subject))) (while (navi2ch-megabbs-parse) (setq num (string-to-number (match-string 1)) min-num (or min-num num) max-num (max max-num num) alist (cons (cons (string-to-number (match-string 1)) (navi2ch-megabbs-make-article subject)) alist) subject nil)) (delete-region beg (point-max)) (when (and min-num max-num) (let ((i min-num)) (while (<= i max-num) (insert (or (cdr (assoc i alist)) "$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>$B$"$\!<$s(B<>\n")) (setq i (1+ i))))))) (defun navi2ch-megabbs-article-callback-diff () (navi2ch-megabbs-article-callback t)) ;------------------------------ (defun navi2ch-megabbs-board-update (board) (let ((url (navi2ch-megabbs-util-article-list-url board)) (file (navi2ch-megabbs-board-get-file-name board)) (time (cdr (assq 'time board))) (func (navi2ch-multibbs-subject-callback board))) (navi2ch-net-update-file url file time func))) (defun navi2ch-megabbs-util-article-list-url (board) (navi2ch-megabbs-with-board url id board (concat url id "_newb.txt"))) (defun navi2ch-megabbs-board-get-file-name (board &optional file-name) (navi2ch-megabbs-with-board uri nil board (string-match "http://\\(.+\\)" uri) (navi2ch-expand-file-name (concat (match-string 1 uri) (or file-name navi2ch-board-subject-file-name))))) ;;; navi2ch-megabbs.el ends here navi2ch/navi2ch-message.el000066400000000000000000000753201173560164300157230ustar00rootroot00000000000000;;; navi2ch-message.el --- write message module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 ;; by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-message) (defconst navi2ch-message-ident "$Id$") (defconst navi2ch-message-samba24-sambatxt-url "http://nullpo.s101.xrea.com/samba24/conv.xcg?browser=bbs2chreader&decsec=majority&offset=0&newline=crlf&output=download") (eval-when-compile (require 'cl)) (require 'navi2ch) (eval-and-compile (when (featurep 'xemacs) (require 'timer))) (defvar navi2ch-message-aa-map nil) (unless navi2ch-message-aa-map (let ((map (make-sparse-keymap "Type ? for further options"))) (navi2ch-set-keymap-default-binding map 'navi2ch-message-self-insert-aa) (define-key map "?" 'navi2ch-message-insert-aa) (setq navi2ch-message-aa-map map))) (defvar navi2ch-message-mode-map nil) (unless navi2ch-message-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-global-map) (define-key map "\C-c\C-c" 'navi2ch-message-send-message) (define-key map "\C-c\C-k" 'navi2ch-message-exit) (define-key map "\C-c\C-y" 'navi2ch-message-cite-original) (define-key map "\C-c\C-j" 'navi2ch-message-cite-original-from-number) (define-key map "\C-c\C-i" 'navi2ch-message-insert-backup) (define-key map "\C-c\C-b" 'navi2ch-base64-insert-file) (define-key map navi2ch-message-aa-prefix-key navi2ch-message-aa-map) (setq navi2ch-message-mode-map map))) (defvar navi2ch-message-mode-menu-spec '("Message" ["Toggle offline" navi2ch-toggle-offline] ["Send message" navi2ch-message-send-message] ["Cancel" navi2ch-message-exit] ["Cite message" navi2ch-message-cite-original])) (defvar navi2ch-message-buffer-name "*navi2ch message*") (defvar navi2ch-message-backup-buffer-name "*navi2ch message backup*") (defvar navi2ch-message-current-article-buffer nil) (defvar navi2ch-message-current-article nil) (defvar navi2ch-message-current-board nil) (defvar navi2ch-message-new-message-p nil) (defvar navi2ch-message-window-configuration nil) (defvar navi2ch-message-header-separator "----------------\n") (defvar navi2ch-message-paragraph-separate (concat (regexp-quote navi2ch-message-header-separator) "\\|" ">\\|" ; $B0zMQ(B "[ \t]*$") ; $B6u9T(B "*`navi2ch-message-mode' $B$G;HMQ$5$l$k(B `paragraph-separate'$B!#(B") (defvar navi2ch-message-paragraph-start navi2ch-message-paragraph-separate "*`navi2ch-message-mode' $B$G;HMQ$5$l$k(B `paragraph-start'$B!#(B") (defvar navi2ch-message-sendlog-board `((name . "$BAw?.95$((B") (type . board) (id . "sendlog") (bbstype . localfile) (uri . ,(concat "x-localbbs://" (navi2ch-expand-file-name "sendlog/"))))) (defvar navi2ch-message-font-lock-keywords `(("^>\\s-+.*$" . navi2ch-message-citation-face) ("[>$B!d(B]+[0-9$B#0(B-$B#9(B]+" 0 navi2ch-message-link-face t) (,navi2ch-article-url-regexp 0 navi2ch-message-url-face t))) (defvar navi2ch-message-link-face 'navi2ch-message-link-face) (defvar navi2ch-message-url-face 'navi2ch-message-url-face) (defvar navi2ch-message-citation-face 'navi2ch-message-citation-face) ;; SAMBA24$B$N%G!<%?(B(url$B$@$NHDL>$@$N;~4V$@$N(B) (defvar navi2ch-message-samba24-samba-data nil) (defvar navi2ch-message-samba24-send-time nil "$BHD(BID$B$H=q$-9~$_;~4V$rJ];}(B") ;; $B%b!<%I%i%$%s$KI=<($9$k%+%&%s%H%@%&%s(B (defvar navi2ch-message-samba24-mode-string nil) (defvar navi2ch-message-samba24-show t "non-nil $B$J$i=q$-9~$_5,@);~4V$rI=<((B.") ;; $B8=:_I=<(Cf$N=q$-9~$_5,@);~4V%b!<%I%i%$%s(B (defvar navi2ch-message-samba24-mode-string nil) (defvar navi2ch-message-samba24-file-name "samba.txt" "Samba24 $B$N5,@)IC?t>pJs$rJ];}$9$k%U%!%$%k$N%U%!%$%kL>(B.") (defvar navi2ch-message-samba24-update-timer nil) (defun navi2ch-message-write-message (board article &optional new sage cite) (when (or (not navi2ch-message-ask-before-write) (if (functionp navi2ch-message-ask-before-write) (funcall navi2ch-message-ask-before-write "Write new message? ") (y-or-n-p "Write new message? "))) (if (and (get-buffer navi2ch-message-buffer-name) (or navi2ch-message-always-pop-message (not (navi2ch-message-kill-message)))) (navi2ch-message-pop-message-buffer) (setq navi2ch-message-window-configuration (current-window-configuration)) (delete-other-windows) (split-window-vertically) (other-window 1) (setq navi2ch-message-current-article article) (setq navi2ch-message-current-board board) (setq navi2ch-message-new-message-p new) (setq navi2ch-message-current-article-buffer (if new nil (current-buffer))) (switch-to-buffer (get-buffer-create navi2ch-message-buffer-name)) (navi2ch-message-mode) (erase-buffer) (navi2ch-message-insert-header new sage) (setq navi2ch-mode-line-identification (navi2ch-message-make-mode-line-identification new)) (navi2ch-set-mode-line-identification) (when cite (navi2ch-message-cite-original)) (run-hooks 'navi2ch-message-setup-message-hook) (when sage (run-hooks 'navi2ch-message-setup-sage-message-hook))))) (defun navi2ch-message-make-mode-line-identification (new) (if new (format "*new message* [%s]" (cdr (assq 'name navi2ch-message-current-board))) (format "Re: %s [%s]" (cdr (assq 'subject navi2ch-message-current-article)) (cdr (assq 'name navi2ch-message-current-board))))) (defun navi2ch-message-pop-message-buffer () (interactive) (let ((buf (get-buffer navi2ch-message-buffer-name))) (when buf (cond ((get-buffer-window buf) (select-window (get-buffer-window buf))) (buf (setq navi2ch-message-window-configuration (current-window-configuration)) (delete-other-windows) (split-window-vertically) (other-window 1) (switch-to-buffer navi2ch-message-buffer-name)))))) (defun navi2ch-message-insert-backup () (interactive) (when (get-buffer navi2ch-message-backup-buffer-name) (let ((inhibit-read-only t)) (erase-buffer)) (insert-buffer-substring navi2ch-message-backup-buffer-name))) (defun navi2ch-message-insert-header (new sage) (and sage (setq sage "sage")) (when new (insert (navi2ch-read-only-string "Subject: ") (navi2ch-read-only-string "\n" t))) (insert (navi2ch-read-only-string "From: ") (or (and navi2ch-message-remember-user-name (cdr (assq 'name navi2ch-message-current-article))) (cdr (assoc (cdr (assq 'id navi2ch-message-current-board)) navi2ch-message-user-name-alist)) navi2ch-message-user-name "") (navi2ch-read-only-string "\n" t) (navi2ch-read-only-string "Mail: ") (or sage (and navi2ch-message-remember-user-name (cdr (assq 'mail navi2ch-message-current-article))) (cdr (assoc (cdr (assq 'id navi2ch-message-current-board)) navi2ch-message-mail-address-alist)) navi2ch-message-mail-address "") (navi2ch-read-only-string "\n" t) (navi2ch-read-only-string (navi2ch-propertize navi2ch-message-header-separator 'navi2ch-message-header-separator t))) (setq buffer-undo-list nil) (set-buffer-modified-p nil)) (defun navi2ch-message-header-end () (save-restriction (widen) (if (get-text-property (point-min) 'navi2ch-message-header-separator) (point-min) (next-single-property-change (point-min) 'navi2ch-message-header-separator)))) (defun navi2ch-message-cleanup-message () (save-excursion (let ((start (progn (goto-char (navi2ch-message-header-end)) (forward-line) (point)))) (when navi2ch-message-cleanup-trailing-whitespace (goto-char start) (while (re-search-forward "[ \t]+$" nil t) (replace-match ""))) (when navi2ch-message-cleanup-trailing-newline (goto-char start) (if (re-search-forward "[ \t\n]+\\'" nil t) (replace-match "")))))) (defun navi2ch-message-insert-notice (msg) "$B%a%C%;!<%8Ej9F%P%C%U%!$K2r@b$d%(%i!<%a%C%;!<%8$J$I(B `msg' $B$rI=<($9$k!#(B $B>r7o(B: $B%a%C%;!<%8Ej9F%P%C%U%!Fb$G8F$P$l$k$3$H!#(B" (let ((inhibit-read-only t) (end (navi2ch-message-header-end)) pos) (when end (save-excursion ;; (point-min) $B$G$O(B text-property `navi2ch-message-notice' $B$,$J$$!"(B ;; $B$^$?$O(B nil $B$G$"$k$3$H$,J]>Z$5$l$k!#(B $B$^$?!"(B text-property ;; `navi2ch-message-notice' $B$,(B non-nil $B$G$"$kE@$+$i(B ;; (navi2ch-message-header-end) $B$^$G$O(B notice $B$N$_$,F~$k$H$9$k!#(B (when (setq pos (next-single-property-change (point-min) 'navi2ch-message-notice)) (delete-region pos end)) (goto-char (navi2ch-message-header-end)) (insert (navi2ch-read-only-string (navi2ch-propertize navi2ch-message-header-separator 'navi2ch-message-notice t)) (navi2ch-read-only-string (concat msg "\n"))))))) (defun navi2ch-message-send-message () (interactive) (if navi2ch-offline (message "Now offline") (when (or (not navi2ch-message-ask-before-send) (if (functionp navi2ch-message-ask-before-send) (funcall navi2ch-message-ask-before-send "Send message? ") (y-or-n-p "Send message? "))) (widen) (run-hooks 'navi2ch-message-before-send-hook) (navi2ch-message-cleanup-message) (let (result) (save-excursion (let ((end (navi2ch-message-header-end)) (from "") (mail "") subject message) (goto-char (point-min)) (when navi2ch-message-new-message-p (if (re-search-forward "^Subject: ?\\(.*\\)" end t) (setq subject (match-string 1)) (setq subject ""))) (goto-char (point-min)) (when (re-search-forward "^From: ?\\(.*\\)" end t) (setq from (match-string 1)) (when (and (not navi2ch-message-new-message-p) navi2ch-message-remember-user-name) (navi2ch-message-set-name from))) (goto-char (point-min)) (when (re-search-forward "^Mail: ?\\(.*\\)" end t) (setq mail (match-string 1)) (when (and (not navi2ch-message-new-message-p) navi2ch-message-remember-user-name) (navi2ch-message-set-mail mail))) (goto-char end) (forward-line) (setq message (buffer-substring-no-properties (point) (point-max))) (let ((buffer (current-buffer)) (inhibit-read-only t)) (with-current-buffer (get-buffer-create navi2ch-message-backup-buffer-name) (erase-buffer) (insert-buffer-substring buffer))) (when navi2ch-message-trip (setq from (concat from "#" navi2ch-message-trip))) (let ((board navi2ch-message-current-board) (article navi2ch-message-current-article)) (navi2ch-net-cleanup) ;; $B"-(Bresult$B$r8E$$;EMM$KLa$7$?!#(Bspid$B$O!"(Bnavi2ch-multibbs.el$B$N(B ;; $B"-(B navi2ch-2ch-send-message $B$G=hM}$9$k!#(B (setq result (navi2ch-multibbs-send-message from mail message subject board article)) (navi2ch-net-cleanup) (when result (when navi2ch-message-save-sendlog (navi2ch-message-add-sendlog from mail message subject board article)) (message "Waiting new message...") (sleep-for navi2ch-message-wait-time) (message "%s%s" (current-message) "done") (save-excursion (if navi2ch-message-new-message-p (progn (set-buffer navi2ch-board-buffer-name) (navi2ch-board-sync)) (when (buffer-live-p navi2ch-message-current-article-buffer) (set-buffer navi2ch-message-current-article-buffer) (navi2ch-article-sync navi2ch-message-force-sync))))) (when (get-buffer navi2ch-message-backup-buffer-name) (bury-buffer navi2ch-message-backup-buffer-name))))) (navi2ch-message-samba24) (run-hooks 'navi2ch-message-after-send-hook) (if result (navi2ch-message-exit 'after-send) (let ((errmsg (current-message))) (when (and errmsg (string-match ": " errmsg)) (setq errmsg (substring errmsg (match-end 0))) (navi2ch-message-insert-notice (concat "$BEj9F%(%i!<(B: " errmsg))))))))) (defun navi2ch-message-set-name (name) (save-excursion (if (buffer-live-p navi2ch-message-current-article-buffer) (set-buffer navi2ch-message-current-article-buffer) (navi2ch-article-view-article navi2ch-message-current-board navi2ch-message-current-article nil)) (setq navi2ch-article-current-article (navi2ch-put-alist 'name name navi2ch-article-current-article)))) (defun navi2ch-message-set-mail (mail) (let ((case-fold-search t)) (unless (string-match "sage" mail) (save-excursion (if (buffer-live-p navi2ch-message-current-article-buffer) (set-buffer navi2ch-message-current-article-buffer) (navi2ch-article-view-article navi2ch-message-current-board navi2ch-message-current-article nil)) (setq navi2ch-article-current-article (navi2ch-put-alist 'mail mail navi2ch-article-current-article)))))) (defun navi2ch-message-cite-original (&optional arg) "$B0zMQ$9$k!#(B" (interactive "P") (let (nums from to) (setq nums (with-current-buffer (navi2ch-article-current-buffer) (if (navi2ch-region-active-p) (progn (setq from (save-excursion (goto-char (region-beginning)) (navi2ch-article-get-current-number)) to (save-excursion (goto-char (region-end)) (navi2ch-article-get-current-number))) (navi2ch-number-sequence from to)) `(,(navi2ch-article-get-current-number))))) (if arg (progn (navi2ch-message-cite-original-from-number (or from (car nums)) arg) (when to (goto-char (1- (point))) (insert "-" (number-to-string to)) (goto-char (1+ (point))))) (dolist (n nums) (navi2ch-message-cite-original-from-number n))))) (defun navi2ch-message-cite-original-from-number (num &optional arg) "$BHV9f$rA*$s$G!"0zMQ$9$k!#(B" (interactive "nInput number: \nP") (when (< (point) (navi2ch-message-header-end)) (error "Cannot cite in header")) (let (same msg board article) (with-current-buffer (navi2ch-article-current-buffer) (setq msg (navi2ch-article-get-message-string num)) (setq article navi2ch-article-current-article) (setq board navi2ch-article-current-board) (setq same (and (string-equal (cdr (assq 'id board)) (cdr (assq 'id navi2ch-message-current-board))) (string-equal (cdr (assq 'artid article)) (cdr (assq 'artid navi2ch-message-current-article)))))) (if same (insert ">>" (number-to-string num) "\n") (insert (navi2ch-article-to-url board article num num nil) "\n")) (unless arg (push-mark) (let ((point (point))) (insert msg "\n") (string-rectangle point (point) navi2ch-message-cite-prefix))))) (defun navi2ch-message-exit (&optional after-send) (interactive) (run-hooks 'navi2ch-message-exit-hook) (when (navi2ch-message-kill-message after-send) ;; $B$`$%!"(Bset-window-configuration $B$r;H$&$H%+!<%=%k0LCV$,JQ$K$J$k$s$+$$!)(B (set-window-configuration navi2ch-message-window-configuration) (when (and (not navi2ch-message-new-message-p) after-send) (if (buffer-live-p navi2ch-message-current-article-buffer) (set-buffer navi2ch-message-current-article-buffer) (navi2ch-article-view-article navi2ch-message-current-board navi2ch-message-current-article navi2ch-message-force-sync))) (navi2ch-article-load-number))) (defun navi2ch-message-kill-message (&optional no-ask) (when (or no-ask (not navi2ch-message-ask-before-kill) (if (functionp navi2ch-message-ask-before-kill) (funcall navi2ch-message-ask-before-kill "Kill current message? ") (y-or-n-p "Kill current message? "))) (kill-buffer navi2ch-message-buffer-name) t)) (easy-menu-define navi2ch-message-mode-menu navi2ch-message-mode-map "Menu used in navi2ch-message" navi2ch-message-mode-menu-spec) (defun navi2ch-message-setup-menu () (easy-menu-add navi2ch-message-mode-menu)) (defun navi2ch-message-fill-paragraph (arg) (interactive) (let ((before (point))) (save-excursion (forward-paragraph) (or (bolp) (newline 1)) (let ((end (point)) (beg (progn (backward-paragraph) (point)))) (when (eq beg (point-min)) (forward-line 3) (setq beg (point))) (goto-char before) (fill-region-as-paragraph beg end arg) t)))) (defun navi2ch-message-substitute-key-definitions () (dolist (old-new-def '((beginning-of-line . navi2ch-message-beginning-of-line) (back-to-indentation . navi2ch-message-back-to-indentation))) (substitute-key-definition (car old-new-def) (cdr old-new-def) navi2ch-message-mode-map (current-global-map)))) (define-derived-mode navi2ch-message-mode text-mode "Navi2ch Message" "\\{navi2ch-message-mode-map}" (set (make-local-variable 'fill-paragraph-function) 'navi2ch-message-fill-paragraph) (set (make-local-variable 'paragraph-separate) navi2ch-message-paragraph-separate) (set (make-local-variable 'paragraph-start) navi2ch-message-paragraph-start) (set (make-local-variable 'auto-fill-inhibit-regexp) "^[A-Z][^: \n\t]+:") ; $B%X%C%@(B (set (make-local-variable 'font-lock-defaults) '(navi2ch-message-font-lock-keywords t)) (navi2ch-message-setup-menu) (navi2ch-message-substitute-key-definitions)) (defun navi2ch-message-self-insert-aa () "$B:G8eF~NO$7$?%-!<$K$7$?$,$C$F(B AA $B$rF~NO$9$k!#(B" (interactive) (let ((char last-command-event) aa) (if (and (navi2ch-char-valid-p char) (setq aa (cdr (assoc (string last-command-event) (append navi2ch-message-aa-alist navi2ch-message-aa-default-alist))))) (insert aa) (ding)))) (defun navi2ch-message-insert-aa-list () (let ((aa-width navi2ch-message-popup-aa-width) (nl nil) alist keys) (dolist (elt (append navi2ch-message-aa-alist navi2ch-message-aa-default-alist)) (when (and (not (member (car elt) keys)) (stringp (car elt)) (stringp (cdr elt))) (setq alist (cons elt alist)) (setq keys (cons (car elt) keys)))) (dolist (key (sort keys 'string<)) (let ((val (cdr (assoc key alist))) string width) (setq string (format "%s: %s" (key-description key) val) width (string-width string)) (if (> width aa-width) (setq string (concat (navi2ch-truncate-string-to-width string (- aa-width 3)) "..."))) (insert (navi2ch-truncate-string-to-width string aa-width nil ?\ ) (if nl "\n" " ")) (setq nl (not nl)))))) (defun navi2ch-message-popup-aa-list () "aa $B$N%j%9%H$rI=<($9$k!#(B" (interactive) (let ((buffer (get-buffer-create "*AA List*")) (continue t) c) (unwind-protect (save-window-excursion (with-current-buffer buffer (erase-buffer) (navi2ch-message-insert-aa-list) (goto-char (point-min)) (pop-to-buffer (current-buffer)) (while continue (setq c (navi2ch-read-char "Type key for AA (or SPC forward, DEL back): ")) (cond ((memq c '(?\ ?\C-v)) (ignore-errors (scroll-up))) ((memq c '(?\C-h ?\177)) (ignore-errors (scroll-down))) ((eq c ?\C-l) (recenter)) (t (setq continue nil))))) c) (if (bufferp buffer) (kill-buffer buffer))))) (defun navi2ch-message-insert-aa () "aa $B$rF~NO$9$k!#(B" (interactive) (let* ((char (navi2ch-message-popup-aa-list)) (aa (cdr (assoc (char-to-string char) (append navi2ch-message-aa-alist navi2ch-message-aa-default-alist))))) (if (stringp aa) (insert aa) (ding)))) (defun navi2ch-message-jump-to-message-buffer () "message buffer $B$,$"$k$H$-!"=q$-9~$_@h$N%9%l(B/$BHD$rI=<($7(B message buffer $B$K@Z$jBX$(!#(B" (interactive) (if (not (get-buffer navi2ch-message-buffer-name)) (message "No message buffer") (delete-other-windows) (if navi2ch-message-current-article-buffer ;; $B4{B8%9%l$K=q$-9~$_(B $B"*(B $B=q$-9~$_@h$N%9%l$rI=<((B (if (buffer-live-p navi2ch-message-current-article-buffer) (switch-to-buffer navi2ch-message-current-article-buffer) (navi2ch-article-view-article navi2ch-message-current-board navi2ch-message-current-article) (setq navi2ch-message-current-article-buffer (current-buffer))) ;; $B?75,%9%lN)$F(B $B"*(B $B=q$-9~$_@h$NHD$rI=<((B (or (and (get-buffer navi2ch-board-buffer-name) (progn (switch-to-buffer (get-buffer navi2ch-board-buffer-name)) t) (eq major-mode 'navi2ch-board-mode) (eq navi2ch-board-current-board navi2ch-message-current-board)) (navi2ch-bm-select-board navi2ch-message-current-board))) (split-window-vertically) (other-window 1) (switch-to-buffer (get-buffer navi2ch-message-buffer-name)))) (defun navi2ch-message-beginning-of-line (&optional n) "$B9T$N@hF,$X0\F0!#(B header field $B$X0\F0$7$J$$0J30$O(B `beginning-of-line' $B$HF1$8!#(B" (interactive "p") (beginning-of-line n) (when (< (point) (navi2ch-message-header-end)) (search-forward ": " nil t))) (defun navi2ch-message-back-to-indentation () "$B9T$N:G=i$N6uGr$G$J$$2U=j$X0\F0!#(B header field $B$X0\F0$7$J$$0J30$O(B `back-to-indentation' $B$HF1$8!#(B" (interactive) (navi2ch-message-beginning-of-line) (skip-chars-forward " \t")) ;; sendlog$B5!G=(B (defun navi2ch-message-sendlog-subject (board article) ;; $BAw?.$7$?%l%9$rJ]B8$9$k%9%l$N%?%$%H%k$rJV$9!#(B ;; $B%?%$%H%k$r:Y$+$/;XDj$7$?$$$H$-$O$3$N4X?t$r>e=q$-$7$F$M!#(B ;; nil $B$rJV$9$H!"MzNr$OJ]B8$5$l$^$;$s!#(B navi2ch-message-sendlog-subject) (defun navi2ch-message-sendlog-subject-with-volume (base format limit subject-list) (let ((subject base) (regexp (concat "\\`" (format (regexp-quote format) (regexp-quote base) "\\([0-9]+\\)") "\\'")) (max 0) article) (when limit (dolist (x subject-list) (let ((sbj (cdr (assq 'subject x))) num) (when (and (or (and (string= base sbj) (setq num 1)) (and (string-match regexp sbj) (setq num (string-to-number (match-string 1 sbj))))) (> num max)) (setq max num article x)))) (when article (if (>= (string-to-number (cdr (assq 'response article))) limit) (setq subject (format format base (number-to-string (1+ max)))) (setq subject (cdr (assq 'subject article)))))) subject)) (defun navi2ch-message-add-sendlog (from mail message subject board article) (let ((navi2ch-localfile-default-file-modes (* 64 7)) ;; $BAw?.95$((B $B$N%9%l%?%$$K(B ♥ $B$H$+$r;H$($k$h$&$K!#(B (navi2ch-decode-character-references nil) (url (navi2ch-article-to-url board article)) (sbj (or subject (cdr (assq 'subject article)))) (lsubject (navi2ch-message-sendlog-subject board article)) (lboard navi2ch-message-sendlog-board) (fmt navi2ch-message-sendlog-volume-format) (limit navi2ch-message-sendlog-response-limit) larticle lsbj-list) (when (and lsubject lboard) (setq message (funcall navi2ch-message-sendlog-message-format-function message sbj url board article) lsbj-list (navi2ch-board-get-updated-subject-list lboard) lsubject (navi2ch-message-sendlog-subject-with-volume lsubject fmt limit lsbj-list)) (catch 'loop (dolist (s lsbj-list) (when (string= (cdr (assq 'subject s)) lsubject) (throw 'loop (setq larticle s))))) (when larticle (setq lsubject nil)) (navi2ch-multibbs-send-message from mail message lsubject lboard larticle)))) (defun navi2ch-message-sendlog-simple-message-format (message subject url board article) "$BAw?.95$($N%l%9$N%7%s%W%k$J%U%)!<%^%C%H!#(B" (format "Subject: %s\nURL: %s\n\n%s" subject url message)) (defun navi2ch-message-sendlog-message-format-with-board-name (message subject url board article) "$BAw?.95$($N%l%9$NHDL>IU$-$N%U%)!<%^%C%H!#(B" (format "[%s]: %s\nURL: %s\n\n%s" (cdr (assq 'name board)) subject url message)) ;; TODO: 2ch $BFb$K$*$$$F$OHD(BID$B$,=EJ#$7$J$$$3$H$rA0Ds$H$7$F$$$k!#:#$N$H$3(B ;; $B$m$OM-8z$@$,>-Mh$N$3$H$b9M$($k$HD>$9$Y$-!#(B (defun navi2ch-message-samba24-modeline () "$B=q$-9~$_7P2a;~4V$r%+%&%s%H%@%&%s$9$k(B." (let* ((tmp-time (current-time)) (now-time (+ (lsh (car tmp-time) 16) (nth 1 tmp-time))) samba-time time-diff) (setq navi2ch-message-samba24-mode-string "") (dolist (x navi2ch-message-samba24-send-time) (let* ((id (car x)) (id-normalized (if (string-match "^\\([^:]*\\):" id) (match-string 1 id) id))) (setq time-diff (- now-time (cdr x))) (setq samba-time (navi2ch-message-samba24-search-samba (navi2ch-message-samba24-board-conversion 'id id-normalized 'uri) id-normalized)) (when samba-time (if (<= time-diff samba-time) (setq navi2ch-message-samba24-mode-string (format "%s:%d %s" (navi2ch-message-samba24-board-conversion 'id id 'name) (- samba-time time-diff) navi2ch-message-samba24-mode-string)) (setq navi2ch-message-samba24-send-time (delete x navi2ch-message-samba24-send-time)) (unless navi2ch-message-samba24-send-time (cancel-timer navi2ch-message-samba24-update-timer) (setq navi2ch-message-samba24-update-timer nil)))))) (force-mode-line-update t))) (defun navi2ch-message-samba24 () "SAMBA24($BO"B3Ej9F5,@)(B)$B$NBP1~$N$?$a!"=q$-9~$_5v2DBT$A;~4V$rI=<($9$k!#(B $B%l%9Aw?.;~$K%3!<%k$5$l!"%b!<%I%i%$%s$G%+%&%s%H%@%&%s$rI=<($9$k(B" (when navi2ch-message-samba24-show (if (and (null navi2ch-message-samba24-samba-data) (null (navi2ch-message-samba24-read-samba))) (message "samba.txt$B$,$"$j$^$;$s(B") (let* ((tmp-time (current-time)) (last-write-time (+ (lsh (car tmp-time) 16) (cadr tmp-time))) (id (cdr (assq 'id navi2ch-message-current-board))) (id-list (assoc id navi2ch-message-samba24-send-time)) (id-normalized (if (string-match "^\\([^:]*\\):" id) (match-string 1 id) id))) (when (navi2ch-message-samba24-search-samba (navi2ch-message-samba24-board-conversion 'id id-normalized 'uri) id-normalized) (when id-list (setq navi2ch-message-samba24-send-time (delete id-list navi2ch-message-samba24-send-time))) (setq navi2ch-message-samba24-send-time (cons (cons id last-write-time) navi2ch-message-samba24-send-time)) (setq navi2ch-message-samba24-update-timer (or navi2ch-message-samba24-update-timer (run-at-time 1 1 'navi2ch-message-samba24-modeline)))))))) (defun navi2ch-message-samba24-board-conversion (src val dst) "$BHDL>!"(BID$B!"(BURL$B$J$I$NAj8_JQ49!#(B SRC=$BJQ4985$NO"A[%j%9%H:8B&(B VAL=$BJQ4985$NCM(B($B1&B&(B) DST=$BJQ49@h$N:8B&;XDj(B" (catch 'loop (dolist (x navi2ch-list-board-name-list) (if (string= val (cdr (assq src x))) (throw 'loop (cdr (assq dst x))))))) (defun navi2ch-message-samba24-read-samba () "samba.txt $B$+$i3F%5!<%P!"HD$4$H$NO"B3Ej9F5,@);~4V$rFI$_9~$_!"%j%9%H$H$7$FJ];}$9$k(B. samba.txt $B$O(B http://nullpo.s101.xrea.com/samba24/ $B$+$i!"HDL>$+$iO"B3Ej9F5,@);~4V$rF@$k(B.p2$B$G$N=q$-9~$_$N>l9g!"(B10$BIC%W%i%9$N%Z%J%k%F%#$,$"$k(B" (let (samba-time (samba-p2-time 0)) (when (and (stringp url) (string-match "http://\\([^/]+\\)" url)) (when (navi2ch-p2-board-p id) (setq samba-p2-time 10)) (setq samba-time (or (cdr (assoc id navi2ch-message-samba24-samba-data)) (cdr (assoc (match-string 1 url) navi2ch-message-samba24-samba-data)))) (when samba-time (+ samba-time samba-p2-time))))) (defun navi2ch-message-samba24-update () "samba24 $B$N5,@)>pJs$r99?7(B." ;; $B%U%!%$%k$,F0E*@8@.$C$]$$$N$G(BIf-Modified-Since$B8+$J$$!)!J9bIi2Y!)!K(B (navi2ch-net-update-file navi2ch-message-samba24-sambatxt-url (navi2ch-expand-file-name navi2ch-message-samba24-file-name) 'file)) (defun navi2ch-message-samba24-check (board) "Samba24 $B$K$R$C$+$+$k$+$I$&$+%A%'%C%/(B." (let* ((id (cdr (assq 'id board))) (last-write-time (cdr (assoc id navi2ch-message-samba24-send-time)))) (or (null last-write-time) (let* ((samba-time (navi2ch-message-samba24-search-samba (navi2ch-message-samba24-board-conversion 'id id 'uri) id)) (tmp-time (current-time)) (cur-time (+ (lsh (car tmp-time) 16) (cadr tmp-time))) (diff-time (- (+ last-write-time samba-time) cur-time))) (or (<= diff-time 0) (if navi2ch-message-samba24-wait-sleep (progn (while (> diff-time 0) (message "samba$BCY1d=q$-9~$_%U%j!<%:Cf(B %s sec %s %s" diff-time (current-time-string) samba-time) (sleep-for 1) (setq diff-time (1- diff-time))) (message "samba$BCY1d=q$-9~$_%U%j!<%:=*N;(B %s" (current-time-string))) (yes-or-no-p (format "$B$"$H(B %d $BICBT$C$?$[$&$,$$$$$H;W$&$1$I!"K\Ev$K=q$-$3$`(B? " diff-time)))))))) (defun navi2ch-message-samba24-modify-by-error (id error) "$B%5!<%P$+$i ;; 431 $B$NL>L5$7$5$s(B ;; 874 $B$NL>L5$7$5$s(B ;; UEYAMA Rui ;; part5 $B%9%l$N(B 26, 45 $B$5$s(B ;; The part of find-face is originated form apel (poe.el). ;; You can get the original apel from . ;; poe.el's Authors: MORIOKA Tomohiko ;; Shuhei KOBAYASHI ;; apel is also licened under GPL. ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; custom $B$r;H$C$F(B M-x customize-group navi2ch-mona $B$+$i(B ;; $B@_Dj$9$k$H%i%/%A%s!#(B ;;; Code: (provide 'navi2ch-mona) (defconst navi2ch-mona-ident "$Id$") (eval-when-compile (require 'cl)) (require 'base64) (require 'navi2ch-util) (eval-when-compile (navi2ch-defalias-maybe 'set-face-attribute 'ignore) (autoload 'x-decompose-font-name "fontset")) (make-face 'navi2ch-mona-face) (make-face 'navi2ch-mona12-face) (make-face 'navi2ch-mona14-face) (make-face 'navi2ch-mona16-face) (eval-when-compile (navi2ch-defalias-maybe 'query-fontset 'ignore) (navi2ch-defalias-maybe 'new-fontset 'ignore)) ;; $B%+%9%?%^%$%:JQ?t$N(B defcustom $B$KI,MW$J4X?t(B (defun navi2ch-mona-create-fontset-from-family-name (family-name height) "navi2ch $B$,I,MW$H$9$k%U%)%s%H%;%C%H$r:n$j!"$=$NL>A0$rJV$9!#(B FAMILY-NAME $B$O(B \"foundry-family\" $B$+$i$J$kJ8;zNs!#(BHEIGHT $B$O(B pixelsize$B!#(B XEmacs $B$G$OL@<(E*$K%U%)%s%H%;%C%H$r:n$kI,MW$,$J$$$N$G!"(B $B%U%)%s%H%;%C%HL>$H$7$F0UL#$N$"$kJ8;zNs(B \"--medium-r-*---*-*-*-p-*-*-*\" $B$rJV$9$@$1!#(B" (let ((fontset-name (format "-%s-medium-r-*--%d-*-*-*-p-*-*-*" family-name height))) (navi2ch-ifxemacs fontset-name (let* ((fields (x-decompose-font-name fontset-name)) (new-decompose-p (= (length fields) 12)) (slant (aref fields (if new-decompose-p 2 3))) (swidth (or (aref fields (if new-decompose-p 3 4)) "normal")) foundry family fontset-templ font-templ fontset) (if new-decompose-p (let ((foundry-family (aref fields 0))) (when (string-match "\\([^-]*\\)-\\([^-]*\\)" foundry-family) (setq foundry (match-string 1 foundry-family) family (match-string 2 foundry-family)))) (setq foundry (aref fields 0) family (aref fields 1))) (setq fontset-templ (format "-%s-%s-%%s-%s-%s--%d-*-*-*-p-*-fontset-mona%d" foundry family slant swidth height height) font-templ (progn (string-match "^\\(.*\\)\\(fontset-mona[^-]+\\)$" fontset-templ) (concat (match-string 1 fontset-templ) "%s")) fontset (format "-%s-%s-*-*-*--%d-*-*-*-*-*-%s" foundry family height (match-string 2 fontset-templ))) (setq fontset-name fontset) (dolist (weight '("medium" "bold")) (let ((fontset (format fontset-templ weight)) (font (format font-templ weight "%s"))) (unless (query-fontset fontset) (new-fontset fontset (list (cons 'ascii (format font "iso8859-1")) (cons 'latin-iso8859-1 (format font "iso8859-1")) (cons 'katakana-jisx0201 (format font "jisx0201.1976-0")) (cons 'latin-jisx0201 (format font "jisx0201.1976-0")) (cons 'japanese-jisx0208 (format font "jisx0208.1990-0")))))))) fontset-name))) (defun navi2ch-mona-create-face-from-family-name (family-name) "VALUE $B$G;XDj$5$l$k%U%)%s%H%;%C%H$K1~$8$F%U%'%$%9$r:n@.$9$k!#(B" (dolist (height '(12 14 16)) (if navi2ch-mona-use-ipa-mona (let ((face (intern (format "navi2ch-mona%d-face" height)))) (set-face-font face (format "%s:pixelsize=%d" family-name height))) (ignore-errors (let ((fontset (navi2ch-mona-create-fontset-from-family-name family-name height)) (face (intern (format "navi2ch-mona%d-face" height)))) (set-face-font face fontset)))))) (defun navi2ch-mona-set-font-family-name (symbol value) (navi2ch-mona-create-face-from-family-name value) (set-default symbol value)) ;; Customizable variables. (defcustom navi2ch-mona-enable nil "*non-nil $B$J$i!"%b%J!<%U%)%s%H$r;H$C$F%9%l$rI=<($9$k!#(B" :set (lambda (symbol value) (if value (navi2ch-mona-setup) (navi2ch-mona-undo-setup)) (set-default symbol value)) :initialize 'custom-initialize-default :type 'boolean :group 'navi2ch-mona) (defcustom navi2ch-mona-enable-board-list nil "*$B%b%J!<%U%)%s%H$GI=<($9$kHD$N%j%9%H!#(B nil $B$N$H$-$O(B `navi2ch-mona-disable-board-list' $B$G;XDj$7$?HD0J30$N(B $B$9$Y$F$NHD$G%b%J!<%U%)%s%H$r;HMQ$9$k!#(B" :type '(repeat (string :tag "$BHD(B")) :group 'navi2ch-mona) (defcustom navi2ch-mona-disable-board-list nil "*$B%b%J!<%U%)%s%H$r;H$o$J$$HD$N%j%9%H!#(B `navi2ch-mona-enable-board-list' $B$h$j$bM%@h$5$l$k!#(B" :type '(repeat (string :tag "$BHD(B")) :group 'navi2ch-mona) (defcustom navi2ch-mona-enable-article-list nil "*$B%b%J!<%U%)%s%H$GI=<($9$k%9%l$N%j%9%H!#(B `navi2ch-mona-disable-board-list' $B$h$j$bM%@h$5$l$k!#(B" :type '(repeat (cons (string :tag "$BHD(B") (string :tag "$B%9%l(B"))) :group 'navi2ch-mona) (defcustom navi2ch-mona-disable-article-list nil "*$B%b%J!<%U%)%s%H$r;H$o$J$$%9%l$N%j%9%H!#(B `navi2ch-mona-enable-board-list', `navi2ch-mona-enable-article-list' $B$h$j$bM%@h$5$l$k!#(B" :type '(repeat (cons (string :tag "$BHD(B") (string :tag "$B%9%l(B"))) :group 'navi2ch-mona) (defcustom navi2ch-mona-pack-space-p nil "*non-nil $B$J$i!"(BWeb $B%V%i%&%6$N$h$&$K(B2$B$D0J>e$N6uGr$O(B1$B$D$K$^$H$a$FI=<($9$k!#(B" :type 'boolean :group 'navi2ch-mona) (defcustom navi2ch-mona-font-family-name "mona-gothic" "*$B%b%J!<%U%)%s%H$H$7$F;H$&%U%)%s%H$N(B family $BL>!#(B XLFD $B$G$$$&(B \`foundry-family\' $B$r;XDj$9$k!#MW$9$k$K(B X $B$G$N(B $B%U%)%s%HL>$N:G=i$N(B2$B%U%#!<%k%I$r=q$1$P$$$$$C$F$3$C$?!#(B XEmacs $B$G$O!";XDj$5$l$?(B family $B$KBP$7$F(B pixelsize: 12/14/16 $B$N(B 3$B$D$N%U%)%s%H%;%C%H$r:n$k!#(B Emacs 21 $B$G$O!"$=$l$K2C$($F(B medium/bold $B$J%U%)%s%H$rJL!9$K:n$k!#(B $B$?$H$($P0z?t(B \`moga-gothic\' $B$,$o$?$5$l$k$H!"(B -mona-gothic-medium-r-*--12-*-*-*-*-*-fontset-mona12 -mona-gothic-medium-r-*--14-*-*-*-*-*-fontset-mona14 -mona-gothic-medium-r-*--16-*-*-*-*-*-fontset-mona16 -mona-gothic-bold-r-*--12-*-*-*-*-*-fontset-mona12 -mona-gothic-bold-r-*--14-*-*-*-*-*-fontset-mona14 -mona-gothic-bold-r-*--16-*-*-*-*-*-fontset-mona16 $B$H$$$&(B 6 $B$D$N%U%)%s%H%;%C%H$r:n$k$3$H$K$J$k!#(B $BJ8;z$N$+$o$j$K%H!<%U$,I=<($5$l$A$c$&$N$O!"$?$V$s%U%)%s%H$,(B $B8+$D$+$i$J$+$C$?$;$$$J$N$G!"(B\`xlsfonts\' $B$r-{medium,bold}-r-*--{12,14,16}-*-*\\ -*-*-*-{iso8859-1,jisx0201.1976-0,jisx0208.(1983|1990)-0} $B$,$"$k$+$I$&$+3N$+$a$F$M!#(B" :type '(choice (const :tag "Mona Font" "mona-gothic") (const :tag "MS P Gothic" "microsoft-pgothic") (string :tag "family name")) :set 'navi2ch-mona-set-font-family-name :initialize 'custom-initialize-default :group 'navi2ch-mona) (defconst navi2ch-mona-sample-string (concat "$B%5%s%W%k%F%-%9%H%2%C%H%)!*!*(B $B$R$i$,$J!"%+%?%+%J!"(BRoman Alphabet$B!#(B\n" (decode-coding-string (base64-decode-string (concat "gVCBUIFQgVCBUIHJgVCBUIFQgVCBUIFQgVCBUIFAgUAogUyBTAqBQIFAgUCBQCCB" "yIHIgUCBQIFAgWqBQIFAgUCBQIFAgUAogUyB3CiBTAqBQIFAgbyBad+ERN+BvIHc" "gU2CwoHfgd+B3yiBTIHcOzs7gd+B34HfCoFAgUCBQIFAgUCBQCCBUIFQgUAgKIFM" "gdwogUyB3Ds7CoFAgUCBQIFAgUCBQL3eu9673rCwsLCwryK93rveCg==")) 'shift_jis))) (defcustom navi2ch-mona-face-variable t "*$B%G%U%)%k%H$N(B Mona face $B$rA*$V!#(B" :type `(radio (const :tag "navi2ch-mona16-face" :sample-face navi2ch-mona16-face :doc ,navi2ch-mona-sample-string :format "%t:\n%{%d%}\n" navi2ch-mona16-face) (const :tag "navi2ch-mona14-face" :sample-face navi2ch-mona14-face :doc ,navi2ch-mona-sample-string :format "%t:\n%{%d%}\n" navi2ch-mona14-face) (const :tag "navi2ch-mona12-face" :sample-face navi2ch-mona12-face :doc ,navi2ch-mona-sample-string :format "%t:\n%{%d%}\n" navi2ch-mona12-face) (const :tag "$B%G%U%)%k%H$N%U%)%s%H$HF1$8%5%$%:$N(B face $B$r<+F0A*Br$9$k(B" t)) :set (function (lambda (symbol value) (set-default symbol value) (navi2ch-mona-set-mona-face))) :initialize 'custom-initialize-default :group 'navi2ch-mona) (defcustom navi2ch-mona-on-message-mode nil "*non-nil $B$N>l9g!"%l%9$r=q$/;~$K$b%b%J!<%U%)%s%H$r;H$&!#(B" :type 'boolean :group 'navi2ch-mona) (defcustom navi2ch-mona-use-ipa-mona nil "*non-nil $B$J$i!"(BIPA$B%b%J!<%U%)%s%H$r;H$C$F%9%l$rI=<($9$k!#(B" :set (lambda (symbol value) (navi2ch-mona-setup) (set-default symbol value)) :initialize 'custom-initialize-default :type 'boolean :group 'navi2ch-mona) (defcustom navi2ch-mona-ipa-mona-font-family-name "IPA $B%b%J!<(B P$B%4%7%C%/(B" "*$B%b%J!<%U%)%s%H$H$7$F;H$&%U%)%s%H$N(B family $BL>!#(B $B%(%i!<$,$G$?$i!"(B (pp (font-family-list)) $B$rI>2A$7$F(B IPA$B%b%J!<$C$](B $B$$$N$rC5$7$F$M!#(B" :type '(choice (const :tag "IPA Mona Font" "IPA $B%b%J!<(B P$B%4%7%C%/(B") (string :tag "family name")) :set 'navi2ch-mona-set-font-family-name :initialize 'custom-initialize-default :group 'navi2ch-mona) ;; defun find-face for GNU Emacs ;; the code is originated from apel. (defun navi2ch-find-face-subr (face-or-name) "Retrieve the face of the given name. If FACE-OR-NAME is a face object, it is simply returned. Otherwise, FACE-OR-NAME should be a symbol. If there is no such face, nil is returned. Otherwise the associated face object is returned." (car (memq face-or-name (face-list)))) (eval-and-compile (defalias 'navi2ch-find-face (if (fboundp 'find-face) #'find-face #'navi2ch-find-face-subr))) (defun navi2ch-mona-char-height () (navi2ch-ifxemacs (font-height (face-font 'default)) (frame-char-height))) (defun navi2ch-set-face-parent (face parent) (navi2ch-ifxemacs (set-face-parent face parent) (set-face-attribute face nil :inherit parent))) ;; functions (defun navi2ch-mona-set-mona-face () (let ((parent navi2ch-mona-face-variable)) (when (eq t parent) (let* ((height (navi2ch-mona-char-height)) (face-name (if height (format "navi2ch-mona%d-face" height) "navi2ch-mona16-face"))) (setq parent (intern face-name)))) (when (navi2ch-find-face parent) (navi2ch-set-face-parent 'navi2ch-mona-face parent)))) (defun navi2ch-mona-put-face () "face $B$,FC$K;XDj$5$l$F$$$J$$ItJ,$r(B mona-face $B$K$9$k!#(B `navi2ch-article-face' $B$NItJ,$b(B mona-face $B$K$9$k!#(B" (save-excursion (goto-char (point-min)) (let (p face) (while (not (eobp)) (setq p (next-single-property-change (point) 'face nil (point-max))) (setq face (get-text-property (point) 'face)) (if (or (null face) (eq face 'navi2ch-article-face)) (put-text-property (point) p 'face 'navi2ch-mona-face)) (goto-char p))))) (defun navi2ch-mona-pack-space () "$BO"B3$9$k(B2$B$D0J>e$N6uGr$r(B1$B$D$K$^$H$a$k!#(B" (save-excursion (goto-char (point-min)) (while (re-search-forward "^ +" nil t) (replace-match "")) (goto-char (point-min)) (while (re-search-forward " +" nil t) (replace-match " ")))) (defvar navi2ch-mona-enable-list nil "$B%b%J!<%U%)%s%H$rM-8z$K$9$k%j%9%H!#(B nil $B$N>l9g$O%G%U%)%k%H$GM-8z$K$J$k!#(B $B%(%l%a%s%H$,4X?t(B: $B8F$S=P$7$?7k2L$,(B non-nil $B$J$iM-8z(B $B%(%l%a%s%H$,J8;zNs(B: $B$=$NHD$GM-8z(B $B%(%l%a%s%H$,(B cons $B%Z%"(B: car $B$rHD!"(Bcdr $B$r%9%l$b$7$/$O%9%l$N%j%9%H$H$7!"(B $B$=$NHD$N$=$N%9%l$GM-8z(B $B3F%(%l%a%s%H$O=g$KI>2A$5$l!"M-8z$H$_$J$5$l$?;~E@$GI>2A$r=*N;$9$k!#(B") (defvar navi2ch-mona-disable-list nil "$B%b%J!<%U%)%s%H$rL58z$K$9$k%j%9%H!#(B `navi2ch-mona-enable-list' $B$h$j$bM%@h$5$l$k!#(B $B%(%l%a%s%H$,4X?t(B: $B8F$S=P$7$?7k2L$,(B non-nil $B$J$iL58z(B $B%(%l%a%s%H$,J8;zNs(B: $B$=$NHD$GL58z(B $B%(%l%a%s%H$,(B cons $B%Z%"(B: car $B$rHD!"(Bcdr $B$r%9%l$b$7$/$O%9%l$N%j%9%H$H$7!"(B $B$=$NHD$N$=$N%9%l$GL58z(B $B3F%(%l%a%s%H$O=g$KI>2A$5$l!"M-8z$H$_$J$5$l$?;~E@$GI>2A$r=*N;$9$k!#(B") (defun navi2ch-mona-match-p (list board-id article-id) (dolist (elt list) (when (cond ((functionp elt) (funcall elt)) ((stringp elt) (string= elt board-id)) ((and (consp elt) (string= (car elt) board-id)) (if (stringp (cdr elt)) (string= (cdr elt) article-id) (member article-id (cdr elt))))) (return t)))) (eval-when-compile (defvar navi2ch-popup-article-current-board) (defvar navi2ch-article-current-board) (defvar navi2ch-popup-article-current-article) (defvar navi2ch-article-current-article)) (defun navi2ch-mona-arrange-message () "$B%b%J!<%U%)%s%H$r;H$&HD$J$i$=$N$?$a$N4X?t$r8F$V!#(B" (let ((id (cdr (assq 'id (if (eq major-mode 'navi2ch-popup-article-mode) navi2ch-popup-article-current-board navi2ch-article-current-board)))) (artid (cdr (assq 'artid (if (eq major-mode 'navi2ch-popup-article-mode) navi2ch-popup-article-current-article navi2ch-article-current-article))))) (when (cond ((navi2ch-mona-match-p navi2ch-mona-disable-list id artid) nil) ((navi2ch-mona-match-p navi2ch-mona-enable-list id artid) t) ((member (cons id artid) navi2ch-mona-disable-article-list) nil) ((member (cons id artid) navi2ch-mona-enable-article-list) t) ((member id navi2ch-mona-disable-board-list) nil) ((member id navi2ch-mona-enable-board-list) t) ((or navi2ch-mona-enable-article-list navi2ch-mona-enable-board-list navi2ch-mona-enable-list) nil) (t t)) (navi2ch-mona-put-face)) (when navi2ch-mona-pack-space-p (navi2ch-mona-pack-space)))) (defun navi2ch-mona-message-mode-hook () (if navi2ch-mona-on-message-mode (navi2ch-ifxemacs (let ((extent (make-extent (point-min) (point-max)))) (set-extent-properties extent '(face navi2ch-mona-face start-closed t end-closed t))) (let ((overlay (make-overlay (point-min) (point-max) nil nil t))) (overlay-put overlay 'face 'navi2ch-mona-face))))) (defun navi2ch-mona-setup () "*$B%b%J!<%U%)%s%H$r;H$&$?$a$N%U%C%/$rDI2C$9$k!#(B" (when (and (or (eq window-system 'x) (eq window-system 'w32)) (or navi2ch-on-emacs21 navi2ch-on-xemacs)) (navi2ch-mona-create-face-from-family-name (if navi2ch-mona-use-ipa-mona navi2ch-mona-ipa-mona-font-family-name navi2ch-mona-font-family-name)) (navi2ch-mona-set-mona-face) ; $B2?2s8F$s$G$bBg>fIW(B (add-hook 'navi2ch-article-arrange-message-hook 'navi2ch-mona-arrange-message) (add-hook 'navi2ch-message-mode-hook 'navi2ch-mona-message-mode-hook) (run-hooks 'navi2ch-mona-setup-hook))) (defun navi2ch-mona-undo-setup () (run-hooks 'navi2ch-mona-undo-setup-hook) (remove-hook 'navi2ch-article-arrange-message-hook 'navi2ch-mona-arrange-message) (remove-hook 'navi2ch-message-mode-hook 'navi2ch-mona-message-mode-hook)) (run-hooks 'navi2ch-mona-load-hook) ;;; navi2ch-mona.el ends here navi2ch/navi2ch-multibbs.el000066400000000000000000000476271173560164300161310ustar00rootroot00000000000000;;; navi2ch-multibbs.el --- View 2ch like BBS module for Navi2ch. -*- ;;; coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2008, 2009 by Navi2ch ;; Project ;; Author: ;; Part5 $B%9%l$N(B 509 $B$NL>L5$7$5$s(B ;; ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-multibbs) (defconst navi2ch-multibbs-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch-http-date) (require 'navi2ch) (require 'navi2ch-be2ch) (defvar navi2ch-multibbs-func-table nil "BBS $B$NpJs$rl9g!":G8e$K(BEXTRACT-POST-FUNC$B$,JV$7$?CM$,(BOLD-POST$B$KB+G{$5$l(B $B$F$$$^$9!#(B SEND-MESSAGE-SUCCESS-P-FUNC(PROC): PROC $B$NAw?.%;%C%7%g%s$,@.8y$7$F$$$l$P(B non-nil $B$r!"(B $B<:GT$7$?$i(B nil $B$r!":F;n9T2DG=$J<:GT$J$i(B 'retry $B$rJV$9!#(B ERROR-STRING-FUNC(PROC): PROC $B$NAw?.%;%C%7%g%s$,<:GT$7$?$H$-$N%(%i!<%a%C%;!<%8$rJV$9!#(B BOARD-UPDATE-FUNC(BOARD): BOARD $B$GI=$5$l$k%U%!%$%k$r99?7$9$k!#(B BOARD-GET-FILE-NAME-FUNC(BOARD &optional FILE-NAME) BOARD $B$N>pJs$rJ]B8$9$k%G%#%l%/%H%j$r4p=`$H$7$F!"(BFILE-NAME $B$N(B $B@dBP%Q%9$rJV$9!#(B") (defvar navi2ch-multibbs-variable-alist nil "BBS $B$N2A$9$kA08e$K9T$J$&!"(BNAME $B$H$$$&(B $B0z?t(B [ARG]... $B$r;}$D4X?t$,Dj5A$5$l$k!#(B" (let ((bbstype (make-symbol "--bbstype--")) (decoding (make-symbol "--decoding--")) docstring) (when (stringp (car body)) (setq docstring (car body)) (setq body (cdr body))) `(defun ,name (,@(cdr spec)) ,docstring (let* ((coding-system-for-read 'binary) (coding-system-for-write 'binary) (,bbstype ',(car spec)) (,decoding (navi2ch-multibbs-get-variable ,bbstype 'coding-system navi2ch-coding-system))) (navi2ch-ifxemacs (navi2ch-decode-coding-region-linewise (point-min) (point-max) ,decoding) (decode-coding-region (point-min) (point-max) ,decoding)) (navi2ch-set-buffer-multibyte t) ,@body (encode-coding-region (point-min) (point-max) navi2ch-coding-system) (navi2ch-set-buffer-multibyte nil))))) (put 'navi2ch-multibbs-defcallback 'lisp-indent-function 2) (defun navi2ch-multibbs-article-update (board article start) (let* ((bbstype (navi2ch-multibbs-get-bbstype board)) (func (navi2ch-multibbs-get-func bbstype 'article-update 'navi2ch-2ch-article-update))) (funcall func board article start))) (defun navi2ch-multibbs-regist (bbstype func-alist variable-alist) (unless navi2ch-multibbs-func-table (setq navi2ch-multibbs-func-table (make-hash-table :size 6))) ;FIXME: 6 $B$G$?$j$k$H;W$&$1$I$I$&$9$+$M!#(B (puthash bbstype (navi2ch-alist-to-hash func-alist) navi2ch-multibbs-func-table) (setq navi2ch-multibbs-variable-alist (cons (cons bbstype variable-alist) navi2ch-multibbs-variable-alist))) (defsubst navi2ch-multibbs-get-func-from-board (board func &optional default-func) (navi2ch-multibbs-get-func (navi2ch-multibbs-get-bbstype board) func default-func)) (defun navi2ch-multibbs-get-variable (bbstype variable &optional default-value) (or (cdr (assq variable (cdr (assq bbstype navi2ch-multibbs-variable-alist)))) default-value)) (defun navi2ch-multibbs-url-to-bbstype (url) (or (and url (navi2ch-multibbs-get-bbstype-subr url navi2ch-multibbs-func-table)) 'unknown)) (defun navi2ch-multibbs-url-to-article (url) (let* ((bbstype (navi2ch-multibbs-url-to-bbstype url)) (func (navi2ch-multibbs-get-func bbstype 'url-to-article 'navi2ch-2ch-url-to-article))) (funcall func url))) (defun navi2ch-multibbs-url-to-board (url) (let* ((bbstype (navi2ch-multibbs-url-to-bbstype url)) (func (navi2ch-multibbs-get-func bbstype 'url-to-board 'navi2ch-2ch-url-to-board))) (funcall func url))) (defun navi2ch-multibbs-article-to-url (board article &optional start end nofirst) "BOARD, ARTICLE $B$+$i(B url $B$KJQ49!#(B START, END, NOFIRST $B$GHO0O$r;XDj$9$k(B" (let ((func (navi2ch-multibbs-get-func-from-board board 'article-to-url 'navi2ch-2ch-article-to-url))) (funcall func board article start end nofirst))) (defun navi2ch-multibbs-get-message-time-field () (if (stringp navi2ch-net-last-date) (navi2ch-http-date-decode navi2ch-net-last-date) (let* ((now (current-time)) (lag 300) ; $B$:$i$9IC?t(B (h (nth 0 now)) (l (- (nth 1 now) lag))) (when (< l 0) (setq l (+ l 65536) h (- h 0))) (cons h l)))) (defun navi2ch-multibbs-send-message-error-string (board proc) (let* ((func (navi2ch-multibbs-get-func (navi2ch-multibbs-get-bbstype board) 'error-string 'navi2ch-2ch-send-message-error-string)) (err (funcall func proc))) (or err (let ((status (and proc (navi2ch-net-get-status proc)))) (when status (concat "HTTP status: " status)))))) (defun navi2ch-multibbs-send-message (from mail message subject board article) (let* ((bbstype (navi2ch-multibbs-get-bbstype board)) (send (navi2ch-multibbs-get-func bbstype 'send-message 'navi2ch-2ch-send-message)) (extract-post (navi2ch-multibbs-get-func bbstype 'extract-post 'navi2ch-2ch-extract-post)) (success-p (navi2ch-multibbs-get-func bbstype 'send-success-p 'navi2ch-2ch-send-message-success-p)) (bbs (let ((uri (navi2ch-board-get-uri board))) (string-match "\\([^/]+\\)/$" uri) (match-string 1 uri))) (key (cdr (assq 'artid article))) (time (format-time-string "%s" (navi2ch-multibbs-get-message-time-field))) (navi2ch-net-http-proxy (and navi2ch-net-send-message-use-http-proxy (or navi2ch-net-http-proxy-for-send-message navi2ch-net-http-proxy))) (navi2ch-net-http-proxy-userid (if navi2ch-net-http-proxy-for-send-message navi2ch-net-http-proxy-userid-for-send-message navi2ch-net-http-proxy-userid)) (navi2ch-net-http-proxy-password (if navi2ch-net-http-proxy-for-send-message navi2ch-net-http-proxy-password-for-send-message navi2ch-net-http-proxy-password)) (tries 2) ; $BAw?.;n9T$N:GBg2s?t(B (message-str "send message...") (result 'retry) (post-data nil)) (dotimes (i tries) (let ((proc (funcall send from mail message subject bbs key time board article post-data))) (message message-str) (setq result (funcall success-p proc)) (cond ((eq result 'retry) (save-window-excursion (with-temp-buffer (insert (decode-coding-string (navi2ch-net-get-content proc) (navi2ch-board-get-coding-system board))) (setq post-data (funcall extract-post post-data (current-buffer))) (navi2ch-replace-html-tag-with-buffer) (goto-char (point-min)) (while (re-search-forward "[ \t]*\n\\([ \t]*\n\\)*" nil t) (replace-match "\n")) (delete-other-windows) (switch-to-buffer (current-buffer)) (unless (y-or-n-p "Retry? ") (return nil)))) (sit-for navi2ch-message-retry-wait-time) (setq message-str "re-send message...")) (result (message (concat message-str "succeed")) (return result)) (t (let ((err (navi2ch-multibbs-send-message-error-string board proc))) (if (stringp err) (message (concat message-str "failed: %s") err) (message (concat message-str "failed"))) ;;$B%(%i!<%a%C%;!<%8$+$i(Bsamba$BIC?t (with-current-buffer buffer (save-excursion (save-match-data (goto-char (point-min)) (let ((case-fold-search t) (re "\\<%s=\\(\"\\([^\"]*\\)\"\\|[^\"> \r\n\t]*\\)") r) (while (re-search-forward "[^>]+>" nil t) (let ((str (match-string 0)) name value) (and (string-match (format re "name") str) (setq name (or (match-string 2 str) (match-string 1 str))) (string-match (format re "value") str) (setq value (or (match-string 2 str) (match-string 1 str))) (setq name (navi2ch-replace-html-tag name) value (navi2ch-replace-html-tag value)) (push (cons name value) r)))) (nreverse r)))))) ;;; navi2ch-multibbs.el ends here navi2ch/navi2ch-net.el000066400000000000000000001062771173560164300150730ustar00rootroot00000000000000;;; navi2ch-net.el --- Network module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 ;; by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-net) (defconst navi2ch-net-ident "$Id$") (eval-when-compile (require 'cl)) (require 'timezone) (require 'base64) (require 'navi2ch) (defvar navi2ch-net-connection-name "navi2ch connection") (defvar navi2ch-net-user-agent "Monazilla/1.00 Navi2ch") (defvar navi2ch-net-setting-file-name "SETTING.TXT") (defvar navi2ch-net-last-date nil) (defvar navi2ch-net-last-url nil) (defvar navi2ch-net-process nil) (defvar navi2ch-net-last-host nil) (defvar navi2ch-net-last-port nil) (defvar navi2ch-net-status nil) (defvar navi2ch-net-header nil) (defvar navi2ch-net-content nil) (defvar navi2ch-net-state-header-table (navi2ch-alist-to-hash '((aborn . "X-Navi2ch-Aborn") ; $B$"$\!<$s$5$l$F$k(B (kako . "X-Navi2ch-Kako") ; $B2a5n%m%0$K$J$C$F$k(B (not-updated . "X-Navi2ch-Not-Updated") ; $B99?7$5$l$F$$$J$$(B (error . "X-Navi2ch-Error"))) ; $B%(%i!<(B($B%U%!%$%k$,2A$7!"$=$NCM$rJV$9!#(B BODY $B$NI>2ACf$K%(%i!<$,5/$3$k$H(B nil $B$rJV$9!#(B" (let ((done (make-symbol "--done-temp--")) (err (make-symbol "--err-temp--"))) `(let ((,done nil)) (unwind-protect (condition-case ,err (prog1 ,(cons 'progn body) (setq ,done t)) (error (ding) (if ,err (message "Error: %s" (error-message-string ,err)) (message "Error")) (sleep-for 1) nil)) (unless ,done (ignore-errors (navi2ch-net-cleanup-process))))))) (defun navi2ch-net-cleanup () (let (buf) (if (processp navi2ch-net-process) (setq buf (process-buffer navi2ch-net-process))) (unwind-protect (navi2ch-net-cleanup-process) (if buf (kill-buffer buf))))) (defun navi2ch-net-cleanup-process () (unwind-protect (if (processp navi2ch-net-process) (delete-process navi2ch-net-process)) (setq navi2ch-net-process nil) (navi2ch-net-cleanup-vars))) (defun navi2ch-net-cleanup-vars () (setq navi2ch-net-status nil navi2ch-net-header nil navi2ch-net-content nil)) (defun navi2ch-open-network-stream-with-retry (name buffer host service) (let ((retry t) proc) (while retry (condition-case err (setq proc (open-network-stream name buffer host service) retry nil) (file-error (save-match-data (if (string-match "in progress" ; EINPROGRESS or EALREADY (nth 2 err)) (progn (setq retry t) (sleep-for 1)) (signal (car err) (cdr err))))))) proc)) (defun navi2ch-open-network-stream-via-command (name buffer host service) (let ((command (cond ((stringp navi2ch-open-network-stream-command) (format navi2ch-open-network-stream-command host service)) ((functionp navi2ch-open-network-stream-command) (funcall navi2ch-open-network-stream-command host service))))) (apply #'start-process name buffer (if (stringp command) (list shell-file-name shell-command-switch command) command)))) ;; (let ((sum 0)) ;; (dotimes (i 400 sum) ;; (setq sum (+ sum (1- (floor (expt 1.00925 i))))))) ;; => 3602 (defvar navi2ch-net-connect-wait-power 1.00925) (defvar navi2ch-net-connect-time-list '()) (defvar navi2ch-net-fall-back-host "bg20.2ch.net") (defun navi2ch-net-connect-check (connection-data) (let ((host2ch (cdr (assq 'host2ch connection-data))) (file (cdr (assq 'file connection-data)))) (when (string-match "2ch\\.net\\|bbspink\\.com\\|machi\\.to" host2ch) (let* ((host (intern host2ch)) (now (navi2ch-float-time)) (limit (- now 3600.0)) (list (delq nil (mapcar (lambda (x) (if (> (cdr x) limit) x)) navi2ch-net-connect-time-list))) (len (length (delq nil (mapcar (lambda (x) (if (eq host (car x)) x)) list)))) (wait (floor (- (+ (expt navi2ch-net-connect-wait-power len) (or (cdr (assq host list)) now)) 1 now)))) (if (> wait 0) (if (and (string-match "2ch\\.net" host2ch) (string-match "/\\([^/]+\\)/dat/\\([0-9]+\\).dat" file)) (progn (message "falling back to %s" navi2ch-net-fall-back-host) (setq navi2ch-net-connect-time-list list) (if (string= host2ch (cdr (assq 'host connection-data))) (progn (navi2ch-put-alist 'host navi2ch-net-fall-back-host connection-data) (navi2ch-put-alist 'port 80 connection-data) (navi2ch-put-alist 'file (format "/test/r.so/%s/%s/%s/" host2ch (match-string 1 file) (match-string 2 file)) connection-data) (navi2ch-put-alist 'host2ch navi2ch-net-fall-back-host connection-data)) (navi2ch-put-alist 'file (format "http://%s/test/r.so/%s/%s/%s/" navi2ch-net-fall-back-host host2ch (match-string 1 file) (match-string 2 file)) connection-data) (navi2ch-put-alist 'host2ch navi2ch-net-fall-back-host connection-data))) (message "waiting for %dsec..." wait) (sleep-for wait) (message "waiting for %dsec...done" wait)) (setq navi2ch-net-connect-time-list (cons (cons host (navi2ch-float-time)) list))))) connection-data)) (defvar navi2ch-net-down-host-alist nil) (defvar navi2ch-net-retry-down-host 300 "$B0JA0Mn$A$F$$$?%[%9%H$K:F@\B3$9$k$^$G$NIC?t!#(B nil $B$J$i>o$K:F@\B3$9$k!#(B") (defun navi2ch-net-add-down-host (host) (setq host (intern (downcase (format "%s" host)))) (setq navi2ch-net-down-host-alist (navi2ch-put-alist host (navi2ch-float-time) navi2ch-net-down-host-alist))) (defun navi2ch-net-down-p (host) (setq host (intern (downcase (format "%s" host)))) (let ((elt (assq host navi2ch-net-down-host-alist))) (and elt (numberp navi2ch-net-retry-down-host) (> navi2ch-net-retry-down-host 0) (< (navi2ch-float-time) (+ (cdr elt) (float navi2ch-net-retry-down-host)))))) (defun navi2ch-net-send-request (url method &optional other-header content) (setq navi2ch-net-last-url url) (unless navi2ch-net-enable-http11 (navi2ch-net-cleanup-process)) (let ((buf (get-buffer-create (concat " *" navi2ch-net-connection-name))) (process-connection-type nil) (inherit-process-coding-system navi2ch-net-inherit-process-coding-system) user pass host file port host2ch credentials auth) (let ((list (navi2ch-net-split-url url navi2ch-net-http-proxy))) (setq list (navi2ch-net-connect-check list)) (setq user (cdr (assq 'user list)) pass (cdr (assq 'pass list)) host (cdr (assq 'host list)) file (cdr (assq 'file list)) port (cdr (assq 'port list)) host2ch (cdr (assq 'host2ch list)))) (when navi2ch-net-http-proxy (setq credentials (navi2ch-net-http-basic-credentials navi2ch-net-http-proxy-userid navi2ch-net-http-proxy-password))) (when (and user pass) (setq auth (navi2ch-net-http-basic-credentials user pass))) (let ((proc navi2ch-net-process)) (condition-case nil (if (and navi2ch-net-enable-http11 (equal host navi2ch-net-last-host) (equal port navi2ch-net-last-port) (processp proc) (memq (process-status proc) '(open run))) (progn (message "Reusing connection...") (navi2ch-net-get-content proc)) ; $BA02s$N%4%_$rFI$_Ht$P$7$F$*$/(B (if (processp proc) (delete-process proc)) (setq proc nil)) (error (setq proc nil))) (when (or (not proc) (not (processp proc)) (not (memq (process-status proc) '(open run)))) (message "Now connecting...") (setq proc nil) (unless (navi2ch-net-down-p host) (condition-case nil (setq proc (funcall navi2ch-open-network-stream-function navi2ch-net-connection-name buf host port)) (error (navi2ch-net-add-down-host host))))) (when proc (with-current-buffer buf (navi2ch-set-buffer-multibyte nil) (erase-buffer)) (setq navi2ch-net-last-host host) (setq navi2ch-net-last-port port) (message "%ssending request..." (current-message)) (set-process-coding-system proc 'binary 'binary) (set-process-sentinel proc 'ignore) ; exited abnormary $B$r=P$5$J$/$9$k(B (process-send-string proc (format (concat "%s %s %s\r\n" "MIME-Version: 1.0\r\n" "Host: %s\r\n" "%s" ;connection "%s" ;other-header "%s" ;content "\r\n") method file (if navi2ch-net-enable-http11 "HTTP/1.1" "HTTP/1.0") host2ch (if navi2ch-net-enable-http11 "" "Connection: close\r\n") (or (navi2ch-net-make-request-header (append (list (cons "Proxy-Authorization" credentials) (cons "User-Agent" navi2ch-net-user-agent) (cons "Authorization" auth)) other-header)) "") (if content (format "Content-length: %d\r\n\r\n%s" (length content) content) ""))) (message "%sdone" (current-message))) (navi2ch-net-cleanup-vars) (setq navi2ch-net-process proc)))) (defun navi2ch-net-split-url (url &optional proxy) (let (host2ch authinfo user pass) (string-match "https?://\\([^@/]+@\\)?\\([^/]+\\)" url) (when (setq authinfo (match-string 1 url)) (save-match-data (string-match "\\(?:\\([^:]+\\):\\)?\\(.*\\)@" authinfo) (if (match-beginning 1) (setq user (match-string 1 authinfo) pass (match-string 2 authinfo)) (setq user (match-string 2 authinfo))))) (setq host2ch (match-string 2 url)) (if proxy (progn (string-match "^\\(https?://\\)?\\(.*\\):\\([0-9]+\\)" proxy) (list (cons 'user user) (cons 'pass pass) (cons 'host (match-string 2 proxy)) (cons 'file url) (cons 'port (string-to-number (match-string 3 proxy))) (cons 'host2ch host2ch))) (string-match "https?://\\(?:[^@/]+@\\)?\\([^/:]+\\)\\(?::\\([0-9]+\\)\\)?\\(.*\\)" url) (list (cons 'user user) (cons 'pass pass) (cons 'host (match-string 1 url)) (cons 'port (string-to-number (or (match-string 2 url) "80"))) (cons 'file (match-string 3 url)) (cons 'host2ch host2ch))))) (defun navi2ch-net-http-basic-credentials (user pass) "USER $B$H(B PASS $B$+$i(B Basic $BG'>Z$N>ZL@=q(B (?) $BItJ,$rJV$9!#(B" (when (and user pass) (concat "Basic " (base64-encode-string (concat user ":" pass))))) (defun navi2ch-net-make-request-header (header-alist) "'((NAME . VALUE)...) $B$J(B HEADER-ALIST $B$+$i%j%/%(%9%H%X%C%@$r:n$k!#(B" (let (header) (dolist (pair header-alist) (when (and pair (cdr pair)) (setq header (concat header (car pair) ": " (cdr pair) "\r\n")))) header)) (defun navi2ch-net-get-status (proc) "PROC $B$N@\B3$N%9%F!<%?%9It$rJV$9!#(B" (navi2ch-net-ignore-errors (or navi2ch-net-status (with-current-buffer (process-buffer proc) (while (and (memq (process-status proc) '(open run)) (goto-char (point-min)) (not (looking-at "HTTP/1\\.[01] \\([0-9]+\\)"))) (accept-process-output proc)) (goto-char (point-min)) (if (looking-at "HTTP/1\\.[01] \\([0-9]+\\)") (setq navi2ch-net-status (match-string 1))))))) (defun navi2ch-net-get-protocol (proc) (when (navi2ch-net-get-status proc) (with-current-buffer (process-buffer proc) (goto-char (point-min)) (if (looking-at "\\(HTTP/1\\.[01]\\) [0-9]+") (match-string 1))))) (defun navi2ch-net-get-header (proc) "PROC $B$N@\B3$N%X%C%@It$rJV$9!#(B" (when (navi2ch-net-get-status proc) (navi2ch-net-ignore-errors (or navi2ch-net-header (with-current-buffer (process-buffer proc) (while (and (memq (process-status proc) '(open run)) (goto-char (point-min)) (not (re-search-forward "\r\n\r?\n" nil t))) (accept-process-output proc)) (goto-char (point-min)) (re-search-forward "\r\n\r?\n") (let ((end (match-end 0)) list) (goto-char (point-min)) (while (re-search-forward "^\\([^\r\n:]+\\): \\(.+\\)\r\n" end t) (setq list (cons (cons (intern (downcase (match-string 1))) (match-string 2)) list))) (let ((date (assq 'date list))) (when (and date (stringp (cdr date))) (setq navi2ch-net-last-date (cdr date)))) (setq navi2ch-net-header (nreverse list)))))))) (defun navi2ch-net-get-content-subr-with-temp-file (gzip-p start end) (if gzip-p (let* ((tempfn (make-temp-name (navi2ch-temp-directory))) (tempfngz (concat tempfn ".gz"))) (let ((coding-system-for-write 'binary) ;; auto-compress-mode$B$r(Bdisable$B$K$9$k(B (inhibit-file-name-operation 'write-region) (inhibit-file-name-handlers (cons 'jka-compr-handler inhibit-file-name-handlers))) (navi2ch-write-region start end tempfngz)) (let ((status (let ((default-directory (navi2ch-default-directory))) (call-process shell-file-name nil nil nil shell-command-switch (concat "gzip -d " tempfngz))))) (unless (and (numberp status) (zerop status)) (error "Failed to execute gzip"))) (delete-region start end) (goto-char start) (goto-char (+ start (nth 1 (insert-file-contents-literally tempfn)))) (delete-file tempfn)))) (defun navi2ch-net-get-content-subr-region (gzip-p start end) (if gzip-p (let (status) (setq status (let ((default-directory (navi2ch-default-directory))) (apply 'call-process-region start end navi2ch-net-gunzip-program t t nil navi2ch-net-gunzip-args))) (unless (and (numberp status) (zerop status)) (error "Failed to execute gzip"))))) (eval-and-compile (defalias 'navi2ch-net-get-content-subr (navi2ch-ifemacsce 'navi2ch-net-get-content-subr-with-temp-file 'navi2ch-net-get-content-subr-region))) (defun navi2ch-net-get-chunk (proc) "$B%+%l%s%H%P%C%U%!$N(B PROC $B$N(B point $B0J9_$r(B chunk $B$H$_$J$7$F(B chunk $B$rF@$k!#(B chunk $B$N%5%$%:$rJV$9!#(Bpoint $B$O(B chunk $B$ND>8e$K0\F0!#(B" (catch 'ret (let ((p (point)) size end) (while (and (not (looking-at "\\([0-9a-fA-F]+\\)[^\r\n]*\r\n")) (memq (process-status proc) '(open run))) (accept-process-output proc) (goto-char p)) (when (not (match-string 1)) (message "No chunk-size line") (throw 'ret 0)) (goto-char (match-end 0)) (setq size (string-to-number (match-string 1) 16) end (+ p size 2)) ; chunk-data CRLF (delete-region p (point)) ; chunk size $B9T$r>C$9(B (if (= size 0) (throw 'ret 0)) (while (and (memq (process-status proc) '(open run)) (goto-char end) (not (= (point) end))) (accept-process-output proc)) (goto-char end) (when (not (= (point) end)) (message "Unable goto chunk end (size: %d, end: %d, point: %d)" size end (point)) (throw 'ret 0)) (when (not (string= (buffer-substring (- (point) 2) (point)) "\r\n")) (message "Invalid chunk body") (throw 'ret 0)) ; chunk-data $B$NKvHx$,(B CRLF $B$8$c$J$$(B (delete-region (- (point) 2) (point)) size))) (defun navi2ch-net-get-content (proc) "PROC $B$N@\B3$NK\J8$rJV$9!#(B" (when (and (navi2ch-net-get-status proc) (navi2ch-net-get-header proc)) (navi2ch-net-ignore-errors (or navi2ch-net-content (let* ((header (navi2ch-net-get-header proc)) (gzip (and navi2ch-net-accept-gzip (string-match "gzip" (or (cdr (assq 'content-encoding header)) "")))) p) (with-current-buffer (process-buffer proc) (goto-char (point-min)) (re-search-forward "\r\n\r?\n") ; header $B$N8e$J$N$G (navi2ch-net-get-chunk proc) 0) nil)) ((assq 'content-length header) (let ((size (string-to-number (cdr (assq 'content-length header))))) (while (and (memq (process-status proc) '(open run)) (goto-char (+ p size)) (not (= (point) (+ p size)))) (accept-process-output proc)) (goto-char (+ p size)))) ((or (string= (navi2ch-net-get-protocol proc) "HTTP/1.0") (not navi2ch-net-enable-http11) (and (stringp (cdr (assq 'connection header))) (string= (cdr (assq 'connection header)) "close"))) (while (memq (process-status proc) '(open run)) (accept-process-output proc)) (goto-char (point-max)))) (when (and (stringp (cdr (assq 'connection header))) (string= (cdr (assq 'connection header)) "close")) (delete-process proc)) (navi2ch-net-get-content-subr gzip p (point)) (setq navi2ch-net-content (buffer-substring-no-properties p (point))))))))) (defun navi2ch-net-download-file (url &optional time accept-status other-header) "URL $B$+$i%@%&%s%m!<%I$r3+;O$9$k!#(B TIME $B$,(B `non-nil' $B$J$i$P(B TIME $B$h$j?7$7$$;~$@$1%@%&%s%m!<%I$9$k!#(B $B%j%9%H(B ACCEPT-STATUS $B$,(B `non-nil' $B$J$i$P%9%F!<%?%9$,(B ACCEPT-STATUS $B$K4^$^$l(B $B$F$$$k;~$@$1%@%&%s%m!<%I$9$k!#(B OTHER-HEADER $B$,(B `non-nil' $B$J$i$P%j%/%(%9%H$K$3$N%X%C%@$rDI2C$9$k!#(B $B%@%&%s%m!<%I$G$-$l$P$=$N@\B3$rJV$9!#(B" (catch 'ret (navi2ch-net-ignore-errors (let ((time (if (or (null time) (stringp time)) time (navi2ch-http-date-encode time))) proc status) (while (not status) (setq proc (navi2ch-net-send-request url "GET" (append (list (if navi2ch-net-force-update (cons "Pragma" "no-cache") (and time (cons "If-Modified-Since" time))) (and navi2ch-net-accept-gzip ;; regexp $B$OJQ?t$K$7$?J}$,$$$$$N$+$J!#$$$$JQ?tL>$,;W$$$D$+$J$$!#(B (not (string-match "\\.gz$" url)) (not (assoc "Range" other-header)) '("Accept-Encoding" . "gzip"))) other-header))) (unless proc (throw 'ret nil)) (message "Checking file...") (setq status (navi2ch-net-get-status proc)) (when (and (string= status "416") (assoc "Range" other-header)) (let ((elt (assoc "Range" other-header))) (setq other-header (delq elt other-header) status nil))) (unless status (message "Retrying...") (sit-for 3))) ; $B%j%H%i%$$9$kA0$K$A$g$C$HBT$D(B (cond ((not (stringp status)) (message "%serror" (current-message)) (setq proc nil)) ((string= status "404") (message "%snot found" (current-message)) (setq proc nil)) ((string= status "304") (message "%snot updated" (current-message))) ((string= status "302") (message "%smoved" (current-message))) ((string-match "\\`2[0-9][0-9]\\'" status) (message "%supdated" (current-message))) (t (message "%serror" (current-message)) (setq proc nil))) (if (or (not accept-status) (member status accept-status)) proc))))) (defun navi2ch-net-download-file-range (url range &optional time other-header) "Range $B%X%C%@$r;H$C$F%U%!%$%k$r%@%&%s%m!<%I$9$k!#(B" (navi2ch-net-download-file url time '("206" "200" "304") ;; 200 $B$b$"$C$F$b$$$$$N$+$J!)(B (append (list (cons "Range" (concat "bytes=" range))) other-header))) (defsubst navi2ch-net-add-state (state header) "HEADER $B$K(B STATE $B$rDI2C$9$k!#(B" (navi2ch-put-alist (gethash state navi2ch-net-state-header-table) "yes" header)) (defun navi2ch-net-is-tanpan-thread-p (cont) (and cont (string-match "\\`[^\n<]+<><>[0-9]+/[0-9]+/[0-9]+ [0-9]+:[0-9]+:[0-9]+ ID:TanpanM<>" cont))) (defun navi2ch-net-update-file (url file &optional time func location diff other-header) "FILE $B$r99?7$9$k!#(B TIME $B$,(B non-nil $B$J$i$P(B TIME $B$h$j?7$7$$;~$@$199?7$9$k!#(B TIME $B$,(B 'file $B$J$i$P%U%!%$%k$N99?7F|;~$r(B TIME $B$H$9$k!#(B FUNC $B$,(B non-nil $B$J$i$P99?78e(B FUNC $B$r;H$C$F%U%!%$%k$rJQ49$9$k!#(B FUNC $B$O(B current-buffer $B$rA`:n$9$k4X?t$G$"$k;v!#(B LOCATION $B$,(B non-nil $B$J$i$P(B Location $B%X%C%@$,$"$C$?$i$=$3$K0\F0$9$k$h$&(B $B$K$9$k!#(B DIFF $B$,(B non-nil $B$J$i$P(B $B:9J,$H$7$F(B FILE $B$r>e=q$-$;$:$KDI2C$9$k!#(B OTHER-HEADER $B$O(B `navi2ch-net-download-file' $B$KEO$5$l$k!#(B $B99?7$G$-$l$P(B header $B$rJV$9(B" (when (eq time 'file) (setq time (and (file-exists-p file) (navi2ch-file-mtime file)))) (let ((dir (file-name-directory file))) (unless (file-exists-p dir) (make-directory dir t))) (let ((coding-system-for-write 'binary) (coding-system-for-read 'binary) (redo t) proc status header cont) (while redo (setq redo nil proc (navi2ch-net-download-file url time (list "200" "304" (and location "302")) other-header) status (and proc (navi2ch-net-get-status proc)) header (and proc (navi2ch-net-get-header proc))) (cond ((or (not proc) (not status) (not header)) ;; $BG0$N$?$a(B (setq header (navi2ch-net-add-state 'error header))) ((string= status "200") (message (if diff "%s: Getting file diff..." "%s: Getting new file...") (current-message)) (setq cont (navi2ch-net-get-content proc)) (when (and cont func) (message "%stranslating..." (current-message)) (setq cont (with-temp-buffer (navi2ch-set-buffer-multibyte nil) (insert cont) (goto-char (point-min)) (funcall func) (buffer-string)))) (when (navi2ch-net-is-tanpan-thread-p cont) (setq cont nil) (setq header (navi2ch-net-add-state 'error header))) (if (and cont (not (string= cont ""))) (with-temp-file file (navi2ch-set-buffer-multibyte nil) (when diff (insert-file-contents file) (goto-char (point-max))) (insert cont) (message "%sdone" (current-message))) (setq header (navi2ch-net-add-state 'not-updated header)) (message "%snot updated" (current-message)))) ((and location (string= status "302") (assq 'location header)) (setq url (cdr (assq 'location header)) redo t) (message "%s: Redirecting..." (current-message))) ((string= status "304") (setq header (navi2ch-net-add-state 'not-updated header))) (t ;; $B$3$3$KMh$k$O$:$J$$$1$I0l1~(B (setq header (navi2ch-net-add-state 'error header))))) header)) (defun navi2ch-net-get-length-from-header (header) "header $B$+$i(B contents $BA4BN$ND9$5$rF@$k!#(B header $B$KD9$5$,4^$^$l$F$$$J$$>l9g$O(B nil $B$rJV$9!#(B" (let ((range (cdr (assq 'content-range header))) (length (cdr (assq 'content-length header)))) (cond ((and range (string-match "/\\(.+\\)" range)) (string-to-number (match-string 1 range))) (length (string-to-number length))))) (defun navi2ch-net-check-aborn (size header) "$B$"$\!<$s$5$l$F$J$1$l$P(B t $B$rJV$9!#(B" (let ((len (navi2ch-net-get-length-from-header header))) (if len (>= len (or size 0)) t))) ; $B%[%s%H$K$3$l$G$$$$$+$J(B? (defconst navi2ch-net-update-file-diff-size 16 "$B:9J, size 0) (with-temp-buffer (navi2ch-set-buffer-multibyte nil) (insert-file-contents file nil size) (buffer-string)))) (last-all (with-temp-buffer (navi2ch-set-buffer-multibyte nil) (insert-file-contents file) (buffer-string))) proc header status aborn-p) (setq proc (navi2ch-net-download-file-range url (format "%d-" size) time)) (setq header (and proc (navi2ch-net-get-header proc))) (setq status (and proc (navi2ch-net-get-status proc))) (cond ((or (not proc) (not header) (not status)) (setq header (navi2ch-net-add-state 'error header))) ((string= status "304") (setq header (navi2ch-net-add-state 'not-updated header))) ((string= status "206") (if (not (navi2ch-net-check-aborn size header)) (setq aborn-p t) (message "%s: Getting file diff..." (current-message)) (let ((cont (navi2ch-net-get-content proc))) (cond ((and (> size 0) last (or (> (length last) (length cont)) (not (string= (substring cont 0 (length last)) last)))) (setq aborn-p t)) ; $BA02s$H0lCW$7$J$$>l9g$O$"$\!<$s(B ((string= cont last) (message "%snot updated" (current-message)) (setq header (navi2ch-net-add-state 'not-updated header))) (t (with-temp-file file (navi2ch-set-buffer-multibyte nil) (insert-file-contents file nil nil size) (goto-char (point-max)) (insert cont)) (message "%sdone" (current-message))))))) ((string= status "200") (if (not (navi2ch-net-check-aborn size header)) (setq aborn-p t) (message "%s: Getting whole file..." (current-message)) (let ((cont (navi2ch-net-get-content proc))) (with-temp-file file (navi2ch-set-buffer-multibyte nil) (insert cont)) (if (string= cont last-all) (progn (message "%sdone...not updated" (current-message)) (setq header (navi2ch-net-add-state 'not-updated header))) (message "%sdone" (current-message)))))) (t (setq header (navi2ch-net-add-state 'error header)))) (if (not aborn-p) header (message "$B$"$\!<$s(B!!!") (navi2ch-net-save-aborn-file file) (navi2ch-net-add-state 'aborn (navi2ch-net-update-file url file))))) (defun navi2ch-net-save-aborn-file (file) (when (and navi2ch-net-save-old-file-when-aborn (or (not (eq navi2ch-net-save-old-file-when-aborn 'ask)) (y-or-n-p "$B$"$\!<$s(B!!! Backup old file? "))) (copy-file file (read-file-name "file name: ")))) ;; ;; 2.3. Unreserved Characters ;; unreserved = alphanum | mark ;; mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" ;; from Emacs/W3 (defconst navi2ch-net-url-unreserved-chars '( ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\)) "A list of characters that are _NOT_ reserve in the URL spec. This is taken from RFC 2396.") ;; from Emacs/W3 (defun navi2ch-net-url-hexify-string (str &optional coding-system) "Escape characters in a string." (mapconcat (lambda (char) (if (not (memq char navi2ch-net-url-unreserved-chars)) (format "%%%02X" char) (char-to-string char))) (encode-coding-string str (or coding-system navi2ch-coding-system)) "")) (defun navi2ch-net-get-param-string (param-alist &optional coding-system) (mapconcat (lambda (x) (concat (navi2ch-net-url-hexify-string (car x) coding-system) "=" (navi2ch-net-url-hexify-string (cdr x) coding-system))) param-alist "&")) (defun navi2ch-net-send-message-success-p (proc coding-system) (when proc (let ((str (decode-coding-string (navi2ch-net-get-content proc) coding-system))) (cond ((or (string-match "$B=q$-$3$_$^$7$?!#(B" str) (string-match "$B=q$-$3$_$,=*$o$j$^$7$?!#(B" str)) t) ((or (string-match "$B%/%C%-!<$,$J$$$+4|8B@Z$l$G$9!*(B" str) (string-match "$B=q$-$3$_!u%/%C%-!<3NG'(B" str)) 'retry) (t nil))))) (defun navi2ch-net-send-message-error-string (proc coding-system) (when proc (let ((str (decode-coding-string (navi2ch-net-get-content proc) coding-system))) (cond ((string-match "$B#E#R#R#O#R!'(B\\([^<]+\\)" str) (match-string 1 str)) ;; Samba24 http://age.s22.xrea.com/talk2ch/new.txt ((string-match "$B#E#R#R#O#R(B - \\([^<\n]+\\)" str) (match-string 1 str)) ((string-match "\\($B%m%0%$%s%(%i!<(B[^<]*\\)
" str) (match-string 1 str)) ((string-match "\\([^<]+\\)" str) (match-string 1 str)) ((string-match "\\([^<>\n]+\\)
\\([^<>]+\\)
" str) (concat (match-string 1 str) (match-string 2 str))))))) ;; Cookie $B$O$3$s$J46$8$N(B alist $B$KF~$l$F$*$/!#(B ;; ((domain1 (/path1 ("name1" "value1" ...) ;; ("name2" "value2" ...) ...) ;; (/path2 ...) ...) ;; (domain2 ...) ...) (defvar navi2ch-net-cookies nil) (defun navi2ch-net-cookie-domains (host) (let* ((host (downcase host)) (domain-list (list (intern host) (intern (concat "." host))))) (while (string-match "\\.\\(.*\\..*\\)\\'" host) (push (intern (match-string 0 host)) domain-list) (let ((h (match-string 1 host))) (push (intern h) domain-list) (setq host h))) domain-list)) (defun navi2ch-net-cookie-paths (file) (let (path-list) (while (string-match "\\`\\(.*\\)/" file) (push (intern (match-string 0 file)) path-list) (let ((f (match-string 1 file))) (unless (string= f "") (push (intern f) path-list)) (setq file f))) path-list)) (defun navi2ch-net-store-cookie (cookie domain path) (let ((domain (if (stringp domain) (intern (downcase domain)) domain)) (path (if (stringp path) (intern path) path))) (let ((path-alist (assq domain navi2ch-net-cookies))) (unless path-alist (setq path-alist (list domain)) (push path-alist navi2ch-net-cookies)) (let ((cookie-list (assq path (cdr path-alist)))) (if cookie-list (let ((elt (assoc (car cookie) (cdr cookie-list)))) (if elt (setcdr elt (cdr cookie)) (setcdr cookie-list (cons cookie (cdr cookie-list))))) (setq cookie-list (list path cookie)) (setcdr path-alist (cons cookie-list (cdr path-alist)))))))) (defun navi2ch-net-match-cookies (url) (let* ((alist (navi2ch-net-split-url url)) (domain-list (navi2ch-net-cookie-domains (cdr (assq 'host alist)))) (path-list (navi2ch-net-cookie-paths (cdr (assq 'file alist))))) (flet ((mcn (function list) (apply #'nconc (mapcar function list)))) (mcn (lambda (domain) (mcn (lambda (path) (navi2ch-net-expire-cookies (cdr (assq path (cdr (assq domain navi2ch-net-cookies)))))) path-list)) domain-list)))) (defvar navi2ch-net-cookie-file "cookie.info") (defun navi2ch-net-save-cookies () (let ((now (current-time))) (flet ((strip (f l) (let ((tmp (delq nil (mapcar f (cdr l))))) (and tmp (cons (car l) tmp))))) (navi2ch-save-info navi2ch-net-cookie-file (delq nil (mapcar (lambda (path-alist) (strip (lambda (cookie-list) (strip (lambda (cookie) (and (cddr cookie) (navi2ch-compare-times (cddr cookie) now) cookie)) cookie-list)) path-alist)) navi2ch-net-cookies)))))) (defun navi2ch-net-load-cookies () (setq navi2ch-net-cookies (navi2ch-load-info navi2ch-net-cookie-file))) (add-hook 'navi2ch-save-status-hook 'navi2ch-net-save-cookies) (add-hook 'navi2ch-load-status-hook 'navi2ch-net-load-cookies) (defun navi2ch-net-update-cookies (url proc coding-system) (let* ((case-fold-search t) (alist (navi2ch-net-split-url url)) (host (cdr (assq 'host alist))) (file (cdr (assq 'file alist))) (domain-list (navi2ch-net-cookie-domains host)) (path-list (navi2ch-net-cookie-paths file))) (dolist (pair (navi2ch-net-get-header proc) navi2ch-net-cookies) (when (eq (car pair) 'set-cookie) (let* ((str (cdr pair)) (date (when (string-match "expires=\\([^;]+\\)" str) (navi2ch-http-date-decode (match-string 1 str)))) (domain (intern (downcase (if (string-match "domain=\\([^;]+\\)" str) (match-string 1 str) host)))) (path (intern (if (string-match "path=\\([^;]+\\)" str) (match-string 1 str) (if (and (string-match "\\(.*\\)/" file) (> (length (match-string 1 file)) 0)) (match-string 1 file) "/"))))) (when (and (memq domain domain-list) (memq path path-list) (string-match "^\\([^=]+\\)=\\([^;]*\\)" str)) (let ((name (match-string 1 str)) (value (match-string 2 str))) (setq value (decode-coding-string (navi2ch-replace-string "%[0-9A-Za-z][0-9A-Za-z]" (lambda (s) (string (string-to-number (substring s 1) 16))) value t t t) coding-system)) (navi2ch-net-store-cookie (cons name (cons value date)) domain path)))))))) (defun navi2ch-net-expire-cookies (cookie-list) "COOKIE-LIST $B$+$i4|8B@Z$l$N%/%C%-!<$r=|$$$?%j%9%H$rJV$9!#(B" (let ((now (current-time))) (delq nil (mapcar (lambda (cookie) (when (or (null (cddr cookie)) (navi2ch-compare-times (cddr cookie) now)) cookie)) cookie-list)))) (defun navi2ch-net-cookie-string (cookies coding-system) "HTTP $B$N(B Cookie $B%X%C%@$H$7$FEO$9J8;zNs$rJV$9!#(B" (mapconcat (lambda (elt) (concat (navi2ch-net-url-hexify-string (car elt) coding-system) "=" (navi2ch-net-url-hexify-string (cadr elt) coding-system))) cookies "; ")) (defun navi2ch-net-download-logo (board) (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary) (setting-file (navi2ch-board-get-file-name board navi2ch-net-setting-file-name)) (setting-url (navi2ch-board-get-url board navi2ch-net-setting-file-name)) content src) (when (and (navi2ch-net-update-file setting-url setting-file 'file) (file-exists-p setting-file)) (setq content (with-temp-buffer (insert-file-contents setting-file) (buffer-string)))) (when (and content (string-match "BBS_\\(TITLE_PICTURE\\|FIGUREHEAD\\)=\\(.+\\)" content)) (setq src (match-string 2 content)) (let (url file) (setq url (if (string-match "http://" src) src (navi2ch-board-get-url board src))) (string-match "/\\([^/]+\\)$" url) (setq file (match-string 1 url)) (when file (setq file (navi2ch-board-get-file-name board file)) (when (navi2ch-net-update-file url file 'file nil t) file)))))) (defsubst navi2ch-net-get-state (state header) "HEADER $B$+$i(B STATE $B$r ;; Keywords: network 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B#2$A$c$s$M$k%S%e!<%"(B($BDL>N!|(B)$B$r;H$C$F=q$-9~$_$7$?$j2a5n%m%0$r&IJL>$O9uF&$H$$$&$i$7$$$G$9(B($B%3%s%S%K7h:QNN<}=q$h$j(B)$B!#(B ;; $B;EMM(B http://kage.monazilla.org/system_DOLIB100.html ;; ;; $B%$%s%9%H!<%k!'(B ;; $B!|(BSESSION-ID$BuBV$K$"$l$P!"2a5n%m%0$OMW8!F$!#(B "*$B!|$r;H$&$+$I$&$+!#(B") (defvar navi2ch-oyster-id nil "*$B!|$N(BID($B$*$=$i$/%a!<%k%"%I%l%9(B)") (defvar navi2ch-oyster-password nil "*$B!|$N%Q%9%o!<%I!#(B") (defvar navi2ch-oyster-server "2chv.tora3.net" "*$B!|(BID $B$B%/%C%-!<$,$J$$$+4|8B@Z$l$G$9!*(B
" str) (string-match "$B=q$-$3$_!u%/%C%-!<3NG'(B" str)) 'retry) ((string-match "$B#E#R#R#O#R!'%"%/%;%95,@)Cf$G$9!*!*(B" str) (if (not (y-or-n-p "$B%"%/%;%95,@)Cf$G$9$,!|%m%0%$%s$7$^$9$+!)(B")) nil (message "$B!|(Blogin..") (navi2ch-oyster-login) (if navi2ch-oyster-session-id 'retry nil))) (t (message "$B!|(Berror::%s" str) nil))))) (defun navi2ch-oyster-get-offlaw-url (board article session-id file) "BOARD, ARTICLE, SESSION-ID, FILE $B$+$i(B offlaw url $B$KJQ49!#(B" (let ((uri (navi2ch-board-get-uri board)) (artid (cdr (assq 'artid article))) (size 0) encoded-s) (setq encoded-s (navi2ch-net-url-hexify-string session-id)) (when (file-exists-p file) (setq size (max 0 (navi2ch-file-size file)))) (string-match "\\(.*\\)\\/\\([^/]*\\)\\/" uri) (format "%s/test/offlaw.cgi/%s/%s/?raw=.%s&sid=%s" (match-string 1 uri) (match-string 2 uri) artid size encoded-s))) (defun navi2ch-oyster-update-file-with-offlaw (url file &optional time diff) "FILE $B$r(B URL $B$+$i(B offlaw.cgi $B$r;H$C$F99?7$9$k!#(B TIME $B$,(B non-nil $B$J$i$P(B TIME $B$h$j?7$7$$;~$@$199?7$9$k!#(B DIFF $B$,(B non-nil $B$J$i$P:9J,$r= (setq i (1- i)) 0) ; (sleep-for 1) ; $B2?$@$+$&$^$/F0$+$J$$$N$G(Bwait$BF~$l$?(B (accept-process-output proc 1) (goto-char (point-min)) ;; $B:G8e$^$G8+$D$+$i$J$$$^$^$@$H%(%i!<(B (when (search-forward "HTTP/1\." nil (> i 0)) (throw 'loop (if (looking-at "[01] \\([0-9]+\\).+\n") (match-string 1))))))))) (defun navi2ch-oyster-get-session-id-from-proc (proc) "proc$B$+$i!|$N(BSESSIOIN-ID$B$r= (setq i (1- i)) 0) ; (sleep-for 1) ; $B2?$@$+$&$^$/F0$+$J$$$N$G(Bwait$BF~$l$?(B (accept-process-output proc 1) (goto-char (point-min)) ;; $B:G8e$^$G8+$D$+$i$J$$$^$^$@$H%(%i!<(B (when (search-forward "SESSION-ID=" nil (> i 0)) (throw 'loop (if (looking-at "\\(.*\\)\n") (match-string 1)))))))))) (defun navi2ch-oyster-login () "$B!|$N%5!<%P$K%m%0%$%s$7$F(B session-id $B$r ;; MIZUNUMA Yuto ;; Keywords: network 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B35MW(B ;; navi2ch $B$r(B p2 $B$N%U%m%s%H%(%s%I$K$7$^$9!#(B ;; $B$H$$$C$F$b:#$O$^$@(B bookmark $B$NF14|$@$1!#(B ;; $B$^$@$^$@pJs$r;XDj$5$l(B ;; $B$?%U%)%k%@$K(B rep2 $B7A<0$G(Bp export $B$7$^$9!#(B ;; ;; $B@_Dj(B ;; navi2ch-p2-mail-address $B$K%a!<%k%"%I%l%9(B ;; navi2ch-p2-password $B$K%Q%9%o!<%I$r@_Dj$7$F$*$/$HJXMx$G$7$g$&!#(B ;; ;; $B%(%/%9%]!<%H$r;H$&?M$O!"(B navi2ch-p2-export-bookmark $B$K%(%/%9%]!<%H$7(B ;; $B$?$$(B global-bookmark $B$N(B id $B$r@_Dj$7$F$*$/$H$$$$$G$7$g$&!#(B ;; ;; dat $B$N%(%/%9%]!<%H$K;H$o$l$k4X?t$,(B navi2ch-p2-dat-copy-function $B$K@_(B ;; $BDj$5$l$F$$$^$9!#(B $B%G%U%)%k%H$O(B add-name-to-file ($B%O!<%I%j%s%/(B)$B$K$J$C(B ;; $B$F$$$^$9!#(B $B%j%s%/$,;HMQIT2DG=$J$i$P(B copy-file $B!"%j%s%/$,;HMQ2DG=$@$,(B ;; $B%Q!<%F%#%7%g%s$,JL$G$"$k?M$O(B make-symbolic-link ($B%7%s%\%j%C%/%j%s%/(B)$B$K(B ;; $B$9$k$H$$$$$G$7$g$&!#(B ;; $B5!G=DI2C(B ;; 2ch$B8x<0(BP2(http://p2.2ch.net)$B$r7PM3$7$F=q$-9~$_$,=PMh$k$h$&$K$9$k5!G=DI2C$G$9!#(B ;; $BCHq$G=q$-9~$_5v2D$rF@$k$N$O%V%i%&%67PM3$G(B ;; $B%9%lFI$_9~$_$O(Bp2$B7PM3$7$F$^$;$s!#=q$-9~$_$N$_$G$9!#(B ;; $B4JC1$JFbIt;EMM$N@bL@$H$7$F$O(B ;; http://p2.2ch.net/p2 $B$K%m%0%$%s$7$F(Bcookie(PS$B!"(Bcsid)$B$OMW8!F$!#(B "*p2$B$r;H$C$F=q$-9~$_$9$k$+$I$&$+!#(B") (defvar navi2ch-p2-mail-address "" "*p2$B$N%a!<%k%"%I%l%9(B(ID)$B!#(B") (defvar navi2ch-p2-password "" "*p2$B$N%Q%9%o!<%I!#(B") (defvar navi2ch-p2-domain "p2.2ch.net") (defvar navi2ch-p2-login-url (concat "http://" navi2ch-p2-domain "/p2/") "*p2$B$N%m%0%$%s(BURL$B!#(B") (defconst navi2ch-p2-cookie-names '("PS" "cid")) (defconst navi2ch-p2-cookie-domain navi2ch-p2-domain) (defconst navi2ch-p2-cookie-path '/p2) (defvar navi2ch-p2-login-flag nil) (defvar navi2ch-p2-csrfid nil) (defvar navi2ch-p2-board nil) (defvar navi2ch-p2-board-regexp nil) (defvar navi2ch-p2-all-board nil) (defun navi2ch-p2-p (uri) "p2$B7PM3$G=q$-9~$`$J$i(Bnon-nil$B$rJV$9!#(B" (when (and navi2ch-p2-use-p2 (string-match "http://\\([^/]+\\)/\\([^/]+\\)" uri)) (let ((board (match-string 2 uri))) (or navi2ch-p2-all-board (member board navi2ch-p2-board) (and navi2ch-p2-board-regexp (if (string-match "^live.*" board) t)))))) (defun navi2ch-p2-board-p (board) ; (message "p2-board-p %s" board) (and navi2ch-p2-use-p2 (or navi2ch-p2-all-board (member board navi2ch-p2-board) (and navi2ch-p2-board-regexp (if (string-match "^live.*" board) t))))) (defun navi2ch-p2-login-p () (let ((cookies (navi2ch-net-match-cookies navi2ch-p2-login-url))) (setq navi2ch-p2-login-flag (null (memq nil (mapcar (lambda (name) (assoc name cookies)) navi2ch-p2-cookie-names)))))) (defun navi2ch-p2-send-message-success-p (proc) (when proc (let ((str (navi2ch-net-get-content proc))) (setq str (decode-coding-string str navi2ch-p2-coding-system)) (cond ((or (string-match "$B=q$-$3$_$^$7$?!#(B" str) (string-match "$B=q$-$3$_$,=*$o$j$^$7$?!#(B" str)) (message "P2$B$G=q$-9~$_$^$7$?(B") t) ;;$B$*$=$i$/(Bcsrfid$B$N4|8B@Z$J$I(B ((or (string-match "Cookie$BG'>Z;~$K(BIP$B$NF10l@-$r%A%'%C%/$7$J$$(B" str) (string-match "$B=q$-$3$_!u%/%C%-!<3NG'(B" str) (string-match "p2 error: $B%Z!<%8A+0\$NBEEv@-$r3NG'$G$-$^$;$s$G$7$?!#(B" str) ) ;;$B:FuBV$r\\(.*[^>]\\)$" nil t) (setq str (match-string 1)) (let (board host) (cond ((string-match "_BBS_\\(.*\\)_\\(.*\\)" str) (progn (setq board (match-string 1 str)) (setq host (match-string 2 str)) (unless (member board navi2ch-p2-board) (setq navi2ch-p2-board (cons board navi2ch-p2-board))) (message "deny board:%s host:%s" board host))) ((string-match "_SRV_\\(.*\\)_\\(.*\\)" str) (setq board (match-string 1 str)) (setq host (match-string 2 str)) (unless (member board navi2ch-p2-board-regexp) (setq navi2ch-p2-board-regexp (cons board navi2ch-p2-board-regexp))) (message "deny regexp board:%s host:%s" board host)) (t (setq navi2ch-p2-all-board t) (message "all deny:%s" str))) )))))) (defun navi2ch-p2-send-message (from mail message subject bbs key time board article &optional post) (unless navi2ch-p2-csrfid (navi2ch-p2-get-csrfid)) (when (navi2ch-message-samba24-check board) (let* ((url (concat navi2ch-p2-login-url "post.php?guid=ON")) (referer (concat navi2ch-p2-login-url "menu.php")) (param-alist (list (cons "submit" "$B=q$-9~$`(B") (cons "FROM" (or from "")) (cons "mail" (or mail "")) (cons "bbs" bbs) (cons "time" time) (cons "host" (navi2ch-board-get-host board)) (cons "popup" "1") (cons "MESSAGE" message) (cons "csrfid" navi2ch-p2-csrfid) (cons "tepo" "don") (cons "kuno" "ichi") )) (coding-system (navi2ch-board-get-coding-system board)) (cookies (navi2ch-net-match-cookies url))) (if (not subject) (push (cons "key" key) param-alist) (push (cons "newthread" "1") param-alist) (push (cons "subject" subject) param-alist)) (dolist (param post) (unless (assoc (car param) param-alist) (push param param-alist))) (setq navi2ch-2ch-send-message-last-board board) (let ((proc (navi2ch-net-send-request url "POST" (list (cons "Content-Type" "application/x-www-form-urlencoded") (cons "Cookie" (navi2ch-net-cookie-string cookies coding-system)) (cons "Referer" referer)) (navi2ch-net-get-param-string param-alist coding-system)))) (navi2ch-net-update-cookies url proc coding-system) (navi2ch-net-save-cookies) proc)))) (defun navi2ch-p2-get-csrfid () (message "navi2ch-p2-get-csrfid") (dotimes (i 2) (unless navi2ch-p2-login-flag (navi2ch-p2-login)) (let ((proc (navi2ch-net-send-request (concat navi2ch-p2-login-url "menu.php") "GET" (list (cons "Cookie" (navi2ch-net-cookie-string (navi2ch-net-match-cookies navi2ch-p2-login-url) navi2ch-p2-coding-system))) ))) (navi2ch-net-update-cookies navi2ch-p2-login-url proc navi2ch-p2-coding-system) (navi2ch-net-save-cookies) (with-temp-buffer (insert (decode-coding-string (navi2ch-net-get-content proc) navi2ch-p2-coding-system)) (goto-char (point-min)) (if (re-search-forward "$B%f!<%6%m%0%$%s(B" nil t) (if (and (zerop i) (y-or-n-p "$BG'>Z<:GT!#%m%0%$%s$7$J$*$7$F$_$^$9$+(B? ")) (setq navi2ch-p2-login-flag nil) (error "$BG'>Z$K<:GT$7$^$7$?!#(B")) (if (not (re-search-forward "csrfid=\\([a-f0-9]+\\)" nil t)) (error "csrfid$B$NZ<:GT!#%m%0%$%s$7$J$*$7$F$_$^$9$+(B? ")) (setq navi2ch-p2-login-flag nil) (error "$BG'>Z$K<:GT$7$^$7$?!#(B")) (return (funcall (lambda () ,@body)))))) (error "$B%U%!%$%kZ<:GT!#%m%0%$%s$7$J$*$7$F$_$^$9$+(B? ")) (setq navi2ch-p2-login-flag nil) (error "$BG'>Z$K<:GT$7$^$7$?!#(B")) (return proc)))))) (defvar navi2ch-p2-bookmark-url "http://p2.2ch.net/p2/subject.php?spmode=fav&norefresh=true") (defvar navi2ch-p2-bookmark-file-name "p2/bookmark.html") (defun navi2ch-p2-get-bookmark () (let ((file (navi2ch-expand-file-name navi2ch-p2-bookmark-file-name))) (navi2ch-p2-with-updated-file (navi2ch-p2-bookmark-url file) (let (result) (goto-char (point-min)) (while (re-search-forward "href=\"read.php\\?host=\\([^&]*\\)&bbs=\\([^&]*\\)&key=\\([0-9]*\\)\\(?:&rc=\\([0-9]+\\)\\)?[^\"]*\" class=\"thre_title\" onClick=\"[^\"]*\">\\([^<]*\\)
" nil t) (let ((host (match-string 1)) (bbs (match-string 2)) (key (match-string 3)) (rc (match-string 4)) (subject (match-string 5))) (setq result (cons (list (concat "http://" host "/" bbs "/" key) (list 'board (cons 'name (navi2ch-message-samba24-board-conversion 'id bbs 'name)) (cons 'uri (concat "http://" host "/" bbs "/")) (cons 'id bbs)) (list 'article (cons 'subject subject) (cons 'artid key))) result)))) result)))) (defun navi2ch-p2-add-bookmark (url name &optional delete) (when (or (not delete) (yes-or-no-p (format "%s$B$r:o=|$7$^$9$+(B? " name))) (string-match "http://\\([^/]*\\)/\\([^/]*\\)/\\([0-9]*\\)" url) (let ((host (match-string 1 url)) (bbs (match-string 2 url)) (key (match-string 3 url)) (add-or-del (if delete "$B:o=|(B" "$BDI2C(B"))) (message "%s$B$r(B%s$BCf(B..." name add-or-del) (let ((si:message (symbol-function 'message)) (si:current-message (symbol-function 'current-message))) (unwind-protect (progn (lexical-let ((name name) (add-or-del add-or-del)) (fset 'message (byte-compile `(lambda (fmt &rest args) (funcall ,si:message "%s$B$r(B%s$BCf(B...%s" name add-or-del (apply 'format fmt args))))) (fset 'current-message (byte-compile `(lambda () (substring (funcall ,si:current-message) (length (format "%s$B$r(B%s$BCf(B..." name add-or-del))))))) (navi2ch-p2-send-request (format (concat "http://p2.2ch.net/p2/info.php?host=%s&" "bbs=%s&key=%s&ttitle_en=%s&setfav=%d&") host bbs key (navi2ch-p2-encode-string name) (if delete 0 1)) "GET")) (fset 'message si:message) (fset 'current-message si:current-message))) (message "%s$B$r(B%s$BCf(B...done" name add-or-del)))) (defun navi2ch-p2-sync-global-bookmark-to-p2 (bookmark-id) (interactive (list (completing-read "Bookmark ID: " navi2ch-bookmark-list nil t navi2ch-bookmark-current-bookmark-id))) (let ((bookmark (cddr (assoc bookmark-id navi2ch-bookmark-list)))) (if bookmark (let ((p2-bookmark (navi2ch-p2-get-bookmark))) (dolist (url (mapcar #'car bookmark)) (when (and (string-match "^http://[^.]+\\.\\(?:2ch\\.net\\|machi\\.to\\|bbspink\\.com\\)/" url) (not (assoc url p2-bookmark))) (navi2ch-p2-add-bookmark url (cdr (assq 'subject (assq 'article (assoc url bookmark))))))) (dolist (url (mapcar #'car p2-bookmark)) (unless (assoc url bookmark) (navi2ch-p2-add-bookmark url (cdr (assq 'subject (assq 'article (assoc url p2-bookmark)))) t)))) (error "No such bookmark")))) (defun navi2ch-p2-sync-global-bookmark-from-p2 (bookmark-id) (interactive (list (navi2ch-bookmark-read-id "Bookmark ID: "))) (unless (assoc bookmark-id navi2ch-bookmark-list) (navi2ch-bookmark-create-bookmark bookmark-id)) (let ((p2-bookmark (navi2ch-p2-get-bookmark)) (bookmark (cddr (assoc bookmark-id navi2ch-bookmark-list))) item article name) (dolist (url (mapcar #'car p2-bookmark)) (unless (assoc url bookmark) (setq item (assoc url p2-bookmark) article (cdr (assq 'article item)) name (cdr (assq 'subject article))) (message "%s$B$rDI2CCf(B..." name) (navi2ch-bookmark-add-subr bookmark-id (cdr (assq 'board item)) article) (message "%s$B$rDI2CCf(B...done" name))) (dolist (url (mapcar #'car bookmark)) (when (and (not (assoc url p2-bookmark)) (yes-or-no-p (format "%s$B$r:o=|$7$^$9$+(B? " (cdr (assq 'subject article))))) (navi2ch-bookmark-delete-key bookmark-id url))))) (defvar navi2ch-p2-dat-copy-function 'add-name-to-file) (defvar navi2ch-p2-recent-file-name "p2_recent.idx") (defvar navi2ch-p2-res-hist-file-name "p2_res_hist.idx") (defvar navi2ch-p2-favlist-file-name "p2_favlist.idx") (defconst navi2ch-p2-data-dir-2ch "2channel") (defconst navi2ch-p2-data-dir-machibbs "machibbs.com") (defconst navi2ch-p2-aborn-name-file-name "p2_aborn_name.txt") (defconst navi2ch-p2-aborn-mail-file-name "p2_aborn_mail.txt") (defconst navi2ch-p2-aborn-message-file-name "p2_aborn_msg.txt") (defconst navi2ch-p2-aborn-id-file-name "p2_aborn_id.txt") (defconst navi2ch-p2-ng-name-file-name "p2_ng_name.txt") (defconst navi2ch-p2-ng-mail-file-name "p2_ng_mail.txt") (defconst navi2ch-p2-ng-message-file-name "p2_ng_msg.txt") (defconst navi2ch-p2-ng-id-file-name "p2_ng_id.txt") (defun navi2ch-p2-get-dat-dir (board dir) (let ((uri (cdr (assq 'uri board)))) (cond ((string-match "^http://[^.]+.\\(?:2ch\\.net\\|bbspink\\.com\\)/" uri) (expand-file-name (cdr (assq 'id board)) (expand-file-name navi2ch-p2-data-dir-2ch dir))) ((string-match "^http://[^.]+\\.\\(machi\\.to\\|machibbs\\.com\\)/" uri) (expand-file-name (cdr (assq 'id board)) (expand-file-name navi2ch-p2-data-dir-machibbs dir))) (t (let ((host (navi2ch-url-to-host uri))) (while (string-match "\\(?:\\.\\|:/\\)/" host) (setq host (replace-match "" nil nil host))) (expand-file-name host dir)))))) (defvar navi2ch-p2-export-bookmark nil) (defun navi2ch-p2-make-idx-data (board file) (let* ((artid (navi2ch-article-file-name-to-artid file)) (article (navi2ch-article-load-info board (list (cons 'artid artid)))) (subject (if (and (file-exists-p file) (file-readable-p file)) (cdr (assq 'subject (navi2ch-article-get-first-message-from-file file board))) "$BITL@(B")) (response (or (cdr (assq 'response article)) "0"))) (format "%s<>%s<>%d<>%s<>%s<>%d<>%d<>%s<>%s<>%d<>%s<>%s<>0\n" subject artid (if (file-exists-p file) (nth 7 (file-attributes file)) 0) response (or (cdr (assq 'time article)) "") (or (cdr (assq 'number article)) 0) (if (and navi2ch-p2-export-bookmark (assoc (navi2ch-bookmark-get-key board article) (cddr (assoc navi2ch-p2-export-bookmark navi2ch-bookmark-list)))) 1 0) (or (cdr (assq 'name article)) "") (or (cdr (assq 'mail article)) "") (1+ (string-to-number response)) (navi2ch-url-to-host (cdr (assq 'uri board))) (cdr (assq 'id board))))) (defun navi2ch-p2-export (dir) (interactive "G$B=PNO@h(B: ") (if (file-exists-p dir) (unless (file-directory-p dir) (error "%s is not a directory." dir)) (make-directory dir)) (let* ((navi2ch-p2-export-bookmark (or navi2ch-p2-export-bookmark (completing-read "Bookmark ID: " navi2ch-bookmark-list nil t navi2ch-bookmark-current-bookmark-id)))) (message "$B$*5$$K$$$j$r%(%/%9%]!<%HCf(B...") (with-temp-file (expand-file-name navi2ch-p2-favlist-file-name dir) (apply 'insert (mapcar (lambda (item) (let ((board (cdr (assq 'board item)))) (navi2ch-p2-make-idx-data board (navi2ch-article-get-file-name board (cdr (assq 'article item)))))) (cddr (assoc navi2ch-p2-export-bookmark navi2ch-bookmark-list))))) (message "$B$*5$$K$$$j$r%(%/%9%]!<%HCf(B...done") (message "$BMzNr$r%(%/%9%]!<%HCf(B...") (with-temp-file (expand-file-name navi2ch-p2-recent-file-name dir) (apply 'insert (mapcar (lambda (item) (let ((board (nth 1 item))) (navi2ch-p2-make-idx-data board (navi2ch-article-get-file-name board (nth 2 item))))) navi2ch-history-alist))) (message "$BMzNr$r%(%/%9%]!<%HCf(B...done") ;; (message "$B=q$-$3$_MzNr$r%(%/%9%]!<%HCf(B...") ;; (message "$B=q$-$3$_MzNr$r%(%/%9%]!<%HCf(B...done") (message "$B$"$\!<$s%o!<%I$r%(%/%9%]!<%HCf(B...") (dolist (part '("name" "mail" "message" "id")) (with-temp-file (expand-file-name (symbol-value (intern (concat "navi2ch-p2-ng-" part "-file-name"))) dir) (apply 'insert (mapcar (lambda (item) (if (eq (cdr item) 'hide) (let* ((rule (car item)) (maybe-matchstr (if (consp rule) (car rule) rule)) (char (and (consp rule) (stringp maybe-matchstr) (string-to-char (symbol-name (cadr rule))))) (case-fold (and char (eq char (setq char (downcase char))))) (invert (and char (plist-get rule :invert))) (bbs (plist-get rule :board-id)) (artid (plist-get rule :artid)) (file (and artid (navi2ch-article-get-file-name (dolist (x navi2ch-list-board-name-list) (when (string= artid (cdr (assq 'id x))) (return x))) (list (cons 'artid artid))))) (subject (and artid file (file-exists-p file) (file-readable-p file) (cdr (assq 'subject (navi2ch-article-get-first-message-from-file file))))) (regexp (cond ((eq char ?r) maybe-matchstr) ((eq char ?s) (regexp-quote maybe-matchstr)) ((eq char ?e) (concat "^" (regexp-quote maybe-matchstr) "$")) ((eq char ?f) (navi2ch-fuzzy-regexp maybe-matchstr case-fold "[$B!!(B \f\t\n\r\v]*")) (t nil)))) (concat (if regexp (if invert "" "") (if invert "" "")) (if bbs (concat "" bbs "") "") (if subject (concat "" (regexp-quote subject) "") "") (or regexp maybe-matchstr) "\t\t0\n")) "")) (symbol-value (intern (concat "navi2ch-article-message-filter-by-" part "-alist"))))))) (message "$B$"$\!<$s%o!<%I$r%(%/%9%]!<%HCf(B...done") (message "dat, idx $B$r%(%/%9%]!<%HCf(B...") (lexical-let ((dir dir)) (navi2ch-search-for-each-article (lambda (board file) (let* ((artid (navi2ch-article-file-name-to-artid file)) (article (navi2ch-article-load-info board (list (cons 'artid artid)))) (subject (assq 'subject (navi2ch-article-get-first-message-from-file file board))) (response (or (cdr (assq 'response article)) "0")) (dat-dir (navi2ch-p2-get-dat-dir board dir))) (when (and (file-exists-p file) (file-readable-p file)) (make-directory dat-dir t) (funcall navi2ch-p2-dat-copy-function file (expand-file-name (file-name-nondirectory file) dat-dir) t)) (with-temp-file (expand-file-name (concat artid ".idx") dat-dir) (insert (navi2ch-p2-make-idx-data board file))))) (navi2ch-search-all-board-list))) (message "dat, idx $B$r%(%/%9%]!<%HCf(B...done"))) (defun navi2ch-p2-encode-string (text) (when (stringp text) (setq text (base64-encode-string (encode-coding-string text navi2ch-p2-coding-system) t)) (while (string-match "[/+]" text) (setq text (replace-match (if (string= (match-string 0 text) "/") "%2F" "%2B") nil nil text))) text)) (defun navi2ch-p2-decode-string (text) (when (stringp text) (while (string-match "%2\\(B\\|F\\)" text) (setq text (replace-match (if (string= (match-string 1 text) "F") "/" "+") nil nil text))) (decode-coding-string (base64-decode-string text) navi2ch-p2-coding-system))) navi2ch/navi2ch-popup-article.el000066400000000000000000000277231173560164300170670ustar00rootroot00000000000000;;; navi2ch-popup-article.el --- popup article module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2008, 2009 by Navi2ch ;; Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-popup-article) (defconst navi2ch-popup-article-ident "$Id$") (require 'navi2ch) (defvar navi2ch-popup-article-buffer-name "*navi2ch popup article*") (defvar navi2ch-popup-article-window-configuration nil) (defvar navi2ch-popup-article-mode-map nil) (unless navi2ch-popup-article-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-global-view-map) (define-key map "j" 'navi2ch-article-few-scroll-up) (define-key map "k" 'navi2ch-article-few-scroll-down) (define-key map " " 'navi2ch-article-scroll-up) (navi2ch-define-delete-keys map 'navi2ch-article-scroll-down) (define-key map "\r" 'navi2ch-popup-article-select-current-link) (unless (featurep 'xemacs) (define-key map [follow-link] 'mouse-face)) (navi2ch-define-mouse-key map 2 'navi2ch-popup-article-mouse-select) (define-key map "g" 'navi2ch-article-goto-number) (define-key map "q" 'navi2ch-popup-article-exit) (define-key map "Q" 'navi2ch-popup-article-exit-and-goto-number) (define-key map "l" 'navi2ch-popup-article-pop-point-or-exit) (define-key map "L" 'navi2ch-article-pop-poped-point) (define-key map "m" 'navi2ch-article-push-point) (define-key map "R" 'navi2ch-article-rotate-point) (define-key map "U" 'navi2ch-popup-article-show-url) (define-key map "." 'navi2ch-article-redisplay-current-message) (define-key map "p" 'navi2ch-article-previous-message) (define-key map "n" 'navi2ch-article-next-message) (define-key map [(shift tab)] 'navi2ch-article-previous-link) (define-key map [(shift iso-lefttab)] 'navi2ch-article-previous-link) (define-key map [(iso-lefttab)] 'navi2ch-article-previous-link) (define-key map "\e\C-i" 'navi2ch-article-previous-link) (define-key map "\C-\i" 'navi2ch-article-next-link) (define-key map ">" 'navi2ch-article-goto-last-message) (define-key map "<" 'navi2ch-article-goto-first-message) (define-key map "\ed" 'navi2ch-article-decode-message) (define-key map "\ei" 'navi2ch-article-auto-decode-toggle-text) (define-key map "v" 'navi2ch-article-view-aa) (define-key map "?" 'navi2ch-article-search) (define-key map "d" 'navi2ch-popup-article-exclude-message) (define-key map "D" 'navi2ch-popup-article-hide-messages) (define-key map "A" 'navi2ch-popup-article-add-important-messages) (define-key map "u" 'navi2ch-show-url-at-point) (define-key map "," 'navi2ch-thumbnail-select-current-link) (define-key map "V" 'navi2ch-thumbnail-save-content) (define-key map "\e\r" 'navi2ch-article-select-current-link) (define-key map "\C-c\C-d" 'navi2ch-thumbnail-image-delete-cache) (define-key map "T" 'navi2ch-thumbnail-all-show) (setq navi2ch-popup-article-mode-map map))) (defvar navi2ch-popup-article-current-board nil) (defvar navi2ch-popup-article-current-article nil) (defvar navi2ch-popup-article-exclude-stack nil) (defvar navi2ch-popup-number-list nil) (defun navi2ch-popup-article-exit () "PopUp Article $B%b!<%I$rH4$1$k!#(B" (interactive) (run-hooks 'navi2ch-popup-article-exit-hook) (bury-buffer) (set-window-configuration navi2ch-popup-article-window-configuration) (delete-windows-on (get-buffer navi2ch-popup-article-buffer-name)) (unless (eq navi2ch-article-current-article navi2ch-popup-article-current-article) (navi2ch-article-view-article navi2ch-popup-article-current-board navi2ch-popup-article-current-article))) (defun navi2ch-popup-article-exit-and-goto-number (&optional num) "Article $B%b!<%I$KLa$C$F$+$i:#$N0LCV$N%l%9$NHV9f$K0\F0!#(B NUM $B$,;XDj$5$l$l$P!"(B NUM $BHVL\$N%l%9$K0\F0!#(B" (interactive) (setq num (or num (navi2ch-article-get-current-number))) (navi2ch-popup-article-exit) (if (integerp num) (navi2ch-article-goto-number num t t) (navi2ch-popup-article num))) (defun navi2ch-popup-article-pop-point-or-exit () "stack $B$+$i(B pop $B$7$?0LCV$K0\F0$9$k!#(B stack $B$,6u$J$i!"(BPopUp Article $B%b!<%I$rH4$1$k!#(B" (interactive) (if navi2ch-article-point-stack (navi2ch-article-pop-point) (navi2ch-popup-article-exit))) (defun navi2ch-popup-article-mode () "\\{navi2ch-popup-article-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-popup-article-mode) (setq mode-name "Navi2ch PopUp Article") (setq buffer-read-only t) (buffer-disable-undo) (make-local-variable 'truncate-partial-width-windows) (setq truncate-partial-width-windows nil) (use-local-map navi2ch-popup-article-mode-map) (setq navi2ch-article-point-stack nil) (setq navi2ch-popup-article-exclude-stack nil) (navi2ch-make-local-hook 'post-command-hook) (add-hook 'post-command-hook 'navi2ch-article-display-link-minibuffer nil t) (run-hooks 'navi2ch-popup-article-mode-hook)) (defun navi2ch-popup-article (num-list) (let ((mlist navi2ch-article-message-list) (sep navi2ch-article-separator) (buf (get-buffer-create navi2ch-popup-article-buffer-name)) (popup-message-list navi2ch-article-message-list)) (setq navi2ch-popup-article-window-configuration (current-window-configuration)) (when (eq major-mode 'navi2ch-article-mode) (setq navi2ch-popup-article-current-board navi2ch-article-current-board navi2ch-popup-article-current-article navi2ch-article-current-article)) (pop-to-buffer buf) (navi2ch-popup-article-mode) ; $B$3$3$G(B local-variable $B$,A4$F>C$5$l$k(B (setq navi2ch-popup-number-list num-list) (setq navi2ch-article-message-list (mapcar (lambda (x) (let ((item (cdr x))) (cons (car x) (cond ((stringp item) item) ((consp item) (copy-alist item)) (t item))))) mlist)) (setq popup-message-list (mapcar (lambda (x) (let ((msg (navi2ch-article-get-message x))) (cond ((stringp msg) (cons x msg)) (msg (cons x (delq 'point (copy-alist msg)))) (t nil)))) num-list)) (setq popup-message-list (delq nil popup-message-list)) (if (null popup-message-list) (progn (navi2ch-popup-article-exit) (message "No responses found")) (setq navi2ch-article-separator sep) (setq navi2ch-article-point-stack nil) (setq navi2ch-article-poped-point-stack nil) (setq truncate-partial-width-windows nil) (setq navi2ch-article-view-range nil) (setq navi2ch-article-through-next-function 'navi2ch-popup-article-exit) (setq navi2ch-article-through-previous-function 'navi2ch-popup-article-exit) (let ((buffer-read-only nil)) (erase-buffer) (navi2ch-article-insert-messages popup-message-list nil)) (setq navi2ch-article-current-article nil navi2ch-article-message-list (mapcar (lambda (x) (let ((num (car x)) item) (or (assq num popup-message-list) (cons num (if (consp (setq item (cdr x))) (delete (assq 'point item) item) item))))) navi2ch-article-message-list)) (goto-char (point-min))))) (defun navi2ch-popup-article-scroll-up () "$B2hLL$r%9%/%m!<%k$9$k!#(B" (interactive) (condition-case nil (scroll-up) (end-of-buffer (navi2ch-popup-article-exit))) (force-mode-line-update t)) (defun navi2ch-popup-article-select-current-link (&optional browse-p) ;; $B$[$\(B navi2ch-article-select-current-link $B$HF1$8!#(B "$B%+!<%=%k0LCV$K1~$8$F!"%j%s%/@h$NI=<($d%U%!%$%k$X$NJ]B8$r9T$&!#(B" (interactive "P") (let ((type (get-text-property (point) 'navi2ch-link-type)) (prop (get-text-property (point) 'navi2ch-link))) (cond ((eq type 'number) (setq prop (navi2ch-article-str-to-num (japanese-hankaku prop))) (if (and (integerp prop) (memq prop navi2ch-popup-number-list)) (navi2ch-article-goto-number prop t t) (navi2ch-popup-article-exit) (navi2ch-article-select-current-link-number prop browse-p))) ((eq type 'url) (navi2ch-article-select-current-link-url prop browse-p t)) ((eq type 'content) (navi2ch-article-save-content))))) (defun navi2ch-popup-article-mouse-select (e) "$B%^%&%9$N0LCV$K1~$8$F!"%j%s%/@h$NI=<($d%U%!%$%k$X$NJ]B8$r9T$&!#(B" (interactive "e") (mouse-set-point e) (navi2ch-popup-article-select-current-link)) (defun navi2ch-popup-article-show-url () "url $B$rI=<($7$F!"$=$N(B url $B$r8+$k$+(B kill ring $B$K%3%T!<$9$k!#(B" (interactive) (let ((navi2ch-article-current-board navi2ch-popup-article-current-board) (navi2ch-article-current-article navi2ch-popup-article-current-article)) (navi2ch-article-show-url))) (defun navi2ch-popup-article-exclude-message (&optional prefix) "$B%l%9$rI=<($+$i=|30$9$k!#(B" (interactive "P") (if prefix (navi2ch-popup-article-undo-exclude-message) (let ((buffer-read-only nil) (num (navi2ch-article-get-current-number))) (if (null num) (message "No message") (push num navi2ch-popup-article-exclude-stack) (save-excursion (delete-region (if (get-text-property (point) 'current-number) (point) (navi2ch-previous-property (point) 'current-number)) (or (navi2ch-next-property (point) 'current-number) (point-max)))) (message "Exclude message"))))) (defun navi2ch-popup-article-undo-exclude-message () "$BI=<($+$i=|30$7$?%l%9$rI|3h$5$;$k!#(B" (interactive) (let ((buffer-read-only nil) (num (pop navi2ch-popup-article-exclude-stack))) (if (null num) (message "No message excluded") (save-excursion (navi2ch-article-reinsert-partial-messages num num)) (navi2ch-article-goto-number num t) (message "Push point and undo exclude message")))) (defun navi2ch-popup-article-sift-messages (sym msg) (let ((list (navi2ch-article-get-visible-numbers))) (if (null list) (message "No popup message") (navi2ch-popup-article-exit) (setq navi2ch-article-current-article (navi2ch-put-alist sym (navi2ch-union (cdr (assq sym navi2ch-article-current-article)) list) navi2ch-article-current-article)) (let ((buffer-read-only nil)) (navi2ch-article-save-view (erase-buffer) (navi2ch-article-insert-messages navi2ch-article-message-list navi2ch-article-view-range))) (message msg)))) (defun navi2ch-popup-article-hide-messages () "$BI=<(Cf$N%l%9$r$^$H$a$F1#$9!#(B" (interactive) (if (navi2ch-y-or-n-p "Hide popup messages? ") (navi2ch-popup-article-sift-messages 'hide "Hide messages") (message "Don't hide messages"))) (defun navi2ch-popup-article-add-important-messages () "$BI=<(Cf$N%l%9$r$^$H$a$F%V%C%/%^!<%/$KEPO?$9$k!#(B" (interactive) (if (navi2ch-y-or-n-p "Add important popup messages? ") (navi2ch-popup-article-sift-messages 'important "Add important messages") (message "Don't add important messages"))) (defun navi2ch-popup-article-url-at-point (point) "POINT $B$N2<$N%j%s%/$r;X$9(B URL $B$rF@$k!#(B" (let ((navi2ch-article-current-board navi2ch-popup-article-current-board) (navi2ch-article-current-article navi2ch-popup-article-current-article)) (navi2ch-article-url-at-point point))) (run-hooks 'navi2ch-popup-article-load-hook) ;;; navi2ch-popup-article.el ends here navi2ch/navi2ch-search.el000066400000000000000000000467121173560164300155470ustar00rootroot00000000000000;;; navi2ch-search.el --- Search Module for Navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2008, 2009 by Navi2ch ;; Project ;; Author: Taiki SUGAWARA ;; Keywords: 2ch, network ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; namazu($BBg@h@8$N8!:w(B) $B$r;H$&$K$O(B ;; (navi2ch-net-send-request ;; (format "http://64.124.197.202/cgi-bin/search/namazu.cgi?%s" ;; (navi2ch-net-get-param-string ;; '(("query" . "navi2ch") ;; ("submit" . "$B8!:w(B") ;; ("whence" . "0") ;; ("idxname" . "2chpc") ;; ("max" . "10") ;; ("result" . "normal") ;; ("sort" . "score")))) ;; "GET") ;; $B$J46$8$G!#(B ;;; Code: (provide 'navi2ch-search) (defconst navi2ch-search-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch) (defvar navi2ch-search-mode-map nil) (unless navi2ch-search-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-bm-mode-map) (define-key map "Q" 'navi2ch-search-return-previous-board-maybe) (define-key map "s" 'navi2ch-search-sync) (setq navi2ch-search-mode-map map))) (defvar navi2ch-search-mode-menu-spec (navi2ch-bm-make-menu-spec "Search" nil)) (defvar navi2ch-search-searched-subject-list nil) (defvar navi2ch-search-board '((name . "$B8!:w0lMw(B") (type . search) (id . "#search"))) (defvar navi2ch-search-history nil) (defvar navi2ch-search-mode-line-info nil) ;;; navi2ch-bm callbacks (defun navi2ch-search-set-property (begin end item) (put-text-property begin end 'item item)) (defun navi2ch-search-get-property (point) (get-text-property (save-excursion (goto-char point) (beginning-of-line) (point)) 'item)) (defun navi2ch-search-get-board (item) (car item)) (defun navi2ch-search-get-article (item) (cdr item)) (defun navi2ch-search-exit () (run-hooks 'navi2ch-search-exit-hook)) ;; regist board (navi2ch-bm-regist-board 'search 'navi2ch-search navi2ch-search-board) ;;; navi2ch-search functions (defun navi2ch-search-insert-subjects () (let ((i 1)) (dolist (x navi2ch-search-searched-subject-list) (let ((article (navi2ch-search-get-article x)) (board (navi2ch-search-get-board x))) (navi2ch-bm-insert-subject x i (cdr (assq 'subject article)) ;; $B%l%9?t>pJs$,$"$C$?$iI=<((B (if (assq 'response x) (format "(%s) [%s]" (cdr (assq 'response x)) (cdr (assq 'name board))) (format "[%s]" (cdr (assq 'name board))))) (setq i (1+ i)))))) (defun navi2ch-search-for-each-board (board-func board-list) (let (alist) (dolist (board board-list) (message "Searching in %s..." (cdr (assq 'name board))) (setq alist (nconc (funcall board-func board) alist))) (message "Searching...%s" (if alist "done" "not found")) (nreverse alist))) (defun navi2ch-search-for-each-article (article-func board-list) (navi2ch-search-for-each-board (lambda (board) (let ((default-directory (navi2ch-board-get-file-name board ""))) (delq nil (mapcar (lambda (file) (funcall article-func board file)) (and default-directory (file-directory-p default-directory) (sort (directory-files default-directory nil navi2ch-article-local-dat-regexp) #'navi2ch-right-aligned-string<)))))) board-list)) (defun navi2ch-search-board-subject-regexp (board-list regexp) (navi2ch-search-for-each-board (lambda (board) (let* ((file (navi2ch-board-get-file-name board)) (subject-list (and file (navi2ch-board-get-subject-list file))) alist) (dolist (article subject-list) (let ((subject (cdr (assq 'subject article)))) (when (string-match regexp subject) (push (cons board article) alist)))) alist)) board-list)) (defun navi2ch-search-article-regexp (board-list regexp) (navi2ch-search-for-each-article (lambda (board file) (with-temp-buffer (navi2ch-board-insert-file-contents board file) (navi2ch-apply-filters board navi2ch-article-filter-list) (goto-char (point-min)) (when (re-search-forward regexp nil t) (let ((subject (cdr (assq 'subject (navi2ch-article-get-first-message))))) (list board (cons 'subject subject) (cons 'artid (navi2ch-article-file-name-to-artid file))))))) board-list)) (defun navi2ch-search-cache (board-list) (navi2ch-search-for-each-article (lambda (board file) (let ((subject (assq 'subject (navi2ch-article-get-first-message-from-file file board)))) (list board subject (cons 'artid (navi2ch-article-file-name-to-artid file))))) board-list)) (defun navi2ch-search-orphan (board-list) (navi2ch-search-for-each-article (lambda (board file) (let ((article (list (cons 'artid (navi2ch-article-file-name-to-artid file))))) (if (navi2ch-article-orphan-p board article) (let ((subject (assq 'subject (navi2ch-article-get-first-message-from-file file board)))) (nconc (list board subject) article))))) board-list)) (easy-menu-define navi2ch-search-mode-menu navi2ch-search-mode-map "Menu used in navi2ch-search" navi2ch-search-mode-menu-spec) (defun navi2ch-search-setup-menu () (easy-menu-add navi2ch-search-mode-menu)) (defun navi2ch-search-mode () "\\{navi2ch-search-mode-map}" (interactive) (kill-all-local-variables) (setq major-mode 'navi2ch-search-mode) (setq mode-name "Navi2ch Search") (setq buffer-read-only t) (buffer-disable-undo) (use-local-map navi2ch-search-mode-map) (setq navi2ch-mode-line-identification 'navi2ch-search-mode-line-info) (navi2ch-set-mode-line-identification) (navi2ch-search-setup-menu) (run-hooks 'navi2ch-bm-mode-hook 'navi2ch-search-mode-hook)) (defun navi2ch-search (&rest args) (navi2ch-search-mode) (navi2ch-bm-setup 'navi2ch-search) (navi2ch-search-sync)) (defun navi2ch-search-sync () (interactive) (let ((buffer-read-only nil)) (erase-buffer) (save-excursion (navi2ch-search-insert-subjects)))) (defun navi2ch-search-return-previous-board-maybe () (interactive) (if navi2ch-board-current-board (navi2ch-board-select-board ; $B1x$M$'!&!&!&(B (prog1 navi2ch-board-current-board (setq navi2ch-board-current-board nil))) (navi2ch-bm-exit))) (defun navi2ch-search-subject-subr (board-list-or-function) (let ((regexp (navi2ch-read-string "Subject regexp: " nil 'navi2ch-search-history)) (board-list (if (functionp board-list-or-function) (funcall board-list-or-function) board-list-or-function))) (setq navi2ch-search-searched-subject-list (navi2ch-search-board-subject-regexp board-list regexp) navi2ch-search-mode-line-info (format "Search subject %s" regexp))) (navi2ch-bm-select-board navi2ch-search-board)) (defun navi2ch-search-for-each-directory-recursive (function directory) (let ((default-directory directory)) (dolist (file (directory-files ".")) (if (and (file-directory-p file) (not (member file '("." "..")))) (navi2ch-search-for-each-directory-recursive function (expand-file-name file))))) (funcall function directory)) (defun navi2ch-search-directory-to-board (directory directory-to-board-alist) (let ((dir (file-name-as-directory (expand-file-name directory)))) (or (cdr (assoc dir directory-to-board-alist)) (navi2ch-board-url-to-board (concat "http://" (file-relative-name dir navi2ch-directory)))))) (defun navi2ch-search-all-board-list () (let ((directory-to-board-alist (mapcar (lambda (board) (cons (navi2ch-board-get-file-name board "") board)) (navi2ch-list-get-board-name-list (navi2ch-list-get-normal-category-list navi2ch-list-category-list)))) l) (navi2ch-search-for-each-directory-recursive (lambda (directory) (if (file-exists-p (expand-file-name navi2ch-article-summary-file-name directory)) (push (navi2ch-search-directory-to-board directory directory-to-board-alist) l))) navi2ch-directory) (nreverse l))) (defun navi2ch-search-all-subject () (interactive) (navi2ch-search-subject-subr #'navi2ch-search-all-board-list)) (defun navi2ch-search-article-subr (board-list-or-function) (let ((regexp (navi2ch-read-string "Search regexp: " nil 'navi2ch-search-history)) (board-list (if (functionp board-list-or-function) (funcall board-list-or-function) board-list-or-function))) (setq navi2ch-search-searched-subject-list (navi2ch-search-article-regexp board-list regexp) navi2ch-search-mode-line-info (format "Search article %s" regexp))) (navi2ch-bm-select-board navi2ch-search-board)) (defun navi2ch-search-all-article () (interactive) (navi2ch-search-article-subr #'navi2ch-search-all-board-list)) (defun navi2ch-search-cache-subr (board-list) (setq navi2ch-search-searched-subject-list (navi2ch-search-cache board-list) navi2ch-search-mode-line-info "Search cache") (navi2ch-bm-select-board navi2ch-search-board)) (defun navi2ch-search-all-cache () (interactive) (navi2ch-search-cache-subr (navi2ch-search-all-board-list))) (defun navi2ch-search-orphan-subr (board-list) (setq navi2ch-search-searched-subject-list (navi2ch-search-orphan board-list) navi2ch-search-mode-line-info "Search orphan") (navi2ch-bm-select-board navi2ch-search-board)) (defun navi2ch-search-all-orphan () (interactive) (navi2ch-search-orphan-subr (navi2ch-search-all-board-list))) (defun navi2ch-search-set-mode-line (&optional str) (setq navi2ch-mode-line-identification str) (navi2ch-set-mode-line-identification)) ;;; navi2ch web subject search (defvar navi2ch-search-web-last-search-word nil "$B:G8e$K8!:w$7$?J8;zNs(B") (defvar navi2ch-search-web-current-start 0 "$B8=:_!"I=<($7$F$$$k%9%l$N%*%U%;%C%H(B") (defvar navi2ch-search-web-current-end 0) (defvar navi2ch-search-web-total-hit 0 "$B8!:wAm%R%C%H?t(B") (defvar navi2ch-search-web-search-method 'navi2ch-search-find-2ch-method) (defsubst navi2ch-search-web-method () (if (symbolp navi2ch-search-web-search-method) (symbol-value navi2ch-search-web-search-method) navi2ch-search-web-search-method)) (defsubst navi2ch-search-web-subject-list (keyword arg) (funcall (nth 0 (navi2ch-search-web-method)) keyword arg)) (defun navi2ch-search-web-next (&optional args) (interactive "P") (let ((item (nth 1 (navi2ch-search-web-method)))) (navi2ch-search-web (if (functionp item) (apply item args) item)))) (defun navi2ch-search-web-previous (&optional args) (interactive "P") (let ((item (nth 2 (navi2ch-search-web-method)))) (navi2ch-search-web (if (functionp item) (apply item args) item)))) (defun navi2ch-search-web (&optional arg) "web $B$N8!:w%7%9%F%`$r;H$C$F(B 2ch $B$r%9%l%?%$$G8!:w$9$k!#(B `arg' $B$O(B backend $B$K$h$j2rl9g$OI,(B $B$:?7$7$$8!:w$r3+;O$9$k!#(B" (interactive "P") (let (keyword) (if (and navi2ch-search-web-last-search-word arg) (setq keyword navi2ch-search-web-last-search-word) (setq keyword (navi2ch-read-string "Subject search from web: " nil 'navi2ch-search-history))) (setq navi2ch-search-web-last-search-word keyword navi2ch-search-web-current-start 0 navi2ch-search-web-current-end 0 navi2ch-search-web-total-hit 0) ;; board mode $B$KEO$9%9%l%?%$$N%j%9%H:n@.(B (setq navi2ch-search-searched-subject-list (navi2ch-search-web-subject-list keyword arg)) (navi2ch-bm-select-board navi2ch-search-board) (setq navi2ch-search-mode-line-info (format "Search: %s [%d-%d/%d]" navi2ch-search-web-last-search-word navi2ch-search-web-current-start navi2ch-search-web-current-end navi2ch-search-web-total-hit)))) (defun navi2ch-search-web-make-list (url title num) "((board) (subject)) $B$N$h$&$J(B navi2ch $BFbIt$N%9%l>pJs$r5<;wE*$K:n@.!#(B" (when (string-match "\\(http://[-a-zA-Z0-9_.!~*';/?:@&=+$,%#]+/\\)test/read.cgi/\\(.+\\)/\\([0-9]+\\)/.*" url) (let ((subject (cons 'subject title)) (response (cons 'response num)) (artid (cons 'artid (match-string 3 url)))) (list (navi2ch-board-url-to-board url) subject artid response)))) ;;; navi2ch find.2ch.net (defvar navi2ch-search-find-2ch-method '(navi2ch-search-find-2ch-subject-list navi2ch-search-find-2ch-next navi2ch-search-find-2ch-previous)) (defvar navi2ch-search-find-2ch-last-search-num nil) (defvar navi2ch-search-find-2ch-search-num 30 "$B0lEY$KI=<($9$k8!:w7k2L(B find.2ch.net $B$N;EMM>e!":GBg$O(B50$B7o(B") (defvar navi2ch-search-find-2ch-coding 'euc-japan-dos "find.2ch.net $B$G;H$o$l$k%3!<%G%#%s%0(B") (defconst navi2ch-search-find-2ch-thread-regexp "
\\(.*\\) (\\([0-9]+\\)) - \\(.+\\)$BHD(B.+
" "find.2ch.net $B$G8!:w$9$k(B regexp") (defun navi2ch-search-find-2ch-subject-list (query offset) "find.2ch.net $B$KJ8;zNs(B `query' $B$G%j%/%(%9%H!#(B `offset' $B$O!V\\([0-9]+\\)$B%9%lCf(B.*$BIC(B" nil t) (progn (setq navi2ch-search-web-total-hit (string-to-number (match-string 1))) (while (re-search-forward navi2ch-search-find-2ch-thread-regexp nil t) (let ((url (match-string 1)) (title (navi2ch-replace-html-tag (match-string 2))) (num (match-string 3))) (push (navi2ch-search-web-make-list url title num) subject-list)))) (setq navi2ch-search-web-total-hit 0) (message "No match"))) (setq navi2ch-search-web-current-start (min (1+ navi2ch-search-find-2ch-last-search-num) navi2ch-search-web-total-hit) navi2ch-search-web-current-end (min (+ navi2ch-search-find-2ch-last-search-num (min navi2ch-search-find-2ch-search-num 50)) navi2ch-search-web-total-hit)) (nreverse subject-list))) ;; $B[^<]+\\([^<]*\\) (\\([0-9]+\\))") (defun navi2ch-search-hula-subject-list (query arg) "h.ula.cc $B$KJ8;zNs(B `query' $B$G%j%/%(%9%H!#(B" (setq navi2ch-search-hula-current-page (if arg (+ navi2ch-search-hula-current-page (if (< arg 0) -1 1)) 1)) (let* ((query (navi2ch-url-encode-string query navi2ch-search-hula-coding t)) (url (format "http://h.ula.cc/dance/?P=%d&kenken=%s" navi2ch-search-hula-current-page query)) (proc (navi2ch-net-download-file url)) (cont (decode-coding-string (navi2ch-net-get-content proc) navi2ch-search-hula-coding)) subject-list) (with-temp-buffer (insert cont) (goto-char (point-min)) (if (re-search-forward "\\([0-9,]+\\)" nil t) (progn (setq navi2ch-search-web-total-hit (string-to-number (navi2ch-replace-string "," "" (match-string 1)))) (while (re-search-forward navi2ch-search-hula-thread-regexp nil t) (let ((url (format "http://%s/test/read.cgi/%s/%s/" (match-string 1) (match-string 2) (match-string 3))) (title (navi2ch-replace-html-tag (match-string 4))) (num (match-string 5))) (push (navi2ch-search-web-make-list url title num) subject-list)))) (setq navi2ch-search-web-total-hit 0) (message "No match"))) (setq navi2ch-search-web-current-start (min (1+ (* (1- navi2ch-search-hula-current-page) 50)) navi2ch-search-web-total-hit) navi2ch-search-web-current-end (min (* navi2ch-search-hula-current-page 50) navi2ch-search-web-total-hit)) (nreverse subject-list))) ;; navi2ch union (defvar navi2ch-search-union-method '(navi2ch-search-union-subject-list 1 -1)) (defvar navi2ch-search-union-method-list '(navi2ch-search-find-2ch-method navi2ch-search-hula-method)) (defvar navi2ch-search-union-last-search-num 0) (defvar navi2ch-search-union-prev-num nil) (defun navi2ch-search-union-subject-list (keyword arg) (unless arg (setq navi2ch-search-union-last-search-num 0 navi2ch-search-union-prev-num nil)) (let ((all 0) (current 0) method-list url-list result) (dolist (m navi2ch-search-union-method-list) (let ((navi2ch-search-web-search-method m)) (setq method-list (navi2ch-search-web-subject-list keyword (cond ((eq arg 1) (let ((item (nth 1 (navi2ch-search-web-method)))) (if (functionp item) (apply item arg) item))) ((eq arg -1) (let ((item (nth 2 (navi2ch-search-web-method)))) (if (functionp item) (apply item arg) item))) (t arg))))) (setq all (+ all navi2ch-search-web-total-hit) current (+ current (- navi2ch-search-web-current-end navi2ch-search-web-current-start) 1)) (dolist (l method-list) (let ((url (navi2ch-article-to-url (car l) (cdr l)))) (unless (member url url-list) (push url url-list) (push l result))))) (setq navi2ch-search-web-total-hit all) (setq navi2ch-search-web-current-start (if (eq arg -1) (or (cadr navi2ch-search-union-prev-num) 1) (1+ navi2ch-search-union-last-search-num))) (setq navi2ch-search-web-current-end (+ current navi2ch-search-web-current-start -1)) (setq navi2ch-search-union-last-search-num navi2ch-search-web-current-end) (setq navi2ch-search-union-prev-num (if (eq arg -1) (or (cdr navi2ch-search-union-prev-num) '(1)) (cons navi2ch-search-web-current-start navi2ch-search-union-prev-num))) (nreverse result))) (run-hooks 'navi2ch-search-load-hook) ;;; navi2ch-search.el ends here navi2ch/navi2ch-splash.el000066400000000000000000000326001173560164300155630ustar00rootroot00000000000000;;; navi2ch-splash.el --- Navigator for 2ch for Emacsen -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Navi2ch ;; Project ;; Author: UEYAMA Rui ;; 110 $B$NL>L5$7$5$s(B http://pc.2ch.net/test/read.cgi/unix/1013457056/110 ;; ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B%3!<%I$O!"(BWanderlust $B$N(B wl-demo.el $B$+$i$b$i$$$^$7$?!#$[$H$s$I(B ;; $BJQ$o$C$F$J$$$G$9!#(B ;; ;;; wl-demo.el --- Opening demo on Wanderlust ;; ;; Copyright (C) 1998,1999,2000,2001 Yuuichi Teranishi ;; Copyright (C) 2000,2001 Katsumi Yamaoka ;;; Code: (provide 'navi2ch-splash) (defconst navi2ch-splash-ident "$Id$") (eval-when-compile (require 'cl)) (require 'navi2ch-vars) (require 'navi2ch-face) (require 'navi2ch-util) (require 'navi2ch-version) (defconst navi2ch-splash-copyright-notice (concat "Copyright (C) 2000-2008 Navi2ch Project. This software includes some fragments from other softwares; Copyright (C) 1993-2000 Free Software Foundation, Inc. Copyright (C) 1998-2001 Yuuichi Teranishi Copyright (C) 2000,2001 Katsumi Yamaoka \n" (substitute-command-keys " Navi2ch comes with ABSOLUTELY NO WARRANTY; type \\[describe-no-warranty] for full details.")) "A declaration of the copyright on Navi2ch.") (defconst navi2ch-splash-logo-image-name "navi2ch-logo" "Basename of the logo file.") ;; $B$3$l$O$5$9$,$K:9$7$+$($J$$$H!D!D(B (defvar navi2ch-splash-logo-ascii "\ $B!!!!"#!!!!!!!!"#"#!!!!!!!!!!!!!!!!!!!!!!!!!!"#"#!!!!!!!!"#!!!!(B $B!!"#!!!!!!!!"#!!!!!!!!!!!!!!"#"#"#"#!!!!!!!!!!!!"#!!!!!!!!"#!!(B $B"#!!!!!!!!!!!!!!!!!!!!!!!!!!"#!!!!"#!!!!!!!!!!!!!!!!!!!!!!!!"#(B $B"#!!!!!!!!!!!!!!!!!!!!!!!!!!"#!!!!"#!!!!!!!!!!!!!!!!!!!!!!!!"#(B $B"#!!!!!!!!!!!!!!!!!!!!!!!!!!"#!!!!"#!!!!!!!!!!!!!!!!!!!!!!!!"#(B $B"#!!!!!!!!!!!!!!!!!!!!!!!!!!"#!!!!"#!!!!!!!!!!!!!!!!!!!!!!!!"#(B $B"#!!!!!!!!!!!!!!!!!!!!!!!!"#!!!!!!"#!!!!!!!!!!!!!!!!!!!!!!!!"#(B $B!!"#!!!!!!!!!!!!!!!!!!!!"#"#"#"#"#"#"#!!!!!!!!!!!!!!!!!!!!"#!!(B $B!!!!"#!!!!!!!!!!!!!!!!!!"#!!!!!!!!!!"#!!!!!!!!!!!!!!!!!!"#!!!!(B Navi2ch" "Ascii picture used to splash the startup screen.") (eval-when-compile (when navi2ch-on-emacs21 ;; `display-images-p' has not been available in Emacs versions ;; prior to Emacs 21.0.105. (navi2ch-defalias-maybe 'display-images-p 'display-graphic-p))) ;; Avoid byte compile warnings. (eval-when-compile (autoload 'bitmap-insert-xbm-file "bitmap" nil t) (autoload 'create-image "image") (autoload 'device-on-window-system-p "device") (autoload 'image-type-available-p "image") (autoload 'insert-image "image") (autoload 'make-glyph "glyphs") (autoload 'set-glyph-face "glyphs") (autoload 'set-specifier "specifier") (navi2ch-defalias-maybe 'frame-char-height 'ignore) (navi2ch-defalias-maybe 'frame-char-width 'ignore) (navi2ch-defalias-maybe 'glyph-height 'ignore) (navi2ch-defalias-maybe 'glyph-width 'ignore) (navi2ch-defalias-maybe 'image-size 'ignore) (navi2ch-defalias-maybe 'make-extent 'ignore) (navi2ch-defalias-maybe 'set-extent-end-glyph 'ignore) (navi2ch-defalias-maybe 'window-pixel-height 'ignore) (navi2ch-defalias-maybe 'window-pixel-width 'ignore)) (defvar navi2ch-splash-bitmap-mule-available-p 'unknown "Internal variable to say whether the BITMAP-MULE package is available.") (defun navi2ch-splash-image-type-alist () "Return an alist of available logo image types on the current frame." (if (or (and (featurep 'xemacs) (device-on-window-system-p)) window-system) (let ((xpm (when (or (and (featurep 'xemacs) (featurep 'xpm)) (and navi2ch-on-emacs21 (display-images-p) (image-type-available-p 'xpm))) '("xpm" . xpm))) (xbm (when (or (featurep 'xemacs) (and navi2ch-on-emacs21 (display-images-p) (image-type-available-p 'xbm)) (eq t navi2ch-splash-bitmap-mule-available-p) (and (eq 'unknown navi2ch-splash-bitmap-mule-available-p) (or (featurep 'bitmap) (locate-library "bitmap")) (setq navi2ch-splash-bitmap-mule-available-p t))) '("xbm" . xbm))) (bitmap (when (and (not (featurep 'xemacs)) (or (eq t navi2ch-splash-bitmap-mule-available-p) (and (eq 'unknown navi2ch-splash-bitmap-mule-available-p) (or (featurep 'bitmap) (locate-library "bitmap")) (setq navi2ch-splash-bitmap-mule-available-p t)))) '("bitmap" . bitmap)))) (if (and navi2ch-on-emacs21 (image-type-available-p 'xbm)) ;; Prefer xbm rather than bitmap on Emacs 21. (delq nil (list xbm bitmap xpm '("ascii"))) (delq nil (list bitmap xbm xpm '("ascii"))))) '(("ascii")))) (defun navi2ch-splash-insert-image (image-type) "Insert a logo image at the point and position it to be centered. IMAGE-TYPE specifies what a type of image should be displayed. Return a number of lines that an image occupies in the buffer." (let ((file (cond ((eq 'xpm image-type) (concat navi2ch-splash-logo-image-name ".xpm")) ((eq 'bitmap image-type) (concat navi2ch-splash-logo-image-name ".img")) ((eq 'xbm image-type) (concat navi2ch-splash-logo-image-name ".xbm")))) image width height) (when (featurep 'xemacs) (when (boundp 'default-gutter-visible-p) (set-specifier (symbol-value 'default-gutter-visible-p) nil (current-buffer))) (set-specifier (symbol-value 'scrollbar-height) 0 (current-buffer)) (set-specifier (symbol-value 'scrollbar-width) 0 (current-buffer))) (if (and file (if (and navi2ch-icon-directory (file-directory-p navi2ch-icon-directory)) (setq file (expand-file-name file navi2ch-icon-directory)) (message "You have to specify the value of `navi2ch-icon-directory'") nil) (if (file-exists-p file) (if (file-readable-p file) t (message "Permission denied: %s" file) nil) (message "File not found: %s" file) nil)) (progn (cond ((featurep 'xemacs) (setq width (window-pixel-width) height (window-pixel-height) image (make-glyph (vector image-type ':file file))) (when (eq 'xbm image-type) (set-glyph-face image 'navi2ch-splash-screen-face)) (insert-char ?\ (max 0 (/ (+ (* (- width (glyph-width image)) (window-width)) width) (* 2 width)))) (set-extent-end-glyph (make-extent (point) (point)) image) (insert "\n") (/ (+ (* 2 (glyph-height image) (window-height)) height) (* 2 height))) ((and navi2ch-on-emacs21 (or (eq 'xpm image-type) (and (eq 'xbm image-type) (image-type-available-p 'xbm)))) ;; Use the new redisplay engine on Emacs 21. (setq image (create-image file image-type) width (image-size image) height (cdr width) width (car width)) (when (eq 'xbm image-type) (let ((bg (face-background 'navi2ch-splash-screen-face)) (fg (face-foreground 'navi2ch-splash-screen-face))) (when (stringp bg) (plist-put (cdr image) ':background bg)) (when (stringp fg) (plist-put (cdr image) ':foreground fg)))) (insert (navi2ch-propertize " " 'display (list 'space ':align-to (max 0 (round (- (window-width) width) 2))))) (insert-image image) (insert "\n") (round height)) ((eq 'bitmap image-type) ;; Use ready-composed bitmap image. (require 'bitmap) (let ((coding-system-for-read 'iso-2022-7bit)) (insert-file-contents file)) (goto-char (point-max)) (unless (bolp) (insert "\n")) (setq width 0) (while (progn (end-of-line 0) (not (bobp))) (setq width (max width (current-column)))) ;; Emacs 21.1 would fail to decode composite chars ;; if it has been built without fixing coding.c. (when (and navi2ch-on-emacs21 (>= width 80)) (erase-buffer) (let ((coding-system-for-read 'raw-text)) (insert-file-contents file)) (goto-char (point-max)) (unless (bolp) (insert "\n")) (setq width 0) (while (progn (end-of-line 0) (not (bobp))) ;; Decode bitmap data line by line. (decode-coding-region (navi2ch-line-beginning-position) (point) 'iso-2022-7bit) (setq width (max width (current-column))))) (indent-rigidly (point-min) (point-max) (max 0 (/ (1+ (- (window-width) width)) 2))) (put-text-property (point-min) (point-max) 'face 'navi2ch-splash-screen-face) (count-lines (point-min) (goto-char (point-max)))) ((eq 'xbm image-type) (message "Composing a bitmap image...") (require 'bitmap) (bitmap-insert-xbm-file file) (backward-char) (indent-rigidly (point-min) (point-max) (max 0 (/ (1+ (- (window-width) (current-column))) 2))) (put-text-property (point-min) (point-max) 'face 'navi2ch-splash-screen-face) (message "Composing a bitmap image...done") (count-lines (point-min) (goto-char (point-max)))))) (insert navi2ch-splash-logo-ascii) (put-text-property (point-min) (point) 'face 'navi2ch-splash-screen-face) (unless (bolp) (insert "\n")) (setq width 0) (while (progn (end-of-line 0) (not (bobp))) (setq width (max width (current-column)))) (indent-rigidly (point-min) (point-max) (max 0 (/ (1+ (- (window-width) width)) 2))) (count-lines (point-min) (goto-char (point-max)))))) (defun navi2ch-splash-insert-text (height) "Insert a version and the copyright message after a logo image. HEIGHT should be a number of lines that an image occupies in the buffer." (let* ((height (- (window-height) height 1)) (notice-height (length (split-string navi2ch-splash-copyright-notice "\n"))) (text (format (cond ((<= (- height notice-height) 1) "version %s - \"%s\"\n%s") ((eq (- height notice-height) 2) "version %s - \"%s\"\n\n%s") (t "\nversion %s - \"%s\"\n\n%s")) navi2ch-version "$B%*%^%(%b%J!<(B" navi2ch-splash-copyright-notice)) (text-height (length (split-string text "\n"))) start) (goto-char (point-min)) (insert-char ?\n (max 0 (/ (- height text-height) 2))) (setq start (goto-char (point-max))) (if navi2ch-on-emacs21 (let ((bg (face-background 'navi2ch-splash-screen-face)) (fg (face-foreground 'navi2ch-splash-screen-face))) (insert (navi2ch-propertize text 'face (nconc '(variable-pitch :slant oblique) (when (stringp bg) (list ':background bg)) (when (stringp fg) (list ':foreground fg)))))) (insert text) (put-text-property start (point) 'face 'navi2ch-splash-screen-face)) (let ((fill-column (window-width))) (center-region start (point))))) ;; shut up XEmacs warnings (eval-when-compile (defvar default-enable-multibyte-characters) (defvar default-mc-flag) (defvar default-line-spacing)) (defun navi2ch-splash (&optional image-type) "Demo on the startup screen. IMAGE-TYPE should be a symbol which overrides the variable `navi2ch-splash-display-logo'. It will prompt user for the type of image when it is called interactively with a prefix argument." (interactive "P") (let ((selection (navi2ch-splash-image-type-alist)) type) (if (and image-type (interactive-p)) (setq type (completing-read "Image type: " selection nil t) image-type (when (assoc type selection) (cdr (assoc type selection)))) (if (setq type (assoc (format "%s" (or image-type navi2ch-splash-display-logo)) selection)) (setq image-type (cdr type)) (setq image-type (when navi2ch-splash-display-logo (cdr (car selection))))))) (let ((buffer (let ((default-enable-multibyte-characters t) (default-mc-flag t) (default-line-spacing 0)) (get-buffer-create "*navi2ch splash*")))) (switch-to-buffer buffer) (setq buffer-read-only nil) (buffer-disable-undo) (erase-buffer) (setq truncate-lines t tab-width 8) (set (make-local-variable 'tab-stop-list) '(8 16 24 32 40 48 56 64 72 80 88 96 104 112 120)) (navi2ch-splash-insert-text (navi2ch-splash-insert-image image-type)) (set-buffer-modified-p nil) (goto-char (point-min)) (sit-for (if (featurep 'lisp-float-type) (/ (float 5) (float 10)) 1)) buffer)) ;;; navi2ch-splash.el ends here navi2ch/navi2ch-thumbnail.el000066400000000000000000000734561173560164300162720ustar00rootroot00000000000000;;; navi2ch-thumbnail.el --- thumbnail view for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2010 by Navi2ch Project ;; Authors: MIZUNUMA Yuto ;; Keywords: network 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; $B%5%`%M%$%k$rI=<($9$k5!G=$G$9(B ;; $B2hA|I=<($KBP1~$7$?(Bemacs$B$GF0$-$^$9(B ;; $B2hA|%j%s%/(BURL$B>e$G(B','$B$r2!$9$H%5%`%M%$%k2hA|$rA^F~I=<($7$^$9!#<+F0uBV$G(B','$B$r2!$9$H%5%`%M%$%kA^F~(B. $B%5%`%M%$%k$K%+!<(B ;; $B%=%k$,$"$k>uBV$G(B','$B$r2!$9$H30It%S%e!<%"!<$G%*%j%8%J%k2hA|I=<((B($BK\Ev$O(B ;; enter$B%-!<$G$d$k$[$&$,4qNo$J5$$b$9$k(B) ;; ;; $B%5%`%M%$%k$K%+!<%=%k$,$"$k>uBV$G(B'V'(shift+v)$B$G2hA|$rJ]B8(B($B%5%`%M%$%k$G$O$J$/!"(B ;; $B85$NBg$-$$2hA|(B) ;; ;; Esc+Enter$B$G(BURL$B$r%V%i%&%6$G3+$/(B($B4{B85!G=$K4]Ej$2(B)$B!#2hA|%S%e!<%"!<$,;X(B ;; $BDj$5$l$F$k$H!"$=$N(BURL$B$r3+$/$N$G%j%b!<%H$J%U%!%$%k$r3+$1$k%S%e!<%"!<(B ;; $B$,I,MW(B($B85!9$=$NF0:n(B) ;; ;; $B%5%`%M%$%k$K%+!<%=%k$,$"$k>uBV$G(B'C-cC-d'$B$r2!$9$H%-%c%C%7%e2hA|$r:o=|(B. ;; ;; 'T'$B$r2!$9$H%+!<%=%k$,$"$k%l%9(B1$B8D$N%l%9Fb$N(BURL$B$rA4.$G%"%9%Z%/%HHfJ];}(B)" :type 'integer :group 'navi2ch) (defcustom navi2ch-thumbnail-thumbsize-height 150 "* $B%5%`%M%$%kI=<(%5%$%:=D(B($BEyG\=L>.$G%"%9%Z%/%HHfJ];}(B)" :type 'integer :group 'navi2ch) (defcustom navi2ch-thumbnail-use-mac-sips nil "* $B%5%`%M%$%k:n@.$K(BMacOSX$B$NI8=`%D!<%k$G$"$k(Bsips$B$r;H$&(B" :type 'bool :group 'navi2ch) (defcustom navi2ch-thumbanil-imagemagick-resize-option "-sample" "* ImageMagick $B$G3HBg=L>.$r9T$J$&$5$$$N%*%W%7%g%s(B" :group 'navi2ch :type '(radio (const :format "-sample ($B9bB.(B)" "-sample") (const :format "-resize ($B9b2h ;; http://img1.imepic.jp/image/20111231/11111.jpg?550e3768ff8455488ae8d5582f55db6d ("h?ttp://imepic\\.jp/\\([0-9/]+\\)" ".jpg" navi2ch-thumbnail-imepic "http://img1.imepic.jp/image/") ("h?ttp://[a-z].pic.to/.+" ".jpg" navi2ch-thumbnail-picto nil) ("h?t?tp://twitpic.com/[0-9a-z]+" ".jpg" navi2ch-thumbnail-twitpic nil) ) "$B%j%9%H9=B$(B 0:$BBP>](BURL$B@55,I=8=(B 1:$BI,MW$J$i$PIU2C3HD%;R(B($B3HD%;RL5$7$@$H2hA|%S%e!<%"!<$,l9g(B) 3:$BCV49@55,I=8=(B($B>e5-(B0$B$G=&$C$?@55,I=8=$rKvHx$KIU2C(B)" ) (defun navi2ch-thumbnail-image-pre (url &optional force) "force$B$O%9%l:FIA2h$G$O(Bnil" (let ((rtn nil) (real-image-url url) (target-list nil) (cache-url url)) ;;imepita$BEy$N(BURL$B$,2hA|$C$]$/$J$$>l9g$N=hM}(B (dolist (l navi2ch-thumbnail-url-coversion-table) (setq url-regex (nth 0 l)) (setq ext (nth 1 l)) (when (string-match url-regex url) (setq target-list l) (if ext (setq cache-url (concat url ext))))) ;;$B%-%c%C%7%e$,$"$k>l9g$O%-%c%C%7%eI=<((B (setq rtn (navi2ch-thumbnail-insert-image-cache cache-url)) ;;$B%-%c%C%7%e$,L5$$$N$Gl9g(B (if target-list (setq real-image-url (funcall (nth 2 target-list) url (nth 0 target-list) (nth 3 target-list)))) (setq rtn (navi2ch-thumbnail-show-image real-image-url cache-url url)) rtn ))) (defun navi2ch-thumbnail-url-replace (url regex-src-url regex-dist-url) "URL$B$NC1=cCV49(B" (string-match regex-src-url url) (message "%s" regex-dist-url) (concat regex-dist-url (match-string 1 url))) (defun navi2ch-thumbnail-picto (url &optional dummy0 dummy1) "pic.to$B$N>l9g$N2hA|$r
 cont)
        (setq img-url (concat url (match-string 1 cont)))
      (error l9g$N2hA|$rl9g$N2hA|$rl9g$N=hM}(B" ;; (let (alturl rtn) ;; (cond ;; ;; imepita ;; ((string-match "h?ttp://w*\\.?imepita\\.jp/\\([0-9/]+\\)" url) ;; (setq alturl (concat "http://imepita.jp/image/" (match-string 1 url))) ;; ;;$B3HD%;R$NL5$$2hA|$O30It%S%e!<%"!<$,G'<1$K<:GT$9$k>l9g$,$"$k$N$G(B ;; ;;$B3HD%;R$r6/@)IU2C$9$k(B ;; (setq url (concat url ".jpg")) ;; (message "imepita: %s %s" url alturl) ;; (if (navi2ch-thumbnail-insert-image-cache url) ;; (message "cache read") ;; (when force ;; (setq rtn (navi2ch-thumbnail-show-image alturl url)) ;; (message "return %s" rtn)))) ;; ((string-match ;; "h?ttp://i-bbs\\.sijex\\.net/imageDisp\\.jsp\\?id=watahiki&file=\\([0-9o]+\\.jpg\\)" ;; url) ;; (message "sjex: %s" url) ;; (setq alturl (concat "http://image.i-bbs.sijex.net/bbs/watahiki/" ;; (match-string 1 url))) ;; (if (navi2ch-thumbnail-insert-image-cache alturl) ;; (message "sijex $B%-%c%C%7%e$+$iFI$_9~$_$^$7$?(B") ;; (message "sijex: %s %s" url alturl) ;; (if force ;; (navi2ch-thumbnail-show-image alturl url)))) ;; ((string-match ;; "h?t?tp://twitpic.com/[0-9a-z]+" url) ;; (if (navi2ch-thumbnail-insert-image-cache url) ;; (message "cache read") ;; (when force ;; (setq alturl (navi2ch-thumbnail-twitpic-url2img url)) ;; (message "twitpic: %s %s" url alturl) ;; (setq rtn (navi2ch-thumbnail-show-image alturl url)) ;; (message "return %s" rtn)))) ;; (t nil)))) (defun navi2ch-thumbnail-show-image-external () "$B30It%S%e!<%"!<$GI=<((B" (interactive) (let ((type (car (get-text-property (point) 'display))) (prop (get-text-property (point) 'navi2ch-link))) (when (eq type 'image) (navi2ch-browse-url-image (if (eq system-type 'windows-nt) (navi2ch-replace-string "/" "\\\\" prop t) prop))))) (defun navi2ch-thumbnail-image-delete-cache () "$B$K;H$($J$$J8;z$r%(%9%1!<%W(B" (navi2ch-replace-string-regexp-alist '(("-" . "%2d") (":" . "%3a") ("\\?" . "%63")) filename t)) ;; (defun navi2ch-thumbnail-show-image (url alturl &optional referer) ;; "$B2hA|$r=L>.$7%$%s%i%$%s$KI=<($9$k!%(B" ;; (let ((prop (get-text-property (point) 'navi2ch-image-shown))) ;; (unless (string= prop "shown") ;; (navi2ch-thumbnail-show-image-subr url alturl referer)))) (defun navi2ch-thumbnail-show-image (url org-url &optional referer) (save-excursion (let ((buffer-read-only nil) (thumb-dir navi2ch-thumbnail-thumbnail-directory) thumb-file file width height size anime filename image-attr) (unless (and (stringp org-url) (string-match "tps?://\\(.+\\)$" org-url)) (error "URL not match")) (setq file (expand-file-name (navi2ch-thumbnail-image-escape-filename (match-string 1 org-url)) thumb-dir)) (setq thumb-file (concat file ".jpg")) (when (navi2ch-net-update-file url file nil nil nil nil (when referer (list (cons "Referer" referer)))) (unless (file-exists-p file) (error "$B%U%!%$%k$,$"$j$^$;$s(B %s" file)) (unless (image-type-from-file-header file) (let (buffer-error) (with-temp-buffer (insert-file-contents file nil 0 500) (setq buffer-error (buffer-string))) (delete-file file) (error "$B2hA|%U%!%$%k$G$O$"$j$^$;$s(B %s %s" file buffer-error))) (setq filename (file-name-nondirectory file)) (setq image-attr (navi2ch-thumbnail-image-identify file)) (if (not image-attr) (error "$B2hA|%U%!%$%k$r<1JL$G$-$^$;$s(B %s" file)) (setq anime (nth 2 image-attr)) (setq width (nth 0 image-attr)) (setq height (nth 1 image-attr)) (setq size (nth 7 (file-attributes file))) (cond ((and (< width navi2ch-thumbnail-thumbsize-width) (< height navi2ch-thumbnail-thumbsize-height)) (copy-file file thumb-file) (insert-image (navi2ch-create-image file))) ((fboundp 'imagemagick-types) (let ((thumb (navi2ch-create-image file 'imagemagick nil :width navi2ch-thumbnail-thumbsize-width :height navi2ch-thumbnail-thumbsize-height))) (with-temp-buffer (set-buffer-multibyte nil) (insert (plist-get (cdr thumb) :data)) (write-region (point-min) (point-max) thumb-file)) (insert-image thumb))) (t (with-temp-buffer (cond ;;MacOSX$B$O(Bsips$B$H$$$&I8=`%D!<%k$G2hA|JQ49$G$-$k(B ;;GIF$B%"%K%a=hM}$O=L>.$@$1$G$G$-$k(B($B!)(B) (navi2ch-thumbnail-use-mac-sips (call-process "sips" nil t nil "-s" "format" "jpeg" file "--out" thumb-file) (call-process "sips" nil t nil "--resampleHeight" (number-to-string navi2ch-thumbnail-thumbsize-height) thumb-file "--out" thumb-file)) (t (if (or (not anime) (fboundp 'create-animated-image)) (call-process navi2ch-thumbnail-image-convert-program nil t nil navi2ch-thumbanil-imagemagick-resize-option (format "%sx%s" navi2ch-thumbnail-thumbsize-width navi2ch-thumbnail-thumbsize-height) file thumb-file) ;; GIF$B%"%K%a$O(B1$B%U%l!<%`$@$1$r;H$&(B (call-process navi2ch-thumbnail-image-convert-program nil t nil "-scene" "0" navi2ch-thumbanil-imagemagick-resize-option (format "%sx%s" navi2ch-thumbnail-thumbsize-width navi2ch-thumbnail-thumbsize-height) file (concat file ".jpg")) (rename-file (concat file "-0" ".jpg") thumb-file) (dolist (delfile (directory-files (file-name-directory thumb-file) t (concat (file-name-nondirectory file) "-.+\.jpg"))) (delete-file delfile)) (message "gif anime %s" anime))))) (insert-image (navi2ch-create-image thumb-file)))) (add-text-properties (1- (point)) (point) (list 'link t 'link-head t 'url file 'help-echo file 'navi2ch-link-type 'image 'navi2ch-link file 'file-name filename 'width width 'height height 'size size))) (insert (format " (%s x %s :%s%sk) " width height (if anime " GIF ANIME" "") (round (/ size 1024)))) (when (re-search-forward (concat "h?ttps?://\\([^ \t\n\r]+\\." (regexp-opt navi2ch-browse-url-image-extentions t) "\\)") nil t) (save-excursion (let ((url (concat "http://" (match-string 1))) (beg (match-beginning 0)) (end (match-end 0))) (add-text-properties beg end '(navi2ch-image-shown "shown")))))))) (defun navi2ch-thumbnail-select-current-link (&optional browse-p) (interactive "P") (let ((type (get-text-property (point) 'navi2ch-link-type)) (prop (get-text-property (point) 'navi2ch-link)) url) (cond ((eq type 'url) (cond ((and (not (navi2ch-thumbnail-image-shown-p)) (string-match navi2ch-thumbnail-image-url-regex prop)) (navi2ch-thumbnail-image-pre prop t) ; (message "not image url but image") ) ((and (file-name-extension prop) (member (downcase (file-name-extension prop)) navi2ch-browse-url-image-extentions)) ; (when (not (navi2ch-thumbnail-insert-image-cache ; (substring prop 7 nil))) ; (setq url (navi2ch-thumbnail-url-status-check prop)) ; (dolist (l navi2ch-thumbnail-404-list) ; (when (string-match l url) ; (error "$B%U%!%$%k$,(B404 url=%s" url))) ; (navi2ch-thumbnail-show-image url prop)) ))) ((eq type 'image) (navi2ch-thumbnail-show-image-external))))) (defun navi2ch-thumbnail-url-status-check (url) "$B2hA|l9g0\F0@h(BURL$B$rJV$9(B" (when navi2ch-thumbnail-enable-status-check (let (header status md5 proc) (while (not (or (string= status "200") (string= status "201") (string= status "400") (string= status "405"))) (setq proc (navi2ch-net-send-request url "HEAD" (list ; (cons "User-Agent:" navi2ch-net-user-agent) (cons "Referer" url ) ))) (unless proc (error "$B%5!<%P$K@\B3$G$-$^$;$s(B url=%s" url)) (setq status (navi2ch-net-get-status proc)) (unless status (error "$B%5!<%P$K@\B3$G$-$^$;$s(B url=%s" url)) (message "status %s" status) ;; (setq header (navi2ch-net-get-header proc)) ;; (when (setq md5 (cdr (assq 'Content-MD5 header))) ;; (error "Content-MD5 %s" md5)) (cond ((or (string= status "404") (string= status "403") (string= status "408") (string= status "503")) (error "$B%V%i%&%:$9$k$N$d$a$^$7$?(B return code %s" status)) ((or (string= status "301") (string= status "302") (string= status "303") (string= status "307") ) (setq header (navi2ch-net-get-header proc)) (setq url (cdr (assq 'location header))) (message "loacation %s" url)))))) url) (defun navi2ch-thumbnail-image-jpeg-identify (data) (let ((len (length data)) (i 2) (anime nil)) (catch 'jfif ; (while (< i len) ;;read more 8 byte in loop (while (< i (- len 8)) (let ((nbytes (+ (lsh (aref data (+ i 2)) 8) (aref data (+ i 3)))) (code (aref data (1+ i)))) (cond ; ( ; (= code #xc4) ;; DHT ; (message "navi2ch-thumbnail-image-jpeg-identify:code FFC4 DHT")) ((and (>= code #xc0) (<= code #xcF)) ;; SOF0 DCT ;; SOF2 ; (if (= code #xc2) ; (message "navi2ch-thumbnail-image-jpeg-identify:SOF2")) (let ((sample (aref data (+ i 4))) (ysize (+ (lsh (aref data (+ i 5)) 8) (aref data (+ i 6)))) (xsize (+ (lsh (aref data (+ i 7)) 8) (aref data (+ i 8))))) (throw 'jfif (list xsize ysize anime))))) ;;skip x00(end marker) xff(start marker) (setq i (+ i 2 nbytes))))))) (defun navi2ch-thumbnail-image-png-identify (data) (let ((i 8) (anime nil)) ;; magic number (when (string-match "\\`\x49\x48\x44\x52" (substring data (+ i 4))) (let (;; 4byte (xsize (+ (lsh (aref data (+ i 8)) 24) (lsh (aref data (+ i 9)) 16) (lsh (aref data (+ i 10)) 8) (aref data (+ i 11)))) ;; 4byte (ysize (+ (lsh (aref data (+ i 12)) 24) (lsh (aref data (+ i 13)) 16) (lsh (aref data (+ i 14)) 8) (aref data (+ i 15))))) (list xsize ysize anime))))) (defun navi2ch-thumbnail-image-gif-identify (data) (let ((i 0) (len (length data)) xsize ysize (anime nil) sgct slct) (setq i (+ i 6)) ;; GIF Header ;; 2byte (setq xsize (+ (lsh (aref data (+ i 1)) 8) (aref data i))) (setq i (+ i 2)) ;; 2byte (setq ysize (+ (lsh (aref data (+ i 1)) 8) (aref data (+ i 0)))) (setq i (+ i 2)) ;; Size of Global Color Table(3 Bits) (setq sgct (+ 1 (logand (aref data i) 7))) (setq i (+ i 3)) ;; skip Global Color Table (setq i (+ i (* (expt 2 sgct) 3))) ;; Block (while (< i len) (cond ((= (aref data (+ i 0)) #x21) (setq i (+ i 1)) (cond ;; Graphic Control Extension ((= (aref data (+ i 0)) #xf9) (message "Graphic Control Extension") (setq i (+ i 7))) ;; maybe GIF Anime ((= (aref data (+ i 0)) #xff) (message "Application Extension GIF ANIME") (setq anime t) (setq i (+ i 7))) ((= (aref data (+ i 0)) #xfe) (message "Comment Extension") (setq i (+ i 1)) (setq i (+ i (aref data i))) (setq i (+ i 2)) ))) ;; image block table ((= (aref data (+ i 0)) #x2c) (message "Image Block") (setq i (+ i 9)) (setq slct (+ 1(logand (aref data i) 7))) (setq i (+ i (* (expt 2 slct) 3))) (setq i (+ i (aref data i))) (setq i (+ i 1)) ; (message "last i:%s" i) ) (t (setq i (+ i 1024))))) (list xsize ysize anime))) (defun navi2ch-thumbnail-image-identify (file &optional size) "$B2hA|%U%!%$%k$+$iI}(B,$B9b$5(B,GIF$B%"%K%a$+!)$rl9g$O30It%W%m%0%i%`(B(navi2ch-thumbnail-image-identify-program)$B$KMj$k!#(B $B$=$l$G$b%@%a$J$i(Bnil$B$rJV$9!#(Bsize$B$GFI$_9~$`%5%$%:$r;XDj$b$G$-$k(B" (let ((file-size (nth 7 (file-attributes file))) data rtn) (catch 'identify (unless (file-readable-p file) (throw 'identify nil)) (with-temp-buffer (set-buffer-multibyte nil) (unless size (setq size 1024)) (insert-file-contents-literally file nil 0 size) (setq data (buffer-substring (point-min) (min (point-max) (+ (point-min) size)))) (cond ;; gif ((string-match "\\`GIF" data) (setq rtn (navi2ch-thumbnail-image-gif-identify data))) ;; png ((string-match "\\`\x89\x50\x4E\x47\x0D\x0A\x1A\x0A" data) (setq rtn (navi2ch-thumbnail-image-png-identify data))) ;; jpeg ((string-match "\\`\xff\xd8" data) (setq rtn (navi2ch-thumbnail-image-jpeg-identify data)))) (if rtn (throw 'identify rtn))) ;; $B>pJs$,l9g$O%X%C%@$r$5$i$KFI$_9~$`(B (setq size (* size 10)) (if (> size file-size) (setq size file-size)) ; (message "navi2ch-thumbnail-image-identify:re-read size=%s %s" size file) (setq rtn (navi2ch-thumbnail-image-identify file size)) (if rtn (throw 'identify rtn)) ;; $B$=$l$G$bL5M}$J$i30It%W%m%0%i%`$KMj$k(B (when (and (= size file-size) navi2ch-thumbnail-image-identify-program) (message "identify called %s" file) (with-temp-buffer (cond (navi2ch-thumbnail-use-mac-sips (let (width height) (call-process 'sips' nil t nil "-g" "-all" file) (when (re-search-forward "pixelWidth: \\([0-9]+\\)") (setq width (string-to-number (match-string 1)))) (when (re-search-forward "pixelHeight: \\([0-9]+\\)") (setq height (string-to-number (match-string 1)))) ;;anime gif$B$O$"$-$i$a$k(B (list width height nil))) (t (call-process navi2ch-thumbnail-image-identify-program nil t nil "-quiet" "-format" "\"%n %w %h %b\"" file) (goto-char (point-min)) (when (re-search-forward "\\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\)") (list (string-to-number (match-string 2)) (string-to-number (match-string 3)) (> (string-to-number (match-string 1)) 1)))))))))) navi2ch/navi2ch-util.el000066400000000000000000001542631173560164300152600ustar00rootroot00000000000000;;; navi2ch-util.el --- useful utilities for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, ;; 2009 by Navi2ch Project ;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free ;; Software Foundation, Inc. ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-util) (defconst navi2ch-util-ident "$Id$") (eval-when-compile (require 'cl)) (require 'timezone) (require 'browse-url) (require 'base64) (require 'navi2ch-vars) (defun navi2ch-alist-to-hash (alist &rest keywords-args) (let ((table (apply #'make-hash-table :size (length alist) keywords-args))) (dolist (x alist table) (puthash (car x) (cdr x) table)))) (defvar navi2ch-mode-line-identification nil) (make-variable-buffer-local 'navi2ch-mode-line-identification) (defvar navi2ch-replace-html-tag-alist '((">" . ">") ("<" . "<") (""" . "\"") (" " . " ") ("&" . "&") ("
" . "\n") ("
" . "\n--\n")) "$BCV49$9$k(B html $B$N%?%0$NO"A[%j%9%H(B ($B@55,I=8=$O;H$($J$$(B)$B!#(B") (defvar navi2ch-replace-html-tag-regexp-alist '(("]*>" . "") ("&[a-z][a-z0-9]*;?" . navi2ch-entity-reference-to-str) ("&#[0-9]+;?" . navi2ch-numeric-reference-to-str) ("&#[xX][0-9a-fA-f]+;?" . navi2ch-hexadecimal-reference-to-str)) "$BCV49$9$k(B html $B$N%?%0$NO"A[%j%9%H(B($B@55,I=8=(B) $BCV49@h$,4X?t$@$H!"CV4985$r0z?t$H$7$F$=$N4X?t$r8F$S$@$7$?$b$N$GCV$-BX$($k!#(B $B@55,I=8=$,I,MW$J$$>l9g$O(B `navi2ch-replace-html-tag-alist' $B$KF~$l$k(B") (defvar navi2ch-replace-html-tag-regexp-internal nil "$BCV49$9$k(B html $B$N%?%0$N@55,I=8=!#(B") (defvar navi2ch-entity-table (navi2ch-alist-to-hash '(("iexcl" . 161) ("cent" . 162) ("pound" . 163) ("curren" . 164) ("yen" . 165) ("brvbar" . 166) ("sect" . 167) ("uml" . 168) ("copy" . 169) ("ordf" . 170) ("laquo" . 171) ("not" . 172) ("shy" . 173) ("reg" . 174) ("macr" . 175) ("deg" . 176) ("plusmn" . 177) ("sup2" . 178) ("sup3" . 179) ("acute" . 180) ("micro" . 181) ("para" . 182) ("middot" . 183) ("cedil" . 184) ("sup1" . 185) ("ordm" . 186) ("raquo" . 187) ("frac14" . 188) ("frac12" . 189) ("frac34" . 190) ("iquest" . 191) ("Agrave" . 192) ("Aacute" . 193) ("Acirc" . 194) ("Atilde" . 195) ("Auml" . 196) ("Aring" . 197) ("AElig" . 198) ("Ccedil" . 199) ("Egrave" . 200) ("Eacute" . 201) ("Ecirc" . 202) ("Euml" . 203) ("Igrave" . 204) ("Iacute" . 205) ("Icirc" . 206) ("Iuml" . 207) ("ETH" . 208) ("Ntilde" . 209) ("Ograve" . 210) ("Oacute" . 211) ("Ocirc" . 212) ("Otilde" . 213) ("Ouml" . 214) ("times" . 215) ("Oslash" . 216) ("Ugrave" . 217) ("Uacute" . 218) ("Ucirc" . 219) ("Uuml" . 220) ("Yacute" . 221) ("THORN" . 222) ("szlig" . 223) ("agrave" . 224) ("aacute" . 225) ("acirc" . 226) ("atilde" . 227) ("auml" . 228) ("aring" . 229) ("aelig" . 230) ("ccedil" . 231) ("egrave" . 232) ("eacute" . 233) ("ecirc" . 234) ("euml" . 235) ("igrave" . 236) ("iacute" . 237) ("icirc" . 238) ("iuml" . 239) ("eth" . 240) ("ntilde" . 241) ("ograve" . 242) ("oacute" . 243) ("ocirc" . 244) ("otilde" . 245) ("ouml" . 246) ("divide" . 247) ("oslash" . 248) ("ugrave" . 249) ("uacute" . 250) ("ucirc" . 251) ("uuml" . 252) ("yacute" . 253) ("thorn" . 254) ("yuml" . 255) ("fnof" . 402) ("Alpha" . 913) ("Beta" . 914) ("Gamma" . 915) ("Delta" . 916) ("Epsilon" . 917) ("Zeta" . 918) ("Eta" . 919) ("Theta" . 920) ("Iota" . 921) ("Kappa" . 922) ("Lambda" . 923) ("Mu" . 924) ("Nu" . 925) ("Xi" . 926) ("Omicron" . 927) ("Pi" . 928) ("Rho" . 929) ("Sigma" . 931) ("Tau" . 932) ("Upsilon" . 933) ("Phi" . 934) ("Chi" . 935) ("Psi" . 936) ("Omega" . 937) ("alpha" . 945) ("beta" . 946) ("gamma" . 947) ("delta" . 948) ("epsilon" . 949) ("zeta" . 950) ("eta" . 951) ("theta" . 952) ("iota" . 953) ("kappa" . 954) ("lambda" . 955) ("mu" . 956) ("nu" . 957) ("xi" . 958) ("omicron" . 959) ("pi" . 960) ("rho" . 961) ("sigmaf" . 962) ("sigma" . 963) ("tau" . 964) ("upsilon" . 965) ("phi" . 966) ("chi" . 967) ("psi" . 968) ("omega" . 969) ("thetasym" . 977) ("upsih" . 978) ("piv" . 982) ("bull" . 8226) ("hellip" . 8230) ("prime" . 8242) ("Prime" . 8243) ("oline" . 8254) ("frasl" . 8260) ("weierp" . 8472) ("image" . 8465) ("real" . 8476) ("trade" . 8482) ("alefsym" . 8501) ("larr" . 8592) ("uarr" . 8593) ("rarr" . 8594) ("darr" . 8595) ("harr" . 8596) ("crarr" . 8629) ("lArr" . 8656) ("uArr" . 8657) ("rArr" . 8658) ("dArr" . 8659) ("hArr" . 8660) ("forall" . 8704) ("part" . 8706) ("exist" . 8707) ("empty" . 8709) ("nabla" . 8711) ("isin" . 8712) ("notin" . 8713) ("ni" . 8715) ("prod" . 8719) ("sum" . 8721) ("minus" . 8722) ("lowast" . 8727) ("radic" . 8730) ("prop" . 8733) ("infin" . 8734) ("ang" . 8736) ("and" . 8743) ("or" . 8744) ("cap" . 8745) ("cup" . 8746) ("int" . 8747) ("there4" . 8756) ("sim" . 8764) ("cong" . 8773) ("asymp" . 8776) ("ne" . 8800) ("equiv" . 8801) ("le" . 8804) ("ge" . 8805) ("sub" . 8834) ("sup" . 8835) ("nsub" . 8836) ("sube" . 8838) ("supe" . 8839) ("oplus" . 8853) ("otimes" . 8855) ("perp" . 8869) ("sdot" . 8901) ("lceil" . 8968) ("rceil" . 8969) ("lfloor" . 8970) ("rfloor" . 8971) ("lang" . 9001) ("rang" . 9002) ("loz" . 9674) ("spades" . 9824) ("clubs" . 9827) ("hearts" . 9829) ("diams" . 9830) ("OElig" . 338) ("oelig" . 339) ("Scaron" . 352) ("scaron" . 353) ("Yuml" . 376) ("circ" . 710) ("tilde" . 732) ("ensp" . 8194) ("emsp" . 8195) ("thinsp" . 8201) ("zwnj" . 8204) ("zwj" . 8205) ("lrm" . 8206) ("rlm" . 8207) ("ndash" . 8211) ("mdash" . 8212) ("lsquo" . 8216) ("rsquo" . 8217) ("sbquo" . 8218) ("ldquo" . 8220) ("rdquo" . 8221) ("bdquo" . 8222) ("dagger" . 8224) ("Dagger" . 8225) ("permil" . 8240) ("lsaquo" . 8249) ("rsaquo" . 8250) ("euro" . 8364)) :test 'equal)) (defconst navi2ch-uuencode-begin-delimiter-regexp "^begin \\([0-7]+\\) \\([^ \n]+\\)$" "uuencode $B$5$l$?%3!<%I$NA0$N%G%j%_%?$K%^%C%A$9$k@55,I=8=!#(B") (defconst navi2ch-uuencode-end-delimiter-regexp "^end\\([ \t]*\\)$" "uuencode $B$5$l$?%3!<%I$N8e$N%G%j%_%?$K%^%C%A$9$k@55,I=8=!#(B") (defconst navi2ch-uuencode-line-regexp "^[!-`]+$" "uuencode $B$5$l$?%3!<%I$N$_$,4^$^$l$k9T$K%^%C%A$9$k@55,I=8=!#(B") (defconst navi2ch-base64-begin-delimiter "----BEGIN BASE64----" "base64 $B%3!<%I$NA0$KA^F~$9$k%G%j%_%?!#(B") (defconst navi2ch-base64-end-delimiter "----END BASE64----" "base64 $B%3!<%I$N8e$KA^F~$9$k%G%j%_%?!#(B") (defconst navi2ch-base64-begin-delimiter-regexp (format "^%s\\((\\([^\)]+\\))\\)?.*$" (regexp-quote navi2ch-base64-begin-delimiter)) "base64 $B%3!<%I$NA0$N%G%j%_%?$K%^%C%A$9$k@55,I=8=!#(B") (defconst navi2ch-base64-end-delimiter-regexp (format "^%s.*$" (regexp-quote navi2ch-base64-end-delimiter)) "base64 $B%3!<%I$N8e$N%G%j%_%?$K%^%C%A$9$k@55,I=8=!#(B") (defconst navi2ch-base64-susv3-begin-delimiter-regexp "^begin-base64 \\([0-7]+\\) \\([^ \n]+\\)$" "SUSv3 $B$N(B uuencode $B$G:n@.$5$l$k(B base64 $B%3!<%I$NA0$N%G%j%_%?$K%^%C%A$9$k@55,I=8=(B") (defconst navi2ch-base64-susv3-end-delimiter-regexp "^====$" "SUSv3 $B$N(B uuencode $B$G:n@.$5$l$k(B base64 $B%3!<%I$N8e$N%G%j%_%?$K%^%C%A$9$k@55,I=8=(B") (defconst navi2ch-base64-line-regexp (concat "^\\([+/0-9A-Za-z][+/0-9A-Za-z][+/0-9A-Za-z][+/0-9A-Za-z]\\)*" "[+/0-9A-Za-z][+/0-9A-Za-z][+/0-9A-Za-z=][+/0-9A-Za-z=] *$") "base64 $B%3!<%I$N$_$,4^$^$l$k9T$K%^%C%A$9$k@55,I=8=!#(B") (defvar navi2ch-offline nil "$B%*%U%i%$%s%b!<%I$+$I$&$+!#(B") (defvar navi2ch-online-indicator "[ON] ") (defvar navi2ch-offline-indicator "[--] ") (defvar navi2ch-modeline-online navi2ch-online-indicator) (defvar navi2ch-modeline-offline navi2ch-offline-indicator) (defvar navi2ch-modeline-be2ch-login "[BE] ") (defvar navi2ch-modeline-be2ch-logout "") (put 'navi2ch-modeline-online 'risky-local-variable t) (put 'navi2ch-modeline-offline 'risky-local-variable t) (put 'navi2ch-modeline-be2ch-login 'risky-local-variable t) (put 'navi2ch-modeline-be2ch-logout 'risky-local-variable t) ;; shut up XEmacs warnings (eval-when-compile (defvar minibuffer-allow-text-properties)) ;;;; macros (defmacro navi2ch-ifxemacs (then &rest else) "If on XEmacs, do THEN, else do ELSE. Like \"(if (featurep 'xemacs) THEN ELSE)\", but expanded at compilation time. Because byte-code of XEmacs is not compatible with GNU Emacs's one, this macro is very useful." (if (featurep 'xemacs) then (cons 'progn else))) ;; Navi2ch$B$N%3!<%I$r%O%/$9$k?M$O"-$r(B~/.emacs$B$K$bF~$l$H$-$^$7$g$&!#(B (put 'navi2ch-ifxemacs 'lisp-indent-function 1) (defmacro navi2ch-ifemacsce (then &rest else) "If on EmacsCE, do THEN, else do ELSE. Expanded at compilation time." `(if (string-match "windowsce" system-configuration) ,then (progn ,@else))) (put 'navi2ch-ifemacsce 'lisp-indent-function 1) ;; from apel (eval-and-compile (defmacro navi2ch-defalias-maybe (symbol definition) "Define SYMBOL as an alias for DEFINITION if SYMBOL is not defined. See also the function `defalias'." (setq symbol (eval symbol)) (or (and (fboundp symbol) (not (get symbol 'defalias-maybe))) `(or (fboundp (quote ,symbol)) (prog1 (defalias (quote ,symbol) ,definition) ;; `defalias' updates `load-history' internally. (put (quote ,symbol) 'defalias-maybe t)))))) (defmacro navi2ch-with-default-file-modes (mode &rest body) "default-file-modes $B$r(B MODE $B$K$7$F(B BODY $B$rl9g$O!"%^%C%A$7$?J8;zNs$r0z?t$K$7$F$=$N4X?t$r8F$S=P$9!#(B FIXEDCASE$B!"(BLITERAL $B$O(B `replace-match' $B$K$=$N$^$^EO$5$l$k!#(B ALL $B$,(B non-nil $B$J$i$P!"%^%C%A$7$?%F%-%9%H$r$9$Y$FCV49$9$k!#(Bnil $B$J$i(B $B:G=i$N(B1$B$D$@$1$rCV49$9$k!#(B REGEXP $B$,8+$D$+$i$J$$>l9g!"(BSTRING $B$r$=$N$^$^JV$9!#(B" (save-match-data (if all ;; Emacs 21 $B$N(B replace-regexp-in-string $B$N%Q%/$j!#(B (let ((start 0) (l (length string)) mb me str matches) (while (and (< start l) (string-match regexp string start)) (setq mb (match-beginning 0) me (match-end 0)) (if (= mb me) (setq me (min l (1+ mb)))) (string-match regexp (setq str (substring string mb me))) (setq matches (cons (replace-match (if (stringp rep) rep (funcall rep (match-string 0 str))) fixedcase literal str) (cons (substring string start mb) matches))) (setq start me)) (apply #'concat (nreverse (cons (substring string start l) matches)))) (when (string-match regexp string) (setq string (replace-match (if (stringp rep) rep (funcall rep (match-string 0 string))) fixedcase literal string))) string))) (defun navi2ch-replace-string-regexp-alist (regexp-alist string &optional all fixedcase literal) "STRING $BCf$+$i!"(BREGEXP-ALIST $B$N3FMWAG$N(B car $B$r@55,I=8=$H$7!"(Bcdr $B$GCV49$9$k!#(B cdr $B$,4X?t$N>l9g$O!"%^%C%A$7$?J8;zNs$r0z?t$K$7$F$=$N4X?t$r8F$S=P$9!#(B FIXEDCASE$B!"(BLITERAL $B$O(B `replace-match' $B$K$=$N$^$^EO$5$l$k!#(B ALL $B$,(B non-nil $B$J$i$P!"%^%C%A$7$?%F%-%9%H$r$9$Y$FCV49$9$k!#(Bnil $B$J$i(B $B:G=i$N(B1$B$D$@$1$rCV49$9$k!#(B REGEXP $B$,8+$D$+$i$J$$>l9g!"(BSTRING $B$r$=$N$^$^JV$9!#(B" (save-match-data (let ((internal (navi2ch-regexp-alist-to-internal regexp-alist)) match rep) (if all ;; Emacs 21 $B$N(B replace-regexp-in-string $B$N%Q%/$j!#(B (let ((start 0) (l (length string)) mb me str matches) (while (and (< start l) (setq match (navi2ch-string-match-regexp-alist internal string start))) (setq mb (match-beginning 0) me (match-end 0)) (if (= mb me) (setq me (min l (1+ mb)))) (string-match (car match) (setq str (substring string mb me))) (setq rep (cdr match)) (setq matches (cons (replace-match (if (stringp rep) rep (funcall rep (match-string 0 str))) fixedcase literal str) (cons (substring string start mb) matches))) (setq start me)) (apply #'concat (nreverse (cons (substring string start l) matches)))) (when (navi2ch-string-match-regexp-alist internal string) (setq rep (cdr match)) (setq string (replace-match (if (stringp rep) rep (funcall rep (match-string 0 string))) fixedcase literal string))) string)))) (defun navi2ch-insert-file-contents (file &optional begin end coding-system) (setq coding-system (or coding-system navi2ch-coding-system)) (let ((coding-system-for-read coding-system) (coding-system-for-write coding-system)) (insert-file-contents file nil begin end))) (defun navi2ch-expand-file-name (file) (let ((result (expand-file-name (mapconcat (lambda (ch) (if (memq ch navi2ch-file-name-reserved-char-list) (format "%%%02X" ch) (char-to-string ch))) (append file) "") navi2ch-directory))) (if (string-match (concat "^" (regexp-quote (file-name-as-directory (expand-file-name navi2ch-directory)))) result) result (error "Wrong file name")))) (eval-when-compile (navi2ch-defalias-maybe 'assoc-string 'ignore)) (defun navi2ch-replace-html-tag (str) (let ((case-fold-search t)) (navi2ch-replace-string-regexp-alist navi2ch-replace-html-tag-regexp-internal str t nil t))) (defun navi2ch-replace-html-tag-with-buffer () (goto-char (point-min)) (let ((case-fold-search t) match replace) (while (setq match (navi2ch-re-search-forward-regexp-alist navi2ch-replace-html-tag-regexp-internal nil t)) (setq replace (cdr match)) (replace-match (if (functionp replace) (funcall replace (match-string 0)) replace) nil t)))) (defun navi2ch-replace-html-tag-with-temp-buffer (str) (with-temp-buffer (insert str) (navi2ch-replace-html-tag-with-buffer) (buffer-string))) (defun navi2ch-entity-reference-to-str (ref) "$BJ8;zH$r%G%3!<%I!#(B" (save-match-data (if (and navi2ch-decode-character-references (string-match "&\\([^;]+\\)" ref)) (let ((code (gethash (match-string 1 ref) navi2ch-entity-table))) (or (and code (navi2ch-ucs-to-str code)) ref)) ref))) (defun navi2ch-numeric-reference-to-str (ref) "$B?tCMJ8;z;2>H$r%G%3!<%I!#(B" (save-match-data (if (and navi2ch-decode-character-references (string-match "&#\\([^;]+\\)" ref)) (or (navi2ch-ucs-to-str (string-to-number (match-string 1 ref))) "$B".(B") ref))) (defun navi2ch-hexadecimal-reference-to-str (ref) "16$B?J?tCMJ8;z;2>H$r%G%3!<%I!#(B" (save-match-data (if (and navi2ch-decode-character-references (string-match "&#[xX]\\([^;]+\\)" ref)) (let ((num)) (setq num (string-to-number (match-string 1 ref) 16)) (or (and num (navi2ch-ucs-to-str num)) "$B".(B")) ref))) ;; shut up byte-compile warnings (eval-when-compile (navi2ch-defalias-maybe 'unicode-to-char 'ignore) (navi2ch-defalias-maybe 'decode-char 'ignore)) (eval-and-compile ;; (autoload 'ucs-to-char "unicode") (defalias 'navi2ch-char-valid-p (if (fboundp 'characterp) #'characterp #'char-valid-p))) (defun navi2ch-ucs-to-str (code) (let ((c (cond ((featurep 'un-define) (ucs-to-char code)) ((and (fboundp 'unicode-to-char) (subrp (symbol-function 'unicode-to-char))) (unicode-to-char code)) (navi2ch-on-emacs21 (decode-char 'ucs code))))) (if (navi2ch-char-valid-p c) (char-to-string c) nil))) (defun navi2ch-read-char (&optional prompt) "PROMPT (non-nil $B$N>l9g(B) $B$rI=<($7$F(B `read-char' $B$r8F$S=P$9!#(B" (let ((cursor-in-echo-area t) c) (if prompt (navi2ch-no-logging-message "%s" prompt)) (setq c (read-char)) (if (and prompt (navi2ch-char-valid-p c)) (navi2ch-no-logging-message "%s%c" prompt c)) c)) (defun navi2ch-read-char-with-retry (prompt retry-prompt list) "PROMPT $B$rI=<((B (non-nil $B$N>l9g(B) $B$7$F(B `read-char' $B$r8F$S=P$9!#(B $BF~NO$5$l$?J8;z$,(B LIST $B$K4^$^$l$J$$>l9g!"(BRETRY-PROMPT (nil $B$N>l9g$O(B PROMPT) $B$rI=<($7$F:FEY(B `read-char' $B$r8F$V!#(B" (let ((retry t) c) (while retry (setq c (navi2ch-read-char prompt)) (cond ((memq c list) (setq retry nil)) ((eq c 12) (recenter)) (t (ding) (setq prompt (or retry-prompt prompt))))) c)) (defun navi2ch-read-event (&optional prompt) "PROMPT (non-nil $B$N>l9g(B) $B$rI=<($7$F(B event $B$rFI$`!#(B" (let ((cursor-in-echo-area t) e) (if prompt (navi2ch-no-logging-message "%s" prompt)) (navi2ch-ifxemacs (setq e (next-command-event nil prompt)) (setq e (read-event prompt))) (if prompt (navi2ch-no-logging-message "%s%s" prompt (single-key-description e))) e)) (defun navi2ch-y-or-n-p (prompt &optional quit-symbol) (let* ((prompt (concat prompt "(y, n, or q) ")) (c (navi2ch-read-char-with-retry prompt (concat "Please answer y, n, or q. " prompt) '(?q ?Q ?y ?Y ?\ ?n ?N ?\177)))) (cond ((memq c '(?q ?Q)) (or quit-symbol nil)) ((memq c '(?y ?Y ?\ )) t) ((memq c '(?n ?N ?\177)) nil)))) (eval-when-compile (defvar browse-url-new-window-flag) (defvar browse-url-new-window-p) (defun navi2ch-net-send-request (url method &optional other-header content)) (defun navi2ch-net-get-status (proc))) (defun navi2ch-browse-url-internal (url &rest args) (let ((browse-url-browser-function (or navi2ch-browse-url-browser-function browse-url-browser-function)) (new-window-flag (cond ((boundp 'browse-url-new-window-flag) browse-url-new-window-flag) ((boundp 'browse-url-new-window-p) browse-url-new-window-p))) proc status) (if (eq browse-url-browser-function 'navi2ch-browse-url) (error "Set navi2ch-browse-url-browser-function correctly")) ;;sssp$B$r(Bhttp$B$K=q$-49$((B (when (string= (substring url 0 4) "sssp") (store-substring url 0 "http")) ;;$BL5BL$r>J$/$?$a%V%i%&%:$9$kA0$K%?!<%2%C%H$N>uBV3NG'$9$k!#(B ;;$B$A$g$C$H87$7$$$h$&$@$,!"(B302$B$@$HBgDq(B404$B$KHt$P$5$l$k$N$G!#(B (when navi2ch-enable-status-check (setq proc (navi2ch-net-send-request url "HEAD")) (setq status (navi2ch-net-get-status proc)) (if (or (string= status "404") (string= status "403") (string= status "503") (string= status "302")) (error "$B%V%i%&%:$9$k$N$d$a$^$7$?(B return code %s" status))) (cond ((and navi2ch-browse-url-image-program ; images (file-name-extension url) (member (downcase (file-name-extension url)) navi2ch-browse-url-image-extentions)) (navi2ch-browse-url-image url)) (t ; others (setq args (or args (list new-window-flag))) (apply 'browse-url url args))))) (defun navi2ch-browse-url-image (url &optional new-window) ;; new-window ignored "Ask the WWW browser defined by `browse-url-image-program' to load URL. Default to the URL around or before point. A fresh copy of the browser is started up in a new process with possible additional arguments `navi2ch-browse-url-image-args'. This is appropriate for browsers which don't offer a form of remote control." (interactive (browse-url-interactive-arg "URL: ")) (if (not navi2ch-browse-url-image-program) (error "No browser defined (`navi2ch-browse-url-image-program')")) (apply 'start-process (concat navi2ch-browse-url-image-program url) nil navi2ch-browse-url-image-program (append navi2ch-browse-url-image-args (list url)))) ;; from apel (defsubst navi2ch-put-alist (item value alist) "Modify ALIST to set VALUE to ITEM. If there is a pair whose car is ITEM, replace its cdr by VALUE. If there is not such pair, create new pair (ITEM . VALUE) and return new alist whose car is the new pair and cdr is ALIST. \[tomo's ELIS like function]" (let ((pair (assoc item alist))) (if pair (progn (setcdr pair value) alist) (cons (cons item value) alist)))) (defun navi2ch-next-property (point prop) (setq point (next-single-property-change point prop)) (when (and point (null (get-text-property point prop))) (setq point (next-single-property-change point prop))) point) (defun navi2ch-previous-property (point prop) (when (> point (point-min)) (when (eq (get-text-property point prop) (get-text-property (1- point) prop)) (setq point (previous-single-property-change point prop))) (when (and point (null (get-text-property (1- point) prop))) (setq point (previous-single-property-change point prop))) (when point (or (previous-single-property-change point prop) (point-min))))) (defun navi2ch-set-minor-mode (mode name map) (make-variable-buffer-local mode) (unless (assq mode minor-mode-alist) (setq minor-mode-alist (cons (list mode name) minor-mode-alist))) (unless (assq mode minor-mode-map-alist) (setq minor-mode-map-alist (cons (cons mode map) minor-mode-map-alist)))) (defsubst navi2ch-default-directory () (cond ((file-directory-p navi2ch-directory) (file-name-as-directory navi2ch-directory)) ((file-directory-p (expand-file-name "~/")) (expand-file-name "~/")) (t temporary-file-directory))) (defun navi2ch-call-process-buffer (program &rest args) "$B:#$N(B buffer $B$G(B PROGRAM $B$r8F$s$GJQ99$9$k!#(B" (let ((default-directory (navi2ch-default-directory))) (apply 'call-process-region (point-min) (point-max) program t t nil args))) (defun navi2ch-alist-list-to-alist (list key1 &optional key2) (mapcar (lambda (x) (cons (cdr (assq key1 x)) (if key2 (cdr (assq key2 x)) x))) list)) (defun navi2ch-write-region (begin end filename) (write-region begin end filename nil 'no-msg)) (defun navi2ch-get-major-mode (buffer) (when (get-buffer buffer) (with-current-buffer buffer major-mode))) (defun navi2ch-set-mode-line-identification () (let ((offline '(navi2ch-offline navi2ch-modeline-offline navi2ch-modeline-online)) (belogin '(navi2ch-be2ch-login-flag navi2ch-modeline-be2ch-login navi2ch-modeline-be2ch-logout))) (unless navi2ch-mode-line-identification (setq navi2ch-mode-line-identification (default-value 'mode-line-buffer-identification))) (setq mode-line-buffer-identification (list offline belogin 'navi2ch-message-samba24-mode-string 'navi2ch-mode-line-identification))) (force-mode-line-update t)) (defun navi2ch-end-of-buffer () "$B%P%C%U%!$N:G=*9T$K0\F0!#(B" (interactive) (call-interactively 'end-of-buffer) (when (eobp) (forward-line -1))) (defun navi2ch-uudecode-region (start end &optional filename) "START $B$H(B END $B$N4V$N%j!<%8%g%s$r(B uudecode $B$9$k!#(B FILENAME $B$,;XDj$5$l$k$H!"(BFILENAME $B$K$b=q$-=P$9!#(B" (interactive "r") (let* ((coding-system-for-read 'binary) (coding-system-for-write 'binary) (mode "600") (file (expand-file-name (or filename (make-temp-name (navi2ch-temp-directory))))) (default-directory (file-name-directory file)) (buf (current-buffer)) rc) (unwind-protect (progn (with-temp-buffer (insert-buffer-substring buf start end) (goto-char (point-min)) (when (re-search-forward navi2ch-uuencode-begin-delimiter-regexp nil t) (setq mode (navi2ch-match-string-no-properties 1)) (forward-line) (delete-region (point-min) (point))) (insert (format "begin %s %s\n" mode (file-name-nondirectory file))) (goto-char (point-max)) (when (re-search-backward navi2ch-uuencode-end-delimiter-regexp nil t) (delete-region (match-beginning 0) (point-max))) (insert "end\n") (setq rc (apply 'call-process-region (point-min) (point-max) navi2ch-uudecode-program nil nil nil navi2ch-uudecode-args))) (when (and (= rc 0) (file-exists-p file)) (delete-region start end) (insert-file-contents-literally file) (when filename (message "Wrote %s" filename)))) (ignore-errors (unless filename (delete-file file)))) (when (not (= rc 0)) (error "uudecode error")))) (eval-and-compile (defalias 'navi2ch-line-beginning-position (if (fboundp 'point-at-bol) #'point-at-bol #'line-beginning-position)) (defalias 'navi2ch-line-end-position (if (fboundp 'point-at-eol) #'point-at-eol #'line-end-position))) (defun navi2ch-uudecode-write-region (start end &optional filename) "START $B$H(B END $B$N4V$N%j!<%8%g%s$r(B uudecode $B$7!"(BFILENAME $B$K=q$-=P$9!#(B $B%j!<%8%g%sFb$K(B `navi2ch-uuencode-begin-delimiter-regexp' $B$K%^%C%A$9$k9T$,$"$k(B $B>l9g$O$=$l0JA0$rL5;k$7!"(B`navi2ch-uuencode-end-delimiter-regexp' $B$K%^%C%A$9$k9T(B $B$,$"$k>l9g$O:G8e$N$=$l0J9_$rL5;k$9$k!#(B $B$5$i$K!"(Buuencode $B$N%U%)!<%^%C%H$K=>$C$F$$$J$$9T$bL5;k$9$k!#(B" (interactive "r") (let ((buf (current-buffer)) (default-filename nil)) (save-excursion (goto-char start) (when (re-search-forward navi2ch-uuencode-begin-delimiter-regexp end t) (setq start (match-beginning 0) default-filename (match-string 2))) (goto-char end) (when (re-search-backward navi2ch-uuencode-end-delimiter-regexp start t) ;; exclude "end" (setq end (match-beginning 0)))) (unless filename (setq filename (expand-file-name (read-file-name (if default-filename (format "Uudecode to file (default `%s'): " default-filename) "Uudecode to file: ") nil default-filename)))) (when (file-directory-p filename) (if default-filename (setq filename (expand-file-name default-filename filename)) (error "%s is a directory" filename))) (when (or (not (file-exists-p filename)) (y-or-n-p (format "File `%s' exists; overwrite? " filename))) (with-temp-buffer (insert-buffer-substring buf start end) (goto-char (point-min)) (while (search-forward "$B!)(B" nil t) ;for 2ch (replace-match "&#" nil t)) (goto-char (point-min)) (forward-line) (while (not (eobp)) (let* ((char (char-after)) (len (- (navi2ch-line-beginning-position 2) (point)))) (when (char-equal char ?`) (setq char ? )) (if (and (looking-at navi2ch-uuencode-line-regexp) (< len 63) (= len (- (* (/ char 3) 4) 38))) (forward-line) (delete-region (point) (navi2ch-line-beginning-position 2))))) (insert "end\n") (navi2ch-uudecode-region (point-min) (point-max) filename))))) (defun navi2ch-base64-write-region (start end &optional filename) "START $B$H(B END $B$N4V$N%j!<%8%g%s$r(B base64 $B%G%3!<%I$7!"(BFILENAME $B$K=q$-=P$9!#(B $B%j!<%8%g%sFb$K(B `navi2ch-base64-begin-delimiter-regexp' $B$+(B `navi2ch-base64-susv3-begin-delimiter-regexp' $B$K%^%C%A$9$k9T$,$"$k>l9g$O(B $B$=$l0JA0$rL5;k$7!"(B `navi2ch-base64-end-delimiter-regexp' $B$+(B `navi2ch-base64-susv3-end-delimiter-regexp' $B$K%^%C%A$9$k9T(B $B$,$"$k>l9g$O:G8e$N$=$l0J9_$rL5;k$9$k!#(B $B$5$i$K!"(B`navi2ch-base64-line-regexp' $B$K%^%C%A$7$J$$9T$bL5;k$9$k!#(B base64$B%G%3!<%I$9$Y$-FbMF$,$J$$>l9g$O%(%i!<$K$J$k!#(B" (interactive "r") (save-excursion (let ((buf (current-buffer)) (default-filename nil) (mode nil) (susv3 nil)) ;; insert$B$7$?8e$K:o$k$N$OL5BL$J$N$G$"$i$+$8$a9J$j9~$s$G$*$/(B (goto-char start) (cond ((re-search-forward navi2ch-base64-begin-delimiter-regexp end t) (setq default-filename (match-string 2)) (goto-char (match-end 0))) ((re-search-forward navi2ch-base64-susv3-begin-delimiter-regexp end t) (setq default-filename (match-string 2) mode (string-to-number (match-string 1) 8) susv3 t) (goto-char (match-end 0)))) (if (re-search-forward navi2ch-base64-line-regexp end t) (setq start (match-beginning 0)) (error "No base64 data")) (goto-char end) (if (or (and susv3 (re-search-backward navi2ch-base64-susv3-end-delimiter-regexp start t)) (re-search-backward navi2ch-base64-end-delimiter-regexp start t)) (goto-char (match-beginning 0))) (if (re-search-backward navi2ch-base64-line-regexp start t) (setq end (match-end 0))) (unless filename (setq filename (expand-file-name (read-file-name (if default-filename (format "Base64-decode to file (default `%s'): " default-filename) "Base64-decode to file: ") nil default-filename)))) (when (file-directory-p filename) (if default-filename (setq filename (expand-file-name default-filename filename)) (error "%s is a directory" filename))) (when (or (not (file-exists-p filename)) (y-or-n-p (format "File `%s' exists; overwrite? " filename))) (with-temp-buffer (let ((buffer-file-coding-system 'binary) (coding-system-for-write 'binary) ;; auto-compress-mode$B$r(Bdisable$B$K$9$k(B (inhibit-file-name-operation 'write-region) (inhibit-file-name-handlers (cons 'jka-compr-handler inhibit-file-name-handlers))) (insert-buffer-substring buf start end) (goto-char (point-min)) (while (not (eobp)) (if (looking-at navi2ch-base64-line-regexp) (forward-line) (delete-region (point) (navi2ch-line-beginning-position 2)))) (base64-decode-region (point-min) (point-max)) (write-region (point-min) (point-max) filename) (if (and susv3 mode) (condition-case nil ;; 511 = (string-to-number "0777" 8) (set-file-modes filename (logand mode 511)) (error nil))))))))) (defun navi2ch-base64-insert-file (filename) "FILENAME $B$r(B base64 $B%(%s%3!<%I$7!"8=:_$N%]%$%s%H$KA^F~$9$k!#(B" (interactive "fEncode and insert file: ") (save-excursion (let ((str nil)) (with-temp-buffer (let ((buffer-file-coding-system 'binary)) (insert-file-contents-literally filename) (base64-encode-region (point-min) (point-max)) (goto-char (point-min)) (while (search-forward "\n" nil t) (replace-match "")) (goto-char (point-min)) (insert (format "%s(%s)\n" navi2ch-base64-begin-delimiter (file-name-nondirectory filename))) (while (= (move-to-column navi2ch-base64-fill-column) navi2ch-base64-fill-column) (insert "\n")) (goto-char (point-max)) (insert (format "\n%s\n" navi2ch-base64-end-delimiter)) (setq str (buffer-string)))) (insert str)))) (defun navi2ch-url-to-host (url) (when url (cond ((string-match "^http://\\([^/]+\\)" url) (match-string 1 url)) ((string-match "^x-localbbs://" url) "localhost")))) (defun navi2ch-read-string (prompt &optional initial-input history) (let ((minibuffer-allow-text-properties nil)) (read-string prompt initial-input history))) (defun navi2ch-temp-directory () (let ((dir (expand-file-name "tmp" navi2ch-directory))) (or (file-directory-p dir) (make-directory dir)) dir)) (defun navi2ch-strip-properties (obj) "OBJ $BCf$NJ8;zNs$r:F5"E*$KC5$7!"%F%-%9%HB0@-$r30$7$?%*%V%8%'%/%H$rJV$9!#(B $B85$N(B OBJ $B$OJQ99$7$J$$!#(B" (cond ((consp obj) (let* ((ret (cons (car obj) (cdr obj))) (seq ret)) ;; $BD9$$%j%9%H$r%3%T!<$9$k:]$K%9%?%C%/%*!<%P!<%U%m!<$K$J$k$N$G(B ;; $B:F5"$r%k!<%W$KE83+!#(B (while (consp seq) (setcar seq (navi2ch-strip-properties (car seq))) (if (consp (cdr seq)) (setcdr seq (cons (cadr seq) (cddr seq))) (setcdr seq (navi2ch-strip-properties (cdr seq)))) (setq seq (cdr seq))) ret)) ((stringp obj) (let ((str (copy-sequence obj))) (set-text-properties 0 (length str) nil str) str)) ((vectorp obj) (vconcat (mapcar 'navi2ch-strip-properties obj))) (t obj))) (defun navi2ch-update-html-tag-regexp () "`navi2ch-replace-html-tag-regexp-internal' $B$r99?7$9$k!#(B" (setq navi2ch-replace-html-tag-regexp-internal (navi2ch-regexp-alist-to-internal (nconc (mapcar (lambda (x) (cons (regexp-quote (car x)) (cdr x))) navi2ch-replace-html-tag-alist) navi2ch-replace-html-tag-regexp-alist)))) (defun navi2ch-add-replace-html-tag (tag value) "TAG $B$rI=<($9$k:]$K(B VALUE $B$GCV$-49$($k!#(B" (let ((as-regexp (condition-case nil (progn ;; $BJ8;zNs$K$h$C$F$O(B regexp-opt-group() $B$,L58B(B ;; $B:F5"$K$J$k(B (regexp-opt (list "$B$"(B" tag)) nil) (error t)))) (if as-regexp (navi2ch-add-replace-html-tag-regexp (regexp-quote tag) value) (add-to-list 'navi2ch-replace-html-tag-alist (cons tag value)) (navi2ch-update-html-tag-regexp)))) (defun navi2ch-add-replace-html-tag-regexp (regexp value) "REGEXP $B$K%^%C%A$9$k(B tag $B$rI=<($9$k:]$K(B VALUE $B$GCV$-49$($k!#(B" (add-to-list 'navi2ch-replace-html-tag-regexp-alist (cons regexp value)) (navi2ch-update-html-tag-regexp)) (defsubst navi2ch-filename-to-url (filename) (concat "file://" (expand-file-name filename))) (defun navi2ch-chop-/ (dirname) (save-match-data (if (string-match "/\\'" dirname) (replace-match "" nil t dirname) dirname))) (defsubst navi2ch-rename-file (file newname &optional ok-if-already-exists) (rename-file (navi2ch-chop-/ file) (navi2ch-chop-/ newname) ok-if-already-exists)) (eval-and-compile (defalias 'navi2ch-set-keymap-default-binding (if (fboundp 'set-keymap-default-binding) #'set-keymap-default-binding (lambda (map command) "$B%-!<%^%C%W$N%G%U%)%k%H%P%$%s%I$r@_Dj$9$k!#(B" (define-key map [t] command))))) ;;; $B%m%C%/(B ;; $B:G$bHFMQE*$J(B mkdir $B%m%C%/$rl9g$O$=$N%G%#%l%/%H%j$O(B ;; $B%m%C%/$5$l$F$$$k$H$$$&$3$H$K$J$k!#(B (defun navi2ch-lock-directory (directory &optional lockname) "LOCKNAME $B$r;H$$!"(BDIRECTORY $B$r%m%C%/$9$k!#(B LOCKNAME $B$,>JN,$5$l$?>l9g$O(B \"lockdir\" $B$r;HMQ$9$k!#(B LOCKNAME $B$,@dBP%Q%9$G$O$J$$>l9g!"(BDIRECTORY $B$+$i$NAjBP%Q%9$H$7$F07$&!#(B $B%m%C%/$K@.8y$7$?$i(B non-nil $B$r!"<:GT$7$?$i(B nil $B$rJV$9!#(B" (setq lockname (navi2ch-chop-/ (expand-file-name (or lockname "lockdir") directory)) directory (file-name-directory lockname)) (let ((make-directory-function (if (fboundp 'make-directory-internal) #'make-directory-internal #'make-directory))) (if (not (file-exists-p lockname)) ; lockdir $B$,$9$G$K$"$k$H<:GT(B (condition-case error (and (progn ;; $B$^$:!"?F%G%#%l%/%H%j$r:n$C$F$*$/!#(B (unless (file-directory-p directory) (make-directory directory t)) (file-directory-p directory)) (progn ;; file-name-handler-alist $B$,$"$k$H(B mkdir $B$,D>@\8F(B ;; $B$P$l$J$$2DG=@-$,$"$k!#(B (let ((file-name-handler-alist nil)) (funcall make-directory-function lockname)) (file-exists-p lockname))) ; $BG0$N$?$a!"3NG'$7$F$*$/(B (error (message "%s" (error-message-string error)) (sit-for 3) (discard-input) nil))))) (defun navi2ch-unlock-directory (directory &optional lockname) "LOCKNAME $B$r;H$$!"(BDIRECTORY $B$N%m%C%/$r2r=|$9$k!#(B LOCKNAME $B$,>JN,$5$l$?>l9g$O(B \"lockdir\" $B$r;HMQ$9$k!#(B LOCKNAME $B$,@dBP%Q%9$G$O$J$$>l9g!"(BDIRECTORY $B$+$i$NAjBP%Q%9$H$7$F07$&!#(B $B%m%C%/$N2r=|$K@.8y$7$?$i(B non-nil $B$r!"<:GT$7$?$i(B nil $B$rJV$9!#(B" (setq lockname (navi2ch-chop-/ (expand-file-name (or lockname "lockdir") directory))) (ignore-errors (delete-directory lockname)) (not (file-exists-p lockname))) (defsubst navi2ch-count-lines-file (file) "$B$=$N%U%!%$%k$N9T?t$r?t$($k!#(B" (with-temp-buffer (insert-file-contents file) (count-lines (point-min) (point-max)))) (eval-and-compile (defalias 'navi2ch-float-time (if (fboundp 'float-time) 'float-time (lambda (&optional specified-time) "Return the current time, as a float number of seconds since the epoch. If an argument is given, it specifies a time to convert to float instead of the current time." (apply (lambda (high low &optional usec) (+ (* high 65536.0) low (/ (or usec 0) 1000000.0))) (or specified-time (current-time)))))) (defalias 'navi2ch-make-local-hook (if (>= emacs-major-version 22) #'ignore #'make-local-hook)) (defalias 'navi2ch-cache-p #'vectorp)) (defun navi2ch-compare-times (t1 t2) "T1 $B$,(B T2 $B$h$j?7$7$1$l$P(B non-nil $B$rJV$9!#(B" (> (navi2ch-float-time t1) (navi2ch-float-time t2))) (defun navi2ch-add-days-to-time (time days) "TIME $B$N(B DAYS $BF|8e(B ($BIi$N>l9g$OA0(B) $B$N(B TIME $B$rJV$9!#(B" (let ((decoded (decode-time time))) (setf (nth 3 decoded) (+ (nth 3 decoded) days)) (apply #'encode-time decoded))) (defun navi2ch-which (file) (when (stringp file) (catch 'loop (dolist (path exec-path) (setq path (expand-file-name file path)) (dolist (candidate (list path (concat path ".exe"))) (when (and (file-exists-p candidate) (file-executable-p candidate) (not (file-directory-p candidate))) (throw 'loop candidate))))))) (defun navi2ch-union (list1 list2) "Combine LIST1 and LIST2. This function is a cutdown version of cl-seq's one." (cond ((null list1) list2) ((null list2) list1) ((equal list1 list2) list1) (t (dolist (x list2) (unless (member x list1) (setq list1 (cons x list1)))) list1))) (defun navi2ch-set-difference (list1 list2) "Combine LIST1 and LIST2. This function is a cutdown version of cl-seq's one." (if (or (null list1) (null list2)) list1 (let ((res nil)) (dolist (x list1) (unless (member x list2) (setq res (cons x res)))) res))) (defun navi2ch-expand-newtext (newtext original) (substring (replace-match newtext (not case-fold-search) nil original) (match-beginning 0) (and (< (match-end 0) (length original)) (- (match-end 0) (length original))))) (defun navi2ch-fuzzy-regexp (string &optional kana-fold-search regexp) "STRING $B$KBP$7!"A43Q$HH>3Q$r6hJL$;$:%^%C%A$9$k$h$&$J@55,I=8=$rJV$9!#(B $B$=$N:](B `case-fold-search' $B$,(B non-nil $B$J$i!"A43Q1Q;z$bBgJ8;z$H>.J8;z$N(B $BN>J}$r4^$`$b$N$r@8@.$9$k!#(B KANA-FOLD-SEARCH $B$K(B non-nil $B$r;XDj$9$k$H!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J(B $B$$@55,I=8=$rJV$9!#(B REGEXP $B$r;XDj$9$k$H!"@55,I=8=$N@8@.$K@hN)$A(B REGEXP $B$K%^%C%A$7$?J8;zNs(B $B$r(B REGEXP $B$KCV$-49$($k!#(B $B$=$l$K$h$j!"Nc$($P(B REGEXP $B$K(B \"[$B!!(B \\f\\t\\n\\r\\v]+\" $B$rM?$($k$H6uGr$d2~9T$N(B $BB?>/$rL5;k$7$F%^%C%A$9$k$h$&$J@55,I=8=$r@8@.$9$k!#(B" (let ((default-case-fold-search case-fold-search)) (with-current-buffer (get-buffer-create " *Navi2ch fuzzy work*") (erase-buffer) (insert string) (goto-char (point-min)) (let ((last (point))) (while (progn (while (and regexp (not (eobp)) (looking-at regexp) (< last (match-end 0))) (insert "\\(?:" regexp "\\)") (delete-char (- (match-end 0) (match-beginning 0))) (setq last (point))) (not (eobp))) (let ((char (following-char)) prop next slot) (cond ((and (setq prop (get-char-code-property char 'kana-composition)) (setq next (or (char-after (1+ (point))) 0)) (setq slot (assq next prop))) (cond ((eq (char-charset char) 'katakana-jisx0201) ;; (char = $BH>3Q%+%J(B) + (next = $BH>3QByE@Ey(B) ;; (cdr slot) = $BA43Q%+%J(B (let (hira) (if (and kana-fold-search (setq hira (get-char-code-property (cdr slot) 'hiragana))) (if (stringp hira) (insert "\\(?:" char next "\\|" (cdr slot) "\\|" hira "\\)") (insert "\\(?:" char next "\\|[" (cdr slot) hira "]\\)")) (insert "\\(?:" char next "\\|" (cdr slot) "\\)"))) (delete-char 2)) (kana-fold-search ;; (char = $B$R$i$,$J(B) + (next = $BA43QByE@Ey(B) ;; (cdr slot) = $BA43Q%+%J(B (insert "\\(?:" char next "\\|" (get-char-code-property char 'jisx0201) (get-char-code-property next 'jisx0201) "\\|" (cdr slot) "\\)") (delete-char 2)) (t (forward-char)))) ((or (setq prop (get-char-code-property char 'jisx0201)) (eq (char-charset char) 'katakana-jisx0201)) (let (kata) (cond ((null prop) ;; char = $BH>3Q%+%J(B (setq kata (get-char-code-property char 'jisx0208)) (let (hira) (if (and kana-fold-search (setq hira (get-char-code-property char 'hiragana))) (insert ?\[ char kata hira ?\]) (insert ?\[ char kata ?\]))) (delete-char 1)) ((null (setq kata (get-char-code-property char 'katakana))) ;; char = $BA43Q%+%J!"(Bprop = $BH>3Q%+%J(B (let (hira) (if (and kana-fold-search (setq hira (get-char-code-property char 'hiragana))) (cond ((stringp hira) (insert "\\(?:" char "\\|" hira "\\|" prop "\\)")) ((stringp prop) (insert "\\(?:[" char hira "]\\|" prop "\\)")) (t (insert ?\[ char hira prop ?\]))) (if (stringp prop) (insert "\\(?:" char "\\|" prop "\\)") (insert ?\[ char prop ?\])))) (delete-char 1)) (kana-fold-search ;; char = $B$R$i$,$J!"(Bprop = $BH>3Q%+%J!"(Bkata = $BA43Q%+%J(B (if (stringp prop) (insert "\\(?:[" char kata "]\\|" prop "\\)") (insert ?\[ char kata prop ?\])) (delete-char 1)) (t (forward-char))))) ((and (eq (char-charset char) 'ascii) (setq prop (get-char-code-property char 'jisx0208))) ;; char = $BH>3Q1Q?t!"(Bprop = $BA43Q1Q?t(B (if (or (not case-fold-search) (eq (upcase char) (downcase char))) (if (memq char '(?- ?^)) (insert ?\[ prop char ?\]) (insert ?\[ char prop ?\])) (insert ?\[ char (get-char-code-property (upcase char) 'jisx0208) (get-char-code-property (downcase char) 'jisx0208) ?\])) (delete-char 1)) ((setq prop (get-char-code-property char 'ascii)) ;; char = $BA43Q1Q?t!"(Bprop = $BH>3Q1Q?t(B (if (or (not case-fold-search) (eq (upcase prop) (downcase prop))) (if (eq prop ?\]) (insert ?\[ prop char ?\]) (insert ?\[ char prop ?\])) (insert ?\[ (get-char-code-property (upcase prop) 'jisx0208) (get-char-code-property (downcase prop) 'jisx0208) prop ?\])) (delete-char 1)) (t (forward-char)))))) (buffer-string)))) (defun navi2ch-apply-filters (board filter-list) (dolist (filter filter-list) (if (stringp (car-safe filter)) (apply 'navi2ch-call-process-buffer (mapcar (lambda (x) (if (eq x 'board) (cdr (assq 'id board)) x)) filter)) (funcall filter)))) ;; shut up byte-compile warnings (eval-when-compile (navi2ch-defalias-maybe 'keywordp 'ignore) (navi2ch-defalias-maybe 'characterp 'ignore)) (defun navi2ch-quote-maybe (sexp) "Quote SEXP iff it is not self quoting." ;; `custom-quote'$B$N%Q%/$j!#(B (if (or (memq sexp '(t nil)) (if (fboundp 'keywordp) (keywordp sexp) (and (symbolp sexp) (eq (aref (symbol-name sexp) 0) ?:))) (eq (car-safe sexp) 'lambda) (stringp sexp) (numberp sexp) (and (fboundp 'characterp) (characterp sexp)) (vectorp sexp) (navi2ch-ifxemacs (bit-vector-p sexp))) sexp (list 'quote sexp))) (defun navi2ch-right-align-strings (s1 s2) (let* ((l (max (length s1) (length s2))) (f (format "%%%ds" l))) (list (format f s1) (format f s2)))) (defun navi2ch-right-aligned-string< (s1 s2) (apply #'string< (navi2ch-right-align-strings s1 s2))) (defstruct (navi2ch-regexp-internal (:constructor navi2ch-make-regexp-internal) (:copier nil) (:type vector)) number-list regexp table) (eval-and-compile (defalias 'navi2ch-regexp-internal-p #'vectorp)) (defun navi2ch-regexp-alist-to-internal (regexp-alist) (if (navi2ch-regexp-internal-p regexp-alist) regexp-alist (let ((alist (let ((n 1)) (mapcar (lambda (elt) (let ((r (concat "\\(" (car elt) "\\)"))) (prog1 (list n r elt) (setq n (+ n (regexp-opt-depth r)))))) regexp-alist)))) (navi2ch-make-regexp-internal :number-list (mapcar #'car alist) :regexp (mapconcat #'cadr alist "\\|") :table (navi2ch-alist-to-hash (mapcar (lambda (x) (cons (car x) (caddr x))) alist)))))) (defun navi2ch-match-regexp-alist-subr (match-function regexp-alist) "REGEXP-ALIST $B$N3FMWAG$N(B car $B$r@55,I=8=$H$7!"(BMATCH-FUNCTION $B$r8F$S=P$9!#(B $B%^%C%A$7$?MWAG$rJV$9!#(B REGEXP-ALIST $BCf$N@55,I=8=$OO"7k$5$l$k$?$a!"@55,I=8=Cf$N(B \\$B?t;zEy$N(B back reference $B$OM-8z$KF0:n$7$J$$!#(B `navi2ch-regexp-alist-to-internal' $B$r;HMQ$7$F(B REGEXP-ALIST $B$r(B $B$"$i$+$8$aFbIt7A<0$KJQ49$7$F$*$/$3$H$b2DG=!#(B" (let* ((internal (navi2ch-regexp-alist-to-internal regexp-alist)) (number-list (navi2ch-regexp-internal-number-list internal)) (combined-regexp (navi2ch-regexp-internal-regexp internal))) (when (funcall match-function combined-regexp) (dolist (n number-list) (when (match-beginning n) (return (gethash n (navi2ch-regexp-internal-table internal)))))))) (defun navi2ch-string-match-regexp-alist (regexp-alist string &optional start) "REGEXP-ALIST $B$N3FMWAG$N(B car $B$r@55,I=8=$H$7!"(B`string-match' $B$r8F$S=P$9!#(B `match-data' $B$r%^%C%A$7$?@55,I=8=$NJ*$K$7!"%^%C%A$7$?MWAG$rJV$9!#(B REGEXP-ALIST $B$K$D$$$F$O(B `navi2ch-match-regexp-alist-subr' $B$r;2>H!#(B STRING START $B$O(B `string-match' $B$K$=$N$^$^EO$5$l$k!#(B" (let ((matched-elt (lexical-let ((string string) (start start)) (navi2ch-match-regexp-alist-subr (lambda (regexp) (string-match regexp string start)) regexp-alist)))) (when matched-elt (string-match (car matched-elt) string start)) matched-elt)) (defun navi2ch-re-search-forward-regexp-alist (regexp-alist &optional bound noerror count) "REGEXP-ALIST $B$N3FMWAG$N(B car $B$r@55,I=8=$H$7!"(B`re-search-forward' $B$r8F$S=P$9!#(B `match-data' $B$r%^%C%A$7$?@55,I=8=$NJ*$K$7!"%^%C%A$7$?MWAG$rJV$9!#(B REGEXP-ALIST $B$K$D$$$F$O(B `navi2ch-match-regexp-alist-subr' $B$r;2>H!#(B BOUND NOERROR COUNT $B$O(B `re-search-forward' $B$K$=$N$^$^EO$5$l$k!#(B" (let ((matched-elt (lexical-let ((bound bound) (noerror noerror) (count count)) (navi2ch-match-regexp-alist-subr (lambda (regexp) (re-search-forward regexp bound noerror count)) regexp-alist)))) (when matched-elt (goto-char (match-beginning 0)) (re-search-forward (car matched-elt) bound noerror count)) matched-elt)) ;; XEmacs $B$G$O(B `char-width' $B$r9MN8$7$F$/$l$J$$$N$G!#(B (defun navi2ch-truncate-string-to-width (str end-column &optional start-column padding) "`truncate-string-to-width' $B$HF1Ey!#(B" (let ((col 0) (start-column (or start-column 0)) r) (dolist (c (string-to-list str)) (when (and (>= col start-column) (< col end-column)) (push c r) (setq col (+ col (char-width c))))) (when padding (while (and (>= col start-column) (< col end-column)) (push padding r) (setq col (+ col (char-width padding))))) (concat (nreverse r)))) (defun navi2ch-disabled-key () (interactive) (ding) (let ((key (this-command-keys))) (message "%s (%s) is disabled in Navi2ch." (key-description key) (lookup-key (current-global-map) key)))) (defun navi2ch-verify-signature-file (signature-file file) "FILE $B$r(B SIGNATURE-FILE $B$G8!>Z$9$k!#(B $B@5$7$/8!>Z$G$-$k$H(B non-nil $B$rJV$9!#(B" (interactive "f$B=pL>%U%!%$%k(B: \nf$B8!>Z%U%!%$%k(B: ") (let (exitcode) (with-temp-buffer (setq exitcode (let ((default-directory (navi2ch-default-directory))) (call-process shell-file-name nil t nil shell-command-switch (format navi2ch-pgp-verify-command-line signature-file file)))) (goto-char (point-min)) ;; $B8e$+$i(B *Message* $B%P%C%U%!$G;2>H$G$-$k$h$&!"%3%^%s%I=PNO$r$9$Y(B ;; $B$FI=<($7$F$*$/(B (while (not (eobp)) (let ((s (buffer-substring (navi2ch-line-beginning-position) (navi2ch-line-end-position)))) (when (> (length s) 0) (message "%s" s))) (forward-line))) (= exitcode 0))) (defun navi2ch-decode-coding-region-linewise (start end coding-system) (save-restriction (narrow-to-region start end) (let ((bol (point-min))) (while (< bol (point-max)) (goto-char bol) ;; decode $BA08e$G(B (navi2ch-line-end-position) $B$NCM$,$:$l$k$N$KCm0U(B (decode-coding-region bol (navi2ch-line-end-position) coding-system) (goto-char bol) ; $BG0$N$?$a(B (setq bol (1+ (navi2ch-line-end-position)))))) (goto-char start)) (eval-and-compile (if (fboundp 'propertize) (defalias 'navi2ch-propertize 'propertize) (defun navi2ch-propertize (string &rest properties) "Return a copy of STRING with text properties added. First argument is the string to copy. Remaining arguments form a sequence of PROPERTY VALUE pairs for text properties to add to the result." (let ((str (copy-sequence string))) (add-text-properties 0 (length str) properties str) str)))) (defsubst navi2ch-read-only-string (string &optional front-nonsticky) (navi2ch-propertize string 'read-only t 'front-sticky (not front-nonsticky) 'rear-nonsticky t)) (defsubst navi2ch-file-mtime (filename) (nth 5 (file-attributes filename))) (defsubst navi2ch-file-size (filename) (nth 7 (file-attributes filename))) (defsubst navi2ch-make-cache (&optional limit test) (vector limit (apply #'make-hash-table (append (list :rehash-threshold 0.9) (and limit (integerp limit) (not (zerop limit)) (list :size (1+ limit))) (and test (list :test test)))))) (defun navi2ch-cache-put (key val cache) (let ((limit (navi2ch-cache-limit cache)) (table (navi2ch-cache-hash-table cache))) (prog1 (puthash key val table) (when (and limit (<= (hash-table-count table) limit)) (clrhash table))))) (defsubst navi2ch-cache-remove (key cache) (remhash key (navi2ch-cache-hash-table cache))) ;; from emacs-w3m (defun navi2ch-url-encode-string (str &optional coding encode-space) (apply (function concat) (mapcar (lambda (ch) (cond ((eq ch ?\n) ; newline "%0D%0A") ((string-match "[-a-zA-Z0-9_:/.]" (char-to-string ch)) ; xxx? (char-to-string ch)) ; printable ((and (char-equal ch ?\x20); space encode-space) "+") (t (format "%%%02X" ch)))) ; escape ;; Coerce a string into a list of chars. (append (encode-coding-string (or str "") (or coding navi2ch-coding-system 'shift_jis)) nil)))) (eval-and-compile (defalias 'navi2ch-number-sequence (if (fboundp 'number-sequence) #'number-sequence (lambda (from to) (let ((n from) result) (while (<= n to) (setq result (cons n result)) (setq n (1+ n))) (nreverse result)))))) (defsubst navi2ch-eq-or-memq (item maybe-list) (if (listp maybe-list) (memq item maybe-list) (eq item maybe-list))) (defmacro navi2ch-region-active-p () "Say whether the region is active." (if (fboundp 'region-active-p) (list 'region-active-p) (list 'and 'transient-mark-mode 'mark-active))) (navi2ch-update-html-tag-regexp) (run-hooks 'navi2ch-util-load-hook) ;;; navi2ch-util.el ends here navi2ch/navi2ch-vars.el000066400000000000000000002500361173560164300152510ustar00rootroot00000000000000;;; navi2ch-vars.el --- User variables for navi2ch. -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 ;; by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: www 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-vars) (eval-when-compile (unless (fboundp 'coding-system-list) (defalias 'coding-system-list 'ignore))) (defconst navi2ch-vars-ident "$Id$") (defconst navi2ch-on-xemacs (featurep 'xemacs)) (defconst navi2ch-on-emacs21 (and (not navi2ch-on-xemacs) (>= emacs-major-version 21))) (defvar navi2ch-coding-system (or (car (memq 'cp932 (coding-system-list))) (car (memq 'shift_jis-2004 (coding-system-list))) 'shift_jis)) (defgroup navi2ch nil "*Navigator for 2ch." :prefix "navi2ch-" :link '(url-link :tag "Navi2ch Project$B%[!<%`%Z!<%8(B" "http://navi2ch.sourceforge.net/") :link '(custom-manual :tag "$B%^%K%e%"%k(B (Info)" "(navi2ch)top") :group 'hypermedia :group '2ch) (defgroup navi2ch-list nil "*Navi2ch, list buffer." :prefix "navi2ch-" :group 'navi2ch) (defgroup navi2ch-board nil "*Navi2ch, board buffer." :prefix "navi2ch-" :group 'navi2ch) (defgroup navi2ch-article nil "*Navi2ch, article buffer." :prefix "navi2ch-" :group 'navi2ch) (defgroup navi2ch-message nil "*Navi2ch, message buffer." :prefix "navi2ch-" :group 'navi2ch) (defgroup navi2ch-net nil "*Navi2ch, networking." :prefix "navi2ch-" :group 'navi2ch) (defgroup navi2ch-localfile nil "*Navi2ch, localbbs." :prefix "navi2ch-" :group 'navi2ch) ;;; navi2ch variables (defcustom navi2ch-ask-when-exit 'y-or-n-p "*non-nil $B$J$i!"(Bnavi2ch $B=*N;$N3NG'%a%C%;!<%8$rI=<($9$k!#(B" :type '(choice (const :tag "yes-or-no-p $B$G3NG'(B" yes-or-no-p) (const :tag "y-or-n-p $B$G3NG'(B" y-or-n-p) (const :tag "$BJ9$+$:$K=*N;(B" nil)) :group 'navi2ch) (defcustom navi2ch-directory "~/.navi2ch" "*$B%-%c%C%7%e%U%!%$%k$J$I$rJ]B8$9$k%G%#%l%/%H%j!#(B $B$3$N%G%#%l%/%H%j$O!"%-%c%C%7%e$NNL$K$h$C$F(B 100MB $B0J>e$KKD$i$`(B $B$3$H$b$"$k!#%-%c%C%7%e$N@)8B$K$D$$$F$O(B `navi2ch-board-expire-date' $B$r;2>H!#(B" :type 'directory :group 'navi2ch) (defcustom navi2ch-uudecode-program "uudecode" "*uudecode $B$9$k$N$K;H$&%W%m%0%i%`!#(B" :type 'string :group 'navi2ch) (defcustom navi2ch-uudecode-args nil "*uudecode $B$rl9g$O(B `browse-url-browser-function' $B$r;H$&!#(B \(autoload 'navi2ch-browse-url \"navi2ch\" nil t) \(setq navi2ch-browse-url-browser-function 'w3m-browse-url) \(setq browse-url-browser-function 'navi2ch-browse-url) $B$N$h$&$K@_Dj$7$F$*$/$H!"B>$N%Q%C%1!<%8$+$i(B Navi2ch $B$r8F$S=P$9;v$,$G$-$k!#(B" :type '(choice (const :tag "browsw-url $B$K$^$+$;$k(B" nil) (function :tag "$B4X?t$r;XDj$9$k(B")) :group 'navi2ch) (defcustom navi2ch-browse-url-image-program nil "*`navi2ch-browse-url-image' $B$K;H$&%W%m%0%i%`!#(B" :type '(choice string (const :tag "None" nil)) :group 'navi2ch) (defcustom navi2ch-browse-url-image-args nil "*`navi2ch-browse-url-image-program' $B$KM?$($k0z?t!#(B" :type '(repeat (string :tag "Argument")) :group 'navi2ch) (defcustom navi2ch-browse-url-image-extentions '("jpg" "jpeg" "gif" "png") "*`navi2ch-browse-url-image' $B$GI=<($9$k2hA|$N3HD%;R!#(B" :type '(repeat (string :tag "$B3HD%;R(B")) :group 'navi2ch) (defcustom navi2ch-base64-fill-column 64 "*base64 $B$G%(%s%3!<%I$5$l$?J8;zNs$r(B fill $B$9$kJ8;z?t!#(B" :type 'integer :group 'navi2ch) (defcustom navi2ch-2ch-host-list '("cocoa.2ch.net" "pc.2ch.net" "pc2.2ch.net") "*2$B$A$c$s$M$k$H$_$J$9(B host $B$N%j%9%H!#(B" :type '(repeat (string :tag "$B%[%9%H(B")) :group 'navi2ch) (defcustom navi2ch-use-lock t "*non-nil $B$J$i!"(BNavi2ch $B$,5/F0$9$k:]$K(B `navi2ch-directory' $B$r%m%C%/$9$k!#(B" :type 'boolean :group 'navi2ch) (defcustom navi2ch-lock-name "lockdir" "*$B%m%C%/%G%#%l%/%H%j$NL>A0!#(B $B@dBP%Q%9$K$9$l$P(B `navi2ch-directory' $B0J30$N>l=j$K$b%m%C%/%G%#%l%/%H%j(B $B$r:n$l$k$,!"AG?M$K$O$*4+$a$7$J$$!#(B" :type 'string :group 'navi2ch) (defcustom navi2ch-file-name-reserved-char-list '(?:) "*navi2ch-expand-file-name $B$G%(%9%1!<%W$9$kJ8;z$N%j%9%H!#(B $B%G%U%)%k%H$O(B '(?:) $B$G!"(BURL $BCf$N(B \":\" $B$,%G%#%l%/%H%jL>$G$O(B \"%3A\" $B$K%(%9%1!<%W$5$l$k!#(B \"~\" $B$b%(%9%1!<%W$7$?$$$H$-$O(B '(?: ?~) $B$r;XDj$9$k!#(B" :type 'regexp :group 'navi2ch) (defcustom navi2ch-decode-character-references t "*non-nil $B$J$i!"?tCMJ8;z;2>H!"J8;zH$NI=<($r;n$_$k!#(B GNU Emacs 21, XEmacs 21.5 $B0J9_$G$"$l$P%G%U%)%k%H$GI=<($G$-$^$9$,!"(B $B$=$l0JA0$N(B Emacsen $B$G$O(B Mule-UCS $B$,I,MW$G$9!#(B(require 'un-define) $B$7$F$M!#(B" :type 'boolean :group 'navi2ch) (defcustom navi2ch-pgp-verify-command-line nil "PGP $B=pL>$r8!>Z$9$k%3%^%s%I%i%$%s!#(B $B=pL>%U%!%$%kL>!"=pL>85%U%!%$%kL>$H6&$K(B `format' $B$N0z?t$H$J$k!#(B" :type '(choice (const :tag "$BL58z(B" nil) (const :tag "PGP" "pgp %s %s") (const :tag "GPG" "gpg --verify %s %s") (string :tag "$B;XDj(B")) :group 'navi2ch) (defcustom navi2ch-enable-status-check nil "non-nil $B$J$i$P%V%i%&%6$r3+$/A0$K(B HEAD $B$G@\B3@h$r3NG'$9$k!#(B" :type 'boolean :group 'navi2ch) ;;; list variables (defcustom navi2ch-list-window-width 20 "*$BHD0lMw%&%#%s%I%&$N2#I}!#(B" :type 'integer :group 'navi2ch-list) (defcustom navi2ch-list-etc-file-name "etc.txt" "*$B!V$=$NB>!W%+%F%4%j$KF~$l$kHD$r=q$$$F$*$/%U%!%$%k!#(B" :type 'file :group 'navi2ch-list) (defcustom navi2ch-list-stay-list-window nil "* non-nil $B$J$i!"HD$rA*$s$@$"$HHD0lMw%P%C%U%!$rI=<($7$?$^$^$K$9$k!#(B" :type 'boolean :group 'navi2ch-list) (defcustom navi2ch-list-bbstable-url nil "*bbstable $B$N(B URL$B!#(B" :type 'string :group 'navi2ch-list) (defcustom navi2ch-list-init-open-category nil "*non-nil $B$J$i!"HD0lMw$N%+%F%4%j$r%G%U%)%k%H$G$9$Y$F3+$$$FI=<($9$k!#(B" :type 'boolean :group 'navi2ch-list) (defcustom navi2ch-list-indent-width 2 "*$BHD0lMw%P%C%U%!$G$NHDL>$N%$%s%G%s%HI}!#(B" :type 'integer :group 'navi2ch-list) (defcustom navi2ch-list-etc-category-name "$B$=$NB>(B" "*$B!V$=$NB>!W%+%F%4%j$NL>A0!#(B" :type 'string :group 'navi2ch-list) (defcustom navi2ch-list-global-bookmark-category-name "$B%V%C%/%^!<%/(B" "*$B!V%V%C%/%^!<%/!W%+%F%4%j$NL>A0!#(B" :type 'string :group 'navi2ch-list) (defcustom navi2ch-list-sync-update-on-boot t "*non-nil $B$J$i!"(Bnavi2ch $B5/F0;~$K>o$KHD0lMw$r$l$N%U%#%k%?!<$O(B elisp $B$N4X?t$J$i$P(B $B$=$N(B symbol$B!"(B $B30It%W%m%0%i%`$r8F$V$J$i(B '(\"perl\" \"2ch.pl\") $B$H$$$C$?46$8$N(B list $B$r@_Dj$9$k!#(B $BNc$($P$3$s$J46$8!#(B \(setq navi2ch-list-filter-list '(navi2ch-filter (\"perl\" \"2ch.pl\") (\"perl\" \"filter-with-board.pl\" \"-b\" board) ))" :type '(repeat sexp) :group 'navi2ch-list) (defcustom navi2ch-list-moved-board-alist nil "*$B0\E>$7$?HD$N?75l(B URL $B$N(B alist$B!#(B http://pc.2ch.net/unix/ $B$,(B http://pc3.2ch.net/unix/ $B$K0\E>$7$?>l9g!"(B \((\"http://pc.2ch.net/unix/\" . \"http://pc3.2ch.net/unix/\")) $B$N$h$&$K;XDj$9$k!#(B" :type '(alist :key-type (string :tag "$B0\E>A0$N(B URL") :value-type (string :tag "$B0\E>8e$N(B URL")) :group 'navi2ch-list) (defcustom navi2ch-list-display-board-id-p t "*$BHD0lMw$KHD(BID$B$rI=<($9$k$+$I$&$+!#(B non-nil $B$J$i$PHD(BID$B$rI=<($9$k!#(B" :type 'boolean :group 'navi2ch-list) (defcustom navi2ch-list-board-id-column 20 "*$BHD(BID$B$rI=<($9$k0LCV!#(B" :type 'integer :group 'navi2ch-list) ;;; board variables (defcustom navi2ch-board-max-line nil "*$B%@%&%s%m!<%I$9$k(B subject.txt $B$N9T?t!#(Bnil $B$J$iA4It%@%&%s%m!<%I$9$k!#(B" :type '(choice (integer :tag "$B9T?t$r;XDj(B") (const :tag "$BA4$F(B" nil)) :group 'navi2ch-board) (defcustom navi2ch-board-expire-date 30 "*$B:G8e$KJQ99$5$l$F$+$i$3$NF|?t0J>e$?$C$?%U%!%$%k$O(B expire ($B:o=|(B)$B$5$l$k!#(B nil $B$J$i(B expire $B$7$J$$!#(B" :type '(choice (integer :tag "$BF|?t$r;XDj(B") (const :tag "expire $B$7$J$$(B" nil)) :group 'navi2ch-board) (defcustom navi2ch-board-expire-bookmark-p nil "*expire $B$9$k$H$-$K(B bookmark $B$5$l$F$$$k%9%l$b(B expire $B$9$k$+$I$&$+!#(B non-nil $B$J$i$P(B expire $B$9$k!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-board-expire-orphan-only nil "*non-nil $B$J$i%*%k%U%!%s$J%9%l$N$_$r(B expire $B$9$k!#(B $B%*%k%U%!%s$J%9%l$H$O!"HD$N(B subject.txt $B$K$b%0%m!<%P%k%V%C%/%^!<%/$K$b(B $BEPO?$5$l$F$J$$%9%l$N$3$H!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-board-window-height 10 "*$B%9%l$N0lMw$rI=<($9$k(B board window $B$N9b$5!#(B" :type 'integer :group 'navi2ch-board) (defcustom navi2ch-board-check-updated-article-p t "*non-nil $B$J$i!"?7$7$$%l%9$,$"$C$?$+%A%'%C%/$9$k!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-board-view-logo-program (if (eq window-system 'w32) "fiber" "xv") "*$B%m%4$r8+$k$N$K;H$&%W%m%0%i%`!#(B" :type 'file :group 'navi2ch-board) (defcustom navi2ch-board-view-logo-args nil "*$B%m%4$r8+$k$N$K;H$&%W%m%0%i%`$N0z?t!#(B" :type '(repeat (string :tag "$B0z?t(B")) :group 'navi2ch-board) (defcustom navi2ch-board-delete-old-logo t "*non-nil $B$J$i!"?7$7$$%m%4$r%@%&%s%m!<%I$7$?$H$-$K8E$$%m%4$r>C$9!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-board-hide-updated-article nil "*non-nil $B$J$i!"(Bnavi2ch-board-updated-mode $B$G(B hide $B$5$l$?%9%l%C%I$rI=<($7$J$$!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-bm-subject-width 50 "*$B3F%9%l$NBjL>$NI}!#(B" :type 'integer :group 'navi2ch-board) (defcustom navi2ch-bm-number-width 3 "*$B3F%9%l$N%9%lHV9fMs$NI}!#(B" :type 'integer :group 'navi2ch-board) (defcustom navi2ch-bm-mark-and-move t "*$B%^!<%/$7$?$"$H$N%]%$%s%?$NF0:n!#(B nil $B$J$i0\F0$7$J$$(B non-nil $B$J$i2<$K0\F0$9$k(B 'follow $B$J$i0JA00\F0$7$?J}8~$K0\F0$9$k(B" :type '(choice (const :tag "$B0\F0$7$J$$(B" nil) (const :tag "$B2<$K0\F0(B" t) (const :tag "$B0JA00\F0$7$?J}8~$K0\F0(B" follow)) :group 'navi2ch-board) (defcustom navi2ch-bm-empty-subject "navi2ch: no subject" "*subject $B$,L5$$$H$-$KBe$jI=<($9$k(B subject$B!#(B" :type 'string :group 'navi2ch-board) (defcustom navi2ch-history-max-line 100 "*$B%R%9%H%j$N9T?t$N@)8B!#(Bnil $B$J$i$P@)8B$7$J$$!#(B" :type '(choice (integer :tag "$B:GBg$N9T?t$r;XDj(B") (const :tag "$B@)8B$7$J$$(B" nil)) :group 'navi2ch-board) (defcustom navi2ch-bm-stay-board-window t "*non-nil $B$J$i!"%9%l$rA*$s$@$H$-$K%9%l0lMw$rI=<($7$?$^$^$K$9$k!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-bm-fetched-info-file "fetched.txt" "*$B4{FI%9%l$N%j%9%H$rJ]B8$7$F$*$/%U%!%$%k!#(B" :type 'file :group 'navi2ch-board) (defcustom navi2ch-bookmark-file "bookmark2.txt" "*$B%0%m!<%P%k%V%C%/%^!<%/$rJ]B8$7$F$*$/%U%!%$%k!#(B" :type 'file :group 'navi2ch-board) (defcustom navi2ch-bookmark-remember-order-after-sort nil "*bookmark $B%b!<%I$G(B sort $B8e$N%9%lJB$S=g$r5-21$9$k$+$I$&$+!#(B non-nil $B$J$i$P5-21$9$k!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-history-file "history.txt" "*$B%R%9%H%j$rJ]B8$7$F$*$/%U%!%$%k!#(B" :type 'file :group 'navi2ch-board) (defcustom navi2ch-board-name-from-file "From File" "*$B%U%!%$%k$+$iFI$_9~$s$@%9%l$rI=$9HDL>!#(B" :type 'string :group 'navi2ch-board) (defcustom navi2ch-bm-mouse-face 'highlight "*$BHD$G%9%l$r%]%$%s%H$7$?;~$K;HMQ$9$k%U%'%$%9!#(B" :type '(choice (face :tag "$B%U%'%$%9$r;XDj(B") (const :tag "$B%U%'%$%9$r;HMQ$7$J$$(B" nil)) :group 'navi2ch-board) (defcustom navi2ch-bm-sort-by-state-order '(("%U" . 0) ("+U" . 1) ("%V" . 2) ("+V" . 3) ("%C" . 4) ("+C" . 5) ("% " . 6) ("+ " . 7) (" U" . 8) (" V" . 9) (" C" . 10) (" " . 11) ("=U" . 12) ("=V" . 13) ("=C" . 14) ("= " . 15) ("%D" . 16) ("+D" . 17) (" D" . 18) ("=D" . 19)) "*$B>uBV$G%=!<%H$9$k$H$-$N=g=x$r7h$a$k%j%9%H!#(B" :type '(list (cons (const :tag "$B>uBV(B %U" "%U") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B %V" "%V") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B %C" "%C") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B %D" "%D") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B % " "% ") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B +U" "+U") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B +V" "+V") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B +C" "+C") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B +D" "+D") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B + " "+ ") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B U" " U") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B V" " V") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B C" " C") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B D" " D") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B " " ") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B =U" "=U") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B =V" "=V") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B =C" "=C") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B =D" "=D") (number :tag "$B=gHV(B")) (cons (const :tag "$B>uBV(B = " "= ") (number :tag "$B=gHV(B"))) :group 'navi2ch-board) (defcustom navi2ch-board-filter-list nil "*$B%9%l%C%I$N0lMw$r$$$8$k%U%#%k%?!<$N%j%9%H!#(B $B$=$l$>$l$N%U%#%k%?!<$O(B elisp $B$N4X?t$J$i$P(B $B$=$N(B symbol$B!"(B $B30It%W%m%0%i%`$r8F$V$J$i(B '(\"perl\" \"2ch.pl\") $B$H$$$C$?46$8$N(B list $B$r@_Dj$9$k!#(B $BNc$($P$3$s$J46$8!#(B \(setq navi2ch-board-filter-list '(navi2ch-filter (\"perl\" \"2ch.pl\") (\"perl\" \"filter-with-board.pl\" \"-b\" board) ))" :type '(repeat sexp) :group 'navi2ch-board) (defcustom navi2ch-board-check-article-update-suppression-length nil "*$B%9%l$r99?7$9$k:]!"%U%#%k%?!<=hM}$r%A%'%C%/$9$k?7Ce%l%9?t!#(B $B$?$H$($P(B 10 $B$r;XDj$9$k$H!"(B $B%9%l$N?7Ce%l%9$,(B10$B8D0J2<$G$=$N$9$Y$F$,HsI=<($K$J$k$H$-$O!"(B $B?7Ce$J$7$H8+$J$5$l$k!#(B nil $B$r;XDj$9$k$H!"?7Ce%l%9$X$N%U%#%k%?!<=hM}$r%A%'%C%/$7$J$$!#(B" :type '(choice (integer :tag "$B?7Ce%l%9?t(B") (const :tag "$B%A%'%C%/$7$J$$(B" nil)) :group 'navi2ch-board) (defcustom navi2ch-board-insert-subject-with-diff nil "*non-nil $B$J$i!"(BBoard $B%b!<%I$N%l%9?tMs$K%l%9$NA}2C?t$rI=<($9$k!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-board-insert-subject-with-unread nil "*non-nil $B$J$i!"(BBoard $B%b!<%I$N%l%9?tMs$K%l%9$NL$FI?t$rI=<($9$k!#(B" :type 'boolean :group 'navi2ch-board) (defcustom navi2ch-board-coding-system-alist nil "*$BHD$KBP$7$F6/@)E*$K(B coding-system $B$r;XDj$9$k0Y$N(B alist$B!#(B $B3FMWAG$O!"(B(BOARD-ID . CODING-SYSTEM)$B!#(B BOARD-ID $B$OHD(BID$B!#(B CODING-SYSTEM $B$O(B BOARD-ID $B$G;XDj$5$l$kHD$K;XDj$9$k(B coding-system$B!#(B" :type `(repeat (cons (string :tag "$BHD(BID") (choice :tag "$BJ8;z%3!<%I(B" :value ,navi2ch-coding-system ,@(mapcar (lambda (x) (list 'const x)) (coding-system-list))))) :group 'navi2ch-board) ;;; article variables (defcustom navi2ch-article-aadisplay-program (if (eq window-system 'w32) "notepad" "aadisplay") "*AA $B$rI=<($9$k$?$a$K;H$&%W%m%0%i%`!#(B" :type 'string :group 'navi2ch-article) (defcustom navi2ch-article-aadisplay-coding-system (if (eq window-system 'w32) 'shift_jis-dos 'euc-jp-unix) "*AA $B$rI=<($9$k%W%m%0%i%`$K$o$?$90l;~%U%!%$%k$N(B `coding-system'$B!#(B" :type 'coding-system :group 'navi2ch-article) (defcustom navi2ch-article-view-aa-function (if (eq window-system 'w32) 'navi2ch-article-popup-dialog 'navi2ch-article-call-aadisplay) "*AA $B$rI=<($9$k$?$a$K;H$&4X?t!#(B" :type 'function :group 'navi2ch-article) (defcustom navi2ch-article-enable-diff t "*non-nil $B$J$i%U%!%$%k$N:9J,o$K%U%!%$%kA4BN$rE>Aw$9$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-max-line nil "*$B%@%&%s%m!<%I$9$k5-;v$N9T?t!#(Bnil $B$J$i;D$j$r$9$Y$F%@%&%s%m!<%I$9$k!#(B" :type '(choice (integer :tag "$B7o?t$r;XDj(B") (const :tag "$BA4$F(B" nil)) :group 'navi2ch-article) (defcustom navi2ch-article-enable-fill nil "*non-nil $B$J$i!"%9%l$N%a%C%;!<%8$r(B fill-region $B$9$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-enable-fill-list nil "*fill-region $B$9$kHD$N%j%9%H!#(B" :type '(repeat string) :group 'navi2ch-article) (defcustom navi2ch-article-disable-fill-list nil "*fill-region $B$7$J$$HD$N%j%9%H!#(B" :type '(repeat string) :group 'navi2ch-article) (defcustom navi2ch-article-enable-through 'ask-always "*$B%9%l%C%I$N:G8e$G%9%Z!<%9$r2!$7$?$H$-$KA0$N%3%^%s%I$HF1$8$+$G3NG'(B" navi2ch-article-through-ask-last-command-p)) :group 'navi2ch-article) (defcustom navi2ch-article-parse-field-list '(data name mail) "*$B%a%C%;!<%8$N%U%#!<%k%I$N$&$A!"%Q!<%:BP>]$K$9$k$b$N$N%j%9%H!#(B $BCY$/$F$b$$$$$s$J$i(B '(data mail name) $B$H$+$9$k$H$$$$$+$b(B" :type '(set (const :tag "$B5-;v(B" data) (const :tag "$B%a!<%k(B" mail) (const :tag "$BL>A0(B" name)) :group 'navi2ch-article) (defcustom navi2ch-article-goto-number-recenter t "*non-nil $B$J$i!"(Bgoto-number $B$7$?$"$H(B recenter $B$9$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-new-message-range '(100 . 1) "*$B%9%l$N%G%U%)%k%H$NI=<(HO0O!#=i$a$FFI$`%9%l$KE,MQ$9$k!#(B $B$?$H$($P(B '(100 5) $B$r;XDj$9$k$H!"(Bnavi2ch $B$O%9%l$N@hF,$+$i(B100$B8D!"(B $BKvHx$+$i(B5$B8D$N%a%C%;!<%8$@$1$r%P%C%U%!$KA^F~$7!"$=$N$"$$$@$N(B $B%a%C%;!<%8$K$D$$$F$O=hM}$rHt$P$9!#(B" :type '(cons integer integer) :group 'navi2ch-article) (defcustom navi2ch-article-exist-message-range '(1 . 100) "*$B%9%l$N%G%U%)%k%H$NI=<(HO0O!#4{FI%9%l$KE,MQ$9$k!#(B" :type '(cons integer integer) :group 'navi2ch-article) (defcustom navi2ch-article-auto-range t "*non-nil $B$J$i!"$^$@I=<($7$F$J$$%9%l%C%I$NI=<(HO0O$r>!$B!d(B]\\($\\|[^$>$B!d(B0-9$B#0(B-$B#9(B].*\\)" "*$B%l%9$N0zMQItJ,$N@55,I=8=!#(B" :type 'regexp :group 'navi2ch-article) (defcustom navi2ch-article-number-prefix-regexp "[>$B!d"d(B<$B!c(B][>$B!d"d(B<$B!c(B]* *" "*$BF1$8%9%lFb$X$N%j%s%/$rI=$9@55,I=8=!#(B" :type 'regexp :group 'navi2ch-article) (defcustom navi2ch-article-number-separator-regexp " *[,$B!"(B=$B!a(B] *" "*$BF1$8%9%lFb$X$N%j%s%/$N?t;z$r6h@Z$kJ8;zNs$rI=$9@55,I=8=!#(B" :type 'regexp :group 'navi2ch-article) (defcustom navi2ch-article-number-number-regexp "\\([0-9$B#0(B-$B#9(B]+\\(-[0-9$B#0(B-$B#9(B]+\\)?\\)" "*$BF1$8%9%lFb$X$N%j%s%/$N?t;z$rI=$9@55,I=8=!#(B" :type 'regexp :group 'navi2ch-article) (defcustom navi2ch-article-select-current-link-number-style 'auto "*$B%9%lFb%j%s%/(B (>>3 $B$H$+(B) $B$r$?$I$k$H$-$NI=<(J}K!!#(B 'popup $B$J$i$D$M$KJL%&%#%s%I%&$r(B popup $B$9$k!#(B 'jump $B$J$i(B popup $B$;$:$K0\F0$9$k!#(B 'auto $B$J$i<+F0$G@Z$jBX$($k!#(B" :type '(choice (const :tag "Popup" popup) (const :tag "Jump" jump) (const :tag "Auto" auto)) :group 'navi2ch-article) ;; ;; URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ] ;; uric = reserved | unreserved | escaped ;; reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | ;; "$" | "," ;; unreserved = alphanum | mark ;; mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | ;; "(" | ")" (defcustom navi2ch-article-url-regexp "\\(h?t?tps?\\|x-localbbs\\|ftp\\|sssp\\)\\(://[-a-zA-Z0-9_.!~*';/?:@&=+$,%#]+\\)" "*$B%l%9$N%F%-%9%H$N$&$A(B URL $B$H$_$J$9ItJ,$N@55,I=8=!#(B" ;; "(" ")" $B$O(B URL $B$r0O$`0UL#$G;H$o$l$k>l9g$,B?$$$h$&$J$N$G4^$a$J$$(B :type 'regexp :group 'navi2ch-article) (defcustom navi2ch-article-link-regexp-alist (if (= (regexp-opt-depth "\\(\\(\\)\\)") 1) nil ;; $B%P%0;}$A(B regexp-opt-depth() '(("<\\(UR[IL]:\\)?\\([^:>]+\\)>" . nil) ("\\]*\\)>" . "\\2"))) "*$B3FMWAG$N(B car $B$r@55,I=8=$H$7!"%^%C%A$7$?%F%-%9%H$K(B cdr $B$X$N%j%s%/$rD%$k!#(B $BCV49@h$K;H$($kFCH!#(B cdr $B$,(B nil $B$N>l9g$O%j%s%/$rE=$i$J$$!#(B cdr $B$,4X?t$N>l9g$O%^%C%A$7$?J8;zNs$r0z?t$H$7$F8F$S=P$7!"JV5QCM$,J8;zNs(B $B$N>l9g!"$=$l$r%j%s%/$H$9$k!#$=$N:]!"FC$l$N%U%#%k%?!<$O(B elisp $B$N4X?t$J$i$P(B $B$=$N(B symbol$B!"(B $B30It%W%m%0%i%`$r8F$V$J$i(B '(\"perl\" \"2ch.pl\") $B$H$$$C$?46$8$N(B list $B$r@_Dj$9$k!#(B $BHD(BID$B$r0z?t$G;XDj$9$k$J$i(B board $B$H$$$&%7%s%\%k$rHDL>$rEO$7$?$$>l=j$K=q$/!#(B $BNc$($P$3$s$J46$8!#(B \(setq navi2ch-article-filter-list '(navi2ch-filter (\"perl\" \"2ch.pl\") (\"perl\" \"filter-with-board.pl\" \"-b\" board) )) $B5l7A<0$N%;%Q%l!<%?$r;HMQ$7$?(B .dat $B%U%!%$%k$r07$$$?$$>l9g!"$3$NJQ?t$K(B $B%7%s%\%k(B navi2ch-article-separator-filter $B$rDI2C$9$k!#(B" :type '(repeat (choice (const :tag "$B5l7A<0(B .dat $BMQ%U%#%k%?(B" :value navi2ch-article-separator-filter) sexp)) :group 'navi2ch-article) (defcustom navi2ch-article-redraw-when-goto-number t "*non-nil $B$J$i!"(B`navi2ch-article-goto-number' $B$7$?$H$3$m$,HO0O30$N$H$-(B $B<+F0$G(B redraw $B$7$J$*$9!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-fix-range-diff 10 "*`navi2ch-article-fix-range' $B$7$?$H$-$KLa$k%l%9$N?t!#(B" :type 'integer :group 'navi2ch-article) (defcustom navi2ch-article-fix-range-when-sync t "*non-nil $B$J$i!"(B`navi2ch-article-sync' $B$GHO0O30$N$H$-(B $B<+F0E*$K(B `navi2ch-article-view-range' $B$rJQ99$9$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-message-separator ?_ "*$B%l%9$H%l%9$N6h@Z$j$K;H$&J8;z!#(B" :type 'character :group 'navi2ch-article) (defcustom navi2ch-article-message-separator-width '(/ (window-width) 2) "*$B%l%9$H%l%9$r6h@Z$k%F%-%9%H$N2#I}!#(B $BI}$r(B 80 $BJ8;z$K$7$?$$$J$i(B \(setq navi2ch-article-message-separator-width 80) window $B$NI}$$$C$Q$$$K$7$?$$$J$i(B \(setq navi2ch-article-message-separator-width '(window-width)) $BEy;XDj$9$k!#(B" :type 'sexp :group 'navi2ch-article) (defcustom navi2ch-article-message-separator-insert-hide-number-p t "*hide $B>pJs$r%l%9$H%l%9$N6h@Z$j$KI=<($9$k$+!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-message-separator-insert-trailing-newline-p t "*$B%l%9$N6h@Z$j$N8e$K$b$&0l8D2~9T$rI=<($9$k$+!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-auto-expunge nil "*non-nil $B$J$i!"%P%C%U%!$H$7$FJ];}$9$k%9%l$N?t$r(B `navi2ch-article-max-buffers' $B0J2<$KJ]$D!#$3$N@)8BCM$rD6$($?$H$-$K$O!"(B $B$$$A$P$s8E$$%P%C%U%!$r<+F0E*$K>C$9!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-max-buffers 20 "*$B%P%C%U%!$H$7$FJ];}$9$k%9%l$N:GBg?t!#(B0 $B$J$i$PL5@)8B!#(B" :type '(choice (const :tag "$BL5@)8B(B" 0) (integer :tag "$B@)8BCM(B")) :group 'navi2ch-article) (defcustom navi2ch-article-cleanup-white-space-after-old-br t "*non-nil $B$J$i!"8E$$7A<0$N(B
$B$KBP1~$7$F9TF,$+$i6uGr$r $B$ND>8e$K6uGr$,$"$k>l9g$K8B$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-cleanup-trailing-whitespace t "*non-nil $B$J$i!"%9%l$N3F9T$+$iKvHx$N6uGr$rl9g$OF1$8%9%l$NFbMF$N$_$rF@$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-date-format-function 'identity "* $B%l%9$NF|IU$r%U%)!<%^%C%H$9$k4X?t!#(B `navi2ch-article-default-header-format-function' $B$+$i!"(BDATE $B$r0z?t(B $B$H$7$F8F$S=P$5$l$k!#(B" :type '(choice (const :tag "$BJQ99$7$J$$(B" :value identity) (const :tag "Be2ch $B$K%j%s%/$rDI2C$9$k(B" :value navi2ch-article-date-format-be2ch) (function :tag "$B4X?t$r;XDj(B")) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-list '(navi2ch-article-message-filter-by-name navi2ch-article-message-filter-by-mail navi2ch-article-message-filter-by-id navi2ch-article-message-filter-by-message navi2ch-article-message-filter-by-subject navi2ch-article-message-filter-by-hostname) "*$B%l%9$r%U%#%k%?$9$k$?$a$N4X?t$N%j%9%H!#(B $B%j%9%H$N(B member $B$H$J$k4X?t$H$7$F$O!"(B $B%l%9$N(B alist $B$r0z$-?t$KA0Ms$,!V$[$2!W$N$H$-$K!V$"$\$\!<$s!W$KCV49$9$k$?$a$N(B \($B$A$g$C$H>iD9$J(B) $B4X?t$NNc!#(B \(defun my-navi2ch-article-message-filter-hoge (alist) (let ((number (cdr (assq 'number alist))) (name (cdr (assq 'name alist))) (mail (cdr (assq 'mail alist))) (date (cdr (assq 'date alist))) (message (cdr (assq 'data alist)))) (if (equal name \"$B$[$2(B\") \"$B$"$\$\!<$s(B\" nil)))" :type '(repeat function) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-by-name-alist nil "*$B%l%9$r%U%#%k%?$9$k$?$a$NL>A0$N>r7o$H!"%U%#%k%?=hM}$N(B alist$B!#(B $B>r7o$K$OJ8;zNs$+!"(B \($BJ8;zNs(B $B%7%s%\%k(B ...)$B$N7A<0$N%j%9%H(B($B3HD%7A<0(B)$B$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"(B $BL>A0$,$=$NJ8;zNs$r4^$`$H$-$K%U%#%k%?=hM}$,A0$r8!::$9$k!#(B S,s $BItJ,0lCW(B E,e $B40A40lCW(B F,f $B$"$$$^$$0lCW(B ($B6uGr$d2~9T$NM-L5$dB?>/$rL5;k$7!"(B $B$^$?A43Q$HH>3Q$r6hJL$7$J$$ItJ,0lCW(B) R,r $B@55,I=8=(B $BBgJ8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7!"(B $B>.J8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7$J$$!#(B $B$"$$$^$$0lCW$r>.J8;z$G;XDj$7$?>l9g$O!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J$$!#(B $B%7%s%\%k$N8e$K$O%-!<%o!<%I$rDI2C$7!"(B $BCM$K$h$C$F%U%#%k%?>r7o$r2<5-$N$h$&$KJdB-$9$k$3$H$,$G$-$k!#(B :invert t (non-nil)$B$r;XDj$9$k$H!"J8;zNs0lCW$N??56$r5UE>$9$k(B :board-id $B%U%#%k%?BP>]$H$J$kHD$N(B ID $B$r;XDj$9$k(B :artid $B%U%#%k%?BP>]$H$J$k%9%l%C%I$N(B ID $B$b;XDj$9$k(B :float $B%U%#%k%?>r7o$,0lCW$7$?$H$-!"$3$N%U%#%k%?9`L\$r(B `navi2ch-article-sort-message-filter-rules'$B$rL5;k$7$F(B $B>o$K(B alist $B$N@hF,$K;}$C$F$/$k>l9g$O(B 1 ($B@5?tCM(B)$B$r;XDj$7!"(B $B$=$N$^$^$K$9$k>l9g$O(B 0 ($BHs@5?tCM(B)$B$r;XDj$9$k(B $B%U%#%k%?=hM}$K$O!"J8;zNs!&%7%s%\%k!&?tCM$N$I$l$+$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"%l%9$,$=$NJ8;zNs$KCV$-49$o$k!#(B $B%U%#%k%?>r7o$r3HD%7A<0$G;XDj$7$F$$$?>l9g!"(B $BCV498e$NJ8;zNsCf$N(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$O!"0lCW$7$?J8;zNs$KE83+$5$l$k!#(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$N0UL#$K$D$$$F$O!"(B`replace-match'$B$r;2>H$N$3$H!#(B $B%7%s%\%k$r;XDj$9$k$H!"%7%s%\%k$K9g$o$;$F2<5-$N=hM}$,9T$o$l$k!#(B hide $B%l%9$r1#$9(B important $B%l%9$r%V%C%/%^!<%/$KEPO?$9$k(B $B?tCM$r;XDj$9$k$H!"%l%9$NF@E@$K$=$N?tCMJ,$NE@?t$r2C$($F!"(B $B;D$j$N%U%#%k%?$rA0$K!V$U$,!W$,4^$^$l$F$$$k$H%l%9$,!V$"$\$\!<$s!W$KCV$-49$o$j!"(B $BL>A0$K!V%[%2!W$,4^$^$l$F$$$k$H%l%9$,1#$5$l$k!#(B '((\"$B$U$,(B\" . \"$B$"$\$\!<$s(B\") ((\"$B%[%2(B\" S) . hide))" :type (let ((plist '(set :inline t :format "%v" (list :tag "$BJ8;zNs0lCW$N??56$r5UE>(B" :inline t :format "%{%t%}\n" :value '(:invert t)) (list :tag "$BHD$r;XDj(B" :inline t (const :format "" :value :board-id) (string :tag "ID") (set :inline t :format "%v" (list :tag "$B%9%l%C%I$b;XDj(B" :inline t (const :format "" :value :artid) (string :tag "ID")))) (list :tag "$B>r7o$,0lCW$7$?$H$-$N%U%#%k%?$N0LCV(B" :inline t (const :format "" :value :float) (choice :value 0 (const :tag "$B$=$N$^$^(B" :value 0) (const :tag "$B@hF,$X(B" :value 1)))))) `(repeat (cons (choice :tag "$B>r7o(B" (string) (list :tag "$BItJ,0lCW(B" :value ("" S) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value S) (const :tag "$B$J$7(B" :value s)) ,plist) (list :tag "$B40A40lCW(B" :value ("" E) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value E) (const :tag "$B$J$7(B" :value e)) ,plist) (list :tag "$B$"$$$^$$0lCW(B" :value ("" f) (string) (choice :tag "$BBgJ8;z$H>.J8;z!&$R$i$,$J$H%+%?%+%J$N6hJL(B" (const :tag "$B$"$j(B" :value F) (const :tag "$B$J$7(B" :value f)) ,plist) (list :tag "$B@55,I=8=(B" :value ("" R) (regexp) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value R) (const :tag "$B$J$7(B" :value r)) ,plist)) (choice :tag "$B=hM}(B" (string :tag "$BCV$-49$($k(B" :value "$B$"$\$\!<$s(B") (const :tag "$B1#$9(B" :value hide) (const :tag "$B%V%C%/%^!<%/$KEPO?$9$k(B" :value important) (number :tag "$BE@?t$r2C$($k(B" :value 0))))) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-by-message-alist nil "*$B%l%9$r%U%#%k%?$9$k$?$a$N%l%9K\J8$N>r7o$H!"%U%#%k%?=hM}$N(B alist$B!#(B $B>r7o$K$OJ8;zNs$+!"(B \($BJ8;zNs(B $B%7%s%\%k(B ...)$B$N7A<0$N%j%9%H(B($B3HD%7A<0(B)$B$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"(B $B%l%9K\J8$,$=$NJ8;zNs$r4^$`$H$-$K%U%#%k%?=hM}$,/$rL5;k$7!"(B $B$^$?A43Q$HH>3Q$r6hJL$7$J$$ItJ,0lCW(B) R,r $B@55,I=8=(B $BBgJ8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7!"(B $B>.J8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7$J$$!#(B $B$"$$$^$$0lCW$r>.J8;z$G;XDj$7$?>l9g$O!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J$$!#(B $B%7%s%\%k$N8e$K$O%-!<%o!<%I$rDI2C$7!"(B $BCM$K$h$C$F%U%#%k%?>r7o$r2<5-$N$h$&$KJdB-$9$k$3$H$,$G$-$k!#(B :invert t (non-nil)$B$r;XDj$9$k$H!"J8;zNs0lCW$N??56$r5UE>$9$k(B :board-id $B%U%#%k%?BP>]$H$J$kHD$N(B ID $B$r;XDj$9$k(B :artid $B%U%#%k%?BP>]$H$J$k%9%l%C%I$N(B ID $B$b;XDj$9$k(B :float $B%U%#%k%?>r7o$,0lCW$7$?$H$-!"$3$N%U%#%k%?9`L\$r(B `navi2ch-article-sort-message-filter-rules'$B$rL5;k$7$F(B $B>o$K(B alist $B$N@hF,$K;}$C$F$/$k>l9g$O(B 1 ($B@5?tCM(B)$B$r;XDj$7!"(B $B$=$N$^$^$K$9$k>l9g$O(B 0 ($BHs@5?tCM(B)$B$r;XDj$9$k(B $B%U%#%k%?=hM}$K$O!"J8;zNs!&%7%s%\%k!&?tCM$N$I$l$+$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"%l%9$,$=$NJ8;zNs$KCV$-49$o$k!#(B $B%U%#%k%?>r7o$r3HD%7A<0$G;XDj$7$F$$$?>l9g!"(B $BCV498e$NJ8;zNsCf$N(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$O!"0lCW$7$?J8;zNs$KE83+$5$l$k!#(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$N0UL#$K$D$$$F$O!"(B`replace-match'$B$r;2>H$N$3$H!#(B $B%7%s%\%k$r;XDj$9$k$H!"%7%s%\%k$K9g$o$;$F2<5-$N=hM}$,9T$o$l$k!#(B hide $B%l%9$r1#$9(B important $B%l%9$r%V%C%/%^!<%/$KEPO?$9$k(B $B?tCM$r;XDj$9$k$H!"%l%9$NF@E@$K$=$N?tCMJ,$NE@?t$r2C$($F!"(B $B;D$j$N%U%#%k%?$r(B" :inline t :format "%{%t%}\n" :value '(:invert t)) (list :tag "$BHD$r;XDj(B" :inline t (const :format "" :value :board-id) (string :tag "ID") (set :inline t :format "%v" (list :tag "$B%9%l%C%I$b;XDj(B" :inline t (const :format "" :value :artid) (string :tag "ID")))) (list :tag "$B>r7o$,0lCW$7$?$H$-$N%U%#%k%?$N0LCV(B" :inline t (const :format "" :value :float) (choice :value 0 (const :tag "$B$=$N$^$^(B" :value 0) (const :tag "$B@hF,$X(B" :value 1)))))) `(repeat (cons (choice :tag "$B>r7o(B" (string) (list :tag "$BItJ,0lCW(B" :value ("" S) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value S) (const :tag "$B$J$7(B" :value s)) ,plist) (list :tag "$B40A40lCW(B" :value ("" E) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value E) (const :tag "$B$J$7(B" :value e)) ,plist) (list :tag "$B$"$$$^$$0lCW(B" :value ("" f) (string) (choice :tag "$BBgJ8;z$H>.J8;z!&$R$i$,$J$H%+%?%+%J$N6hJL(B" (const :tag "$B$"$j(B" :value F) (const :tag "$B$J$7(B" :value f)) ,plist) (list :tag "$B@55,I=8=(B" :value ("" R) (regexp) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value R) (const :tag "$B$J$7(B" :value r)) ,plist)) (choice :tag "$B=hM}(B" (string :tag "$BCV$-49$($k(B" :value "$B$"$\$\!<$s(B") (const :tag "$B1#$9(B" :value hide) (const :tag "$B%V%C%/%^!<%/$KEPO?$9$k(B" :value important) (number :tag "$BE@?t$r2C$($k(B" :value 0))))) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-by-id-alist nil "*$B%l%9$r%U%#%k%?$9$k$?$a$N(B ID $B$N>r7o$H!"%U%#%k%?=hM}$N(B alist$B!#(B $B>r7o$K$OJ8;zNs$+!"(B \($BJ8;zNs(B $B%7%s%\%k(B ...)$B$N7A<0$N%j%9%H(B($B3HD%7A<0(B)$B$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"(B ID $B$,$=$NJ8;zNs$r4^$`$H$-$K%U%#%k%?=hM}$,/$rL5;k$7!"(B $B$^$?A43Q$HH>3Q$r6hJL$7$J$$ItJ,0lCW(B) R,r $B@55,I=8=(B $BBgJ8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7!"(B $B>.J8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7$J$$!#(B $B$"$$$^$$0lCW$r>.J8;z$G;XDj$7$?>l9g$O!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J$$!#(B $B%7%s%\%k$N8e$K$O%-!<%o!<%I$rDI2C$7!"(B $BCM$K$h$C$F%U%#%k%?>r7o$r2<5-$N$h$&$KJdB-$9$k$3$H$,$G$-$k!#(B :invert t (non-nil)$B$r;XDj$9$k$H!"J8;zNs0lCW$N??56$r5UE>$9$k(B :board-id $B%U%#%k%?BP>]$H$J$kHD$N(B ID $B$r;XDj$9$k(B :artid $B%U%#%k%?BP>]$H$J$k%9%l%C%I$N(B ID $B$b;XDj$9$k(B :float $B%U%#%k%?>r7o$,0lCW$7$?$H$-!"$3$N%U%#%k%?9`L\$r(B `navi2ch-article-sort-message-filter-rules'$B$rL5;k$7$F(B $B>o$K(B alist $B$N@hF,$K;}$C$F$/$k>l9g$O(B 1 ($B@5?tCM(B)$B$r;XDj$7!"(B $B$=$N$^$^$K$9$k>l9g$O(B 0 ($BHs@5?tCM(B)$B$r;XDj$9$k(B $B%U%#%k%?=hM}$K$O!"J8;zNs!&%7%s%\%k!&?tCM$N$I$l$+$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"%l%9$,$=$NJ8;zNs$KCV$-49$o$k!#(B $B%U%#%k%?>r7o$r3HD%7A<0$G;XDj$7$F$$$?>l9g!"(B $BCV498e$NJ8;zNsCf$N(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$O!"0lCW$7$?J8;zNs$KE83+$5$l$k!#(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$N0UL#$K$D$$$F$O!"(B`replace-match'$B$r;2>H$N$3$H!#(B $B%7%s%\%k$r;XDj$9$k$H!"%7%s%\%k$K9g$o$;$F2<5-$N=hM}$,9T$o$l$k!#(B hide $B%l%9$r1#$9(B important $B%l%9$r%V%C%/%^!<%/$KEPO?$9$k(B $B?tCM$r;XDj$9$k$H!"%l%9$NF@E@$K$=$N?tCMJ,$NE@?t$r2C$($F!"(B $B;D$j$N%U%#%k%?$r(B" :inline t :format "%{%t%}\n" :value '(:invert t)) (list :tag "$BHD$r;XDj(B" :inline t (const :format "" :value :board-id) (string :tag "ID") (set :inline t :format "%v" (list :tag "$B%9%l%C%I$b;XDj(B" :inline t (const :format "" :value :artid) (string :tag "ID")))) (list :tag "$B>r7o$,0lCW$7$?$H$-$N%U%#%k%?$N0LCV(B" :inline t (const :format "" :value :float) (choice :value 0 (const :tag "$B$=$N$^$^(B" :value 0) (const :tag "$B@hF,$X(B" :value 1)))))) `(repeat (cons (choice :tag "$B>r7o(B" (string) (list :tag "$BItJ,0lCW(B" :value ("" S) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value S) (const :tag "$B$J$7(B" :value s)) ,plist) (list :tag "$B40A40lCW(B" :value ("" E) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value E) (const :tag "$B$J$7(B" :value e)) ,plist) (list :tag "$B$"$$$^$$0lCW(B" :value ("" f) (string) (choice :tag "$BBgJ8;z$H>.J8;z!&$R$i$,$J$H%+%?%+%J$N6hJL(B" (const :tag "$B$"$j(B" :value F) (const :tag "$B$J$7(B" :value f)) ,plist) (list :tag "$B@55,I=8=(B" :value ("" R) (regexp) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value R) (const :tag "$B$J$7(B" :value r)) ,plist)) (choice :tag "$B=hM}(B" (string :tag "$BCV$-49$($k(B" :value "$B$"$\$\!<$s(B") (const :tag "$B1#$9(B" :value hide) (const :tag "$B%V%C%/%^!<%/$KEPO?$9$k(B" :value important) (number :tag "$BE@?t$r2C$($k(B" :value 0))))) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-by-mail-alist nil "*$B%l%9$r%U%#%k%?$9$k$?$a$N%a!<%kMs$N>r7o$H!"%U%#%k%?=hM}$N(B alist$B!#(B $B>r7o$K$OJ8;zNs$+!"(B \($BJ8;zNs(B $B%7%s%\%k(B ...)$B$N7A<0$N%j%9%H(B($B3HD%7A<0(B)$B$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"(B $B%a!<%kMs$,$=$NJ8;zNs$r4^$`$H$-$K%U%#%k%?=hM}$,/$rL5;k$7!"(B $B$^$?A43Q$HH>3Q$r6hJL$7$J$$ItJ,0lCW(B) R,r $B@55,I=8=(B $BBgJ8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7!"(B $B>.J8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7$J$$!#(B $B$"$$$^$$0lCW$r>.J8;z$G;XDj$7$?>l9g$O!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J$$!#(B $B%7%s%\%k$N8e$K$O%-!<%o!<%I$rDI2C$7!"(B $BCM$K$h$C$F%U%#%k%?>r7o$r2<5-$N$h$&$KJdB-$9$k$3$H$,$G$-$k!#(B :invert t (non-nil)$B$r;XDj$9$k$H!"J8;zNs0lCW$N??56$r5UE>$9$k(B :board-id $B%U%#%k%?BP>]$H$J$kHD$N(B ID $B$r;XDj$9$k(B :artid $B%U%#%k%?BP>]$H$J$k%9%l%C%I$N(B ID $B$b;XDj$9$k(B :float $B%U%#%k%?>r7o$,0lCW$7$?$H$-!"$3$N%U%#%k%?9`L\$r(B `navi2ch-article-sort-message-filter-rules'$B$rL5;k$7$F(B $B>o$K(B alist $B$N@hF,$K;}$C$F$/$k>l9g$O(B 1 ($B@5?tCM(B)$B$r;XDj$7!"(B $B$=$N$^$^$K$9$k>l9g$O(B 0 ($BHs@5?tCM(B)$B$r;XDj$9$k(B $B%U%#%k%?=hM}$K$O!"J8;zNs!&%7%s%\%k!&?tCM$N$I$l$+$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"%l%9$,$=$NJ8;zNs$KCV$-49$o$k!#(B $B%U%#%k%?>r7o$r3HD%7A<0$G;XDj$7$F$$$?>l9g!"(B $BCV498e$NJ8;zNsCf$N(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$O!"0lCW$7$?J8;zNs$KE83+$5$l$k!#(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$N0UL#$K$D$$$F$O!"(B`replace-match'$B$r;2>H$N$3$H!#(B $B%7%s%\%k$r;XDj$9$k$H!"%7%s%\%k$K9g$o$;$F2<5-$N=hM}$,9T$o$l$k!#(B hide $B%l%9$r1#$9(B important $B%l%9$r%V%C%/%^!<%/$KEPO?$9$k(B $B?tCM$r;XDj$9$k$H!"%l%9$NF@E@$K$=$N?tCMJ,$NE@?t$r2C$($F!"(B $B;D$j$N%U%#%k%?$r(B" :inline t :format "%{%t%}\n" :value '(:invert t)) (list :tag "$BHD$r;XDj(B" :inline t (const :format "" :value :board-id) (string :tag "ID") (set :inline t :format "%v" (list :tag "$B%9%l%C%I$b;XDj(B" :inline t (const :format "" :value :artid) (string :tag "ID")))) (list :tag "$B>r7o$,0lCW$7$?$H$-$N%U%#%k%?$N0LCV(B" :inline t (const :format "" :value :float) (choice :value 0 (const :tag "$B$=$N$^$^(B" :value 0) (const :tag "$B@hF,$X(B" :value 1)))))) `(repeat (cons (choice :tag "$B>r7o(B" (string) (list :tag "$BItJ,0lCW(B" :value ("" S) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value S) (const :tag "$B$J$7(B" :value s)) ,plist) (list :tag "$B40A40lCW(B" :value ("" E) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value E) (const :tag "$B$J$7(B" :value e)) ,plist) (list :tag "$B$"$$$^$$0lCW(B" :value ("" f) (string) (choice :tag "$BBgJ8;z$H>.J8;z!&$R$i$,$J$H%+%?%+%J$N6hJL(B" (const :tag "$B$"$j(B" :value F) (const :tag "$B$J$7(B" :value f)) ,plist) (list :tag "$B@55,I=8=(B" :value ("" R) (regexp) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value R) (const :tag "$B$J$7(B" :value r)) ,plist)) (choice :tag "$B=hM}(B" (string :tag "$BCV$-49$($k(B" :value "$B$"$\$\!<$s(B") (const :tag "$B1#$9(B" :value hide) (const :tag "$B%V%C%/%^!<%/$KEPO?$9$k(B" :value important) (number :tag "$BE@?t$r2C$($k(B" :value 0))))) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-by-subject-alist nil "*$B%l%9$r%U%#%k%?$9$k$?$a$N%9%l%C%I$N%?%$%H%k$N>r7o$H!"%U%#%k%?=hM}$N(B alist$B!#(B $B>r7o$K$OJ8;zNs$+!"(B \($BJ8;zNs(B $B%7%s%\%k(B ...)$B$N7A<0$N%j%9%H(B($B3HD%7A<0(B)$B$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"(B $B%9%l%C%I$N%?%$%H%k$,$=$NJ8;zNs$r4^$`$H$-$K%U%#%k%?=hM}$,/$rL5;k$7!"(B $B$^$?A43Q$HH>3Q$r6hJL$7$J$$ItJ,0lCW(B) R,r $B@55,I=8=(B $BBgJ8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7!"(B $B>.J8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7$J$$!#(B $B$"$$$^$$0lCW$r>.J8;z$G;XDj$7$?>l9g$O!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J$$!#(B $B%7%s%\%k$N8e$K$O%-!<%o!<%I$rDI2C$7!"(B $BCM$K$h$C$F%U%#%k%?>r7o$r2<5-$N$h$&$KJdB-$9$k$3$H$,$G$-$k!#(B :invert t (non-nil)$B$r;XDj$9$k$H!"J8;zNs0lCW$N??56$r5UE>$9$k(B :board-id $B%U%#%k%?BP>]$H$J$kHD$N(B ID $B$r;XDj$9$k(B :artid $B%U%#%k%?BP>]$H$J$k%9%l%C%I$N(B ID $B$b;XDj$9$k(B :float $B%U%#%k%?>r7o$,0lCW$7$?$H$-!"$3$N%U%#%k%?9`L\$r(B `navi2ch-article-sort-message-filter-rules'$B$rL5;k$7$F(B $B>o$K(B alist $B$N@hF,$K;}$C$F$/$k>l9g$O(B 1 ($B@5?tCM(B)$B$r;XDj$7!"(B $B$=$N$^$^$K$9$k>l9g$O(B 0 ($BHs@5?tCM(B)$B$r;XDj$9$k(B $B%U%#%k%?=hM}$K$O!"J8;zNs!&%7%s%\%k!&?tCM$N$I$l$+$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"%l%9$,$=$NJ8;zNs$KCV$-49$o$k!#(B $B%U%#%k%?>r7o$r3HD%7A<0$G;XDj$7$F$$$?>l9g!"(B $BCV498e$NJ8;zNsCf$N(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$O!"0lCW$7$?J8;zNs$KE83+$5$l$k!#(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$N0UL#$K$D$$$F$O!"(B`replace-match'$B$r;2>H$N$3$H!#(B $B%7%s%\%k$r;XDj$9$k$H!"%7%s%\%k$K9g$o$;$F2<5-$N=hM}$,9T$o$l$k!#(B hide $B%l%9$r1#$9(B important $B%l%9$r%V%C%/%^!<%/$KEPO?$9$k(B $B?tCM$r;XDj$9$k$H!"%l%9$NF@E@$K$=$N?tCMJ,$NE@?t$r2C$($F!"(B $B;D$j$N%U%#%k%?$r(B" :inline t :format "%{%t%}\n" :value '(:invert t)) (list :tag "$BHD$r;XDj(B" :inline t (const :format "" :value :board-id) (string :tag "ID") (set :inline t :format "%v" (list :tag "$B%9%l%C%I$b;XDj(B" :inline t (const :format "" :value :artid) (string :tag "ID")))) (list :tag "$B>r7o$,0lCW$7$?$H$-$N%U%#%k%?$N0LCV(B" :inline t (const :format "" :value :float) (choice :value 0 (const :tag "$B$=$N$^$^(B" :value 0) (const :tag "$B@hF,$X(B" :value 1)))))) `(repeat (cons (choice :tag "$B>r7o(B" (string) (list :tag "$BItJ,0lCW(B" :value ("" S) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value S) (const :tag "$B$J$7(B" :value s)) ,plist) (list :tag "$B40A40lCW(B" :value ("" E) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value E) (const :tag "$B$J$7(B" :value e)) ,plist) (list :tag "$B$"$$$^$$0lCW(B" :value ("" f) (string) (choice :tag "$BBgJ8;z$H>.J8;z!&$R$i$,$J$H%+%?%+%J$N6hJL(B" (const :tag "$B$"$j(B" :value F) (const :tag "$B$J$7(B" :value f)) ,plist) (list :tag "$B@55,I=8=(B" :value ("" R) (regexp) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value R) (const :tag "$B$J$7(B" :value r)) ,plist)) (choice :tag "$B=hM}(B" (string :tag "$BCV$-49$($k(B" :value "$B$"$\$\!<$s(B") (const :tag "$B1#$9(B" :value hide) (const :tag "$B%V%C%/%^!<%/$KEPO?$9$k(B" :value important) (number :tag "$BE@?t$r2C$($k(B" :value 0))))) :group 'navi2ch-article) (defcustom navi2ch-article-message-filter-by-hostname-alist nil "*$B%l%9$r%U%#%k%?$9$k$?$a$N%[%9%HL>$N>r7o$H!"%U%#%k%?=hM}$N(B alist$B!#(B $B>r7o$K$OJ8;zNs$+!"(B \($BJ8;zNs(B $B%7%s%\%k(B ...)$B$N7A<0$N%j%9%H(B($B3HD%7A<0(B)$B$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"(B ID $B$,$=$NJ8;zNs$r4^$`$H$-$K%U%#%k%?=hM}$,/$rL5;k$7!"(B $B$^$?A43Q$HH>3Q$r6hJL$7$J$$ItJ,0lCW(B) R,r $B@55,I=8=(B $BBgJ8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7!"(B $B>.J8;z$N%7%s%\%k$r;XDj$9$k$HJ8;zNs$NBgJ8;z$H>.J8;z$r6hJL$7$J$$!#(B $B$"$$$^$$0lCW$r>.J8;z$G;XDj$7$?>l9g$O!"$R$i$,$J$H%+%?%+%J$b6hJL$7$J$$!#(B $B%7%s%\%k$N8e$K$O%-!<%o!<%I$rDI2C$7!"(B $BCM$K$h$C$F%U%#%k%?>r7o$r2<5-$N$h$&$KJdB-$9$k$3$H$,$G$-$k!#(B :invert t (non-nil)$B$r;XDj$9$k$H!"J8;zNs0lCW$N??56$r5UE>$9$k(B :board-id $B%U%#%k%?BP>]$H$J$kHD$N(B ID $B$r;XDj$9$k(B :artid $B%U%#%k%?BP>]$H$J$k%9%l%C%I$N(B ID $B$b;XDj$9$k(B :float $B%U%#%k%?>r7o$,0lCW$7$?$H$-!"$3$N%U%#%k%?9`L\$r(B `navi2ch-article-sort-message-filter-rules'$B$rL5;k$7$F(B $B>o$K(B alist $B$N@hF,$K;}$C$F$/$k>l9g$O(B 1 ($B@5?tCM(B)$B$r;XDj$7!"(B $B$=$N$^$^$K$9$k>l9g$O(B 0 ($BHs@5?tCM(B)$B$r;XDj$9$k(B $B%U%#%k%?=hM}$K$O!"J8;zNs!&%7%s%\%k!&?tCM$N$I$l$+$r;XDj$9$k!#(B $BJ8;zNs$r;XDj$9$k$H!"%l%9$,$=$NJ8;zNs$KCV$-49$o$k!#(B $B%U%#%k%?>r7o$r3HD%7A<0$G;XDj$7$F$$$?>l9g!"(B $BCV498e$NJ8;zNsCf$N(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$O!"0lCW$7$?J8;zNs$KE83+$5$l$k!#(B \\1$B!A(B\\9 $B$*$h$S(B \\& $B$N0UL#$K$D$$$F$O!"(B`replace-match'$B$r;2>H$N$3$H!#(B $B%7%s%\%k$r;XDj$9$k$H!"%7%s%\%k$K9g$o$;$F2<5-$N=hM}$,9T$o$l$k!#(B hide $B%l%9$r1#$9(B important $B%l%9$r%V%C%/%^!<%/$KEPO?$9$k(B $B?tCM$r;XDj$9$k$H!"%l%9$NF@E@$K$=$N?tCMJ,$NE@?t$r2C$($F!"(B $B;D$j$N%U%#%k%?$r$K!V(Bexample.jp$B!W$,4^$^$l$F$$$k$H%l%9$,!V$"$\$\!<$s!W$KCV$-49$o$j!"(B $B%[%9%HL>$,!V(Bfoo.example.jp$B!W$,4^$^$l$F$$$k$H%l%9$,1#$5$l$k!#(B '((\"example.jp\" . \"$B$"$\$\!<$s(B\") ((\"foo.example.jp\" S) . hide))" :type (let ((plist '(set :inline t :format "%v" (list :tag "$BJ8;zNs0lCW$N??56$r5UE>(B" :inline t :format "%{%t%}\n" :value '(:invert t)) (list :tag "$BHD$r;XDj(B" :inline t (const :format "" :value :board-id) (string :tag "ID") (set :inline t :format "%v" (list :tag "$B%9%l%C%I$b;XDj(B" :inline t (const :format "" :value :artid) (string :tag "ID")))) (list :tag "$B>r7o$,0lCW$7$?$H$-$N%U%#%k%?$N0LCV(B" :inline t (const :format "" :value :float) (choice :value 0 (const :tag "$B$=$N$^$^(B" :value 0) (const :tag "$B@hF,$X(B" :value 1)))))) `(repeat (cons (choice :tag "$B>r7o(B" (string) (list :tag "$BItJ,0lCW(B" :value ("" S) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value S) (const :tag "$B$J$7(B" :value s)) ,plist) (list :tag "$B40A40lCW(B" :value ("" E) (string) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value E) (const :tag "$B$J$7(B" :value e)) ,plist) (list :tag "$B$"$$$^$$0lCW(B" :value ("" f) (string) (choice :tag "$BBgJ8;z$H>.J8;z!&$R$i$,$J$H%+%?%+%J$N6hJL(B" (const :tag "$B$"$j(B" :value F) (const :tag "$B$J$7(B" :value f)) ,plist) (list :tag "$B@55,I=8=(B" :value ("" R) (regexp) (choice :tag "$BBgJ8;z$H>.J8;z$N6hJL(B" (const :tag "$B$"$j(B" :value R) (const :tag "$B$J$7(B" :value r)) ,plist)) (choice :tag "$B=hM}(B" (string :tag "$BCV$-49$($k(B" :value "$B$"$\$\!<$s(B") (const :tag "$B1#$9(B" :value hide) (const :tag "$B%V%C%/%^!<%/$KEPO?$9$k(B" :value important) (number :tag "$BE@?t$r2C$($k(B" :value 0))))) :group 'navi2ch-article) (defcustom navi2ch-article-auto-activate-message-filter t "*non-nil $B$J$i!"%U%#%k%?5!G=$r%G%U%)%k%H$G(B on $B$K$9$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-use-message-filter-cache t "*non-nil $B$J$i!"%U%#%k%?=hM}$G%-%c%C%7%e$rMxMQ$9$k!#(B $B%-%c%C%7%e$O!"%U%#%k%?$N%"%s%I%%>pJs$NJ];}$b7s$M$k!#(B" :type 'boolean :group 'navi2ch-article) (defcustom navi2ch-article-sort-message-filter-rules nil "*non-nil $B$J$i!">r7o$,0lCW$7$?%U%#%k%?9`L\$r(B alist $B$N@hF,$K;}$C$F$/$k!#(B $BNc$($P!"(B`navi2ch-article-message-filter-by-name-alist'$B$r(B $B2<5-$NCM$K@_Dj$7$F$$$F!V%[%2!W$H$$$&L>A0Ms$N%l%9$KEv$?$C$?>l9g!"(B '((\"$B$U$,(B\" . \"$B$"$\$\!<$s(B\") ((\"$B%[%2(B\" S) . hide)) `navi2ch-article-message-filter-by-name-alist'$B$NCM$O(B $B>r7o$,0lCW$7$?(B '((\"$B%[%2(B\" S) . hide) $B$,@hF,$KMh$k$h$&$KJB$S49$($i$l!"(B $B.$5$$$H%l%9$,CV$-49$o$k!#(B $BNc$($P2<5-$NCM$r@_Dj$9$k$H!"(B $B%l%9$NF@E@$,(B-1000$B$h$j>.$5$$$H%l%9$,!V$"$\$\!<$s!W$KCV$-49$o$k!#(B '(-1000 . \"$B$"$\$\!<$s(B\")" :type '(choice (const :tag "off" :value nil) (cons :tag "$B@_Dj$9$k(B" (number :tag "$B$7$-$$CM(B" :value 0) (string :tag "$BCV498e(B" :value "$B$"$\$\!<$s(B"))) :group 'navi2ch-article) (defcustom navi2ch-article-message-hide-below nil "*$B%U%#%k%?$K$h$C$F%l%9$r1#$9$?$a$NF@E@$N$7$-$$CM!#(B $BF@E@$,$3$NCM$h$j>.$5$$$H%l%9$,1#$5$l$k!#(B" :type '(choice (const :tag "off" :value nil) (number :tag "$B$7$-$$CM(B" :value 0)) :group 'navi2ch-article) (defcustom navi2ch-article-message-add-important-above nil "*$B%U%#%k%?$K$h$C$F%l%9$r%V%C%/%^!<%/$KEPO?$9$k$?$a$NF@E@$N$7$-$$CM!#(B $BF@E@$,$3$NCM$h$jBg$-$$$H%l%9$,%V%C%/%^!<%/$KEPO?$5$l$k!#(B" :type '(choice (const :tag "off" :value nil) (number :tag "$B$7$-$$CM(B" :value 0)) :group 'navi2ch-article) (defcustom navi2ch-article-save-info-wrapper-func nil "*navi2ch-article-save-info $BCf$G(B article $B$N(B wrapper $B$H$7$F;H$&4X?t!#(B" :type 'function :group 'navi2ch-article) (defcustom navi2ch-2ch-mimizun nil "*non-nil $B$J$i!"(B2ch$B$+$iA0!#(B" :type 'string :group 'navi2ch-message) (defcustom navi2ch-message-user-name-alist nil "*$BHD$4$H$N%G%U%)%k%H$NL>A0$N(B alist$B!#(B $B$?$H$($PL5$7$5$s(B\" $B$,%G%U%)%k%H$NL>A0$K$J$k!#(B '((\"network\" . \"anonymous\") (\"tv\" . \"$BL>L5$7$5$s(B\"))" :type '(repeat (cons (string :tag "$BHD(B ") (string :tag "$BL>A0(B"))) :group 'navi2ch-message) (defcustom navi2ch-message-mail-address "" "*$B%G%U%)%k%H$N%a!<%k%"%I%l%9!#(B" :type 'string :group 'navi2ch-message) (defcustom navi2ch-message-mail-address-alist nil "*$BHD$4$H$N%G%U%)%k%H$N%a!<%k%"%I%l%9$N(B alist$B!#(B $B$?$H$($PA0(B"))) :group 'navi2ch-message) (defcustom navi2ch-message-ask-before-write nil "*non-nil $B$J$i!"%l%9$r=q$-;O$a$k$H$-$K3NG'%a%C%;!<%8$rI=<($9$k!#(B" :type '(choice (const :tag "yes-or-no-p $B$G3NG'(B" yes-or-no-p) (const :tag "y-or-n-p $B$G3NG'(B" y-or-n-p) (const :tag "$B3NG'$7$J$$(B" nil)) :group 'navi2ch-message) (defcustom navi2ch-message-ask-before-send 'y-or-n-p "*non-nil $B$J$i!"=q$-9~$_Aw?.$N3NG'%a%C%;!<%8$rI=<($9$k!#(B" :type '(choice (const :tag "yes-or-no-p $B$G3NG'(B" yes-or-no-p) (const :tag "y-or-n-p $B$G3NG'(B" y-or-n-p) (const :tag "$B3NG'$7$J$$(B" nil)) :group 'navi2ch-message) (defcustom navi2ch-message-ask-before-kill 'y-or-n-p "*non-nil $B$J$i!"=q$-$3$_%-%c%s%;%k$N3NG'%a%C%;!<%8$rI=<($9$k!#(B" :type '(choice (const :tag "yes-or-no-p $B$G3NG'(B" yes-or-no-p) (const :tag "y-or-n-p $B$G3NG'(B" y-or-n-p) (const :tag "$B3NG'$7$J$$(B" nil)) :group 'navi2ch-message) (defcustom navi2ch-message-always-pop-message nil "*non-nil $B$J$i!"?75,%a%C%;!<%8$r:n$k%3%^%s%I$O=q$-$+$1$N%l%9$r>o$KI|85$9$k!#(B nil $B$J$i!"=q$-$+$1$rGK4~$7$F$$$$$+Ld$$9g$o$;$k!#(B $B=q$-$+$1$N%a%C%;!<%8$N%P%C%U%!$,;D$C$F$$$k>l9g$K$@$1M-8z!#(B" :type 'boolean :group 'navi2ch-message) (defcustom navi2ch-message-wait-time 3 "*$B%l%9$rAw$C$?$"$H%9%l$r%j%m!<%I$9$k$^$G$NBT$A;~4V(B($BIC(B)$B!#(B" :type 'integer :group 'navi2ch-message) (defcustom navi2ch-message-retry-wait-time 2 "*$B%l%9Aw?.$r:F;n9T$9$k$H$-$NBT$A;~4V(B($BIC(B)$B!#(B" :type 'integer :group 'navi2ch-message) (defcustom navi2ch-message-remember-user-name t "*non-nil $B$J$i!"Aw$C$?%l%9$NL>A0Mw$H%a!<%kMs$r3P$($F$*$/!#(B $BF1$8%9%l$GA0$K$J$k!#(B" :type 'boolean :group 'navi2ch-message) (defcustom navi2ch-message-cite-prefix "> " "*$B0zMQ$9$k$H$-$N@\F,<-!#(B" :type 'string :group 'navi2ch-message) (defcustom navi2ch-message-trip nil "*trip $BMQ$NJ8;zNs!#=q$-$3$_;~$K(B From $B$N8e$m$KIU2C$5$l$k!#(B" :type '(choice (string :tag "trip $B$r;XDj(B") (const :tag "trip $B$r;XDj$7$J$$(B" nil)) :group 'navi2ch-message) (defcustom navi2ch-message-aa-prefix-key "\C-c\C-a" "*AA $B$rF~NO$9$k0Y$N(B prefix-key$B!#(B" :type 'string :group 'navi2ch-message) (defvar navi2ch-message-aa-default-alist '(("a" . "($B!-'%!.(B)") ("b" . "$B!3(B(`$B'%!-(B)(II(B") ("B" . "((($B!((I_$B'%(I_(B))(I6^86^8L^YL^Y(B") ("f" . "( $B!-(B_$B!5(B`)(IL0](B") ("e" . "($B"?'U(B`)") ("F" . "($B!-!l9g$O$3$C$A$+$iC5$9!#(B") (defcustom navi2ch-message-aa-alist nil "*AA $B$rF~NO$9$k$H$-$N%-!<%P%$%s%I$H(B AA $B$N(B alist$B!#(B $B$?$H$($P!"(B((\"Z\" . \"$B#Z(BZ$B#z(Bz...\")) $B$N$h$&$K@_Dj$9$k$H!"(BMessage Mode $B$G(Bprefix-key ($B%G%U%)%k%H$G$O(B (C-c C-a) $B$"$H$K(B Z $B$rF~NO$9$k$H(B $B#Z(BZ$B#z(Bz... $B$HF~NO$G$-$k!#(B SPC$B!"(BC-l$B!"(BC-g$B!"(BC-v$B$O%j%9%HI=<($N:]$K;HMQ$5$l$k$N$G%-!<$K$O;HMQ$7$J$$$3$H!#(B" :type '(repeat (cons string string)) :group 'navi2ch-message) (defcustom navi2ch-message-cleanup-trailing-whitespace nil "*non-nil $B$J$i!"Aw?.$9$k%l%9$+$i9TKv$N6uGr$rl9g!"(B Navi2ch$B%+%F%4%j$K!VAw?.95$(!WHD$,<+F0E*$KDI2C$5$l$^$9!#(B `navi2ch-init-file'$B$K(B (setq navi2ch-message-save-sendlog t) $B$H=q$$$?>l9g$O!"$5$i$K(B (add-to-list 'navi2ch-list-navi2ch-category-alist navi2ch-message-sendlog-board) $B$rDI2C$7!"(BNavi2ch$B%+%F%4%j$K!VAw?.95$(!WHD$rDI2C$7$F2<$5$$!#(B" :type 'boolean :group 'navi2ch-message :set (lambda (symbol value) (when value (eval-after-load "navi2ch" '(add-to-list 'navi2ch-list-navi2ch-category-alist navi2ch-message-sendlog-board))) (set-default symbol value))) (defcustom navi2ch-message-sendlog-subject "$BAw?.95$((B" "*$BAw?.$7$?%l%9$rJ]B8$9$k%9%l$N%?%$%H%k!#(B" :type 'string :group 'navi2ch-message) (defcustom navi2ch-message-sendlog-response-limit 1000 "*$BAw?.95$((B 1$B%9%l$"$?$j$N%l%9?t$N>e8B!#(Bnil $B$J$i$P@)8B$7$J$$!#(B" :type '(choice (integer :tag "$B%l%9?t$N>e8B(B") (const :tag "$BL5@)8B(B" nil)) :group 'navi2ch-message) (defcustom navi2ch-message-sendlog-volume-format "%s (Part %s)" "*$BAw?.95$(%9%l$rJ,3d$9$k$H$-$N%U%)!<%^%C%H!#(B $B:G=i$N(B %s $B$,%9%l$N%?%$%H%k$G!"(B2$BHVL\$N(B %s $B$,%9%l$NHV9f$GCV$-49$($i$l$k!#(B" :type 'string :group 'navi2ch-message) (defcustom navi2ch-message-sendlog-message-format-function 'navi2ch-message-sendlog-simple-message-format "*$BAw?.95$($N%l%9$r%U%)!<%^%C%H$9$k4X?t$r;XDj$9$k!#(B $B0z?t$O0J2<(B: \(MESSAGE SUBJECT URL BOARD ARTICLE)" :type '(choice (const :tag "$B%7%s%W%k$J%U%)!<%^%C%H(B" :value navi2ch-message-sendlog-simple-message-format :doc "Subject: $B%9%l%C%I%?%$%H%k(B\nURL: http://") (const :tag "$BHDL>IU$-$N%U%)!<%^%C%H(B" :value navi2ch-message-sendlog-message-format-with-board-name :doc "[$BHDL>(B]: $B%9%l%C%I%?%$%H%k(B\nURL: http://") (function :tag "$B4X?t$r;XDj(B")) :group 'navi2ch-message) ;; net variables (defcustom navi2ch-net-http-proxy (if (string= (getenv "HTTP_PROXY") "") nil (getenv "HTTP_PROXY")) "*HTTP $B%W%m%-%7$N(B URL$B!#(B" :type '(choice (string :tag "$B%W%m%-%7$r;XDj(B") (const :tag "$B%W%m%-%7$r;H$o$J$$(B" nil)) :group 'navi2ch-net) (defcustom navi2ch-net-http-proxy-userid nil "*$B%W%m%-%7G'>Z$K;H$&%f!<%6L>!#(B" :type '(choice (string :tag "$B%f!<%6L>$r;XDj(B") (const :tag "$B%f!<%6L>$r;H$o$J$$(B" nil)) :group 'navi2ch-net) (defcustom navi2ch-net-http-proxy-password nil "*$B%W%m%-%7G'>Z$K;H$&%Q%9%o!<%I!#(B" :type '(choice (string :tag "$B%Q%9%o!<%I$r;XDj(B") (const :tag "$B%Q%9%o!<%I$r;H$o$J$$(B" nil)) :group 'navi2ch-net) (defcustom navi2ch-net-send-message-use-http-proxy t "*non-nil $B$J$i!"%l%9$rAw$k>l9g$J$I$G$b%W%m%-%7$r7PM3$9$k!#(B $B$3$N%*%W%7%g%s$rM-8z$K$9$k$K$O!"(B`navi2ch-net-http-proxy' $B$r(B non-nil $B$K@_Dj$9$k$3$H!#(B" :type 'boolean :group 'navi2ch-net) (defcustom navi2ch-net-http-proxy-for-send-message nil "*$B%l%9=q$-9~$_$K;H$&(B HTTP $B%W%m%-%7$N(B URL$B!#(B nil $B$N$H$-$O%W%m%-%7$H$7$F(B `navi2ch-net-http-proxy' $B$,;H$o$l$k!#(B `navi2ch-net-send-message-use-http-proxy' $B$,(B non-nil $B$N$H$-$N$_M-8z!#(B" :type '(choice (string :tag "$B%W%m%-%7$r;XDj(B") (const :tag "`navi2ch-net-http-proxy' $B$HF1$8(B" nil)) :group 'navi2ch-net) (defcustom navi2ch-net-http-proxy-userid-for-send-message nil "*$B%l%9=q$-9~$_;~$K%W%m%-%7G'>Z$K;H$&%f!<%6L>!#(B `navi2ch-net-http-proxy-for-send-message' $B$,(B non-nil $B$N$H$-$N$_M-8z!#(B" :type '(choice (string :tag "$B%f!<%6L>$r;XDj(B") (const :tag "$B%f!<%6L>$r;H$o$J$$(B" nil)) :group 'navi2ch-net) (defcustom navi2ch-net-http-proxy-password-for-send-message nil "*$B%l%9=q$-9~$_;~$K%W%m%-%7G'>Z$K;H$&%Q%9%o!<%I!#(B `navi2ch-net-http-proxy-for-send-message' $B$,(B non-nil $B$N$H$-$N$_M-8z!#(B" :type '(choice (string :tag "$B%Q%9%o!<%I$r;XDj(B") (const :tag "$B%Q%9%o!<%I$r;H$o$J$$(B" nil)) :group 'navi2ch-net) (defcustom navi2ch-net-force-update nil "*non-nil $B$J$i!"%U%!%$%k$rAw$O$7$J$$!#(B" :type 'boolean :group 'navi2ch-net) (defcustom navi2ch-net-save-old-file-when-aborn 'ask "*$B$"$\!<$s$,$"$C$?$H$-85$N%U%!%$%k$rJ]B8$9$k$+!#(B nil $B$J$iJ]B8$7$J$$(B ask $B$J$iJ]B8$9$kA0$K@\@\B3(B" open-network-stream) (const :tag "operation already in progress $BEy$N%(%i!<$,=P$k>l9g(B" navi2ch-open-network-stream-with-retry) (const :tag "$B%3%^%s%I7PM3$G@\B3(B" navi2ch-open-network-stream-via-command) (function :tag "$B4X?t$r;XDj(B")) :group 'navi2ch-net) (defcustom navi2ch-open-network-stream-command nil "*$B%[%9%H$N%5!<%S%9$K@\B3$9$k%3%^%s%I!#(B `navi2ch-open-network-stream-function' $B$,(B `navi2ch-open-network-stream-via-command' $B$N>l9g$K;HMQ$5$l$k!#(B $BCM$,J8;zNs$N>l9g!"$=$NJ8;zNs$H(B host service $B$r(B `format' $B$KEO$7!"$=$NJV(B $B5QCM$r%7%'%k7PM3$Gl9g!"(Bhost service $B$r0z?t$H$7$F8F$S=P$9!#(B $B;XDj$7$?4X?t$NJV5QCM$,J8;zNs$N>l9g$O%7%'%k7PM3$G!"%j%9%H$N>l9g$OD>@\l9g$O0J2<$N$$$:$l$+$N$h$&$K$9$k!#(B \"ssh somehost nc %s %s\" \(lambda (host service) (format \"ssh somehost nc %s %s\" host service)) \(lambda (host service) (list \"ssh\" \"somehost\" \"nc\" (format \"%s\" host) (format \"%s\" service)))" :type '(choice (const :tag "$BL58z(B" nil) (const :tag "Netcat $B$r;HMQ(B" (lambda (host service) (list "nc" (format "%s" host) (format "%s" service)))) (string :tag "$BJ8;zNs$r;XDj(B") (function :tag "$B4X?t$r;XDj(B")) :group 'navi2ch-net) ;;; update variables (defcustom navi2ch-update-file "navi2ch-update.el" "*Navi2ch $B$N<+F099?7$KMxMQ$9$k%U%!%$%k$N%m!<%+%k%U%!%$%kL>!#(B" :type 'file :group 'navi2ch) (defcustom navi2ch-update-base-url "http://navi2ch.sourceforge.net/autoupdate/" "*$B<+F099?7$9$k%U%!%$%k$,$"$k>l=j$N(B BASE URL$B!#(B" :type 'string :group 'navi2ch) (defcustom navi2ch-update-url (concat navi2ch-update-base-url (file-name-nondirectory navi2ch-update-file)) "*$B<+F099?7$KMxMQ$9$k%U%!%$%k$N(B URL$B!#(B" :type 'string :group 'navi2ch) (defcustom navi2ch-auto-update nil "*non-nil $B$J$i!"5/F0;~$K(B `navi2ch-update-file' $B$r99?7$7$Fl9g$O8!>Z2DG=$G!"(B - $B$=$3$GI=<($5$l$k3NG'$9$k%a%C%;!<%8$K(B yes $B$HEz$($?$H$-(B $B$N$_!#(B $B%d%P$$%3!<%I$,F~$C$F$$$k$H$^$:$$$N$G!"$J$k$Y$/(B pgp $B$+(B gpg $B$r%$%s%9%H!<(B $B%k$7$F(B `navi2ch-pgp-verify-command-line' $B$r@_Dj$7$h$&!#(B" :type 'boolean :group 'navi2ch) ;;; auto modify variables (defcustom navi2ch-auto-modify-file t "*$B@_Dj$r<+F0E*$KJQ99$7$FJ]B8$9$k%U%!%$%k!#(B t $B$J$i(B `navi2ch-init-file' $B$KJ]B8$7!"(B nil $B$J$i!"(B`customize'$B$rMxMQ$7$F(B`custom-file'$B$KJ]B8$9$k!#(B $B$3$N%U%!%$%kC1BN$,<+F0E*$K%m!<%I$5$l$k$3$H$O$J$$$N$G!"(B `navi2ch-init-file'$B0J30$N%U%!%$%k$r;XDj$7$?>l9g(B \(`navi2ch-init-file'$B$r(B byte-compile $B$7$?>l9g$r4^$`(B)$B$OI,MW$K1~$8$F!"(B \(load navi2ch-auto-modify-file) $B$r(B`navi2ch-init-file'$B$KDI2C$9$k$J$I$NJ}K!$GL@<(E*$K%U%!%$%k$r(B $B%m!<%I$9$k$3$H!#(B" :type '(choice (file :tag "$B%U%!%$%k(B") (const :tag "custom-file" nil)) :group 'navi2ch) (defcustom navi2ch-auto-modify-truncate-list-alist nil "*$B%j%9%H7?JQ?t$rJ]B8$9$k$H$-$N!"JQ?tL>$H$=$N:GBgMWAG?t$N(B alist$B!#(B $BNc$($P2<5-$NCM$r@_Dj$9$k$H!"(B `navi2ch-article-message-filter-by-id-alist'$B$H(B `navi2ch-article-message-filter-by-message-alist'$B$NMWAG$O!"(B $B<+F0JQ99!&J]B8$N:]$K$=$l$>$l(B10$B8D0J2(B") (integer :tag "$B:GBgMWAG?t(B"))) :group 'navi2ch) (defcustom navi2ch-icon-directory (cond ((condition-case nil (progn (require 'navi2ch-config) navi2ch-config-icondir) (error nil))) ((fboundp 'locate-data-directory) (locate-data-directory "navi2ch")) ((let ((icons (expand-file-name "navi2ch/icons/" data-directory))) (if (file-directory-p icons) icons))) ((let ((icons (expand-file-name "icons/" (file-name-directory (locate-library "navi2ch"))))) (if (file-directory-p icons) icons)))) "* $B%"%$%3%s%U%!%$%k$,CV$+$l$?%G%#%l%/%H%j!#(Bnil $B$J$i%"%$%3%s$r;H$o$J$$!#(B" :type '(choice (directory :tag "directory") (const :tag "nil" nil)) :group 'navi2ch) ;; Splash screen. (defcustom navi2ch-splash-display-logo (and window-system (or navi2ch-on-emacs21 navi2ch-on-xemacs) nil) "If it is non-nil, show graphic logo in the startup screen. You can set it to a symbol `bitmap', `xbm' or `xpm' in order to force the image format." :type '(radio (const :tag "Off" nil) (const :tag "On (any format)" t) (const xpm) (const xbm) (const :tag "bitmap (using BITMAP-MULE)" bitmap)) :group 'navi2ch) (defcustom navi2ch-display-splash-screen t "*Display splash screen at start time." :type 'boolean :group 'navi2ch) (defcustom navi2ch-message-samba24-show nil "* non-nil $B$J$i(B $BO"B3Ej9F5,@)(B($BDL>N(BSAMBA24)$B$N7P2a;~4V%+%&%s%H%@%&%s$rI=<($9$k(B" :type 'boolean :group 'navi2ch-message) (defcustom navi2ch-message-samba24-wait-sleep nil "* non-nil $B$J$i(Bsamba$B5,@);~4V$N2r=|$^$G(Bsleep$B$9$k(B" :type 'boolean :group 'navi2ch-message) ;; p2 (defcustom navi2ch-p2-use-p2 nil "* non-nil $B$J$i(Bp2$BMxMQ(B" :type 'boolean :group 'navi2ch) (defcustom navi2ch-p2-mail-address "" "* p2$B$N%a!<%k%"%I%l%9(B(ID)" :type 'string :group 'navi2ch) (defcustom navi2ch-p2-password "" "* p2$B$N%Q%9%o!<%I(B" :type 'string :group 'navi2ch) ;; Mona fonts. (defgroup navi2ch-mona nil "*Navi2ch, $B%b%J!<%U%)%s%H(B $B%b%J!<%U%)%s%H$O(B 2$B$A$c$s$M$k$N%"%9%-!<%"!<%H(B ($B0J2<(B AA) $B$r8+$k$?$a$K:n(B $B$i$l$?%U%j!<$N%U%)%s%H$G$9!#(B 2$B$A$c$s$M$k$N%"%9%-!<%"!<%H$O$=$NB?$/$,%W%m%]!<%7%g%J%k%U%)%s%H$G$"$k(B \$B!V(BMS P $B%4%7%C%/(B 12pt$B!W$rA[Dj$7$F$D$/$i$l$F$*$j!"(B UNIX $B$d(B Mac $B$N8GDjI}(B $B%U%)%s%H$G8+$k$H$:$l$F$7$^$$$^$9!#%b%J!<%U%)%s%H$O%U%j!<$GG[I[$5$l$F$$(B $B$kEl1@(B ($B$7$N$N$a(B) $B%U%)%s%H$NJ8;zI}$r(B MS P $B%4%7%C%/$K9g$o$;$?$b$N$G!"$3(B $B$l$r;H$&$H(B Windows $B%f!<%68~$1$K:n$i$l$?(B AA $B$r%:%l$J$7$G8+$k$3$H$,$G$-(B $B$^$9!#(B (http://monafont.sourceforge.net/ $B$h$j(B)" :prefix "navi2ch-" :link '(url-link :tag "$B%b%J!<%U%)%s%H(B $B%[!<%`%Z!<%8(B" "http://monafont.sourceforge.net/") :group 'navi2ch :load 'navi2ch-mona) ;; folder icons. filename relative to navi2ch-icon-directory (defvar navi2ch-online-icon "plugged.xpm" "*Icon file for online state.") (defvar navi2ch-offline-icon "unplugged.xpm" "*Icon file for offline state.") ;;; hooks (defvar navi2ch-hook nil) (defvar navi2ch-exit-hook nil) (defvar navi2ch-save-status-hook nil) (defvar navi2ch-load-status-hook nil) (defvar navi2ch-before-startup-hook nil) (defvar navi2ch-after-startup-hook nil) (defvar navi2ch-kill-emacs-hook nil) (defvar navi2ch-list-mode-hook nil) (defvar navi2ch-list-exit-hook nil) (defvar navi2ch-list-after-sync-hook nil) (defvar navi2ch-list-get-category-list-hook nil) (defvar navi2ch-board-mode-hook nil) (defvar navi2ch-board-exit-hook nil) (defvar navi2ch-board-before-sync-hook nil) (defvar navi2ch-board-after-sync-hook nil) (defvar navi2ch-board-select-board-hook nil) (defvar navi2ch-board-get-subject-list-hook nil) (defvar navi2ch-article-mode-hook nil) (defvar navi2ch-article-exit-hook nil) (defvar navi2ch-article-before-sync-hook nil) (defvar navi2ch-article-after-sync-hook nil) (defvar navi2ch-article-arrange-message-hook nil) (defvar navi2ch-article-get-message-list-hook nil) (defvar navi2ch-article-next-message-hook nil) (defvar navi2ch-article-previous-message-hook nil) (defvar navi2ch-article-hide-message-hook nil) (defvar navi2ch-article-cancel-hide-message-hook nil) (defvar navi2ch-article-add-important-message-hook nil) (defvar navi2ch-article-delete-important-message-hook nil) (defvar navi2ch-bookmark-mode-hook nil) (defvar navi2ch-bookmark-exit-hook nil) (defvar navi2ch-articles-mode-hook nil) (defvar navi2ch-articles-exit-hook nil) (defvar navi2ch-history-mode-hook nil) (defvar navi2ch-history-exit-hook nil) (defvar navi2ch-search-mode-hook nil) (defvar navi2ch-search-exit-hook nil) (defvar navi2ch-message-mode-hook nil) (defvar navi2ch-message-exit-hook nil) (defvar navi2ch-message-before-send-hook nil) (defvar navi2ch-message-after-send-hook nil) (defvar navi2ch-message-setup-message-hook nil) (defvar navi2ch-message-setup-sage-message-hook nil) (defvar navi2ch-bm-mode-hook nil) (defvar navi2ch-bm-select-board-hook nil) (defvar navi2ch-bm-exit-hook nil) (defvar navi2ch-popup-article-mode-hook nil) (defvar navi2ch-popup-article-exit-hook nil) (defvar navi2ch-head-mode-hook nil) (defvar navi2ch-head-exit-hook nil) (defvar navi2ch-mona-setup-hook nil) (defvar navi2ch-mona-undo-setup-hook nil) (defvar navi2ch-directory-mode-hook nil) (defvar navi2ch-directory-exit-hook nil) (defvar navi2ch-auto-modify-save-hook nil) ;; load hooks (defvar navi2ch-article-load-hook nil) (defvar navi2ch-articles-load-hook nil) (defvar navi2ch-board-misc-load-hook nil) (defvar navi2ch-board-load-hook nil) (defvar navi2ch-bookmark-load-hook nil) (defvar navi2ch-face-load-hook nil) (defvar navi2ch-head-load-hook nil) (defvar navi2ch-history-load-hook nil) (defvar navi2ch-list-load-hook nil) (defvar navi2ch-message-load-hook nil) (defvar navi2ch-mona-load-hook nil) (defvar navi2ch-net-load-hook nil) (defvar navi2ch-popup-article-load-hook nil) (defvar navi2ch-search-load-hook nil) (defvar navi2ch-util-load-hook nil) (defvar navi2ch-vars-load-hook nil) (defvar navi2ch-load-hook nil) (defvar navi2ch-directory-load-hook nil) ;;; errors symbols (put 'navi2ch-update-failed 'error-conditions '(error navi2ch-errors navi2ch-update-failed)) ;;; global keybindings ;; $BJL$N>l=j$NJ}$,$$$$$s$+$J!#(B (defvar navi2ch-global-map nil "navi2ch $B$N$I$N%b!<%I$G$b;H$($k(B keymap$B!#(B") (unless navi2ch-global-map (let ((map (make-sparse-keymap))) (define-key map "\C-x\C-e" 'navi2ch-disabled-key) ; Navi2ch $BFb$G$OL58z$K(B (define-key map "\C-c\C-f" 'navi2ch-find-file) ;; (define-key map "\C-c\C-g" 'navi2ch-list-goto-board) (define-key map "\C-c\C-t" 'navi2ch-toggle-offline) (define-key map "\C-c\C-u" 'navi2ch-goto-url) (define-key map "\C-c\C-v" 'navi2ch-version) ;; (define-key map "\C-c1" 'navi2ch-one-pane) ;; (define-key map "\C-c2" 'navi2ch-two-pane) ;; (define-key map "\C-c3" 'navi2ch-three-pane) (define-key map "\C-c\C-o" 'navi2ch-message-jump-to-message-buffer) (define-key map "\C-c\C-n" 'navi2ch-article-forward-sticky-buffer) (define-key map "\C-c\C-p" 'navi2ch-article-backward-sticky-buffer) (define-key map "\C-c\C-l" 'navi2ch-be2ch-toggle-login) (define-key map "\C-c\C-s" 'navi2ch-search-web) (setq navi2ch-global-map map))) (defvar navi2ch-global-view-map nil "navi2ch $B$N(B message $B%b!<%I0J30$G;H$($k(B keymap$B!#(B") (unless navi2ch-global-view-map (let ((map (make-sparse-keymap))) (set-keymap-parent map navi2ch-global-map) (suppress-keymap map t) (define-key map "1" 'navi2ch-one-pane) (define-key map "2" 'navi2ch-two-pane) (define-key map "3" 'navi2ch-three-pane) (define-key map "<" 'beginning-of-buffer) (define-key map ">" 'navi2ch-end-of-buffer) (define-key map "B" 'navi2ch-bookmark-goto-bookmark) (define-key map "g" 'navi2ch-list-goto-board) (define-key map "G" 'navi2ch-list-goto-board) (define-key map "n" 'next-line) (define-key map "p" 'previous-line) (define-key map "t" 'navi2ch-toggle-offline) (define-key map "V" 'navi2ch-version) (define-key map "\C-x\C-s" 'navi2ch-save-status) (setq navi2ch-global-view-map map))) (run-hooks 'navi2ch-vars-load-hook) ;;; navi2ch-vars.el ends here navi2ch/navi2ch-version.el000066400000000000000000000002551173560164300157570ustar00rootroot00000000000000;;; -*- Emacs-Lisp -*- ;;; @configure_input@ ;;; navi2ch-version.el.in --- template of navi2ch-version.el (provide 'navi2ch-version) (defconst navi2ch-version "2.0.0-DEV") navi2ch/navi2ch-version.el.in000066400000000000000000000002551173560164300163640ustar00rootroot00000000000000;;; -*- Emacs-Lisp -*- ;;; @configure_input@ ;;; navi2ch-version.el.in --- template of navi2ch-version.el (provide 'navi2ch-version) (defconst navi2ch-version "@VERSION@") navi2ch/navi2ch-xmas.el000066400000000000000000000044131173560164300152420ustar00rootroot00000000000000;;; navi2ch-xmas.el --- XEmacs module for navi2ch -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2003 by Navi2ch Project ;; Author: SAITO Takuya ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch-xmas) (defconst navi2ch-xmas-ident "$Id$") (require 'navi2ch) (add-hook 'navi2ch-hook 'navi2ch-offline-init-icons) (eval-when-compile (navi2ch-defalias-maybe 'make-extent 'ignore) (navi2ch-defalias-maybe 'make-glyph 'ignore) (navi2ch-defalias-maybe 'make-modeline-command-wrapper 'ignore) (navi2ch-defalias-maybe 'set-extent-keymap 'ignore) (navi2ch-defalias-maybe 'set-extent-property 'ignore) (navi2ch-defalias-maybe 'set-glyph-image 'ignore)) (defun navi2ch-offline-init-icons () (let ((extent (make-extent nil nil)) (keymap (make-sparse-keymap)) (online (make-glyph (vector 'string :data navi2ch-online-indicator))) (offline (make-glyph (vector 'string :data navi2ch-offline-indicator)))) (define-key keymap 'button2 (make-modeline-command-wrapper 'navi2ch-toggle-offline)) (set-extent-keymap extent keymap) (set-extent-property extent 'help-echo "button2 toggles offline mode") (set-glyph-image online (vector 'xpm :file (expand-file-name navi2ch-online-icon navi2ch-icon-directory))) (set-glyph-image offline (vector 'xpm :file (expand-file-name navi2ch-offline-icon navi2ch-icon-directory))) (setq navi2ch-modeline-online (cons extent online) navi2ch-modeline-offline (cons extent offline)))) ;;; navi2ch-xmas.el ends here navi2ch/navi2ch.el000066400000000000000000000505551173560164300143040ustar00rootroot00000000000000;;; navi2ch.el --- Navigator for 2ch for Emacsen -*- coding: iso-2022-7bit; -*- ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 ;; by Navi2ch Project ;; Author: Taiki SUGAWARA ;; Keywords: network, 2ch ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (provide 'navi2ch) (defconst navi2ch-ident "$Id$") (eval-when-compile (require 'cl)) ;; BEWARE: order is important. (require 'navi2ch-vars) (require 'navi2ch-face) (require 'navi2ch-util) (require 'navi2ch-net) (require 'navi2ch-list) (require 'navi2ch-article) (require 'navi2ch-popup-article) (require 'navi2ch-board-misc) (require 'navi2ch-board) (require 'navi2ch-articles) (require 'navi2ch-bookmark) (require 'navi2ch-history) (require 'navi2ch-search) (require 'navi2ch-directory) (require 'navi2ch-message) (navi2ch-ifxemacs (require 'navi2ch-xmas) (when navi2ch-on-emacs21 (require 'navi2ch-e21))) (require 'navi2ch-splash) (require 'navi2ch-version) (require 'navi2ch-jbbs-net) (require 'navi2ch-jbbs-shitaraba) (require 'navi2ch-machibbs) (require 'navi2ch-futaba) (require 'navi2ch-be2ch) (require 'navi2ch-multibbs) (require 'navi2ch-mona) (require 'navi2ch-oyster) (require 'navi2ch-localfile) (require 'navi2ch-auto-modify) (require 'navi2ch-p2) (require 'navi2ch-thumbnail) (defgroup navi2ch nil "Navigator for 2ch." :group 'hypermedia) (defvar navi2ch-ask-when-exit t) (defvar navi2ch-init nil) ;; hook $BMQ4X?t!#(B (defun navi2ch-kill-emacs-hook () (run-hooks 'navi2ch-kill-emacs-hook) (navi2ch-save-status) (navi2ch-unlock)) (defvar navi2ch-mona-enable) ;;;###autoload (defun navi2ch (&optional arg) "Navigator for 2ch for Emacs." (interactive "P") (run-hooks 'navi2ch-before-startup-hook) (unless navi2ch-init (if arg (setq navi2ch-offline (not navi2ch-offline))) (setq navi2ch-info-cache (navi2ch-make-cache navi2ch-info-cache-limit 'equal)) (load (expand-file-name navi2ch-update-file navi2ch-directory) t) (load (expand-file-name navi2ch-init-file navi2ch-directory) t) (navi2ch-lock) (when navi2ch-auto-update (let ((done nil)) (unwind-protect (progn (navi2ch-update) (setq done t)) (unless done (navi2ch-unlock))))) (add-hook 'kill-emacs-hook 'navi2ch-kill-emacs-hook) (run-hooks 'navi2ch-load-status-hook) (run-hooks 'navi2ch-hook) (let ((splash-buffer (and navi2ch-display-splash-screen (navi2ch-splash)))) (unwind-protect (navi2ch-list) (when (buffer-live-p splash-buffer) (kill-buffer splash-buffer)))) (setq navi2ch-init t) (when navi2ch-mona-enable (navi2ch-mona-setup)) (navi2ch-be2ch-login-p)) (navi2ch-list) (unless navi2ch-init (run-hooks 'navi2ch-after-startup-hook))) (defun navi2ch-version () (interactive) (message "Navigator for 2ch %s" navi2ch-version)) (defun navi2ch-save-status () "list, board, article $B$N>uBV$rJ]B8$9$k!#(B" (interactive) (message "Save status...") (run-hooks 'navi2ch-save-status-hook) (message "Save status...done")) (defun navi2ch-exit (&optional suspend) "navi2ch $B$r=*N;$9$k!#(B SUSPEND $B$,(B non-nil $B$J$i(B buffer $B$r>C$5$J$$!#(B" (interactive) (when (or suspend (not navi2ch-ask-when-exit) (if (functionp navi2ch-ask-when-exit) (funcall navi2ch-ask-when-exit "Really exit navi2ch? ") (y-or-n-p "Really exit navi2ch? "))) (run-hooks 'navi2ch-exit-hook) (navi2ch-save-status) (dolist (x (append (list (get-buffer navi2ch-list-buffer-name) (get-buffer navi2ch-board-buffer-name) (get-buffer navi2ch-popup-article-buffer-name) (get-buffer navi2ch-message-backup-buffer-name)) (navi2ch-article-buffer-list))) (when x (delete-windows-on x) (if suspend (bury-buffer x) (kill-buffer x)))) (unless suspend (setq navi2ch-init nil) (navi2ch-unlock) (remove-hook 'kill-emacs-hook 'navi2ch-kill-emacs-hook)))) (defun navi2ch-suspend () "navi2ch $B$r0l;~E*$K=*N;$9$k!#(B" (interactive) (navi2ch-exit 'suspend)) (defun navi2ch-three-pane () (interactive) (let ((list-buf (get-buffer navi2ch-list-buffer-name)) (board-buf (get-buffer navi2ch-board-buffer-name)) (art-buf (navi2ch-article-current-buffer)) (buf (current-buffer)) (start (window-start))) (delete-other-windows) (if (not (and list-buf board-buf art-buf)) (navi2ch-two-pane) (if (not (memq buf (list list-buf board-buf art-buf))) (setq buf list-buf start nil)) (switch-to-buffer list-buf) (select-window (split-window-horizontally navi2ch-list-window-width)) (switch-to-buffer board-buf) (select-window (split-window-vertically navi2ch-board-window-height)) (switch-to-buffer art-buf) (select-window (get-buffer-window buf)) (if start (set-window-start (selected-window) start))))) (defun navi2ch-one-pane () (interactive) (let ((list-buf (get-buffer navi2ch-list-buffer-name)) (board-buf (get-buffer navi2ch-board-buffer-name)) (art-buf (navi2ch-article-current-buffer)) (buf (current-buffer))) (if (> (count-windows) 1) (let ((start (window-start))) (delete-other-windows) (set-window-start (selected-window) start)) (delete-other-windows) (switch-to-buffer (cond ((eq buf list-buf) (or board-buf art-buf list-buf)) ((eq buf board-buf) (or art-buf list-buf board-buf)) ((eq buf art-buf) (or list-buf board-buf art-buf)) (t (or list-buf board-buf art-buf buf))))))) (defun navi2ch-two-pane-horizontally (buf-left buf-right) "$B2hLL$r:81&$KJ,3d$7$F(B BUF-LEFT$B!"(BBUF-RIGHT $B$r3d$jEv$F$k!#(B \(win-left win-right) $B$N%j%9%H$rJV$9(B" (delete-other-windows) (let ((win-left (selected-window)) (win-right (split-window-horizontally navi2ch-list-window-width))) (set-window-buffer win-left buf-left) (set-window-buffer win-right buf-right) (list win-left win-right))) (defun navi2ch-two-pane-vertically (buf-top buf-bottom) "$B2hLL$r>e2<$KJ,3d$7$F(B BUF-TOP$B!"(BBUF-BOTTOM $B$r3d$jEv$F$k!#(B \(win-top win-bottom) $B$N%j%9%H$rJV$9(B" (delete-other-windows) (let ((win-top (selected-window)) (win-bottom (split-window-vertically navi2ch-board-window-height))) (set-window-buffer win-top buf-top) (set-window-buffer win-bottom buf-bottom) (list win-top win-bottom))) (defun navi2ch-two-pane () (interactive) (let* ((list-buf (get-buffer navi2ch-list-buffer-name)) (board-buf (get-buffer navi2ch-board-buffer-name)) (art-buf (navi2ch-article-current-buffer)) (board-win (get-buffer-window (or board-buf ""))) (art-win (get-buffer-window (or art-buf ""))) (buf (current-buffer)) (start (window-start))) (when (not (memq buf (list list-buf board-buf art-buf))) (setq buf (or list-buf board-buf art-buf)) (unless buf (error "No navi2ch buffer")) (switch-to-buffer buf) (setq start (window-start))) (cond ((and (eq buf list-buf) (or board-buf art-buf)) (navi2ch-two-pane-horizontally buf (if art-win (or board-buf art-buf) (or art-buf board-buf)))) ((and (eq buf board-buf) list-buf (or art-win (null art-buf))) (navi2ch-two-pane-horizontally list-buf buf)) ((and (eq buf board-buf) art-buf) (navi2ch-two-pane-vertically buf art-buf)) ((and (eq buf art-buf) list-buf (or board-win (null board-buf))) (navi2ch-two-pane-horizontally list-buf buf)) ((and (eq buf art-buf) board-buf) (navi2ch-two-pane-vertically board-buf buf))) (select-window (get-buffer-window buf)) (set-window-start (selected-window) start))) (defsubst navi2ch-make-backup-file-name (file) "FILE $B$G;XDj$5$l$k%U%!%$%k$+$i%P%C%/%"%C%W%U%!%$%k$NL>A0$rJV$9!#(B" ;; $B$H$j$"$($:$O!"(BOS $B$4$H$N%P%C%/%"%C%WL>$N0c$$$O(B Emacs $B$K$^$+$;$k!#(B ;; $B8e!9JQ$($?$/$J$C$?;~$KJQ99$7K:$l$k$N$rKI$0$?$a!#(B (make-backup-file-name file)) ;; make-temp-file $B$NJ}$,0BA4$@$1$I!"B8:_$7$J$$4D6-$G$O(B make-temp-name $B$r;H$&!#(B (defsubst navi2ch-make-temp-file (file) "$B%F%s%]%i%j%U%!%$%k$r:n$k!#(B" (funcall (if (fboundp 'make-temp-file) 'make-temp-file 'make-temp-name) file)) (defvar navi2ch-info-cache nil) (defvar navi2ch-info-cache-limit 1000) (defun navi2ch-save-info (file info &optional backup) "lisp-object INFO $B$r(B FILE $B$KJ]B8$9$k!#(B BACKUP $B$,(B non-nil $B$N>l9g$O85$N%U%!%$%k$r%P%C%/%"%C%W$9$k!#(B" (setq file (expand-file-name file navi2ch-directory)) ; $B@dBP%Q%9$K$7$F$*$/(B ;; FIXME:$B$H$j$"$($:!"A4$FJ]B8$9$k$h$&$K$7$F$"$k(B ;; $B$G$-$l$PFbMF$,JQ$o$i$J$$;~$K$OJ]B8$7$?$/$J$$(B (navi2ch-cache-put file info navi2ch-info-cache) (let ((dir (file-name-directory file))) (unless (file-exists-p dir) (make-directory dir t))) (when (or (file-regular-p file) (not (file-exists-p file))) (let ((coding-system-for-write navi2ch-coding-system) (backup-file (navi2ch-make-backup-file-name file)) temp-file) (unwind-protect (progn ;; $B%U%!%$%k$,3NC$($k$h$&!"2<$N(B setq $B$O>e$N(B let $B$K0\F0(B ;; $B$7$F$O%@%a(B (setq temp-file (navi2ch-make-temp-file (file-name-directory file))) (with-temp-file temp-file (let ((standard-output (current-buffer)) print-length print-level) (princ ";;; -*- mode: emacs-lisp; -*-\n") (prin1 info))) (if (and backup (file-exists-p file)) (rename-file file backup-file t)) ;; $B>e$N(B rename $B$,@.8y$7$F2<$,<:GT$7$F$b!"(B navi2ch-load-info ;; $B$,%P%C%/%"%C%W%U%!%$%k$+$iFI$s$G$/$l$k!#(B (condition-case err (progn (unless (file-exists-p file) (with-temp-file file)) ; $B%U%!%$%k$,:n@.2DG=$+%A%'%C%/(B (rename-file temp-file file t)) (file-error (message "%s: %s" (cadr err) (mapconcat #'identity (cddr err) ", "))))) (if (and temp-file (file-exists-p temp-file)) (delete-file temp-file)))))) (defun navi2ch-load-info (file) "FILE $B$+$i(B lisp-object $B$rFI$_9~$_!"$=$l$rJV$9!#(B" (setq file (expand-file-name file navi2ch-directory)) ; $B@dBP%Q%9$K$7$F$*$/(B (navi2ch-cache-get file (progn (let ((backup-file (navi2ch-make-backup-file-name file))) (when (and (file-exists-p backup-file) (file-regular-p backup-file) (or (not (file-exists-p file)) (not (file-regular-p file)) (file-newer-than-file-p backup-file file)) (yes-or-no-p (format "%s $B$NFI$_9~$_$GLdBjH/@8!#%P%C%/%"%C%W%U%!%$%k$+$iFI$_9~$_$^$9$+(B? " file))) (setq file backup-file))) (when (file-regular-p file) (let ((coding-system-for-read navi2ch-coding-system)) (condition-case nil (navi2ch-ifemacsce (with-temp-buffer (insert-file-contents file) (goto-char (point-min)) (while (search-forward "..." nil t) (replace-match "")) (car (read-from-string (buffer-string)))) (with-temp-buffer (insert-file-contents file) (let ((standard-input (current-buffer))) (read)))) (error (when (yes-or-no-p (format "%s $B$O@5$7$/J]B8$5$l$F$$$J$$$h$&$J$N$G$9!#:o=|$7$^$9$+(B? " file)) (delete-file file)) (navi2ch-load-info file)))))) navi2ch-info-cache)) (defun navi2ch-split-window (display) "window $B$rJ,3d$9$k!#(B DISPLAY $B$,(B `board' $B$N$H$-$O(B board $B$rI=<($9$kMQ$KJ,3d$9$k!#(B DISPLAY $B$,(B `article' $B$N$H$-$O(B article $B$rI=<($9$kMQ$KJ,3d$9$k!#(B" (let ((list-win (get-buffer-window navi2ch-list-buffer-name)) (board-win (get-buffer-window navi2ch-board-buffer-name)) (art-win (and (navi2ch-article-current-buffer) (get-buffer-window (navi2ch-article-current-buffer))))) (cond (art-win (select-window art-win) (when (eq display 'board) (navi2ch-article-exit))) (board-win (select-window board-win) (when (and (eq display 'article) navi2ch-bm-stay-board-window) (delete-other-windows) (split-window-vertically navi2ch-board-window-height) (other-window 1))) (list-win (select-window list-win) (when navi2ch-list-stay-list-window (split-window-horizontally navi2ch-list-window-width) (other-window 1)))))) (defun navi2ch-goto-url (url &optional force) "URL $B$+$i%9%l$^$?$OHD$rA*$V!#(B" (interactive (list (navi2ch-read-string "URL: " (when (eq (get-text-property (point) 'navi2ch-link-type) 'url) (get-text-property (point) 'navi2ch-link)) current-prefix-arg))) (let ((article (navi2ch-article-url-to-article url)) (board (navi2ch-board-url-to-board url))) (cond (article (navi2ch-split-window 'article) (navi2ch-article-view-article board article force (cdr (assq 'number article)))) (board (navi2ch-split-window 'board) (navi2ch-list-select-board board force))))) (defun navi2ch-find-file (file) "FILE $B$+$i%9%l$^$?$OHD$rA*$V!#(B" (interactive "fFind article file or board directory: ") (let ((article-p (file-regular-p file)) (board-p (file-directory-p file))) (cond (article-p (navi2ch-split-window 'article) (navi2ch-article-view-article-from-file file)) (board-p (navi2ch-split-window 'board) (navi2ch-directory-find-directory file))))) (defun navi2ch-2ch-url-p (url) "URL $B$,(B 2ch $BFb$N(B url $B$G$"$l$P(B non-nil $B$rJV$9!#(B" (let ((host (navi2ch-url-to-host url))) (and host (not (string-match navi2ch-list-invalid-host-regexp host)) (or (member host navi2ch-2ch-host-list) ;; (string-match "^[a-z]+[0-9]*\\.2ch\\.net$" host) (string-match navi2ch-list-valid-host-regexp host) (let (list) (setq list (mapcar (lambda (x) (navi2ch-url-to-host (cdr (assq 'uri x)))) navi2ch-list-board-name-list)) (member host list))) (or (navi2ch-article-url-to-article url) (navi2ch-board-url-to-board url)) t))) (defun navi2ch-change-log-directory (changed-list) "$BJQ99$5$l$?HD$N%m%0$rJ]B8$9$k%G%#%l%/%H%j$r=$@5$9$k!#(B CHANGED-LIST $B$K$D$$$F$O(B `navi2ch-list-get-changed-status' $B$r;2>H!#(B" (dolist (node changed-list) (let ((old-dir (navi2ch-board-get-file-name (cadr node) "")) (new-dir (navi2ch-board-get-file-name (caddr node) "")) tmp-dir) (when (file-exists-p old-dir) (when (file-exists-p new-dir) (catch 'loop (while t (setq tmp-dir (expand-file-name (make-temp-name (concat "navi2ch-" (car node))) (navi2ch-temp-directory))) (unless (file-exists-p tmp-dir) (throw 'loop nil)))) (navi2ch-rename-file new-dir tmp-dir)) (make-directory (expand-file-name ".." new-dir) t) (navi2ch-rename-file old-dir new-dir))))) (defun navi2ch-update () "navi2ch-update.el $B$r%@%&%s%m!<%I$7$FZ(B)") "$B!#J]B8$7$F5CN$GB3$1$^$9$+(B? "))) (error "Lock failed"))) (defun navi2ch-unlock () "`navi2ch-directory' $B$N%m%C%/$r2r=|$9$k!#(B" (if navi2ch-use-lock (navi2ch-unlock-directory navi2ch-directory navi2ch-lock-name))) (defun navi2ch-ident-list () "$B%m!<%I$7$F$$$k(B Navi2ch $B$N3F%b%8%e!<%k$N(B Id $B$rI=<($9$k!#(B" (interactive) (let (ident-list) (mapatoms (lambda (symbol) (if (and (boundp symbol) (string-match "\\`navi2ch\\(-.+\\)?-ident\\'" (symbol-name symbol))) (setq ident-list (cons symbol ident-list))))) (when ident-list (setq ident-list (sort ident-list (lambda (a b) (string< (symbol-name a) (symbol-name b))))) (with-output-to-temp-buffer "*Navi2ch Ident List*" (princ (mapconcat 'symbol-value ident-list "\n")))))) (eval-when-compile (autoload 'browse-url-interactive-arg "browse-url")) ;;;###autoload (defun navi2ch-browse-url (url &rest args) "Navi2ch interface function for browse-url.el." (interactive (browse-url-interactive-arg "Navi2ch URL: ")) (unless navi2ch-init (save-window-excursion (navi2ch))) (if (navi2ch-2ch-url-p url) (navi2ch-goto-url url) (message "Falling back...") (apply 'navi2ch-browse-url-internal url args))) (defun navi2ch-url-at-point (point) "POINT $B$N2<$N%j%s%/$r;X$9(B URL $B$rF@$k!#(B \(defadvice browse-url-url-at-point (around my-browse-url-url-at-point-navi2ch activate compile) (let ((url (navi2ch-url-at-point (point)))) (if url (setq ad-return-value url) ad-do-it))) $B$N$h$&$K$9$k$H!"%j%s%/$KBP$7$F(B browse-url $B$r%$%s%?%i%/%F%#%V$K(B $B= message-log-max 0)) (let ((begin (point-min)) (end (save-excursion (goto-char (point-max)) (forward-line (- message-log-max)) (point)))) (delete-region begin end))))) (defvar ert--running-tests nil "List of tests that are currently in execution. This list is empty while no test is running, has one element while a test is running, two elements while a test run from inside a test is running, etc. The list is in order of nesting, innermost test first. The elements are of type `ert-test'.") (defun ert-run-test (ert-test) "Run ERT-TEST. Returns the result and stores it in ERT-TEST's `most-recent-result' slot." (setf (ert-test-most-recent-result ert-test) nil) (block error (lexical-let ((begin-marker (with-current-buffer (get-buffer-create "*Messages*") (set-marker (make-marker) (point-max))))) (unwind-protect (lexical-let ((info (make-ert--test-execution-info :test ert-test :result (make-ert-test-aborted-with-non-local-exit) :exit-continuation (lambda () (return-from error nil)))) (should-form-accu (list))) (unwind-protect (let ((ert--should-execution-observer (lambda (form-description) (push form-description should-form-accu))) (message-log-max t) (ert--running-tests (cons ert-test ert--running-tests))) (ert--run-test-internal info)) (let ((result (ert--test-execution-info-result info))) (setf (ert-test-result-messages result) (with-current-buffer (get-buffer-create "*Messages*") (buffer-substring begin-marker (point-max)))) (ert--force-message-log-buffer-truncation) (setq should-form-accu (nreverse should-form-accu)) (setf (ert-test-result-should-forms result) should-form-accu) (setf (ert-test-most-recent-result ert-test) result)))) (set-marker begin-marker nil)))) (ert-test-most-recent-result ert-test)) (defun ert-running-test () "Return the top-level test currently executing." (car (last ert--running-tests))) ;;; Test selectors. ;; Autoload since ert.el refers to it in the docstring of ;; `ert-deftest'. ;;;###autoload (defun ert-test-result-type-p (result result-type) "Return non-nil if RESULT matches type RESULT-TYPE. Valid result types: nil -- Never matches. t -- Always matches. :failed, :passed, :error -- Matches corresponding results. \(and TYPES...\) -- Matches if all TYPES match. \(or TYPES...\) -- Matches if some TYPES match. \(not TYPE\) -- Matches if TYPE does not match. \(satisfies PREDICATE\) -- Matches if PREDICATE returns true when called with RESULT." ;; It would be easy to add `member' and `eql' types etc., but I ;; haven't bothered yet. (etypecase result-type ((member nil) nil) ((member t) t) ((member :failed) (ert-test-failed-p result)) ((member :passed) (ert-test-passed-p result)) ((member :error) (ert-test-error-p result)) (cons (destructuring-bind (operator &rest operands) result-type (ecase operator (and (case (length operands) (0 t) (t (and (ert-test-result-type-p result (first operands)) (ert-test-result-type-p result `(and ,@(rest operands))))))) (or (case (length operands) (0 nil) (t (or (ert-test-result-type-p result (first operands)) (ert-test-result-type-p result `(or ,@(rest operands))))))) (not (assert (eql (length operands) 1)) (not (ert-test-result-type-p result (first operands)))) (satisfies (assert (eql (length operands) 1)) (funcall (first operands) result))))))) (defun ert-test-result-expected-p (test result) "Return non-nil if TEST's expected result type matches RESULT." (ert-test-result-type-p result (ert-test-expected-result-type test))) ;; Autoload since ert-ui.el refers to it in the docstring of ;; `ert-run-tests-interactively'. ;;;###autoload (defun ert-select-tests (selector universe) "Return the tests that match SELECTOR. UNIVERSE specifies the set of tests to select from; it should be a list of tests, or t, which refers to all tests named by symbols in `obarray'. Returns the set of tests as a list. Valid selectors: nil -- Selects the empty set. t -- Selects UNIVERSE. :new -- Selects all tests that have not been run yet. :failed, :passed, :error -- Select tests according to their most recent result. :expected, :unexpected -- Select tests according to their most recent result. a string -- Selects all tests that have a name that matches the string, a regexp. a test -- Selects that test. a symbol -- Selects the test that the symbol names, errors if none. \(member TESTS...\) -- Selects TESTS, a list of tests or symbols naming tests. \(eql TEST\) -- Selects TEST, a test or a symbol naming a test. \(and SELECTORS...\) -- Selects the tests that match all SELECTORS. \(or SELECTORS...\) -- Selects the tests that match any SELECTOR. \(not SELECTOR\) -- Selects all tests that do not match SELECTOR. \(tag TAG) -- Selects all tests that have TAG on their tags list. \(satisfies PREDICATE\) -- Selects all tests that satisfy PREDICATE. Only selectors that require a superset of tests, such as (satisfies ...), strings, :new, etc. make use of UNIVERSE. Selectors that do not, such as \(member ...\), just return the set implied by them without checking whether it is really contained in UNIVERSE." ;; This code needs to match the etypecase in ;; `ert-insert-human-readable-selector'. (etypecase selector ((member nil) nil) ((member t) (etypecase universe (list universe) ((member t) (ert-select-tests "" universe)))) ((member :new) (ert-select-tests `(satisfies ,(lambda (test) (null (ert-test-most-recent-result test)))) universe)) ((member :failed) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-type-p (ert-test-most-recent-result test) ':failed))) universe)) ((member :passed) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-type-p (ert-test-most-recent-result test) ':passed))) universe)) ((member :error) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-type-p (ert-test-most-recent-result test) ':error))) universe)) ((member :expected) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-expected-p test (ert-test-most-recent-result test)))) universe)) ((member :unexpected) (ert-select-tests `(not :expected) universe)) (string (etypecase universe ((member t) (mapcar #'ert-get-test (apropos-internal selector #'ert-test-boundp))) (list (ert--remove-if-not (lambda (test) (and (ert-test-name test) (string-match selector (ert-test-name test)))) universe)))) (ert-test (list selector)) (symbol (assert (ert-test-boundp selector)) (list (ert-get-test selector))) (cons (destructuring-bind (operator &rest operands) selector (ecase operator (member (mapcar (lambda (purported-test) (etypecase purported-test (symbol (assert (ert-test-boundp purported-test)) (ert-get-test purported-test)) (ert-test purported-test))) operands)) (eql (assert (eql (length operands) 1)) (ert-select-tests `(member ,@operands) universe)) (and ;; Do these definitions of AND, NOT and OR satisfy de ;; Morgan's rules? Should they? (case (length operands) (0 (ert-select-tests 't universe)) (t (ert-select-tests `(and ,@(rest operands)) (ert-select-tests (first operands) universe))))) (not (assert (eql (length operands) 1)) (let ((all-tests (ert-select-tests 't universe))) (ert--set-difference all-tests (ert-select-tests (first operands) all-tests)))) (or (case (length operands) (0 (ert-select-tests 'nil universe)) (t (ert--union (ert-select-tests (first operands) universe) (ert-select-tests `(or ,@(rest operands)) universe))))) (tag (assert (eql (length operands) 1)) (let ((tag (first operands))) (ert-select-tests `(satisfies ,(lambda (test) (member tag (ert-test-tags test)))) universe))) (satisfies (assert (eql (length operands) 1)) (ert--remove-if-not (first operands) (ert-select-tests 't universe)))))))) (defun ert--insert-human-readable-selector (selector) "Insert a human-readable presentation of SELECTOR into the current buffer." ;; This is needed to avoid printing the (huge) contents of the ;; `backtrace' slot of the result objects in the ;; `most-recent-result' slots of test case objects in (eql ...) or ;; (member ...) selectors. (labels ((rec (selector) ;; This code needs to match the etypecase in `ert-select-tests'. (etypecase selector ((or (member nil t :new :failed :passed :error :expected :unexpected) string symbol) selector) (ert-test (if (ert-test-name selector) (make-symbol (format "<%S>" (ert-test-name selector))) (make-symbol ""))) (cons (destructuring-bind (operator &rest operands) selector (ecase operator ((member eql and not or) `(,operator ,@(mapcar #'rec operands))) ((member tag satisfies) selector))))))) (insert (format "%S" (rec selector))))) ;;; Facilities for running a whole set of tests. ;; The data structure that contains the set of tests being executed ;; during one particular test run, their results, the state of the ;; execution, and some statistics. ;; ;; The data about results and expected results of tests may seem ;; redundant here, since the test objects also carry such information. ;; However, the information in the test objects may be more recent, it ;; may correspond to a different test run. We need the information ;; that corresponds to this run in order to be able to update the ;; statistics correctly when a test is re-run interactively and has a ;; different result than before. (defstruct ert--stats (selector (assert nil)) ;; The tests, in order. (tests (assert nil) :type vector) ;; A map of test names (or the test objects themselves for unnamed ;; tests) to indices into the `tests' vector. (test-map (assert nil) :type hash-table) ;; The results of the tests during this run, in order. (test-results (assert nil) :type vector) ;; The start times of the tests, in order, as reported by ;; `current-time'. (test-start-times (assert nil) :type vector) ;; The end times of the tests, in order, as reported by ;; `current-time'. (test-end-times (assert nil) :type vector) (passed-expected 0) (passed-unexpected 0) (failed-expected 0) (failed-unexpected 0) (error-expected 0) (error-unexpected 0) (start-time nil) (end-time nil) (aborted-p nil) (current-test nil) ;; The time at or after which the next redisplay should occur, as a ;; float. (next-redisplay 0.0)) (defun ert-stats-completed-expected (stats) "Return the number of tests in STATS that had expected results." (+ (ert--stats-passed-expected stats) (ert--stats-failed-expected stats) (ert--stats-error-expected stats))) (defun ert-stats-completed-unexpected (stats) "Return the number of tests in STATS that had unexpected results." (+ (ert--stats-passed-unexpected stats) (ert--stats-failed-unexpected stats) (ert--stats-error-unexpected stats))) (defun ert-stats-completed (stats) "Number of tests in STATS that have run so far." (+ (ert-stats-completed-expected stats) (ert-stats-completed-unexpected stats))) (defun ert-stats-total (stats) "Number of tests in STATS, regardless of whether they have run yet." (length (ert--stats-tests stats))) ;; The stats object of the current run, dynamically bound. This is ;; used for the mode line progress indicator. (defvar ert--current-run-stats nil) (defun ert--stats-test-key (test) "Return the key used for TEST in the test map of ert--stats objects. Returns the name of TEST if it has one, or TEST itself otherwise." (or (ert-test-name test) test)) (defun ert--stats-set-test-and-result (stats pos test result) "Changes STATS by replacing the test at position POS with TEST and RESULT. Also changes the counters in STATS to match." (let* ((tests (ert--stats-tests stats)) (results (ert--stats-test-results stats)) (old-test (aref tests pos)) (map (ert--stats-test-map stats))) (flet ((update (d) (if (ert-test-result-expected-p (aref tests pos) (aref results pos)) (etypecase (aref results pos) (ert-test-passed (incf (ert--stats-passed-expected stats) d)) (ert-test-failed (incf (ert--stats-failed-expected stats) d)) (ert-test-error (incf (ert--stats-error-expected stats) d)) (null) (ert-test-aborted-with-non-local-exit)) (etypecase (aref results pos) (ert-test-passed (incf (ert--stats-passed-unexpected stats) d)) (ert-test-failed (incf (ert--stats-failed-unexpected stats) d)) (ert-test-error (incf (ert--stats-error-unexpected stats) d)) (null) (ert-test-aborted-with-non-local-exit))))) ;; Adjust counters to remove the result that is currently in stats. (update -1) ;; Put new test and result into stats. (setf (aref tests pos) test (aref results pos) result) (remhash (ert--stats-test-key old-test) map) (setf (gethash (ert--stats-test-key test) map) pos) ;; Adjust counters to match new result. (update +1) nil))) (defun ert--make-stats (tests selector) "Create a new `ert--stats' object for running TESTS. SELECTOR is the selector that was used to select TESTS." (setq tests (ert--coerce-to-vector tests)) (let ((map (make-hash-table :size (length tests)))) (loop for i from 0 for test across tests for key = (ert--stats-test-key test) do (assert (not (gethash key map))) (setf (gethash key map) i)) (make-ert--stats :selector selector :tests tests :test-map map :test-results (make-vector (length tests) nil) :test-start-times (make-vector (length tests) nil) :test-end-times (make-vector (length tests) nil)))) (defun ert-run-or-rerun-test (stats test listener) ;; checkdoc-order: nil "Run the single test TEST and record the result using STATS and LISTENER." (let ((ert--current-run-stats stats) (pos (ert--stats-test-pos stats test))) (ert--stats-set-test-and-result stats pos test nil) ;; Call listener after setting/before resetting ;; (ert--stats-current-test stats); the listener might refresh the ;; mode line display, and if the value is not set yet/any more ;; during this refresh, the mode line will flicker unnecessarily. (setf (ert--stats-current-test stats) test) (funcall listener 'test-started stats test) (setf (ert-test-most-recent-result test) nil) (setf (aref (ert--stats-test-start-times stats) pos) (current-time)) (unwind-protect (ert-run-test test) (setf (aref (ert--stats-test-end-times stats) pos) (current-time)) (let ((result (ert-test-most-recent-result test))) (ert--stats-set-test-and-result stats pos test result) (funcall listener 'test-ended stats test result)) (setf (ert--stats-current-test stats) nil)))) (defun ert-run-tests (selector listener) "Run the tests specified by SELECTOR, sending progress updates to LISTENER." (let* ((tests (ert-select-tests selector t)) (stats (ert--make-stats tests selector))) (setf (ert--stats-start-time stats) (current-time)) (funcall listener 'run-started stats) (let ((abortedp t)) (let ((ert--current-run-stats stats)) (force-mode-line-update) (unwind-protect (progn (loop for test in tests do (ert-run-or-rerun-test stats test listener)) (setq abortedp nil)) (setf (ert--stats-aborted-p stats) abortedp) (setf (ert--stats-end-time stats) (current-time)) (funcall listener 'run-ended stats abortedp))) stats))) (defun ert--stats-test-pos (stats test) ;; checkdoc-order: nil "Return the position (index) of TEST in the run represented by STATS." (gethash (ert--stats-test-key test) (ert--stats-test-map stats))) ;;; Formatting functions shared across UIs. (defun ert--format-time-iso8601 (time) "Format TIME in the variant of ISO 8601 used for timestamps in ERT." (format-time-string "%Y-%m-%d %T%z" time)) (defun ert-char-for-test-result (result expectedp) "Return a character that represents the test result RESULT. EXPECTEDP specifies whether the result was expected." (let ((s (etypecase result (ert-test-passed ".P") (ert-test-failed "fF") (ert-test-error "eE") (null "--") (ert-test-aborted-with-non-local-exit "aA")))) (elt s (if expectedp 0 1)))) (defun ert-string-for-test-result (result expectedp) "Return a string that represents the test result RESULT. EXPECTEDP specifies whether the result was expected." (let ((s (etypecase result (ert-test-passed '("passed" "PASSED")) (ert-test-failed '("failed" "FAILED")) (ert-test-error '("error" "ERROR")) (null '("unknown" "UNKNOWN")) (ert-test-aborted-with-non-local-exit '("aborted" "ABORTED"))))) (elt s (if expectedp 0 1)))) (defun ert--pp-with-indentation-and-newline (object) "Pretty-print OBJECT, indenting it to the current column of point. Ensures a final newline is inserted." (let ((begin (point))) (pp object (current-buffer)) (unless (bolp) (insert "\n")) (save-excursion (goto-char begin) (indent-sexp)))) (provide 'ert-run) ;;; ert-run.el ends here navi2ch/test/ert/ert.el000066400000000000000000000727131173560164300153150ustar00rootroot00000000000000;;; ert.el --- Emacs Lisp Regression Testing ;; Copyright (C) 2007, 2008, 2010 Christian M. Ohler ;; Author: Christian M. Ohler ;; Version: 0.2 ;; Keywords: lisp, tools ;; This file is NOT part of GNU Emacs. ;; This program is free software: you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation, either version 3 of the ;; License, or (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see `http://www.gnu.org/licenses/'. ;;; Commentary: ;; ERT is a tool for automated testing in Emacs Lisp. Its main ;; features are facilities for defining and running test cases and ;; reporting the results as well as for debugging test failures ;; interactively. ;; ;; The main entry points are `ert-deftest', which is similar to ;; `defun' but defines a test, and `ert-run-tests-interactively', ;; which runs tests and offers an interactive interface for inspecting ;; results and debugging. There is also ;; `ert-run-tests-batch-and-exit' for non-interactive use. These ;; functions are autoloaded from separate files; ert.el contains only ;; the code necessary to define tests, to keep it small. This way, ;; packages can include their test definitions without forcing all of ;; ERT's UI code to be loaded. ;; ;; The body of `ert-deftest' forms resembles a function body, but the ;; additional operators `should', `should-not' and `should-error' are ;; available. `should' is similar to cl's `assert', but signals a ;; different error when its condition is violated that is caught and ;; processed by ERT. In addition, it analyzes its argument form and ;; records information that helps debugging (`assert' tries to do ;; something similar when its second argument SHOW-ARGS is true, but ;; `should' is more sophisticated). For information on `should-not' ;; and `should-error', see their docstrings. ;; ;; See ERT's info manual as well as the docstrings for more details. ;; To compile the manual, run `makeinfo ert.texinfo' in the ERT ;; directory, then C-u M-x info ert.info in Emacs to view it. ;; ;; To see some examples of tests written in ERT, see its self-tests in ;; ert-tests.el. Some of these are tricky due to the bootstrapping ;; problem of writing tests for a testing tool, others test simple ;; functions and are straightforward. ;;; Code: (eval-when-compile (require 'cl)) (require 'find-func) (require 'debug) ;;; Copies/reimplementations of cl functions. (defun ert--cl-do-remf (plist tag) "Copy of `cl-do-remf'. Modify PLIST by removing TAG." (let ((p (cdr plist))) (while (and (cdr p) (not (eq (car (cdr p)) tag))) (setq p (cdr (cdr p)))) (and (cdr p) (progn (setcdr p (cdr (cdr (cdr p)))) t)))) (defun ert--remprop (sym tag) "Copy of `cl-remprop'. Modify SYM's plist by removing TAG." (let ((plist (symbol-plist sym))) (if (and plist (eq tag (car plist))) (progn (setplist sym (cdr (cdr plist))) t) (ert--cl-do-remf plist tag)))) (defun ert--remove-if-not (ert-pred ert-list) "A reimplementation of `remove-if-not'. ERT-PRED is a predicate, ERT-LIST is the input list." (loop for ert-x in ert-list if (funcall ert-pred ert-x) collect ert-x)) (defun ert--intersection (a b) "A reimplementation of `intersection'. Intersect the sets A and B. Elements are compared using `eql'." (loop for x in a if (memql x b) collect x)) (defun ert--set-difference (a b) "A reimplementation of `set-difference'. Subtract the set B from the set A. Elements are compared using `eql'." (loop for x in a unless (memql x b) collect x)) (defun ert--set-difference-eq (a b) "A reimplementation of `set-difference'. Subtract the set B from the set A. Elements are compared using `eq'." (loop for x in a unless (memq x b) collect x)) (defun ert--union (a b) "A reimplementation of `union'. Compute the union of the sets A and B. Elements are compared using `eql'." (append a (ert--set-difference b a))) (eval-and-compile (defvar ert--gensym-counter 0)) (eval-and-compile (defun ert--gensym (&optional prefix) "Only allows string PREFIX, not compatible with CL." (unless prefix (setq prefix "G")) (make-symbol (format "%s%s" prefix (prog1 ert--gensym-counter (incf ert--gensym-counter)))))) (defun ert--coerce-to-vector (x) "Coerce X to a vector." (when (char-table-p x) (error "Not supported")) (if (vectorp x) x (vconcat x))) (defun* ert--remove* (x list &key key test) "Does not support all the keywords of remove*." (unless key (setq key #'identity)) (unless test (setq test #'eql)) (loop for y in list unless (funcall test x (funcall key y)) collect y)) (defun ert--string-position (c s) "Return the position of the first occurrence of C in S, or nil if none." (loop for i from 0 for x across s when (eql x c) return i)) (defun ert--mismatch (a b) "Return index of first element that differs between A and B. Like `mismatch'. Uses `equal' for comparison." (cond ((or (listp a) (listp b)) (ert--mismatch (ert--coerce-to-vector a) (ert--coerce-to-vector b))) ((> (length a) (length b)) (ert--mismatch b a)) (t (let ((la (length a)) (lb (length b))) (assert (arrayp a) t) (assert (arrayp b) t) (assert (<= la lb) t) (loop for i below la when (not (equal (aref a i) (aref b i))) return i finally (return (if (/= la lb) la (assert (equal a b) t) nil))))))) (defun ert--subseq (seq start &optional end) "Returns a subsequence of SEQ from START to END." (when (char-table-p seq) (error "Not supported")) (let ((vector (substring (ert--coerce-to-vector seq) start end))) (etypecase seq (vector vector) (string (concat vector)) (list (append vector nil)) (bool-vector (loop with result = (make-bool-vector (length vector) nil) for i below (length vector) do (setf (aref result i) (aref vector i)) finally (return result))) (char-table (assert nil))))) (defun ert-equal-including-properties (a b) "Return t if A and B have similar structure and contents. This is like `equal-including-properties' except that it compares the property values of text properties structurally (by recursing) rather than with `eq'. Perhaps this is what `equal-including-properties' should do in the first place; see Emacs bug 6581 at URL `http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6581'." ;; This implementation is inefficient. Rather than making it ;; efficient, let's hope bug 6581 gets fixed so that we can delete ;; it altogether. (not (ert--explain-not-equal-including-properties a b))) ;;; Defining and locating tests. ;; The data structure that represents a test case. (defstruct ert-test (name nil) (documentation nil) (body (assert nil)) (most-recent-result nil) (expected-result-type ':passed) (tags '())) (defun ert-test-boundp (symbol) "Return non-nil if SYMBOL names a test." (and (get symbol 'ert--test) t)) (defun ert-get-test (symbol) "If SYMBOL names a test, return that. Signal an error otherwise." (unless (ert-test-boundp symbol) (error "No test named `%S'" symbol)) (get symbol 'ert--test)) (defun ert-set-test (symbol definition) "Make SYMBOL name the test DEFINITION, and return DEFINITION." (when (eq symbol 'nil) ;; We disallow nil since `ert-test-at-point' and related functions ;; want to return a test name, but also need an out-of-band value ;; on failure. Nil is the most natural out-of-band value; using 0 ;; or "" or signalling an error would be too awkward. ;; ;; Note that nil is still a valid value for the `name' slot in ;; ert-test objects. It designates an anonymous test. (error "Attempt to define a test named nil")) (put symbol 'ert--test definition) definition) (defun ert-make-test-unbound (symbol) "Make SYMBOL name no test. Return SYMBOL." (ert--remprop symbol 'ert--test) symbol) (defun ert--parse-keys-and-body (keys-and-body) "Split KEYS-AND-BODY into keyword-and-value pairs and the remaining body. KEYS-AND-BODY should have the form of a property list, with the exception that only keywords are permitted as keys and that the tail -- the body -- is a list of forms that does not start with a keyword. Returns a two-element list containing the keys-and-values plist and the body." (let ((extracted-key-accu '()) (remaining keys-and-body)) (while (and (consp remaining) (keywordp (first remaining))) (let ((keyword (pop remaining))) (unless (consp remaining) (error "Value expected after keyword %S in %S" keyword keys-and-body)) (when (assoc keyword extracted-key-accu) (warn "Keyword %S appears more than once in %S" keyword keys-and-body)) (push (cons keyword (pop remaining)) extracted-key-accu))) (setq extracted-key-accu (nreverse extracted-key-accu)) (list (loop for (key . value) in extracted-key-accu collect key collect value) remaining))) ;;;###autoload (defmacro* ert-deftest (name () &body docstring-keys-and-body) "Define NAME (a symbol) as a test. BODY is evaluated as a `progn' when the test is run. It should signal a condition on failure or just return if the test passes. `should', `should-not' and `should-error' are useful for assertions in BODY. Use `ert' to run tests interactively. Tests that are expected to fail can be marked as such using :expected-result. See `ert-test-result-type-p' for a description of valid values for RESULT-TYPE. \(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] \ \[:tags '(TAG...)] BODY...)" (declare (debug (&define :name test name sexp [&optional stringp] [&rest keywordp sexp] def-body)) (doc-string 3) (indent 2)) (let ((documentation nil) (documentation-supplied-p nil)) (when (stringp (first docstring-keys-and-body)) (setq documentation (pop docstring-keys-and-body) documentation-supplied-p t)) (destructuring-bind ((&key (expected-result nil expected-result-supplied-p) (tags nil tags-supplied-p)) body) (ert--parse-keys-and-body docstring-keys-and-body) `(progn (ert-set-test ',name (make-ert-test :name ',name ,@(when documentation-supplied-p `(:documentation ,documentation)) ,@(when expected-result-supplied-p `(:expected-result-type ,expected-result)) ,@(when tags-supplied-p `(:tags ,tags)) :body (lambda () ,@body))) ;; This hack allows `symbol-file' to associate `ert-deftest' ;; forms with files, and therefore enables `find-function' to ;; work with tests. However, it leads to warnings in ;; `unload-feature', which doesn't know how to undefine tests ;; and has no mechanism for extension. (push '(ert-deftest . ,name) current-load-list) ',name)))) ;; We use these `put' forms in addition to the (declare (indent)) in ;; the defmacro form since the `declare' alone does not lead to ;; correct indentation before ert.el is loaded. Autoloading these ;; `put' forms solves this. ;;;###autoload (progn ;; TODO(ohler): figure out what these mean, and if both are needed. (put 'ert-deftest 'lisp-indent-function 2) (put 'ert-deftest 'lisp-indent-hook 2)) (defvar ert--find-test-regexp (concat "^\\s-*(ert-deftest" find-function-space-re "%s\\(\\s-\\|$\\)") "The regexp the `find-function' mechanisms use for finding test definitions.") (put 'ert-test-failed 'error-conditions '(error ert-test-failed)) (put 'ert-test-failed 'error-message "Test failed") (defun ert-pass () "Terminate the current test and mark it passed. Does not return." (throw 'ert--pass nil)) (defun ert-fail (data) "Terminate the current test and mark it failed. Does not return. DATA is displayed to the user and should state the reason of the failure." (signal 'ert-test-failed (list data))) ;;; The `should' macros. (defvar ert--should-execution-observer nil) (defun ert--signal-should-execution (form-description) "Tell the current `should' form observer (if any) about FORM-DESCRIPTION." (when ert--should-execution-observer (funcall ert--should-execution-observer form-description))) (defun ert--special-operator-p (thing) "Return non-nil if THING is a symbol naming a special operator." (and (symbolp thing) (let ((definition (indirect-function thing t))) (and (subrp definition) (eql (cdr (subr-arity definition)) 'unevalled))))) (defun ert--expand-should-1 (whole form inner-expander) "Helper function for the `should' macro and its variants." (let ((form ;; If `cl-macroexpand' isn't bound, the code that we're ;; compiling doesn't depend on cl and thus doesn't need an ;; environment arg for `macroexpand'. (if (fboundp 'cl-macroexpand) ;; Suppress warning about run-time call to cl funtion: we ;; only call it if it's fboundp. (with-no-warnings (cl-macroexpand form (and (boundp 'cl-macro-environment) cl-macro-environment))) (macroexpand form)))) ;; It's sort of a wart that `inner-expander' can't influence the ;; value the expansion returns. (cond ((atom form) (funcall inner-expander form `(list ',whole :form ',form :value ,form))) ((ert--special-operator-p (car form)) (let ((value (ert--gensym "value-"))) `(let ((,value (ert--gensym "ert-form-evaluation-aborted-"))) ,(funcall inner-expander `(setq ,value ,form) `(list ',whole :form ',form :value ,value)) ,value))) (t (let ((fn-name (car form)) (arg-forms (cdr form))) (assert (or (symbolp fn-name) (and (consp fn-name) (eql (car fn-name) 'lambda) (listp (cdr fn-name))))) (let ((fn (ert--gensym "fn-")) (args (ert--gensym "args-")) (value (ert--gensym "value-")) (default-value (ert--gensym "ert-form-evaluation-aborted-"))) `(let ((,fn (function ,fn-name)) (,args (list ,@arg-forms))) (let ((,value ',default-value)) ,(funcall inner-expander `(setq ,value (apply ,fn ,args)) `(nconc (list ',whole) (list :form `(,,fn ,@,args)) (unless (eql ,value ',default-value) (list :value ,value)) (let ((-explainer- (and (symbolp ',fn-name) (get ',fn-name 'ert-explainer)))) (when -explainer- (list :explanation (apply -explainer- ,args)))))) ,value)))))))) (defun ert--expand-should (whole form inner-expander) "Helper function for the `should' macro and its variants. Analyzes FORM and returns an expression that has the same semantics under evaluation but records additional debugging information. INNER-EXPANDER should be a function and is called with two arguments: INNER-FORM and FORM-DESCRIPTION-FORM, where INNER-FORM is an expression equivalent to FORM, and FORM-DESCRIPTION-FORM is an expression that returns a description of FORM. INNER-EXPANDER should return code that calls INNER-FORM and performs the checks and error signalling specific to the particular variant of `should'. The code that INNER-EXPANDER returns must not call FORM-DESCRIPTION-FORM before it has called INNER-FORM." (lexical-let ((inner-expander inner-expander)) (ert--expand-should-1 whole form (lambda (inner-form form-description-form) (let ((form-description (ert--gensym "form-description-"))) `(let (,form-description) ,(funcall inner-expander `(unwind-protect ,inner-form (setq ,form-description ,form-description-form) (ert--signal-should-execution ,form-description)) `,form-description))))))) (defmacro* should (form) "Evaluate FORM. If it returns nil, abort the current test as failed. Returns the value of FORM." (ert--expand-should `(should ,form) form (lambda (inner-form form-description-form) `(unless ,inner-form (ert-fail ,form-description-form))))) (defmacro* should-not (form) "Evaluate FORM. If it returns non-nil, abort the current test as failed. Returns nil." (ert--expand-should `(should-not ,form) form (lambda (inner-form form-description-form) `(unless (not ,inner-form) (ert-fail ,form-description-form))))) (defun ert--should-error-handle-error (form-description-fn condition type exclude-subtypes test) "Helper function for `should-error'. Determines whether CONDITION matches TYPE, EXCLUDE-SUBTYPES and TEST, and aborts the current test as failed if it doesn't." (let ((signalled-conditions (get (car condition) 'error-conditions)) (handled-conditions (etypecase type (list type) (symbol (list type))))) (assert signalled-conditions) (unless (ert--intersection signalled-conditions handled-conditions) (ert-fail (append (funcall form-description-fn) (list :condition condition :fail-reason (concat "the error signalled did not" " have the expected type"))))) (when exclude-subtypes (unless (member (car condition) handled-conditions) (ert-fail (append (funcall form-description-fn) (list :condition condition :fail-reason (concat "the error signalled was a subtype" " of the expected type")))))) (unless (funcall test condition) (ert-fail (append (funcall form-description-fn) (list :condition condition :fail-reason "the error signalled did not pass the test")))))) ;; FIXME: The expansion will evaluate the keyword args (if any) in ;; nonstandard order. (defmacro* should-error (form &rest keys &key type exclude-subtypes test) "Evaluate FORM. Unless it signals an error, abort the current test as failed. The error signalled additionally needs to match TYPE and satisfy TEST. TYPE should be a condition name or a list of condition names. If EXCLUDE-SUBTYPES is nil, the error matches TYPE if one of its condition names is an element of TYPE. If EXCLUDE-SUBTYPES is non-nil, the error matches TYPE if it is an element of TYPE. TEST should be a predicate." ;; Returns a gensym named `ert-form-evaluation-aborted-XXX', but ;; that's a wart, so let's not document it. (unless type (setq type ''error)) (unless test (setq test '(lambda (condition) t))) (ert--expand-should `(should-error ,form ,@keys) form (lambda (inner-form form-description-form) (let ((errorp (ert--gensym "errorp")) (form-description-fn (ert--gensym "form-description-fn-"))) `(let ((,errorp nil) (,form-description-fn (lambda () ,form-description-form))) (condition-case -condition- ,inner-form ;; We can't use ,type here because we want to evaluate it. (error (setq ,errorp t) (ert--should-error-handle-error ,form-description-fn -condition- ,type ,exclude-subtypes ,test) ;; It would make sense to have the `should-error' form ;; return the error in this case, but `ert--expand-should' ;; doesn't allow that at the moment. )) (unless ,errorp (ert-fail (append (funcall ,form-description-fn) (list :fail-reason "did not signal an error"))))))))) ;;; Explanation of `should' failures. (defun ert--proper-list-p (x) "Return non-nil if X is a proper list, nil otherwise." (loop for firstp = t then nil for fast = x then (cddr fast) for slow = x then (cdr slow) do (when (null fast) (return t)) (when (not (consp fast)) (return nil)) (when (null (cdr fast)) (return t)) (when (not (consp (cdr fast))) (return nil)) (when (and (not firstp) (eq fast slow)) (return nil)))) (defun ert--explain-format-atom (x) "Format the atom X for `ert--explain-not-equal'." (typecase x (fixnum (list x (format "#x%x" x) (format "?%c" x))) (t x))) (defun ert--explain-not-equal (a b) "Explainer function for `equal'. Returns a programmer-readable explanation of why A and B are not `equal', or nil if they are." (if (not (equal (type-of a) (type-of b))) `(different-types ,a ,b) (etypecase a (cons (let ((a-proper-p (ert--proper-list-p a)) (b-proper-p (ert--proper-list-p b))) (if (not (eql (not a-proper-p) (not b-proper-p))) `(one-list-proper-one-improper ,a ,b) (if a-proper-p (if (not (equal (length a) (length b))) `(proper-lists-of-different-length ,(length a) ,(length b) ,a ,b first-mismatch-at ,(ert--mismatch a b)) (loop for i from 0 for ai in a for bi in b for xi = (ert--explain-not-equal ai bi) do (when xi (return `(list-elt ,i ,xi))) finally (assert (equal a b) t))) (let ((car-x (ert--explain-not-equal (car a) (car b)))) (if car-x `(car ,car-x) (let ((cdr-x (ert--explain-not-equal (cdr a) (cdr b)))) (if cdr-x `(cdr ,cdr-x) (assert (equal a b) t) nil)))))))) (array (if (not (equal (length a) (length b))) `(arrays-of-different-length ,(length a) ,(length b) ,a ,b ,@(unless (char-table-p a) `(first-mismatch-at ,(ert--mismatch a b)))) (loop for i from 0 for ai across a for bi across b for xi = (ert--explain-not-equal ai bi) do (when xi (return `(array-elt ,i ,xi))) finally (assert (equal a b) t)))) (atom (if (not (equal a b)) (if (and (symbolp a) (symbolp b) (string= a b)) `(different-symbols-with-the-same-name ,a ,b) `(different-atoms ,(ert--explain-format-atom a) ,(ert--explain-format-atom b))) nil))))) (put 'equal 'ert-explainer 'ert--explain-not-equal) (defun ert--significant-plist-keys (plist) "Return the keys of PLIST that have non-null values, in order." (assert (zerop (mod (length plist) 2)) t) (loop for (key value . rest) on plist by #'cddr unless (or (null value) (memq key accu)) collect key into accu finally (return accu))) (defun ert--plist-difference-explanation (a b) "Return a programmer-readable explanation of why A and B are different plists. Returns nil if they are equivalent, i.e., have the same value for each key, where absent values are treated as nil. The order of key/value pairs in each list does not matter." (assert (zerop (mod (length a) 2)) t) (assert (zerop (mod (length b) 2)) t) ;; Normalizing the plists would be another way to do this but it ;; requires a total ordering on all lisp objects (since any object ;; is valid as a text property key). Perhaps defining such an ;; ordering is useful in other contexts, too, but it's a lot of ;; work, so let's punt on it for now. (let* ((keys-a (ert--significant-plist-keys a)) (keys-b (ert--significant-plist-keys b)) (keys-in-a-not-in-b (ert--set-difference-eq keys-a keys-b)) (keys-in-b-not-in-a (ert--set-difference-eq keys-b keys-a))) (flet ((explain-with-key (key) (let ((value-a (plist-get a key)) (value-b (plist-get b key))) (assert (not (equal value-a value-b)) t) `(different-properties-for-key ,key ,(ert--explain-not-equal-including-properties value-a value-b))))) (cond (keys-in-a-not-in-b (explain-with-key (first keys-in-a-not-in-b))) (keys-in-b-not-in-a (explain-with-key (first keys-in-b-not-in-a))) (t (loop for key in keys-a when (not (equal (plist-get a key) (plist-get b key))) return (explain-with-key key))))))) (defun ert--abbreviate-string (s len suffixp) "Shorten string S to at most LEN chars. If SUFFIXP is non-nil, returns a suffix of S, otherwise a prefix." (let ((n (length s))) (cond ((< n len) s) (suffixp (substring s (- n len))) (t (substring s 0 len))))) (defun ert--explain-not-equal-including-properties (a b) "Explainer function for `ert-equal-including-properties'. Returns a programmer-readable explanation of why A and B are not `ert-equal-including-properties', or nil if they are." (if (not (equal a b)) (ert--explain-not-equal a b) (assert (stringp a) t) (assert (stringp b) t) (assert (eql (length a) (length b)) t) (loop for i from 0 to (length a) for props-a = (text-properties-at i a) for props-b = (text-properties-at i b) for difference = (ert--plist-difference-explanation props-a props-b) do (when difference (return `(char ,i ,(substring-no-properties a i (1+ i)) ,difference context-before ,(ert--abbreviate-string (substring-no-properties a 0 i) 10 t) context-after ,(ert--abbreviate-string (substring-no-properties a (1+ i)) 10 nil)))) ;; TODO(ohler): Get `equal-including-properties' fixed in ;; Emacs, delete `ert-equal-including-properties', and ;; re-enable this assertion. ;;finally (assert (equal-including-properties a b) t) ))) (put 'ert-equal-including-properties 'ert-explainer 'ert--explain-not-equal-including-properties) ;;; Utility functions for load/unload actions. (defun ert--activate-font-lock-keywords () "Activate font-lock keywords for some of ERT's symbols." (font-lock-add-keywords nil '(("(\\(\\\\s *\\(\\sw+\\)?" (1 font-lock-keyword-face nil t) (2 font-lock-function-name-face nil t))))) (defun* ert--remove-from-list (list-var element &key key test) "Remove ELEMENT from the value of LIST-VAR if present. This can be used as an inverse of `add-to-list'." (unless key (setq key #'identity)) (unless test (setq test #'equal)) (setf (symbol-value list-var) (ert--remove* element (symbol-value list-var) :key key :test test))) ;;; Actions on load/unload. (add-to-list 'find-function-regexp-alist '(ert-deftest . ert--find-test-regexp)) (add-to-list 'minor-mode-alist '(ert--current-run-stats (:eval (ert--tests-running-mode-line-indicator)))) (add-to-list 'emacs-lisp-mode-hook 'ert--activate-font-lock-keywords) (defun ert--unload-function () "Unload function to undo the side-effects of loading ert.el." (ert--remove-from-list 'find-function-regexp-alist 'ert-deftest :key #'car) (ert--remove-from-list 'minor-mode-alist 'ert--current-run-stats :key #'car) (ert--remove-from-list 'emacs-lisp-mode-hook 'ert--activate-font-lock-keywords) nil) (defvar ert-unload-hook '()) (add-hook 'ert-unload-hook 'ert--unload-function) (provide 'ert) ;;; ert.el ends here navi2ch/test/test.el000066400000000000000000000115611173560164300147020ustar00rootroot00000000000000;; run with `emacs --batch --script test.el' ;;; load ert (when load-file-name (add-to-list 'load-path (expand-file-name "ert" (file-name-directory load-file-name)))) (require 'ert-batch) ;;; load navi2ch (setq load-path (cons (expand-file-name ".." (file-name-directory load-file-name)) load-path)) (require 'navi2ch-util) (require 'navi2ch-http-date) (require 'navi2ch-net) (require 'navi2ch-thumbnail) ;;; define tests (ert-deftest replace-html-tag () (should (string= (navi2ch-replace-html-tag " >>139
foo") " >>139 \n foo"))) (ert-deftest http-date-test-1 () (let ((expected "Sun, 06 Nov 1994 08:49:37 GMT")) (should (string= expected (navi2ch-http-date-encode (navi2ch-http-date-decode "Sun, 06 Nov 1994 08:49:37 GMT")))))) (ert-deftest http-date-test-2 () (let ((expected "Sun, 06 Nov 1994 08:49:37 GMT")) (should (string= expected (navi2ch-http-date-encode (navi2ch-http-date-decode "Sunday, 06-Nov-94 08:49:37 GMT")))))) (ert-deftest http-date-test-3 () (let ((expected "Sun, 06 Nov 1994 08:49:37 GMT")) (should (string= expected (navi2ch-http-date-encode (navi2ch-http-date-decode "Sun Nov 6 08:49:37 1994")))))) (ert-deftest tanpan-check-1 () (should (navi2ch-net-is-tanpan-thread-p "短パンマン ★<><>2010/09/15 01:09:42 ID:TanpanM<>いろいろあるさ @bg r.so ver 2008/02/19
ERROR = 5656
(e_mes = [])
<>名古屋はエ〜エ〜で ♪ "))) (ert-deftest thumbnail-save-good-work () (let* ((workdir (make-temp-file "workdir." t)) (fileFoo (expand-file-name "foo" workdir)) (fileBar (expand-file-name "bar" workdir))) (unwind-protect (progn (with-temp-file fileFoo (insert "foo")) ;; copy する (navi2ch-thumbnail-save-content fileFoo fileBar) (should (string= (with-temp-buffer (insert-file-contents fileBar) (buffer-string)) "foo")) (with-temp-file fileBar (insert "bar")) ;; overwrite (navi2ch-thumbnail-save-content fileFoo fileBar t) (should (string= (with-temp-buffer (insert-file-contents fileBar) (buffer-string)) "foo"))) (delete-directory workdir t)))) (ert-deftest thumbnail-save-interactive-check () (let ((si:read-file-name (symbol-function 'read-file-name)) intform) (unwind-protect (progn (fset 'read-file-name (lambda (a b c) (expand-file-name (or c "hoge") b))) (lexical-let ((evalform (cadr (interactive-form 'navi2ch-thumbnail-save-content)))) (fset 'intform (lambda () (eval evalform)))) (with-temp-buffer ;; prop `navi2ch-link' から読みだす。読みだせないとエラー。 (should-error (intform)) (save-excursion (insert (propertize "foo" 'navi2ch-link "foobar"))) (let ((res (intform))) (should (equal res (list "foobar" (expand-file-name "hoge" navi2ch-thumbnail-save-content-dir) 0)))) (put-text-property (point-min) (point-max) 'file-name "barbaz") (let ((res (intform))) (should (equal res (list "foobar" (expand-file-name "barbaz" navi2ch-thumbnail-save-content-dir) 0)))))) (fset 'read-file-name si:read-file-name)))) (ert-deftest thumbnail-save-file-invalid () (let* ((workdir (make-temp-file "workdir." t)) (fileFoo (expand-file-name "foo" workdir)) (fileBar (expand-file-name "bar" workdir))) (unwind-protect (progn ;; ファイルがない (should-error (navi2ch-thumbnail-save-content fileFoo fileBar)) ;; ファイルが書きこみできない (with-temp-file fileFoo (insert "foo")) (with-temp-file fileBar (insert "bar")) (chmod fileBar 256) (should-error (navi2ch-thumbnail-save-content fileFoo fileBar))) (delete-directory workdir t)))) (ert-deftest thumbnail-save-invalid-argument () ;; 無効な引数 (let* ((workdir (make-temp-file "workdir." t)) (fileFoo (expand-file-name "foo" workdir))) (unwind-protect (progn (should-error (navi2ch-thumbnail-save-content nil nil)) (should-error (navi2ch-thumbnail-save-content nil fileFoo)) (should-error (navi2ch-thumbnail-save-content fileFoo nil))) (delete-directory workdir t)))) (ert-deftest thumbnail-save-same-file () ;; 同じファイル (let* ((workdir (make-temp-file "workdir." t)) (file (expand-file-name "foo" workdir))) (unwind-protect (progn (with-temp-file file (insert "foo")) (should-error (navi2ch-thumbnail-save-content file file t)) (should-error (navi2ch-thumbnail-save-content file file nil))) (delete-directory workdir t)))) (ert-deftest bm-sort-by-number () (should (string= "1\n2\n 12\n1000\n" (with-temp-buffer (insert "1\n1000\n2\n 12\n") (navi2ch-bm-sort-by-number) (buffer-substring-no-properties (point-min) (point-max)))))) ;;; run the tests (ert-run-tests-batch) navi2ch/test/test.sh000077500000000000000000000000521173560164300147100ustar00rootroot00000000000000#!/bin/sh emacs --batch --script test.el