From baee545447ad5ddbc2c15f1af88a4e56e07fbc25 Mon Sep 17 00:00:00 2001 From: HIRAOKA Kazuyuki Date: Thu, 31 Mar 2016 17:46:08 +0900 Subject: [PATCH] copy old 'master' branch (c3a8f31) just after test160101 --- .gitignore | 7 + AUTHORS | 0 COPYING | 340 ++++ ChangeLog | 2356 +++++++++++++++++++++++++++ INSTALL | 182 +++ Makefile.am | 85 + Makefile.in | 908 +++++++++++ Makefile.old | 0 NEWS | 1 + README | 1 + acinclude.m4 | 54 + aclocal.m4 | 807 +++++++++ action-lock.el | 361 +++++ bcomp.el | 23 + bcomp.el.in | 23 + cheat-font-lock.el | 113 ++ config.guess | 1500 +++++++++++++++++ config.sub | 1608 ++++++++++++++++++ configure | 4037 ++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 169 ++ doc/CL-HOWM.ja.rd | 148 ++ doc/ChangeLog | 279 ++++ doc/Makefile.am | 19 + doc/Makefile.in | 454 ++++++ doc/OLD.rd | 2452 ++++++++++++++++++++++++++++ doc/README-j.html | 1805 +++++++++++++++++++++ doc/README.html | 241 +++ doc/README.ja.rd | 1305 +++++++++++++++ doc/README.rd | 246 +++ doc/TUTORIAL.ja.rd | 189 +++ doc/cat.png | Bin 0 -> 15701 bytes doc/come.png | Bin 0 -> 3352 bytes doc/go.png | Bin 0 -> 3394 bytes doc/index-j.html | 287 ++++ doc/index.html | 308 ++++ doc/menu.png | Bin 0 -> 22098 bytes doc/s-cat.png | Bin 0 -> 24347 bytes doc/s-menu.png | Bin 0 -> 12931 bytes doc/s-screen-shot.png | Bin 0 -> 21340 bytes doc/s-search.png | Bin 0 -> 31910 bytes doc/s-source.png | Bin 0 -> 7464 bytes doc/screen-shot.png | Bin 0 -> 14254 bytes doc/search.png | Bin 0 -> 21021 bytes doc/source.png | Bin 0 -> 14847 bytes doc/todo.png | Bin 0 -> 6159 bytes doc/updown.png | Bin 0 -> 8332 bytes elisp-comp | 89 + en/0000-00-00-000000.txt | 98 ++ en/ChangeLog | 20 + en/Makefile.am | 6 + en/Makefile.in | 385 +++++ ext/ChangeLog | 44 + ext/Makefile.am | 12 + ext/Makefile.in | 446 +++++ ext/hcal.rb | 280 ++++ ext/howm2 | 534 ++++++ ext/howmkara | 361 +++++ ext/hsplit.rb | 33 + gfunc.el | 121 ++ honest-report.el | 138 ++ howm-backend.el | 994 ++++++++++++ howm-common.el | 634 ++++++++ howm-date.el | 272 ++++ howm-lang-en.el | 62 + howm-lang-ja.el | 63 + howm-menu-en.el | 106 ++ howm-menu-ja.el | 166 ++ howm-menu.el | 963 +++++++++++ howm-misc.el | 1084 +++++++++++++ howm-mkmenu.el | 73 + howm-mode.el | 1228 ++++++++++++++ howm-reminder.el | 918 +++++++++++ howm-vars.el | 1234 ++++++++++++++ howm-version.el | 8 + howm-version.el.in | 8 + howm-view.el | 1603 ++++++++++++++++++ howm.el | 84 + illusion.el | 134 ++ install-sh | 507 ++++++ ja/0000-00-00-000000.txt | 157 ++ ja/ChangeLog | 26 + ja/Makefile.am | 6 + ja/Makefile.in | 385 +++++ missing | 367 +++++ mkinstalldirs | 161 ++ riffle.el | 634 ++++++++ sample/ChangeLog | 33 + sample/Makefile.am | 7 + sample/Makefile.in | 387 +++++ sample/bug-report.txt | 29 + sample/dot.emacs | 13 + sample/search.txt | 13 + sample/top.txt | 90 ++ test.bat | 7 + 94 files changed, 35331 insertions(+) create mode 100644 .gitignore create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 Makefile.old create mode 100644 NEWS create mode 100644 README create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 action-lock.el create mode 100644 bcomp.el create mode 100644 bcomp.el.in create mode 100644 cheat-font-lock.el create mode 100755 config.guess create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100644 doc/CL-HOWM.ja.rd create mode 100644 doc/ChangeLog create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/OLD.rd create mode 100644 doc/README-j.html create mode 100644 doc/README.html create mode 100644 doc/README.ja.rd create mode 100644 doc/README.rd create mode 100644 doc/TUTORIAL.ja.rd create mode 100644 doc/cat.png create mode 100644 doc/come.png create mode 100644 doc/go.png create mode 100644 doc/index-j.html create mode 100644 doc/index.html create mode 100644 doc/menu.png create mode 100644 doc/s-cat.png create mode 100644 doc/s-menu.png create mode 100644 doc/s-screen-shot.png create mode 100644 doc/s-search.png create mode 100644 doc/s-source.png create mode 100644 doc/screen-shot.png create mode 100644 doc/search.png create mode 100644 doc/source.png create mode 100644 doc/todo.png create mode 100644 doc/updown.png create mode 100755 elisp-comp create mode 100644 en/0000-00-00-000000.txt create mode 100644 en/ChangeLog create mode 100644 en/Makefile.am create mode 100644 en/Makefile.in create mode 100644 ext/ChangeLog create mode 100644 ext/Makefile.am create mode 100644 ext/Makefile.in create mode 100755 ext/hcal.rb create mode 100755 ext/howm2 create mode 100755 ext/howmkara create mode 100755 ext/hsplit.rb create mode 100644 gfunc.el create mode 100644 honest-report.el create mode 100644 howm-backend.el create mode 100644 howm-common.el create mode 100644 howm-date.el create mode 100644 howm-lang-en.el create mode 100644 howm-lang-ja.el create mode 100644 howm-menu-en.el create mode 100644 howm-menu-ja.el create mode 100644 howm-menu.el create mode 100644 howm-misc.el create mode 100644 howm-mkmenu.el create mode 100644 howm-mode.el create mode 100644 howm-reminder.el create mode 100644 howm-vars.el create mode 100644 howm-version.el create mode 100644 howm-version.el.in create mode 100644 howm-view.el create mode 100644 howm.el create mode 100644 illusion.el create mode 100755 install-sh create mode 100644 ja/0000-00-00-000000.txt create mode 100644 ja/ChangeLog create mode 100644 ja/Makefile.am create mode 100644 ja/Makefile.in create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 riffle.el create mode 100644 sample/ChangeLog create mode 100644 sample/Makefile.am create mode 100644 sample/Makefile.in create mode 100644 sample/bug-report.txt create mode 100644 sample/dot.emacs create mode 100644 sample/search.txt create mode 100644 sample/top.txt create mode 100644 test.bat diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c4b0a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.elc +*.tar.gz +Makefile +config.log +config.status +elc-stamp +autom4te.cache diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..2233535 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..85c1066 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,2356 @@ +2016-01-01 HIRAOKA Kazuyuki + + * configure.ac: test version + +2016-01-01 HIRAOKA Kazuyuki + + * howm.el: change the order of "require"s for correct dependencies + + * action-lock.el: require howm-common for avoiding warning + + * riffle.el: ditto. + + * illusion.el: ditto. + + * howm-lang-en.el: ditto. + + * howm-lang-ja.el: ditto. + + * howm-common.el (howm-insert-file-contents): + moved from howm-backend.el for yarot13-insert-file-contents + + * howm-vars.el (howm-menu-action-arg): moved from howm-menu.el + for avoiding reference to free variable in howm-lang-*.el + + * howm-backend.el (howm-exclude-p): moved from howm-common.el + + * howm-mode.el (howm-history): moved from howm-common.el + + * howm-common.el (howm-fontify): useless now + +2016-01-01 HIRAOKA Kazuyuki + + * cheat-font-lock.el (cheat-font-lock-compiled-body): + avoid warning in byte-compilation + "... is not known to be defined." + + * howm-date.el (howm-action-lock-date-search): ditto. + "function ... used to take 0+ arguments, now takes 1" + + * howm-misc.el (howm-ime-fix): ditto. + delete obsolete fix for avoiding + "`howm-raise-in-minor-mode-map-alist' is not known to be defined." + + * howm-vars.el (howm-dtime-format): ditto. + moved from howm-mode.el for avoiding + "... is not known to be defined." in `howm-write-log'. + + * howm-common.el (howm-normalize-file-name): ditto. + moved from howm-misc.el for avoiding "not known to be defined." + + * howm-vars.el (howm-excluded-file-regexp): ditto. + +2016-01-01 HIRAOKA Kazuyuki + + * howm.el: update copyright years + +2015-12-31 HIRAOKA Kazuyuki + + * howm.el: use cl-lib instead of cl for avoiding warnings + + * howm-cl.el: howm-cl-* are now useless. + +2015-12-31 HIRAOKA Kazuyuki + + * howm-backend.el + (howm-real-grep-single): use cl-labels for avoiding warnings + (howm-real-grep-multi): ditto. + + * howm-view.el (howm-item-list-rangeset, tests): ditto. + + * howm-reminder.el (howm-modify-form): ditto. + + * howm-mode.el (howm-normalize): ditto. + + * howm-misc.el (howm-basic-save-buffer): ditto. + + * howm-common.el (howm-with-need, howm-call-process*): ditto. + +2015-12-31 HIRAOKA Kazuyuki + + * configure.ac: version 1.4.3 + +2015-12-27 HIRAOKA Kazuyuki + + * configure.ac: version 1.4.3rc1 + + * howm-mode.el (howm-list-around): fix. howm-list-title didn't work. + +2015-05-24 HIRAOKA Kazuyuki + + * configure.ac: test version + + * howm-common.el (howm-subdirectory-p): + check "local/remote" for avoiding unnecessary password prompting + (cf. http://howm.osdn.jp/cgi-bin/hiki/hiki.cgi?Recentf) + thx > Koie-san (hide at koie.org) + + * howm-misc.el (howm-normalize-file-name): ditto. + +2015-01-31 HIRAOKA Kazuyuki + + update autotools + +2015-01-31 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el (howm-view-grep-default-option): + fix (void-function ed) error in git-head emacs (d5e3922) + + * configure: use autoconf 2.69 instead of 2.67 + + * howm.el: update copyright years + + * INSTALL: fix file mode + + * COPYING: ditto. + +2013-12-31 HIRAOKA Kazuyuki + + * configure.in: version 1.4.2 + +2013-12-25 HIRAOKA Kazuyuki + + * configure.in: version 1.4.2rc1 + +2013-03-21 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-normalize-file-name): fix. + howm-mode was not set at C-c , c (howm-create) + if howm-directory is placed under symbolic links. + thx > dareka 2013-03-20 + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + +2013-03-18 HIRAOKA Kazuyuki + + * configure.in: test version + + * gfunc.el (gfunc-with): fix an error in emacs 24.3.1 without byte-compilation. + "Can't detect type of ((:nest /home/.../) (%menu%) t) for howm-folder-grep-internal." + thx > dareka 2013-03-17 + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + +2013-01-03 HIRAOKA Kazuyuki + + test version + - update copyright years + - use "declare" instead of "lisp-indent-hook" + +2012-12-30 HIRAOKA Kazuyuki + + test version + +2012-12-29 HIRAOKA Kazuyuki + + * howm-misc.el (howm-auto-mode-interpreter-regexp): use howm-if-unbound macro + + * howm-mode.el (howm-keyword-add): fix `save-excursion' defeated by `set-buffer' + + * howm-misc.el (howm-random-walk-summary): avoid non-interactive next-line + + * howm-common.el (howm-goto-line): avoid non-interactive goto-line + + * riffle.el (riffle-contents-to-summary, riffle-set-place): ditto. + + * howm-reminder.el (howm-reminder-goto-today): ditto. + + * howm-view.el (howm-view-summary-shell-command): ditto. + + * howm-mode.el (howm-keyword-add-items): fix reference to free variable `dir' + + * howm-backend.el (howm-open-directory-independently): ditto. + +2012-12-29 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el + (howm-item-list-rangeset, howm-item-list-filter): cleaned + (howm-rangeset-belong-p): add "almighty" for the above cleaning + (howm-rangeset-hit-indicator): added for the above cleaning + (howm-rangeset-hit!, howm-rangeset-hit-p): ditto. + +2012-12-28 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el + (howm-entitle-items-style1): improve efficiency of howm-list-all + by avoiding redundant grep calls. + thx > dareka 2012-12-10, 2012-12-15, 2012-12-16, 2012-12-28 + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + (howm-item-list-filter): ditto + +2012-12-27 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el + (howm-entitle-items-style2): add features to summary buffer + when howm-view-list-title-type is 2. + - min/max length of titles + - independent title lines + - delete title header "=" + thx > Albert-san (areiner at tph.tuwien.ac.at) + http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000107.html + http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000111.html + (howm-entitle-items-style2-max-length): ditto. + (howm-entitle-items-style2-format): ditto. + (howm-entitle-items-style2-title-line): ditto. + (howm-view-summary-font-lock-keywords): ditto. + (howm-item-titles): ditto. + (howm-entitle-items-style1): delete redundant code + (howm-view-list-title): ditto. + howm-view-list-title1 and howm-view-list-title2 are deleted. + +2012-12-27 HIRAOKA Kazuyuki + + * configure.in: version 1.4.1 + + * howm-common.el (howm-get-buffer-for-file): + add comment on "File XXX no longer exists!" message. + thx > Albert-san (areiner at tph.tuwien.ac.at) + http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000103.html + http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000106.html + +2012-09-23 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-keyword-file): re-generate the keyword list + if .howm-keys doesn't exist. + thx > Albert-san (areiner at tph.tuwien.ac.at) + http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000099.html + + * howm-mode.el (howm-keyword-add-items): ditto. + + * howm-backend.el (howm-open-directory-independently): ditto. + + * howm-menu.el (howm-menu-copy-skel): fix. + scan keywords in the initial menu file. + +2012-09-13 HIRAOKA Kazuyuki + + * configure.in: test version + +2012-09-10 HIRAOKA Kazuyuki + + * howm-view.el + (howm-view-summary-format): fix. + keep the position of the field separator "|" in summary mode + even when *.txt and *.howm are mixed. + thx > http://toro.2ch.net/test/read.cgi/unix/1141892764/940 + (howm-view-summary-font-lock-keywords): ditto. + +2012-08-16 HIRAOKA Kazuyuki + + * configure.in: version 1.4.0 + +2012-02-18 HIRAOKA Kazuyuki + + * configure.in: version 1.4.0rc2 + + * howm-misc.el + (howm-auto-mode): fix. + inhibit-first-line-modes-regexps and inhibit-first-line-modes-suffixes + are obsolete in emacs-24. + thx > Sasaki Kan san (sasaki at fcc.ad.jp) + thx > dareka 2012-02-12, 2012-02-17 + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + (howm-if-unbound): ditto. + +2012-01-01 HIRAOKA Kazuyuki + + * howm.el: update copyright years + +2011-12-28 HIRAOKA Kazuyuki + + * configure.in: version 1.4.0rc1 + + * howm.el: avoid warnings about mapcar during byte-compilation. + + * howm-view.el (howm-entitle-items-style1): ditto. + + * howm-misc.el (howm-bug-report): ditto. + + * honest-report.el (honest-report): ditto. + + * howm-cl.el (howm-cl-mapcar*): avoid warnings about cl package + during byte-compilation. + + * howm-common.el (howm-call-process*): ditto. + + * howm-date.el (howm-datestr-expand-general): ditto. + + * howm-reminder.el (howm-define-reminder): ditto. + +2011-08-23 HIRAOKA Kazuyuki + + * riffle.el (riffle-pop-to-buffer): fix. + windows were split recursively if frame size is large. + thx > dareka + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + +2011-03-20 HIRAOKA Kazuyuki + + * configure.in: test version + +2011-03-11 HIRAOKA Kazuyuki + + * configure.in: fix warning "suspicious cache-id" in autoconf. + +2011-03-10 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el (howm-view-grep-default-option): + check availability of "--exclude-dir". + It requires grep >= 2.5.3, whereas popular Macs are shipped with 2.5.1. + thx > http://hibari.2ch.net/test/read.cgi/unix/1141892764/787-790n + thx > http://hibari.2ch.net/test/read.cgi/unix/1141892764/898-901n + +2011-01-19 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-menu.el + (howm-menu-recent): change arguments for broader customization. + thx > http://hibari.2ch.net/test/read.cgi/unix/1141892764/890 + (howm-menu-random): ditto. + (howm-recent-menu): ditto. + + * howm-backend.el (howm-page-viewer:file): + howm-view-external-viewer-assoc works even for directories now. + thx > http://hibari.2ch.net/test/read.cgi/unix/1141892764/891 + +2011-01-14 HIRAOKA Kazuyuki + + * configure.in: test version + +2011-01-13 HIRAOKA Kazuyuki + + * howm-vars.el (howm-define-risky-command): + avoid old-style-backquotes warning when *.elc is loaded. + thx > dareka + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + +2011-01-06 HIRAOKA Kazuyuki + + * howm-vars.el (howm-view-grep-option): cancel howm-efficiency group + because howm-grep group is already placed under it. + +2011-01-03 HIRAOKA Kazuyuki + + * howm-mode.el (howm-initialize-buffer): use howm-funcall-if-defined. + + * riffle.el (riffle-summary-mode): ditto. + +2011-01-02 HIRAOKA Kazuyuki + + * howm-backend.el: delete rast. + +2011-01-02 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-mode.el (howm-initialize-buffer): fix. + make-local-hook does not exist in emacs-24.0.50. + thx > Yamamoto Munehiro san (munepi at vinelinux.org) + + * riffle.el (riffle-summary-mode): ditto. + +2011-01-01 HIRAOKA Kazuyuki + + * howm-vars.el + (howm-list-buffers-exclude): officially supported now. + (howm-remember-first-line-to-title): ditto. + (howm-occur-force-fake-grep): ditto. change default value. + + * howm-backend.el (howm-list-buffers,howm-list-mark-ring,howm-occur): + add docstring. + + * howm-mode.el (howm-default-key-table): support new commands. + + * howm-lang-en.el (howm-menu-command-table-en): ditto. + + * howm-lang-ja.el (howm-menu-command-table-ja): ditto. + + * howm-view.el (howm-view-directory,howm-ruby-mode-bug): + delete obsolete workaround + + * howm-vars.el + (howm-action-lock-forward-fuzziness): update customize group + (howm-congrats-command): ditto. + + * howm-reminder.el (howm-highlight-date-regexp-format): ditto. + +2011-01-01 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-change-title): fix error at howm-list-all + + * howm.el: update copyright years + +2010-12-31 HIRAOKA Kazuyuki + + * howm-vars.el + (howm-menu-reminder-separators): officially supported now. + (howm-todo-separators,howm-reminder-menu-types): ditto. + (howm-schedule-sort-by-time,howm-action-lock-forward-fuzziness): ditto. + (howm-process-coding-system): ditto. + + * howm-view.el (howm-view-search-in-result-correctly): ditto. + +2010-12-31 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el + (howm-compatible-to-1.3): new option + (howm-compatibility): new customize group + (howm-file-name-format): add switch for compatibility. + change *.howm to *.txt. + + * howm-mode.el (howm-normalizer-pair): care for typically wrong setting. + thx > http://hibari.2ch.net/test/read.cgi/unix/1141892764/865-870n + +2010-12-30 HIRAOKA Kazuyuki + + * configure.in: version 1.3.9 + +2010-12-29 HIRAOKA Kazuyuki + + * configure.in: version 1.3.9rc1 + +2010-07-02 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-list-schedule): fix. + contents buffer was not updated if this function was called + from menu. + thx > http://pc12.2ch.net/test/read.cgi/unix/1141892764/826 + +2010-05-05 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm.el: update copyright years + + * howm-menu.el + (howm-menu-search): add new options for formatter and regexp search. + thx > Morgan Veyret san (morgan.veyret at gmail.com) + http://sourceforge.jp/projects/howm/lists/archive/eng/2010/000097.html + (howm-menu-general): add a new formatter to show full text. + (howm-menu-format-full): ditto. + (howm-menu-invoke): + open item when RET is hit in menu if howm-menu-list-item + property is given at the current point. + +2009-12-31 HIRAOKA Kazuyuki + + * configure.in: version 1.3.8 + +2009-08-08 HIRAOKA Kazuyuki + + * howm-vars.el (howm-excluded-dirs): add ".git". + +2009-07-23 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-mode.el (howm-keyword-search-subr): fix. + howm-list-title was ignored for come-from links. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/762 + +2009-06-08 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-reminder-font-lock-keywords): + highlight late deadlines. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/738 + +2009-06-01 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-backend.el (howm-real-grep-multi): fix. + howm-list-recent caused error "Can't exec program" or + "Spawning child process: exec format error" if howm-view-use-grep + is set and there are too many recently-changed files. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/733 + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Windows + + * howm-vars.el (howm-command-length-limit): new option + +2009-05-30 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el + (howm-filter-items-by-contents): + splitted from howm-view-remove-by-contents for functional style. + it will be used in + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/731 + (howm-entitle-items-style1): use howm-view-search-folder-fi. + (howm-item-list-filter): ditto. + +2009-05-22 HIRAOKA Kazuyuki + + * riffle.el (riffle-line-number): widen before counting. + +2009-05-02 HIRAOKA Kazuyuki + + * configure.in: test version + update automake + + * howm-vars.el + (howm-excluded-dirs): exclude _darcs/ etc. by default. + (howm-view-grep-default-option): ditto. + +2009-03-26 HIRAOKA Kazuyuki + + * configure.in: test version + +2009-03-21 HIRAOKA Kazuyuki + + * howm-backend.el (howm-real-grep-multi, howm-real-grep-single): + remove final slash for compatibility with yagrep. + http://www.kt.rim.or.jp/~kbk/yagrep/index.html + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/685-686n + + * howm-common.el (howm-expand-file-names): ditto. + +2009-02-05 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm.el: update copyright years + + * howm-reminder.el (howm-extend-deadlines): new command. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/671 + + * howm-menu.el (howm-menu-refresh-background): fix. + The main function was erased wrongly on 2006-03-11. + +2008-12-31 HIRAOKA Kazuyuki + + * configure.in: version 1.3.7 + + * howm-misc.el (howm-basic-save-buffer): fix. + inhibit "Wrote ..." message. + +2008-11-05 HIRAOKA Kazuyuki + + * configure.in: version 1.3.7rc4 + + * howm-view.el (howm-view-summary-item): fix. + use full path for equivalence check + thx > dareka + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + +2008-10-07 HIRAOKA Kazuyuki + + * configure.in: version 1.3.7rc3 + + * riffle.el (riffle-summary-update): + cancel fix on 2008-09-23, and remove corresponding feature itself. + This special feature was broken from howm-1.2 to 1.3.7rc2, + and I received no bug report. + +2008-09-23 HIRAOKA Kazuyuki + + * riffle.el (riffle-summary-update): fix. + behavior was wrong when howm-view-split-horizontally is + neither t nor nil. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/591 + +2008-09-02 HIRAOKA Kazuyuki + + * howm-misc.el (howm-configuration-for-major-mode): + modify sample for "defun*" + +2008-08-27 HIRAOKA Kazuyuki + + * configure.in: version 1.3.7rc2 + + * howm-menu.el (howm-recent-menu): + select only one item from each file in random selection. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/563-566n + + * howm-misc.el (howm-bug-report): use howm-cl-mapcan instead of mapcan + + * howm-view.el (howm-entitle-items-style2): ditto. + +2008-08-11 HIRAOKA Kazuyuki + + * configure.in: version 1.3.7rc1 + +2008-08-09 HIRAOKA Kazuyuki + + * howm-vars.el (howm-normalizer): + use original names instead of aliases + +2008-08-05 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-reminder-menu): fix. + first argument was not used, and some items were dropped + in howm-menu-categorized-reminder. + thx > taka-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste + +2008-07-25 HIRAOKA Kazuyuki + + * configure.in: test version + +2008-07-24 HIRAOKA Kazuyuki + + * howm-mode.el (howm-keyword-search-subr): + howm-view-item-list was remained wrongly + + * howm-reminder.el (howm-list-todo-sub): ditto. + + * configure.in: test version + + * howm-view.el (howm-entitle-items-style1): fix. + titleless items were not shown + + * howm-view.el (howm-entitle-items-style2): fix error. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/552 + + * howm-mode.el + (howm-call-view-summary): added for manipulation of titles + (howm-list-title-clear-previous): ditto. + + * howm-backend.el (howm-item-dup): ditto. + +2008-07-16 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-mode.el + (howm-all-items): splitted and renamed from howm-list-all + (howm-list-around): rewritten in functional style + +2008-07-15 HIRAOKA Kazuyuki + + * howm-view.el (howm-filter-items): + renamed from howm-view-filter-internal + (howm-filter-items-uniq, howm-filter-items-by-name) + (howm-filter-items-by-summary, howm-filter-items-by-name/summary) + (howm-filter-items-by-date, howm-filter-items-by-reminder) + (howm-filter-items-by-mtime): ditto. + (howm-entitle-items): + renamed from howm-view-list-title-internal + (howm-entitle-items-style1, howm-entitle-items-style2): ditto. + (howm-entitle-items-style1): return value is changed + (howm-sort-items): + renamed from howm-view-sort-internal + (howm-sort-items-by-random, howm-sort-items-by-name) + (howm-sort-items-by-numerical-name, howm-sort-items-by-date) + (howm-sort-items-by-reverse-date, howm-sort-items-by-summary) + (howm-sort-items-by-reminder, howm-sort-items-by-mtime) + (howm-sort-items-by-reverse): ditto. + (howm-view-lift-internal): avoid simple variable name for safety + + * howm-backend.el (howm-view-directory-items): + use howm-folder-items insteadly. + +2008-07-14 HIRAOKA Kazuyuki + + * configure.in: test version + +2008-07-12 HIRAOKA Kazuyuki + + * howm-mode.el + (howm-search): add argument + (howm-list-related): simplified + + * howm-vars.el (howm-view-use-grep): fix docstring + + * howm-mode.el (howm-call-view-search): removed + +2008-07-11 HIRAOKA Kazuyuki + + * howm-common.el (howm-view-in-background): don't use it in principle + + * howm-reminder.el (howm-reminder-add-font-lock): splitted + + * howm-misc.el (howm-mode-add-font-lock): ditto. + + * howm-view.el (howm-view-summary,howm-view-summary-rebuild): + add optional argument for font-lock + + * howm-mode.el (howm-search,howm-keyword-search-subr): + don't use *howm-view-font-lock-keywords* outside howm-view.el + + * action-lock.el: untabify + + * howm-view.el (howm-view-search-folder): splitted + + * howm-mode.el + (howm-list-normalize, howm-normalizer-pair, howm-normalize-oldp): + warn if howm-list-normalizer is set. + convert howm-list-normalizer to howm-normalizer if possible. + (howm-normalize-show): replace howm-list-normalize + + * howm-mode.el (howm-list-all, howm-list-recent, howm-search): + use howm-normalize-show + + * howm-backend.el (howm-open-directory-independently): ditto. + +2008-07-10 HIRAOKA Kazuyuki + + * howm-vars.el + (howm-normalizer): new option + (howm-list-normalizer): default is changed to nil + + * howm-mode.el + (howm-list-normalize): switch new or old codes + (howm-normalize): rewrite howm-list-normalize in functional style + (howm-list-normalize-old): renamed from howm-list-normalize. use prog1. + (howm-list-title-put-previous): add optional argument + + * howm-view.el + (howm-view-list-title-internal): split howm-view-list-title function + (howm-view-list-title1-internal): ditto. + (howm-view-list-title2-internal): ditto. + + * howm-mode.el + (howm-default-key-table): update docstring + (howm-migemo-client): add docstring + (howm-mode): remove useless backquote + + * howm.el: update copyright years + +2008-05-31 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el (howm-action-lock-forward-fuzziness): new option. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/519 + * howm-reminder.el (howm-action-lock-forward-modify-current-line): + ditto. + +2008-05-24 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-filter-general): fix. predicate was reversed. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/514 + +2008-05-23 HIRAOKA Kazuyuki + + * configure.in: test version + + * riffle.el + (riffle-keep-window): new option. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/507 + (riffle-summary-subr): check riffle-keep-window. + (riffle-post-command): ditto. + (riffle-summary-to-contents): ditto. + (riffle-pop-to-buffer): ditto. + (riffle-refresh-window-configuration): ditto. + + * howm-date.el (howm-date-forward-ymd): don't call riffle directly. + + * riffle.el (riffle-summary-update): use catch & throw. + +2008-05-21 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-filter-general): fix. revived for howmoney. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/503 + +2008-05-14 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-backend.el + (howm-real-grep-single): use labels instead of flet. + (howm-real-grep-multi): ditto. + + * howm-misc.el (howm-basic-save-buffer): ditto. + + * howm-mode.el (howm-expand-aliases-recursively): ditto. + + * howm-common.el (howm-with-exit): new macro for the below fix. + + * howm-reminder.el + (howm-list-schedule): fix. + cancel postprocess if no-match. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/494 + (howm-list-todo-sub): ditto. + (howm-list-reminder-final-setup): fix. + action-lock-mode was toggled unintentionally. + + * howm-common.el + (howm-list-exclude): removed (unused) + (howm-item-exclude-p): ditto. + (howm-view-item-exclude-p): ditto. + +2008-05-13 HIRAOKA Kazuyuki + + * howm-view.el + (howm-view-summary-mode): fix. + global value of font-lock-keywords-only was set wrongly + in CVS head emacs after 2008-02-24. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/484-487n + (howm-view-contents-mode): ditto. + + * howm-menu.el (howm-menu-set-face): unify the style (no effect) + +2008-04-21 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-backend.el (howm-real-grep-multi): + split howm-view-grep-option. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/458 + +2008-04-14 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-title-skip-regexp): + use howm-view-title-header. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/454 + +2008-04-11 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-dired): call howm-view-dired-goto by default. + + * howm-vars.el (howm-view-dired-keep-cursor): removed. + +2008-04-06 HIRAOKA Kazuyuki + + * howm-misc.el (howm-test): add docstring. + thx > dareka + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2007-11-07 HIRAOKA Kazuyuki + + * configure.in: test version + +2007-11-06 HIRAOKA Kazuyuki + + * howm-common.el (howm-decode-time): + fix. + today's schedule didn't appear on menu on the last day of DST. + thx > Mielke-san (peter.mielke at gmail.com) + http://lists.sourceforge.jp/mailman/archives/howm-eng/2007/000034.html + +2007-07-15 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-sort/filter-doit): fix. + return list of items for backward compatibility. + thx > taku-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder + +2007-05-28 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-summary-next-section-sub): + stop at the first hit line of each file. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/360 + +2007-05-18 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm.el: manage circular dependencies + + * elisp-comp: cancel the fix on 2007-05-05 + + * honest-report.el + (honest-report-version-assoc): be independent of howm-* + (honest-report-emacs-build-time): ditto. + howm-emacs-build-time is moved and renamed. + +2007-05-05 HIRAOKA Kazuyuki + + * configure.in: test version + + * mkinstalldirs: update to automake-1.10 + + * missing: ditto. + + * install-sh: ditto. + + * elisp-comp: ditto. & fix (keep the order of arguments) + + * config.guess: update to autotools-dev_20060702 + + * config.sub: ditto. + + * acinclude.m4: fix for aclocal 1.10 + + * Makefile.am: ditto. + +2007-05-01 HIRAOKA Kazuyuki + + * howm-menu.el + (howm-menu-reminder-format): new option. + (howm-menu-list-format): columnar formatting + thx > Mielke-san (peter.mielke at gmail.com) + http://lists.sourceforge.jp/mailman/archives/howm-eng/2007/000032.html + +2007-04-13 HIRAOKA Kazuyuki + + * configure.in: test version + +2007-04-12 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-summary-mode): fix. + summary buffer was not highlighted in howm-occur. + + * howm-backend.el (howm-occur-force-fake-grep): new option. + + * howm-view.el (howm-view-search-folder): + check FIXED-P for highlighting + + * configure.in: test version + +2007-04-11 HIRAOKA Kazuyuki + + * howm-mode.el (howm-read-aliases): fix. + RET on "BBB" in "<<< aaa <<< BBB" didn't search "aaa" + if howm-keyword-case-fold-search is non-nil. + +2007-04-06 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el + (howm-view-filter-by-mtime): fix. range was ignored. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/340 + (howm-view-filter-by-time-range): ditto. + +2007-04-03 HIRAOKA Kazuyuki + + * howm-misc.el (howm-truncate-string): fix. correct docstring + +2007-04-02 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-sort-by-random-internal): fix. + wrong variable name + + * configure.in: test version (canceled) + + * howm-view.el (howm-view-defun-sort-by): use macro to define sort-by-X + +2007-04-01 HIRAOKA Kazuyuki + + * configure.in: private test version + + * howm-reminder.el (howm-schedule-sort-items): wrongly interactive + + * howm-view.el + (howm-view-mtime): remove howm-view-xtime + (howm-view-filter-by-mtime): ditto. + (howm-view-sort-by-mtime): ditto. + (howm-view-filter-general): remove with-index + (howm-view-filter-internal): ditto. + (howm-view-sort-by-name-match): renamed to howm-view-lift-by-* + (howm-view-sort-by-summary-match): ditto. + (howm-view-sort-by-summary-match-string): ditto. + (howm-view-filter-general): removed for more functional style + (howm-view-sort-general): ditto. + (howm-view-sort-by-general-match): ditto. + (howm-view-filter-by-date-internal): fix. limit date was wrong by one + (howm-view-filter-by-reminder-internal): ditto. + (howm-view-filter-by-mtime-internal): ditto. + + * howm-reminder.el (howm-list-reminder-final-setup): fix. + schedule/todo list was not fontified. + (howm-list-schedule): defer setup of summary buffer for efficiency. + (howm-list-todo-sub): ditto. + + * howm-view.el + (howm-view-filter-by-date-internal): fix. + 03-16 was listed when limit is "to 03-15". + (howm-view-filter-by-reminder-internal): ditto. + (howm-view-filter-by-xtime): ditto. + + * configure.in: private test version + +2007-03-30 HIRAOKA Kazuyuki + + * howm-vars.el (howm-view-contents-limit): fix. not used. + also change its default from 10000 to nil for backward compatibility. + + * howm-mode.el + (howm-list-toggle-title): fix. + internal calls to howm-list-title shouldn't perform toggle. + (howm-keyword-search-subr): + defer setup of summary buffer for efficiency. + + * howm-cl.el (howm-cl-remove-duplicates*): fix. + "<<< foo" didn't appear at the top of the summary buffer + when howm-list-title is T. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/328 + + * howm-misc.el (howm-buffer-name-format): new option. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/333 + +2007-03-26 HIRAOKA Kazuyuki + + * configure.in: test version + +2007-03-22 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-contents-item): + don't insert separator "====>>> xxx.howm" in contents buffer + if just one item is displayed. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/314 + +2007-02-24 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el (howm-check-word-break): new option. + thx > Mielke-san (peter.mielke at gmail.com) + http://lists.sourceforge.jp/mailman/archives/howm-eng/2007/000030.html + + * howm-view.el (howm-view-summary-mode): + highlight today and tomorrow. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/275 + + * howm-menu.el (howm-menu-font-lock-rules): ditto. + + * howm-reminder.el (howm-highlight-date-regexp-format): + change default. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/275 + + * howm-vars.el (howm-funcall-if-defined): fix docstring + + * howm.el: update copyright years + +2007-02-15 HIRAOKA Kazuyuki + + * honest-report.el (honest-report-version-assoc): + report environment variables "LANG" etc. + +2006-12-31 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-reminder-summarizer): + show "late days" in addition to "day of week". + thx > Mielke-san (peter.mielke at gmail.com) + http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000028.html + +2006-12-18 HIRAOKA Kazuyuki + + * howm-mode.el (howm-keyword-search-open-menu): + show warning when two or more %menu% are found. + + * howm-view.el (howm-view-sort-by-general-match): + return single/multi/nil instead of conventional t/nil. + +2006-12-16 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm.el: security fix. + put risky-local-variable property + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/207 + + * configure.in: version 1.3.4 is released from another branch + +2006-12-10 HIRAOKA Kazuyuki + + * configure.in: private test version + + * howm-vars.el + (howm-define-risky-command): put risky-local-variable property + + * riffle.el: ditto. + + * illusion.el: ditto. + + * gfunc.el: ditto. + + * action-lock.el: ditto. + + * howm-cl.el (howm-cl-gensym): added. + + * howm-misc.el (howm-required-features): add honest-report + + * riffle.el (riffle-set-mode-maybe): removed (not used anywhere) + + * howm-mode.el + (howm-keyword-aliases): fix. check howm-keyword-case-fold-search. + (howm-template-string): fix. accept (lambda ...) as howm-template. + +2006-11-21 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-common.el + (howm-log-buffer-name-format): added + (howm-write-log): rename buffer according to howm-log-buffer-name-format + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/193-194n + (howm-history): raise error if history file doesn't exist. + + * howm-backend.el + (howm-keyword-buffer): + force howm-keyword-buffer-name-format even for the normal case. + (howm-keyword-buffer-name): removed + (howm-get-keyword-buffer): removed + + * howm-common.el (howm-get-buffer-for-file): added + + * howm-misc.el (howm-basic-save-buffer): + doesn't show "Wrote..." message any more. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/193-194n + +2006-10-27 HIRAOKA Kazuyuki + + * howm-common.el (howm-message-nolog): message without logging + + * howm-view.el (riffle-post-update:howm): ditto. + +2006-10-25 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-backend.el + (howm-get-keyword-buffer): fix: argument is not optional any more. + (howm-keyword-buffer-name): new option. + (howm-keyword-buffer): buffer-name is now customizable. + +2006-10-15 HIRAOKA Kazuyuki + + * configure.in: test version + + * cheat-font-lock.el (cheat-font-lock-20040624-format-p): fix. + font-lock-compile-keywords may add a help-echo + in CVS-head emacs, and its result can be longer than expected. + see 2005-10-21 in lisp/ChangeLog. + http://lists.gnu.org/archive/html/emacs-commit/2005-10/msg00635.html + http://cvs.savannah.gnu.org/viewcvs/emacs/emacs/lisp/font-lock.el.diff?tr1=1.276&tr2=1.277&r1=text&r2=text + +2006-10-03 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-backend.el (howm-page-open:file): fix. need widen. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/160-161n + +2006-09-12 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-todo-priority-schedule-bottom): make it deeper + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/149 + + * howm-vars.el (howm-huge++): new parameter + +2006-09-10 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-version.el.in: remove howm-{en,ja}-dir + + * howm-lang-ja.el (howm-day-of-week-ja): Use a list instead of a string. + + * howm-lang-en.el (howm-day-of-week-en): ditto. + Use "Sun" instead of "S". + + * howm-menu.el (howm-day-of-week-string): + howm-day-of-week-{en,ja} can be a list. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/147 + +2006-07-26 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-menu.el (howm-menu-list-regexp): fix. + RET at "7" in "> 2006-07-26-015606 |" in menu buffer caused error. + thx > na-san + +2006-06-28 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-bayesian-set): new command. + +2006-06-27 HIRAOKA Kazuyuki + + * howm-mode.el (howm-expand-aliases-recursively): + CL function "copy-list" is replaced with built-in "copy-sequence". + + * howm-menu.el (howm-menu-shortcut-sort): ditto. + +2006-06-26 HIRAOKA Kazuyuki + + * howm-reminder.el (howm-list-active-todo): new command. + + * howm-view.el (howm-view-sort-by-summary-match-string): new feature. + + * howm-misc.el (howm-mode-set-buffer-name): new tool. + thx > Mielke-san (peter at exegenix.com) + http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000020.html + http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000022.html + thx > anonymous + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool + + * howm-vars.el (howm-menu-reminder-separators): fix. + "Between schedule and todo" corresponds to nil. + + * howm-reminder.el (howm-todo-separators): new option. + + * howm-backend.el + (howm-page-type): page can be nil. + (howm-make-page:nil): ditto. + (howm-item-page): ditto. + + * howm-reminder.el (howm-todo-insert-separators): + use nil-page item instead of string. + + * howm-menu.el (howm-menu-format-todo): ditto. + +2006-06-10 HIRAOKA Kazuyuki + + * COPYING: fix. + obsolete address of FSF is corrected. + thx > Fujimura Yuki san + +2006-06-05 HIRAOKA Kazuyuki + + * configure.in: version 1.3.3 + +2006-05-20 HIRAOKA Kazuyuki + + * configure.in: version 1.3.3rc1 + +2006-05-15 HIRAOKA Kazuyuki + + * configure.in: test version + +2006-05-13 HIRAOKA Kazuyuki + + * howm-common.el (howm-with-coding-system): + accept a pair (for-read . for-write). + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/96 + + * howm-vars.el (howm-process-coding-system): ditto. + +2006-05-09 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-common.el (howm-with-coding-system): fix. + howm-process-coding-system should be checked at runtime. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/94-95n + +2006-05-02 HIRAOKA Kazuyuki + + * configure.in: test version + +2006-05-01 HIRAOKA Kazuyuki + + * howm-misc.el (howm-remember-get-title): fix. + remove newline from title string. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/92 + +2006-04-29 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-remember-first-line-to-title): new option. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/72-75n + + * howm-common.el (howm-call-process): fix. + set coding-system for temporary buffer. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/63-83n + +2006-04-23 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-remember-submit): fix. + "%file" in howm-template now works even for howm-remember. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/61 + +2006-03-25 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-remember): new command. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/24-25n + +2006-03-22 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-view.el (howm-view-list-title-type): + experimental code to show title before summary of each item. + thx > Highfly san + http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000025.html + +2006-03-21 HIRAOKA Kazuyuki + + * illusion.el: require easy-mmode explicitly + + * honest-report.el (honest-report-window-list): + support emacs20 (and meadow-1.15). + +2006-03-12 HIRAOKA Kazuyuki + + * configure.in: test version + +2006-03-11 HIRAOKA Kazuyuki + + * howm-mode.el (howm-migemo-client-option): new option. + thx > http://pc11.2ch.net/test/read.cgi/unix/1141892764/9 + +2006-02-04 HIRAOKA Kazuyuki + + * configure.in: test version + +2006-02-02 HIRAOKA Kazuyuki + + * howm.el: fix. + howmz needs both howm-menu-command-table-{en,ja}. + + * configure.in: test version + + * howm.el: fix. + require howm-lang-* before it is really needed. + this may be necessary for howmz. + thx > (TxT) san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus + http://noir.s7.xrea.com/archives/000136.html + +2006-01-23 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-menu.el (howm-menu-categorized-reminder): + howm-menu-categorized-todo is replaced with -reminder. + fix error when howm-menu-reminder-separators is not null. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/919 + +2006-01-19 HIRAOKA Kazuyuki + + * configure.in: test version + +2006-01-18 HIRAOKA Kazuyuki + + * howm-backend.el (howm-page-viewer:file): + list files in directory in contents buffer. + +2006-01-17 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-menu.el (howm-menu-categorized-todo): + misc. can be omitted. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/909 + +2006-01-16 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-menu.el (howm-menu-categorized-todo): new feature (experimental). + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/885 + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/890 + + * howm-cl.el (howm-cl-find-if): added + + * howm-backend.el (howm-folder-grep-internal:pages): cleaned. + + * howm-menu.el (howm-menu-general): cleaned. + you can make your own list in menu buffer more easily. + see howm-menu-schedule, howm-menu-todo, howm-menu-recent, and + howm-menu-search for example. + +2006-01-10 HIRAOKA Kazuyuki + + * howm-misc.el (howm-buffer-p): fix. + .howm-keys and its alternatives were overlooked. + thx > http://d.hatena.ne.jp/dasm/20060110 + +2006-01-07 HIRAOKA Kazuyuki + + * configure.in: test version + +2006-01-06 HIRAOKA Kazuyuki + + * howm.el: update copyright years + + * cheat-font-lock.el (cheat-font-lock-20040624-format-p): fix. + avoid "Font-lock trying to use keywords before setting them up" error + during 'make' for emacs-22.0.50.1 (CVS version). + thx > http://tty0.exblog.jp/2944244 + thx > http://d.hatena.ne.jp/yoshk/20060102 + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/867 + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/873-874n + +2005-12-17 HIRAOKA Kazuyuki + + * howm-vars.el (howm-custom-reminder-get-types): fix. + treat unknown marks correctly. + + * howm-reminder.el (howm-modify-reminder-types): + example is commented out. + +2005-12-10 HIRAOKA Kazuyuki + + * configure.in: test version + (packagedir): fix lispdir for xemacs with packagedir + +2005-12-09 HIRAOKA Kazuyuki + + * configure.in: endir and jadir are now obsolete. + --with-rel-datadir is canceled. + thx > HONJOH Eiji san. irodori@irodori.sakura.ne.jp + thx > ZENITANI Seiji san. zenitani@mac.com + + * howm-menu.el (howm-menu-initialize-skel): ditto. + read howm-menu-*.el instead of {en,ja}/0000-00-00-000000.howm + + * howm-mkmenu.el: ditto. + new script to make howm-menu-*.el from {en,ja}/0000-00-00-000000.howm + + * Makefile.am: ditto. + add howm-menu-*.el. delete en/ and ja/. + + * howm-lang-en.el: separate language-dependent variables + + * howm-lang-ja.el: ditto. + + * howm-menu.el (howm-lang-ref): ditto. + + * howm-common.el (howm-get-symbol): ditto. + + * Makefile.am (howm_LISP): ditto. + +2005-12-02 HIRAOKA Kazuyuki + + * configure.in: new option --with-howmdir + default lispdir is now .../site-lisp. + thx > HONJOH Eiji san. irodori@irodori.sakura.ne.jp + + * Makefile.am (howm_LISP): ditto. + + * acinclude.m4 (ac_output): ditto. + + * bcomp.el.in (bcomp-files): ditto. + +2005-11-30 HIRAOKA Kazuyuki + + * configure.in: test version + + * configure.in: new option --with-rel-datadir + previous --with-data-into-lispdir is canceled. + thx > ZENITANI Seiji san. zenitani@mac.com + thx > HONJOH Eiji san. irodori@irodori.sakura.ne.jp + +2005-11-29 HIRAOKA Kazuyuki + + * configure.in: test version + + * configure.in: new option --with-data-into-lispdir + thx > HONJOH Eiji san. irodori@irodori.sakura.ne.jp + +2005-11-27 HIRAOKA Kazuyuki + + * howm-vars.el (howm-mode-off-hook): fix. + remove duplicated defcustom. + thx > TAKEMURA Masayuki san. ICG04984@nifty.com + +2005-11-26 HIRAOKA Kazuyuki + + * howm-menu.el (howm-menu-skel): + - use symbol-value instead of eval. + - howm-en-dir and howm-ja-dir can be relative paths from the directory + of howm.elc or howm.el. (for Carbon emacs package) + thx > ZENITANI Seiji san. zenitani@mac.com + thx > HONJOH Eiji san. irodori@irodori.sakura.ne.jp + thx > ARAI Ryotaro san. misty@... + http://lists.sourceforge.jp/mailman/archives/macemacsjp-users/2005-November/000756.html + http://lists.sourceforge.jp/mailman/archives/macemacsjp-users/2005-November/000760.html + +2005-11-22 HIRAOKA Kazuyuki + + * howm-vars.el (howm-menu-todo-priority): change default. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/75-77n + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/842-846n + +2005-11-12 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-open-named-file): new command. + thx > Eduardo Ochs san + http://lists.sourceforge.jp/mailman/archives/howm-eng/2005/000010.html + +2005-11-11 HIRAOKA Kazuyuki + + * howm-reminder.el (howm-action-lock-forward-open): + don't depend on magic-return. + + * howm-date.el (howm-action-lock-date-search): + now it works even on menu buffer. + thx > Kaneko Kensuke san + http://d.hatena.ne.jp/a666666/20051110/1131621183 + + * howm-reminder.el (howm-action-lock-forward): + keep my text property for jump from menu. + + * howm-menu.el (howm-menu-list-action): + keyword is now optional. + + * howm-date.el (howm-action-lock-date-prompt): + misleading message is corrected. + thx > Kaneko Kensuke san + http://d.hatena.ne.jp/a666666/20051110/1131621183 + +2005-11-06 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-menu.el (howm-menu-list-action): fix. + history list was broken. + +2005-11-05 HIRAOKA Kazuyuki + + * howm-menu.el (howm-menu-list-action): + get text property not from buffer but from argument. + + * action-lock.el (action-lock-general): + keep text properties. + + * howm-common.el (howm-history): + disable expansion of %schedule etc. + + * configure.in: test version + +2005-11-04 HIRAOKA Kazuyuki + + * howm-common.el (howm-replace-region): + `format' in xemacs doesn't keep text properties. + + * howm-menu.el (howm-menu-list-format): + store item to text property so that we can open it directly + instead of searching text when RET is hit on ">" in menu buffer. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/823 + + * action-lock.el (action-lock-general): add docstring + + * configure.in: version 1.3.2 + + * howm-mode.el (howm-keyword-search-subr): + cancel the below change. this problem should be fixed + more fundamentally. + + * howm-mode.el (howm-keyword-search-subr): + search lines whose entire texts exactly match to the geven keyword + when open-unique-p is non-nil. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/823 + +2005-10-27 HIRAOKA Kazuyuki + + * configure.in: version 1.3.2rc4 + +2005-10-25 HIRAOKA Kazuyuki + + * howm-vars.el (howm-view-dired-keep-cursor): new option. + thx > 797 http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2005-10-24 HIRAOKA Kazuyuki + + * configure.in: version 1.3.2rc3 + something was wrong in 'cvs commit' of rc2. + +2005-10-20 HIRAOKA Kazuyuki + + * configure.in: version 1.3.2rc2 + + * howm-view.el + (howm-view-dired): fix. + require dired-vir for xemacs, and remove duplicates. + thx > 797 http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2005-10-16 HIRAOKA Kazuyuki + + * configure.in: version 1.3.2rc1 + +2005-10-15 HIRAOKA Kazuyuki + + * howm-common.el (howm-read-event): fix. + error when RET is hit on date format [2005-10-15] in menu buffer + in xemacs. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/797-801n + +2005-10-08 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-common.el (howm-view-in-background): fix. + This macro is moved from howm-view.el because it is used across files. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/789-791n + +2005-09-30 HIRAOKA Kazuyuki + + * configure.in: test version + +2005-09-27 HIRAOKA Kazuyuki + + * howm-backend.el (howm-occur): new command + +2005-09-26 HIRAOKA Kazuyuki + + * howm-vars.el (howm-view-contents-limit): default is changed to 10000 + +2005-09-07 HIRAOKA Kazuyuki + + * action-lock.el + (action-lock-open-regexp): include / at the end + (action-lock-browse-regexp): ditto + +2005-09-06 HIRAOKA Kazuyuki + + * configure.in: test version + + * honest-report.el (honest-report-screenshot): fix. + window-end (without update) can be negative when completion window + is displayed temporally. + +2005-09-05 HIRAOKA Kazuyuki + + * howm-common.el (howm-call-process-here): set coding system + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/784 + + * howm-vars.el (howm-process-coding-system): new option + +2005-09-01 HIRAOKA Kazuyuki + + * howm-backend.el (action-lock-find-file): expand-file-name + thx > hattori-san + http://www.tom.sfc.keio.ac.jp/~hattori/blog/setting/2005/08/howm.html + +2005-08-29 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el (howm-list-title): add howm-action-lock-date-search + so that title is shown for `howm-search-today' (C-c , , .) by default. + thx > nobu-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + + * howm-date.el (howm-action-lock-date-search): add `howm-set-command'. + +2005-08-24 HIRAOKA Kazuyuki + + * howm-view.el: add (require 'riffle) + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/782 + +2005-08-17 HIRAOKA Kazuyuki + + * configure.in: version 1.3.1 + +2005-08-13 HIRAOKA Kazuyuki + + * configure.in: version 1.3.1rc1 + + * howm-vars.el (howm-get-locale): fix. never return nil + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/780-781n + +2005-08-12 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-summary-omit-same-name): new option + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/779 + +2005-08-11 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-title-skip-regexp): new option + +2005-08-09 HIRAOKA Kazuyuki + + * howm-misc.el (howm-bug-shot): new command for bug report + +2005-08-08 HIRAOKA Kazuyuki + + * howm-misc.el (howm-bug-report): + call bugshot-version-assoc internally + + * honest-report.el: new tool for better bug report + +2005-08-03 HIRAOKA Kazuyuki + + * configure.in: test version + + * riffle.el (riffle-define-derived-mode): + defined to avoid slow down in xemacs. + +2005-08-02 HIRAOKA Kazuyuki + + * gfunc.el (gfunc-call): recursion is rewritten to loop. + recursion seems remarkably slow in xemacs. + + * configure.in: version 1.3.0 + +2005-07-28 HIRAOKA Kazuyuki + + * configure.in: version 1.3.0rc5 + +2005-07-27 HIRAOKA Kazuyuki + + * howm-view.el + (howm-view-summary-item): + don't show same name repeatedly. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/754 + (howm-view-summary-stripe): canceled. + the above should be better. + (howm-view-contents-mode): fix. + howm-view-summary-font-lock-keywords must not work in contents buffer. + (howm-view-summary-font-lock-keywords): add default. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/754 + + * howm-reminder.el (howm-with-schedule-summary-format): + use this macro and never use howm-view-summary-format directly. + +2005-07-26 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-summary-stripe): new option. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/754 + + * configure.in: version 1.3.0rc4 again. mistake in packaging + +2005-07-25 HIRAOKA Kazuyuki + + * configure.in: version 1.3.0rc4 + + * howm-vars.el (howm-excluded-file-regexp-dir-char): fix. + Both "\" and "/" indicate directory in win. + +2005-07-23 HIRAOKA Kazuyuki + + * howm-common.el (howm-message-time): + Don't hide "No match" message even when howm-message-time is set. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/751 + + * riffle.el (riffle-summary): cleaned. + global varibale *howm-view-summary-nop* is replaced with optional + argument. + "No match" message is moved to howm-view-summary. + +2005-07-16 HIRAOKA Kazuyuki + + * howm-common.el (howm-call-process): + howm-call-process-last-command keeps all arguments + so that we can repeat the last call-process + by (apply #'howm-call-process howm-call-process-last-command). + +2005-07-14 HIRAOKA Kazuyuki + + * howm-vars.el (howm-content-from-region): fix. Labels are corrected. + +2005-07-11 HIRAOKA Kazuyuki + + * configure.in: version 1.3.0rc3 + +2005-07-08 HIRAOKA Kazuyuki + + * howm-menu.el (howm-menu-dynamic-setup): fix. + canceled change in this function on 2005-05-10, + so that underlines appear on come-from keywords + in reminder lines in menu. + +2005-06-26 HIRAOKA Kazuyuki + + * configure.in: version 1.3.0rc2 + +2005-06-25 HIRAOKA Kazuyuki + + * howm-vars.el (howm-menu-lang): + check locale to select default language. + +2005-06-21 HIRAOKA Kazuyuki + + * configure.in: version 1.3.0rc1 + +2005-06-17 HIRAOKA Kazuyuki + + * configure.in: test version + + * riffle.el (riffle-pop-to-buffer): fix. + howm-view-summary-window-size didn't work when it is greater than + half size. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/724 + +2005-06-13 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-mode.el (howm-template-receive-buffer): new option. + By default, previous buffer is also passed to howm-template + when it is a function. + thx > http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment + +2005-06-10 HIRAOKA Kazuyuki + + * configure.in: test version + +2005-06-09 HIRAOKA Kazuyuki + + * howm-cl.el: cl functions are collected to single file + and defalias-ed to inhibit warning during byte-compilation + in emacs-22.0.50.1 (CVS version). + + * howm-misc.el (howm-auto-save-buffers-p): + Inhibit warning 'reference to free variable' + for auto-save-buffers-regexp during byte-compilation + in emacs-22.0.50.1 (CVS version). + +2005-06-08 HIRAOKA Kazuyuki + + * configure.in: test version + +2005-06-07 HIRAOKA Kazuyuki + + * howm-vars.el + (howm-action-lock-forward-kill-buffer): new option. + + * howm-reminder.el (howm-action-lock-forward-invoke): + call undo-boundary before modification. + howm-action-lock-forward-save-buffer shouldn't work when + the corresponding buffer is already modified before this action. + +2005-06-03 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-common.el (howm-time-difference-second): don't omit milliseconds. + I can't remember the reason of omission + and I cancel this change on 2005-03-09. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/709 + + * action-lock.el (action-lock-magic-return): fix. + snatched RET from pobox-newline in pobox-mode. + Indeed, old code snatched all RET wrongly from any modes. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/711 + +2005-06-02 HIRAOKA Kazuyuki + + * configure.in: test version + +2005-06-01 HIRAOKA Kazuyuki + + * howm-vars.el: fix. + write color condition in each defface + to avoid error on monochrome display. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/706 + +2005-05-31 HIRAOKA Kazuyuki + + * configure.in: test version + +2005-05-30 HIRAOKA Kazuyuki + + * howm-reminder.el + (howm-action-lock-forward): fix. + menu buffer was collapsed when one hits RET on "@" + in "[2005-05-30]@ foo" in menu buffer with below setting. + - (setq howm-menu-expiry-hours 2) + - (setq howm-action-lock-forward-save-buffer t) + - (setq howm-menu-refresh-after-save t) ;; this is default + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/705 + (howm-action-lock-forward-invoke): + kill-buffer when current-buffer was newly opened for this procedure. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/705 + +2005-05-29 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el (howm-funcall-if-defined): + cheat to avoid annoying "not known to be defined" warning + in byte-compilation. + thx > http://pc8.2ch.net/test/read.cgi/unix/1111816102/485 + + * howm-view.el (howm-view-sort-items): + defalias for compatibility. howmz needs it. + http://noir.s7.xrea.com/archives/000136.html + http://noir.s7.xrea.com/pub/zaurus/howmz.el + thx > (TxT) san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus + +2005-05-27 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-todo-menu): fix. + Insertion of separators was wrong. + At least one item was placed between separators regardless of priority. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/703 + +2005-05-25 HIRAOKA Kazuyuki + + * howm-vars.el (howm-action-lock-forward-save-buffer): 'defcustom'ed + +2005-05-24 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-mode.el: fix. + check direct requiring of howm-mode before loading howm-common. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/698 + +2005-05-23 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-vars.el + (howm-menu-list-face): Its default is empty now + so that we can avoid troubles of reverse-video for emacs -nw. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/697 + (howm-reminder-done-face): default is empty for light background + + * howm-mode.el (howm-refresh): C-c , r on menu calls howm-menu-refresh + because howm-initialize-buffer on menu erases all underlines. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/696 + +2005-05-21 HIRAOKA Kazuyuki + + * howm-mode.el (howm-keyword-aliases): + expand aliases of come-from keywords recursively + + * howm-vars.el (howm-keyword-list-alias-sep): + enable aliases of come-from keywords by default + +2005-05-20 HIRAOKA Kazuyuki + + * configure.in: test version + +2005-05-19 HIRAOKA Kazuyuki + + * howm-vars.el (howm-experimental): moved to howm group + + * howm-reminder.el (howm-highlight-date-regexp-format): new option. + Some people like to highlight 2005-05-19 rather than [2005-05-19] + as today, because they use [2005-05-19 20:52]@ for their schedule. + + * configure.in: test version + + * howm-backend.el (howm-folder-territory-p:dir): fix + wrongly returned nil for non-existing file name. + +2005-05-18 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-common.el (howm-first-n): fix. + avoid "Args out of range" error in xemacs. + It happened at %recent in menu when number of note files are small + or empty files exist. + thx > Nanashi-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2005-05-17 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-reminder.el (howm-todo-menu): + remove deep reminders before sorting + + * howm-vars.el (howm-menu-reminder-separators): new option + + * howm-menu.el (howm-menu-todo): item can be a separator string + +2005-05-16 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-mode.el (howm-keyword-search): + menu is searched only in howm-directory + + * howm-menu.el (howm-menu): fix + todo and schedule were searched only in howm-directory + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/685 + + * howm-view.el (howm-view-directory): + set font-lock-keywords only when howm-ruby-mode-bug is non-nil + + * howm-vars.el (howm-user-font-lock-keywords): new option + thx > taku-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Idea + +2005-05-15 HIRAOKA Kazuyuki + + * howm-reminder.el + (howm-schedule-sort-converter): + aware of time part in "[2005-05-15 21:36]@" + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/683 + (howm-schedule-menu): show future schedule one more day + + * configure.in: test version + + * howm-vars.el (howm-after-save-hook): new hook + + * howm-misc.el (howm-set-mode-p): howm-directory can be rast folder + + * howm-backend.el + (howm-create-file): + use howm-folder-get-page-create instead of direct mkdir + (howm-make-folder:rast): rast folder + + * gfunc.el (gfunc-def): set lisp-indent-hook + + * howm-menu.el (howm-menu): + mkdir only when howm-directory is dir folder + so that howm-directory can be any folder. + At now, howm-menu-file should be defined in that case; + howm-menu-initialize-skel assumes dir folder. + +2005-05-14 HIRAOKA Kazuyuki + + * configure.in: test version + + * howm-misc.el (howm-prefix-names): renamed from howm-prex + + * howm-vars.el (howm-prefix): renaming to howm-prefix-key is canceled + +2005-05-13 HIRAOKA Kazuyuki + + * howm-vars.el (howm-excluded-file-regexp): fix: wrong const values + +2005-05-12 HIRAOKA Kazuyuki + + * howm-view.el (howm-item-list-rangeset): add doc-str around this func + +2005-05-11 HIRAOKA Kazuyuki + + * howm-vars.el (howm-prefix-key): renamed to distinguish from function. + use defvar instead of defcustom + since setting this variable after loading howm may cause confusion. + + * configure.in: test version + + * howm-mode.el (howm-default-key-table): update + some are added and some are now globally bound. + + * howm-view.el + (howm-view-list-title): + - remove-duplicates + - toggle title/notitle + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/427 + (howm-view-summary-rebuild): simplified code + + * howm-misc.el + (howm-random-walk): list all memo first when called on non-howm buffer. + (howm-auto-narrow): variable howm-auto-narrow can be t. + + * howm-vars.el: Some hidden features are moved to official sections. + +2005-05-10 HIRAOKA Kazuyuki + + * howm-menu.el + (howm-menu-shortcut-warn): show list of defined keys + (howm-menu-invisible): + tried to remove use of invisible property. but failed. + + * howm-view.el + (howm-view-search-in-result): aware of paragraph + (howm-view-remove-by-contents): aware of paragraph + (howm-view-list-title): aware of paragraph + (howm-view-filter-uniq): aware of paragraph + + * howm-vars.el (howm-file-name-format): added to howm-efficiency group + +2005-05-08 HIRAOKA Kazuyuki + + * riffle.el (howm-view-summary-window-size): + moved to howm-experimental group + + * howm-vars.el (howm-view-before-open-hook): fix. + used but not defined. + + * configure.in: test version + + * howm-vars.el: some variables are moved from howm-reminder.el. + (howm-todo-menu-types): "." (done) is included by default + so that one can easily customize several patterns by setting + howm-menu-todo-priority and howm-todo-priority-done-bottom. + Anyway, default value of howm-menu-todo-priority hides "." in menu. + Since it may cause slow response, I also added it into howm-efficiency + group. + (howm-viewer): new customize group + + * howm-menu.el (howm-menu-invoke): + RET in menu-mode causes jump when the current line matches + to howm-menu-list-regexp. No need to type C-a now. + + * howm-vars.el (howm-history-limit): 0 means 'no record' + + * howm-common.el (howm-write-history): remove duplicated entries + + * howm-view.el: follow the changes of riffle.el + +2005-05-07 HIRAOKA Kazuyuki + + * riffle.el: use gfunc instead of riffle-controller + + * howm.el: order of requires is modified; riffle.el requires gfunc.el. + + * configure.in: test version + + * howm-vars.el + (howm-view-grep-command): + use "grep -E" and "grep -F" instead of egrep and fgrep by default. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/670 + (howm-view-grep-file-stdin-option): + use "-f -" by default. + + * howm-backend.el (howm-real-grep-multi): + use howm-view-grep-command instead if howm-view-fgrep-command is nil. + + * howm-mode.el (howm-list-title): + show title by default for list of all/recent/around notes. + + * howm-vars.el: new file + begin to support defcustom + thx > + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?RoadMap + http://pc8.2ch.net/test/read.cgi/unix/1077881095/668 + + * configure.in: version 1.2.3 + +2005-05-06 HIRAOKA Kazuyuki + + * configure.in: version 1.2.3rc1 + + * howm-common.el (howm-with-schedule-interval): fix. + moved from howm-reminder.el because that macro is used + in another file howm-menu.el. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/669 + + * howm-mode.el (howm-search): fix. + call howm-list-all for empty regexp. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/668 + +2005-05-02 HIRAOKA Kazuyuki + + * configure.in: version 1.2.2 + +2005-04-29 HIRAOKA Kazuyuki + + * howm-view.el + (*howm-view-font-lock-keywords*): Spelling is corrected, and + worthless function howm-view-font-lock-keywords is removed. + (howm-view-contents-mode): hilight of searched keyword is prior + to howm-view-contents-font-lock-keywords + +2005-04-28 HIRAOKA Kazuyuki + + * cheat-font-lock.el: fix. + canceled the use of font-lock-add-keywords in + cheat-font-lock-merge-keywords because "compiled keywords" may be + passed from current implementation of riffle-contents-mode. + I guess this is also related to 2005-04-08 problem. + + * howm-common.el (howm-write-history): new option, howm-history-limit + +2005-04-26 HIRAOKA Kazuyuki + + * howm-reminder.el (howm-todo-parse-string): avoid warning + "variable dummy bound but not referenced" in xemacs + + * howm-common.el (howm-dont-warn-free-variable): + use macro for frequent trick to avoid warning + + * howm-mode.el (howm-image-file-name-regexps): fix. + Meadow-1.15 doesn't have image-file-name-regexps. + thx > Touhi-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2005-04-24 HIRAOKA Kazuyuki + + * howm-common.el (howm-exclude-p): fix. + No file was searched when howm-directory is a dot-directory + like "~/.howm". + My previous cleaning up on this function is canceled. + See the comment in the source code. + thx > taku-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2005-04-23 HIRAOKA Kazuyuki + + * howm-menu.el (howm-menu-copy-skel): fix. + When come-from keyword %menu% isn't found, + assume 0000-00-00-000000.howm as menu file if it exists. + This can happen when you write (setq howm-keyword-header "<==") + in sample/dot.emacs and then do 'make install && make test'. + thx > taku-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + + * howm-mode.el (howm-image-file-name-regexps): fix. + (image-file-name-regexp) caused an error on Meadow 2.10 + unless max-specpdl-size is increased from the default value 600. + thx > taku-san, Mo-san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?MaxSpecpdlSize + + * Makefile.am (EXTRA_DIST): test.bat was not included in tar.gz + +2005-04-15 HIRAOKA Kazuyuki + + * howm-menu.el (howm-menu): swap priority of two variables + howm-menu-top and howm-menu-file. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/648 + +2005-04-08 HIRAOKA Kazuyuki + + * cheat-font-lock.el: use old code for emacs20 + New code may make howm-view-summary-open too slow. + +2005-04-02 HIRAOKA Kazuyuki + + * howm-backend.el (howm-real-grep-multi): new option variables + howm-view-grep-extended-option and howm-view-grep-fixed-option. + Now, we can use grep -E and grep -F instead of egrep and fgrep. + This will help linux-zaurus users. + +2005-03-30 HIRAOKA Kazuyuki + + * howm-menu.el (howm-menu-search): embed search result into menu + +2005-03-27 HIRAOKA Kazuyuki + + * howm-backend.el + (howm-folder-grep-internal:pages): fix. + list order was reversed when howm-list-all-title is non-nil + (howm-real-grep-single): fix. accept list of single pattern + (howm-folder-files:namazu): variable r bound but not referenced + +2005-03-20 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-filter-by-contents): support C-u (= reject) + +2005-03-17 HIRAOKA Kazuyuki + + * howm-view.el (howm-view-contents-item): fix. + doubly displayed when matched to the last line of paragraph + +2005-03-09 HIRAOKA Kazuyuki + + * howm-common.el (howm-time-difference-second): omit microsecond + + * howm-misc.el (howm-elp): initialize profiler + +2005-03-08 HIRAOKA Kazuyuki + + * test.bat: invoke test environment for win + +2005-03-03 HIRAOKA Kazuyuki + + * howm-misc.el + (howm-random-walk-text): clean + (howm-random-walk): kill old buffers after jump + +2005-03-02 HIRAOKA Kazuyuki + + * howm-misc.el (howm-random-walk): automatic random walk + +2005-02-28 HIRAOKA Kazuyuki + + * howm-mode.el (howm-list-normalize): fix. + error when '[hoge' is searched. + +2005-02-25 HIRAOKA Kazuyuki + + * howm-misc.el (howm-bug-report): C-u to dump variables + + * howm-mode.el (howm-create-default-title-content): fix. + howm-title-from-search was ignored. + + * howm-backend.el (howm-list-buffers-exclude): new option + +2005-02-24 HIRAOKA Kazuyuki + + * howm-mode.el (howm-keyword-list): never return "" + +2005-02-23 HIRAOKA Kazuyuki + + * howm-common.el: fix for xemacs and emacs20 + +2005-02-22 HIRAOKA Kazuyuki + + * gfunc.el (gfunc-with): replace gfunc-def-with + + * howm-backend.el: howm-page-load is renamed to howm-page-open + + * howm-view.el (howm-view-set-item-list): comeback for howmoney + + * howm-backend.el (howm-folder-grep-internal:namazu): fix. + didn't work for 'or' patterns + +2005-02-21 HIRAOKA Kazuyuki + + * howm-backend.el + (howm-folder-grep-internal:pages): fix. + Specification of howm-page-type was changed. + (howm-folder-grep-internal:pages-buffers): fix. + must return list of items + + * howm-common.el (howm-exclude-p): fast check only + +2005-02-20 HIRAOKA Kazuyuki + + * howm-backend.el (howm-files-in-directory): clean up + + * howm-mode.el (howm-content-from-region): new option variable + +2005-02-18 HIRAOKA Kazuyuki + + * howm-mode.el (howm-excluded-file-regexp): add (image-file-name-regexp) + + * howm-backend.el (howm-fake-grep-file): check file name before search. + thx > Mocchan-san, Matsushita-san + http://www.bookshelf.jp/pukiwiki/pukiwiki.php?%BC%C1%CC%E4%BD%B8%2F42 + + * howm-mode.el (howm-exclude-p): fast check option + + * gfunc.el (gfunc-def): Description string is supported. + + * howm-backend.el: clean up + + * howm-common.el (howm-sort): renamed from howm-view-sort-items + + * illusion.el: renamed from proxy-buffer.el + + * gfunc.el + (gfunc-def): args-declaration is added. + (gfunc-def-with): new func + + * howm-backend.el: + (howm-search-path-folder): howm-search-path is list of 'folders'. + (howm-make-folder:namazu): namazu folder + (howm-make-folder:rot13dir): rot13 folder/page + + * proxy-buffer.el: new file diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..b42a17a --- /dev/null +++ b/INSTALL @@ -0,0 +1,182 @@ +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, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + 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 at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' 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. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +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 supports 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' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' 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' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +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 host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +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. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--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. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..4a80863 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,85 @@ +# shamelessly copied from navi2ch-cvs-0.0.20031209 +# $Id: Makefile.am,v 1.23 2010-12-31 12:12:48 hira Exp $ + +howm_LISP = \ + howm.el \ + howm-menu.el \ + howm-reminder.el \ + howm-date.el \ + howm-misc.el \ + howm-mode.el \ + howm-view.el \ + howm-backend.el \ + howm-common.el \ + howm-vars.el \ + howm-version.el \ + howm-lang-en.el \ + howm-lang-ja.el \ + howm-menu-en.el \ + howm-menu-ja.el \ + honest-report.el \ + action-lock.el \ + riffle.el \ + gfunc.el \ + illusion.el \ + cheat-font-lock.el + +EXTRA_DIST = Makefile.old bcomp.el howm-mkmenu.el $(howm_LISP) \ + bcomp.el.in howm-version.el.in test.bat +BUILT_SOURCES = $(srcdir)/howm-version.el $(srcdir)/bcomp.el +SUBDIRS = doc ext en ja sample + +MENU_SRC = en/0000-00-00-000000.txt ja/0000-00-00-000000.txt +MENU_EL = $(srcdir)/howm-menu-en.el $(srcdir)/howm-menu-ja.el +TEST_INIT = sample/dot.emacs + +AM_MAKEFLAGS = HOWM_MAKE=t + +$(srcdir)/howm-version.el: $(srcdir)/howm-version.el.in $(srcdir)/configure.ac Makefile + rm -f $@.tmp && \ + sed -e 's/~\(VERSION\)~/$(VERSION)/' \ + $(srcdir)/howm-version.el.in > $@.tmp && \ + mv $@.tmp $@ + +$(MENU_EL): $(srcdir)/howm-mkmenu.el $(MENU_SRC) + $(EMACS) -q -batch -l $(srcdir)/howm-mkmenu.el + +# snap: +# rm -f $(srcdir)/howm-version.el && \ +# $(MAKE) $(AM_MAKEFLAGS) VERSION=@VERSION@-`date +%y%m%d` dist elcdist && \ +# rm -f $(srcdir)/howm-version.el && \ +# $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/howm-version.el + +# recompile: $(howm_LISP) +# rm -f $(ELCFILES) && \ +# HOWM_MAKE=t EMACS="$(EMACS)" $(SHELL) $(srcdir)/elisp-comp $(howm_LISP) + +# 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: $(srcdir)/bcomp.el.in $(srcdir)/Makefile.am + rm -f $@ && \ + list=`for file in $(howm_LISP); do echo -n "\"$$file\" "; done` && \ + sed -e "s/@\(howm_LISP\)@/$$list/" < $(srcdir)/bcomp.el.in > $@ + +# $(ELCFILES): $(howm_LISP) +# $(MAKE) $(AM_MAKEFLAGS) recompile + +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 + +test: + HOWM_TEST=t $(EMACS) -q --no-site-file -l $(TEST_INIT) diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..6db111a --- /dev/null +++ b/Makefile.in @@ -0,0 +1,908 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 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@ + +# shamelessly copied from navi2ch-cvs-0.0.20031209 +# $Id: Makefile.am,v 1.23 2010-12-31 12:12:48 hira Exp $ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +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 = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) mkinstalldirs \ + COPYING config.guess config.sub install-sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +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 = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(howmdir)" +howmLISP_INSTALL = $(INSTALL_DATA) +LISP = $(howm_LISP) +am__ELFILES = action-lock.el cheat-font-lock.el gfunc.el \ + honest-report.el howm-backend.el howm-common.el howm-date.el \ + howm-lang-en.el howm-lang-ja.el howm-menu-en.el \ + howm-menu-ja.el howm-menu.el howm-misc.el howm-mode.el \ + howm-reminder.el howm-vars.el howm-version.el howm-view.el \ + howm.el illusion.el riffle.el +am__ELCFILES = $(am__ELFILES:.el=.elc) +ELCFILES = $(LISP:.el=.elc) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CVS = @CVS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +howmdir = @howmdir@ +htmldir = @htmldir@ +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@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +howm_LISP = \ + howm.el \ + howm-menu.el \ + howm-reminder.el \ + howm-date.el \ + howm-misc.el \ + howm-mode.el \ + howm-view.el \ + howm-backend.el \ + howm-common.el \ + howm-vars.el \ + howm-version.el \ + howm-lang-en.el \ + howm-lang-ja.el \ + howm-menu-en.el \ + howm-menu-ja.el \ + honest-report.el \ + action-lock.el \ + riffle.el \ + gfunc.el \ + illusion.el \ + cheat-font-lock.el + +EXTRA_DIST = Makefile.old bcomp.el howm-mkmenu.el $(howm_LISP) \ + bcomp.el.in howm-version.el.in test.bat + +BUILT_SOURCES = $(srcdir)/howm-version.el $(srcdir)/bcomp.el +SUBDIRS = doc ext en ja sample +MENU_SRC = en/0000-00-00-000000.txt ja/0000-00-00-000000.txt +MENU_EL = $(srcdir)/howm-menu-en.el $(srcdir)/howm-menu-ja.el +TEST_INIT = sample/dot.emacs +AM_MAKEFLAGS = HOWM_MAKE=t +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .el .elc +am--refresh: Makefile + @: +$(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'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__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) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +.el.elc: + if test "$(EMACS)" != "no"; then \ + am__dir=. am__subdir_includes=''; \ + case $@ in */*) \ + am__dir=`echo '$@' | sed 's,/[^/]*$$,,'`; \ + am__subdir_includes="-L $$am__dir -L $(srcdir)/$$am__dir"; \ + esac; \ + test -d "$$am__dir" || $(MKDIR_P) "$$am__dir" || exit 1; \ + $(EMACS) --batch \ + $(AM_ELCFLAGS) $(ELCFLAGS) \ + $$am__subdir_includes -L $(builddir) -L $(srcdir) \ + --eval "(defun byte-compile-dest-file (f) \"$@\")" \ + --eval "(unless (byte-compile-file \"$<\") (kill-emacs 1))"; \ + else :; fi + +install-howmLISP: $(howm_LISP) $(ELCFILES) + @$(NORMAL_INSTALL) + @if test "$(EMACS)" != no && test -n "$(howmdir)"; then \ + list='$(howm_LISP)'; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(howmdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(howmdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + echo " $(howmLISP_INSTALL) '$$d$$p' '$(DESTDIR)$(howmdir)/$$f'"; \ + $(howmLISP_INSTALL) "$$d$$p" "$(DESTDIR)$(howmdir)/$$f" || exit $$?; \ + if test -f $${p}c; then \ + echo " $(howmLISP_INSTALL) '$${p}c' '$(DESTDIR)$(howmdir)/$${f}c'"; \ + $(howmLISP_INSTALL) "$${p}c" "$(DESTDIR)$(howmdir)/$${f}c" || exit $$?; \ + else : ; fi; \ + done; \ + else : ; fi + +uninstall-howmLISP: + @$(NORMAL_UNINSTALL) + @test "$(EMACS)" != no && test -n "$(howmdir)" || exit 0; \ + list='$(howm_LISP)'; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + files="$$files "`echo "$$files" | sed 's|$$|c|'`; \ + dir='$(DESTDIR)$(howmdir)'; $(am__uninstall_files_from_dir) + +clean-lisp: + -rm -f $(ELCFILES) + +# 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. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + 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; \ + ($(am__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" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + 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 || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$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 \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || 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 $(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__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_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) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(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 \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { 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) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(howmdir)"; 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: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-howmLISP + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +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-howmLISP + +.MAKE: $(am__recursive_targets) all check install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-lisp cscope cscopelist-am ctags ctags-am dist dist-all \ + dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-howmLISP install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-howmLISP + + +$(srcdir)/howm-version.el: $(srcdir)/howm-version.el.in $(srcdir)/configure.ac Makefile + rm -f $@.tmp && \ + sed -e 's/~\(VERSION\)~/$(VERSION)/' \ + $(srcdir)/howm-version.el.in > $@.tmp && \ + mv $@.tmp $@ + +$(MENU_EL): $(srcdir)/howm-mkmenu.el $(MENU_SRC) + $(EMACS) -q -batch -l $(srcdir)/howm-mkmenu.el + +# snap: +# rm -f $(srcdir)/howm-version.el && \ +# $(MAKE) $(AM_MAKEFLAGS) VERSION=@VERSION@-`date +%y%m%d` dist elcdist && \ +# rm -f $(srcdir)/howm-version.el && \ +# $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/howm-version.el + +# recompile: $(howm_LISP) +# rm -f $(ELCFILES) && \ +# HOWM_MAKE=t EMACS="$(EMACS)" $(SHELL) $(srcdir)/elisp-comp $(howm_LISP) + +# 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: $(srcdir)/bcomp.el.in $(srcdir)/Makefile.am + rm -f $@ && \ + list=`for file in $(howm_LISP); do echo -n "\"$$file\" "; done` && \ + sed -e "s/@\(howm_LISP\)@/$$list/" < $(srcdir)/bcomp.el.in > $@ + +# $(ELCFILES): $(howm_LISP) +# $(MAKE) $(AM_MAKEFLAGS) recompile + +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 + +test: + HOWM_TEST=t $(EMACS) -q --no-site-file -l $(TEST_INIT) + +# 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: diff --git a/Makefile.old b/Makefile.old new file mode 100644 index 0000000..e69de29 diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..bcbcc3f --- /dev/null +++ b/NEWS @@ -0,0 +1 @@ +see doc/ diff --git a/README b/README new file mode 100644 index 0000000..bcbcc3f --- /dev/null +++ b/README @@ -0,0 +1 @@ +see doc/ diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..b0a7656 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,54 @@ +# serial 3 + +# 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 () +$2 +(princ "\n") ; make sure the output has trailing newline. +) +_ACEOF +$EMACS -batch -q -l $ac_temp -f ac-temp-func | sed -e '/^ *$/d' > $ac_output +$1=`cat $ac_output` +rm -f $ac_temp $ac_output; }]) + +# grab and hack from lispdir.m4 + +## ------------------------ +## Emacs LISP file handling +## From Ulrich Drepper +## Almost entirely rewritten by Alexandre Oliva +## ------------------------ + +AC_DEFUN([AM_PATH_LISPDIR], + [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])], + [ + if test x${lispdir+set} != xset; then + AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [dnl + AC_EMACS_LISP(am_cv_lispdir,[dnl +(defvar result nil) +(setq load-path (nreverse load-path)) +(while load-path + (if (string-match "\\`\\(.+/site-lisp\\)/?\\'" (car load-path)) + (setq result (match-string 1 (car load-path)) + load-path nil) + (setq load-path (cdr load-path)))) +(princ (or result (expand-file-name "../site-lisp" data-directory)))]) + if test -z "$am_cv_lispdir"; then + am_cv_lispdir='${datadir}/emacs/site-lisp' + fi + ]) + lispdir="$am_cv_lispdir" + fi + ]) + AC_SUBST(lispdir)]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..07227fd --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,807 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 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. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2013 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. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.14' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.14.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.14.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 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], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 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_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +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-2013 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 macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# 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.65])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 +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +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], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])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]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# 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])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# 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_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 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 +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 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. + +# 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])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2013 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_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 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_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 is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 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_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], +[m4_foreach_w([_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-2013 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_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# 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 ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + 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 + 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 + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + 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]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 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_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 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="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 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_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 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_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. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + 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]) diff --git a/action-lock.el b/action-lock.el new file mode 100644 index 0000000..95c4c98 --- /dev/null +++ b/action-lock.el @@ -0,0 +1,361 @@ +;;; action-lock.el --- invoke magic action by RET key on spell strings + +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;; HIRAOKA Kazuyuki +;; $Id: action-lock.el,v 1.72 2011-12-31 15:07:28 hira Exp $ +;; +;; 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 1, 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. +;; +;; The GNU General Public License is available by anonymouse ftp from +;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;; USA. + +;;; Commentary: + +;;; Code: + +;; rules = (rule rule ...) +;; rule = (regexp action) or (regexp action hilit-pos) +;; action = function with one argument which corresponds to (interactive "P"). + +(require 'cl-lib) +(require 'easy-mmode) +(require 'font-lock) +(require 'cheat-font-lock) +(require 'howm-common) + +(defgroup action-lock nil + "Invoke magic action by RET key on spell strings." + :group 'convenience) + +(defvar action-lock-face 'action-lock-face + "*Face for action-lock spells.") + +(defface action-lock-face + (let ((underline (if (and (fboundp 'set-face-underline) + window-system) + '(((class color)) (:underline "dark cyan")) + '(((class color)) (:underline t)))) + (fail-safe '(t (:inverse-video t)))) + (list underline fail-safe)) + "*Face for action-lock spells." + :group 'action-lock + :group 'howm-faces) + +(defvar action-lock-magic-return-key "\C-m") +(put 'action-lock-magic-return-key 'risky-local-variable t) +(defvar action-lock-lighter " AL") +(defvar action-lock-silent t + "Inhibit font-lock-verbose if non-nil.") + +;; If you want to change these values, +;; you must set them before loading this file. +(defvar action-lock-switch-default '("{ }" "{*}" "{-}")) ;; any number +(defvar action-lock-date-default '("{_}" "[%Y-%m-%d %H:%M]")) ;; before after + +(easy-mmode-define-minor-mode action-lock-mode + "With no argument, this command toggles the mode. +Non-null prefix argument turns on the mode. +Null prefix argument turns off the mode. + +\\[action-lock-magic-return] Envoke the action on the field +" + nil ;; default = off + action-lock-lighter ;; mode-line + `( + (,action-lock-magic-return-key . action-lock-magic-return) + )) + +;; emacs20's easy-mmode-define-minor-mode can't have body. sigh... +(add-hook 'action-lock-mode-on-hook 'action-lock-initialize-buffer) +(add-hook 'action-lock-mode-off-hook 'action-lock-restore-buffer) + +(defvar action-lock-rules nil) +(defvar action-lock-original-font-lock-keywords nil) +(defvar action-lock-original-return nil) +(put 'action-lock-rules 'risky-local-variable t) +(put 'action-lock-original-font-lock-keywords 'risky-local-variable t) +(put 'action-lock-original-return 'risky-local-variable t) + +(make-variable-buffer-local 'action-lock-rules) +(make-variable-buffer-local 'action-lock-original-font-lock-keywords) +(make-variable-buffer-local 'action-lock-original-return) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sample + +(defun action-lock-switch (label-list) + (let ((regexp (mapconcat 'regexp-quote label-list "\\|"))) +; (let ((regexp (regexp-opt label-list))) ;; emacs19 lacks regexp-opt + (list regexp + `(lambda (&optional dummy) + (let* ((b (match-beginning 0)) + (e (match-end 0)) + (ring ',(append label-list (list (car label-list)))) + (s (match-string-no-properties 0)) + (next (cadr (member s ring)))) + (delete-region b e) + (insert next) + (goto-char b)))))) + +(defun action-lock-date (regexp time-format) + (list regexp + `(lambda (&optional dummy) + (delete-region (match-beginning 0) (match-end 0)) + (insert (format-time-string ,time-format))))) + +(defun action-lock-open (regexp arg-pos &optional hilit-pos) + (action-lock-general #'action-lock-find-file + regexp arg-pos hilit-pos t)) +(defun action-lock-find-file (f u) + (if u + (find-file-other-window f) + (find-file f))) + +;; (defun action-lock-open (regexp arg-pos &optional hilit-pos) +;; (action-lock-general #'find-file regexp arg-pos hilit-pos)) + +(defvar action-lock-no-browser nil) +(defun action-lock-browse-url (url) + (setq url (replace-regexp-in-string "^[htp]+\\(s?\\)://" "http\\1://" url)) + (message "%s" url) + (if action-lock-no-browser + (kill-new url) + (browse-url url))) +(defun action-lock-browse (regexp arg-pos &optional hilit-pos) + (action-lock-general #'action-lock-browse-url regexp arg-pos hilit-pos)) + +(defun action-lock-general (func regexp arg-pos &optional hilit-pos arg-p) + "Generate an action-lock rule. +FUNC is called when action-lock is invoked on a string which matches +to REGEXP. ARG-POS specifies a position of subexpression in REGEXP, +and matched substring is passed to FUNC. +HILIT-POS specifies another position of subexpression in REGEXP, +and matched substring is highlighted in buffers. +FUNC will receive an additional argument for action, as is described +at the beginning of this file, when ARG-P is non-nil." + (list regexp + `(lambda (&optional arg) + (,func (match-string ,arg-pos) + ,@(and arg-p '(arg)))) + hilit-pos)) + +; (defun action-lock-escape-quote (s) +; (apply 'concat +; (mapcar '(lambda (x) (if (string= x "'") "\\x27" x)) ;; for zsh +; (split-string s "")))) + +;; copied and modified from thingatpt.el [2004-01-30] +(defvar action-lock-url-path-regexp + "\\([-!@#$%^&*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&*()_+|=:~/?a-zA-Z0-9]+\\)" +;; "\\([^]\t\n \"'()<>[^`{}]*[^]\t\n \"'()<>[^`{}.,;]+\\)" + "A regular expression probably matching the host, path or e-mail part of a URL.") +;; (defvar action-lock-url-scheme-regexp +;; "\\<\\(https?://\\|ftp://\\|gopher://\\|telnet://\\|wais://\\|file:/\\|s?news:\\|mailto:\\)") +(defun action-lock-url-regexp (head &optional tail) + (concat head + action-lock-url-path-regexp + (or tail ""))) + +(defvar action-lock-open-regexp + (action-lock-url-regexp "\\/?\\)")) +(defvar action-lock-open-regexp-pos 2) + +;; emacs20 doesn't support "[htp]\\{3,5\\}" +(defvar action-lock-browse-regexp + (action-lock-url-regexp "\\<\\([htp][htp][htp][htp]?[htp]?s?\\|ftp\\)://" "\\>/?")) +(defvar action-lock-browse-regexp-pos 0) + +(defvar action-lock-default-rules + (list (action-lock-switch action-lock-switch-default) + (action-lock-date (regexp-quote (car action-lock-date-default)) + (cadr action-lock-date-default)) + (action-lock-open (action-lock-url-regexp "URL:\\(file://\\)?\\(localhost\\)?" ">))") + 3) ;; (()) + (action-lock-open action-lock-open-regexp + action-lock-open-regexp-pos) ;; file://... + (action-lock-browse action-lock-browse-regexp + action-lock-browse-regexp-pos) ;; http://... + )) +(put 'action-lock-default-rules 'risky-local-variable t) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; main + +(defvar action-lock-bury-minor-mode-p t) +(defun action-lock-initialize-buffer () + (interactive) + (action-lock-initialize-magic-return) + (action-lock-set-rules action-lock-default-rules) + (when action-lock-bury-minor-mode-p + (action-lock-bury-minor-mode 'action-lock-mode)) +) + +(defun action-lock-restore-buffer () + (action-lock-restore-font-lock)) + +(defun action-lock-magic-return (&optional arg) + (interactive "P") + (or (action-lock-invoke arg) + (if action-lock-mode + (let* ((action-lock-mode nil) + (f (key-binding action-lock-magic-return-key))) + (call-interactively f)) + ;; Can't happen normally + (call-interactively action-lock-original-return)))) + +(defun action-lock-invoke (&optional arg) +;; (interactive) + (let ((action (action-lock-get-action))) + (if (null action) + nil + (progn +;; (message "%s" action) ;; debug + (funcall action arg) +;; (apply action nil) + t)))) + +(defun action-lock-initialize-magic-return () + (when (null action-lock-original-return) + (let ((action-lock-mode nil)) + (setq action-lock-original-return + (key-binding action-lock-magic-return-key))))) + +(defun action-lock-rules () + action-lock-rules) +(defun action-lock-set-rules (rules) + (setq action-lock-rules (howm-cl-remove-duplicates* rules)) +;; (message "Font lock...") + (action-lock-font-lock) +;; (message "...Done.") + ) +(defun action-lock-add-rules (rules &optional prepend-p) + (action-lock-set-rules (if prepend-p + (append rules (action-lock-rules)) + (append (action-lock-rules) rules)))) + +(defun action-lock-bury-minor-mode (mode) + "Bury MODE to the last in minor-mode-map-alist" + (let ((pair (assoc mode minor-mode-map-alist))) + (when pair + (setq minor-mode-map-alist + ;; Duplications must be removed. + `(,@(remove pair minor-mode-map-alist) ,pair))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Font lock + +;; experimental [2003-10-25] +(defvar action-lock-case-fold-search nil) +(defvar action-lock-use-case-fold-search t) + +(defun action-lock-matcher (regexp) + (if action-lock-use-case-fold-search + `(lambda (limit) + (let ((case-fold-search action-lock-case-fold-search)) + (re-search-forward ,regexp limit t))) + regexp)) + +(defun action-lock-font-lock () + (cheat-font-lock-mode action-lock-silent) + (if (null action-lock-original-font-lock-keywords) + (setq action-lock-original-font-lock-keywords font-lock-keywords) + (setq font-lock-keywords action-lock-original-font-lock-keywords)) + (when action-lock-rules + (let* ((entries (mapcar (lambda (pair) + (let* ((regexp (car pair)) + (matcher (action-lock-matcher regexp)) + (pos (or (cl-caddr pair) 0)) + (hilit (list pos 'action-lock-face + 'prepend))) + (cons matcher hilit))) + action-lock-rules))) + (cheat-font-lock-append-keywords entries) +;; (cheat-font-lock-prepend-keywords entries) + (cheat-font-lock-fontify t) + ))) + +(defun action-lock-restore-font-lock () + (setq font-lock-keywords action-lock-original-font-lock-keywords)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun action-lock-get-action () + (car (action-lock-get-action/range))) + +(defun action-lock-get-range () + (cdr (action-lock-get-action/range))) + +(defun action-lock-get-action/range () + (let* ((rules action-lock-rules) + (current nil) + (found nil)) + (while (and rules (not found)) + (save-excursion + (setq current (car rules) + rules (cdr rules)) + (let* ((regexp (car current)) + (action (cadr current)) + (pos (cl-caddr current)) + (range (action-lock-regexp-range regexp pos))) + (if range + (setq found (cons action range)))))) + found)) + +(defun action-lock-regexp-range (regexp &optional pos) + (setq pos (or pos 0)) + (save-excursion + (let ((c (point)) + (eol (line-end-position)) + (range nil) + (case-fold-search (if action-lock-use-case-fold-search + action-lock-case-fold-search + case-fold-search)) + ) + (beginning-of-line) + (while (and (<= (point) c) + (re-search-forward regexp eol 'no-error) + (not range)) + (let ((beg (match-beginning pos)) + (end (match-end pos))) + (when (and (<= beg c) (< c end)) + (setq range (list beg end))))) + range))) + +(defun action-lock-regexp () + (mapconcat 'car action-lock-rules "\\|")) + +(defun action-lock-skip-one-link (reverse) + (let* ((r (action-lock-get-range)) + (border (if reverse 0 1))) + (when r + (goto-char (nth border r))))) + +(defun action-lock-goto-next-link (&optional reverse) + (interactive) + (let* ((move (if reverse #'backward-char #'forward-char))) + (action-lock-skip-one-link reverse) + (funcall move) + (while (not (action-lock-get-action)) + (funcall move)) + (when reverse + (action-lock-skip-one-link reverse)))) + +(defun action-lock-goto-previous-link () + (interactive) + (action-lock-goto-next-link t)) + +;;;;;;;;;;;;; + +(provide 'action-lock) + +;;; action-lock.el ends here diff --git a/bcomp.el b/bcomp.el new file mode 100644 index 0000000..081d667 --- /dev/null +++ b/bcomp.el @@ -0,0 +1,23 @@ +;;; -*- Emacs-Lisp -*- +(require 'cl) + +(setq bcomp-files + '( + "howm.el" "howm-menu.el" "howm-reminder.el" "howm-date.el" "howm-misc.el" "howm-mode.el" "howm-view.el" "howm-backend.el" "howm-common.el" "howm-vars.el" "howm-version.el" "howm-lang-en.el" "howm-lang-ja.el" "howm-menu-en.el" "howm-menu-ja.el" "honest-report.el" "action-lock.el" "riffle.el" "gfunc.el" "illusion.el" "cheat-font-lock.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")) + (if (file-exists-p file) + (delete-file file))) + + (message "compiling...") + (dolist (elt bcomp-files) + (setq file (concat dir elt)) + (byte-compile-file file t)) + + (message "done")) diff --git a/bcomp.el.in b/bcomp.el.in new file mode 100644 index 0000000..e4460b6 --- /dev/null +++ b/bcomp.el.in @@ -0,0 +1,23 @@ +;;; -*- Emacs-Lisp -*- +(require 'cl) + +(setq bcomp-files + '( + @howm_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")) + (if (file-exists-p file) + (delete-file file))) + + (message "compiling...") + (dolist (elt bcomp-files) + (setq file (concat dir elt)) + (byte-compile-file file t)) + + (message "done")) diff --git a/cheat-font-lock.el b/cheat-font-lock.el new file mode 100644 index 0000000..df19af3 --- /dev/null +++ b/cheat-font-lock.el @@ -0,0 +1,113 @@ +;;; cheat-font-lock.el --- modify font-lock-keywords +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: cheat-font-lock.el,v 1.24 2011-12-31 15:07:28 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +;; depends on internal implementation of font-lock.el + +;; renamed from howm-font-lock.el [2003-12-12] + +(require 'font-lock) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; This code is canceled because it caused a bug on howm-1.2.2rc5. +;; cheat-font-lock-merge-keywords must support compiled keywords for current +;; implementation of riffle-contents-mode. [2005-04-28] +;; See below. +;; snap:///~/elisp/howm/howm-view.el#223:(define-derived-mode howm-view-contents-mode riffle-contents-mode "HowmC" +;; snap:///~/elisp/howm/howm-view.el#256:(cheat-font-lock-merge-keywords howm-view-contents-font-lock-keywords +;; +;; (if (and (fboundp 'font-lock-add-keywords) (>= emacs-major-version 21)) +;; (progn +;; (defun cheat-font-lock-merge-keywords (&rest keywords-list) +;; ;; compiled keywords are not supported in keywords-list. +;; (font-lock-add-keywords nil (apply #'append keywords-list) 'set)) +;; (defun cheat-font-lock-append-keywords (entries) +;; (font-lock-add-keywords nil entries 'append)) +;; (defun cheat-font-lock-prepend-keywords (entries) +;; (font-lock-add-keywords nil entries)) +;; ;; inhibit warning. sigh... +;; (defun cheat-font-lock-20040624-format-p () nil) +;; (defun cheat-font-lock-compiled-p (keywords) nil) +;; (defun cheat-font-lock-compiled-body (keywords) nil) +;; ) +;; (progn +;; ;; for xemacs and emacs20 +;; )) + +(defun cheat-font-lock-20040624-format-p () + ;; need to call font-lock-set-defaults before font-lock-compile-keywords. + ;; see http://lists.gnu.org/archive/html/emacs-diffs/2005-12/msg00961.html + (font-lock-set-defaults) + (>= (length (font-lock-compile-keywords '(("dummy" . 'dummy)))) 3)) ;; dirty +(defun cheat-font-lock-compiled-p (keywords) + (eq (car-safe keywords) t)) +(defun cheat-font-lock-compiled-body (keywords) + (cdr keywords)) +(when (cheat-font-lock-20040624-format-p) + ;; re-defun for avoiding the warning: + ;; "the function `...' is not known to be defined." + (defun cheat-font-lock-compiled-body (keywords) + (cddr keywords))) +(defun cheat-font-lock-keywords (keywords) + (if (cheat-font-lock-compiled-p keywords) + (cheat-font-lock-compiled-body keywords) + keywords)) +(defun cheat-font-lock-merge-keywords (&rest keywords-list) + (let ((bodies-list (mapcar #'cheat-font-lock-keywords keywords-list))) + (setq font-lock-keywords + (apply #'append bodies-list)))) +(defun cheat-font-lock-append-keywords (entries) + (cheat-font-lock-merge-keywords font-lock-keywords entries)) +(defun cheat-font-lock-prepend-keywords (entries) + (cheat-font-lock-merge-keywords entries font-lock-keywords)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun cheat-font-lock-mode (&optional silent) + "Enable font-lock-mode without calling fontify-buffer." + ;; For xemacs. But this seems to have no effect. ;_; [2004-01-14] + (when silent + (set (make-local-variable 'font-lock-verbose) nil)) + ;; Keywords are not highlighted on the fly in emacs-21.3.50.1 + ;; when font-lock-defaults is nil. I don't understand this. [2003-11-28] + (when (null font-lock-defaults) + (set (make-local-variable 'font-lock-defaults) '(nil))) + ;; Without the next line, global value is changed to t. [2003-12-30] + ;; (emacs-20.7.2 on Vine Linux 2.6) + (make-local-variable 'font-lock-fontified) + (let* ((font-lock-fontified t) ;; adjourn fontify-buffer + (bname (buffer-name)) + (need-rename (eq (aref (buffer-name) 0) ?\ ))) + ;; Rename invisible buffer in order to force font-lock-mode. + ;; cf. snap:///usr/share/emacs/21.2/lisp/font-lock.el#694:(define-minor-mode font-lock-mode + (when need-rename + (rename-buffer (concat "xxx-" bname) t)) + (font-lock-mode 1) + (when need-rename + (rename-buffer bname))) + (font-lock-set-defaults)) + +(defun cheat-font-lock-fontify (&optional dummy) + (font-lock-fontify-buffer)) + +(provide 'cheat-font-lock) + +;;; cheat-font-lock.el ends here diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..396482d --- /dev/null +++ b/config.guess @@ -0,0 +1,1500 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-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., 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. + + +# 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, 2002, 2003, 2004, 2005 +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 ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # 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 "$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 ; set_cc_for_build= ;' + +# 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 ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # 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 Pn.n version is a patched version. + # 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/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + 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 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + 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 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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 ;; + 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 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + 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 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # 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 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + 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 && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + 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 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????: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 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + 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 ;; + *: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 + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + 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 ;; + *: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 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 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 + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 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 && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[3456]*) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T:Interix*:[3456]*) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 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 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + 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 | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + 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 | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + 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 ;; + 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 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + 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 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # 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 ;; + 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 + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + 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 ;; + 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 ;; + 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 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + 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 ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + 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 ;; + 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 ;; + 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 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + 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 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*: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 | S7501*:*: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; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *: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 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + 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 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *: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 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *: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 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +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\n"); 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 && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# 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 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + 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: diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..387c18d --- /dev/null +++ b/config.sub @@ -0,0 +1,1608 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-07-02' + +# 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., 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. + + +# 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, 2002, 2003, 2004, 2005 +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 ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # 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 ;; + + * ) + 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* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-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 | -knuth | -cray) + 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 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -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/'` + ;; + -sco5v6*) + # 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] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | 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) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # 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]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | 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-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | 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 + ;; + abacus) + basic_machine=abacus-unknown + ;; + 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 + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + 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 + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + 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 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + 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 + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + 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 + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + 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 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + 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 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + 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 + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + 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 + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + 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 + ;; + mmix) + basic_machine=mmix-knuth + ;; + 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 + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + 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* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -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* | -linux-newlib* | -linux-uclibc* \ + | -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* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers*) + # 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* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -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 + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -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 + ;; + -tpf*) + os=-tpf + ;; + -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 + ;; + -zvmoe) + os=-zvmoe + ;; + -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 + spu-*) + os=-elf + ;; + *-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 + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-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 + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -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 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..423a257 --- /dev/null +++ b/configure @@ -0,0 +1,4037 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for howm InsertVersionHere. +# +# +# Copyright (C) 1992-1996, 1998-2012 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 + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # 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 +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+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +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 +test -x / || 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 : + export CONFIG_SHELL + # 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 +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+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +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_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_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; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # 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 -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +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 + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# 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='howm' +PACKAGE_TARNAME='howm' +PACKAGE_VERSION='InsertVersionHere' +PACKAGE_STRING='howm InsertVersionHere' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_subst_vars='LTLIBOBJS +LIBOBJS +extdir +howmdir +lispdir +packagedir +EMACS +LN_S +CVS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +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_silent_rules +enable_maintainer_mode +with_bash +with_xemacs +with_emacs +with_packagedir +with_lispdir +with_howmdir +with_docdir +with_extdir +with_endir +with_jadir +' + ac_precious_vars='build_alias +host_alias +target_alias' + + +# 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_TARNAME}' +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 + 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 howm InsertVersionHere 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/howm] + --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 + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of howm InsertVersionHere:";; + esac + 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-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --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-bash Use Bash to build + --with-xemacs Use XEmacs to build + --with-emacs Use Emacs to build + --with-packagedir[=DIR] Use package directory + (With XEmacs, this option also sets + docdir, lispdir, etc...) + --with-lispdir Override the default lisp directory + --with-howmdir=DIR Override the default howm directory + --with-docdir=DIR Override the default docs directory + --with-extdir=DIR Override the default ext directory + --with-endir=DIR Obsolete. no need. no effect. + --with-jadir=DIR Obsolete. no need. no effect. + +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 +howm configure InsertVersionHere +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 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 howm $as_me InsertVersionHere, which was +generated by GNU Autoconf 2.69. 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.14' + +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 as_fn_executable_p "$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; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# 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 ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + 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 + 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 + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + 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; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +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` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +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 test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# 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 as_fn_executable_p "$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 as_fn_executable_p "$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="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P 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. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +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 as_fn_executable_p "$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 + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +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='howm' + VERSION='InsertVersionHere' + + +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"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + +{ $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 + + + +# Emacs set environment variable EMACS as t +test "x$EMACS" = xt && unset EMACS + +emacsen="emacs xemacs" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +case "$host_os" in +*cygwin*) + with_bash=yes + emacsen="$emacsen MeadowNT.exe Meadow95.exe Meadow.exe" + ;; +esac + + +# Check whether --with-bash was given. +if test "${with_bash+set}" = set; then : + withval=$with_bash; case "$withval" in +yes) SHELL=bash ;; +no) ;; +*) SHELL="$withval" ;; +esac +fi + + + +# Check whether --with-xemacs was given. +if test "${with_xemacs+set}" = set; then : + withval=$with_xemacs; case "$withval" in +yes) emacsen="xemacs" ;; +no) emacsen="emacs" ;; +*) EMACS="$withval" ;; +esac +fi + + + +# Check whether --with-emacs was given. +if test "${with_emacs+set}" = set; then : + withval=$with_emacs; case "$withval" in +yes) emacsen="emacs" ;; +no) emacsen="xemacs" ;; +*) EMACS="$withval" ;; +esac +fi + + +if test -n "${with_xemacs+set}" && test -n "${with_emacs+set}"; then + as_fn_error $? "specify one of --with-xemacs or --with-emacs" "$LINENO" 5 +fi + +# Extract the first word of "cvs", so it can be a program name with args. +set dummy cvs; 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_CVS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CVS"; then + ac_cv_prog_CVS="$CVS" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CVS="cvs -z3" + $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 + + test -z "$ac_cv_prog_CVS" && ac_cv_prog_CVS=":" +fi +fi +CVS=$ac_cv_prog_CVS +if test -n "$CVS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CVS" >&5 +$as_echo "$CVS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +for ac_prog in ${emacsen} +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 as_fn_executable_p "$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" + +if test "$EMACS" = "no"; then + as_fn_error $? "cannot find emacs" "$LINENO" 5 +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 () +(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 -f 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 () +(princ (expand-file-name "../site-packages" data-directory)) +(princ "\n") ; make sure the output has trailing newline. +) +_ACEOF +$EMACS -batch -q -l $ac_temp -f ac-temp-func | 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 + lispdir='${packagedir}/lisp' + docdir='${datadir}/howm/doc' + extdir='${datadir}/howm/ext' +fi + + +# 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 + + if test x${lispdir+set} != xset; then + { $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 + { ac_temp=./conftemp.$$ +ac_output=confout.$$ +rm -f $ac_temp $ac_output +cat >$ac_temp <<\_ACEOF +(defun ac-temp-func () +(defvar result nil) +(setq load-path (nreverse load-path)) +(while load-path + (if (string-match "\\`\\(.+/site-lisp\\)/?\\'" (car load-path)) + (setq result (match-string 1 (car load-path)) + load-path nil) + (setq load-path (cdr load-path)))) +(princ (or result (expand-file-name "../site-lisp" data-directory))) +(princ "\n") ; make sure the output has trailing newline. +) +_ACEOF +$EMACS -batch -q -l $ac_temp -f ac-temp-func | sed -e '/^ *$/d' > $ac_output +am_cv_lispdir=`cat $ac_output` +rm -f $ac_temp $ac_output; } + if test -z "$am_cv_lispdir"; then + am_cv_lispdir='${datadir}/emacs/site-lisp' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_lispdir" >&5 +$as_echo "$am_cv_lispdir" >&6; } + lispdir="$am_cv_lispdir" + fi + +fi + + + + +# Check whether --with-howmdir was given. +if test "${with_howmdir+set}" = set; then : + withval=$with_howmdir; howmdir="$withval" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where howm files should go" >&5 +$as_echo_n "checking where howm files should go... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $howmdir" >&5 +$as_echo "$howmdir" >&6; } +else + +if test -z "${howmdir}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where howm files should go" >&5 +$as_echo_n "checking where howm files should go... " >&6; } +if ${ac_cv_howmdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_howmdir='${lispdir}/howm' + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_howmdir" >&5 +$as_echo "$ac_cv_howmdir" >&6; } + howmdir="$ac_cv_howmdir" +fi + +fi + + + +# Check whether --with-docdir was given. +if test "${with_docdir+set}" = set; then : + withval=$with_docdir; docdir="$withval" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where doc files should go" >&5 +$as_echo_n "checking where doc files should go... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $docdir" >&5 +$as_echo "$docdir" >&6; } +else + +if test -z "${docdir}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where doc files should go" >&5 +$as_echo_n "checking where doc files should go... " >&6; } +if ${ac_cv_docdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_docdir='${datadir}/howm/doc' + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_docdir" >&5 +$as_echo "$ac_cv_docdir" >&6; } + docdir="$ac_cv_docdir" +fi + +fi + + + +# Check whether --with-extdir was given. +if test "${with_extdir+set}" = set; then : + withval=$with_extdir; extdir="$withval" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where ext files should go" >&5 +$as_echo_n "checking where ext files should go... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $extdir" >&5 +$as_echo "$extdir" >&6; } +else + +if test -z "${extdir}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where ext files should go" >&5 +$as_echo_n "checking where ext files should go... " >&6; } +if ${ac_cv_extdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_extdir='${datadir}/howm/ext' + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_extdir" >&5 +$as_echo "$ac_cv_extdir" >&6; } + extdir="$ac_cv_extdir" +fi + +fi + + + +# Check whether --with-endir was given. +if test "${with_endir+set}" = set; then : + withval=$with_endir; +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-endir is obsolete. no need. no effect." >&5 +$as_echo "$as_me: WARNING: --with-endir is obsolete. no need. no effect." >&2;} + +fi + + + +# Check whether --with-jadir was given. +if test "${with_jadir+set}" = set; then : + withval=$with_jadir; +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-jadir is obsolete. no need. no effect." >&5 +$as_echo "$as_me: WARNING: --with-jadir is obsolete. no need. no effect." >&2;} + +fi + + + + + + +# link files +if test `cd ${srcdir}; pwd` != `pwd`; then + ac_config_commands="$ac_config_commands link-lisp" + +# AC_CONFIG_LINKS(doc/howm.info:doc/howm.info) +fi + +ac_config_files="$ac_config_files Makefile doc/Makefile ext/Makefile en/Makefile ja/Makefile sample/Makefile" + +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 + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + +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 -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +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 + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# 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 howm $as_me InsertVersionHere, which was +generated by GNU Autoconf 2.69. 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" +config_commands="$ac_config_commands" + +_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 + +Configuration commands: +$config_commands + +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="\\ +howm config.status InsertVersionHere +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 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' +MKDIR_P='$MKDIR_P' +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 +# +# INIT-COMMANDS +# +howm_ln_s="${LN_S}" + +_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 + "link-lisp") CONFIG_COMMANDS="$CONFIG_COMMANDS link-lisp" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "ext/Makefile") CONFIG_FILES="$CONFIG_FILES ext/Makefile" ;; + "en/Makefile") CONFIG_FILES="$CONFIG_FILES en/Makefile" ;; + "ja/Makefile") CONFIG_FILES="$CONFIG_FILES ja/Makefile" ;; + "sample/Makefile") CONFIG_FILES="$CONFIG_FILES sample/Makefile" ;; + + *) 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 + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +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 :C $CONFIG_COMMANDS" +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 + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + 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 +s&@MKDIR_P@&$ac_MKDIR_P&;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 + ;; + + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "link-lisp":C) + rm -f *.el + ${howm_ln_s} ${ac_srcdir}/*.el . + ;; + + 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 + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..8e3b48c --- /dev/null +++ b/configure.ac @@ -0,0 +1,169 @@ +# shamelessly copied from navi2ch-cvs-0.0.20031209 +# $Id: configure.in,v 1.225 2012-12-29 00:59:48 hira Exp $ + +AC_INIT([howm], [InsertVersionHere]) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE + +# Emacs set environment variable EMACS as t +test "x$EMACS" = xt && unset EMACS + +emacsen="emacs xemacs" + +AC_CANONICAL_HOST + +case "$host_os" in +*cygwin*) + with_bash=yes + emacsen="$emacsen MeadowNT.exe Meadow95.exe Meadow.exe" + ;; +esac + +AC_ARG_WITH(bash, +[ --with-bash Use Bash to build], +[case "$withval" in +yes) SHELL=bash ;; +no) ;; +*) SHELL="$withval" ;; +esac]) + +AC_ARG_WITH(xemacs, +[ --with-xemacs Use XEmacs to build], +[case "$withval" in +yes) emacsen="xemacs" ;; +no) emacsen="emacs" ;; +*) EMACS="$withval" ;; +esac]) + +AC_ARG_WITH(emacs, +[ --with-emacs Use Emacs to build], +[case "$withval" in +yes) emacsen="emacs" ;; +no) emacsen="xemacs" ;; +*) EMACS="$withval" ;; +esac]) + +if test -n "${with_xemacs+set}" && test -n "${with_emacs+set}"; then + AC_MSG_ERROR(specify one of --with-xemacs or --with-emacs) +fi + +AC_CHECK_PROG(CVS, cvs, cvs -z3, :) +AC_PROG_LN_S + +AC_CHECK_PROGS(EMACS, ${emacsen}, no) +if test "$EMACS" = "no"; then + AC_MSG_ERROR(cannot find emacs) +fi + +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 + docdir, lispdir, 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, [dnl +(princ (expand-file-name "../site-packages" data-directory))]) +;; +no) unset packagedir ;; +*) packagedir="$withval" ;; +esac +AC_MSG_RESULT([$packagedir])]) + +AC_SUBST(packagedir) + +if test "$emacstype" = xemacs && test -n "$packagedir"; then + lispdir='${packagedir}/lisp' + docdir='${datadir}/howm/doc' + extdir='${datadir}/howm/ext' +fi + +AM_PATH_LISPDIR + +AC_ARG_WITH(howmdir, +[ --with-howmdir=DIR Override the default howm directory], +[ howmdir="$withval" +AC_MSG_CHECKING([where howm files should go]) +AC_MSG_RESULT([$howmdir])], +[ +if test -z "${howmdir}"; then + AC_CACHE_CHECK([where howm files should go], [ac_cv_howmdir], [dnl + ac_cv_howmdir='${lispdir}/howm' + ]) + howmdir="$ac_cv_howmdir" +fi +]) + +AC_ARG_WITH(docdir, +[ --with-docdir=DIR Override the default docs directory], +[ docdir="$withval" +AC_MSG_CHECKING([where doc files should go]) +AC_MSG_RESULT([$docdir])], +[ +if test -z "${docdir}"; then + AC_CACHE_CHECK([where doc files should go], [ac_cv_docdir], [dnl +dnl AC_EMACS_LISP(ac_cv_docdir,[dnl +dnl (princ (expand-file-name "howm/doc" data-directory))]) +dnl if test -z "$ac_cv_docdir"; then +dnl ac_cv_docdir='${datadir}/pixmaps/howm' +dnl fi + ac_cv_docdir='${datadir}/howm/doc' + ]) + docdir="$ac_cv_docdir" +fi +]) + +AC_ARG_WITH(extdir, +[ --with-extdir=DIR Override the default ext directory], +[ extdir="$withval" +AC_MSG_CHECKING([where ext files should go]) +AC_MSG_RESULT([$extdir])], +[ +if test -z "${extdir}"; then + AC_CACHE_CHECK([where ext files should go], [ac_cv_extdir], [dnl + ac_cv_extdir='${datadir}/howm/ext' + ]) + extdir="$ac_cv_extdir" +fi +]) + +AC_ARG_WITH(endir, +[ --with-endir=DIR Obsolete. no need. no effect.], +[ +AC_MSG_WARN([--with-endir is obsolete. no need. no effect.]) +]) + +AC_ARG_WITH(jadir, +[ --with-jadir=DIR Obsolete. no need. no effect.], +[ +AC_MSG_WARN([--with-jadir is obsolete. no need. no effect.]) +]) + +AC_SUBST(howmdir) +AC_SUBST(docdir) +AC_SUBST(extdir) + +# link files +if test `cd ${srcdir}; pwd` != `pwd`; then + AC_CONFIG_COMMANDS([link-lisp], + [ + rm -f *.el + ${howm_ln_s} ${ac_srcdir}/*.el . + ], [howm_ln_s="${LN_S}"]) +# AC_CONFIG_LINKS(doc/howm.info:doc/howm.info) +fi + +AC_OUTPUT([Makefile doc/Makefile ext/Makefile en/Makefile ja/Makefile sample/Makefile]) diff --git a/doc/CL-HOWM.ja.rd b/doc/CL-HOWM.ja.rd new file mode 100644 index 0000000..8db7cc8 --- /dev/null +++ b/doc/CL-HOWM.ja.rd @@ -0,0 +1,148 @@ +=begin + += ChangeLog Memo ¤È howm + +ChangeLog Memo ¾å¤Ç¤â howm ¤¬»È¤¨¤Þ¤¹. +(ChangeLog Memo Æâ¤Ç¼«¸Ê¥ê¥ó¥¯) --- Case I + +¤Þ¤¿, ChangeLog Memo ¤È howm ¤ÎÊ»ÍѤâ¤Ç¤­¤Þ¤¹. +(ChangeLog Memo ¤È howm memo ¤È¤Î´Ö¤ÇÁê¸ß¥ê¥ó¥¯) --- Case II + +¢¨ I ¤È II ¤ÎξΩ¤Ï¤Ç¤­¤Þ¤»¤ó. +¥¤¥ó¥¹¥È¡¼¥ëË¡¤Ê¤É¤â°ã¤¤¤Þ¤¹¤Î¤Ç, +¤É¤Á¤é¤«¤òÁª¤ó¤Ç³ºÅö¤¹¤ëÀá¤ò¤ªÆɤߤ¯¤À¤µ¤¤. + +== ²¿¤¬¤¦¤ì¤·¤¤? + +* ChangeLog Memo ¾å¤Ç howm ¤Î¥ê¥ó¥¯µ¡Ç½¤¬»È¤¨¤ë + +* M-x occur, clgrep ¤Ë²Ã¤¨¤Æ + * @ ¤ò²¡¤»¤Ðɽ¼¨·Á¼°¤ò¥È¥°¥ë (occur É÷ ¢«¢ª clgrep É÷) + * occur É÷ɽ¼¨¤Ç¤Ï, RET ¤ò²¡¤µ¤Ê¤¯¤Æ¤â¥ê¥¢¥ë¥¿¥¤¥à¤ËÆâÍƤòɽ¼¨ + * ¤µ¤é¤Ë¥½¡¼¥È¤ä¿Ãʤιʤê¹þ¤ß¤â²Äǽ + +* Îã¤ÎÉâÄÀ¼° todo list ¤¬»È¤¨¤ë + +* ¥á¥âËÜÂΤò±ø¤µ¤Ê¤¤ + * ¤¤¤Ä¤Ç¤â¤ä¤á¤Æ, ÁǤΠChangeLog ¤ËÌá¤ì¤ë + += ¢£ (Case I) ChangeLog Memo ¾å¤Ç howm + +ChangeLog Memo Æâ¤Ç¼«¸Ê¥ê¥ó¥¯¤òÄ¥¤ê¤Þ¤¹. + +== ¤Ç¤­¤ë¤³¤È + +* ÁǤΠChangeLog ¤Ë²Ã¤¨¤Æ + * goto link + * ¡Ö>>> ¤Û¤²¡×¤Î¾å¤Ç RET ¢ª ¡Ö¤Û¤²¡×¤ò¸¡º÷ + * ¡Ö>>> ~/hoge.txt¡×¤Î¾å¤Ç RET ¡ß2 ¢ª ¥Õ¥¡¥¤¥ë¤ò³«¤¯ + * ¡Ö>>> ~/hoge.pdf¡×¤Î¾å¤Ç RET ¡ß2 ¢ª ³°Éô viewer ¤Ç³«¤¯ + * come-from link + * ¡Ö* ¤Û¤²: ¤Õ¤¬¤Õ¤¬¡×¤È¤¤¤¦ entry ¤ò½ñ¤±¤Ð, + ¥á¥âÃæ¤Î¡Ö¤Û¤²¡×¤¬¤¹¤Ù¤Æ¥ê¥ó¥¯¤Ë + * ¡Ö¤Û¤²¡×¤Î¾å¤Ç RET ¢ª ¡Ö¤Û¤²¡×¤Î°ìÍ÷ + * wiki link + * [[¤Û¤²]] ¤Î¾å¤Ç RET ¢ª entry ¡Ö¤Û¤²¡×¤òÄɲà + * °Ê¸å¤Ï, [[¤Û¤²]] ¤Î¾å¤Ç RET ¡ß2 ¢ª entry ¡Ö¤Û¤²¡×¤ËÈô¤Ö + +== ¥¤¥ó¥¹¥È¡¼¥ë + +* ÁÛÄêÎã + * ~/elisp/howm/ ¤Ë°ì¼°¤òŸ³« + * ~/memo/clmemo.txt ¤Ë¥á¥â¤ò¤È¤ë + +* ¼ê½çÎã + * ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼ + cp ~/elisp/howm/ja/0000-00-00-000000.txt ~/.howm-menu + * °Ê²¼¤ò .emacs ¤Ë + ;; ÀßÄê¤Ë±þ¤¸¤Æ + (setq load-path (cons "~/elisp/howm" load-path)) + (setq howm-directory "~/memo") + (setq howm-file-name-format "clmemo.txt") + ;; °Ê²¼¤Ï·è¤Þ¤êʸ¶ç + (setq howm-menu-lang 'ja) + (setq howm-menu-file "~/.howm-menu") + (require 'howm-mode) + (howm-setup-change-log) + +* ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ëÎã + * ¥á¥âËÜÂΤϱø¤µ¤Ê¤¤¤Î¤Ç, ¤³¤ì¤À¤±¤Ç OK + rm ~/.howm-* + rm -rf ~/elisp/howm + vi ~/.emacs + +== »È¤¤Êý + +* ¤Õ¤Ä¤¦¤Ë ChangeLog Memo ¤ò¤È¤Ã¤Æ¤¯¤À¤µ¤¤ +* entry ¤Ë²¼Àþ¤¬¤Ä¤¯¤Î¤Ç, ¤½¤Î¾å¤Ç RET ¢ª ¸¡º÷·ë²Ì¤Î°ìÍ÷ +* °ìÍ÷¤Ç¤Ï + * RET ¢ª jump + * q ¢ª quit +* ¾Ü¤·¤¯¤Ï README Åù¤ò»²¾È + += ¢£ (Case II) ChangeLog Memo ¤È howm ¤ÎÊ»ÍÑ + +ChangeLog Memo ¤È howm memo ¤È¤Î´Ö¤ÇÁê¸ß¥ê¥ó¥¯¤òÄ¥¤ê¤Þ¤¹. + +== ¤Ç¤­¤ë¤³¤È + +* ChangeLog Memo ¾å¤Ç¤â¡Ö<<< ¤Û¤²¡×¡Ö>>> ¤Û¤²¡×¡Ö[[¤Û¤²]]¡×¤¬µ¡Ç½ +* <<< ¤Ç»ØÄꤷ¤¿¥­¡¼¥ï¡¼¥É¤Ï, ChangeLog Memo ¾å¤Ç¤â²¼Àþ ¢ª ¥¸¥ã¥ó¥× + +== ¥¤¥ó¥¹¥È¡¼¥ë + +* howm ¤òÉáÄ̤˥¤¥ó¥¹¥È¡¼¥ë +* .emacs ¤Ë°Ê²¼¤òÄɲà + (add-hook 'change-log-mode-hook 'howm-mode) + (eval-after-load "howm-view" + '(setq howm-view-title-regexp + (concat howm-view-title-regexp + "\\|^[0-9-]+[ \t]+<.*>$"))) + +== »È¤¤Êý + +* ~/howm/ChangeLog ¤Ë ChangeLog Memo ¤ò¤È¤Ã¤Æ¤¯¤À¤µ¤¤. +* ChangeLog ¤«¤é howm ¤Ø + * ChangeLog Memo ¾å¤Ç M-x howm-from-change-log + ¢ª howm ¤Ç¿·µ¬¥á¥â¤ò³«¤¤¤Æ¥¿¥¤¥È¥ë¤ò¥³¥Ô¡¼ + * ChangeLog Memo ¾å¤Ç [[¤Û¤²]] ¤È½ñ¤­, (¥«¡¼¥½¥ëÌᤷ¤Æ)¤½¤Î¾å¤Ç RET + ¢ª <<< ¤Û¤² ¤È¤¤¤¦ howm memo ¤òºî¤ë +* howm ¤«¤é ChangeLog ¤Ø + * howm memo ¾å¤Ç M-x howm-to-change-log + ¢ª ChangeLog Memo ¤ò³«¤¤¤Æ¥¿¥¤¥È¥ë¤ò¥³¥Ô¡¼ +* Áê¸ß¤Ë + * ¤É¤Á¤é¤Î¥á¥â¤«¤é¤â, ÆüÉÕ¾å¤Ç RET + ¢ª ¤½¤ÎÆüÉդΥá¥â¤òξÊý°ìÍ÷ + +== Êä­ + +howm memo ¤Ç RD ·Á¼°¤ò¤ª»È¤¤¤ÎÊý¤Ï, +(()) +¤âÊ»ÍѤ¹¤ë¤ÈÊØÍø¤«¤â¤·¤ì¤Þ¤»¤ó. +¾å¤Î howm-to-change-log ¤Î¤«¤ï¤ê¤Ë, ¼¡¤Îµ¡Ç½¤¬»È¤¨¤Þ¤¹. + +* M-x rd-to-change-log ¢ª ChangeLog Memo ¤ò³«¤¤¤Æ¾Ï¡¦Àá¤Î¥¿¥¤¥È¥ë¤ò¥³¥Ô¡¼ + * Îã + * howm memo ¤Ë¤³¤¦½ñ¤¤¤Æ¤¿¤é¡Ä + = ¤Û¤² + ¡Ä + == ¤Õ¤¬ + ¡Ä + == ¤Ô¤è + ¡Ä + ¢£ ¢« ¥«¡¼¥½¥ë + * ¤³¤ó¤Ê ChangeLog ¤¬¤Ç¤­¤ë + 2003-12-03 Foo Bar + * ¤Û¤² + - ¤Ô¤è + * Ãí + * ¥«¡¼¥½¥ë¤¬Â°¤¹¤ë¾Ï(=), Àá(==)¤Î¥¿¥¤¥È¥ë¤òÃê½Ð¤·¤Þ¤¹ + * ¡Ö¤Û¤²¡×¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤¿¾ì¹ç, == ¤Î¥¿¥¤¥È¥ë¤Ï¥³¥Ô¡¼¤µ¤ì¤Þ¤»¤ó + * C-u M-x rd-to-change-log ¤Ê¤é, ¤½¤Î¾Ï¤Î¤¹¤Ù¤Æ¤ÎÀá¤Î¥¿¥¤¥È¥ë¤òÃê½Ð¤·¤Þ¤¹ + 2003-12-03 Foo Bar + * ¤Û¤² + - ¤Õ¤¬ + - ¤Ô¤è + + +=end diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 0000000..bd2ffc4 --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,279 @@ +2015-12-31 HIRAOKA Kazuyuki + + * README.ja.rd: add commit-hash of git-head emacs + +2015-12-31 HIRAOKA Kazuyuki + + * README.ja.rd: update version. + + * index.html: ditto. + + * index-j.html: ditto. + + * TUTORIAL.ja.rd: delete obsolete link. + +2012-12-29 HIRAOKA Kazuyuki + + * index-j.html: add link to howmm. fix link to howm-mode.vim. + +2011-01-01 HIRAOKA Kazuyuki + + * README.ja.rd: support new commands. + + * README.ja.rd: move old changelogs to OLD.rd + +2010-12-31 HIRAOKA Kazuyuki + + * README.ja.rd: update 2ch URL. add customization examples. + + * OLD.rd: ditto. + + * index-j.html: delete obsolete links. + + * index.html: ditto. + +2010-12-30 HIRAOKA Kazuyuki + + * index-j.html: add link to QFixHowm. + +2010-12-29 HIRAOKA Kazuyuki + + * README.ja.rd: update obsolete descriptions. + + * OLD.rd: ditto. + +2009-07-23 HIRAOKA Kazuyuki + + * README.ja.rd: update table of contents. + +2009-05-02 HIRAOKA Kazuyuki + + * index-j.html: fix link. + +2009-01-01 HIRAOKA Kazuyuki + + * README.ja.rd: + add summary-match-string. + delete emacs19. + link to howm-helper. + remove "todo" and "bug" sections. + update URLs. + + * index-j.html: link to howm-helper + +2008-12-30 HIRAOKA Kazuyuki + + * index-j.html: delete debian package + + * index.html: ditto. + +2008-07-16 HIRAOKA Kazuyuki + + * index-j.html: move old announce to OLD.rd + + * README.ja.rd: move old changes to OLD.rd + +2008-05-14 HIRAOKA Kazuyuki + + * index.html: link to howm-1.3.5 + +2008-04-07 HIRAOKA Kazuyuki + + * index.html: add customization example for efficiency + +2007-04-11 HIRAOKA Kazuyuki + + * README.ja.rd: add Whem. + +2007-03-01 HIRAOKA Kazuyuki + + * README.ja.rd: update 2ch URL. + +2007-01-18 HIRAOKA Kazuyuki + + * README.ja.rd: update 2ch URL. + +2006-09-12 HIRAOKA Kazuyuki + + * README.ja.rd: change on 2006-09-10 is canceled. + +2006-09-10 HIRAOKA Kazuyuki + + * README.ja.rd: + M-x customize-variable howm-menu-todo-priority for %reminder. + +2006-06-13 HIRAOKA Kazuyuki + + * README.ja.rd: + link to yaswiki is removed because of error response. + link to BugReportFAQ is added insteadly. + +2006-05-15 HIRAOKA Kazuyuki + + * README.ja.rd: + description about "always howm-remember" in menu mode. + thx > http://pc10.2ch.net/test/read.cgi/unix/1141892764/99 + +2006-05-11 HIRAOKA Kazuyuki + + * index.html: + link to "much kinder tutorial by Dave O'Toole san" is removed + because http://dto.twu.net/HowmTutorial.howm.html is not found now. + thx > ganba san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?e.BBS + + * README.rd: ditto. + + * README.ja.rd: link to elscreen + +2006-02-12 HIRAOKA Kazuyuki + + * README.rd: fix typo (@ ==> -) and misspelling. + thx > Highfly san + http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000018.html + +2006-02-08 HIRAOKA Kazuyuki + + * README.ja.rd: + mention gc-cons-threshold + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/220-236n + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/934 + +2006-01-24 HIRAOKA Kazuyuki + + * README.ja.rd: + add thx link to http://pc8.2ch.net/test/read.cgi/unix/1077881095/42 + +2006-01-17 HIRAOKA Kazuyuki + + * README.ja.rd: link to BugReportFAQ + +2005-12-01 HIRAOKA Kazuyuki + + * README.ja.rd: update link to Hidemaru porting + + * index-j.html: ditto. + +2005-11-12 HIRAOKA Kazuyuki + + * README.ja.rd: jump from menu to each reminder + thx > Kaneko Kensuke san + http://d.hatena.ne.jp/a666666/20051110/1131621183 + + * README.ja.rd: link to Hidemaru porting + + * index-j.html: ditto. + +2005-11-11 HIRAOKA Kazuyuki + + * CL-HOWM.ja.rd: describe merits of sort and filter. + +2005-10-24 HIRAOKA Kazuyuki + + * Makefile.am (MAINTAINERCLEANFILES): + move *.html from CLEANFILES to MAINTAINERCLEANFILES + so that users can try make clean && make without rdtool. + +2005-10-21 HIRAOKA Kazuyuki + + * README.ja.rd: describe that 'configure --with-xemacs' changes + default lispdir to /usr/lib/xemacs/site-lisp/howm. + thx > 2ch 797 san + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + +2005-10-18 HIRAOKA Kazuyuki + + * README.ja.rd: explain configure --with-xemacs + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/810 + +2005-10-13 HIRAOKA Kazuyuki + + * README.ja.rd: remove incorrect description. + 'd' key on date format is never implemented. + +2005-09-13 HIRAOKA Kazuyuki + + * README.rd: 'search' is corrected to 'search for' + +2005-09-02 HIRAOKA Kazuyuki + + * README.ja.rd: explain howm-en-dir and howm-ja-dir + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/501-502n + thx > http://www.meadowy.org/meadow/netinstall/ticket/5 + +2005-08-29 HIRAOKA Kazuyuki + + * index-j.html: correct RD label + +2005-08-17 HIRAOKA Kazuyuki + + * index.html: email address is removed. + +2005-08-12 HIRAOKA Kazuyuki + + * README.ja.rd: fix + - my-howm-next-hit was broken. + - howm-view-search-in-result-correctly doesn't affect filter-by-date. + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/779 + +2005-08-01 HIRAOKA Kazuyuki + + * README.rd: add alias, customization, menu editing. + +2005-07-27 HIRAOKA Kazuyuki + + * README.ja.rd: update URL of howm-mode.vim + +2005-07-26 HIRAOKA Kazuyuki + + * README.ja.rd: add links to wema and LesserWiki + +2005-07-25 HIRAOKA Kazuyuki + + * index-j.html: correct anchor "#label:20" to "#label-20". + It depends on the version of rd2, perhaps. + +2005-07-16 HIRAOKA Kazuyuki + + * README.ja.rd: add comment on grep-2.5 multibyte feature + +2005-06-07 HIRAOKA Kazuyuki + + * Makefile.am (README.html): added to distribution. + + * README.rd: 'Repeat schedule' is added. + +2005-05-26 HIRAOKA Kazuyuki + + * index.html: M-x custom ==> M-x customize-group + +2005-05-24 HIRAOKA Kazuyuki + + * README.ja.rd: correct description of %here; args are quoted + +2005-05-08 HIRAOKA Kazuyuki + + * README.ja.rd: move old customize section to OLD.rd + +2005-05-06 HIRAOKA Kazuyuki + + * README.ja.rd: key bind R = [Update Menu] + +2005-04-02 HIRAOKA Kazuyuki + + * README.ja.rd: link to LinuxZaurus on howm-wiki + +2005-03-27 HIRAOKA Kazuyuki + + * OLD.rd: update 2ch URL (pc5 to pc8) + + * README.ja.rd: update 2ch URL (pc5 to pc8) + +2005-03-13 HIRAOKA Kazuyuki + + * index-j.html: update URL of howm-mode.vim + +2005-02-19 HIRAOKA Kazuyuki + + * index-j.html: add link to Meadow memo + diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..596a4b8 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,19 @@ +EXTRA_DIST = CL-HOWM.ja.rd OLD.rd README.ja.rd README.rd TUTORIAL.ja.rd \ + index-j.html index.html \ + README-j.html README.html \ + s-cat.png s-menu.png s-screen-shot.png s-search.png \ + come.png go.png updown.png todo.png +MAINTAINERCLEANFILES = README-j.html README.html + +doc_DATA = $(EXTRA_DIST) + +README-j.html: README.ja.rd + rd2 README.ja.rd > README-j.html + +README.html: README.rd + rd2 README.rd > README.html + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && \ + CONFIG_HEADERS= CONFIG_LINKS= \ + CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..72df3b1 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,454 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 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@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +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 = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +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 = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(docdir)" +DATA = $(doc_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CVS = @CVS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +howmdir = @howmdir@ +htmldir = @htmldir@ +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@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = CL-HOWM.ja.rd OLD.rd README.ja.rd README.rd TUTORIAL.ja.rd \ + index-j.html index.html \ + README-j.html README.html \ + s-cat.png s-menu.png s-screen-shot.png s-search.png \ + come.png go.png updown.png todo.png + +MAINTAINERCLEANFILES = README-j.html README.html +doc_DATA = $(EXTRA_DIST) +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 ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__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 +$(am__aclocal_m4_deps): +install-docDATA: $(doc_DATA) + @$(NORMAL_INSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ + done + +uninstall-docDATA: + @$(NORMAL_UNINSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$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)$(docdir)"; 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: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +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 + +html-am: + +info: info-am + +info-am: + +install-data-am: install-docDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +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-docDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-docDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am \ + uninstall-docDATA + + +README-j.html: README.ja.rd + rd2 README.ja.rd > README-j.html + +README.html: README.rd + rd2 README.rd > README.html + +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: diff --git a/doc/OLD.rd b/doc/OLD.rd new file mode 100644 index 0000000..8462121 --- /dev/null +++ b/doc/OLD.rd @@ -0,0 +1,2452 @@ +=begin +$Id: OLD.rd,v 1.18 2012-08-16 09:52:06 hira Exp $ + +* Ìܼ¡ + * ((<¸Å¤¤¹¹¿·ÍúÎò>)) + * ((<¸Å¤¤¹ðÃÎ>)) + * ((<µìÈǤ«¤é¤Î°Ü¹Ô>)) + * ((<¸Å¤¤¥«¥¹¥¿¥Þ¥¤¥ºË¡>)) + * ((<¸Å¤¤»²¹Í¥ê¥ó¥¯>)) + += ¸Å¤¤¹¹¿·ÍúÎò + +== 1.3.x + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.9.2 [2011-12-28] + * ¤³¤Þ¤´¤Þ fix (howm-1.3.9.2rc4 ¤ÈƱÆâÍƤǤ¹) + * mac ¤Ç grep »ÈÍÑ»þ¤Ë¥¨¥é¡¼¤¬½Ð¤Æ¤¤¤¿ + (()) + (()) + * grep ¤Î¥Ç¥Õ¥©¥ë¥È¥ª¥×¥·¥ç¥ó¤òÀßÄꤹ¤ëÁ°¤Ë, + --exclude-dir ¤¬Ä̤뤫³Îǧ¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. + * Â礭¤¤¥Õ¥ì¡¼¥à¤Ç°ìÍ÷ɽ¼¨¤ò¤·¤¿¤È¤­¤Î;·×¤Ê¥¦¥£¥ó¥É¥¦Ê¬³ä¤ò½¤Àµ + (()) + * howm-vars.elc ¥í¡¼¥É»þ¤Î·Ù¹ð¡Öold-style backqoute detected!¡×¤ò²óÈò. + (()) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.9.1 [2011-01-02] + * fix: emacs-24.0.50 ¤Ç¤Î¥¨¥é¡¼ + (Symbol's function definition is void: make-local-hook). + thx > »³ËÜ ½¡¹¨ ¤µ¤ó (munepi at vinelinux.org) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.9 [2010-12-30] + * Note + * ¤Û¤È¤ó¤ÉÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¤¬, ¤Þ¤¿°ìǯ¤Û¤É¤¿¤Ã¤¿¤Î¤Ç¥ê¥ê¡¼¥¹¤·¤Æ¤ª¤­¤Þ¤¹. + * howm-test100702 ¤È¤Î°ã¤¤¤Ï, ¥É¥­¥å¥á¥ó¥È¤ÎÈù½¤Àµ¤ä ext/tag2plan ¤Îºï½ü¤À¤±. + * ¤³¤Î¥ê¥ê¡¼¥¹¤¬ºÑ¤ó¤À¤é, ¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤òÊѤ¨¤Æ + ±£¤·µ¡Ç½¤ò¸ø¼°²½¤·¤¿¤À¤±¤Î¤â¤Î¤ò howm-1.4.0 ¤È¤·¤Æ¥ê¥ê¡¼¥¹¤¹¤ëͽÄê¤Ç¤¹. + * fix + * ¥á¥Ë¥å¡¼¤«¤é y ¥­¡¼(¤Þ¤¿¤Ï [ͽÄê] ¾å¤Ç RET)¤ÇͽÄêɽ¤ò³«¤¤¤¿¤È¤­, + ÆâÍƥХåե¡¤¬¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿. + (()) + * ¥É¥­¥å¥á¥ó¥È¤Î¸Å¤¤²Õ½ê¤ò¼êľ¤· + * ¥á¥ó¥Æ¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ä¡¼¥ë(ext/tag2plan)¤òºï½ü + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.8 [2009-12-31] + * Note + * Â礭¤ÊÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¤¬, °ìǯ¤¿¤Ã¤¿¤Î¤Ç¥ê¥ê¡¼¥¹¤·¤Æ¤ª¤­¤Þ¤¹. + * howm-test090723 ¤È¤Î°ã¤¤¤Ï, howm-excluded-dirs ¤Ë ".git" ¤ò + Äɲä·¤¿¤À¤±¤Ç¤¹. + * Êѹ¹¡¦²þÎÉ + * ²á¤®¤¿¡ºÀÚ¤ËÃ忧 + (()) + * _darcs/ ¤Ê¤É¤ò¸¡º÷Âоݳ°¤Ë (howm-excluded-dirs). + (()) + * ¤¤¤Þ¤É¤­¤Î GNU grep ¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¢­¤â¤·¤Æ¤ª¤¯¤È̵Â̤ʸ¡º÷¤ò¾Ê¤±¤Þ¤¹. + (setq howm-view-grep-option "-Hnr --exclude-dir=_darcs") + * ¤µ¤é¤Ë, *.txt ¤À¤±¸¡º÷¤¹¤ë¤è¤¦¤Ë¤·¤¿¤±¤ì¤Ð¡Ä + (setq howm-view-grep-option "-Hnr --exclude-dir=_darcs --include=*.txt") + * (()) ¤È¤Î + ¸ß´¹À­¤Î¤¿¤á, grep ¸Æ¤Ó½Ð¤·»þ¤Ë¥Ç¥£¥ì¥¯¥È¥ê̾ËöÈø¤Î / ¤òºï½ü. + (()) + * (()) + ¤Î¤¿¤á¤ËÆâÉô¤ò¾¯¤·Áݽü. + (()) + * fix + * C-c , l (howm-list-recent)»þ¤Ë³ºÅö¥Õ¥¡¥¤¥ë¤¬Â¿¤¹¤®¤ë¤È¥¨¥é¡¼. + (()) + (()) + * howm-view-use-grep ¤òÀßÄꤷ¤Æ¤¤¤ë¾ì¹ç¤Ëȯ¾É. + meadow ¤À¤È "Spawning child process: exec format error" ¤Ë¤Ê¤ë¤é¤·¤¤. + * grep ¸Æ¤Ó½Ð¤·»þ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬ howm-command-length-limit °Ê¾å¤Ë + Ť¤¤È¤­¤Ïʬ³ä¤·¤Æ¸Æ¤Ó½Ð¤¹¤è¤¦Ä¾¤·¤Þ¤·¤¿. + * (setq howm-list-title t) ¤·¤Æ¤¤¤¿¤é, + come-from ¥ê¥ó¥¯¾å¤Ç RET ¤·¤¿¤È¤­¤â¥¿¥¤¥È¥ë°ìÍ÷¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë. + (()) + * ¤â¤·°ÊÁ°¤ÎÆ°ºî¤¬¤è¤±¤ì¤Ð, + M-x customize-variable RET howm-list-title RET ¤·, + howm-keyword-search °Ê³°¤ò¤¹¤Ù¤Æ¥»¥Ã¥È¤·¤Æ¤¯¤À¤µ¤¤. + * ¥á¥â¤òÊݸ¤·¤¿¤È¤­¤Ë¥á¥Ë¥å¡¼¤¬¼«Æ°¹¹¿·¤µ¤ì¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿. + (howm-menu-expiry-hours ¤òÀµ¤ËÀßÄꤷ¤¿¾ì¹ç¤Î¤ß³ºÅö) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.7 [2008-12-31] + * Note + * ÆâÉôŪ¤Ê¥³¡¼¥ÉÀ°Íý¤È, ¤³¤Þ¤´¤Þ²þÎÉ¡¦½¤Àµ + * howm-1.3.6 (¤â¤·¤¯¤Ï howm-test080531) °ÊÁ°¤Ç + ÊÑ¿ô howm-list-normalizer ¤òÀßÄꤷ¤Æ¤¤¤¿¾ì¹ç¤Ï, + ¤½¤ÎÀßÄê¤ò»ß¤á, ÊÑ¿ô howm-normalizer ¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤ + * ¼«Æ°Æɤߤ«¤¨¤â°ì±þ»î¤ß¤Æ¤Ï¤¤¤Þ¤¹¤¬¡Ä + * howm-1.3.7rc4 ¤È¤Û¤ÜƱ¤¸¤â¤Î¤Ç¤¹ + * ÉÔËÜ°Õ¤Ë "Wrote ..." ¤¬É½¼¨¤µ¤ì¤ë¥Ð¥°¤òľ¤·¤Þ¤·¤¿ + * Êѹ¹¡¦²þÎÉ + * Èó¸ß´¹¤ÊÊѹ¹ + * µìÊÑ¿ô howm-list-normalizer ¤«¤é¿·ÊÑ¿ô howm-normalizer ¤Ø + * °Ü¹ÔÊýË¡ + * M-x customize ¤ÇÀßÄꤷ¤Æ¤¤¤¿¤Ê¤é, + M-x customize-variable howm-list-normalizer RET ¤Ç + ¡ÖOff¡×¤òÀßÄꤷ, + M-x customize-variable howm-normalizer RET ¤Ç²þ¤á¤ÆÀßÄꤷ¤Ê¤ª¤¹ + * .emacs Åù¤Ç (setq howm-list-normalizer 'howm-view-sort-by-¡û¡û) + ¤ÈÀßÄꤷ¤Æ¤¤¤¿¤Ê¤é, ¼¡¤Î¤è¤¦¤Ë½ñ¤­¤«¤¨¤ë + (setq howm-normalizer 'howm-sort-items-by-¡û¡û) + * (setq howm-list-normalizer ¡Ä¤½¤ì°Ê³°¤Î²¿¤«¡Ä) + ¤ÈÀßÄꤷ¤Æ¤¤¤¿¤Ê¤é, + * lisp ¤¬¤ï¤«¤ëÊý: + ¼¡¤Î»ÅÍÍÊѹ¹¤Ë¤¢¤ï¤»¤Æ½¤Àµ¤¹¤ë + * µìÊÑ¿ô: ¡Ö¸½ºß¤Î°ìÍ÷¤òʤ٤«¤¨¤Æɽ¼¨¤·Ä¾¤¹´Ø¿ô¡×¤ò»ØÄê + * ¿·ÊÑ¿ô: ¡ÖÍ¿¤¨¤é¤ì¤¿¥ê¥¹¥È¤ËÂФ·, ¤½¤Îʤ٤«¤¨¤òÊÖ¤¹´Ø¿ô¡×¤ò»ØÄê + * lisp ¤¬¤ï¤«¤é¤Ê¤¤Êý: + ((<2ch UNIX ÈÄ howm ¥¹¥ì|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/l50>)) + ¤« + (()) + ¤Ç¤´ÁêÃ̤ò + * ¤â¤·µìÊÑ¿ô¤ò¥»¥Ã¥È¤·¤¿¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¯¤È¡Ä + * ñ½ã¤ËÆɤߤ«¤¨¤é¤ì¤½¤¦¤Ê¤é, ¿·ÊÑ¿ô¤ËÆɤߤ«¤¨¤Æ¿·½èÍý¤ò¼Â¹Ô + * Æɤߤ«¤¨¤é¤ì¤Ê¤«¤Ã¤¿¤é, µì½èÍý¤ò¼Â¹Ô (Èó¸úΨ) + * ¡Öº£Æü¤ÈÌÀÆü¤ÎÆüÉÕ¡×¤Ï [YYYY-MM-DD] ¤Ç¤Ê¤¯ YYYY-MM-DD ¤òÃ忧 + (()) + (()) + * °ìÍ÷¤ä¥á¥Ë¥å¡¼¤Î¥Õ¥¡¥¤¥ë̾¤â, ¥Þ¥Ã¥Á¤¹¤ì¤ÐÃ忧 + * Á°¤Î¤è¤¦¤ËÌᤷ¤¿¤±¤ì¤Ð¡Ä + ;; º£Æü¤ÈÌÀÆü¤ÎÆüÉÕ¤Ï, [YYYY-MM-DD] ¤Î·Á¼°¤À¤±Ã忧 + (setq howm-highlight-date-regexp-format (regexp-quote "[%Y-%m-%d]")) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡ + * ¸¡º÷»þ¤ÎÆâÉôŪ¤Ê°ìÍ÷¥Ð¥Ã¥Õ¥¡ºÆɽ¼¨¤òÍÞÀ© + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤«¤é¤Î X (dired-x) »þ¤Ë, ¥«¡¼¥½¥ë¤òÂбþ¥Õ¥¡¥¤¥ë̾¤ØÃÖ¤¯ + (()) + > 797 ¤µ¤ó + * 1.3.2 ¤Î±£¤·µ¡Ç½¤ò¸ø¼°²½ & ¥Ç¥Õ¥©¥ë¥È²½. + ÊÑ¿ô howm-view-dired-keep-cursor ¤Ïºï½ü¤·¤Þ¤·¤¿. + * howm-view-summary-previous-section ¤â¡Ö³Æ¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Î¥Ò¥Ã¥È¹Ô¡×¤Ç + »ß¤Þ¤ë¤è¤¦Êѹ¹ + (()) + * ÆâÍƥХåե¡¤Ç°ì¥¢¥¤¥Æ¥à¤À¤±É½¼¨¤·¤Æ¤¤¤ë¤È¤­¤Ï, + ¶èÀÚ¤êÀþ¡Ö====>>> xxx.txt¡×¤òÉÁ¤«¤Ê¤¤. + (()) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¥½¡¼¥È´ð½à¤Ë summary-match-string ¤òÄɲà + * »ØÄꤷ¤¿Àµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó¤Î½ç¤Ë¥½¡¼¥È + * Îã: ¡Ö2006-06-..¡×¤ò»ØÄꤹ¤ì¤Ð, 2006ǯ6·î¤Î¹àÌܤòÆüÉÕ½ç¤Ë + * ¤Á¤Ê¤ß¤Ë, summary-match ¤Ï, ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤ò¾å°Ì¤Ë¤â¤Ã¤Æ¤¯¤ë¤À¤± + * ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤É¤¦¤·¤Î¾å²¼Èæ³Ó¤Ï¤·¤Ê¤¤ + * ¥á¥Ë¥å¡¼ + * ¥á¥Ë¥å¡¼¤Î %recent ¤ä %random ¤Ç¤â¥Õ¥¡¥¤¥ë̾Íó¤ò·å¤½¤í¤¨. + (()) > Mielke-san (peter.mielke at gmail.com) + * ÊÑ¿ô howm-menu-list-format ¤Ï %recent ¤ª¤è¤Ó %random ÍÑ¤Ë + * ¿·ÊÑ¿ô howm-menu-reminder-format ¤¬ %schedule ¤ª¤è¤Ó %todo ÍÑ + * ¥á¥Ë¥å¡¼¤Î %random% ¤Ç, Ʊ¤¸¥Õ¥¡¥¤¥ë¤«¤é¤Ï°ì¹àÌܤ·¤«Áª¤Ð¤ì¤Ê¤¤¤è¤¦¤Ë + (()) + * ¥á¥Ë¥å¡¼¤ÎÍËÆüɽµ­¤ò¥ê¥¹¥È¤Ç»ØÄꤹ¤ë¤è¤¦Êѹ¹. + ±Ñ¸ìɽµ­¤Î¥Ç¥Õ¥©¥ë¥È¤â "Sun" Åù¤Ëľ¤·¤¿. + (()) + (setq howm-day-of-week-ja '("Æü" "·î" "²Ð" "¿å" "ÌÚ" "¶â" "ÅÚ")) + (setq howm-day-of-week-en '("Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat")) + * ¤Ã¤Æ¤¤¤¦¤«, ¤ï¤¶¤ï¤¶Æȼ«¤ËÄêµÁ¤»¤º¤Ë + (format-time-string "%a") ·è¤áÂǤÁ¤Ç¤â¹½¤ï¤Ê¤¤? + * ½é´ü¥á¥Ë¥å¡¼¤Ë¥Ü¥¿¥ó¤ÎÀâÌÀ¤òÄɲÃ. + (()) + * ¤¤¤í¤¤¤í + * howm-view-grep-option ¤ËÊ£¿ô¤Î¥ª¥×¥·¥ç¥ó¤ò½ñ¤±¤ë¤è¤¦¤Ë. + (()) + (setq howm-view-grep-option "-Hnr --include=*.txt") ;; *.txt ¤Î¤ß¸¡º÷ + * ñ½ã¤Ë split-string ¤·¤Æ¤ë¤À¤±. + ¤â¤Ã¤È¤Þ¤¸¤á¤Ê¤Î¤¬É¬Íפʤ餪ÃΤ餻¤¯¤À¤µ¤¤. + * ñ¸ì¤ÎÅÓÃ椬¤¿¤Þ¤¿¤Þ come-from ¥­¡¼¥ï¡¼¥É¤Ë°ìÃפ·¤Æ¤â²¼Àþ¤ò°ú¤«¤Ê¤¤ÀßÄê. + (()) > Mielke-san (peter.mielke at gmail.com) + ;; ASCII ʸ»ú¤Î¤ß¤Î¥­¡¼¥ï¡¼¥É¤Ï, ñ¸ìÅÓÃæ¤Ë¥Þ¥Ã¥Á¤·¤Æ¤â²¼Àþ¤ò°ú¤«¤Ê¤¤ + (setq howm-check-word-break "^[[:ascii:]]+$") + * ͽÄêɽ, ToDo ¥ê¥¹¥È¤Ë¤âĶ²áÆü¿ô¤òɽ¼¨. + (()) > Mielke-san (peter.mielke at gmail.com) + * .howm-history ¤Þ¤ï¤ê¤ÎµóÆ°¤ò²þÁ±. + (()) + (()) + * ¥Ð¥Ã¥Õ¥¡°ìÍ÷¤Ëɽ¼¨¤·¤Ê¤¤ + * "Wrote ..." ¤òɽ¼¨¤·¤Ê¤¤ + * make test »þ¤Ë ~/.howm-history ¤ò±ø¤µ¤Ê¤¤ + * fix + * howm-menu-categorized-reminder ¤Çɽ¼¨¤µ¤ì¤Ê¤¤¹àÌܤ¬¤¢¤Ã¤¿ + (()) + * (setq howm-view-list-title-type 2) ¤Î¤È¤­ C-c , a ¤Ç¥¨¥é¡¼ + (()) + * ¥¿¥¤¥È¥ë¤Î¤Ê¤¤¥á¥â¤¬ C-c , a ¤Çɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿ + * howmoney ¤¬»È¤¨¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿. + (()) + (()) + * ͽÄê¤ä todo ¤¬°ì¤Ä¤â¤Ê¤¤¤È¤­¤ËͽÄêɽ¤ä todo ¥ê¥¹¥È¤ò¸Æ¤Ó½Ð¤·¤¿¾ì¹ç. + (()) + * ͽÄêɽ¤ä todo ¥ê¥¹¥È¤Ç action-lock-mode ¤¬ÉÔËܰդ˥ȥ°¥ë. + * howm2, howmkara ¤Î -exclude ¥ª¥×¥·¥ç¥ó¤ËÉÔ¶ñ¹ç. + (()) > dareka ¤µ¤ó + * (())¤Ç C-c , t ¤¬¡ÖNo match¡×¤Ë + (()) > taku ¤µ¤ó + * ¸ß´¹À­¤ò½¤Éü + * howm-occur ¤Ç°ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¸¡º÷¸ì¤¬¥Ï¥¤¥é¥¤¥È¤µ¤ì¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿ + * ¡Ö¡ã¡ã¡ã ¥Æ¥¹¥È ¡ã¡ã¡ã Test¡×¤Î¡ÖTest¡×¾å¤Ç RET ¤òᤤ¤Æ¤â¡Ö¥Æ¥¹¥È¡×¤¬ + ¸¡º÷¤µ¤ì¤Ê¤«¤Ã¤¿ + * howm-keyword-case-fold-search ¤ò¥»¥Ã¥È¤·¤Æ¤¤¤¿¤È¤­¤ÎÂçʸ»ú¾®Ê¸»ú¤¬¤é¤ß + * C-c , l ¤Ç¤¤¤Á¤¤¤ÁÆüÉÕ¤òʹ¤«¤Ê¤¤¤è¤¦¤Ë + (()) + * [2007-04-02] ¤Ëºî¤ê¹þ¤ó¤À¥Ð¥° + * ¸¡º÷·ë²Ì¤Î°ìÍ÷¤Ç¡Ö¡ã¡ã¡ã ¤Û¤²¡×¤¬ÀèƬ¤Ë¤³¤Ê¤¤¾ì¹ç¤¬¤¢¤Ã¤¿ + (()) + * (setq howm-list-title t) ¤·¤Æ¤¤¤ë¤Èȯ¾É + * remove-duplicates ¤Î»ÅÍͤò¤è¤¯ÃΤé¤Ê¤«¤Ã¤¿¤»¤¤. ÊÙ¶¯¤Ë¤Ê¤ê¤Þ¤·¤¿. + * (setq howm-list-title t) ¤À¤È°ìÍ÷¥Ð¥Ã¥Õ¥¡¤ËÁ°²ó¤ÎÆâÍƤ¬É½¼¨¤µ¤ì¤ë¥Ð¥° + * howm-view-contents-limit ¤¬¸ú¤¤¤Æ¤¤¤Ê¤«¤Ã¤¿ + * ÆüÉդǤιʤê¹þ¤ß·ë²Ì¤¬°ìÆüʬ¿¤¹¤®¤¿ + * narrowing ´ØÏ¢¤ÎÉÔ¶ñ¹ç(widen È´¤±) + (()) + * ¥á¥Ë¥å¡¼¤Î¡Ö%reminder¡×¤ÎÄì¤Ë, ²á¤®¤¿Í½Ä꤬ɽ¼¨¤µ¤ì¤Æ¤¤¤¿. + (()) + * ¥á¥Ë¥å¡¼Ãæ¤Î¡Ö> 2006-07-26-015606 | ¡Ä¡×¤Î¡Ö7¡×¾å¤Ç RET ¤ò᤯¤È¥¨¥é¡¼. + (()) > na ¤µ¤ó + * ÊÑ¿ô howm-menu-list-regexp ¤ÎÄêµÁ¤ò¤Á¤ç¤Ã¤Èľ¤·¤¿¤À¤± + * °Û¤Ê¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÎƱ̾¥Õ¥¡¥¤¥ë¤¬°ìÍ÷ɽ¼¨¤Çº®Æ±¤µ¤ì¤Æ¤¤¤¿. + (()) + * howm-view-split-horizontally ¤¬ t ¤Ç¤â nil ¤Ç¤â¤Ê¤¤¤È¤­¤ÎÆÃÊ̤ÊÆ°ºî¤òÇÑ»ß. + (()) + * howm-1.2 ¡Á 1.3.7rc2 ¤Ç²õ¤ì¤Æ¤¤¤¿¤¬, ¥Ð¥°¥ì¥Ý¡¼¥È¤Ê¤·. + ¤­¤Ã¤Èï¤â»È¤Ã¤Æ¤¤¤Ê¤¤ ^^; + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.6 [2008-05-31] + * fix: 2008-02-24 °Ê¹ß¤Î CVS Àèü emacs ¤Ç, ¾¥Ð¥Ã¥Õ¥¡¤ÎÃ忧¤¬Íð¤ì¤ë. + (()) + * minor mode ¤¬ font-lock-keywords-only ¤òľ¤Ë¿¨¤ë¤Î¤Ï¹Ôµ·°­¤¤? + * howm-test20080514 ¤«¤é¤Î¥Ð¥Ã¥¯¥Ý¡¼¥È + * (howm-1.3.6rc1 ¤ÈÃæ¿È¤ÏƱ¤¸¤Ç¤¹) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.5 [2007-12-09] + * fix: ²Æ»þ´ÖºÇ½ªÆü¤ËÅöÆü¤ÎͽÄ꤬¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿. + (()) > Mielke-san (peter.mielke at gmail.com) + * howm-test071108 ¤«¤é¤Î¥Ð¥Ã¥¯¥Ý¡¼¥È + * fix: ½çÉÔƱ¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤è¤¦¤Ë + * Wanderlust ¤ä Navi2ch ¤ò»²¹Í¤Ë¤·¤Æ, + ½ä²ó°Í¸¤Î°·¤¤Êý(require ¤Î½ñ¤­Êý)¤ò½¤Àµ + * howm-test07-05-18 ¤«¤é¤Î¥Ð¥Ã¥¯¥Ý¡¼¥È + * automake ¤ò 1.6 ¤«¤é 1.10 ¤Ë + * howm-test07-05-05 ¤«¤é¤Î¥Ð¥Ã¥¯¥Ý¡¼¥È + * automake-1.10 ¤Î elisp-comp ¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿ + * (howm-1.3.5rc1 ¤ÈÃæ¿È¤ÏƱ¤¸¤Ç¤¹) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.4 [2006-12-16] + * ¥»¥­¥å¥ê¥Æ¥£½¤Àµ + (()) + * ²¿¤¬ÌäÂê? + * Emacs ¤Ë¤Ï, ¥Õ¥¡¥¤¥ë¤´¤È¤Ë¥í¡¼¥«¥ëÊÑ¿ô¤ò¼«Æ°ÀßÄꤹ¤ëµ¡Ç½¤¬¤¢¤ê¤Þ¤¹. + ¤³¤ì¤ò°­ÍѤ¹¤ë¤È, howm »ÈÍÑ»þ¤ËǤ°Õ¤ÎÌ¿Îá¤ò¼«Æ°¼Â¹Ô¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹. + (()) + * ¤É¤¦Ä¾¤·¤¿? + * howm ´ØÏ¢¤ÎÁ´¥·¥ó¥Ü¥ë¤Ë risky-local-variable °À­¤ò¥»¥Ã¥È¤·, + ¾å½Ò¤Î¼«Æ°ÀßÄê»þ¤Ë¥Á¥§¥Ã¥¯¤¬Æþ¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. + * ¥Ð¡¼¥¸¥ç¥ó¥¢¥Ã¥×¤·¤¿¤¯¤Ê¤¤/¤Ç¤­¤Ê¤¤¤Î¤Ç¤¹¤¬? + * ¥½¡¼¥¹¤ÎÊÔ½¸¤¬²Äǽ¤Ê¤é, + howm.el ¤ÎËöÈø¤Ë°Ê²¼¤Î¥³¡¼¥É¤ò²Ã¤¨¤ë¤Î¤¬³Î¼Â¤Ç¤¹. + ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤Î¤·¤Ê¤ª¤·¤â¤ªËº¤ì¤Ê¤¯. + ;; howm-1.2.2 °Ê¹ßÍÑ. howm ´ØÏ¢¤ÎÁ´¥·¥ó¥Ü¥ë¤Ë risky-local-variable °À­. + (mapcar (lambda (symbol) (put symbol 'risky-local-variable t)) + (howm-symbols)) + * ¤½¤ì¤¬º¤Æñ¤Ê¾ì¹ç¤Ï .emacs ¤Ë°Ê²¼¤ò²Ã¤¨¤Æ¤¯¤À¤µ¤¤. + (eval-after-load "howm" ; ¢« autoload/load/require ¤Îµ­½Ò¤Ë¤¢¤ï¤»¤Æ + ;; howm-1.2.2 °Ê¹ßÍÑ. howm ´ØÏ¢¤ÎÁ´¥·¥ó¥Ü¥ë¤Ë risky-local-variable °À­. + '(mapcar (lambda (symbol) (put symbol 'risky-local-variable t)) + (howm-symbols))) + * ¤É¤Á¤é¤Ë¤»¤è, ½¤Àµ¤¬È¿±Ç¤µ¤ì¤¿¤³¤È¤ò¤´³Îǧ¤¯¤À¤µ¤¤. + * emacs ¤òΩ¤Á¾å¤²Ä¾¤·, howm ¤òµ¯Æ° + * °Ê²¼¤ò *scratch* ¥Ð¥Ã¥Õ¥¡¤ËŽ¤ê, ÊĤ¸³ç¸Ì¤Î¸å¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤Æ C-j ¤ò + ²¡¤¹ + (get 'howm-version 'risky-local-variable) + * t ¤Èɽ¼¨¤µ¤ì¤ì¤Ð OK + * ¥í¡¼¥«¥ëÊÑ¿ô¤Î¼«Æ°ÀßÄê¤ò¤¢¤¨¤Æ»È¤¤¤¿¤¤¤È¤­¤Ï? + * °Ê²¼¤Î¤è¤¦¤ËÊÑ¿ô¤´¤È¤Ë²ò¶Ø¤·¤Æ¤¯¤À¤µ¤¤. + ;; Îã: ÊÑ¿ô howm-auto-narrow ¤Ï¥Õ¥¡¥¤¥ë¤´¤È¤Î¼«Æ°ÀßÄê¤òµö²Ä + (put 'howm-auto-narrow 'risky-local-variable nil) + * howm ¤Ë¸Â¤é¤º, ¥í¡¼¥«¥ëÊÑ¿ô¤Î¼«Æ°ÀßÄê¤ò°ìÀڻȤ¨¤Ê¤¯¤¹¤ë¤Ë¤Ï? + * .emacs ¤Ë°Ê²¼¤ò²Ã¤¨¤Æ¤¯¤À¤µ¤¤. + ¤¿¤À¤· emacs ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤Ã¤Æ¤ÏÉÔ´°Á´¤«¤â¤·¤ì¤Þ¤»¤ó. + (()) + ;; ¥í¡¼¥«¥ëÊÑ¿ô¤Î¼«Æ°ÀßÄê¤ò¥ª¥Õ + (setq enable-local-variables nil) + * fix: CVS Àèü emacs ¤Ç¥á¥Ë¥å¡¼¤Ê¤É¤Ë¿§¤¬¤Ä¤«¤Ê¤¤ + (()) + * ½¤Àµ¤Ï, cheat-font-lock-20040624-format-p ¤ÎÄêµÁÃæ¤Î = ¤ò >= ¤Ëľ¤¹¤À¤± + * howm-test061015 ¤«¤é¤Î¥Ð¥Ã¥¯¥Ý¡¼¥È + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.3 [2006-06-05] + * Note + * ºÇ¿·¤Î Emacs 22.0.50 (CVS HEAD) ¤Ë¤¿¤Ö¤óÂбþ + * Meadow 3.00-dev ¤ä Carbon Emacs ¤â¤³¤ì¤ËÁêÅö¤·¤Þ¤¹. + ¤³¤ì¤é¡Ö¥ê¥ê¡¼¥¹Á°¤Î³«È¯ÈǺÇÀèü Emacs¡× + ¤òº£¸å¤âÄɤ¤Â³¤±¤ëÊý¤Ï, howm ¤â¥Æ¥¹¥ÈÈǤòÇÁ¤¤¤Æ¤ß¤Æ¤¯¤À¤µ¤¤. + * ¥Õ¥¡¥¤¥ë¹½À®¤ò¾¯¡¹Êѹ¹ + * make install °Ê³°¤ÎÊýË¡¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¾ì¹ç¤Ï¤´³Îǧ¤¯¤À¤µ¤¤. + ½é´ü¥á¥Ë¥å¡¼ 0000-00-00-000000.howm ¤Î¼êÆ°¥³¥Ô¡¼¤ÏÉÔÍפˤʤê¤Þ¤·¤¿. + * ¥á¥Ë¥å¡¼¤Î todo °ìÍ÷¤Ç¤ÏÀøÉúÃæ¤Î¹àÌܤâ¥Ç¥Õ¥©¥ë¥È¤Çɽ¼¨ + * ¥Ç¥Õ¥©¥ë¥È¤Ï¡Ö°ÂÁ´Â¦¡×¤ËÅݤ·¤Æ¤ª¤¯Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦. + ¤³¤ì¤Þ¤ÇÄ̤걣¤¹ÊýË¡¤Ï²¼¤Î¡ÖÊѹ¹¡×¤ò»²¾È¤¯¤À¤µ¤¤. + * ¤½¤Î¾, grep ¤Îʸ»ú¥³¡¼¥É¤Ë´Ø¤¹¤ë½¤Àµ¤ä, ±£¤·µ¡Ç½¤Ê¤É + * ±£¤·µ¡Ç½¤Ç¤Ï, ¥á¥â¤È¤ê¤ò¤µ¤é¤Ë¼ê·Ú¤Ë¤¹¤ë M-x howm-remember ¤¬ + ¹¥É¾¤Î¤è¤¦¤Ç¤¹. + * howm-1.3.3rc1 ¤ä howm-test060515 ¤ÈÃæ¿È¤ÏƱ¤¸ + * meadow3 ¤Ç¥Ï¥Þ¤Ã¤¿¿Í¤¬Â¿¤½¤¦¤Ê¤Î¤Ç¥ê¥ê¡¼¥¹¤¹¤ëµ¤¤Ë¤Ê¤ê¤Þ¤·¤¿. + ¡ÖÉÔ°ÂÄê¤Ê³«È¯ÈǡפȤ¤¤¦´¶¤¸¤¸¤ã¤Ê¤¯¤â¤¦°ìÈ̤ËÉáµÚ¤·¤Æ¤¤¤ë¤Î¤«¤Ê¡Ä + * Êѹ¹¡¦²þÎÉ + * ¥á¥Ë¥å¡¼¤Î todo °ìÍ÷¤Ç¤ÏÀøÉúÃæ¤Î¹àÌܤâ¥Ç¥Õ¥©¥ë¥È¤Çɽ¼¨ + (()) + (()) + * ±£¤·¤¿¤±¤ì¤Ð M-x customize-variable howm-menu-todo-priority + * grep »þ¤Îʸ»ú¥³¡¼¥ÉÀßÄê howm-process-coding-system ¤Ç, + ÆþÎϤȽÐÎϤËÊ̤ÎÃͤò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ + (()) + ;; process (UTF-8)¢ª emacs + ;; emacs ¢ª(SJIS) process + (setq howm-process-coding-system '(utf-8-unix . sjis-unix)) + * ¥á¥Ë¥å¡¼¤Î¡Ö> ¡Ä¡×¤Ç RET ¤·¤¿¤È¤­, ¡Ö¡Ä¡×¤ò¸¡º÷¤¹¤ë¤Î¤Ç¤Ê¤¯, + Âбþ¥Õ¥¡¥¤¥ë¤òľÀܳ«¤¯ + (()) + * ¥Õ¥¡¥¤¥ë¹½À®¤ä¥¤¥ó¥¹¥È¡¼¥ë¼ê½ç¤Ë¤Ä¤¤¤Æ + * ¸À¸ì°Í¸¤ÎÊÑ¿ô¤ò howm-lang-{en,ja}.el ¤ØʬΥ + * configure ¤Î¿·¥ª¥×¥·¥ç¥ó --with-howmdir. + thx > Ëܾ±¤µ¤ó + * *.el ¤È *.elc ¤Ï¤³¤³¤Ø¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë + * lispdir ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï, ¡Ä/site-lisp/howm ¤«¤é ¡Ä/site-lisp ¤ËÊѹ¹ + * ½é´ü¥á¥Ë¥å¡¼¥Æ¥ó¥×¥ì¡¼¥È¤Î¥¤¥ó¥¹¥È¡¼¥ëË¡¤òÊѹ¹ + thx > Ëܾ±¤µ¤ó, Á¬Ã«¤µ¤ó + (()) + (()) + * ½¾Íè¤Ï, /usr/local/share/howm/{en,ja}/0000-00-00-000000.howm + ¤ËÃÖ¤¤¤Æ, Äê¿ô howm-{en,ja}-dir ¤Ç¤½¤Î°ÌÃÖ¤ò»ØÄê + * ¥¤¥ó¥¹¥È¡¼¥ë¤·Ëº¤ì¤äÁêÂХѥ¹¤Ë¤è¤ê, ¥È¥é¥Ö¥ë¤¬À¸¤¸¤Æ¤¤¤¿ + * ¥¤¥ó¥¹¥È¡¼¥ë¤·¤Ê¤¤¾ì¹ç, 0000-00-00-000000.howm ¤Î¼êÆ°¥³¥Ô¡¼¤¬É¬Í× + * º£¸å¤Ï, howm-menu-{en,ja}.el + * howm ¤ò½é¤á¤Æ»È¤¦¤È¤­¤Î¤ß, Äê¿ô howm-menu-{en,ja} ¤òÆɤ߹þ¤ß¤Þ¤¹ + * ¥á¥â¥ê¤Ë¤«¤«¤¨¹þ¤à¤Î¤¬¤Ò¤ó¤·¤å¤¯¤Ê¤é, + ¡Ö»ÈÍѸå¤ËÃͤòÇË´þ¡×¤È¤¤¤¦¾®ºÙ¹©¤â¹Í¤¨¤é¤ì¤Þ¤¹. + ¤â¤·É¬ÍפÀ¤Ã¤¿¤é¤ªÃΤ餻¤¯¤À¤µ¤¤. + (º£¤É¤­¿ô¥­¥í¥Ð¥¤¥È¤Ê¤ó¤Æ¸íº¹ÈÏ°Ï?) + * 0000-00-00-000000.howm ¤Î¼êÆ°¥³¥Ô¡¼¤Ï´°Á´¤ËÉÔÍפȤʤ俤Ĥâ¤ê + * ·ë¶É¤³¤ó¤Êή¤ì + ja/0000-00-00-000000.howm + ¢­¥ê¥ê¡¼¥¹»þ¤Ëºî¼Ô¤¬À¸À® (¼ÂºÝ¤Ï howm-mkmenu.el ¤Ç¼«Æ°²½) + howm-menu-ja.el + ¢­make install + $lispdir/howm/howm-menu-ja.elc + ¢­howm ¤ò½é¤á¤Æ»È¤Ã¤¿¤È¤­¤À¤±Æɤ߹þ¤ó¤Ç¼«Æ°À¸À® + ~/howm/0000-00-00-000000.howm + * fix + * CVS Àèü emacs ¤Ç make ¤¹¤ë¤È¥¨¥é¡¼ + "Font-lock trying to use keywords before setting them up". + (()) + (()) + (()) + (()) + (()) + (()) + (()) + (()) + * grep »þ¤Î howm-process-coding-system ¤Î½èÍý¥¿¥¤¥ß¥ó¥°¤Ë¥Ð¥° + (()) + (()) + * migemo-client ¤Î¥ª¥×¥·¥ç¥ó¤òÄɲûØÄê²Äǽ¤Ë + (()) + (setq howm-migemo-client-option '("-H" "::1")) + * howm-view-grep-option ¤¢¤¿¤ê¤È¤ÎÉÔÅý°ì¤¬µ¤¤Ë¤Ê¤ë¤Î¤Ç, + ¥³¥Þ¥ó¥É»ØÄê°ìÈ̤γÈÄ¥»ÅÍÍ°Æ(¤È¤ê¤¢¤¨¤º°Æ¤À¤±). ¤ª¤ª¤²¤µ¤¹¤®? + nil ;; ¢ª ¥Ç¥Õ¥©¥ë¥È + "¥³¥Þ¥ó¥É̾" + ("¥³¥Þ¥ó¥É̾" "¥ª¥×¥·¥ç¥ó" ¡Ä "¥ª¥×¥·¥ç¥ó") + ´Ø¿ô̾ ;; ¢ª ¥³¥Þ¥ó¥É¤Î¤«¤ï¤ê¤Ë elisp ¤Î´Ø¿ô¤ò¼Â¹Ô + * howm-kill-all ¤Ï .howm-keys ¥Ð¥Ã¥Õ¥¡¤â¾Ã¤¹¤Ù¤­ + (()) + * howm-mode-off-hook ¤ÎÄêµÁ¤¬¤À¤Ö¤Ã¤Æ¤¤¤¿. + thx > Ãݼ¤µ¤ó + * (()) + ¤Ç¥¨¥é¡¼¤¬½Ð¤Æ¤¤¤¿¤½¤¦. + (()) + > (TxT) ¤µ¤ó + * emacs20 ¤Ç M-x howm-bug-shot ¤¬¥¨¥é¡¼¤Ë¤Ê¤Ã¤Æ¤¤¤¿. + (()) + > ƨÈò¤µ¤ó + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.2 [2005-11-04] + * Note + * ¼ç¤Ë, ¾®¤µ¤Ê¥Ð¥°½¤Àµ¤À¤± + * ¤¢¤È¤Ï±£¤·µ¡Ç½¤ò¾¯¡¹ + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ 1.3.2rc4 ¤ÈƱ¤¸¤â¤Î¤Ç¤¹ + * Êѹ¹ + * ¥á¥Ë¥å¡¼¤Î [º£Æü] (C-c , , .) ¤Ç¤â¥Ç¥Õ¥©¥ë¥È¤Ç¥¿¥¤¥È¥ë¤òɽ¼¨. + (()) + > nobu ¤µ¤ó + * ¥¿¥¤¥È¥ëɽ¼¨¤·¤¿¤¯¤Ê¤±¤ì¤Ð¡Ä + * M-x customize-variable RET howm-list-title RET + * howm-action-lock-date-search ¤Î¥Á¥§¥Ã¥¯¤ò¤Ï¤º¤¹ + * [Save for Future Sessions] + * fix + * xemacs ¤À¤È, ¥á¥Ë¥å¡¼Æâ¤Ç [2005-10-15] ¤Î¤è¤¦¤Ê + ÆüÉÕ¾å¤Ç¤Î RET ¤¬¥¨¥é¡¼ + (()) + * xemacs ¤À¤È, °ìÍ÷¥Ð¥Ã¥Õ¥¡¤«¤é¤Î X (dired-x) ¤¬¥¨¥é¡¼ + (()) + > 797 ¤µ¤ó + * ¤Ä¤¤¤Ç¤Ë, Ʊ¤¸¥Õ¥¡¥¤¥ë¤¬²¿ÅÙ¤âɽ¼¨¤µ¤ì¤ë¤Î¤ò½¤Àµ + * howm-view.el ¤Ë (require 'riffle) ¤òÄɲà + (()) + * Makefile °Ê³°¤Î¼ê½ç¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È M-x howm-menu ¤¬¥¨¥é¡¼ + (()) + (()) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.1 [2005-08-17] + * xemacs ¤Ç¤ä¤±¤ËÃÙ¤¯¤Ê¤Ã¤Æ¤¤¤¿¤Î¤ò½¤Àµ + (xemacs ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤â¤è¤ë¤Î¤«¤â) + * ´Ä¶­ÊÑ¿ô LC_ALL, LC_CTYPE, LANG ¤òÀßÄꤷ¤Ê¤¤¤È¥¨¥é¡¼¤¬½Ð¤Æ¤¤¤¿¤Î¤ò½¤Àµ + (()) + * ¤³¤Î README ¤Î ½¤Àµ + (()) + * my-howm-next-hit ¤Î¥³¡¼¥É¤ò¹¹¿· + * howm-view-search-in-result-correctly ¤òÀßÄꤷ¤Æ¤â, + date ¤Ç¤Î¹Ê¤ê¹þ¤ß¤Ï¥Õ¥¡¥¤¥ëñ°Ì + * ÅöÌ̤ϻÅÍÍ. °ìÆü°ì¥Õ¥¡¥¤¥ë¤Þ¤Ç¤Ê¤éÌäÂê¤Ê¤¤¤Ï¤º. + * °ì·î°ì¥Õ¥¡¥¤¥ë¡¦Á´¥á¥â°ì¥Õ¥¡¥¤¥ë¤Ê¤É¤À¤ÈÌäÂê. + * ¡Ö»ØÄê·î¤Î¥á¥â°ìÍ÷¡×¤È¤«¤Ç¤Ã¤Á¤¢¤²¤è¤¦¤«¤È¤â»×¤¤¤Þ¤·¤¿¤¬, + ¼«Ê¬¤Î¾ì¹ç¤ÏŤ¯¤Ê¤ê¤¹¤®¤ÆÌò¤ËΩ¤¿¤Ê¤½¤¦¤Ê¤Î¤Ç, ¤ä¤á¤Þ¤·¤¿. + ¤´°Õ¸«¤¬¤¢¤ì¤Ð¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤. + * °ìÍ÷¤Ç, Á°¤ÈƱ¤¸Ì¾Á°¤â¤¤¤Á¤¤¤Áɽ¼¨ + (()) + (setq howm-view-summary-omit-same-name nil) + * ¤¢¤È¤Ï±£¤·µ¡Ç½¤ò¾¯¡¹ + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ 1.3.1rc1 ¤ÈƱ¤¸¤â¤Î¤Ç¤¹ + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.0 [2005-08-02] + * Note + * ÌÜ¶Ì + * come-from ¥­¡¼¥ï¡¼¥É¤Î alias + * M-x customize Âбþ ([Applications] ¢ª [Howm]) + * ¤³¤Î README ¤Î((<¥«¥¹¥¿¥Þ¥¤¥º>))¤Ï¤¬¤µ¤¬¤µºï¤ê¤Þ¤·¤¿. + * ¸¡º÷ÍúÎò + * °ìÍ÷»þ¤Î¥¿¥¤¥È¥ëɽ¼¨ + * °ìÍ÷¤ËƱ¤¸¥Õ¥¡¥¤¥ë̾¤ò¤¯¤êÊÖ¤·É½¼¨¤·¤Ê¤¤ + * ¼«Æ°¿ìÊâ + * ¥á¥Ë¥å¡¼¤ËºÇ¶á¤Î¥á¥â°ìÍ÷¡¦¥é¥ó¥À¥àÁªÂò°ìÍ÷ + * ¥á¥Ë¥å¡¼¤Ë [ÍúÎò] [¿ìÊâ] [ÀßÄê] [»þ¢­] ¤òÄɲà + * ¤¹¤Ç¤Ë howm ¤ò»È¤Ã¤Æ¤¤¤¿¾ì¹ç, + make install ¤·¤Æ¤â¾¡¼ê¤Ë¤ÏÄɲ䵤ì¤Þ¤»¤ó. + ¥á¥Ë¥å¡¼¤ò¼«Ê¬¤ÇÊÔ½¸¤¹¤ë¤«, + ja/0000-00-00-000000.howm ¤ò¼«Ê¬¤Ç¥³¥Ô¡¼¤¹¤ë¤«¤·¤Æ¤¯¤À¤µ¤¤. + * ¥Ç¥Õ¥©¥ë¥È¤òÊѹ¹¤·¤Þ¤·¤¿. Ìᤷ¤¿¤±¤ì¤Ð .emacs ¤Ê¤É¤Ë¢­¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤. + ;; ¥¿¥¤¥È¥ëɽ¼¨¤Ï¾ï»þ¥ª¥Õ + (setq howm-list-title nil) + ;; ¸¡º÷ÍúÎò + (setq howm-history-limit 0) ;; ¸¡º÷ÍúÎò¤òµ­Ï¿¤·¤Ê¤¤ + (setq howm-history-unique nil) ;; ¸¡º÷ÍúÎò¤«¤é½ÅÊ£¤ò¼è¤ê½ü¤«¤Ê¤¤ + ;; grep -E/-F ¤Ç¤Ê¤¯ egrep/fgrep + (setq howm-view-grep-command "egrep") + (setq howm-view-fgrep-command "fgrep") + (setq howm-view-grep-extended-option nil) + (setq howm-view-grep-fixed-option nil) + (setq howm-view-grep-file-stdin-option nil) ;; ¥Ñ¥¿¡¼¥ó¤Ï°ú¿ô¤ÇÅϤ¹ + ;; howm-template ¤¬´Ø¿ô¤À¤Ã¤¿¤È¤­¤Ï, universal-argument ¤ò + ;; °ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö + (setq howm-template-receive-buffer nil) + ;; °ìÍ÷¤«¤é RET ¤Ç³«¤¯¤È¤­, ÆâÍƥХåե¡¤Î¥«¡¼¥½¥ë°ÌÃÖ¤òÊݤ¿¤Ê¤¤ + (setq howm-view-summary-keep-cursor nil) + * ¥Æ¥¹¥È¤Ë¤´¶¨ÎϤ¯¤À¤µ¤ëÊý¤Ï, ¢­¤ò»î¤·¤Æ¤¤¤¿¤À¤±¤ë¤È½õ¤«¤ê¤Þ¤¹. + ;; (±£¤·µ¡Ç½) + ;; °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¤â, ¹Ê¤ê¹þ¤ßÅù¤ò + ;; ¥Õ¥¡¥¤¥ëñ°Ì¤¸¤ã¤Ê¤¯¥á¥âñ°Ì¤Ë. + ;; ¤¿¤À¤·, date ¤Ç¤Î¹Ê¤ê¹þ¤ß¤Ï¥Õ¥¡¥¤¥ëñ°Ì¤Î¤Þ¤Þ. + (setq howm-view-search-in-result-correctly t) + * ÆâÉô¼ÂÁõ¤ÎÊѹ¹ (riffle.el) + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ howm-1.3.0rc5 ¤ÈÃæ¿È¤ÏƱ¤¸¤Ç¤¹. + * »ÅÍÍÊѹ¹ + * howm-template ¤ÎÃͤ¬´Ø¿ô¤À¤Ã¤¿¤È¤­¤Ï, + ¡Öuniversal-argument ¤È((*ľÁ°¤Î¥Ð¥Ã¥Õ¥¡*))¡×¤ò°ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö + (()) + * »ÈÍÑÎã + ;; snap.el ¤Ç¤Î¥ê¥ó¥¯¤òÆþ¤ì¤ë + (setq howm-template #'my-howm-template) + (defun my-howm-template (which buf) ;; C-u 3 C-c , c ¤Ê¤é which = 3 + (let ((snap (with-current-buffer buf + (or (snap-record-string) "")))) + (format "= %%title%%cursor\n%%date\n%s\n\n" snap))) + * ½¾Íè¤È¸ß´¹¤ËÌᤷ¤¿¤±¤ì¤Ð¡Ä + ;; howm-template ¤¬´Ø¿ô¤À¤Ã¤¿¤È¤­¤Ï, universal-argument ¤ò + ;; °ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö + (setq howm-template-receive-buffer nil) + * ¥á¥Ë¥å¡¼Åù¤«¤é¤Î¥ê¥Þ¥¤¥ó¥Àľá¤­»þ, ᤭Àè¤Î¼«Æ°Êݸ¤Ë¤Ä¤¤¤Æ¡Ä + * ¤¿¤È¤¨ howm-action-lock-forward-save-buffer ¤¬ non-nil ¤Ç¤â, + ᤭Á°¤«¤é¤¹¤Ç¤Ë¡Ö³ºÅö¥Ð¥Ã¥Õ¥¡¤¬ modified¡×¤À¤Ã¤¿¤È¤­¤Ï + Êݸ¤·¤Ê¤¤ + * howm-todo-menu-types ¤Î¥Ç¥Õ¥©¥ë¥È¤Ë "." ¤âÄɲà + * ¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤ÎÊѹ¹ + * egrep/fgrep ¤Ç¤Ê¤¯ grep -E/-F ¤ÎÊý¤ò¥Ç¥Õ¥©¥ë¥È¤Ë. + ÊÑ¿ô howm-view-fgrep-command ¤Ï¾­ÍèÇѻߤ¹¤ë¤«¤â. + (()) + * grep ¤Ø¤Ïɸ½àÆþÎϤǥѥ¿¡¼¥ó¤òÅϤ¹ + * {Á´|ºÇ¶á|Á°¸å}¥á¥â°ìÍ÷¤Ë¥Ç¥Õ¥©¥ë¥È¤Ç¥¿¥¤¥È¥ëɽ¼¨ + * ±£¤·µ¡Ç½¤Î¸ø¼°²½ (¢¥ ¤Ï¡Ö¤ª¤¹¤¹¤á¡×) + * 1.1.1.* °ÊÁ°¤«¤é + * howm-view-before-open-hook + * ¥á¥Ë¥å¡¼¤Î todo ¤Ë½ÜÅÙ¤òɽ¼¨²Ä + (()) + (setq howm-menu-todo-priority-format "(%8.1f)") + * ¥Ç¥Ð¥Ã¥°ÍÑÊÑ¿ô howm-call-process-last-command + * (setq howm-message-time t) ¤¹¤ì¤Ð, ¸¡º÷Åù¤ËÍפ·¤¿»þ´Ö¤òɽ¼¨ + * 1.2 ¤«¤é + * come-from ¥­¡¼¥ï¡¼¥É¤Î alias ¢¥ ¢ª ((<¥á¥â¤ò½ñ¤³¤¦>)) + (()) + * ¥á¥Ë¥å¡¼ + * ¥á¥Ë¥å¡¼¤Ë¡Ö%recent¡×¤ä¡Ö%random¡× ¢¥ + (()) + (()) + * ¥á¥Ë¥å¡¼Ãæ¤ËÊÑ¿ô¤ä´Ø¿ô¤ÎÃͤòɽ¼¨ + * °ìÍ÷ + * ¥½¡¼¥ÈË¡¤Ë¡Örandom¡×¤òÄɲà + (()) + * °ìÍ÷ɽ¼¨Áë¤Î¹Ô¿ôÀßÄê + (()) + (()) + (setq howm-view-summary-window-size 10) + * ¡Ö¥¿¥¤¥È¥ë¡×¤ÎÀµµ¬É½¸½¤ò, µ¡Ç½¤´¤È¤ËÊѹ¹²Äǽ + (setq howm-list-title-regexp "^[*=] [^ ]") ;; °ìÍ÷ɽ¼¨ + (setq howm-menu-recent-regexp "^[*=] [^ ]") ;; ¥á¥Ë¥å¡¼Ãæ¤Î %recent + * °ìÍ÷¤«¤é RET ¤Ç³«¤¯¤È¤­, ÆâÍƥХåե¡¤Î¥«¡¼¥½¥ë°ÌÃÖ¤òÊÝ¤Ä + (setq howm-view-summary-keep-cursor t) ;; ¢« ¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤Þ¤·¤¿ + * ¤Á¤ç¤Ã¤È¼«¿®¤Ê¤·. ÉÔ¶ñ¹ç½Ð¤¿¤é¶µ¤¨¤Æ¤¯¤À¤µ¤¤. + * ñ¸ì¤ÎÅÓÃæ¤Ë¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤Ï¸å¤Þ¤ï¤· + (setq howm-list-prefer-word t) + * ¡Öeuc¡×¤ò¸¡º÷¤·¤¿¤é, ¡Öeuclid¡×¤ä¡Ötakeuchi¡×¤è¤ê¤â, + ñ¸ì¡Öeuc¡×¤Ë¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤ò¾å¤Ëɽ¼¨ + * ¤¿¤À¤·, ¡Ö<<< euclid¡×¤Ï¤¢¤¤¤«¤ï¤é¤º¤Æ¤Ã¤Ú¤ó¤Ø + * ¿·µ¬¥á¥â + * ¤¤¤Þ³«¤¤¤Æ¤ë¥Õ¥¡¥¤¥ë¤Ë¿·µ¬¥á¥â¤òÄɲÃ: M-x howm-create-here + (()) + * ¿·µ¬¥á¥â¤Î¥Õ¥¡¥¤¥ë̾¤ò¼êÆ°¤Ç¤Ä¤±¤ë: M-x howm-create-interactively + (()) + * ¤³¤ó¤Ê´¶¤¸¤Ç¤·¤ç¤¦¤«? > 367 ¤µ¤ó + * M-x howm-narrow-to-memo, M-x howm-toggle-narrow + (()) + * ¤Ä¤¤¤Ç¤Ë, M-x howm-toggle-narrow ¤Ç, ±£¤¹¡¦¸«¤»¤ë¤ò¥È¥°¥ë + * ¥á¥â¤ò³«¤¤¤¿¤È¤­¼«Æ°Åª¤Ë narrow ¤Ë + (()) + (()) + (add-hook 'howm-view-open-hook 'howm-auto-narrow) + (add-hook 'howm-create-hook 'howm-auto-narrow) ;; ÄɲÃ[2005-01-07] + * ¥ê¥Þ¥¤¥ó¥À¤Î¡Öcancel¡×¤ò°ã¤¦¸ÀÍդ˥«¥¹¥¿¥Þ¥¤¥º + (thx > NARA Shinsuke ¤µ¤ó) + (setq howm-reminder-cancel-string "give up") + * 1.2.1 ¤«¤é + * M-x howm-history ¤Ç¸¡º÷ÍúÎò. ³ÆÍúÎò¤«¤é RET ¤ÇÈô¤Ù¤ë. ¢¥ + * (()) + ¤ä + (()) + ¤Ë¿¨È¯¤µ¤ì¤Æ¡Ä + * µ­Ï¿¤Ï, ¡Ö¸ÇÄêʸ»úÎ󸡺÷¡×¡Ö¹Ê¤ê¹þ¤ß¸¡º÷¡×¡Ö¥ê¥ó¥¯¡×¤Î¤ß¤Ë¤·¤Æ¤ß¤¿ + (()) + * Îã¤Ë¤è¤Ã¤Æ¡Ö¥á¥Ë¥å¡¼¤Ëɽ¼¨¡×¤â¤·¤¿¤¤¤±¤É, + ¡Ö¥á¥Ë¥å¡¼¤ò¥­¥ã¥Ã¥·¥å¡×¤È¤Î·ó¤Í¹ç¤¤¤¬. + * 1.2.2 ¤«¤é¤ÏºÇÂçµ­Ï¿¿ô¤òÀßÄê²Ä + * 1.3.0 ¤«¤é¤Ï½ÅÊ£¤ò½üµî + * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­, Á°¡¦¸å¡¦ºÇ½é¡¦ºÇ¸å¤Î¥á¥â¤Ø°ÜÆ° + (narrowing ¤â¹Íθ) + (()) + * M-x howm-previous-memo + * M-x howm-next-memo + * M-x howm-first-memo + * M-x howm-last-memo + * ¡û¡û¤Î¤È¤­¤À¤±¼«Æ° narrow. + ¤¿¤À¤·, ¡Ö>>> foo.howm¡×¤Ç foo.howm ¤ËÈô¤ó¤À¤È¤­¤Ï narrow ¤Ë¤·¤Ê¤¤. + (()) + ;; ¢­¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤ËÉÔËþ¤¬¤Ê¤±¤ì¤ÐÀßÄêÉÔÍ× + (setq howm-auto-narrow + ;; ¢­¤Ë½ñ¤¤¤¿¥³¥Þ¥ó¥É¤Ç¤À¤± narrow + '(howm-list-all howm-list-recent + howm-list-grep howm-list-grep-fixed howm-list-migemo + howm-list-related howm-list-around + howm-keyword-search)) ;; ¤³¤ì¤Ï come-from ¥ê¥ó¥¯¡¦goto ¥ê¥ó¥¯ + * C-c , T (howm-insert-dtime) ¢ª [2004-09-01 23:26] ¤È¤«µ­Æþ + (()) + (()) + (()) + * 1.2.2 ¤«¤é + * ¼«Æ°¿ìÊâ ¢¥ + * ¥á¥Ë¥å¡¼¤Ë¡Ö%here%(howm-menu-search "¤Û¤²")¡×¤È½ñ¤±¤Ð, + ¡Ö¤Û¤²¡×¤Î¸¡º÷·ë²Ì¤òËä¤á¹þ¤ß ¢¥ + (thx > Konstantin Levinski (kostya@pmail.ntu.edu.sg)) + (()) + * ¿·µ¬¥á¥â¤Þ¤ï¤ê + * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­, ¿·¤·¤¤¥á¥â¤ÏÀèƬ¤ËÄɲäȤ¹¤ëÀßÄê ¢¥ + (()) + (setq howm-prepend t) + * ¡Ö¤Û¤²¡×¤ò¸¡º÷¤·¤Æ°ìÍ÷¤·¤¿¾õÂÖ¤«¤é¿·µ¬¥á¥â¤òºî¤ë¤È, ¥¿¥¤¥È¥ë¤ò¡Ö¤Û¤²¡×¤Ë + (()) + (setq howm-title-from-search t) + * ¥Æ¥­¥¹¥È¤òÁªÂò¤·¤Æ¤«¤é¡Ö¿·µ¬¥á¥â¡× ¢ª ¤½¤Î¥Æ¥­¥¹¥È¤ò¼«Æ°ÁÞÆþ + (()) + ;; transient-mark-mode ¤Ç¤Ê¤¤¤È, ¤³¤ÎÀßÄê¤Ï̵»ë¤µ¤ì¤ë + (setq howm-content-from-region t) + * howm-create-here ¤Ç, ̵ͭ¤ò¸À¤ï¤µ¤º¡Ö¸½¥«¡¼¥½¥ë¹Ô¤Ë¡×¿·µ¬¥á¥âºîÀ® + (()) + (setq howm-create-here-just t) + * °ìÍ÷¤«¤é¤Î¥½¡¼¥È´ð½à¤Ë numerical-name ¤òÄɲà + * ³«È¯ÍÑ + * C-u M-x howm-bug-report ¤Ç´ØÏ¢ÊÑ¿ô¤Î°ìÍ÷ + * M-x howm-elp ¤Ç, ¥×¥í¥Õ¥¡¥¤¥é elp ¤Î½àÈ÷ + * ¤½¤Î¾¤Î²þÎÉ + * M-x customize ¤ËÂбþ ([Applications] ¢ª [Howm]) + (()) + (()) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ç, Ʊ¤¸¥Õ¥¡¥¤¥ë̾¤ò¤¯¤êÊÖ¤·É½¼¨¤·¤Ê¤¤ + (()) + * ¤Ä¤¤¤Ç¤Ë¿§¤â¤Ä¤±¤Æ¤ß¤¿. ¤É¤Ê¤¿¤«¤â¤Ã¤È¤Þ¤·¤ÊÇÛ¿§¤ò¤¯¤À¤µ¤¤. + (M-x customize-group RET howm-faces RET ¤·¤Æ, + howm-view-name-face ¤È howm-view-empty-face) + * (»²¹Í) ´ØÏ¢¤¹¤ë´û¸µ¡Ç½ + * TAB¡¦ALT-TAB ¢ª ¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø + * u ¢ª °ì¤Ä¤Î¥á¥â¤Ï°ì¹Ô¤À¤±¤Ë + * @ ¢ª Ï¢·ëɽ¼¨¤¹¤ì¤ÐƱ¤¸¥á¥â¤Ï°ì¤Ä¤Ë¤Þ¤È¤Þ¤ë + * °ìÍ÷¤Ç T ¢ª ¥¿¥¤¥È¥ëɽ¼¨¤ò¡Ö¥È¥°¥ë¡× + * 1.2.1 ¤Î±£¤·µ¡Ç½¤«¤é²þÎÉ + (()) + * ¥á¥Ë¥å¡¼Æâ¤Î°ìÍ÷¤Ç¤Ï, ¹ÔƬ¤Ç¤Ê¤¯¤Æ¤â RET ¤Ç¥¸¥ã¥ó¥× + * ¥ê¥Þ¥¤¥ó¥Àľá¤­¤Ç¡ÖÎ×»þ¤Ë³«¤¤¤¿¥Ð¥Ã¥Õ¥¡¡×¤ò¼«Æ°¤ÇÊĤ¸¤ë + (()) + ;; ᤭Àè¤ò¼«Æ°¤ÇÊĤ¸¤ë. undo ¤Ç¤­¤Ê¤¯¤Ê¤ë¤«¤é¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó. + (setq howm-action-lock-forward-kill-buffer t) + * howm-menu-lang ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï locale ¤ò¸«¤Æ·è¤á¤ë + * ext/howm2 ¤Ç¡Öcome-from ¥­¡¼¥ï¡¼¥É¤Î alias¡×¤ò¥µ¥Ý¡¼¥È + * ¤¢¤¤¤«¤ï¤é¤º¤ä¤Ã¤Ä¤±»Å»ö. + ¡Ä¤È¤¤¤¦¤«, ¸µ¤¬¤ä¤Ã¤Ä¤±»Å»ö¤¹¤®¤Æ, ¤â¤¦²òÆɤǤ­¤º. + * ÆâÉô¼ÂÁõ + * cl ¥Ñ¥Ã¥±¡¼¥¸¤«¤é¤Î´Ø¿ô¤ò howm-cl.el ¤ËʬΥ. + ¤¤¤Ä¤«µ¤¹ç¤¬¤Ï¤¤¤ì¤ÐÄÉÊü¤·¤è¤¦¡Ä + * make »þ¤Î·Ù¹ð¡Ö¡Ä not known to be defined¡×¤òÍÞÀ© + (()) + * riffle.el ¤Î»ÅÍͤòÊѹ¹(gfunc.el ¤ò»È¤¦). ¥æ¡¼¥¶¡¼¤Ë¤Ï±Æ¶Á¤Ê¤¤¤Ä¤â¤ê. + (()) + ¤â¤À¤¤¤¸¤ç¤¦¤Ö¤È»×¤¦¤ó¤À¤±¤É¡Ä + * ¥Ð¥°½¤Àµ + * Çò¹õµ¡¤Ç¥¨¥é¡¼ + (()) + * ¥«¥é¡¼¥Ç¥£¥¹¥×¥ì¥¤¤Ç¤Ê¤¤¤È¤­¤Ï, ²¼Àþ¤Î¤«¤ï¤ê¤Ëȿžɽ¼¨¤·¤Æ, + ¤½¤ì°Ê³°¤Î¾þ¤ê¤Ï¤Ê¤· + * %reminder ¤Î¶èÀÚ¤êÀþ¤¬¤º¤ì¤ë + (()) + * °ìÍ÷¤«¤é T ¤Ç¥¿¥¤¥È¥ëɽ¼¨¤·¤¿¤È¤­, ̵¥¿¥¤¥È¥ëʬ¤¬Â¿½Åɽ¼¨¤µ¤ì¤Æ¤¤¤¿ + * make test ¤·¤Æ C-c , s top [RET] T ¤Çȯ¾É + * win ¤Ç¡Ö¡Ä\.foo\¡Ä¡×¤Ê¤É¤ò¸¡º÷ÂоݤȤ·¤Ê¤¤¤è¤¦¤Ë + (()) + * howm-message-time ¤ò¥»¥Ã¥È¤·¤Æ¤â¡ÖNo match¡×¥á¥Ã¥»¡¼¥¸¤ò±£¤µ¤Ê¤¤¤è¤¦¤Ë + (()) + * ¥á¥Ë¥å¡¼¤Î¥ê¥Þ¥¤¥ó¥ÀÆâ¤Ç come-from ¥­¡¼¥ï¡¼¥É¤Ë + ²¼Àþ¤¬¤Ä¤«¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿. + (()) + +== 1.2.x + +* [2005-06-10] v1.2.4 + * bug fix + * howm-search-path Æâ¤ÎͽÄꡦtodo ¤¬¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿ + (()) + * ¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤ëͽÄê¤ÎÈϰϤ¬°ìÆüû¤«¤«¤Ã¤¿ + * xemacs ¤Ç, ¥Õ¥¡¥¤¥ë¤¬¾¯¤Ê¤¤¤È¥á¥Ë¥å¡¼¤Î %recent ¤¬¥¨¥é¡¼¤Ë + (()) + * ¥á¥Ë¥å¡¼¾å¤Ç C-c , r ¤·¤¿¤È¤­¤Ï¡Ö¥á¥Ë¥å¡¼¹¹¿·¡× + (()) + * howm-menu-list-face ¤Î¥Ç¥Õ¥©¥ë¥È¤ò¶õ¤Ë + (()) + * (require 'howm-mode) ¤·¤¿¤é cl ̤¥í¡¼¥É¤Ç¥¨¥é¡¼ + (()) + * howm-1.2 ¤«¤é¤Ï (require 'howm) ¤¬Àµ¼°. + ¡Öhowm-mode¡×¤ò require ¤ä autoload ¤·¤Æ¤¤¤¿¤é, + ¡Öhowm¡×¤Ëľ¤·¤Æ¤¯¤À¤µ¤¤. + * (()) + ¤Ç¥¨¥é¡¼ (´Ø¿ô howm-view-sort-items ¤¬¤Ê¤¤) + (()) + > (TxT) ¤µ¤ó + * ¥ê¥Þ¥¤¥ó¥Àľá¤­¤Ç¥á¥Ë¥å¡¼¤¬Êø¤ì¤ë + (()) + * ¤³¤ó¤ÊÀßÄê¤Çȯ¾É + (setq howm-menu-expiry-hours 2) + (setq howm-action-lock-forward-save-buffer t) + * POBox ¤Î RET (ÊÑ´¹³ÎÄê)¤òÃ¥¤Ã¤Æ¤·¤Þ¤¦ + * ¼Â¤Ï POBox ¤Ë¸Â¤é¤ºÉÔËÜ°Õ¤ÊÆ°ºî¤ò¤·¤Æ¤¤¤¿ + (()) + * howm-message-time ¤¬¿¿¤Î¤È¤­¤Î½êÍ×»þ´Öɽ¼¨¤Ï 1 ÉÃ̤Ëþ¤â·×¬ + (()) + * [2005-03-09] ¤Ë¥³¥á¥ó¥È¥¢¥¦¥È¤µ¤ì¤Æ¤¤¤¿(Íýͳ¼ºÇ°)¤Î¤òÌᤷ¤¿ + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ howm-1.2.4rc7 ¤È¤Î°ã¤¤¤Ï¡Ä + * ext/howmkara, ext/hsplit.rb, doc/README.html ¤òÇÛÉÛ¥Õ¥¡¥¤¥ë¤ËÄɲà + +* [2005-05-07] v1.2.3 + * bug fix + * C-c , s RET ¤Î¤è¤¦¤Ë¶õʸ»úÎó¤ò¸¡º÷¤·¤¿¤È¤­¤Ï, Á´¥á¥â°ìÍ÷ + (()) + * make ¤Ç¤Ê¤¯¼êÆ° byte-compile ¤·¤¿¤é(?), %reminder ¤Ç¥¨¥é¡¼ + (()) + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ howm-1.2.3rc1 [2005-05-06] ¤È¤Û¤È¤ó¤ÉƱ¤¸¤Ç¤¹ + +* [2005-05-02] v1.2.2 + * Note + * ɽÌ̾å¤Û¤ÜÊѲ½¤Ê¤·. ÆâÉô¤Ë¼ê¤ò¤¤¤ì¤Æ³ÈÄ¥À­¤ò¹â¤á¤¿(¥Ð¥Ã¥¯¥¨¥ó¥ÉÀÚ¤êÎ¥¤·). + * ¸å½Ò¤Î±£¤·µ¡Ç½¤Ï, ¤ä¤Ã¤Ñ¤ê¤Þ¤À±£¤· + * µÍ¤á¤¬´Å¤¯¤Æ¤â»È¤Ã¤Æ¤¯¤À¤µ¤ë¤Ê¤é, ¤³¤Î¤Ø¤ó¤¬¤ª¤¹¤¹¤á + * come-from ¥­¡¼¥ï¡¼¥É¤Î alias + * ¥á¥Ë¥å¡¼¤Ë¡Ö%reminder¡×¡Ö%recent¡×¡Ö%random¡× + ¡Ö%here%(howm-menu-search "¤Û¤²")¡× + * M-x howm-list-buffers, M-x howm-list-mark-ring + * M-x howm-random-walk + * µ¤¤Ë¤Ê¤ë»ØŦ¤â¤¢¤ë¤±¤É, ¤É¤¦¤â¤Ï¤Ã¤­¤ê¤»¤º, ¸«ÀÚ¤ê. + ºÆ¸½¤Ç¤­¤¿Êý¤Ï¤ªÃΤ餻¤¯¤À¤µ¤¤. + (()) + * ÅÓÃ椫¤é ChangeLog ¤ò¤Ä¤±¤Ï¤¸¤á¤¿¤Î¤Ç, ºÙ¤«¤¤Ä¾¤·¤Ï¤½¤Á¤é¤â»²¾È + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ howm-1.2.2rc6 [2005-04-29]¤ÈƱ¤¸¤â¤Î¤Ç¤¹ + * »ÅÍÍÊѹ¹ (¤¿¤¤¤¬¤¤±Æ¶Á¤Ê¤µ¤½¤¦) + * ÀßÄê howm-menu-top ¤È howm-menu-file ¤ÎÍ¥Àè½ç¤òµÕ¤Ë + (()) + * µì: howm-menu-top ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤Ê¤é, howm-menu-file ¤Ï̵»ë + * ¿·: howm-menu-file ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤Ê¤é, howm-menu-top ¤Ï̵»ë + * ¤Ê¤ª, ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï, + howm-menu-top ¤¬»ØÄêºÑ¤ß¤Ç howm-menu-file ¤¬Ìµ»ØÄê + * ¥È¥Ã¥×¥á¥Ë¥å¡¼¡Ö<<< %menu%¡×¤òõ¤¹ºÝ¤Ï howm-search-path ¤ò̵»ë. + howm-directory ¤À¤±¸¡º÷. + * ²þÎÉ + * egrep, fgrep ¤¬¤Ê¤¤¤±¤É GNU grep ¤Ï¤¢¤ë, ¤È¤¤¤¦´Ä¶­(¥ê¥Ê¥¶¥¦?)¤ËÂбþ + (()) + (()) + * contents ¤Ç¤Î¹Ê¤ê¹þ¤ß¤â C-u ¤ËÂбþ (¥Þ¥Ã¥Á¤·¤¿¥á¥â¤òÇÓ½ü) + ¢ª ((<±þÍÑÎã|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder>)) + (()) + * todo ¥ê¥¹¥È¤ä¥á¥Ë¥å¡¼¤Î %reminder ¤Ç¤â, ½ÜÅÙ¤¬Æ±¤¸¤Ê¤éʸ»úÎó½ç¥½¡¼¥È + (()) + * ¤³¤Þ¤´¤Þ + * °ìÍ÷¤«¤é¡ÖT¡×¤Ç¥¿¥¤¥È¥ëɽ¼¨¤·¤¿¤È¤­, ̵¥¿¥¤¥È¥ëʬ¤ÏºÇ¸å¤Ë¤Þ¤ï¤¹ + * ²¼Àþ°Ê³°¤Ç RET ᤤ¤¿¤È¤­¤Î½èÍý¤ò¼ã´³ÃúÇ«¤Ë + * ext/howmkara ¤Ç, ¼«¿È¤Ø¤Î¥ê¥ó¥¯¤òÍÞÀ©. + ¤Ä¤¤¤Ç¤Ë Home ¤Ø¤Î¥ê¥ó¥¯¤ò¥Õ¥Ã¥¿¤ËÄɲÃ. + * ext/hcal.rb ¤Î [2004-12-25]@3 µ­Ë¡Âбþ + * ±Ñ¸ì¥á¥Ë¥å¡¼¤ò½¼¼Â. ±Ñʸ index.html ¤Ë¹â®²½¥ª¥×¥·¥ç¥ó¤ÎÀâÌÀ. + * ɽ¼¨ÍѥХåե¡¤Ë¤Ï (buffer-disable-undo) + * ³«È¯¼Ô¸þ¤± + * ¥Ð¥Ã¥¯¥¨¥ó¥É¤ÎÀÚ¤êÎ¥¤·¤ËÃå¼ê(howm-backend.el) + * ¤ª¤«¤²¤Ç, Æüì¥Õ¥©¥ë¥À¤äÆüì°ìÍ÷¤¬²Äǽ¤Ë¤Ê¤Ã¤¿ + * ÉÔ´°Á´¤À¤±¤É, »È¤¤¤Ê¤¬¤é¤³¤±¤¿½ê¤òľ¤·¤Æ¤¤¤¯¤Ã¤Æ¤¤¤¦Å¥Æì¤Ç + * gfunc.el (°Âľ generic function) + * howm-view-call-process ¢ª howm-call-process Åù + * cheat-font-lock.el ¤òÂçÁݽü + * win ÍѤË, ¡Ömake test¡×ÁêÅö¤Î test.bat + * make test ¤Ï --no-site-file ¤Ë + * xemacs ¤À¤È -no-site-file ¤ß¤¿¤¤¤À¤±¤É, ÊüÃÖ + * howm-configuration-for-major-mode ¤ÎÎã(howm-misc.el ¤Î¥³¥á¥ó¥È)¤òÈù½¤Àµ + (defalias ÍÑ) + * bug fix + * ¸¡º÷¤¬¥á¥â¤ÎºÇ½ª¹Ô¤Ë¥Þ¥Ã¥Á¤·¤¿¤È¤­, Ï¢·ëɽ¼¨¤ÇÆó½Åɽ¼¨¤Ë¤Ê¤Ã¤Æ¤¤¤¿ + * howm-view-use-grep ¤¬ non-nil ¤Î¤È¤­¥¨¥é¡¼ + (howm-view-grep-file-stdin-option ¤¬ nil ¤À¤Èȯ¾É) + * howm-view-use-grep ¤¬ nil ¤Î¤È¤­, howm-excluded-file-regexp ¤Ë + ³ºÅö¤¹¤ë¥Õ¥¡¥¤¥ë¤Ï¥¹¥­¥ã¥ó¤·¤Ê¤¤¤è¤¦¤Ë + (()) + * ¡Ä¤È¤¤¤¦¤«, ¤â¤Ã¤Èº¬¸µ¤«¤éÂоݳ°¥Õ¥¡¥¤¥ë¤Î¥Á¥§¥Ã¥¯¤ò¸«Ä¾¤· + * ¤Ä¤¤¤Ç¤Ë, howm-excluded-file-regexp ¤Î¥Ç¥Õ¥©¥ë¥È¤Ë + (image-file-name-regexp) ÁêÅö¤òÄɲà + * 0123-45-6789 ¤ß¤¿¤ÊÅÅÏÃÈÖ¹æ¤Ë²¼Àþ¤ò°ú¤«¤Ê¤¤ (ÆüÉդȤߤʤ¹¾ò·ï¤ò¸·¤·¤¯) + (()) + * ¡Ö%¡×¤ò´Þ¤à message ¤Î¥¨¥é¡¼ + * emacs20 ¤Ç¥á¥Ë¥å¡¼¤ò±£¤·¥Ð¥Ã¥Õ¥¡¤Ë¤¹¤ë¤È¿§¤¬¤Ä¤«¤Ê¤¤ + (()) + * °ìÍ÷¡¦ÆâÍƥХåե¡¤«¤é¥á¥â¤ò³«¤¯ºÝ¤Î, narrowing ²ò½ü¤ÎȽÄê¥ß¥¹ + (()) + * come-from µ­Ë¡¤òÊѹ¹¤·¤¿¾ì¹ç¤Î¼êÅö¤Æ + (thx > taku ¤µ¤ó) + (()) + * ¥Æ¥¹¥ÈÈÇ¡¦¥ê¥ê¡¼¥¹Í½ÄêÈǤΠbug fix (¾¶) + * >>> ~/hoge.ps ¤ä file://~/hoge.ps ¤ò RET ¤Ç³«¤³¤¦¤È¤¹¤ë¤È¥¨¥é¡¼ + (thx > Konstantin Levinski (kostya@pmail.ntu.edu.sg)) + * ¤¿¤Ö¤ó [2005-01-07] ¤Ë¤ä¤é¤«¤·¤¿¥Ð¥° + * emacs21 ¤È 20 ¤È¤Ç, font-lock-fontify-{block|buffer} ¤ò»È¤¤¤ï¤± + (()) + (()) + * Íý²ò¤·¤Æ¤Ê¤¯¤Æ, ¥¤¥ó¥Á¥­¼êÅö¤Ç¤¹ + * °ì¥Õ¥¡¥¤¥ë¤¬Ä¹¤¯¤ÆÃ忧¤Ë»þ´Ö¤Î¤«¤«¤ëÊý¤Ï, + emacs20 ¤Ç¤Ê¤¯ emacs21 ¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹ + * howm-list-all-title ¤¬ non-nil ¤Î¤È¤­ C-c , a ¤Îʤӽ礬µÕ + (()) + * ¥á¥â¤ò³«¤¯¤Î¤¬°Û¾ï¤ËÃÙ¤¯ + (()) + ¡Ä ľ¤Ã¤¿¤Î¤«Ì¤³Îǧ + * Meadow 2.10 ¤Ç make ¤¬¥¨¥é¡¼¤Ë + (thx > taku ¤µ¤ó, ¡Ö¤â¡×¤µ¤ó) + (()) + (()) + * Meadow-1.15 ¤À¤È, image-file-name-regexps ¤¬Ì¤ÄêµÁ¤Ç¥¨¥é¡¼ + (thx > ƨÈò¤µ¤ó) + (()) + * howm-directory ¤¬ ~/.howm ¤Î¤è¤¦¤Ê¥É¥Ã¥È¥Ç¥£¥ì¥¯¥È¥ê¤À¤È²¿¤â¸¡º÷¤µ¤ì¤º + (thx > taku ¤µ¤ó) + (()) + +* [2004-12-11] v1.2.1 + * Note + * ɽ¸þ¤­¤Ï, ¤Û¤È¤ó¤É bug fix ¤Î¤ß + * ±£¤·µ¡Ç½¤Ï, ¤Þ¤À±£¤· + * ²þÎÉ¡¦Êѹ¹ + * ͽÄêɽ¤Ç, Ʊ¤¸Æü¤ÎͽÄê¤Ïµ­½ÒÆâÍƤǥ½¡¼¥È + * ¡Ö[2004-11-04]@ 07:30 ¤Û¤²¤Û¤²¡×¤ß¤¿¤¤¤Ë½ñ¤¤¤È¤±¤Ð, »þ¹ï½ç¤Ëʤ֤Ϥº + (()) + * ¡ÖƱ¤¸Æü¤Î¤Ï½ÅÍ×ÅÙ½ç¤Ç¥½¡¼¥È¡×¤Ã¤ÆÍ×˾¤â, ¤³¤ì»È¤Ã¤Æ¤Ê¤ó¤È¤«¤Ê¤ë? + (()) + (()) + (()) + * tag2plan ¤Ïľ¤·¤Æ¤¤¤Þ¤»¤ó. + * howm-template ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï howm-view-title-header ¤Ë±þ¤¸¤ë + (()) + * howm-view-contents-persistent ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤò nil ¤«¤é t ¤ËÊѹ¹ + * ÆâÍƥХåե¡ *howmC* ¤«¤é RET ¤Ç³«¤¤¤Æ¤â, *howmS* ¤ä *howmC* ¤Ï¾Ã¤¨¤Ê¤¤ + * ÊÑ¿ô howm-list-title ¤ÎÀßÄêÃͤˡÖhowm-keyword-search¡×¤òÄɲà + * Fix + * ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Ç, + ¡Öhowm-menu-schedule-days-before ÆüÁ°¤«¤é howm-menu-schedule-days Æü¸å¤Þ¤Ç¡× + ¤Î¤Ï¤º¤¬¡Ö¡ÄÆüÁ°¤«¤é¡ÄÆü´Ö¡×¤Ë¤Ê¤Ã¤Æ¤¤¤¿ + * ¥¿¥¤¥È¥ëɽ¼¨»þ¤Ë, ¥¿¥¤¥È¥ëÍó¡Ö= ¡×¤¬¤Ê¤¤¥á¥â¤òµß½Ð + * ¥¿¥¤¥È¥ëɽ¼¨¥ª¥ó¤ò¥Ç¥Õ¥©¥ë¥È¤Ë¤¹¤ë¤¿¤á¤ÎÉÛÀÐ + (()) + (()) + * ((<±ü»³¤µ¤óÈÇ auto-save-buffers|URL:http://homepage3.nifty.com/oatu/emacs/misc.html#asb>)) + ¤È¤ÎÊ»ÍѤÇ, + ¡Ö.howm-keys has changed since visited or saved. Save anyway?¡× + (()) + * [2004-09-01 23:26]@ ¤È¤«¤ÎÅöÆüʬ¤¬¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿ + (()) + * ɽ¼¨¤µ¤ì¤ë¤Ã¤Æ¤À¤±. ¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó. + ¤³¤Î½ñ¼°¤òËܵ¤¤Ç¥µ¥Ý¡¼¥È¤¹¤ë¤«Ì¤Äê¤Ê¤Î¤Ç. + * meadow ¤Ç, [2004-08-08]! ¤Î¡Ö!¡×¤Ç RET ᤯¤È¥¨¥é¡¼ + (()) + * ºÆ¸½¤Ç¤­¤Ê¤«¤Ã¤¿¤±¤É, ²¿¤Ë¤»¤è¤³¤ì¤Çľ¤ë¤ó¤¸¤ã¤Ê¤¤¤«¤È + * ¥á¥â¤ò³«¤¤¤¿¤È¤­¤Ë narrow ¤À¤È, ±£¤ì¤Æ¤ëÉôʬ¤Î½é´ü²½¤Ì¤± + (()) + * ÆâÉôÀ°Íý + * howm-list-migemo ¤¬Ä¾ÀÜ howm-view-search ¤òᤫ¤Ê¤¤¤è¤¦ + * howm-set-mode-p ¤ò howm-set-mode ¤«¤éʬΥ + (()) + (()) + * ¥ê¥Þ¥¤¥ó¥À¤Î action-lock ¤òÀ°Íý¤·¤Æ¤¤¤¸¤ê¤ä¤¹¤¯. Æ°ºî¤ÏÊѲ½¤Ê¤¤¤Ï¤º. + (()) + * ÉûºîÍѤÇ, howm-reminder-regexp-XXX-pos ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤ¬¤Ò¤È¤Ä¤º¤ì¤¿ + * ¤½¤Î¾ + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤ÈÆâÍƥХåե¡¤ò¡Öo¡×¤Ç¹Ô¤­Íè + (()) + ¡Ä¤Ï, ½ñ¤¤¤Æ¤ß¤¿¤±¤É¾Ã¤·¤Þ¤·¤¿. @ or 0 ¤¬¤¢¤ì¤ÐÉÔÍפǤ¹¤è¤Í? + +* [2004-08-24] v1.2 + * Note + * ¥Ð¥°½¤Àµ (narrowing, CVS Àèü emacs ¤Ç¤ÎÃ忧) + * 1.1.1¡Á1.1.2 ¤Î±£¤·µ¡Ç½¤ò¸ø¼°²½ (todo ľá¤­, ÊÝα¡Ö~¡×) + * ¥Õ¥¡¥¤¥ë¹½À®¤Î°ìÉôÊѹ¹ (howm.el, riffle.el) ¢ª ((<¥¤¥ó¥¹¥È¡¼¥ë>)) + * ¤½¤Î¾¤³¤Þ¤´¤Þ²þÎÉ (file:// ¤Ç¤â³°Éô viewer) + * ±£¤·µ¡Ç½Äɲà (¥á¥Ë¥å¡¼¤ËºÇ¶á¡õ¥é¥ó¥À¥à°ìÍ÷) + * ¤Û¤ó¤È¤ÎÌÜ¶Ì¤Ï come-from ¤Î alias ¤Ê¤ó¤À¤±¤É, ¤Þ¤À¤·¤Ð¤é¤¯¤Ï±£¤·µ¡Ç½ + * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ howm-1.2rc6 [2004-08-16]¤ÈƱ¤¸¤â¤Î¤Ç¤¹ + * ±£¤·µ¡Ç½¤Î¸ø¼°²½ + * ÌÜ¶Ì + * todo ¤Î¿··¿: ÊÝα¡Ö[2004-01-09]~100 ¤Û¤²¡× + (()) + (()) + * ¥á¥Ë¥å¡¼¡¦Í½Äêɽ¡¦todo °ìÍ÷¤«¤é, -+!@~. ¾å¤Ç RET ¤òľÀÜᤱ¤ë + (()) + (()) + (()) + (()) + (()) + (()) + * ¾®²þ¤ + * °ìÍ÷ + * ɽ¼¨Àڤ꤫¤¨ (0,1,2,v ¥­¡¼) + (()) + * T ¤Ç¥¿¥¤¥È¥ëɽ¼¨, TAB¡¦M-TAB ¤Ç¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø + (()) + (()) + * ¥ê¥Þ¥¤¥ó¥À¤ÎÆüÉդˤè¤ë¥½¡¼¥È¡¦¹Ê¤ê¹þ¤ß + (()) + (()) + (()) + * ¤â¤¦¤Á¤ç¤Ã¤È¶ãÌ£¤·¤Æ°ìÈ̲½¤·¤¿¤¤µ¤¤â (ÀÖ»ú²Õ½ê¤Ç¥½¡¼¥È, ¤È¤«) + * ¹Ê¤ê¹þ¤ß´ð½à¤Ë Region, Around ¤òÄɲà + * ((<¥«¥¹¥¿¥Þ¥¤¥º>))»²¾È + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ø¤Î¿§¤Ä¤± + (()) + * ¡û¡û¤Î¤È¤­¤À¤±¥¿¥¤¥È¥ëɽ¼¨ + * howm-list-recent-title, howm-list-all-title ¤Ï¤½¤Î¤¦¤ÁÇѻߤÎͽÄê + * howm-list-title ¤Ë¤Ï´Ø¿ô¤â»ØÄê²Äǽ + (()) + * C-x 1 ¸å¤Ï¾¡¼ê¤Ë¥Õ¥ì¡¼¥à¤òʬ³ä¤·¤Ê¤¤ + (()) + (()) + * ¸¡º÷ + * foo ¤ò¸¡º÷¤·¤¿¤é [[foo]] ¤ò¾å°Ì¤Ë + (()) + * ¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤Þ¤·¤¿. ¤¤¤ä¤Ê¤é (setq howm-list-prefer-wiki nil) + * [[¡Ä]] ¤ò¥«¥¹¥¿¥Þ¥¤¥º¤·¤¿¤é, howm-wiki-format ¤âÍ×ÀßÄê + (setq howm-wiki-format "((¡ã%s¡ä))") ;; ((¡ã¡Ä¡ä)) ¤ËÊѹ¹¤·¤¿Îã + * howm ¤Ç foo ¤ò¸¡º÷¤·¤¿¸å¤Ï, C-s C-s ¤â foo ¤Î¸¡º÷¤Ë + (setq howm-view-update-search-ring t) + * ¸¡º÷¤Ë»È¤¦´Ø¿ô¤ò((<¥«¥¹¥¿¥Þ¥¤¥º>)) + (()) + * ¥á¥Ë¥å¡¼ + * [º£Æü] [ºòÆü] ¤ò³ÈÄ¥ + (()) + * °ì¥á¥â°ì¥Õ¥¡¥¤¥ë¤Î¤È¤­¤Ï, ¤½¤ÎÆüÉÕʸ»úÎó¤ò¸¡º÷. + °ìÆü°ì¥Õ¥¡¥¤¥ë¤Î¤È¤­¤Ï, ¤½¤ÎÆüÉդΥե¡¥¤¥ë¤ò³«¤¯. + * ¥Ç¥Õ¥©¥ë¥È¤Î¥á¥Ë¥å¡¼¤ËÄɲä·¤Þ¤·¤¿ + * ¤â¤Ã¤ÈÊØÍø¤½¤¦¤Ê + ((<Ê̲ò|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/39>)) + ¤¬¤¹¤Ç¤Ë :-) + * ¥­¡¼ÀßÄê¤Ë C-i ¤È M-C-i ¤òÄɲà + (()) + * action-lock ¤Î((<¥«¥¹¥¿¥Þ¥¤¥º>)) + * ¡Öfile://¡Ä¡×¤ä¡Öhttp://¡Ä¡× + (()) + * { } ¤ä {_} ¤òÊѹ¹¤·¤ä¤¹¤¯ + (()) + * {_} ¤Ï¥Æ¥ó¥×¥ì¡¼¥È½ñ¼°¤ÈϢư¤·¤¿Êý¤¬¤¤¤¤¤«¤È»×¤Ã¤Æ, ¾®ºÙ¹©¤·¤Æ¤Þ¤·¤¿ + * howm ¤Î load Á°¤Ë howm-dtime-format ¤À¤±ÀßÄꤹ¤ë¤È, + howm-template-date-format ¤â¤½¤ì¤Ë¤Ê¤ë + * {_} ¤Î½ñ¼°¤Ï howm ¦¤Ç¾å½ñ¤­¤¹¤ë¤«¤é, ¢­¤Ï̵¸ú + (setq action-lock-date-default '("{_}" "[%Y-%m-%d %H:%M]")) ;; ᤭Á°¸å + * howm-action-lock-done-date-format ¤Ê¤ó¤Æ + README ¤Ë½ñ¤¤¤Æ¤¿¤Î¤Ï¥¦¥½. ºî¤Ã¤Æ¤Þ¤»¤ó¤Ç¤·¤¿ ^^; + * ¥ê¥Þ¥¤¥ó¥À + * !+-~. ¤Î½ÜÅÙ¤Î((<¥«¥¹¥¿¥Þ¥¤¥º>)) + (()) + * ¤³¤Þ¤´¤Þ²þÎÉ + * file:// ¤Ç¤â²èÁüÅù¤Ï³°Éô viewer µ¯Æ° + (()) + * ÆüÉÕ·Á¼°¤Îľá¤­ (¥á¥Ë¥å¡¼¤ä todo °ìÍ÷¤«¤é) + * ¥á¥Ë¥å¡¼¤Î %schedule, %todo, %recent, %random ¤Î action-lock ¤òÅý°ì + (()) + * ¡Ö>¡×¤Ç RET ᤯¤È¡Ö|¡×°Ê¹ß¤ò¸¡º÷ + * ¥«¥¹¥¿¥Þ¥¤¥º + * ¿§¤ÎÊѹ¹ + (set-face-foreground 'howm-menu-list-face "cyan") + * ½ñ¼°¤ÎÊѹ¹: ÊÑ¿ô¤ò¤¤¤¸¤ë ¢ª + howm-menu-list-format, howm-menu-list-regexp, + howm-menu-list-regexp-key-pos, howm-menu-list-regexp-action-pos, + howm-menu-list-regexp-face-pos + * ·ã¤·¤¤Êѹ¹(ÆüÍˤÏÀÖ, ¤Ê¤É): ´Ø¿ô¤ò¤¤¤¸¤ë ¢ª + howm-menu-list-format, howm-menu-list-rules, + howm-menu-font-lock-rules + * ¡ÖÆüÉÕ¾å¤Ç RET¡×¡Ö¥ê¥Þ¥¤¥ó¥À¾å¤Ç RET¡×¤·¤¿¤È¤­¤ÎÆ°ºî¤ò¾®¸­¤·¤¯ + * °ìʸ»ú¥³¥Þ¥ó¥É ¢ª ¤¿¤À¤Á¤Ëȯư (¤½¤Î¸å¤Î RET ¤ÏÉÔÍ×) + * ¿ʸ»ú¥³¥Þ¥ó¥É ¢ª ³¤±¤Æ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤«¤éÆþÎÏ + * °ìÍ÷¤«¤é C-u f ¤·¤¿¤È¤­¤Ë¤Ï¡ÖReject¡×¤Èɽ¼¨ + * ͽÄêɽ¡¦todo °ìÍ÷¤ËÍËÆü¤òɽ¼¨ + (()) + * ʸ½ñ¤Î¹¹¿· + * ¥¤¥ó¥¹¥È¡¼¥ëË¡¤ÎÀâÌÀ¤Ï, make install ¤ÎÊý¤ò¥á¥¤¥ó¤Ë + * index-j.html ¤Ë²èÁü¤È UNIX USER µ­»ö¤Ø¤Î¥ê¥ó¥¯¤òÄɲà + * ¼ÂÁõ¡¦³«È¯ + * ·ü°Æ¤Î¥Õ¥¡¥¤¥ë̾Êѹ¹¤ò·è¹Ô + * howm-mode-mode.el ¢ª howm-mode.el + * howm-mode.el ¢ª howm.el + * ¾®ºÙ¹©¤Ç, ½¾Íè¤Î (require 'howm-mode) ¤Ç¤âÆ°¤¯¤è¤¦¤Ë¤Ï¤Ê¤Ã¤Æ¤ë + * ¤Ñ¤é¤Ñ¤é°ìÍ÷ riffle.el ¤ò, howm-view.el ¤«¤éʬΥ + * »ÅÍÍÊѹ¹[2004-07-20] + * riffle-controller ¤Î insert-item ¢ª contents-item + * ÆâÍƤò¼«Ê¬¤Ç½ñ¤­½Ð¤¹¤ó¤¸¤ã¤Ê¤¯, ÆâÍƤòʸ»úÎó¤ÇÊÖ¤¹ + * ¡Ösection¡×¤òÇÑ»ß + * howm-menu.el À°Íý + * ÆâÉô»ÅÍͤÎÊѹ¹ (howm-menu-display-rules ¤Þ¤ï¤ê) + * ÊÑ¿ô¡¦´Ø¿ô¤Îʤ٤«¤¨ + * howm-bug-report ²þÎÉ + * emacs ¥Ð¡¼¥¸¥ç¥óɽ¼¨¤ò¾Ü¤·¤¯ + * make ¤·¤Ê¤¯¤Æ¤â¥Ð¡¼¥¸¥ç¥ó¤À¤±¤Ïɽ¼¨ + * byte-compile, make, make test ¤Î̵ͭ¤âɽ¼¨ + * howm2 ¤«¤é [[¡û¡û]] ¤Î½èÍý¤òºï½ü + * Âбþ¤¹¤ë <<< ¡û¡û ¤¬¤¢¤ë¤Ï¤º¤Ê¤Î¤Ç, ¤½¤Ã¤Á¤Ë¤Þ¤«¤»¤ë + * hcal.rb, tag2plan ¤Î ruby ¥ª¥×¥·¥ç¥óµ­Ë¡¤Ê¤ª¤· + (()) + * Fix + * CVS Àèü emacs ¤Ç¿§¤¬¤Ä¤«¤Ê¤¤ + (()) + (()) + * ¥á¥â¤¬ narrow ¤µ¤ì¤Æ¤ë¤È, ¸¡º÷¤µ¤ì¤Ê¤¤¡¦±ÜÍ÷¤Ç¤­¤Ê¤¤¡¦³«¤¤¤Æ¤â¸«¤¨¤Ê¤¤ + (()) + (()) + * ¡Ö>>> ¥Õ¥¡¥¤¥ë̾¡×¤Î¤È¤­¤Ï¥¿¥¤¥È¥ëɽ¼¨¤ò off + (()) + * >>> ¤«¤é²èÁü¤ò³«¤¤¤¿¤¢¤È, ¸µ¤È°ã¤¦¥Ð¥Ã¥Õ¥¡¤¬É½¼¨¤µ¤ì¤¿¤ê¤·¤Æ¤¿ + * ¡Ö<<<¡×¾å¤Ç RET (´ØÏ¢¥­¡¼¥ï¡¼¥É°ìÍ÷)¤òÀµ¤·¤¯. ·ãÃÙ¤Ë ;_; + * emacs ¤È grep ¤ÎÀµµ¬É½¸½¤Î°ã¤¤¤¬¤Þ¤¿¤â¥Í¥Ã¥¯ + * ¤Á¤Ê¤ß¤Ë»ÅÍͤÏ, + ¡Ö¤½¤Î¥­¡¼¥ï¡¼¥É¤Ë´Þ¤Þ¤ì¤ë¥­¡¼¥ï¡¼¥É¤ò´Þ¤à¥­¡¼¥ï¡¼¥É¤Î°ìÍ÷¡× + * ¸ºß¤·¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤ò howm-directory ¤Ë»ØÄꤹ¤ë¤È, + ½é²ó¤Î C-c , , ¤Ç¥¨¥é¡¼ (make install ¤·¤¿¾ì¹ç) + * howm-from-change-log ¤Ç¥¿¥¤¥È¥ë¤¬¥³¥Ô¡¼¤µ¤ì¤Ê¤¯¤Ê¤Ã¤Æ¤¿ + (thx > 'UCONN¤Î¥Ý¥¹¥É¥¯'¤µ¤ó) + * howm-view-open-hook ¤¬ÆóÅٸƤФì¤Æ¤¿ + * ÀßÄê¤Ë¤è¤Ã¤Æ, Á´¥á¥â°ìÍ÷¤Ç¡Ö¥¿¥¤¥È¥ëÃê½Ð¡×¤¬Æó²ó¸Æ¤Ð¤ì¤Æ¤¿¤«¤â + * README ÄûÀµ (howm-title-header ¢ª howm-view-title-header) + * Meadow ÍѤΡ֥ɥ饤¥Ö̾¤ÎÂçʸ»ú¾®Ê¸»ú¡×Âкö¤ò + Èù½¤Àµ(howm-normalize-file-name). µóÆ°¤ÏÊѲ½¤Ê¤¤¤Ï¤º. + (()) + * ¥Æ¥¹¥ÈÈǤΥХ°(¾¶) + * ¡Ö¥á¥Ë¥å¡¼¤Ë %recent¡×¤ÇÂоݳ°¥Õ¥¡¥¤¥ë¤Î¥Á¥§¥Ã¥¯¤ò˺¤ì¤Æ¤¿ + (()) + (()) + (()) + * ((<¥¤¥ó¥¹¥È¡¼¥ë>))¤Î¡Ö¤Ï¤¸¤á¤Æ C-c , , ¤·¤¿»þ¤ËÆɤ߹þ¤à¡×¤ÎÀßÄêÈ´¤± + * ¥Æ¥¹¥ÈÈǤΥС¼¥¸¥ç¥óɽ¼¨¤¬, ¥æ¡¼¥¶¤¬ ./configure ¤·¤¿Æü¤Ë¤Ê¤Ã¤Æ¤¿. + * emacs -nw ¤Ê¤È¤­, [2004-08-08]! ¤Î¡Ö!¡×¤Ç RET ᤯¤È¥¨¥é¡¼ + (()) + * ³Æ¥Õ¥¡¥¤¥ë¸ÄÊÌ¤Ë byte-compile ¤·¤¿¤È¤­¤ÎÉÔ¶ñ¹ç + (()) + * ¥Þ¥¯¥í¤¬¥Þ¥¯¥í°·¤¤¤µ¤ì¤Æ¤Ê¤«¤Ã¤¿ + ¢ª ¥Õ¥¡¥¤¥ë¤Þ¤¿¤¤¤Ç»È¤¦¥Þ¥¯¥í¤Ï howm-common.el ¤ËÃÖ¤­, + ³Æ howm-*.el ¤¬ÌÀ¼¨Åª¤Ë require + +== 1.1.2.x + +* [2004-05-09] v1.1.2.1 + * fix: make test ¤¬¥¨¥é¡¼ + * ¥Ñ¥Ã¥±¡¼¥¸¥ó¥°¤Î¥ß¥¹¤Ç, ~/sample/ °Ê²¼¤Î¥Õ¥¡¥¤¥ë¤ËÈ´¤± + +* [2004-05-06] v1.1.2 + * Note + * ÃæÅÓȾü¤À¤±¤É, ¤»¤Ã¤«¤¯¤·¤Ð¤é¤¯Êѹ¹¤Ê¤¤¤«¤é¥ê¥ê¡¼¥¹¤·¤È¤³¤¦¤«¤È. + * 1.2 ¤Ï¤Þ¤ÀÀè. ¤Ç¤â 1.1.1.x ¤Ï¤â¤¦¥á¥ó¥Æ¤·¤¿¤¯¤Ê¤¤. ¤Ã¤Æ¤³¤È¤Ç¤Ä¤Ê¤®¤Ë. + * ¸ø¼°µ¡Ç½¤Ï 1.1.1.3 ¤«¤é¤¿¤¤¤·¤ÆÊѹ¹¤Ê¤·. + * 1.1.2rc1 ¤«¤éÁ´¤¯Êѹ¹¤Ê¤·. + * ±£¤·µ¡Ç½ + * alias »îºî, ¤½¤Î¾¾®²þ¤ + * Èù²þ¤ + * ¡Ö°ìÍ÷¤«¤é¤Î¹Ê¤ê¤³¤ß¸¡º÷¡×¤Î¥­¡¼Êѹ¹ (s ¢ª G) + * s ¤Ï C-c , s ¤Î¾Êά·Á¤È¤«¤Ö¤Ã¤Æ¤¿ + (()) + * ¡Ömake test¡×¤Ç¡ÖÁǤÎÀßÄê¤Ç¤Î¥Æ¥¹¥È¡× + * ¥á¥Ë¥å¡¼Ãæ¤Ç¤Î¡Ö%|¡×¤Ë¤è¤ëÉԲĻë¥È¥°¥ë¤ò¸ø¼°µ¡Ç½¤Ë + * howm-view-real-grep ¤Ï¡Ö¥Ñ¥¿¡¼¥ó¤Î¥ê¥¹¥È¡×¤â¼õ¤±¤Ä¤±¤ë + (setq howm-view-grep-file-stdin-option "-f -") + * ÆÃ¤Ë linux °Ê³°¤Ç grep »ÈÍѤÊÊý¤Ï, ¤³¤ÎÀßÄê¤ò¤·¤ÆÉÔÅԹ礬½Ð¤Ê¤¤¤«, + »î¤·¤Æ¤¤¤¿¤À¤±¤ë¤È½õ¤«¤ê¤Þ¤¹. + ¸«¤¿ÌܤÎÆ°ºî¤Ï²¿¤âÊѤï¤é¤Ê¤¤¤Ä¤â¤ê¤Ç¤¹¤¬¡Ä + * ¡Öcome-from ¥­¡¼¥ï¡¼¥É¤Î alias¡×¤Ë¸þ¤±¤¿ÉÛÀФǤ¹ + (()) + * fix + * ¡Ö<<< foo {_}¡×¤Î¡Ö<<<¡×¤Ç RET ᤤ¤Æ¤â no match + * grep »ÈÍÑ»þ¤Î¤ß? ({}¤¬Æüìʸ»ú) + * ¤ä¤Ã¤Ä¤±½¤Àµ. º¬Ëܽ¤Àµ¤Ï¡ÖÊ£¿ô¥Ñ¥¿¡¼¥ó grep¡×¤¬¤Ç¤­¤Æ¤«¤é. + * come-from ¥ê¥ó¥¯¡Öfoo¡×¾å¤Ç RET ¤·¤Æ¤â, + ¡Ö<<< foo bar¡×¤ÎÊý¤¬¾å¤Ëɽ¼¨¤µ¤ì¤¿¤ê + * come-from ½ñ¼°¤òÊѹ¹¤·¤Æ¡Ö¹ÔËö¤Þ¤Ç¡×¤¸¤ã¤Ê¤¯¤·¤¿¤È¤­¤Ï, + ÊÑ¿ô howm-keyword-regexp-format ¤âÀßÄꤷ¤Æ¤¯¤À¤µ¤¤ + * howm-keyword-case-fold-search ¤¬¿¿¤Ç¤â, + Àµµ¬É½¸½¤ò downcase ¤·¤Ê¤¤¤è¤¦½¤Àµ (\W ¤È¤«°ÕÌ£ÊѤï¤Ã¤Æ¤·¤Þ¤¦¤«¤é) + * M-x howm-mode ¤Ç howm ¤ò off ¤Ë¤·¤Æ¤«¤éÊݸ¤·¤è¤¦¤È¤¹¤ë¤È¥¨¥é¡¼ + * hcal.rb ¤ÇÊÝαµ­¹æ¤¬¸Å¤¤¤Þ¤Þ¤À¤Ã¤¿ (* ¢ª ~) + +== 1.1.1.x + +* [2004-04-29] v1.1.1.3 + * fix: C-c , d RET ¤Çº£Æü¤ÎÆüÉÕ¤òÆþÎϤ·¤¿¤È¤­, ¾¡¼ê¤Ë°ìÍ÷¤ØÈô¤ó¤Ç¤¿ + (howm-insert-date-future ¤¬ nil ¤Î¤È¤­) + * ¤Ä¤¤¤Ç¤Ë, howm-insert-date-future ¤òÀßÄꤷ¤Æ + ¤ª¤»¤Ã¤«¤¤¤¬È¯Æ°¤·¤¿¤È¤­¤Ï, ¥á¥Ã¥»¡¼¥¸¤ò½Ð¤¹¤è¤¦¤Ë¤·¤¿ + * v1.1.1.3rc1 [2004-04-14] ¤ÈÆâÍÆƱ¤¸ + +* [2004-04-01] v1.1.1.2 + * Note + * 1.1.1.1 ¤«¤é¤Î bug fix °ìÅÀ¤Î¤ß + * 1.1.1.2rc1 ¤«¤é¤ÎÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó + * fix: C-c , g foo ¤Ç Foo ¤¬¥Ò¥Ã¥È¤·¤Ê¤¤ (grep ÉÔ»ÈÍÑ»þ) + (()) + * ¥á¥Ë¥å¡¼¤ÎͽÄꡦtodo °ìÍ÷¤Î¡Ö>¡×¤Ç RET ¢ª no match + ¤È¤¤¤¦¥Ð¥°¤â½Ð¤Æ¤¤¤¿ÌÏÍÍ + (howm-keyword-case-fold-search ÀßÄê»þ) + (()) + (()) + thx > NARA Shinsuke ¤µ¤ó + +* [2004-03-16] v1.1.1.1 + * Note + * v1.1.1 ¤«¤é¤Î bug fix ÈǤǤ¹ + * ¡Ö±£¤·µ¡Ç½¡×¤â¾¯¡¹Äɲà + * Èù²þÎÉ + * migemo-server ¤òÉÔÍ×¤Ë + (()) + * grep »ÈÍѤʤé¤Þ¤ÀɬÍ× + (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + * howm-menu-mode-map ¤ò¤Õ¤Ä¤¦¤Ë¥­¡¼ÄêµÁ²Äǽ¤Ë (buffer local ¤¸¤ã¤Ê¤¯¤·¤¿) + (()) + * action-lock-set-rules ¤Ï¾¡¼ê¤Ë remove-duplicates + * fix + * (setq howm-list-title t) ¤·¤Æ¤â C-c , l ¤Ç¥¿¥¤¥È¥ë¤¬½Ð¤Ê¤¤ + (()) + * ÆüÉÕÆþÎÏ¤Ç 01230 ¤¬ 20001230 ¤¸¤ã¤Ê¤¯ 1230 ¤È²ò¼á¤µ¤ì¤Æ¤¿ + * hcal.rb ¤Ç¤â ~ ¤Ï»ØÄêÆü¤Þ¤ÇÀøÉú¤¹¤ë¤è¤¦ + * ÆâÍƥХåե¡¤Î C-t, M-C-t ¢ª C-i, M-C-i + * ¡Ö<<< [foo¡×¤Ç¡Ö[foo¡×¤ò᤯¤È¥¨¥é¡¼ (regexp-quote ¤·Ëº¤ì) + * [2004-02-23] ¤Î½¤Àµ¤Ï¤Þ¤Á¤¬¤Ã¤Æ¤¿¤Î¤ÇºÆ½¤Àµ + * emacs20, meadow1.x(?) ¤Ç http:// ¤Ë²¼Àþ¤¬¤Ä¤«¤Ê¤¤ + (³ÈÄ¥Àµµ¬É½¸½ "[htp]\\{3,5\\}") + (()) + * grep ÉÔ»ÈÍÑ»þ, S ¢ª foo ¤Ç¡ÖFoo¡×¤¬¤Ò¤Ã¤«¤«¤é¤Ê¤¤ + (()) + * README ¤Î½¤Àµ + * todo ɽ¼¨·ï¿ô¤Î¥«¥¹¥¿¥Þ¥¤¥ºË¡¤òÄɵ­ + (()) + * {_} ¤Î¥«¥¹¥¿¥Þ¥¤¥ºË¡¤ÎÀâÌÀ¤ò½¤Àµ + (()) + +* [2004-02-21] v1.1.1 + * Note + * ÂçÎ̤Τ³¤Þ¤´¤Þ²þÎÉ + * Ì̲ܶþ¤(ÊÝα, todo ľá¤­, ¥½¡¼¥¹¥³¡¼¥É±ÜÍ÷)¤Ï, + ¤Þ¤À¡Ö±£¤·µ¡Ç½¡×¤Ã¤Æ¤³¤È¤Ç + * v1.1.0.* ¤«¤é, ¤½¤Î¤Þ¤Þ°Ü¹Ô¤Ç¤­¤ë¤Ä¤â¤ê. ½ñ¼°Êѹ¹¤Ê¤É¤Ê¤·. + * v1.1.1rc3 ¤ÈÆâÍÆƱ¤¸ + * ¿·ÀßÄê (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * todo ¤ò RET °ìȯ¤ÇºÑ¤Ë (howm-action-lock-reminder-done-default) + (()) + * ÆâÍƥХåե¡¤Ë¿§¤Ä¤± (howm-view-contents-font-lock-keywords) + (()) + * ¤Û¤ó¤È¤Ï¥Õ¥¡¥¤¥ëËÁƬ¤È³ÈÄ¥»Ò¤«¤é¼«Æ°È½Äꤹ¤Ù¤­¤Ê¤ó¤À¤±¤É, ¤Ò¤È¤Þ¤º. + * °ìÍ÷¤Î¥½¡¼¥È´ð½à (howm-list-normalizer) + (()) + (()) + * ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Îɽ¼¨ÈÏ°Ï (howm-menu-schedule-days-before) + (()) + * ÆüÉդο·µ¬ÆþÎÏ»þ¤Ëǯ¤ä·î¤òά¤·¤¿¤é̤Íè¤È²ò¼á (howm-insert-date-future) + (()) + * howm-template ¤òÁªÂò²Äǽ¤Ë + (()) + (()) + * (setq howm-list-title t) ¤¹¤ì¤Ð, °ìÍ÷¤Ç¤Ï¾ï¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨ + (()) + * howm-list-recent-title, howm-list-all-title ¤Ï undocumented ¤Ë. + ¤½¤Î¤¦¤ÁÇѻߤΤĤâ¤ê. + * û½Ì¥Õ¥¡¥¤¥ë̾¤ÎÀßÄê¤ò howm-abbreviate-file-name ¤Ë°ìËܲ½. + ¤Ä¤¤¤Ç¤Ë howm-keyword-to-kill-ring ¤âû½Ì¥Õ¥¡¥¤¥ë̾¤Ë. + * ¥­¡¼¥ï¡¼¥É°ìÍ÷¤ÎÃÖ¤­¾ì½ê (howm-keyword-file) + * howm-create-file-hook ¤òÄɲà + * ChangeLog ¥á¥â¤È¤ÎÊ»ÍÑ (¢ªCL-HOWM.ja.rd) + (thx > 'UCONN¤Î¥Ý¥¹¥É¥¯'¤µ¤ó) + * ¿·¥³¥Þ¥ó¥É + * C-c , s ¤Ç¸ÇÄêʸ»úÎ󸡺÷ howm-list-grep-fixed (C-u C-c , g ¤ÈƱ¤¸) + (()) + * C-c , SPC ¤Ç howm ¤Ê¥Ð¥Ã¥Õ¥¡¤È howm ¤Ç¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤È¤òÀÚ¤êÂؤ¨. + howm ¤Ê¥Ð¥Ã¥Õ¥¡¤¬¤Ê¤±¤ì¤Ð¥á¥Ë¥å¡¼¤ò³«¤¯. + (()) + (()) + * °ìÍ÷ɽ¼¨¡¦ÆâÍÆɽ¼¨¤Ç¤Ï n, p ¤Ç¤â¥«¡¼¥½¥ë¾å²¼ + (()) + * ¡Öfile://¡Ä¡×¾å¤Ç C-u RET ¢ª find-file-other-window + (()) + * [º£Æü] [ºòÆü] ¤Þ¤ï¤ê (°ìÆü°ì¥Õ¥¡¥¤¥ë¤òÁÛÄê) + (()) + * howm-open-today ¤Ï, ¿·µ¬ºîÀ®»þ¤Ë¥Æ¥ó¥×¥ì¡¼¥ÈÁÞÆþ + * M-x howm-open-past ¤ÇºòÆü¤ò, + C-u 3 M-x howm-open-past ¤Ç 3 ÆüÁ°¤ò³«¤¯ + * Êѹ¹ + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¡¦ÆâÍƥХåե¡ + * °ìÁȤ·¤«ºî¤é¤Ê¤¤(ÉÔɾ¤Ê¤éÌᤷ¤Þ¤¹). ((<¥«¥¹¥¿¥Þ¥¤¥º>))¤â»²¾È. + * q ¤·¤¿¤é, ¥Õ¥ì¡¼¥àʬ³ä¤ò¶¯À©²ò½ü + (()) + * ¡Ö¸µ¤Î¾õÂÖ¤ËÉüµ¢¡×¤Ï give up ¤Ç¤¹. + ¤´¤á¤ó¤Ê¤µ¤¤. »ä¤ÎÏӤȵ¤¹ç¤Ç¤Ï, º¬Ëܲò·è¤ÏÆñ¤·¤½¤¦¡Ä + (()) + (()) + * sort-by-date ¤ò¡Ö¿·¤·¤¤¤â¤Î¤¬¾å¡×¤ËÊѹ¹ + * °ìÍ÷ɽ¼¨¤«¤é @ ¤ÇÏ¢·ëɽ¼¨¤ËÀڤ꤫¤¨¤¿¤é, window ¤Îʬ³ä¤ò²ò½ü + * Ï¢·ëɽ¼¨¤Ç, ³Æ¥á¥â¤ÎºÇ¸å¤Î¶õ¹Ô¤ò¾Ê¤¯ + * ¡Ö>>> ¥Õ¥¡¥¤¥ë̾¡×¤Ç RET¡ß2 ¤·¤¿¤é, window ʬ³ä¾õÂÖ¤òÉü¸µ + * ¥á¥Ë¥å¡¼ + * > ¤Ç RET ¢ª ³ºÅö¹Ô¤Øľ¥¸¥ã¥ó¥× + * ¡ÖºÑ¤ß¡×¤Ïɽ¼¨¤·¤Ê¤¤ + (()) + * ÀøÉúÃæ¤Î¥ê¥Þ¥¤¥ó¥À¤Ïɽ¼¨¤·¤Ê¤¤ (howm-menu-todo-priority) + (()) + * ¥á¥Ë¥å¡¼¤Î¥­¥ã¥Ã¥·¥å¤òÀßÄꤷ¤Ê¤¤¸Â¤ê, ¥á¥âÊݸ»þ¤Î¥á¥Ë¥å¡¼¹¹¿·¤Ï¥ª¥Õ + * schedule, todo Íó¤ËɽÂꡦ½ñ¼°ÀâÌÀ¤òÄɲà + (()) + (()) + * %sdays (ͽÄêɽ¤Îɽ¼¨Æü¿ô), %tnum (todo ¤Îɽ¼¨·ï¿ô)¤â + * howm2 + * ¥á¥â°ìÍ÷¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨ + (()) + * howm2 -r ¤Ç¥Õ¥¡¥¤¥ë°ìÍ÷¤òµÕ½ç¤Ë + (()) + * autoconf, automake ¤ËÃå¼ê + (()) + * navi2ch ¤«¤éÃÑÃΤ餺¤Ë¥³¥Ô¡¼. ¤è¤¯¤ï¤«¤é¤Ê¤¤¤Þ¤Þ¤¤¤¸¤ë. + * doc/releng.txt ¤è¤ê¥á¥â: tar.gz ¤òºî¤ë¤Ë¤Ï (³«È¯¼ÔÍÑ) + aclocal && autoconf && automake && make Makefiles && make dist elcdist + * »²¹Í: (()) + * ¥Ç¥Õ¥©¥ë¥È¤Î¥¤¥ó¥¹¥È¡¼¥ëÀ褬 /usr/share/emacs/site-lisp/howm + ¤Ë¤Ê¤ë¤è¤¦¤Ë + (()) + * make install ¤Ç doc, ext, en, ja ¤â¥¤¥ó¥¹¥È¡¼¥ë + * ¼«Ê¬ÍÑ¥á¥â + make maintainer-clean; aclocal && automake && autoconf && ./configure --prefix=/tmp/hoge --with-lispdir=/tmp/hoge/el && make && make install + * ½é²óµ¯Æ°»þ¤Ë howm-directory ¤ä¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤¬¤Ê¤±¤ì¤Ð¼«Æ°¤Çºî¤ë + (make install ¤·¤¿¤È¤­¤Î¤ß) + * ¤½¤Î¾ + * auto-save-buffers ¤¬¸Æ¤Ð¤ì¤¿¤é save »þ¤Î¼«Æ°½èÍý¤ò off ¤Ë + * ̤Êݸ¤ÎÊÔ½¸¤â, ¸¡º÷¤äÆâÍÆɽ¼¨¤ËÈ¿±Ç + (howm-view-use-grep ¤¬ nil ¤Î¤È¤­¤Ë¸Â¤ë) + (()) + * Wiki É÷¥ê¥ó¥¯ [[hoge]] ¤Ï hoge ¤Ë²¼Àþ (¡Ö<<< hoge¡×¤Î̵ͭ¤Ë¤«¤«¤ï¤é¤º) + (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + (()) + (()) + * ½¾Íè¤Ï¡Ö]]¡×¤À¤±¤Ë²¼Àþ. + ¡ÖºîÀ®ºÑ¤ß¤«¤É¤¦¤«¤ò²¼Àþ¤Î¤Ä¤­Êý¤Ç¶èÊ̤Ǥ­¤ë¡×¤Ã¤Æ¤¤¤¦ + ¤È¤ó¤Á¤À¤Ã¤¿¤ó¤À¤±¤É, ¤Ï¤Þ¤Ã¤¿Êý¤¬Ê£¿ô. + * ttp:// ¤ÎÎà¤â http:// ¤Ëľ¤·¤Æ¥Ö¥é¥¦¥¶¤Ø + (()) + (()) + * howm-toggle-search-other-dir ¤Ç, ͽÄêɽ¤ä todo ¥ê¥¹¥È¤Î¸¡º÷ÈϰϤâ³ÈÂç + (()) + * ((<¥¤¥ó¥¹¥È¡¼¥ë>))¤ÎÀâÌÀ¤Ë¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤òÄɲà + * howm-reminder-tomorrow-face ¤ÎÇطʤòÃ㿧¤«¤é¥Ô¥ó¥¯¤Ë + (()) + * ¥æ¡¼¥¶¡¼¤Ë¤Ï´Ø·¸¤Ê¤· + * ¥Õ¥¡¥¤¥ë¹½À®¤ÎÊѹ¹ (¢ª((<¼ÂÁõ¤Ë¤Ä¤¤¤Æ>))) + * howm-menu-action ¤Î°ú¿ô»ÅÍͤòÊѹ¹ + * copy-list ¢ª copy-sequence (cl ¥Ñ¥Ã¥±¡¼¥¸ ¢ª built-in) + * fix + * URL ¤ÎÃê½Ð¤ò¤Á¤ç¤Ã¤È¤À¤±¤Þ¤·¤Ë + (()) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¤à¤À¤Ê½ñ¤­¤Ê¤ª¤·¤òÍÞÀ© + * howm-list-normalize ¤«¤é¤à¤À¤Ë²¿ÅÙ¤â howm-view-summary ¤¬¸Æ¤Ð¤ì¤Æ¡Ä + * ¤¤¤Á¤Ð¤ó¤Ò¤É¤¤¤È¤³¤À¤±½¤Àµ. ¤Þ¤À¤à¤À¤Ï»Ä¤Ã¤Æ¤ë. + * meadow ¸þ¤±¤Ë, ¥É¥é¥¤¥Ö¥ì¥¿¡¼¤ÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë + (howm-normalize-file-name) + (()) + * ±Ñ¸ì¥á¥Ë¥å¡¼¤Î [String] ¤È [Regexp] ¤¬µÕ + * xemacs canna Âкö + (()) + * split-horizontally ¤¬ t ¤Ê¤é C-x 1 ¸å¤â²£ÊÂ¤Ù¤Ë + ((()) + > ¡³(¡­¡¼`)¥Î¤µ¤ó) + * howm-menu-{schedule|todo} ¤Î¥á¥Ã¥»¡¼¥¸, + howm-view-call-process ¤ÎÌá¤êÃÍ¥Á¥§¥Ã¥¯ + (()) + * grep ÉÔ»ÈÍÑ»þ¤Î migemo ¸¡º÷ (howm-list-migemo) + (thx > ¤ä¤Þ¤À¤¢¤­¤é¤µ¤ó akira@arika.org) + * meadow 1.15 ¤Ç¾¥Ð¥Ã¥Õ¥¡¤Î font-lock ¤¬Ãí¼á¡¦Ê¸»úÎó¤Î¤ß¤Ë + * font-lock-defaults ¤ÎÂç°èÃͤòÊѤ¨¤Æ¤·¤Þ¤Ã¤Æ¤¿ + * °ìÍ÷¤Ç ! (shell) ¤¬ xemacs ¤ä emacs20 ¤Ç¥¨¥é¡¼ + (replace-regexp-in-string ¤ä (buffer-size buf) ¤¬¤Ê¤¤) + (()) + * xemacs ´ØÏ¢: + thx > ((<³Þ¸¶¤µ¤ó|URL:http://www.nc.kyushu-u.ac.jp/~kasahara/diary/2004/01b.html>)) + ¡Ä¤³¤Ã¤½¤ê¸ÀµÚÊÖ¤· :p + * ¡Ö(setq font-lock-verbose nil) ¤Ç®¤¯¤Ê¤ë¤è¡× (¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>))) + * howm ¤Ê¥Ð¥Ã¥Õ¥¡¤Ç¤Ï¼«Æ°¤Ç¤³¤ì¤ò¡Ä¤È»î¤ß¤¿¤±¤É, ¤Ç¤­¤Æ¤Ê¤µ¤² + * xemacs ¤Ç¤Î byte-compile + * defvar ¤ò make-variable-buffer-local ¤è¤êÁ°¤Ë + * action-locl.el: + action-lock-rules, + action-lock-original-font-lock-keywords, + action-lock-original-return + * howm-view.el: + howm-view-name, + howm-view-item-list, + howm-view-summary-last-line, + howm-view-contents-end + * ¤Ä¤¤¤Ç¤ËËޥߥ¹¤â¿¿ôϪÄè + (reference to free variable / bound but not referenced) + * ¡Ö>>>¡×¤À¤±¤Î¹Ô¤«¤é¼¡¤Î¹Ô¤Ë¤«¤±¤Æ²¼Àþ¤¬°ú¤«¤ì¤Æ¤¿ + * howm-menu.el ¤ò iso-2022-7bit ¤Ë (for Meadow) + (()) + * .gz, .jpg, .gif, .png ¤â¸¡º÷Âоݤ«¤é½ü³° + (()) + * ºÇ½ª¹Ô¤Ë²þ¹Ô¤¬¤Ê¤¤¤È, ÆâÍÆɽ¼¨¤Ç¤½¤Î¹Ô¤¬½Ð¤Ê¤¤ + (()) + * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Ç (setq howm-list-title t) ¤Ê¤È¤­, + °ìÍ÷¤Ç¡ÖS ¢ª date¡×¤ò¤¯¤êÊÖ¤¹¤È¥½¡¼¥È½ç¤¬Æþ¤ì¤«¤ï¤ë + (thx > NAKANO Yasuhiro ¤µ¤ó ) + * °ìÉô´Ä¶­¤Ç, global-font-lock ¤¬¸ú¤«¤Ê¤¯¤Ê¤ë + (emacs-20.7.2 on Vine Linux 2.6, Meadow1.15 on WindowsXP Professional). + (thx > NAKANO Yasuhiro ¤µ¤ó ) + * °ìÍ÷ɽ¼¨¤Î¥Õ¥¡¥¤¥ë̾Íó¤Î¥Ç¥Õ¥©¥ë¥ÈÉý + (thx > Jun Kuriyama ¤µ¤ó ) + * Jargon ¤Î¥ê¥ó¥¯ÀÚ¤ì + (()) + * ¥³¡¼¥Éźºï + (()) + * skip-one-link ¢ª action-lock-skip-one-link + * *.el ¤ÎÀèƬ¡¦ËöÈø¤ËÄê·¿¥³¥á¥ó¥È + * (()) + ¤È¤ÎÊ»ÍѤǥ¨¥é¡¼ + (()) + * ¡Ö<<<¡×¤Ç RET ¤·¤¿¤È¤­¤Ë¤â howm-keyword-case-fold-search ¤òÈ¿±Ç + * (setq howm-list-title t) ¤¹¤ë¤È, °ìÍ÷¤ÈÆâÍƤξ岼¤¬µÕž + (()) + * ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð¤ò¤Û¤ÜÂ༣ + * howm-keyword-regexp-header-pos ¢ª howm-keyword-regexp-hilit-pos + * howm2 ¤Î¥Ç¥Õ¥©¥ë¥È¤Ç, ¥Õ¥¡¥¤¥ë #foo.bar ¤ä foo.bar~ ¤âÂоݳ°¤Ë + (()) + * ruby 1.8 ·Ï¤Ç howm2 ¤¬¥¨¥é¡¼ + (()) + (()) + * ÌÀÇطʤऱ¤ÎÇÛ¿§ + * ¥«¡¼¥½¥ë¤¬¥¿¥¤¥È¥ë¾å¤Ë¤¢¤ë¤È + C-c , K (howm-keyword-to-kill-ring) ¤Ë¼ºÇÔ + * CVS Àèü emacs ¤À¤È on-the-fly ¤Ç¿§¤¬¤Ä¤«¤Ê¤¤ + (()) + * °ìÍ÷¤Ç ! ¤Ë¤è¤ë shell command ¤Î½ÐÎϤ¬¤¹¤°¾Ã¤¨¤Æ¤·¤Þ¤¦ + * ¤Ä¤¤¤Ç¤Ë, ½ÐÎϤ¬¶õ¤Î¤È¤­¤Ï½ÐÎϥХåե¡¤ò½Ð¤µ¤Ê¤¤¤è¤¦¤Ë¤·¤¿ + * ¤Ä¤¤¤Ç¤Ë, ¤³¤ì¤âû½Ì¥Õ¥¡¥¤¥ë̾¤Ë + * Ï¢·ëɽ¼¨¤Ç TAB ¤òᤤ¤Æ¤«¤é RET ᤯¤È¥¨¥é¡¼ + * CVS Àèü emacs ¤Ç, °ìÍ÷¡¦ÆâÍƥХåե¡¤Ë¿§¤¬¤Ä¤«¤Ê¤¤ + (()) + * howm-search-other-dir ¤ÎÀâÌÀ¤òÄɲà + (()) + * ¥Æ¥¹¥ÈÈǤ«¤é¤ÎÊѹ¹ (¾¶) + * fix: (setq howm-insert-date-future t) ¤Î¾õÂÖ¤Ç, + [2004-01-23]¤Ë C-c , d ¤·¤Æ¡Ö215¡× ¢ª 2005 ǯ¤Ë + (howm-datestr-expand) + * ¥Æ¥¹¥ÈÈÇ 2003-12-27 ¡Á 2004-01-21 ¤Î¥Ð¥° + * ¥Æ¥¹¥ÈÈÇ 2005-01-23 ¤Ç½¤Àµ + * yc Âкö¤ò½ÀÆð¤Ë ¢« ·ë¶ÉÇÑ»ß + (()) + * eval-after-load ¤À¤È (load "~/elisp/yc.el") ¤¬¥Þ¥Ã¥Á¤·¤Ê¤¤¤Î¤Ç, + defadvice ¤ËÊѹ¹ + * ¤Û¤ó¤È¤Ï, ƱÍͤΤ³¤È¤ò egg, anthy ¤Ë¤â¤ä¤ë¤Ù¤­ + (patch Ê罸. howm-misc.el »²¾È) ¢« ¤ä¤Ã¤Ñ¤ä¤á[2004-01-18] + * ¥á¥Ë¥å¡¼¤Ç¤Ï [2004-01-10]! Åù¤Ë²¼Àþ¤ò¤Ä¤±¤Ê¤¤ ¢« ¡Öľá¤­¡×¤È¤·¤ÆÉü³è + (()) + * fix: ¥á¥Ë¥å¡¼¤Ë½ÜÅÙ¤òɽ¼¨¤·¤¿¤é > ¤«¤éÈô¤Ù¤Ê¤¯¤Ê¤Ã¤Æ¤¿ + (()) + * fix: anthy ¤È¤ÎÊ»ÍÑ ¢« ·ë¶ÉÇÑ»ß + (thx > Jun Kuriyama ¤µ¤ó ) + * fix: index-j.html ¤«¤é¤Î¥ê¥ó¥¯¤º¤ì + (()) + * fix: ¥É¥­¥å¥á¥ó¥È¤Î¥¤¥ó¥¹¥È¡¼¥ëÀè + /usr/local/share/doc/howm ¢ª /usr/local/share/howm/doc + * fix: README ¤Î¥ß¥¹. Á´¥á¥â°ìÍ÷¤Ï C-c, l ¤¸¤ã¤Ê¤¯ C-c , a + (()) + * fix: ¥í¡¼¥É¸å¤Ë howm-keyword-file ¤ò¥»¥Ã¥È¤·¤¿¾ì¹ç¤Ç¤â, + ½é²óµ¯Æ°»þ¤Ë¼«Æ°ºîÀ® + (()) + * fix: (()) + ¤Ç¡Ö³ÎÄê¡×¤Î RET ¥­¡¼¤ò howm ¤¬¿©¤¦ + (()) + (()) + * C-c , d ¢ª d ¤ÇÆü»þ¤òÁÞÆþ ¢« ÇÑ»ß + (()) + (()) + * ¤Ä¤¤¤Ç¤Ë prompt ¤ËÍËÆü + * ((<¥«¥¹¥¿¥Þ¥¤¥º>)) ¤Îµ­½Ò¥ß¥¹: howm-directory ¢ª howm-keyword-file + (()) + * configure.in ¤Ë Meadow.exe ¤òÄɲà + ((()) + > Meadow2»È¤¤¤µ¤ó) + * ÇÑ»ß + * canna, egg, yc, anthy ¤Î¸ÄÊÌÂкö + (()) + * ¤«¤ï¤ê¤Ë, action-lock-mode ¤ÎÍ¥ÀèÅÙ¤òºÇ¼å¤Ë. + * °ÊÁ°¤ÎÂкö¤ËÌ᤹¤Ë¤Ï, + (setq action-lock-bury-minor-mode-p nil) + (setq howm-ime-fix t) + * C-u C-c , c (¿·µ¬¥á¥â¤Ë¡Ö>>> ¸µ¥Õ¥¡¥¤¥ë¡×¤òÆþ¤ì¤Ê¤¤)¤È + howm-template-use-file + * howm-view-quit-to-nonhowm (°ìÍ÷¤Ç q ¢ª howm °Ê³°¤Î buffer ¤Ø) + * howm-template-file-abbrev, howm-view-header-abbrev + (howm-abbreviate-file-name ¤Ë°ìËܲ½) + +== 1.1.0.x + +* [2004-02-08] v1.1.0.4 + ¥Æ¥¹¥ÈÈǤ«¤é¤Î backport (thx > ³§ÍÍ ¡Ä¥Æ¥¹¥ÈÈÇ README »²¾È) + * ÀøÉúÃæ¤Î¹àÌܤϥá¥Ë¥å¡¼¤Î todo ¥ê¥¹¥È¤Ëɽ¼¨¤·¤Ê¤¤ + * C-c , s ¤Ç¸ÇÄêʸ»úÎ󸡺÷ howm-list-grep-fixed (C-u C-c , g ¤ÈƱ¤¸) + * canna, egg, yc, anthy ¤Î¸ÄÊÌÂкö¤òÇÑ»ß. ¤«¤ï¤ê¤ËÈ´ËÜÂкö. + * ¥á¥Ë¥å¡¼¤Î¥­¥ã¥Ã¥·¥å¤òÀßÄꤷ¤Ê¤¤¸Â¤ê, ¥á¥âÊݸ»þ¤Î¥á¥Ë¥å¡¼¹¹¿·¤Ï¥ª¥Õ + * auto-save-buffers ¤¬¸Æ¤Ð¤ì¤¿¤é save »þ¤Î¼«Æ°½èÍý¤ò off ¤Ë + * .jpg, .gif, .png ¤â¸¡º÷Âоݤ«¤é½ü³° + * ¡Öxemacs ¤Ç¤Ï, (setq font-lock-verbose nil) ¤Ç®¤¯¤Ê¤ë¤è¡× (¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>))) + * fix + * xemacs canna Âкö + (()) + * ±Ñ¸ì¥á¥Ë¥å¡¼¤Î [String] ¤È [Regexp] ¤¬µÕ + * howm-view-call-process ¤ÎÌá¤êÃÍ¥Á¥§¥Ã¥¯ + * meadow 1.15 ¤Ç¾¥Ð¥Ã¥Õ¥¡¤Î font-lock ¤¬Ãí¼á¡¦Ê¸»úÎó¤Î¤ß¤Ë + * °ìÍ÷¤Ç ! (shell) ¤¬ xemacs, emacs20 ¤Ç¥¨¥é¡¼ + * xemacs ¤Ç¤Î byte-compile + * ¡Ö>>>¡×¤À¤±¤Î¹Ô¤«¤é¼¡¤Î¹Ô¤Ë¤«¤±¤Æ²¼Àþ¤¬°ú¤«¤ì¤Æ¤¿ + * howm-menu.el ¤ò iso-2022-7bit ¤Ë (for Meadow) + * CVS Àèü emacs ¤À¤È on-the-fly ¤Ç¿§¤¬¤Ä¤«¤Ê¤¤ + (()) + (()) + * ºÇ½ª¹Ô¤Ë²þ¹Ô¤¬¤Ê¤¤¾ì¹ç, ¤½¤Î¹Ô¤¬ÆâÍÆɽ¼¨¤Ë½Ð¤Ê¤¤ + (()) +* [2003-12-31] v1.1.0.3 + * fix: °ìÉô´Ä¶­¤Ç, global-font-lock ¤¬¸ú¤«¤Ê¤¯¤Ê¤ë + (emacs-20.7.2 on Vine Linux 2.6, Meadow1.15 on WindowsXP Professional). + (thx > NAKANO Yasuhiro ¤µ¤ó ) + * fix: °ìÍ÷ɽ¼¨¤Î¥Õ¥¡¥¤¥ë̾Íó¤Î¥Ç¥Õ¥©¥ë¥ÈÉý + (thx > Jun Kuriyama ¤µ¤ó ) +* [2003-12-29] v1.1.0.2 + * fix: anthy ¤È¤ÎÊ»ÍÑ + (thx > Jun Kuriyama ¤µ¤ó ) + * ¥á¥Ë¥å¡¼¤Ë schedule¡¦todo ¤ÎɽÂê¤ÈÀâÌÀ¤òÄɲà + (()) +* [2003-12-27] v1.1.0.1 + * fix: Ï¢·ëɽ¼¨¤Ç TAB ¤òᤤ¤Æ¤«¤é RET ᤯¤È¥¨¥é¡¼ + * fix: ÌÀÇطʤऱ¤ÎÇÛ¿§ + * fix: egg, yc, mcomplete ¤È¤ÎÊ»ÍÑ + * fix: Jargon ¤Î¥ê¥ó¥¯ÀÚ¤ì + (()) +* [2003-11-22] v1.1 + * Note + * Èó¸ß´¹¤ÊÊѹ¹¤ò¤Þ¤È¤á¤Æ¤ä¤Ã¤Æ¤·¤Þ¤ª¤¦ÈÇ + * ¥ª¥×¥·¥ç¥ó¤Ç, ½¾Íè¤É¤ª¤ê¤Ë¤â»È¤¨¤ë¤è¤¦¤Ë¤·¤¿¤Ä¤â¤ê + * ¡Ö((<¥¤¥ó¥¹¥È¡¼¥ë>))¡×¤Î°Ü¹ÔÎã¤ò»²¾È + * ¥Ç¥Õ¥©¥ë¥È½ñ¼°¤ÎÊѹ¹ + * ¥ê¥ó¥¯½ñ¼°¤ò <<, >> ¤«¤é <<<, >>> ¤ËÊѹ¹ + (()) + * Âбþ¤·¤Æ, hcal.rb ¤Î¡Öº£Æü¥Þ¡¼¥¯¡×¤ò <<<<##>>>> ¤ËÊѹ¹ + * 1 ¥á¥â 1 ¥Õ¥¡¥¤¥ë¤ò¥Ç¥Õ¥©¥ë¥È¤Ë + * ¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°Êѹ¹ (¢ª((<¥ê¥Þ¥¤¥ó¥À>))) + * ÆüÉÕ½ñ¼°¤ò [2003/10/21] ¤«¤é [2003-10-21] ¤ËÊѹ¹ + ¢ª ((<»²¹Í|URL:http://www.kanzaki.com/docs/html/dtf.html>)) + * ¥á¥Ë¥å¡¼¤ò¥á¥â¤ÈÅý¹ç + * ¡Ö%¡û¡û%¡×¤ò¸¡º÷¤·¤¿¤é, ¡Ö<<< %¡û¡û%¡×¤ò menu-mode ¤Ç³«¤¯ + * C-c , , ¤Ç¡Ö<<< %menu%¡×¤ò³«¤¯ (menu.howm ¤Ç¤Ï¤Ê¤¯) + * ²þÎÉ + * <<< ¤Ç¤ÎÂçʸ»ú¾®Ê¸»ú¤Î¶èÊÌ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * <<< ¤Ê¤É¤Ë¿§¤Ä¤± + (()) + * ¥Ç¥Õ¥©¥ë¥È¤Î¥á¥Ë¥å¡¼¤Ë¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤òÄɲà + * ÆüÉÕ·Á¼°¡Ö2003-10-30¡×¤Î action-lock ¤Ë¡Ö¤¯¤êÊÖ¤·¡×¤òÄɲà + (()) + * XEmacs, CVS Àèü Emacs, Carbon Emacs ¤ËÂбþ(?) + (()) + (()) + * '¤ä'¤µ¤ó¤Î patch ¤ò¼è¤ê¹þ¤ß¤Þ¤·¤¿ + * howm2 + * <<< ¤È >>> ¤¬¤«¤é¤à¾ì¹ç¤ò½¤Àµ. ·ãÃ٤ˤʤä¿ ;_; + * Âоݥե¡¥¤¥ë¤òÁªÊ̲Äǽ¤Ë (-list) + * ¥ª¥×¥·¥ç¥óÄɲà (-goto, -comefrom, -i) + * (()) + * ¾®Êѹ¹ + * C-c , d ¤È C-c , D ¤òÆþ¤ì¤«¤¨ + (()) + * ¥½¡¼¥¹¥Õ¥¡¥¤¥ëʬ³ä (howm-font-lock.el, howm-menu.el) + * ¥Ç¥Õ¥©¥ë¥È¤Î major-mode ¤ò text-mode ¤Ë + (()) + * [Á°¸å] ¤Ë¥­¡¼³ä¤ê¤¢¤Æ (C-c , A) + * ÆâÍÆɽ¼¨¤È¥Æ¥ó¥×¥ì¡¼¥È¤Î¥Õ¥¡¥¤¥ë̾¤Ï /home/hoge/¡Ä ¤¸¤ã¤Ê¤¯ ~/¡Ä ¤Ë + (()) + * ¿·µ¬¥á¥âºîÀ®Ä¾¸å¤Ë undo ¤¹¤ì¤Ð¡Ö>>> ¸µ¥Õ¥¡¥¤¥ë¡×¤ò¾Ã¤»¤ë + (()) + * ÈùÊѹ¹ + * face ¤òÊÑ¿ô¤Ç»ØÄê + * howm-menu-lang ¤òÀßÄꤷ¤Ê¤±¤ì¤Ð, ¤ª¤»¤Ã¤«¤¤¤Ë¿ä¬ + (()) + * howm-menu-refresh-after-save, howm-refresh-after-save ¤òµ¯Æ°¸å¤âÊѹ¹²Ä¤Ë + * ¥á¥Ë¥å¡¼¤Î "...done" ¥á¥Ã¥»¡¼¥¸¤ä¤Ã¤ÑÉü³è (schedule, todo ¤Î¥¹¥­¥ã¥ó»þ) + * howm2 ¤Î index.html ¤Ç, ¿ô»ú¤¸¤ã¤Ê¤¤¥Õ¥¡¥¤¥ë̾¤òÀè¤Ë + * ¥á¥Ë¥å¡¼Ã¦½Ð»þ¤Î bury-buffer ¤òÇÑ»ß. + * howm-ignore-comefrom-same ¤òÇÑ»ß + * ±£¤·µ¡Ç½: howm-view-{summary|contents}-persistent ¤Ë´Ø¿ô¤âÀßÄê²Äǽ + ;; Îã: ͽÄêɽ¡¦todo ¥ê¥¹¥È¤äÁ´¥á¥â°ìÍ÷Åù¤À¤± persistent + (setq howm-view-summary-persistent + (lambda () (member howm-view-name '("{schedule}" "{todo}" "")))) + * µ¤¤¬¤«¤ï¤ë²ÄǽÀ­¤¢¤ê + * ÊÑ¿ô̾ howm-reminder-regexp-date-pos ¢ª ¡Ä-day-pos + * howm-template-{file|date}-format ¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï + howm-ref-header, howm-date-format ¤ò»²¾È¤¹¤ë + * *.elc ¤â¸¡º÷Âоݳ° + * ¥É¥­¥å¥á¥ó¥È + * ¡Ö((<Æ°¤­¤Þ¤»¤ó¤è?>))¡×¤Ë¥Á¥§¥Ã¥¯¥ê¥¹¥È¤òÄɲà + * ¡Ö((<¥¤¥ó¥¹¥È¡¼¥ë>))¡×¤ËÀßÄêÎã¤òÄɲà + (()) + * ¥á¥Ë¥å¡¼¤Ï ~/howm/ja/*.howm ¤¸¤ã¤Ê¤¯ ~/howm/*.howm + (()) + * ¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤ò¥«¥é¡¼ÈÇ¤Ë + * goto, come-from ¤Î½ñ¼°Êѹ¹Îã¤ò RD É÷¤Ë + (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + * ¥á¥Ë¥å¡¼¥Ð¥Ã¥Õ¥¡±£¤·¤ÎÊÌË¡¤ò¾Ò²ð (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * ¼Â¤Ï¥³¥ó¥½¡¼¥ë¤Ç¤â»È¤¨¤Æ¤¿ + (()) + * <<< ¤¬ RD ¤Î include ¤È¤«¤Ö¤Ã¤Æ¤ë»Ý¤ÎÃí°Õ + (()) + (¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>))) + * ¥«¥¹¥¿¥Þ¥¤¥ºÎã¤Ë¤ª¤Þ¤±¤òÄɲà + * ¡Ö¥¤¥ó¥¹¥È¡¼¥ë¡×¤Î°Ü¹ÔÎã¤Ë, GNU touch ¤Ë¤¬¤Ê¤¤¾ì¹ç¤Î¥í¡¼¥Æ¥¯ÈǤòÄɲà + (()) + * ((<¥«¥¹¥¿¥Þ¥¤¥º>))¤Ë¡Ö¥á¥Ë¥å¡¼¤ò¥á¥â°·¤¤¤·¤Ê¤¤¡×ÀßÄê¤òÌÀµ­ + * yen.el ¤Î¾Ò²ð (¢ª((<³°Éô¥Ä¡¼¥ë>))) + * tag2plan ¤ÎÀâÌÀ¤ò½¤Àµ (-date_sep, ~/howm/*/*/*.howm) + * ¡Ö»²¹Í¡×¤Ëä·ϡ¦Ä¶ä¤òÄɲà + * fix + * grep »ÈÍÑ»þ¤Ï¡Ö-hoge¡×¤¬¸¡º÷¤Ç¤­¤Ê¤«¤Ã¤¿ + * ÆâÍƥХåե¡¤Î font-lock (²¾½¤Àµ) + (()) + * v1.0.4.1 ¤Î¥Ð¥°: ¸¡º÷ʸ»úÎó¤Î¿§ + * [2003-10-05] ¤Î¥Ð¥°: ¥Õ¥¡¥¤¥ë¶èÀÚ¤ê¤Î¿§ + * °ìÍ÷¥¢¤«¤é¤µ¤é¤Ë°ìÍ÷¥¤¤òɽ¼¨¤·¤¿¸å¤Ç q ¤·¤¿¤é, °ìÍ÷¥¢¤ËÌá¤ë + (()) + * ¡Ö¥Õ¥ì¡¼¥àʬ³ä¤òÉü¸µ¡×¤È¤ÎÀޤꤢ¤¤¤Ë¼«¿®¤Ê¤·. + ¤â¤·ÉÔ¶ñ¹ç¤¬½Ð¤¿¤é, ¢­¤Ç½¾ÍèÆ°ºî(¥¢¤ÎÁ°¤Î¥Ð¥Ã¥Õ¥¡¤ËÌá¤ë)¤Ë. + (setq howm-view-quit-to-nonhowm t) + * [Á°¸å] ¤Î¼Â¹Ôľ¸å¤ÎÆâÍƥХåե¡ + * filter-by-date Åù¤Ç¡Ö2003 ǯ 9 ·î * Æü¤Þ¤Ç¡×¤ÈÆþÎϤ·¤¿¤é, + ¡Ö2003 ǯ 9 ·î 31 Æü (= 10 ·î 2 Æü)¤Þ¤Ç¡×¤È²ò¼á¤µ¤ì¤Æ¤¿ + * ¤³¤ì°Ê³°¤Ë¤â¥Ð¥°¤Þ¤ß¤ì¤À¤Ã¤¿[2003-10-26] + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤ÈÆâÍƥХåե¡¤Î°ÌÃÖ¤¬Æþ¤ì¤«¤ï¤ë¾É¾õ + (()) + * ºÆ¸½Ë¡: ÆâÍƥХåե¡¤ÎÊý¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ, g ¤Ç¸¡º÷ ¢ª q + * ÆóÆü°Ê¾åµ¯Æ°¤·Â³¤±¤ë¤È, ¥á¥Ë¥å¡¼(ͽÄꡦtodo)¤ÎÅöÆü¤ÈÍâÆü¤Î¿§¤Ä¤±¤¬ÊÑ + * mailcap.el ¤¬¤Ê¤¤¤È¤­¤Î >>> /etc + * >>> ¤Î¸å¤Ë²¿¤â½ñ¤¤¤Æ¤Ê¤¤¤È¤­¤Ï̵»ë¤¹¤Ù¤· + * Àµµ¬É½¸½ [^¡Ä] ¤ò [^\r\n¡Ä] ¤Ë¤Ò¤È¤È¤ª¤êľ¤· + * ¥Æ¥¹¥ÈÈǤ«¤é¤ÎÊѹ¹¡¦fix + * font-lock ¤¬¤É¤ó¤É¤ó½Å¤¯¤Ê¤Ã¤Æ¤¿. ¤è¤¯¤³¤ó¤Ê¤Î¤ÇÆ°¤¤¤Æ¤¿¤Ê¤¢¡Ä + * fix: xemacs ¤Ç font-lock ¤¬¸Ç¤Þ¤ë + (()) + * ¤ä¤Ã¤Ñ¤ê¥Ç¥Õ¥©¥ë¥È¤Ï¡Ö¥¿¥¤¥È¥ëɽ¼¨¤Ê¤·¡× + * °Ü¹ÔÎã¤Îµì¥­¡¼ÀßÄ꤬, howm ¥í¡¼¥ÉÁ°¤Ç¤â¸å¤Ç¤âÈ¿±Ç¤µ¤ì¤ë¤è¤¦¤Ë + * ¥á¥Ë¥å¡¼¤¬³«¤«¤Ê¤«¤Ã¤¿ (.howm-keys ¤Ë¡Ö%menu%¡×ÄɲÃ) + * ¥á¥Ë¥å¡¼¤¬±£¤·¥Ð¥Ã¥Õ¥¡¤Î¤È¤­, ²¼Àþ¤¬¤Ä¤«¤Ê¤«¤Ã¤¿ + * ¥á¥Ë¥å¡¼¤Î footer ¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï½Ð¤Ê¤¯¤Ê¤Ã¤Æ¤¿ + * ¥á¥Ë¥å¡¼¤Î %eval% ¤ä %call% ¤Ç¥Ð¥Ã¥Õ¥¡¶¯À©Àڤ꤫¤¨ + * ÊÑ¿ô howm-menu-persistent ¤òÇÑ»ß + * howm-reminder-today-face ¤¬Ì¤ÄêµÁ¤À¤Ã¤¿ + * {_} ¤Ç RET ¤·¤¿¤È¤­¤â, ÀßÄꤷ¤¿ÆüÉÕ½ñ¼°¤Ë + * ¡Ö<<< http¡×¤¬¤¢¤Ã¤Æ¤â http://¡Ä ¤Ï¥Ö¥é¥¦¥¶¤òµ¯Æ°¤¹¤Ù¤· + * howm2 ¤Ç URL ¤ò¥ê¥ó¥¯¤Ë¤¹¤ë¤Î¤ò˺¤ì¤Æ¤¿ + * howm2 -type=rd ¤Ç URL ¤ò¥ê¥ó¥¯¤Ë¤¹¤ë¤Î¤ò˺¤ì¤Æ¤¿ + * [¹¹¿·] ¥Ü¥¿¥ó¤Ï¸µ¤Î¥Ð¥Ã¥Õ¥¡¤ËÌá¤ë + * ¡Ö>>> /foo/bar/¡×¤Î°ìÍ÷¸«½Ð¤·¤¬¶õ¤Ë¤Ê¤Ã¤Æ¤¿ + * xemacs ¤Ç mailcap.el ¤¬¤Ê¤¤¤È¤­¤Î¥¨¥é¡¼²óÈò + * howm-try-require ¤Î¼ÂÁõ¤ò¤¹¤Ã¤­¤ê + (()) + * ~/howm/CVS/* ¤¬¸¡º÷ÂоݤˤʤäƤ¤¤¿ + * howm-keyword-case-fold-search ¤òÀßÄꤷ¤¿¤é, + ¥­¡¼¥ï¡¼¥ÉÊä´°¤Ç¤âÂçʸ»ú¾®Ê¸»ú¤ò̵»ë + * ¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥¡¥¤¥ë̾¤òÊѹ¹ (¤´¤á¤ó¤Ê¤µ¤¤) + * 20031030-202259.howm ¢ª 2003-10-30-202259.howm + * ÊÑ´¹¼ê½ç + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Ë cd ¤·¤Æ, + find . -name '*.howm' -print | ruby -ne '$_.chop!; d = File::dirname $_; f = File::basename($_).sub(/^(\d{4})(\d{2})(\d{2})/){|s| "#$1-#$2-#$3"}; puts %~mv #$_ #{File::expand_path f, d}~' > ~/howm_kuzu + * ~/howm_kuzu ¤ÎÆâÍƤò³Îǧ¤·, ÌäÂê¤Ê¤±¤ì¤Ð + cat ~/howm_kuzu | /bin/sh + * ɬÍפʤé, °Ü¹ÔÎã¤Î¤è¤¦¤Ë¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¤Ç¤Ã¤Á¤¢¤² + * C-u C-c , c ¤Ê¤é, ¿·µ¬¥á¥â¤Ë¡Ö>>> ¸µ¥Õ¥¡¥¤¥ë¡×¤òÆþ¤ì¤º, ¥¿¥¤¥È¥ë¤â¶õÍó + (ÊÑ¿ô howm-template-use-file ¤Ç¥«¥¹¥¿¥Þ¥¤¥º) + (()) + ¡Ä undocumented. ¤½¤Î¤¦¤ÁÇÑ»ßͽÄê. + * ¤³¤Þ¤´¤Þ fix + * >>> ¤Þ¤ï¤ê + * ³°Éô viewer ¤¬¾ï¤Ë off ¤Ë¤Ê¤Ã¤Æ¤¿ + * howm-keyword-case-fold-search ¤òÀßÄꤷ¤¿¤È¤­¤Î >>> /etc/X11 + * ÆüÉÕ·Á¼°¡Ö2003-10-30¡×¤Î action-lock ¤«¤é¤Î search Âоݥե¡¥¤¥ë + * <<< ¤ä >>> ¤Ç¶õÇò¤ò´Þ¤àʸ»úÎ󤬸¡º÷¤Ç¤­¤Ê¤¯¤Ê¤Ã¤Æ¤¿ + * ¥¿¥¤¥È¥ë¤¬¾ï¤Ë¶õÍó¤Ë¤Ê¤Ã¤Æ¤¿ + * howm-keyword-case-fold-search ¤òÀßÄꤷ¤¿¤é, + >>> foo ¤Ç¤â¡Ö<<< FOO¡×¤ÏÀèƬ¤Ë¤¯¤ë¤Ù¤­ + * C-c , c ¤Ç¥¨¥é¡¼ + (()) + +== 1.0.x + +* [2003-10-27] v1.0.4.2 + * fix: font-lock ¤¬¤É¤ó¤É¤ó½Å¤¯¤Ê¤Ã¤Æ¤¿. ¤è¤¯¤³¤ó¤Ê¤Î¤ÇÆ°¤¤¤Æ¤¿¤Ê¤¢¡Ä +* [2003-10-04] v1.0.4.1 + * fix: ¡ÖºÇ¶á¡×¤¬¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¯¤Ê¤Ã¤Æ¤¿ + * fix: sort-by-date ¤Î¥Ç¥Õ¥©¥ë¥È¤ò¡Ö¿·¤·¤¤½ç¡×¤Ë (°ÊÁ°¤Ï¤½¤¦¤À¤Ã¤¿µ¤¤¬?) + * ¥·¥ç¡¼¥È¥«¥Ã¥È¤Î¿½ÅÄêµÁ¤Ë¤Ï·Ù¹ðɽ¼¨ + * ¤Ä¤¤¤Ç¤Ë¥á¥Ë¥å¡¼¤Î "...done" ¥á¥Ã¥»¡¼¥¸¤òÇÑ»ß + * TUTORIAL.rd ¤Ë¡ÖÆüÉÕ¤òÆþ¤ì¤ë¡×Äɲà +* [2003-10-02] v1.0.4 + * >> ¤Ç³°Éô viewer (¢ª((<¥á¥â¤òÆɤ⤦>)),((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + (()) + * ¥Ç¥£¥ì¥¯¥È¥ê¤âÂбþ. ¡Ö>> /usr/src¡×¤È¤«. + * ¥­¡¼³ä¤ê¤¢¤ÆÈù½¤Àµ + * (°ìÍ÷¥â¡¼¥É) °ì¹Ô¥¹¥¯¥í¡¼¥ë: n,p ¢ª j,k + * (¥á¥Ë¥å¡¼) ¥¹¥¯¥í¡¼¥ë: SPC, BS + * ¥¿¥¤¥È¥ë¤ò kill-ring ¤Ø: C-c , k ¢ª C-c , K + (()) + * fix: contents-mode ¤Ç C-h ¤¬Ì¤ÀßÄê¤À¤Ã¤¿ + * howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤Î save »þ¤Ë, ²¼Àþ¤ò°ú¤­Ä¾¤·, ¥á¥Ë¥å¡¼¤â¹¹¿· + (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + * ¸¡º÷Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲà (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + * ¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤Ï¸¡º÷¤·¤Ê¤¤ + (>> ¤ä howm-search-path ¤ÇÌÀ¼¨Åª¤Ë»ØÄꤹ¤ì¤Ðõ¤¹) + (()) + (()) + * ¥á¥Ë¥å¡¼¤ò²á¾ê¤Ë¶¯²½ + (¢ª(())) + * HyperCard ¤ä Um4 ¤Ë»É·ã¤µ¤ì¤Þ¤·¤¿. ¤Û¤ó¤È¤ÏÊ̥ġ¼¥ë¤Ë¤¹¤Ù¤­. + * ¸½¥Ð¥Ã¥Õ¥¡¤Î¥³¥Ô¡¼¤ò howm-mode ¤Çɽ¼¨(M-x howm-show-buffer-as-howm) + (()) + * ¼ûÍ×ÉÔÌÀ¤Ê¤Î¤ÇÍͻҸ« + * action-lock ¤Î "...Done" ¥á¥Ã¥»¡¼¥¸¤òÇÑ»ß + * fix + * ¡Ö>> ¥Õ¥¡¥¤¥ë̾¡×¤¬ howm-excluded-file-regexp ¤Ë´Ø¤ï¤é¤º¸ú¤¯¤è¤¦¤Ë + * call-process ¤Ç STDERR ¤Ï¼Î¤Æ¤ë + * action-lock ¤ÎÀâÌÀ¤Ë file://¡Ä ¤òÄɲà + * À£Á°¤Î window ʬ³ä¾õ¶·¤Ë´Ø¤ï¤é¤º, °ìÍ÷¤ò¾å, ÆâÍƤò²¼¤Ëɽ¼¨ + (()) + * sort ¤ä filter ¤Ë¥Õ¥¡¥¤¥ë̾¤ò»È¤¦ºÝ¤Ï, ¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤ò½üµî + * howm-menu-refresh ¤ò M-x ¤ä¥­¡¼³ä¤ê¤¢¤Æ¤«¤é¸Æ¤Ù¤ë¤è¤¦¤Ë + * ¥Æ¥¹¥ÈÈǤΥХ° + * °ìÍ÷ɽ¼¨¤·¤¿Ä¾¸å¤ÏÆâÍƤ¬É½¼¨¤µ¤ì¤Ê¤¤ + (()) + * Wiki É÷ link [[¡û¡û]] ¤¬¥¨¥é¡¼ + * [¥á¥Ë¥å¡¼¹¹¿·] ¤¬¥¨¥é¡¼ + (()) + * >> ¤Ç³ºÅö¥Õ¥¡¥¤¥ë¤¬ÀèƬ¤Ë½Ð¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿ + * ¡Ö»²¹Í¡×¤òÀ°Íý + * °Ê²¼¤â¼ÂÁõºÑ¤ß¤À¤±¤É, v1.1 ¤Þ¤Ç¿²¤«¤¹¤Ä¤â¤ê + * ¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°Êѹ¹ + * ¥á¥Ë¥å¡¼¤È¥á¥â¤ÎÅý¹ç +* [2003-09-23] È¿¾Ê¤·¤Æ¥Æ¥¹¥ÈÈǤòʬΥ + * Æó·ÏÅý¥á¥ó¥Æ¤¹¤ëǽÎϤϤʤ¤¤Î¤Ç¡Ä + * ¥ê¥ê¡¼¥¹ÈǤÏÊüÃÖ + * ¥Æ¥¹¥ÈÈǤϱóθ¤Ê¤¯¹¹¿· + * ¥Æ¥¹¥ÈÈǤι¹¿·¤¬Íî¤ÁÃ夤¤¿¤é, + ¤½¤Î¾õÂ֤˥С¼¥¸¥ç¥óÈÖ¹æ¤Ä¤±¤Æ, ¥ê¥ê¡¼¥¹ÈǤäƤ³¤È¤Ë¤¹¤ë +* [2003/09/23] v1.0.3.4 + * ÆüÉÕ·Á¼° [2003/09/21] ¤Î action-lock ¤ò³ÈÄ¥ (¢ª((<¥á¥â¤ò½ñ¤³¤¦>))) + (()) + * fix: howm2 ¤Î¥ê¥ó¥¯°ìÍ÷¤òÁêÂХѥ¹¤Ë + * fix: template ¤Þ¤ï¤ê + * Á°¤Î¥á¥â¤È¤Î´Ö¤Ë¶õ¹Ô¤òÆþ¤ì¤ë + (()) + * ¥¹¥Ú¥ë¥ß¥¹ cursol ¢ª cursor + * ¿·¥á¥â template ¤Î %xxx ÃÖ¤­¤«¤¨¤¬, Á°¤Î¥á¥â¤Ë¤âµÚ¤ó¤Ç¤¤¤¿ + * fix: ¡Ö¼¡(Á°)¤Î¥ê¥ó¥¯¤Ø¡×¤ò½¤Àµ + * fix: canna Âкö¤ò, ¥í¡¼¥É½ç½ø¤Ë´Ø¤ï¤é¤ºÍ­¸ú¤Ë +* [2003/09/21] v1.0.2.3 + * fix: ½é¤á¤Æµ¯Æ°¤·¤¿¤È¤­¤Ë ~/.howm-keys ¤òºîÀ® + * fix: canna Âкö + (()) +* [2003/09/20] v1.0.2.2 + * HTML ²½¥¹¥¯¥ê¥×¥È howm2 ¤Ç¤Ã¤Á¤¢¤¬¤ê (¢ª((<³°Éô¥Ä¡¼¥ë>))) + * fix: ¡Ö!¡×¤¹¤ë¤È¥Ð¥Ã¥Õ¥¡Ì¾¤¬ÊÑ +* [2003/09/18] v1.0.2 + * HTML ²½¥¹¥¯¥ê¥×¥È howm2 ¤Î»îºî (¢ª((<³°Éô¥Ä¡¼¥ë>))) + (()) + * ̤Êݸ¤À¤í¤¦¤È°ÑºÙ¹½¤ï¤º, howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¶¯À©ºï½ü¤¹¤ë¥³¥Þ¥ó¥É + (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + * ¡Ö¤ä¤µ¤·¤¤ Emacs-Lisp ¹ÖºÂ¡×¤Î URL ¤ò½¤Àµ. + ¤¤¤Þ howm ¤¬¤¢¤ë¤Î¤Ï¤³¤ÎËܤΤª¤«¤²¤Ç¤¹. +* [2003/09/17] v1.0.1 + * °ìÍ÷¥â¡¼¥É¤Ç¡Ö!¡× ¢ª shell ¤Ç¥³¥Þ¥ó¥É¼Â¹Ô (¢ª((<¥á¥â¤òÆɤ⤦>))) + (()) + * Dired-X ¤Ç¤¦¤Þ¤¯Æ¨¤²¤¿¤Ä¤â¤ê¤À¤Ã¤¿¤ó¤À¤±¤É, ÉÔɾ¤Ê¤Î¤Ç + * lisper ¤¿¤ë¼Ô, Í×µá»ÅÍͤξå¤ò¹Ô¤«¤Ê¤¤¤È :-p +* [2003/09/17] v1.0.0.1 + * Dired-X ¤Ë¤Ä¤¤¤ÆºÇÄã¸Â¤ÎÀâÌÀ + * fix: Dired-X ¤ÎÂоݥХåե¡¤òÄûÀµ +* [2003/09/17] v1.0 + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤ò³¬Áز½: ~/howm/ǯ/·î/ǯ_·î_Æü.howm + * ¤³¤ó¤Ê¤Õ¤¦¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤â»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ + (setq howm-file-name-format "%Y/%m/%Y_%m_%d.howm") + * °Ü¹Ô¤Ë¤Ä¤¤¤Æ¤Ï, ((<¥¤¥ó¥¹¥È¡¼¥ë>))¤Î¡ÖÃí°Õ¡× + +== 0.9.x + +* [2003/09/16] v0.9.9 + * ¥á¥Ë¥å¡¼ (¢ª((<¥á¥â¤ò½ñ¤³¤¦>))) + * Á°¸å¤Î¥á¥â¤Î°ìÍ÷ + * ÀâÌÀ¤òÊä­ + (()) + * °ìÍ÷¥â¡¼¥É¤Ç¡ÖX¡× ¢ª Dired-X ¤òµ¯Æ°¤·¤Æ¥Õ¥¡¥¤¥ëÁàºî + (()) + * howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ + * fix: window ¤Î¾õÂÖ¤òÉü¸µ + (()) + * ¤É¤ó¤Ê¥â¡¼¥É¤Ç¤â C-c , Q ¤¬¸ú¤¯ + (()) +* [2003/09/16] v0.9.8.3 + * fix: ¥¿¥¤¥È¥ë°ìÍ÷¤Ç¥¨¥é¡¼ + (()) + * pure elisp ÈǤΤȤ­ + * ¥¿¥¤¥È¥ë¤¬°ì¤Ä¤â¤Ê¤«¤Ã¤¿¤È¤­ + * menu.howm ¤ò°ìÍ÷¤Ë½Ð¤µ¤Ê¤¤ÊýË¡ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) +* [2003/09/16] v0.9.8.2 + * ¥á¥Ë¥å¡¼¤ò¥Õ¥¡¥¤¥ë¤Ë¤·¤ÆÊÔ½¸¤ò¿ä¾© (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * Ʊº­¤Î ja/menu.howm ¤ò ~/howm/ ¤Ë¥³¥Ô¡¼¤·¤Æ¤¯¤À¤µ¤¤ + * (()) + * ¥Ç¥Õ¥©¥ë¥È¤ÎÊѹ¹ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * grep »È¤ï¤Ê¤¤ (¥Ð¥°½Ð¤·´üÂÔ) + * ¥á¥Ë¥å¡¼¤Î¥­¥ã¥Ã¥·¥å¤Ï¥ª¥Õ + * ¥Õ¥¡¥¤¥ë¤ò³«¤¯ºÝ, °ìÍ÷¤ò»Ä¤¹ + * ³Ú¤·¤¤Ï¢µÙ¤Ç¤·¤¿ :-) +* [2003/09/16] v0.9.7.1 + * Wiki É÷¥ê¥ó¥¯ [[¤Û¤²]] (¢ª((<¥á¥â¤ò½ñ¤³¤¦>))) + * ¡Ö<<¡×¾å¤Ç¥ê¥¿¡¼¥ó᤯¤È¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×¤Ø¤Î¥ê¥ó¥¯ (¢ª((<¥á¥â¤ò½ñ¤³¤¦>))) + * ¸Å¤¤¹¹¿·µ­Ï¿¤È°Ü¹ÔÎã¤ò°ÜÆ° (¢ª(())) + * howm-ignore-comefrom-same ¤ò undocumented ¤Ë. ¤½¤Î¤¦¤ÁÇÑ»ß? + * fix: ÍËÆüɽ¼¨¤Ë¤â¸À¸ìÀßÄê¤òÈ¿±Ç +* [2003/09/15] v0.9.6 + * ¡Ön¡×¤È¡Öp¡×¤Ç°ì¹Ôñ°Ì¤Î¥¹¥¯¥í¡¼¥ë + (()) +* [2003/09/15] v0.9.5 + * ¥á¥Ë¥å¡¼¤Ë [Á´¾Ã] (howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹) + (()) +* [2003/09/14] v0.9.4.2 + * fix: ¥¿¥¤¥È¥ë°ìÍ÷¤¬Î¢¤Ë±£¤ì¤Æ¤·¤Þ¤Ã¤Æ¤¿ + (()) + * fix: ¡Ö¥«¡¼¥½¥ë¤òÂбþ¥«¥é¥à¤Ø¡×¤ÎÈù½¤Àµ(¥Þ¥Ã¥Á¤·¤Ê¤±¤ì¤Ð¹ÔƬ¤Ø) +* [2003/09/14] v0.9.4.1 + * grep æµÑ¤Î»î¤ß (¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>))) + * ¥á¥â¤¬ÂçÎ̤À¤È¤ä¤Ã¤Ñ¤ê¤Á¤ç¤Ã¤ÈÃÙ¤¤ ;_; + * fix: ¡ÖWrong type argument: window-configuration-p, nil¡× + * °ìÍ÷¥â¡¼¥É¤«¤é¥Õ¥¡¥¤¥ë¤ò³«¤¤¤¿¤È¤­, ¥«¡¼¥½¥ë¤òÂбþ¥«¥é¥à¤Ø: + (())¤Ë¸þ¤±¤Æ +* [2003/09/13] v0.9.3 + * °ìÍ÷¥â¡¼¥É¤«¤éÈ´¤±¤ëºÝ, window ¤Î¾õÂÖ¤òÉü¸µ + (()) + * C-u RET ¤Ç°ìÍ÷¤ò»Ä¤¹ (¢ª((<¥á¥â¤òÆɤ⤦>))) + * howm-view-summary-persistent (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * howm-view-kill-buffer, howm-view-delete-other-windows ¤òÇÑ»ß +* [2003/09/12] v0.9.2.1 + * fix: come-from ¥ê¥ó¥¯¤òºÇĹ°ìÃ×¤Ë + * fix: (()) + * howm-view-kill-buffer ¤ÎÀâÌÀµÕ¤À¤Ã¤¿ + * ¥¿¥¤¥È¥ë°ìÍ÷ɽ¼¨¤ÎºÝ, ¥¿¥¤¥È¥ë¤Ê¤·°ìÍ÷¤¬Î¢¤Ë»Ä¤Ã¤Æ¤¿ + * howm-ignore-comefrom-same (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * ¤Ê¤ó¤«ÉÔɾ¤Ê¤Î¤Ç, ¥Þ¥Ë¥å¥¢¥ë¤ò HTML ²½ +* [2003/09/10] v0.9.1 + * ¥Ç¥Õ¥©¥ë¥È¤ò±Ñ¸ì¤Ë + * .emacs ¤Ë°Ê²¼¤ò½ñ¤±¤Ð¥á¥Ë¥å¡¼¤¬ÆüËܸì¤Ë + (setq howm-menu-lang 'ja) + * hcal.rb ¤â¥Ç¥Õ¥©¥ë¥Èµ­¹æ¤Ï ASCII ʸ»ú¤Ë +* [2003/09/09] v0.9 + * ruby, find æµÑ. elisp ¤¬¤³¤ó¤Ê¤Ë®¤«¤Ã¤¿¤È¤Ï¡Ä + * howm-view-kill-buffer ¤ÎÀâÌÀ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * ext/easy-mmode.el ¤ÎƱº­¤òÇÑ»ß (°ÕÌ£¤Ê¤µ¤²) + +== 0.8.x + +* [2003/08/31] v0.8.5 + * ¥¿¥¤¥È¥ë¤Î°ìÍ÷ɽ¼¨ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + (()) + * °ìÍ÷¥â¡¼¥É¤ä¥á¥Ë¥å¡¼¥â¡¼¥É¤Ç¡Ö?¡×¤ò²¡¤¹¤È¥Ø¥ë¥× + * ¡Ö»²¹Í¡×¤Ë vim ÈǤòÄɲà +* [2003/06/03] v0.8.4 + * °Âľ¥«¥ì¥ó¥À¡¼ hcal.rb (htodo.rb ¤ò²þ̾¡¦³ÈÄ¥) + * ͽÄêɽ¤ËºÑ¹àÌܤâɽ¼¨ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * ¡Ö»²¹Í¡×¤Ë wikilog ¤òÄɲà +* [2003/05/11] v0.8.3 + * fix: howm-excluded-file-regexp ¤¬ menu, schedule, todo ¤Ç¸ú¤¤¤Æ¤Ê¤«¤Ã¤¿ + (()) + * README + * maxima ¤Ë¤Ä¤¤¤Æ¤ÎÃí°Õ + * M-x howm-create ¢ª M-x howm-menu +* [2003/03/19] v0.8.2 + * ³°Éô¥Ä¡¼¥ë¤Ë htodo.rb Äɲà + * fix: todo °ìÍ÷¤Ç, ºÑ¹àÌÜ(@[2003/03/19]. ¤Ê¤É)¤âÆüÉÕ½ç¤Ëʤ֤褦 +* [2003/02/20] v0.8.1.1 + * fix: ¡Ö@[2003/02/14] 501¼¼¡×¤Î laziness ¤¬ 501 ¤Ë¤Ê¤Ã¤Æ¤¿¤Î¤ò½¤Àµ + * fix: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¡Ö.#foobar.baz¡×¤ò¸¡º÷Âоݳ°¤Ë +* [2002/12/14] v0.8.1 + * howm-congrats-hook + * ¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤â¸¡º÷ÂÐ¾Ý¤Ë (howm-excluded-file-regexp ¤«¤éºï½ü) + * ¡Ö>> ¥Õ¥¡¥¤¥ë̾¡×´ØÏ¢¤ò¤Þ¤¸¤á¤Ë½¤Àµ¤¹¤ë¤Þ¤Ç¤Î»ÃÄê½èÃÖ +* [2002/11/03] v0.8 + * ¥á¥Ë¥å¡¼ + * ¥ê¥Þ¥¤¥ó¥À + * ½¾Íè¤Î¡Ö@[2002/10/21] !!¡×¤Ê¤É¤ÏÇÑ»ß + * ¥í¡¼¥Þ»ú¸¡º÷ (migemo) + * Éտ路¤Æ, grep ¥³¥Þ¥ó¥É¤ò egrep ¤ËÊѹ¹ + * ¤½¤Î¾¤¤¤í¤¤¤í + * action-lock ¤ÎÄɲÃÎã (namazu ¤ò»È¤¤, Message-ID ¤«¤é¥á¡¼¥ë¤ò¸¡º÷) + * action-lock ¤Î¡Ö̤½èÍý¡×¤ò {___} ¤«¤é {_} ¤ËÊѹ¹ + * [2002/10/18] ¤Î¤è¤¦¤ÊÆüÉÕ·Á¼°¤â¥ê¥ó¥¯¤Ë + * howm-view-summary ¤Î°ì¹Ôɽ¼¨¤Ç, ÀèƬ¶õÇò¤Ïºï½ü + * howm-view-split-horizontally + * howm-insert-date + * ÊÑ¿ô howm-view-summary-format ¤Î»ÅÍÍÊѹ¹ + (½Äʬ³ä¤Ê¤é todo °ìÍ÷¤Ë¥Õ¥¡¥¤¥ë̾ɽ¼¨¤Ê¤·, ¤Î¤ä¤Ã¤Ä¤±¼ÂÁõ¤Î¤¿¤á) + * °ìÍ÷¤Ç¤Î¥¿¥¤¥È¥ëɽ¼¨¤ò°ìöÇÑ»ß (Ê£»¨¤Ê³ä¤ËÌò¤¿¤¿¤º) + * °ìÉô¥­¡¼¥Ð¥¤¥ó¥ÉÊѹ¹ + * fix: ¡Öº£Æü¤Î¥á¥â¡×¾å¤Ç C-c , c ¤·¤¿¤È¤­¤Ï¡ÖÁ°¤Ë¸«¤Æ¤¿¥Õ¥¡¥¤¥ë¡×¤Ïά + +== 0.7.x + +* [2002/09/30] v0.7.6.1 + * howm-view-kill-buffer ¤Ë´Ø·¸¤Ê¤¯, ¥¿¥°°ìÍ÷¥Ð¥Ã¥Õ¥¡¤À¤±¤Ï»Ä¤¹(¤ä¤Ã¤Ä¤±) + * fix: case-fold-search ¤òÀßÄꤷ¤Æ¤¤¤ë¤È¤­¤Î, grep / grep -i ¤ÎȽÄê +* [2002/09/26] v0.7.5 + * ¸¡º÷¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¤è¤¦Êѹ¹ +* [2002/09/24] v0.7.4 + * fix: ¸¡º÷¤Ç no match ¤Ë¤Ê¤Ã¤¿¤È¤­, Á°¥Ð¥Ã¥Õ¥¡¤Î¿§¤Ê¤É¤¬ÊÑ¤Ë + (font-lock-keywords-only ¤ÎÂç°èÃͤò¸í¤Ã¤ÆÊѹ¹) +* [2002/09/20] v0.7.3 + * action-lock-no-browser + * fix: @ ¤Ç°ìÍ÷ɽ¼¨¤ÈÏ¢·ëɽ¼¨¤È¤òÀڤ꤫¤¨¤¿¤È¤­¥«¡¼¥½¥ë°ÌÃÖ¤¬¤º¤ì¤Ì¤è¤¦ + * fix: ¥Þ¡¼¥¯¤òÀßÄꤻ¤º howm-create ¤·¤Æ¤â¥¨¥é¡¼½Ð¤Ì¤è¤¦ +* [2002/09/19] v0.7.2 + * °ìÍ÷¤Ç summry ̤¥¹¥­¥ã¥ó¤ÎÉôʬ¤Ë¤Ï¡Ötype 'p'¡×¤Èɽ¼¨ + * fix: .howm-keys ¤Ø¤Î½ÅÊ£ÅÐÏ¿¥Á¥§¥Ã¥¯¤Ç¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤¹¤ë¤è¤¦¤Ë + * fix: ¥Ç¥£¥ì¥¯¥È¥ê̾¤Ï°ìÍ÷Âоݳ°¤Ë (Îã: CVS/) +* [2002/09/18] v0.7.1 + * http:// ¤Ç web browser µ¯Æ° + * fix: ¡Ö¥­¡¼¥ï¡¼¥É¤ò kill-ring ¤Ø¡×¢ª¡Ö¥¿¥¤¥È¥ë¤ò kill-ring ¤Ø¡×(̤¤Ãæ) +* [2002/09/17] v0.7 + * 1 Æü 1 ¥Õ¥¡¥¤¥ë¤Ë + * ¥¿¥¤¥È¥ë = ¤È come-from ¥ê¥ó¥¯ << ¤È¤òʬΥ + * ºÇ¶á¤Î¥á¥â¤Î°ìÍ÷ (¥­¡¼¥Ð¥¤¥ó¥É¤âÊѹ¹) + * ¥Õ¥¡¥¤¥ë̾¤ò kill-ring ¤Ø (C-u C-c , k) + * ¡Ö>> ¥Õ¥¡¥¤¥ë̾¡× (file://¡Ä ¤È (()) ¤â»Ä¤·¤Æ¤Ï¤¢¤ë) + * ÍѸìÊѹ¹: ÌÀ¼¨¡¦°Å¼¨ ¢ª goto¡¦come-from + * Á´¥á¥â°ìÍ÷¤Ë¤â¥Ø¥Ã¥À + * fix: ¸Å¤¤ ruby-mode.el ¤ò»È¤¦¤ÈÁ´¥á¥â°ìÍ÷¤ËÊѤʿ§¤¬¤Ä¤¯¤Î¤ò¤ä¤Ã¤Ä¤±½¤Àµ + +== 0.6.x + +* [2002/09/14] v0.6 Á´Ì̽ñ¤­¤Ê¤ª¤· + * ¡Ö¥ê¥ó¥¯¡×¤ÎÇÑ»ß. ¤¹¤Ù¤Æ¤Ï¸¡º÷¤Ç¤¢¤ë. + * ¸¡º÷·ë²Ì¤Î¥½¡¼¥È¡¦¹Ê¤ê¤³¤ß¡¦Ï¢·ëɽ¼¨ + * ¥­¡¼¥ï¡¼¥É°ìÍ÷¥Õ¥¡¥¤¥ë(~/.howm-keys)¤ò¤·¤Ö¤·¤ÖƳÆþ + * °Å¼¨¥ê¥ó¥¯¤Î½ñ¼°¤ò²ÄÊѤˤ¹¤ë¤¿¤á + * emacs, grep, ruby ¤ÎÀµµ¬É½¸½¤Î°ã¤¤¤ËǺ¤ß¤¿¤¯¤Ê¤¤¤«¤é, + °Å¼¨¥ê¥ó¥¯Àë¸À¤Î¥¹¥­¥ã¥ó(Àµµ¬É½¸½¸¡º÷!)¤Ï emacs Æâ¤Ç´°·ë¤µ¤»¤¿¤¤ + * Á´¥Õ¥¡¥¤¥ë¤Î°Å¼¨¥ê¥ó¥¯Àë¸À¤ò emacs ¤Ç¥¹¥­¥ã¥ó¤¹¤ë¤Î¤Ï + ¤µ¤¹¤¬¤ËÃÙ¤½¤¦ + * µÕ¼ê¤Ë¤È¤Ã¤Æ, ²¿¤«¸¡º÷¤¹¤ë¤¿¤ó¤Ó¤Ë + ¤½¤Î¸¡º÷¸ì¤òÅÐÏ¿¤·¤Æ¤·¤Þ¤ª¤¦¤«¤È¤â + * shell ¤ò»È¤ï¤Ê¤¤ (¡Ä¤Ë¤·¤¿¤Ä¤â¤ê) + * ¥Ñ¥é¥°¥é¥Õ»Ø¸þ¤ÏÇÑ»ß + * ¤«¤ï¤ê¤Ë, ³Æ¥Ñ¥é¥°¥é¥Õ¤ò 1 ¥Õ¥¡¥¤¥ë¤Ë¤·¤Æ, Ï¢·ëɽ¼¨ + * migemo ¸¡º÷¤¬Ì¤¼ÂÁõ + * ¥Õ¥¡¥¤¥ë̾¤Ï̵ͭ¤ò¸À¤ï¤µ¤º¾¡¼ê¤Ë¤Ä¤±¤ë + +== 0.5.x °ÊÁ° + +* [2002/06/26] v0.5.3 (¥ê¥ê¡¼¥¹¤»¤º[2002/09/12]) + * ¥Ñ¥é¥°¥é¥Õ°ìÍ÷¤ÎÆü»þ¤ò¥Ï¥¤¥é¥¤¥È +* [2002/06/25] v0.5.2 + * migemo ¸¡º÷¤Ç¤â¥Þ¥Ã¥Á¤ò¥Ï¥¤¥é¥¤¥È + * describe-mode ¤Ë¥Ñ¥é¥°¥é¥Õ´ØÏ¢¤Î¥­¡¼ÀßÄê¤âµ­½Ò + * rd-memo ¤È¤ÎÊ»ÍÑÀßÄêÎã +* [2002/06/24] v0.5.1 + * ¥«¡¼¥½¥ë¤¬¥Ñ¥é¥°¥é¥Õ¤ÎÀèƬ¤Ë¤¢¤Ã¤¿¤È¤­¤ÎµóÆ°¤ò½¤Àµ + * ¥Ñ¥é¥°¥é¥Õ¤ò¿·µ¬¥¿¥¤¥È¥ë¤Ë°ÜÆ°¤·¤¿¤È¤­ howm-create-title ¤¬¸ú¤¯¤è¤¦ +* [2002/06/23] v0.5 + * ¥Ñ¥é¥°¥é¥Õ»Ø¸þ¤È»þ·ÏÎó¥á¥â (»îÍÑÃæ) + * howm-default-directory + * howm-menu ¤òÇѻߤ·, ÉáÄÌ¤Ë keymap ¤ò»ÈÍÑ + * ¸½Âê̾¤ò kill ring ¤Ø + * popview-mode ¤«¤é¥Õ¥¡¥¤¥ë¤ò³«¤¯¤È, ¸«¤Æ¤¤¤¿²Õ½ê¤Ë¥«¡¼¥½¥ë°ÜÆ° + * grep ¤Ç¤ÏÂê̾¤Ç¤Ê¤¯¥Þ¥Ã¥Á¹Ô¤òɽ¼¨ + * ¤½¤Î¾, Èù½¤Àµ + * migemo-client --type=egrep ¤òÌÀ¼¨ + * popview-mode ¤Î post-command-hook ¤Ï buffer-local ¤Ë + * popview-mode ¤Î update Í×ÉÔÍ×¥Á¥§¥Ã¥¯¤Ï, ¥­¡¼¥ï¡¼¥É¤¸¤ã¤Ê¤¯°ÌÃÖ¤Ç + * popview-mode ¤Ï 'popview ¤Ç¤Ê¤¯ 'popview-mode ¤ò provide + * howm-create-file ¤ËÊä´° +* [2002/06/06] v0.4.2 + * migemo + * grep ¢ª egrep + * Âê̾¤ÎÊä´°ÆþÎÏ + * tag2plan ¤Ç¡Ö@[2002/06/06] foo¡×¤¬ÅÐÏ¿¤µ¤ì¤Ê¤«¤Ã¤¿¤Î¤ò½¤Àµ +* [2002/06/05] v0.4.1 + * grep ¤Ë -i + * ¶õÇò¹Ô¤ÏÂê̾¤È¤ß¤Ê¤µ¤Ê¤¤ + * howm ¥³¥Þ¥ó¥É¤âÂê̾½ñ¼°¤Î¥Ç¥Õ¥©¥ë¥È¤ò¡Ö°ì¹ÔÌÜ¡×¤Ë +* [2002/06/03] v0.4 Âê̾½ñ¼°¤òÊѹ¹ (¡Ö= Âê̾¡×¢ª °ì¹ÔÌÜ) +* [2002/06/03] v0.3.2 ¥Ç¥Ð¥Ã¥°(1¥Õ¥¡¥¤¥ëÊ£¿ô¥¿¥°) +* [2002/06/02] v0.3.1 + * ³Æ°ìÍ÷¤Î¥Ð¥Ã¥Õ¥¡¤òÊÌ¤Ë + * tag °ìÍ÷¤Ïº£Æü¤ÎÆüÉդ˥«¡¼¥½¥ë°ÜÆ° + * ¿·µ¬ºîÀ®»þ, Âê̾¤¬¶õ¤Ê¤éÂê̾½ñ¼°¼«ÂÎ("= ")¤ò¾Êά + * howm -pipe + * w3mmenu +* [2002/06/02] v0.3 + * ¥³¥Þ¥ó¥ÉÄɲà (¼¡/Á°¤Î¥ê¥ó¥¯¤Ø, tag, ¹Ê¤ê¤³¤ß¸¡º÷, ¿·µ¬, Ê£À½) + * tag2plan + * popview-mode ¤ËºÇÄã¸Â¥É¥­¥å¥á¥ó¥È + * ¤½¤Î¾, Èù½¤Àµ +* [2002/05/30] v0.2 ¥³¥Þ¥ó¥ÉÄɲà (refresh, »²¾ÈÀè/¸µ°ìÍ÷, Á´Âê̾°ìÍ÷, ¸¡º÷) +* [2002/05/29] v0.1 ¸ø³« + += ¸Å¤¤¹ðÃÎ + +* ²Æ»þ´Ö¤Î¥Ð¥° 2007-11-09 + * howm-1.3.5 ¤Î¹¹¿·µ­Ï¿¤ò»²¾È + +* ¥»¥­¥å¥ê¥Æ¥£½¤Àµ 2006-12-16 + * howm-1.3.4 ¤Î¹¹¿·µ­Ï¿¤ò»²¾È + +* ¥Æ¥¹¥ÈÈǤ˥Х°: + [2003-12-27]¡Á[2004-01-21]¤Î¥Æ¥¹¥ÈÈÇ¤Ç + (setq howm-insert-date-future t) + ¤òÀßÄꤷ¤Æ¤¤¤¿¾ì¹ç, + ¡Ö̤Íè¤ÎÆüÉÕ¤òÆþÎϤ·¤¿¤Î¤Ë, ¤½¤ì¤ò¤â¤¦°ìÃÊ̤Íè¤ØÁ÷¤Ã¤Æ¤·¤Þ¤¦¡× + ¤È¤¤¤¦¥Ð¥°¤¬¤¢¤ê¤Þ¤·¤¿. ¤¹¤ß¤Þ¤»¤ó. + * ͽÄꡦtodo ¤Î°ìÍ÷¤Ç, ǯ·î¤Ë¤Þ¤Á¤¬¤¤¤¬¤Ê¤¤¤«³Î¤«¤á¤Æ¤¯¤À¤µ¤¤. + (ÆäË, ¡Ö2004 ǯ¤Î¤Ä¤â¤ê¤¬ 2005 ǯ¤Ë¡×¤È¤¤¤¦¾É¾õ¤ò¤´Ãí°Õ¤¯¤À¤µ¤¤) + * ¥ê¥ê¡¼¥¹ÈǤ«¡¢[2004-01-22]°Ê¹ß¤Î¥Æ¥¹¥ÈÈÇ¤Ë update ¤·¤Æ¤¯¤À¤µ¤¤. + += µìÈǤ«¤é¤Î°Ü¹Ô +(ɬ¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!) + +== v1.0.x ¤«¤é¤Î°Ü¹ÔÎã + +* .emacs ¤Î½¤Àµ ¢ª ((<¥¤¥ó¥¹¥È¡¼¥ë>)) + * ¡Ö<<< ¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¡×¤òÀßÄꤷ¤¿¾ì¹ç¤Ï, + ¥­¡¼¥ï¡¼¥É°ìÍ÷¤òºî¤êľ¤·¤Æ½ÅÊ£¤ò¾Ã¤¹¤È¤è¤¤¤Ç¤·¤ç¤¦ +* ¿·ÂÎÀ©¤Ë°Ü¹Ô¤¹¤ë¾ì¹ç + * ¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°Êѹ¹ + @[2003/09/25]! ¢ª [2003/09/25]! + @[2003/09/25] ¢ª [2003/09/25]- + [2003/09/25]! ¢ª [2003/09/25]:! + [2003/09/25] ¢ª [2003/09/25] + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Ë cd ¤·¤Æ, + find . -name '*.howm' -print | xargs -n 1 ruby -p -i.bak -e '$_.gsub!(%r~(@?)(\[[0-9]+/[0-9]+/[0-9]+\])([-+@!.]?)~){|s| if ($1 == %~~ && $3 == %~~); s; else; $2 + ($1 == %~@~ ? %~~ : %~:~) + ($3 == %~~ ? %~-~ : $3); end}' + * ³Îǧ¸å, *.bak ¤ò¼Î¤Æ¤ë + * ÆüÉդνñ¼°Êѹ¹ + [2003/10/21] ¢ª [2003-10-21] + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Ë cd ¤·¤Æ, + find . -name '*.howm' -print | xargs -n 1 ruby -p -i.bak -e '$_.gsub!(%r!(\D)(\d{4}/\d{2}/\d{2})(\D)!){|s| $1 + ($2.tr "/", "-") + $3}' + * ³Îǧ¸å, *.bak ¤ò¼Î¤Æ¤ë + * ¥ê¥ó¥¯¤Î½ñ¼°Êѹ¹ (<<, >> ¤ò <<<, >>> ¤Ë) + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Ë cd ¤·¤Æ, + find . -name '*.howm' -print | xargs -n 1 ruby -p -i.bak -e '$_.sub!(/(<<|>>).*/){|s| $1[0,1] + s}' + * ³Îǧ¸å, *.bak ¤ò¼Î¤Æ¤ë + * ¤ä¤ê¤¿¤±¤ì¤Ð, ¥á¥â¤ò²þ̾¤·¤Æ¤â¤è¤¤ + 2003_10_18.howm ¢ª 2003-10-18-000000.howm + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Ë cd ¤·¤Æ, + find . -name '*.howm' -print | ruby -ne '$_.chop!; d = File::dirname $_; f = File::basename($_).tr("_", "-").sub(/[.][^.]+$/){|s| "-000000" + s}; puts %~mv #$_ #{File::expand_path f, d}~' > ~/howm_kuzu + * ~/howm_kuzu ¤ÎÆâÍƤò³Îǧ¤·, ÌäÂê¤Ê¤±¤ì¤Ð + cat ~/howm_kuzu | /bin/sh + * ¹¹¿·½ç¤È̾Á°½ç¤¬°ìÃפ¹¤ë¤è¤¦, ¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¤Ç¤Ã¤Á¤¢¤² + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Ë cd ¤·¤Æ, + * GNU touch ¤Î¾ì¹ç + find . -name '*.howm' -print | sort -r | ruby -ne 'puts %~touch -d "#{ARGF.lineno} min ago" #$_~' > ~/howm_kuzu + * ¤½¤ì°Ê³°¤Î¾ì¹ç + find . -name '*.howm' -print | sort | ruby -ne '$_.chop!; puts %~sleep 1; touch #$_~' > ~/howm_kuzu + * ~/howm_kuzu ¤ÎÆâÍƤò³Îǧ¤·, ÌäÂê¤Ê¤±¤ì¤Ð + cat ~/howm_kuzu | /bin/sh + * ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Î¤µ¤·¤«¤¨ (ja/* ¤Î¥³¥Ô¡¼) ¢ª ((<¥¤¥ó¥¹¥È¡¼¥ë>)) + * µì¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Ï¼Î¤Æ¤ë +* µìÂÎÀ©¤ò´Ó¤¯¾ì¹ç: .emacs (howm ¥í¡¼¥É¤è¤êÁ°)¤Ë + (setq howm-ref-header ">>") ; goto ¥ê¥ó¥¯ + (setq howm-keyword-header "<<") ; come-from ¥ê¥ó¥¯ + (setq howm-reminder-old-format t) ; ¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°Êѹ¹¤ò¤·¤Ê¤¤ + (setq howm-date-separator "/") ; ÆüÉÕ¤Ï 2003/10/21 ¤Î·Á¼° + (setq howm-menu-keyword-regexp nil) ; ¡Ö%¡û¡û%¡×¤ò menu-mode ¤Ë¤·¤Ê¤¤ + (setq howm-menu-top nil) ; C-c , , ¤Ç¡Ö<< %menu%¡×¤ò³«¤«¤Ê¤¤ + (setq howm-menu-file "menu.howm") ; C-c , , ¤Ç menu.howm ¤ò³«¤¯ + (setq howm-use-color nil) ; << ¤Ê¤É¤Ë¿§¤ò¤Ä¤±¤Ê¤¤ + (setq howm-menu-name-format " *howmM:%s*") ; ¥á¥Ë¥å¡¼¤Ï±£¤· buffer + (setq howm-abbreviate-file-name nil) ; ¥Õ¥¡¥¤¥ë̾ɽµ­¤Ï full path + ;; µì¥Ç¥Õ¥©¥ë¥ÈÀßÄê + (setq howm-file-name-format "%Y/%m/%Y_%m_%d.howm") ; 1 Æü 1 ¥Õ¥¡¥¤¥ë + (add-to-list 'auto-mode-alist '("\\.howm$" . fundamental-mode)) + (setq howm-default-key-table + '( + ;; ("key" func list-mode-p global-p) + ("r" howm-initialize-buffer) + ("l" howm-list-recent t t) + ("a" howm-list-all t t) + ("g" howm-list-grep t t) + ("m" howm-list-migemo t t) + ("t" howm-list-todo t t) + ("y" howm-list-schedule t t) + ("c" howm-create t t) + ("," howm-menu t t) + ("d" howm-dup) + ("i" howm-insert-keyword) + ("D" howm-insert-date) + ("K" howm-keyword-to-kill-ring t t) + ("n" action-lock-goto-next-link) + ("p" action-lock-goto-previous-link) + ("Q" howm-kill-all t t) + )) + (when (featurep 'howm-mode) (howm-set-keymap)) + * Ʊº­¥Ä¡¼¥ë¤Î»ÈÍÑ»þ¤Ï, ¼¡¤Î¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤ë + * howm2 -comefrom='<<' -goto='>>' + * hcal.rb -format=old -date_sep=/ + * tag2plan -format=old -date_sep=/ + +== v0.8.x, v0.9.x ¤«¤é¤Î°Ü¹ÔÎã + +* ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤Î³¬Áز½¤Ë±þ¤¸¤Æ¡Ä + * ¿·ÂÎÀ©¤Ë°Ü¹Ô + * ²¿¤â¤·¤Ê¤¯¤Æ¤è¤¤. + * ¤ä¤ê¤¿¤±¤ì¤Ð, ~/howm/2003/09/ ¤Ê¤É¤òºî¤Ã¤Æµì¥á¥â¤ò°ÜÆ°¤·¤Æ¤â¤è¤¤ + * µìÂÎÀ©¤ò´Ó¤¯: .emacs ¤Ë + (setq howm-file-name-format "%Y_%m_%d.howm") + +== v0.7.x ¤«¤é¤Î°Ü¹ÔÎã + +* ¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°Êѹ¹¤Ëȼ¤¤, ¼¡¤Î¥¹¥¯¥ê¥×¥È¤Ç¥á¥â¤òÊÑ´¹ + * ÊÑ´¹¥¹¥¯¥ê¥×¥È (~/kuzu.rb ¤È¤¹¤ë) + $d = '@\\[[0-9 :/]+\\]' + $_.gsub!(/(#$d) *!!!/){|s| "#$1! ¡ú¡ú"} + $_.gsub!(/(#$d) *!!/){|s| "#$1! ¡ú"} + $_.gsub!(/(#$d) *!/){|s| "#$1!"} + $_.gsub!(/(#$d) *@@@/){|s| "#$1@ ¡ú¡ú"} + $_.gsub!(/(#$d) *@@/){|s| "#$1@ ¡ú"} + $_.gsub!(/(#$d) *@/){|s| "#$1@"} + $_.gsub!(/(#$d) *~~~/){|s| "#$1+ ¡ú¡ú"} + $_.gsub!(/(#$d) *~~/){|s| "#$1+ ¡ú"} + $_.gsub!(/(#$d) *~/){|s| "#$1+"} + END { + STDERR.print '.' + sleep 1 + } + * ÊÑ´¹¼ê½ç + cd ~/howm + ls *.howm | xargs -n 1 ruby -p -i.bak ~/kuzu.rb + (³Îǧ¸å, *.bak ¤ò¼Î¤Æ¤ë) + +== v0.6 °ÊÁ°¤«¤é¤Î°Ü¹ÔÎã + +* come-from ¤Î½ñ¼°Êѹ¹¤Ëȼ¤¤, °Ê²¼¤Î¤è¤¦¤Ë¥á¥â¤òÊÑ´¹ + cd ~/howm + ruby -p -i.bak -e '$_.sub! /^= /, "= << "; $_.sub! /^= << link$/, "= link"' *.howm + (³Îǧ¸å, *.bak ¤ò¼Î¤Æ¤ë) + * rd-memo ¤È¤Î¸ß´¹À­¤Î¤¿¤á¤Ë, ¡Ö= link¡×¤ÏÊÑ´¹¤·¤Ê¤¤ +* ¤µ¤é¤Ë, ¥Õ¥¡¥¤¥ë̾¤âÊѹ¹ + * ¿·Êý¼°¤Ë°Ü¤¹¾ì¹ç + * ¼¡¤Î¤è¤¦¤Ë¤·¤Æ, ¡Öcat ¢þ¢þ ¢þ¢þ > ¢þ¢þ¡×¤È¤¤¤¦¥³¥Þ¥ó¥ÉÎó¤òºîÀ® + cd ~/howm + ruby -e 'h=Hash::new []; ARGV.each{|f| f=~/^([0-9]+)-[0-9]+.*/ and h[$1] = h[$1] + [f]}; h.keys.sort.each{|k| puts "cat #{h[k].sort.join %! !} > #{k =~ /(....)(..)(..)/; %!#$1_#$2_#$3.howm!} && sleep 1"}' *.howm > howm_kuzu + * sleep 1 ¤Ï, ¥Õ¥¡¥¤¥ë¹¹¿·»þ¹ï½ç¤Ç¤Á¤ã¤ó¤Èʤ֤褦¤Ë + * howm_kuzu ¤ÎÆâÍƤò³Îǧ¤·, ÌäÂê¤Ê¤±¤ì¤Ð + cat howm_kuzu | /bin/sh + (³Îǧ¸å, 200*-*.howm ¤ò¼Î¤Æ¤ë) + * µìÊý¼°¤ò´Ó¤¯¾ì¹ç: ~/.emacs ¤Ë + (setq howm-file-name-format "%Y%m%d-%H%M%S.howm") ;; 1 ¥á¥â 1 ¥Õ¥¡¥¤¥ë + (setq howm-file-name-format "%Y%m%d-000000.howm") ;; 1 Æü 1 ¥Õ¥¡¥¤¥ë + += ¸Å¤¤¥«¥¹¥¿¥Þ¥¤¥ºË¡ + +== v1.2.3 ¤Î¥«¥¹¥¿¥Þ¥¤¥º [2005-05-08] + +~/.emacs (~/.emacs.el ¤«¤â)¤Ë, °Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯ + +* ¿§ + * <<< ¤Ê¤É¤Ë¿§¤ò¤Ä¤±¤Ê¤¤ + (setq howm-use-color nil) + * ¿§¤«¤¨: howm ¤Î¥í¡¼¥É¤è¤ê¸å¤Ë + (set-face-foreground 'howm-mode-keyword-face "red") ;; <<< + (set-face-foreground 'howm-mode-ref-face "magenta") ;; >>> + (set-face-background 'howm-mode-wiki-face "green") ;; [[]] ¤ÎÇØ·Ê + (set-face-background 'howm-mode-title-face "yellow") ;; = ¤ÎÇØ·Ê + (set-face-foreground 'action-lock-face "blue") ;; ²¼Àþʸ»ú + (set-face-underline 'action-lock-face t) ;; ²¼Àþ¤Ïʸ»ú¤ÈƱ¿§ (Emacs 21) + (set-face-underline 'action-lock-face "dark cyan") ;; ²¼Àþ (Emacs 21) + (set-face-foreground 'howm-menu-key-face "orange") ;; ¥á¥Ë¥å¡¼¤Î shortcut + * ¿§Ì¾¤Ï M-x list-colors-display »²¾È + * ÆâÍƥХåե¡¤Ë rd-mode ¤Ê¿§¤ò¤Ä¤±¤ë + ;; rd-mode.el ¤¬Æɤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤È¤¤¤¦Á°Äó¤Ç + (setq howm-view-contents-font-lock-keywords rd-font-lock-keywords) + +* ÊØÍø¥­¡¼ + * ¡Ö¥«¥¿¥«¥Ê¡×¤Ç¥á¥Ë¥å¡¼, ¡ÖCtrl-¥«¥¿¥«¥Ê¡×¤Ç¿·µ¬¥á¥â + (define-key global-map [katakana] 'howm-menu) + (define-key global-map [(control katakana)] 'howm-create) + * [tab]([alt]-[tab])¤Ç¼¡(Á°)¤Î¥ê¥ó¥¯¤Ë°ÜÆ° + (define-key howm-mode-map [tab] 'action-lock-goto-next-link) + (define-key howm-mode-map [(meta tab)] 'action-lock-goto-previous-link) + * ËÜÍè¤Î tab ¤Ï C-i ¤Ç + +* Êݸ¾ì½ê + * ¥á¥â¤ò ~/memo/ ¤ËÃÖ¤¯ + (setq howm-directory "~/memo/") + * ¥á¥âÃÖ¤­¾ì/ǯ/ǯ·îÆü-»þʬÉÃ.howm ¤Ë + (setq howm-file-name-format "%Y/%Y%m%d-%H%M%S.howm") + * ¥Õ¥¡¥¤¥ë̾¼«ÂΤËǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤Ê¤¤¤È, filter-by-date ¤¬µ¡Ç½¤·¤Ê¤¤ + * 1 Æü 1 ¥Õ¥¡¥¤¥ë (¥á¥âÃÖ¤­¾ì/ǯ/·î/ǯ_·î_Æü.howm ¤Ë) + (setq howm-file-name-format "%Y/%m/%Y_%m_%d.howm") + * ÉÔ´°Á´¤ÊÅÀ¤¬¤¢¤ê¤Þ¤¹. ²æËý¤Ç¤­¤ë¿Í¤À¤±¤É¤¦¤¾ + * ¥á¥âñ°Ì¤Ç¤¢¤ë¤Ù¤­½èÍý¤Î°ìÉô¤¬¥Õ¥¡¥¤¥ëñ°Ì¤Ë + (¥¿¥¤¥È¥ëɽ¼¨, ¹¹¿·½ç°ìÍ÷, ÆâÍƤǤιʤꤳ¤ß, uniq) + * ¥á¥Ë¥å¡¼¤Ë°Ê²¼¤Î¥Ü¥¿¥ó¤ò½ñ¤¤¤Æ¤ª¤¯¤ÈÊØÍø + * [º£Æü] ¢ª º£Æü¤Î¥á¥â + * [ºòÆü] ¢ª ºòÆü¤Î¥á¥â + * ¥­¡¼¥ï¡¼¥É°ìÍ÷¤ò ~/howm/.howm-keys ¤ËÃÖ¤¯ + (setq howm-keyword-file "~/howm/.howm-keys") ;; ¥Ç¥Õ¥©¥ë¥È¤Ï ~/.howm-keys + * ¤³¤¦¤·¤Æ¤ª¤±¤Ð, °ã¤¦¥Þ¥·¥ó¤Ç¤â ~/howm/ °Ê²¼¤Î¥³¥Ô¡¼¤À¤±¤ÇºÑ¤à. + * ¤¹¤Ç¤Ë½ñ¤¤¤¿¥á¥â¤¬¤¢¤ë¤Ê¤é, mv ~/.howm-keys ~/howm/ ¤ò¤·¤Æ¤ª¤¯¤«, + ºÆ¹½ÃÛ¤¹¤ë(¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>))). + * ¥Ç¥á¥ê¥Ã¥È: ¸¡º÷¤¬ÃÙ¤¯¤Ê¤ë? (Âδ¶¤Ç¤­¤ë¤Û¤É¤«¤Ï, ¤ä¤Ã¤Æ¤ß¤Ê¤¤¤ÈÉÔÌÀ) + +* °ìÍ÷ + * ¥¿¥¤¥È¥ë°ìÍ÷¤òɽ¼¨ + (setq howm-list-title t) + * ¥¿¥¤¥È¥ë¤ò½ñ¤«¤Ê¤¤¤È¤­¤Ç¤â, ¥¿¥¤¥È¥ëÍó¡Ö= ¡×¤Ï»Ä¤·¤Æ¤ª¤¯Êý¤¬°ÂÁ´¤Ç¤·¤ç¤¦ + (Âкö¤Ï¤·¤¿¤Ä¤â¤ê¤Ç¤¹¤¬¡Ä) + * ¡û¡û¤Î¤È¤­¤À¤±¥¿¥¤¥È¥ëɽ¼¨ + (setq howm-list-title + ;; ¢­¤Ë½ñ¤¤¤¿¥³¥Þ¥ó¥É¤Ç¤À¤±¥¿¥¤¥È¥ëɽ¼¨ + '(howm-list-all howm-list-recent + howm-list-grep howm-list-grep-fixed howm-list-migemo + howm-list-related howm-list-around + howm-keyword-search)) ;; ¤³¤ì¤Ï come-from ¥ê¥ó¥¯¡¦goto ¥ê¥ó¥¯ + * ´Ø¿ô¤ò»ØÄꤹ¤ë¤³¤È¤â²Äǽ + (setq howm-list-title (lambda () ¡Ä)) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤ÈÆâÍƥХåե¡¤ò²£¤Ëʤ٤ë + (setq howm-view-split-horizontally t) + * ²£¤Ëʤ٤뤱¤É, °ìö C-x 1 ¤·¤¿¸å¤Ï½Ä¤ËÊÂ¤Ö + (setq howm-view-split-horizontally 'hoge) ;; t, nil °Ê³°¤ò»ØÄê + * ï¤â»È¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ç¤³¤Îµ¡Ç½¤Ïºï½ü [2008-10-07] + * [return] ¤Ç¥Õ¥¡¥¤¥ë¤ò³«¤¯ºÝ, °ìÍ÷¥Ð¥Ã¥Õ¥¡¤ò¾Ã¤¹. + C-u ¤·¤Æ [return] ¤À¤È, °ìÍ÷¤ò»Ä¤¹. + (setq howm-view-summary-persistent nil) + * °ìÍ÷¤Ç¡Ö!¡×¤·¤¿¤È¤­¤Î½é´ü¥³¥Þ¥ó¥É¤òÊѹ¹ + (setq howm-view-summary-shell-last-file "_FILE_") + (setq howm-view-summary-shell-hist + '("mv _FILE_ ~/gomi" "touch _FILE_" "ls -l _FILE_")) + * ½é´ü¥³¥Þ¥ó¥É¤Ï¡Ömv ¥Õ¥¡¥¤¥ë̾ ~/gomi¡× + * M-p ²¡¤·¤Æ¤¤¤¯¤È, ¡Ötouch ¥Õ¥¡¥¤¥ë̾¡×¤ä¡Öls -l ¥Õ¥¡¥¤¥ë̾¡× + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¡¦ÆâÍƥХåե¡¤ò¸¡º÷¤´¤È¤Ë¸ÄÊ̤˺î¤ë + (setq howm-view-summary-name "*howmS:%s*") + (setq howm-view-contents-name "*howmC:%s*") + * °ìÍ÷¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÆüÉÕ½ç¤Ë + (setq howm-list-normalizer 'howm-view-sort-by-reverse-date) + * C-x 1 ¸å¤Ï¾¡¼ê¤Ë¥Õ¥ì¡¼¥à¤òʬ³ä¤·¤Ê¤¤ (SPC ¤ÇºÆʬ³ä) + (setq howm-view-keep-one-window t) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¿§¤Ä¤±Îã + (setq howm-view-summary-font-lock-keywords '(("^2003" . 'highlight))) + * foo ¤ò¸¡º÷¤·¤Æ¤â [[foo]] ¤ò¾å°Ì¤Ë¤·¤Ê¤¤ + (setq howm-list-prefer-wiki nil) + +* ¥á¥Ë¥å¡¼ + * ¥á¥Ë¥å¡¼¤ÎÊѹ¹ + * ¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ [menu ÊÔ½¸] ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼«Í³¤ËÊÔ½¸ + * ¤è¤¯³«¤¯¥á¥â¤Ø¤Î goto ¥ê¥ó¥¯¤Ê¤É¤ò½ñ¤¤¤Æ¤ª¤±¤ÐÊØÍø¤«¤È + * ¥á¥Ë¥å¡¼¤ÎËöÈø¤Ë¡ÖR[menu ¹¹¿·] E[menu ÊÔ½¸]¡×¤ò¤Ä¤±¤ë + (setq howm-menu-footer "\n-- \n%\"R\"[menu ¹¹¿·] %\"E\"[menu ÊÔ½¸]") + * ¥á¥Ë¥å¡¼¤Ï±£¤·¥Ð¥Ã¥Õ¥¡¤Ë + (setq howm-menu-name-format " *howmM:%s*") + * ¢¨ Emacs ƦÃμ± + * ¶õÇò¤Ç»Ï¤Þ¤ë¥Ð¥Ã¥Õ¥¡Ì¾¤Ï, C-x b ¤ä C-x C-b ¤Ç½Ð¤Æ¤³¤Ê¤¤ + * ¤½¤ó¤Ê¥Ð¥Ã¥Õ¥¡¤ò¸«¤ë¤Ë¤Ï, C-x b C-q SPC SPC + * ¥á¥Ë¥å¡¼¤ò¥á¥â°·¤¤¤·¤Ê¤¤ (¥á¥â°ìÍ÷¡¦¸¡º÷¤ÎÂоݳ°¤Ë) + ;; mv ~/howm/0000-00-00-000000.howm ~/hoge/fuga/menu.howm ¤·¤È¤¤¤Æ¡Ä + (setq howm-menu-file "~/hoge/fuga/menu.howm") + * ͽÄêɽ¤Îɽ¼¨ÈÏ°Ï + (setq howm-menu-schedule-days-before 2) ;; ¡ûÆüÁ°¤«¤é + (setq howm-menu-schedule-days 7) ;; ¡ûÆü¸å¤Þ¤Ç + * todo ¤Îɽ¼¨·ï¿ô + (setq howm-menu-todo-num 50) + +* ¤â¤Ã¤È·Ú¤¯ (cf. ((<ÉÙ¹ëŪ¥×¥í¥°¥é¥ß¥ó¥°|URL:http://pitecan.com/fugo.html>))) + * ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤òľÀÜ»ØÄê + (setq howm-menu-file "0000-00-00-000000.howm") + * ¥á¥Ë¥å¡¼¤ò 2 »þ´Ö¥­¥ã¥Ã¥·¥å + (setq howm-menu-expiry-hours 2) + * ¤«¤ï¤ê¤Ë, ¥á¥âÊݸ»þ¤Ë¥á¥Ë¥å¡¼¤ò¼«Æ°¹¹¿·¤¹¤ë¤è¤¦¤Ë¤Ê¤ë(¤«¤Ê¤ê½Å¤¤). + ¤½¤ì¤â»ß¤á¤ë¤Ê¤é + (setq howm-menu-refresh-after-save nil) + * ¥»¡¼¥Ö¸å¤Î²¼Àþ°ú¤­Ä¾¤·¤ò¤·¤Ê¤¤ + (setq howm-refresh-after-save nil) + * °ìÍ÷¤Ç¤Î¥¿¥¤¥È¥ëɽ¼¨¤òÍÞÀ© + ;; ¡ÖºÇ¶á¤Î¡×¤Þ¤¿¤Ï¡ÖÁ°¸å¤Î¡×¥á¥â°ìÍ÷»þ¤Ë¸Â¤ë + (setq howm-list-title '(howm-list-recent howm-list-around)) + ;; °ìÀÚɽ¼¨¤»¤º + ;(setq howm-list-title 'nil) + * ¸¡º÷¤Ë grep ¤ò»È¤¦ + (setq howm-view-use-grep t) + * ¤³¤Î¾ì¹ç, ¥í¡¼¥Þ»ú¸¡º÷¤ò»È¤¦¤Ë¤Ï migemo-server ¤òÆ°¤«¤·¤Æ¤ª¤¯É¬Íפ¢¤ê + * GNU grep ¤¸¤ã¤Ê¤¤¤È¤À¤á¤«¤â. -H ¤È¤« -r ¤È¤« -e ¤È¤«¡Ä + * grep ¥³¥Þ¥ó¥É̾¤òÊѹ¹¤¹¤ë¤Ê¤é¡Ä + (setq howm-view-grep-command "egrep") + (setq howm-view-fgrep-command "fgrep") + * egrep, fgrep ¤¬¤Ê¤¤¤±¤É GNU grep ¤Ï¤¢¤ë, ¤È¤¤¤¦´Ä¶­(¥ê¥Ê¥¶¥¦?)¤Ê¤é¡Ä + (setq howm-view-grep-command "grep") + (setq howm-view-fgrep-command "grep") + (setq howm-view-grep-extended-option "-E") + (setq howm-view-grep-fixed-option "-F") + +* ³°Éô viewer + * ¥Õ¥¡¥¤¥ë̾(Àµµ¬É½¸½)¤È viewer ¤ÎÂбþ¤ò»ØÄê (~/.mailcap ¤è¤êÍ¥À褷¤Þ¤¹) + (setq howm-view-external-viewer-assoc + '( + ("[.]\\(jpg\\|gif\\|png\\)$" . "display %s") + ("[.]dvi$" . "xdvi %s") + )) + * ¡Ö³°Éô viewer ¤ò»È¤ï¤Ê¤¤ mime-type¡×¤Î»ØÄê (Àµµ¬É½¸½) + (setq howm-view-open-by-myself '("text/.*" "application/emacs-lisp")) + * ~/.mime-types ¤ä ~/.mailcap ¤ò»²¾È¤·¤Ê¤¤ + (setq howm-view-use-mailcap nil) + * ¤³¤ÎÀßÄê¤ò¤·¤Æ¤Ê¤¯¤Æ¤â, ¥é¥¤¥Ö¥é¥ê¤Î load ¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤Ï»²¾È¤·¤Þ¤»¤ó + * emacs-21.2.1 ÉÕ°¤Î gnus/mailcap ¤Ë°Í¸ + * ¸Å¤¤ FLIM ¤Ï conflict? + +* ¸¡º÷ + * ¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤âõ¤¹ + (setq howm-excluded-file-regexp + "^[.][.]\\|[~#]$\\|\\.bak$\\|/CVS/") + * Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲà + * Á´Ê¸¸¡º÷¤Î¤È¤­, ¥á¥â¤Ë²Ã¤¨¤Æ»ØÄê¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤âºÆµ¢Åª¤Ëõ¤¹ + (setq howm-search-path '("~/Mail" "~/News")) + (setq howm-search-other-dir t) ;; ²¼µ­¤Î¥È¥°¥ë¤Î½é´üÃÍ (t ¤« nil) + * M-x howm-toggle-search-other-dir ¤Ç, + ¾åµ­¥Ç¥£¥ì¥¯¥È¥ê¤ò¸¡º÷Âоݤˤ¹¤ë¤«¤·¤Ê¤¤¤«¥È¥°¥ë + * ¥­¡¼¥Ð¥¤¥ó¥É¤·¤¿¤±¤ì¤Ð³Æ¼«¤Ç (¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ÌϺ÷Ãæ¤Ë¤Ä¤­¡Ä) + * ¸¡º÷¤Ë»È¤¦´Ø¿ô¤ò¤¹¤ê¤«¤¨ + ;; t ¤Ê¤é grep ¥³¥Þ¥ó¥É, nil ¤Ê¤é¥Ç¥Õ¥©¥ë¥È¤Î elisp ´Ø¿ô¤ò»ÈÍÑ. + ;; ¤³¤ì°Ê³°¤Ê¤é, »ØÄꤷ¤¿´Ø¿ô¤ò»ÈÍÑ. + (setq howm-view-use-grep #'my-grep-function) + (defun my-grep-function (str file-list + &optional fixed-p force-case-fold) + "STR ¤ò FILE-LIST (¥Õ¥¡¥¤¥ë̾¤Î¥ê¥¹¥È)¤«¤é¸¡º÷. + Ìá¤êÃͤÏ, ((¥Õ¥¡¥¤¥ë̾ ¹ÔÈÖ¹æ ¹ÔÆâÍÆ) (¥Õ¥¡¥¤¥ë̾ ¹ÔÈÖ¹æ ¹ÔÆâÍÆ) ¡Ä) + ¤È¤¤¤¦¥ê¥¹¥È. + FIXED-P ¤¬¿¿¤Ê¤éʸ»úÎó STR ¤ò, µ¶¤Ê¤éÀµµ¬É½¸½ STR ¤ò¸¡º÷¤¹¤ë. + STR ¤¬Âçʸ»ú¤ò´Þ¤Þ¤Ê¤¤¤È¤­¤ä, ´Þ¤ó¤Ç¤â FORCE-CASE-FOLD ¤¬¿¿¤Î¤È¤­¤Ï, + Âçʸ»ú¾®Ê¸»ú¤Î°ã¤¤¤ò̵»ë¤¹¤ë." + ¡Ä) + * howm ¤Ç foo ¤ò¸¡º÷¤·¤¿¸å¤Ï, C-s C-s ¤â foo ¤Î¸¡º÷¤Ë + (setq howm-view-update-search-ring t) + * Àµµ¬É½¸½¤Ï C-u C-s C-s ¤Ê¤Î¤ÇÃí°Õ + +* ̤Êݸ¤À¤í¤¦¤È°ÑºÙ¹½¤ï¤º, howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¶¯À©ºï½ü¤¹¤ë¥³¥Þ¥ó¥É + (¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó. »È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤.) + * C-u C-c , Q + * ¥á¥Ë¥å¡¼¤Ë½ñ¤¯¤Ê¤é [¶¯À©Á´¾Ã] + * ʪÁû¤Ê¤Î¤Ç, ¢­¤ò½ñ¤¤¤È¤«¤Ê¤¤¤È̵¸ú + (setq howm-kill-all-enable-force t) + +* ¥Æ¥ó¥×¥ì¡¼¥È¤ÎÊѹ¹Îã + * ¤³¤ó¤Ê¤Õ¤¦¤Ë + Subject: ¥¿¥¤¥È¥ë¥Ð¡¼¤Ë»þ·×¤òɽ¼¨ ¢«Ä¾Á°¤Î¥ê¡¼¥¸¥ç¥ó¤ÎÆâÍÆ + Date: Thu, 12 Sep 2002 15:45:59 +0900 + In-Reply-To: ¢«Ä¾Á°¥Õ¥¡¥¤¥ë + + ¢£ ¢« ¥«¡¼¥½¥ë + * ~/.emacs ¤Ë + (setq howm-template "Subject: %title\nDate: %date\n%file\n%cursor") + (setq howm-template-date-format "%a, %d %b %Y %H:%M:%S %z") + (setq howm-template-file-format "In-Reply-To: <%s>\n") + * ¥Æ¥ó¥×¥ì¡¼¥È¤òÊ£¿ô»ØÄê + ;; C-u 2 C-c , c ¢ª 2 ÈÖÌܤΥƥó¥×¥ì¡¼¥È¤Ç¿·µ¬¥á¥â + ;; ¥á¥Ë¥å¡¼¤«¤é C-u 2 c ¤Ç¤âƱÍÍ + (setq howm-template + '("= %title%cursor\n%date %file\n\n" "%date: %title%cursor")) + * ¤Ä¤¤¤Ç¤Ë, howm-template ¤ÎÃͤ¬´Ø¿ô¤Ê¤é + ¡Öuniversal-argument ¤ò°ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö¡×¤Ã¤Æ¤¤¤¦¤Î¤â»Å¹þ¤ß¤Þ¤·¤¿ + +* ½ñ¼°¤ÎÊѹ¹Îã (howm-*.el ¤Î load ¤è¤êÁ°¤Ë) + * ¥¿¥¤¥È¥ë(¥á¥â¶èÀÚ¤ê) @@@ ¡Ä + (setq howm-view-title-header "@@@") + * goto ¥ê¥ó¥¯ ==>¡Ä, come-from ¥ê¥ó¥¯ <==¡Ä + (setq howm-ref-header "==>") + (setq howm-keyword-header "<==") + * goto ¥ê¥ó¥¯ ((¡ã¡Ä¡ä)), come-from ¥ê¥ó¥¯ ((¡§¡Ä¡§)) + ;; ¡ã¡ä¡§¤ÏȾ³Ñ¤Ëľ¤·¤Æ¤¯¤À¤µ¤¤ + (setq howm-ref-regexp "((¡ã\\([^¡ä\r\n]+\\)¡ä))") + (setq howm-ref-regexp-pos 1) + (setq howm-keyword-format "((¡§%s¡§))") + (setq howm-keyword-regexp "\\(((¡§\\)\\([^¡§\r\n]+\\)¡§))") + (setq howm-keyword-regexp-hilit-pos 1) ;; ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×ÍÑ + (setq howm-keyword-regexp-pos 2) + (setq howm-keyword-regexp-format "%s") ;; M-x describe-variable »²¾È + * wiki É÷¥ê¥ó¥¯ [[hoge]] ¤Î²¼Àþ¤ò¡Ö]]¡×¤À¤±¤Ë + * ¡Ö<<< hoge¡×¤ÎºîÀ®¸å¤Ï, ¡Öhoge¡×¤Ë¤â²¼Àþ + (setq howm-wiki-regexp "\\[\\[\\([^]\r\n]+\\)\\(\\]\\]\\)") + (setq howm-wiki-regexp-hilit-pos 2) + (setq howm-wiki-regexp-pos 1) + +* ¤³¤Þ¤´¤Þ + * <<< ¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤ + (setq howm-keyword-case-fold-search t) + * ÆüÉÕÆþÎÏ(C-c , d ¤Þ¤¿¤Ï [Æü¢­])¤Çǯ¤ä·î¤òά¤·¤¿¤é, ¡Ö̤Íè¡×¤È²ò¼á + (setq howm-insert-date-future t) + * ¿·µ¬ÆþÎÏ»þ¤Î¤ß¤Ç¤¹. ¡Ö[2003-12-27]¡×¾å¤Ç RET ¤·¤¿¤È¤­¤ÎÆ°ºî¤Ï½¾Íè¤É¤ª¤ê. + * ¡Öhttp://¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, URL ¤ò kill-ring ¤Ø + (setq action-lock-no-browser t) + +* ͽÄêɽ¡¦todo °ìÍ÷ + * ºÑ¹àÌܤòɽ¼¨¤·¤Ê¤¤ + (setq howm-schedule-types "[!@]") ;; ͽÄêɽ + (setq howm-todo-types "[-+~!]") ;; todo °ìÍ÷ + * ¥ê¥Þ¥¤¥ó¥Àµ­¹æ(!+-~@.)¤«¤é RET °ìȯ¤Ç¡ÖºÑ¡×¤Ë + (setq howm-action-lock-reminder-done-default "") + * ¤³¤Î¾ì¹ç, C-u RET ¤Ç½¾Íè¤ÎÆ°ºî (¥­¥ã¥ó¥»¥ë, µ­¹æÊѹ¹, ¡Ä) + * ͽÄêɽ¡¦todo °ìÍ÷¤«¤é¥ê¥Þ¥¤¥ó¥Àµ­¹æ¾å¤ÇľÀÜ RET ¤·¤¿¤È¤­, + ᤫ¤ìÀè¥Ð¥Ã¥Õ¥¡¤ò¼«Æ° save + (setq howm-action-lock-forward-save-buffer t) + * ¡Ö¼«Æ° save¡×¤ËÄñ¹³¤Ê¤¤Êý¤À¤±¤É¤¦¤¾ + * ¼êÆ°¤Ç C-x s (̤Êݸ¥Ð¥Ã¥Õ¥¡¤¿¤Á¤ò save)¤Ê¤ê¤¹¤ëÊý¤¬ÀµÆ»¤«¤È + * ÊÝα¤ÎÉâÄÀÈÏ°Ï + (setq howm-todo-priority-defer-init -14) ;; ½é´üÃÍ = ²¼¸Â + (setq howm-todo-priority-defer-peak 0) ;; ¾å¸Â + * !+-~. ¤Î½ÜÅ٤Υ«¥¹¥¿¥Þ¥¤¥º + * Îã: ¥á¥Ë¥å¡¼¤Ç, ¡ÖÀøÉúÃæ¤ÏÈóɽ¼¨¡×¡ÖºÑ¤Ïɽ¼¨¡× + (setq howm-menu-todo-priority -50000) + (setq howm-todo-priority-done-bottom -44444) + * howm-todo-priority-normal-bottom Åù. ¥½¡¼¥¹(howm-reminder.el)»²¾È. + +* action-lock + * { } (¥È¥°¥ë¥¹¥¤¥Ã¥Á)¤ÎÊѹ¹ + ;; howm ¤Î load Á°¤Ë + (setq action-lock-switch-default '("{ }" "{*}" "{-}")) ;; ²¿¸Ä¤Ç¤â + * {_} (̤½èÍý)¤ÎÊѹ¹ + (setq howm-dtime-format "[%a %b %d %H:%M:%S %Y]") ;; {_} + (setq howm-template-date-format "[%Y-%m-%d %H:%M]") ;; ¥Æ¥ó¥×¥ì¡¼¥È + * ¡Öfile://¡Ä¡×¤ä¡Öhttp://¡Ä¡×¤ÎÊѹ¹ (¤Þ¤·¤ÊÀßÄêÊ罸) + (()) + ;; howm (Àµ³Î¤Ë¤Ï action-lock.el) ¤Î¥í¡¼¥É¤è¤êÁ°¤Ë. + ;; ¡¦file://¡Ä + (setq action-lock-open-regexp + "\\") + (setq action-lock-open-regexp-pos 2) ;; 2 ¸ÄÌܤΡÖ\\(¡Ä\\)¡×¤¬¥Õ¥¡¥¤¥ë̾ + ;; ¡¦http://¡Ä + (setq action-lock-browse-regexp + "\\<\\([htp]\\{3,5\\}s?\\|ftp\\)://\\([-!@#$%^&*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&*()_+|=:~/?a-zA-Z0-9]+\\)\\>" + (setq action-lock-browse-regexp-pos 0) ;; ¥Þ¥Ã¥Á¤·¤¿Á´ÂΤ¬ URL + * action-lock ÄɲÃÎã: + ¡ÖMessage-ID: ¡Ä¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, ³ºÅö¥á¡¼¥ë¤ò namazu ¤Ç¸¡º÷ + ;; howm ¤ò load ¤·¤¿¸å¤Ë + (defun my-howm-search-message-id (id) + (message "Searching...") + (let* ((query (format "+message-id:%s" id)) + (args `("-l" "-n" "1" ,query "/home/hoge/NMZ/Mail")) + (found (car (howm-call-process "namazu" args)))) + (if found + (progn + (find-file found) + (re-search-forward "^$" nil t) + (message "Done.")) + (message "No match.")))) + (setq action-lock-default-rules + (cons (action-lock-general 'my-howm-search-message-id + "Message-[Ii][Dd]: \\(.*\\)$" + 1) + action-lock-default-rules)) + +* ¥á¥Ë¥å¡¼¤ò¹¹¿·¤¹¤ë¤¿¤Ó¤Ë, ¥«¥ì¥ó¥À¡¼¤Ø¤Î export ¤â¹¹¿· (¢ª((<³°Éô¥Ä¡¼¥ë>))) + (defun my-howm-menu-hook () + (shell-command "tag2plan ~/howm/*/*/*.howm > ~/.dayplan_tag &") + (switch-to-buffer howm-menu-name)) + (add-hook 'howm-menu-hook 'my-howm-menu-hook) + +* (())¤ò»È¤¦¾ì¹ç: + ((<"¹ÔƬ¤Î * ¤Ç¥¨¥ó¥È¥ê¤Î³«ÊĤ¬¤Ç¤­¤ë¤è¤¦¤Ë"|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/237-238n>)) + +* ¤ª¤Þ¤± + (setq howm-congrats-format + '( + "%s¥­¥¿¨¬¨¬¨¬¨¬¨¬(¡¬¢Ï¡¬)¨¬¨¬¨¬¨¬¨¬!!!!" + "(¡¦¢Ï¡¦) %s!" + "¡Ê¡ë§¥¡ë)%s¡©" + "¡Ê¡¡¡­_¡µ`¡Ë¡ã¡¡%s" + ;; ¡Ä°Ê²¼Î¬¡Ä + )) + +* ¤â¤Ã¤È¤¤¤í¤¤¤í¤¤¤¸¤ë¤Ë¤Ï, *.el ËÁƬ¤ò»²¾È + += ¸Å¤¤»²¹Í¥ê¥ó¥¯ + +* (()): + web ¤Çï¤Ç¤âÊÔ½¸¡Ü¤ª¼ê·Ú¥ê¥ó¥¯¡Ü¤ª¼ê·Ú¥Õ¥©¡¼¥Þ¥Ã¥È + * (()) + (EmacsWiki): Emacs ¤Ç¤Î Wiki + * (()) + (RWiki): RWiki ¤ò Emacs ¤«¤é»È¤¦°Æ + * (()) + (Áý°æ½ÓÇ·¤µ¤ó): PDA ¤Ç Wiki + * (()) + (SHIMADA Keiki ¤µ¤ó): ¥Ñ¥é¥°¥é¥Õ»Ø¸þ Wiki + * (()): + Wiki ¤Ë¤È¤é¤ï¤ì¤Ê¤¤¥¢¥¤¥Ç¥¢ËþºÜ + * ((<¡ÖÆüËÜȯ¤Î wiki ¥¯¥í¡¼¥ó¥ê¥¹¥È¡×|URL:http://www.yamdas.org/column/technique/clonelist.html>)) + ((<¡Ö2¡×|URL:http://www.yamdas.org/column/technique/clonelist2.html>)) + (yomoyomo ¤µ¤ó) +* HyperCard: card ·¿ database Ū visual script ¸À¸ì´Ä¶­??? + * ((<¡ÖHyperCard¡×|URL:http://www.hyuki.com/yukiwiki/wiki.cgi?HyperCard>)) + (YukiWiki) + * ((<¡ÖHyperCard¤Î¥ê¥¢¥ë¥¿¥¤¥àÀ­¡×|URL:http://web.archive.org/web/20040111061953/http://mwave.sppd.ne.jp/wiki/pukiwiki.php?%5b%5bHyperCard%A4%CE%A5%EA%A5%A2%A5%EB%A5%BF%A5%A4%A5%E0%C0%AD%5d%5d>)) + (SsPukiWiki) + * ((<¡Ö¥Ï¥¤¥Ñ¡¼¥«¡¼¥É¤Ç¤Ä¤¯¤ë¥ª¥Õ¥£¥¹¥·¥¹¥Æ¥à¡×|URL:http://www.kanzaki.com/hc/MacUser.html>)) + (¿ÀºêÀµ±Ñ¤µ¤ó) +* ¥á¥â¤È¤ê´Ä¶­ + * ʬÎऻ¤º, »þ´Ö½ç¤ÈÁ´Ê¸¸¡º÷¤Ç´ÉÍý + * (()) + (Áý°æ½ÓÇ·¤µ¤ó): + PDA ÈǤâ + * ChangeLog ¥á¥â + * ((<¡ÖUnix¤Î¥á¥âµ»½Ñ¡×|URL:http://namazu.org/~satoru/unimag/1/>)) + (¹âÎÓů¤µ¤ó) + * ((<¡Ö»ä¤Î ChangeLog ¥á¥â³èÍÑË¡¡×|URL:http://nais.to/~yto/doc/zb/0016.html>)) + (»³²¼Ã£Íº¤µ¤ó) + * ((<¡ÖChangeLog ¥á¥â¤ò»î¤·¤Æ¤ß¤è¤¦¡×|URL:http://pop-club.hp.infoseek.co.jp/emacs/changelog.html>)) + (°ÂÂðÀµÇ·¤µ¤ó) + * ((<ä·ϡ¦Ä¶äÂ|URL:http://www.google.com/search?q=%E2%C0%8Cn+%92%B4%96%AA>)) + (syo ¤µ¤ó): ChangeLog + Ìܼ¡¡¦Ê¤٤«¤¨¡¦hyper link ¤Ã¤Æ´¶¤¸? + * ¥¹¥¯¥é¥Ã¥×¥Ö¥Ã¥¯ + * ((<»æ 2001|URL:http://www.vector.co.jp/soft/win95/writing/se120325.html>)) + (ÍìÀ¾°ì¼þ¤µ¤ó): ÄêÈÖ + * (()) + (Ãæ¼Áï»Ë¤µ¤ó): ¤¹¤´¤¯¤¤¤¤¤é¤·¤¤ + * ¤½¤Î¾¤Î Emacs Íѥġ¼¥ë + * (()) + (John Heidemann ¤µ¤ó): + link ¤ÎÊØÍø¤µ¤òÃΤê¤Þ¤·¤¿ + * (()) + (À¾Ëܹ§»Ö¤µ¤ó) + * (()) + (¸¶ÅÄů¼£¤µ¤ó): MH ·Á¼° ¢ª ¥á¡¼¥ë¥ê¡¼¥À¤Ç¤âÆɤá¤ë + * (()) + (±±ÅÄÂó»Ë¤µ¤ó): ¤¤¤í¤¤¤íÊݸ¥á¥Ë¥å¡¼ + * rd-memo + (ÀÛºî. ³«È¯½ªÎ» ¢ª (())) + * ((<¡Ö¥³¥ó¥Ô¥å¡¼¥¿´Ä¶­¤Ç¤Î¥á¥â¡×|URL:http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%A5%B3%A5%F3%A5%D4%A5%E5%A1%BC%A5%BF%B4%C4%B6%AD%A4%C7%A4%CE%A5%E1%A5%E2>)) + (Tosh¤µ¤ó): Wiki ¤ËÃíÌܤ·¤¿¤­¤Ã¤«¤± + * howm ´ØÏ¢ + * °Ü¿¢ + * (()) + (¼·Åç¸ù°ì¤µ¤ó) + ((<¡Ü¦Á|URL:http://www.google.com/search?q=vim+howm+%82%AD%82%D3%82%F1>)): vim ÈÇ + * (()) + (kimura ¤µ¤ó)¤È + (()) + (deecay ¤µ¤ó): xyzzy ÈÇ + * (()) + (Mr.M ¤µ¤ó) + ((<¡Ü¦Á|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HideMaru>)): ½¨´ÝÈÇ + * ÉâÄÀ¼° todo ¥ê¥¹¥È + * (()) + (Gonza ¤µ¤ó): xyzzy ¥¨¥Ç¥£¥¿ÍѤÎ, Wiki + ChangeLog ¥á¥â + ¢ª ((<·Ð°Þ|URL:http://pc2.2ch.net/test/read.cgi/win/1053880433/n29-36>)) + * (()) + (°¾À¤ó): PHP ¤Ç¤Î¼ÂÁõ + * (()) + (¤Õ¤·¤Ï¤é¤«¤ó¤µ¤ó): ÉÕäµ¥Ù¡¼¥¹¤Î Wiki Ū¤Ê¤â¤Î. + ÉÕäµ¼«ÂΤ¬¾å²¼¤Ë°ÜÆ°. æ˹. + * (()) + (yatsu¤µ¤ó): Ajax ¤Ê Wiki + * (()) + (Nishimura¤µ¤ó): WebÍÑ¥Þ¥ë¥Á¥æ¡¼¥¶¥á¥â¥Ä¡¼¥ë. goto/come-from ¥ê¥ó¥¯¤¢¤ê. +* ¤ªµ¤¤Ë¤¤¤ê + * (()) + (OSHIRO Naoki ¤µ¤ó): ²Õ¾ò½ñ¤­»Ù±ç. ¤Ù¤¿¤Ü¤ì. + * (()) + (OSHIRO Naoki ¤µ¤ó): º£Æü¤ÎÆüÉÕ¤òÈ¿¼ÍŪ¤ËÆþÎÏ. ¤Ù¤¿¤Ü¤ì. + * (()) + (¹âÎÓů¤µ¤ó): ¥í¡¼¥Þ»ú¤òÆþ¤ì¤ë¤À¤±¤ÇÆüËܸì¤â¸¡º÷. °¦ÍÑ. + * (()) + (Tosh¤µ¤ó): ¤³¤Î README ¤Ç»È¤Ã¤Æ¤ë¥É¥­¥å¥á¥ó¥È¥Õ¥©¡¼¥Þ¥Ã¥È. °¦ÍÑ. + * (()) + (Naoto Morishima¤µ¤ó): GNU screen ¤Î Emacs ÈÇ. °¦ÍÑ. + +=end diff --git a/doc/README-j.html b/doc/README-j.html new file mode 100644 index 0000000..890bcf1 --- /dev/null +++ b/doc/README-j.html @@ -0,0 +1,1805 @@ + + + + +README.ja.rd + + +

howm (°ì¿Í¤ª¼ê·Ú Wiki ¤â¤É¤­)

+

$Id: README.ja.rd,v 1.337 2012-12-29 00:59:48 hira Exp $

+

Emacs ¤ÇÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó¤È¤ë¤¿¤á¤Î´Ä¶­¤Ç¤¹. +ʬÎൡǽ¤Ï¤¢¤¨¤Æ¤Ä¤±¤Þ¤»¤ó. +¤«¤ï¤ê¤Ë, Á´Ê¸¸¡º÷¤È¥á¥â´Ö¥ê¥ó¥¯¤¬¼ê·Ú¤Ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. +¼«Í³½ñ¼°¤Ê¤Î¤Ç²þ½¡¤âÉÔÍ× :-)

+

Ìܼ¡

+ +

»È¤¤Êý

+ +

¥á¥â¤ò½ñ¤³¤¦

+

(howm-mode)

+
    +
  • ¼ê½ç +
      +
    • C-c , , (M-x howm-menu) ¤Ç¥á¥Ë¥å¡¼¤ò½Ð¤·, + [¿·µ¬] ¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó ¢ª ¡Öº£Æü¤Î¥á¥â¡×¤ò³«¤¯ +
        +
      • ¤Þ¤¿¤Ï, ľÀÜ C-c , c (M-x howm-create)
      • +
    • +
    • ¤³¤ó¤Ê¥Æ¥ó¥×¥ì¡¼¥È¤¬É½¼¨¤µ¤ì¤ë

      +
      = ¢£ ¢«(¥¿¥¤¥È¥ëÍó)
      +[2002-09-16 20:08] >>> /home/hira/elisp/howm/howm-mode.el
      +¢¬(ºîÀ®Æü & ¤½¤ÎÁ°¤Ë¸«¤Æ¤¿¥Õ¥¡¥¤¥ë)
      +
        +
      • ¸«¤Æ¤¿¥Õ¥¡¥¤¥ë¤¬ÉÔÍפʤé, undo (C-x u ¤À¤« C-_ ¤À¤«) ¤Ç¾Ã¤¹
      • +
      • ¥Æ¥ó¥×¥ì¡¼¥È¼«ÂΤ¬ÉÔÍפʤé, ³¤±¤Æ¤â¤¦°ìÅÙ undo
      • +
    • +
    • ¹¥¤­¤Ê¤³¤È¤ò¹¥¤­¤Ê¤è¤¦¤Ë½ñ¤¯
    • +
    • ¤½¤ó¤À¤±.
    • +
  • +
  • ¥¿¥¤¥È¥ëÍó (1 ¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â) +
      +
    • ¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤È, foo ¤È bar ¤¬¥¿¥¤¥È¥ë

      +
      = foo
      +(¡Ä ¤Û¤²¤Û¤² ¡Ä)
      += bar
      +(¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä)
      +
        +
      • Ï¢·ëɽ¼¨¤Ç¤Ï, (¡Ä ¤Û¤²¤Û¤² ¡Ä) ¤ä (¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä) ¤¬¤Ò¤È¤«¤¿¤Þ¤ê
      • +
    • +
    • Àµ³Î¤Ê½ñ¼°¤Ï,

      +
      (¹ÔƬ)=(¶õÇò)(¥¿¥¤¥È¥ë)(¹ÔËö)
      +
    • +
    • ¥¿¥¤¥È¥ë¤Ê¤·¤Ç, ñ¤Ë¥á¥â¤Î¶èÀÚ¤ê¤È¤·¤Æ»È¤¦¤À¤±¤Ç¤â OK

      +
      (¡Ä ¤Û¤²¤Û¤² ¡Ä)
      += 
      +(¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä)
      += 
      +(¡Ä ¤Ø¤í¤Ø¤í ¡Ä)
    • +
  • +
  • ¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤È¥ê¥ó¥¯ +
      +
    • goto ¥ê¥ó¥¯: ¥Õ¥¡¥¤¥ë(¥Ç¥£¥ì¥¯¥È¥ê)̾ or ´Þ¤Þ¤ì¤ëʸ»úÎó

      +
      >>> ~/.emacs
      +>>> /usr/src
      +>>> ¤Û¤²¤Û¤²
      +
        +
      • ËÜʸÃæ¤Ë¡Ö¤Û¤²¤Û¤²¡×¤È¤¤¤¦Ê¸»úÎó¤ò´Þ¤à¥á¥â¤Ø¤Î¥ê¥ó¥¯
      • +
    • +
    • come-from ¥ê¥ó¥¯: ¾¤Î¥á¥â¤Ç¡Ö¤Õ¤¬¤Õ¤¬¡×¤È¤¤¤¦Ê¸»úÎ󤬽ФƤ­¤¿¤é, + ¤¼¤ó¤Ö¤³¤Î¥á¥â¤Ø¤Î¥ê¥ó¥¯¤Ë

      +
      <<< ¤Õ¤¬¤Õ¤¬
      +
    • +
    • Wiki É÷¥ê¥ó¥¯: goto ¤ÈƱ¤¸. ¤¿¤À¤·¡Ö<<< ¤Ø¤í¤Ø¤í¡×¤¬¤â¤·¤Ê¤±¤ì¤Ðºî¤ë.

      +
      [[¤Ø¤í¤Ø¤í]]
    • +
  • +
  • ¥ê¥ó¥¯¤Ë¤Ï²¼Àþ¤¬°ú¤«¤ì¤ë. ²¼Àþ¤Ë¥«¡¼¥½¥ë»ý¤Ã¤Æ¤Ã¤Æ¥ê¥¿¡¼¥ó¥­¡¼! +
      +
    • ³ºÅö¥Õ¥¡¥¤¥ë¤Î°ìÍ÷¤¬É½¼¨¤µ¤ì¤ë (¢ª¥á¥â¤òÆɤ⤦) +
        +
      • ¤¿¤È¤¨¤Ð, ¡Ö>>> emacs¡×¤Ê¤é¤³¤ó¤Ê°ìÍ÷

        +
        <<< emacs             ¢« ¤º¤Ð¤ê¤Î come-from Àë¸À¤ò¤·¤¿¥á¥â
        +<<< emacs lisp        ¢« ¡Öemacs¡×¤ò´Þ¤à come-from ¤òÀë¸À¤·¤¿¥á¥â
        +<<< ¼«ºî emacs lisp
        +grep, ruby, emacs ¤Î regexp ¤Î°ã¤¤ ¢« ËÜʸÃæ¤Ë¡Öemacs¡×¤ò´Þ¤à¥á¥â
        +emacs ÍѸ¡º÷¥Ä¡¼¥ë?[2001-08-13]       (¿·¤·¤¤½ç)
        +¡Ä
      • +
      • Æɤߤ¿¤¤¥á¥â¤Ë¥«¡¼¥½¥ë¤¢¤ï¤»¤Æ¥ê¥¿¡¼¥ó¥­¡¼! + ¢ª ¤½¤Î¥á¥â¤ò³«¤¯
      • +
    • +
    • ΢µ» +
        +
      • come-from ¥ê¥ó¥¯¤Î <<< ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×¤Ø¤Î¥ê¥ó¥¯ +
          +
        • Îã +
            +
          • ¡Ö¼«ºî¡×¡Ölisp¡×¤¬ come-from ¥­¡¼¥ï¡¼¥É¤Î¤È¤­
          • +
          • ¡Ö<<< ¼«ºî¤Î lisp¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó + ¢ª ¡Ö¼«ºî¡×¡Ölisp¡×¤ò´Þ¤à¥­¡¼¥ï¡¼¥É¤¬¥Ò¥Ã¥È
          • +
        • +
      • +
      • ¥á¥âÃæ¤Ë¡Ö<<< foo <<< bar <<< baz¡×¤È½ñ¤±¤Ð, ¡Öalias¡× +
          +
        • foo, bar, baz ¤Î¤É¤ì¤Ç¥ê¥¿¡¼¥ó¤òᤤ¤Æ¤â + ¡Öfoo ¤Þ¤¿¤Ï bar ¤Þ¤¿¤Ï baz¡×¤Î¸¡º÷¤Ë¤Ê¤ê¤Þ¤¹
        • +
        • Tips: ¸ß¤¤¤Ë¤¿¤°¤ê¤¿¤¤¤±¤É alias ¤Çº®¤¼¤ë¤Î¤Ï·ù, ¤È¤¤¤¦¾ì¹ç¤Ë¤Ï¡Ä +
            +
          • ¤É¤³¤«¤Ë¡Ö<<< foo¡×
          • +
          • Ê̤Τɤ³¤«¤Ë¡Öfoo <<< bar¡×
          • +
          • ¤³¤¦¤¹¤ì¤Ð, foo¡¦bar ¤É¤Á¤é¤Ç¸¡º÷¤·¤Æ¤â¡Öfoo <<< bar¡×¤¬¾å°Ì¤Ë
          • +
        • +
      • +
    • +
  • +
  • ¥ê¥ó¥¯¤Î¿¿Áê +
      +
    • ¼Â¤Ïñ¤Ë, ¡Ögrep ¤Õ¤¬¤Õ¤¬¡×¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤À¤Ã¤¿¤ê
    • +
    • come-from ¥ê¥ó¥¯¤Î¸ú²Ì +
        +
      • ¤³¤Î¥­¡¼¥ï¡¼¥É¤¬½Ð¤Æ¤­¤¿¤é, ¼«Æ°Åª¤Ë¥ê¥ó¥¯(= ¸¡º÷)¤Ë¤·¤Æ¤¯¤ì
      • +
      • ¤½¤Î¥­¡¼¥ï¡¼¥É¤ò¸¡º÷¤·¤¿¤È¤­¤Ï, ÀèƬ¤Ëɽ¼¨¤·¤Æ¤¯¤ì
      • +
    • +
    • come-from ¥ê¥ó¥¯¤Ï¡Ä +
        +
      • ¤Ê¤¯¤Æ¤â¤è¤·
      • +
      • 1 ¤Ä¤Î¥á¥âÆâ¤Ë 2 ¸Ä 3 ¸Ä¤È¤¢¤Ã¤Æ¤â¤è¤·
      • +
      • Ê̤Υá¥â¤ÈƱ¤¸¥­¡¼¥ï¡¼¥É¤¬¤«¤Ö¤Ã¤Æ¤â¤è¤·
      • +
      • ¥¿¥¤¥È¥ë¤È·ó¤Í¤ë¤Ê¤é,

        +
        = <<< ¤Õ¤¬¤Õ¤¬
      • +
    • +
    • come-from, goto ¤È¤â, Âçʸ»ú¾®Ê¸»ú¤ò¶èÊÌ (¢ª¥«¥¹¥¿¥Þ¥¤¥º)
    • +
    • ½ñ¼°¤ÏÊѹ¹²Ä (¢ª¥«¥¹¥¿¥Þ¥¤¥º)
    • +
    • °Ê²¼, come-from ¥ê¥ó¥¯¤Î¥­¡¼¥ï¡¼¥É¤òñ¤Ë¡Ö¥­¡¼¥ï¡¼¥É¡×¤Èɽµ­
    • +
  • +
  • action-lock +
      +
    • ¼öʸ¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼¤¿¤¿¤¯¤ÈËâˡȯư
    • +
    • { } ¤È½ñ¤¯¤È¡Ö¥È¥°¥ë¥¹¥¤¥Ã¥Á¡×. + ¤¿¤¿¤¯¤¿¤ó¤Ó¤Ë { } ¢ª {*} ¢ª {-} ¢ª { } ¢ª ¡Ä
    • +
    • {_} ¤È½ñ¤¯¤È¡Ö̤½èÍý¡×. + ¤¿¤¿¤±¤Ð {_} ¢ª [2002-09-13 02:31]
    • +
    • http://¡Ä ¢ª ¥Ö¥é¥¦¥¶µ¯Æ° +
        +
      • browse-url ¤ò»ÈÍÑ. ɬÍפʤéŬÅö¤ËÀßÄê.

        +
        (setq browse-url-browser-function 'browse-url-mozilla)
      • +
    • +
    • file://¡Ä ¢ª ¥Õ¥¡¥¤¥ë¤ò³«¤¯ +
        +
      • C-u RET ¤Ê¤éÁë¤òʬ³ä¤·¤Æ³«¤¯
      • +
    • +
    • [2002-10-18] ¤Î¤è¤¦¤ÊÆüÉÕ·Á¼°¤Î¾å¤Ç¥ê¥¿¡¼¥ó ¢ª minibuffer ¤Ç¡Ä +
        +
      • ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¤½¤ÎÆüÉÕ¤ò¸¡º÷ (goto link)
      • +
      • ¡Ö+17¡× ¢ª 17 Æü¸å¤ÎÆüÉդ˽ñ¤­¤«¤¨
      • +
      • ¡Ö20030921¡× ¢ª [2003-09-21] ¤Ë½ñ¤­¤«¤¨ +
          +
        • ǯ¤ä·î¤Ï¾Êά²Äǽ +
            +
          • ¡Ö6¡× ¢ª [2002-10-06]
          • +
          • ¡Ö803¡× ¢ª [2002-08-03]
          • +
          • ¡Ö31103¡× ¢ª [2003-11-03]
          • +
        • +
      • +
      • ¡Ö~20031030¡× ¢ª ¤½¤Î¹Ô¤ÎÊ£À½¤ò [2003-10-30] ʬ¤Þ¤ÇÁÞÆþ +
          +
        • ǯ¤ä·î¤Ï¾Êά²Äǽ (¾å¤ÈƱÍÍ)
        • +
        • ¡ÖEvery?¡×¤ËÂФ·¤Æ +
            +
          • ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ËèÆü
          • +
          • 3 ¢ª 3Æü¤´¤È
          • +
          • w ¢ª Ëè½µ
          • +
          • m ¢ª Ëè·î
          • +
          • y ¢ª Ëèǯ
          • +
        • +
      • +
      • ¡Ö.¡× ¢ª º£Æü¤ÎÆüÉդ˽ñ¤­¤«¤¨
      • +
      • ¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤Î [Æü¢­] ¤ÇÆüÉÕ·Á¼°¤òÆþÎϤǤ­¤Þ¤¹
      • +
    • +
    • ¥ê¥ó¥¯¤â¤³¤Î¼öʸ¤Î°ì¼ï +
        +
      • ¾¤Ë¤ª¤â¤·¤í¤¤¥¢¥¤¥Ç¥¢¤¢¤Ã¤¿¤é¶µ¤¨¤Æ¤¯¤À¤µ¤¤
      • +
    • +
  • +
  • ¥³¥Þ¥ó¥É (¡ú¤Ï howm-mode °Ê³°¤Ç¤â¾ï¤ËÍ­¸ú) +
      +
    • C-c , , ¢ª ¥á¥Ë¥å¡¼¤ò³«¤¯ ¡ú
    • +
    • ¥á¥Ë¥å¡¼ +
        +
      • ¥­¡¼ +
          +
        • [space] ¤È [backspace] ¢ª ¥¹¥¯¥í¡¼¥ë
        • +
        • TAB (M-TAB) ¢ª ¼¡(Á°)¤Î¹àÌܤØ
        • +
        • [¡û¡û] ¤ä > ¤Î¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼Â¹Ô (¥¸¥ã¥ó¥×)
        • +
        • ? ¢ª ¥Ø¥ë¥×
        • +
        • q ¢ª æ½Ð
        • +
      • +
      • ¥Ü¥¿¥ó [¡û¡û] (¥³¥Þ¥ó¥É) +
          +
        • ºîÀ® +
            +
          • [®µ­] (C-c , e) ¢ª ¤Ñ¤Ñ¤Ã¤È¥á¥â¤È¤ê (C-c C-c ¤ÇÊݸ) ¡ú
          • +
          • [¿·µ¬] (C-c , c) ¢ª ¿·µ¬¥á¥âºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë) ¡ú
          • +
          • [Ê£À½] (C-c , D) ¢ª ¸½¥á¥â¤òÊ£À½ (½»½êÏ¿¥Æ¥ó¥×¥ì¡¼¥È¤Ê¤É¤ÎÍÑÅÓ¤òÁÛÄê)
          • +
        • +
        • °ìÍ÷ +
            +
          • [°ìÍ÷] (C-c , a) ¢ª Á´¥á¥â¤Î°ìÍ÷ ¡ú
          • +
          • [ºÇ¶á] (C-c , l) ¢ª ºÇ¶á¤Î¥á¥â¤ÎÏ¢·ëɽ¼¨ ¡ú +
              +
            • (C-u 20 C-c , l) ¢ª ºÇ¶á 20 Æüʬ¤Î°ìÍ÷
            • +
          • +
          • [Á°¸å] (C-c , A) ¢ª Á°¸å¤Î¥á¥â (¸«¤Æ¤¿¥á¥â¤òÃæ¿´¤ËÁ´¥á¥â¤ÎÆüÉÕ½ç°ìÍ÷) +
              +
            • Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È
            • +
          • +
          • [ÍúÎò] (C-c , h) ¢ª ¸¡º÷ÍúÎò ¡ú
          • +
          • [ͽÄê] (C-c , y) ¢ª ͽÄêɽ: ¥ê¥Þ¥¤¥ó¥À»²¾È ¡ú
          • +
          • [Todo] (C-c , t) ¢ª todo °ìÍ÷: ¥ê¥Þ¥¤¥ó¥À»²¾È ¡ú
          • +
          • [Á´¥Ð] (C-c , b) ¢ª ¥Ð¥Ã¥Õ¥¡°ìÍ÷ ¡ú
          • +
          • [mark] (C-c , x) ¢ª ¥Ð¥Ã¥Õ¥¡Æâ¤Î¥Þ¡¼¥¯°ÌÃÖ°ìÍ÷ ¡ú
          • +
        • +
        • ¸¡º÷ +
            +
          • [Àµµ¬] (C-c , g) ¢ª Àµµ¬É½¸½¤Î¸¡º÷ ¡ú +
              +
            • ´ðËÜŪ¤Ë¤ÏÂçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ʤ· +
                +
              • ¡ÖWiki¡×¤Î¤è¤¦¤ËÌÀ¼¨Åª¤ËÂçʸ»ú¤ò»ØÄꤷ¤¿¤È¤­¤Ï¶èÊÌ
              • +
            • +
          • +
          • [¸ÇÄê] (C-c , s) ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸ÇÄêʸ»úÎó¤Î¸¡º÷ ¡ú +
              +
            • C-u C-c , g ¤ä C-u C-c , m ¤Ç¤â
            • +
          • +
          • [roma] (C-c , m) ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo) ¡ú
          • +
          • [º£Æü] (C-c , .) ¢ª º£Æü¤Î¥á¥â ¡ú +
              +
            • (C-u 20 C-c , .) ¢ª 20 ÆüÁ°¤Î¥á¥â
            • +
          • +
          • [ºòÆü] (C-c , :) ¢ª ºòÆü¤Î¥á¥â ¡ú +
              +
            • (C-u 20 C-c , :) ¢ª 20 ÆüÁ°¤Î¥á¥â
            • +
          • +
          • [¥ÐÆâ] (C-c , o) ¢ª ¥Ð¥Ã¥Õ¥¡Æâ¤òÀµµ¬É½¸½¸¡º÷ ¡ú
          • +
        • +
        • ÊÔ½¸: Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È +
            +
          • [¹¹¿·] (C-c , r) ¢ª ²¼Àþ¤ò°ú¤­¤Ê¤ª¤¹
          • +
          • [¸°¢­] (C-c , i) ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤ÆŽ¤ê¤Ä¤± ¡ú +
              +
            • Tips: M-v ¤Ç¸õÊä°ìÍ÷¤Ë°Ü¤Ã¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú
            • +
          • +
          • [Æü¢­] (C-c , d) ¢ª º£Æü¤ÎÆüÉÕ [yyyy-mm-dd] ¤òŽ¤ê¤Ä¤± ¡ú
          • +
          • [»þ¢­] (C-c , T) ¢ª º£Æü¤ÎÆü»þ [yyyy-mm-dd HH:MM] ¤òŽ¤ê¤Ä¤± ¡ú
          • +
          • [Âꢬ] (C-c , K) ¢ª ¸½¥á¥â¤Î¥¿¥¤¥È¥ë¤ò kill ring ¤Ø (C-y ¤ÇŽ¤ê¤Ä¤±) ¡ú +
              +
            • ¥¿¥¤¥È¥ë¤¬¤ß¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ï¥Õ¥¡¥¤¥ë̾
            • +
          • +
          • [̾¢¬] (C-u C-c , K) ¢ª ¥Õ¥¡¥¤¥ë̾¤ò kill ring ¤Ø ¡ú
          • +
        • +
        • ÆÃÊÌ +
            +
          • [menu ¹¹¿·] (R) ¢ª ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Ê¤É¤ò¹¹¿·
          • +
          • [menu ÊÔ½¸] ¢ª ¥á¥Ë¥å¡¼¤òÊÔ½¸
          • +
          • [Á´¾Ã] (C-c , Q) ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯) ¡ú
          • +
          • [¿ìÊâ] (C-c , w) ¢ª ¥é¥ó¥À¥à¤Ë¥ê¥ó¥¯¤ò¤¿¤É¤Ã¤Æ¼«Æ°±ÜÍ÷. C-g ¤ÇÄä»ß. ¡ú
          • +
        • +
      • +
    • +
    • ¤½¤Î¾ +
        +
      • [return] ¢ª ¥ê¥ó¥¯¾å¤Ê¤é³ºÅö¥Õ¥¡¥¤¥ë¤ò³«¤¯. ¤µ¤â¤Ê¤¯¤Ð²þ¹Ô.
      • +
      • °ÜÆ° +
          +
        • C-c , n ¢ª ¼¡¤Î¥ê¥ó¥¯¤Ø
        • +
        • C-c , p ¢ª Á°¤Î¥ê¥ó¥¯¤Ø
        • +
        • °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¡Ä +
            +
          • C-c , N ¢ª ¼¡¤Î¥á¥â¤Ø
          • +
          • C-c , P ¢ª Á°¤Î¥á¥â¤Ø
          • +
          • C-c , H ¢ª ºÇ½é¤Î¥á¥â¤Ø
          • +
          • C-c , L ¢ª ºÇ¸å¤Î¥á¥â¤Ø
          • +
        • +
      • +
      • ¿·µ¬¥á¥â +
          +
        • C-c , C ¢ª ¤¤¤Þ³«¤¤¤Æ¤ë¥Õ¥¡¥¤¥ë¤ËÄɲà +
            +
          • ¥á¥Ë¥å¡¼¤Ë [ÄɲÃ] ¤È½ñ¤¯¤È, ¤³¤ÎÆ°ºî¤Î¥Ü¥¿¥ó. + ±Ñ¸ì¥á¥Ë¥å¡¼¤Ê¤é [Add].
          • +
        • +
        • C-c , I ¢ª ¥Õ¥¡¥¤¥ë̾¤ò¼êÆ°¤Ç (Èó¿ä¾©) +
            +
          • C-u C-c , I ¤Ê¤é, ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë
          • +
        • +
      • +
      • narrow (1 ¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­) +
          +
        • M-x howm-narrow-to-memo ¢ª Á°¸å¤Î¥á¥â¤ò±£¤¹. Ì᤹¤Ë¤Ï M-x widen
        • +
        • M-x howm-toggle-narrow ¢ª ¡Ö±£¤¹¡×¡Ö¸«¤»¤ë¡×¤ò¥È¥°¥ë
        • +
      • +
      • C-c , SPC ¢ª howm ¤Ê¥Ð¥Ã¥Õ¥¡¤È howm ¤Ç¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤È¤òÀÚ¤êÂؤ¨ ¡ú
      • +
      • M-x howm-show-buffer-as-howm ¢ª ¸½¥Ð¥Ã¥Õ¥¡¤Î¥³¥Ô¡¼¤ò howm-mode ¤Çɽ¼¨ ¡ú +
          +
        • ¼ûÍ×ÉÔÌÀ¤Ê¤Î¤ÇÍͻҸ«[2003-09-29]
        • +
      • +
    • +
  • +
+

¥á¥â¤òÆɤ⤦

+

(°ìÍ÷¥â¡¼¥É)

+
    +
  • ¥³¥Þ¥ó¥É(ºÆ·Ç) +
      +
    • C-c , , (M-x howm-menu) ¢ª ¥á¥Ë¥å¡¼
    • +
    • C-c , a (M-x howm-list-all) ¢ª Á´¥á¥â°ìÍ÷
    • +
    • C-c , g (M-x howm-list-grep) ¢ª Á´¥á¥â¸¡º÷ (Àµµ¬É½¸½)
    • +
    • C-c , s (M-x howm-list-grep-fixed) ¢ª Á´¥á¥â¸¡º÷ (¸ÇÄꥭ¡¼¥ï¡¼¥É)
    • +
  • +
  • ¸¡º÷¤ä¥ê¥ó¥¯¥¸¥ã¥ó¥×¤ò¤¹¤ë¤È, °ìÍ÷¥â¡¼¥É +
      +
    • ¥Ç¥Õ¥©¥ë¥È¤Ï°ìÍ÷ɽ¼¨ +
        +
      • °ìÍ÷¥Ð¥Ã¥Õ¥¡ + ÆâÍƥХåե¡
      • +
      • ¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤ÎÆâÍƤ¬É½¼¨¤µ¤ì¤ë
      • +
    • +
    • Ï¢·ëɽ¼¨¤â¤Ç¤­¤ë +
        +
      • @ ¤ÇÏ¢·ëɽ¼¨. ¤â¤¦°ìÅÙ @ ¤Ç°ìÍ÷ɽ¼¨¤ËÌá¤ë.
      • +
      • ¥Ò¥Ã¥È¤·¤¿¥á¥â¤ÎÆâÍƤò¤¼¤ó¤Ö¤Ä¤Ê¤²¤Æɽ¼¨ +
          +
        • ÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó½ñ¤¯ ¢ª ¤Ä¤Ê¤²¤ÆÆɤà
        • +
      • +
      • [tab] ¤È [alt]-[tab] ¤Ç¼¡/Á°¤Î¥á¥â¤Ø
      • +
      • Tips: ¥á¥â¤òõ¤¹¤È¤­, ¸¡º÷¤Ç¤¢¤ëÄøÅÙ¤·¤Ü¤ê¤³¤ó¤À¤é, + Ï¢·ëɽ¼¨¤·¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú
      • +
    • +
    • °ìÍ÷ɽ¼¨¤Ç +
        +
      • 0 ¢ª Ï¢·ëɽ¼¨¤Î¥È¥°¥ë (@ ¤ÈƱ¤¸)
      • +
      • 1 ¢ª ÆâÍƥХåե¡¤ò¾Ã¤¹
      • +
      • 2 ¢ª ÆâÍƥХåե¡¤ò½Ð¤¹
      • +
      • v ¢ª ÆâÍƥХåե¡¤ò¥È¥°¥ë
      • +
      • TAB, M-TAB ¢ª ¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø
      • +
      • T ¢ª ¥¿¥¤¥È¥ëɽ¼¨¤ò¥È¥°¥ë
      • +
    • +
    • ¤É¤Á¤é¤Îɽ¼¨¤Ç¤â +
        +
      • n ¤È p ¢ª ¾å²¼
      • +
      • [space] ¤È [backspace] ¢ª ¥¹¥¯¥í¡¼¥ë
      • +
      • j ¤È k ¢ª °ì¹Ô¥¹¥¯¥í¡¼¥ë
      • +
      • [return] ¢ª ¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤ò³«¤¯ +
          +
        • C-u ¤·¤Æ [return] ¢ª ¥á¥â¤ò³«¤¤¤Æ°ìÍ÷¤ò¾Ã¤¹
        • +
      • +
      • X ¢ª Dired-X ¤òµ¯Æ° (²þ̾¡¦ºï½ü¤Ê¤É¤Î¥Õ¥¡¥¤¥ëÁàºî) +
          +
        • Dired-X ¤Î»È¤¤Êý¤Ï, info dired-x Åù¤ò»²¾È

          +
          v ¢ª Ãæ¿È¤ò¸«¤ë (q ¢ª Ìá¤ë)
          +d ¢ª ¡Ö¾Ã¤¹¤¾¡×¥Þ¡¼¥¯
          +x ¢ª ¥Þ¡¼¥¯¤·¤¿¥Õ¥¡¥¤¥ë¤¿¤Á¤òËÜÅö¤Ë¾Ã¤¹
        • +
      • +
      • ? ¢ª ¥Ø¥ë¥×
      • +
      • q ¢ª æ½Ð
      • +
    • +
  • +
  • ¥½¡¼¥È +
      +
    • S ¢ª ²¿¤Ç¥½¡¼¥È¤¹¤ë¤«Ê¹¤¤¤Æ¤¯¤ë (Êä´°ÆþÎÏ) +
        +
      • name: ¥Õ¥¡¥¤¥ë̾
      • +
      • name-match: »ØÄꤷ¤¿¥Õ¥¡¥¤¥ë̾¤ò¾å°Ì¤Ë°Ü¤¹
      • +
      • date: ºîÀ®Æü
      • +
      • mtime: ¹¹¿·»þ¹ï
      • +
      • summary: °ì¹Ôɽ¼¨¤Îʸ»úÎó
      • +
      • summary-match: »ØÄꤷ¤¿Àµµ¬É½¸½¤ò°ì¹Ôɽ¼¨¤«¤é¸¡º÷¤·¤Æ, ¾å°Ì¤Ë°Ü¤¹
      • +
      • summary-match-string: Ʊ¾å + ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó½ç¤Ë¥½¡¼¥È
      • +
      • random: ¥é¥ó¥À¥à¥·¥ã¥Ã¥Õ¥ë
      • +
      • reminder: ¥ê¥Þ¥¤¥ó¥À½ç
      • +
      • numerical-name: ¥Õ¥¡¥¤¥ë̾ (¿ô»ú½ç. ¥á¡¼¥ë¤Î¥½¡¼¥È¤òÁÛÄê)
      • +
      • reverse: ¸½É½¼¨¤ÎµÕ½ç
      • +
    • +
    • C-u S ¤Ê¤é¥Ç¥Õ¥©¥ë¥È¤ÎµÕ½ç
    • +
    • R ¢ª reverse
    • +
  • +
  • ¹Ê¤ê¤³¤ß (and ¸¡º÷) +
      +
    • f ¢ª ²¿¤Ç¹Ê¤ê¤³¤à¤«Ê¹¤¤¤Æ¤¯¤ë (Êä´°ÆþÎÏ) +
        +
      • name: ¥Õ¥¡¥¤¥ë̾
      • +
      • date: ºîÀ®Æü
      • +
      • mtime: ¹¹¿·»þ¹ï
      • +
      • summary: °ì¹Ôɽ¼¨¤Îʸ»úÎó
      • +
      • contents: ÆâÍÆ
      • +
      • reminder: ¥ê¥Þ¥¤¥ó¥À¤ÎÆüÉÕÈÏ°Ï
      • +
      • Region: Îΰè
      • +
      • Around: ¥«¡¼¥½¥ë°ÌÃ֤μþÊÕ +
          +
        • C-u 7 f ¢ª Around ¤Ê¤é, Á°¸å 7 ¤Ä
        • +
      • +
      • uniq: Ʊ¤¸¥Õ¥¡¥¤¥ëÃæ¤Ç²¿²Õ½ê¥Ò¥Ã¥È¤·¤Æ¤â, ºÇ½é¤Î°ì²Õ½ê¤À¤±É½¼¨
      • +
    • +
    • C-u f ¤Ê¤é, ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤ò¼è¤ê½ü¤¯
    • +
    • G ¢ª contents
    • +
    • u ¢ª uniq
    • +
  • +
  • howm-mode ¤È¶¦ÄÌ +
      +
    • l ¢ª Á´¥á¥â¤Î°ìÍ÷
    • +
    • g ¢ª ¸¡º÷ (grep) +
        +
      • C-u g ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸¡º÷
      • +
    • +
    • m ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo) +
        +
      • C-u m ¢ª C-u g ¤ÈƱ¤¸
      • +
    • +
    • c ¢ª ¿·µ¬¥Õ¥¡¥¤¥ëºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë)
    • +
    • Q ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯)
    • +
  • +
  • ¤½¤Î¾ +
      +
    • °ìÍ÷ɽ¼¨¤Ç ! ¢ª shell ¤Ç¥³¥Þ¥ó¥É¼Â¹Ô +
        +
      • ¥á¥â¤ò¼ê¤Ã¼è¤êÁ᤯¼Î¤Æ¤¿¤±¤ì¤Ð, ¤³¤ì¤Ç mv ¤Ê¤ê rm ¤Ê¤ê¤·¤Æ¤¯¤À¤µ¤¤
      • +
      • 2 ²óÌܤ«¤é¤Ï¾®¸­¤·¤¤µóÆ°¤ò¤·¤Þ¤¹ :-)
      • +
    • +
    • >>> hoge.png ¤Ê¤é³°Éô viewer ¤Ç²èÁü¤ò³«¤¯ +
    • +
  • +
+

¥ê¥Þ¥¤¥ó¥À

+

(ͽÄêɽ¡¦todo)

+
    +
  • µ¡Ç½ +
      +
    • ¥á¥âÃæ¤Ë

      +
      [2002-10-20]+ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦
      +

      ¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤ª¤¯¤È, °ìÍ÷¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹

      +
        +
      • C-c , y ¢ª ͽÄêɽ +
          +
        • . ¢ª º£Æü¤Ø
        • +
      • +
      • C-c , t ¢ª todo °ìÍ÷ +
          +
        • °ìÍ÷Ãæ¤Î¾å²¼¤É¤Î°ÌÃÖ¤Ëɽ¼¨¤µ¤ì¤ë¤«¤Ï, ÆüÉդȼïÎष¤À¤¤
        • +
      • +
    • +
    • ¡ÖºÇ¶á¤ÎͽÄê¡×¤È¡Ötodo ËÁƬ¡×¤Ï¥á¥Ë¥å¡¼¤Ë¤âɽ¼¨¤µ¤ì¤Þ¤¹ + (¤³¤È¤¢¤ë¤´¤È¤Ë¤Á¤é¤Ã¤È¸«¤¨¤ë¤Î¤¬½ÅÍפ«¤È) +
        +
      • ¥á¥Ë¥å¡¼¤Ç¤Ï, ¹ÔƬ¤Î¡Ö>¡×¾å¤Ç RET ¤ò᤯¤È¥á¥â¤ËÈô¤Ó¤Þ¤¹ + (¤½¤ì°Ê³°¤Î°ÌÃ֤Ǥâ, ²¼Àþ¤¬¤Ê¤¤½ê¤Ê¤éƱÍÍ)
      • +
    • +
    • ¥«¥ì¥ó¥À¡¼¥½¥Õ¥È plan ¤Ø¤Î export ¤â²Äǽ (¢ª³°Éô¥Ä¡¼¥ë)
    • +
  • +
  • ½ñ¼° +
      +
    • ³Ð½ñ (-)

      +
      [2002-10-20]- ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦
      +
        +
      • »ØÄêÆü¤ËÉ⤭¤¢¤¬¤ê, °Ê¸å¤Ï½ù¡¹¤ËÄÀ¤à
      • +
      • »ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú
      • +
      • ÄÀ¤à¤Î¤òÃÙ¤¯¤¹¤ë¤Ë¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 1 Æü)

        +
        [2002-10-20]-14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦ ¢ª 14 Æü´Ö¤°¤é¤¤¤Ïµ¤¤Ë¤«¤±¤è¤¦
      • +
    • +
    • todo (+)

      +
      [2002-10-20]+ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤦¤Ù¤·
      +
        +
      • »ØÄêÆü¤«¤é, ½ù¡¹¤ËÉ⤭¤¢¤¬¤Ã¤Æ¤¯¤ë
      • +
      • »ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú
      • +
      • É⤭¤¢¤¬¤ë®¤µ¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 7 Æü)

        +
        [2002-10-20]+14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤦¤Ù¤· ¢ª 14 Æü´Ö¤°¤é¤¤¤Î¤¦¤Á¤Ë
      • +
    • +
    • ¡ºÀÚ (!)

      +
      [2002-10-20]! ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± ¡ºÀÚ
      +
        +
      • »ØÄêÆü¤¬¶á¤Å¤¯¤È, É⤭¤¢¤¬¤Ã¤Æ¤¯¤ë
      • +
      • »ØÄêÆü°Ê¹ß¤Ï, °ìÈÖ¾å¤ËÉ⤭¤Ã¤Ñ¤Ê¤·
      • +
      • ²¿ÆüÁ°¤«¤éÉ⤭¤Ï¤¸¤á¤ë¤«¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 7 Æü)

        +
        [2002-10-20]!14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± ¡ºÀÚ ¢ª 14 ÆüÁ°¤°¤é¤¤¤«¤é¤Ü¤Á¤Ü¤Á
      • +
      • ͽÄêɽ(¸å½Ò)¤Ë¤âɽ¼¨
      • +
    • +
    • ÊÝα (~)

      +
      [2002-10-20]~ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦¤«
      +
        +
      • »ØÄêÆü¤«¤é, É⤭ÄÀ¤ß¤ò¤¯¤ê¤«¤¨¤¹
      • +
      • »ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú
      • +
      • ²¿Æü¼þ´ü¤ÇÉ⤭ÄÀ¤ß¤¹¤ë¤«¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 30 Æü)

        +
        [2002-10-20]!14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦¤« ¢ª 14 Æü¼þ´ü
      • +
    • +
    • ͽÄê (@)

      +
      [2002-10-20]@ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
      +
        +
      • todo °ìÍ÷¤Ç¤Ï¤Ê¤¯, ͽÄêɽ¤Ëɽ¼¨
      • +
    • +
    • ºÑ (.)

      +
      [2002-10-20]. ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
      +
        +
      • ¾ï¤ËÄì
      • +
    • +
  • +
  • action-lock +
      +
    • Îã

      +
      [2002-10-20]+9 ¤Û¤²¤Û¤²
      +

      ¤Î¡Ö+9¡×¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È, ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ë¥á¥Ë¥å¡¼¤¬½Ð¤Æ¡Ä

      +
        +
      • ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¡ÖºÑ¡×

        +
        [2002-10-20]. [2002-10-20]:+9 ¤Û¤²¤Û¤²
      • +
      • x ¤òÆþÎÏ ¢ª ¡Öcancel¡×

        +
        [2002-10-20]. cancel [2002-10-20]:+9 ¤Û¤²¤Û¤²
      • +
      • - ¤òÆþÎÏ ¢ª ¼ïÎà¤ò³Ð½ñ¤ËÊѹ¹

        +
        [2002-10-20]-9 ¤Û¤²¤Û¤²
      • +
      • 14 ¤òÆþÎÏ ¢ª ͱͽÆü¿ô¤ò 14 Æü¤ËÊѹ¹

        +
        [2002-10-20]+14 ¤Û¤²¤Û¤²
      • +
    • +
    • ¥á¥Ë¥å¡¼¡¦Í½Äêɽ¡¦todo °ìÍ÷¤«¤é¤âľÀÜᤱ¤Þ¤¹
    • +
  • +
  • Tips (»ä¤Î»È¤¤Êý) +
      +
    • ¡Ötodo¡×¤ä¡Ö¡ºÀڡפÏËÜÅö¤ËɬÍפʤâ¤Î¤À¤± +
        +
      • ¤½¤ì°Ê³°¤Ï¡Ö³Ð½ñ¡×¤ÇÄÀ¤à¤Ë¤Þ¤«¤»¤ë (¤É¤¦¤»Á´Éô¤Ï¤Ç¤­¤Þ¤»¤ó :p)
      • +
      • ¸å¤í¤á¤¿¤±¤ì¤Ð, ͱͽÆü¿ô¤ÎŤ¤¡Ö³Ð½ñ¡×¤Ë

        +
        [2002-11-10]-10 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
      • +
    • +
    • ¶ÛµÞ¤Ç¤Ï¤Ê¤¤¤¬½ÅÍפʤ³¤È

      +
      [2002-11-10]-999 ¡ü¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
    • +
    • ÌÜΩ¤¿¤»¤¿¤¤¤³¤È

      +
      [2002-11-10]! ¡ú¡ú¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
    • +
  • +
+

ƳÆþË¡

+

¥¤¥ó¥¹¥È¡¼¥ë

+

¼«Æ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç

+
    +
  • ¥¤¥ó¥¹¥È¡¼¥ë +
      +
    • ./configure ¤·¤Æ make ¤·¤Æ, root ¤Ë¤Ê¤Ã¤Æ make install +
        +
      • *.el, *.elc ¤Ï /usr/share/emacs/site-lisp/howm/ ¤Ë
      • +
      • doc/, ext/ ¤Ï /usr/local/share/howm/ ¤Ë
      • +
    • +
    • xemacs ¤Î¾ì¹ç

      +
      ./configure --with-xemacs
      +
        +
      • *.el, *.elc ¤Ï /usr/lib/xemacs/site-lisp/howm/ ¤Ë
      • +
    • +
    • ¥¤¥ó¥¹¥È¡¼¥ëÀè¤ÎÊѹ¹Îã

      +
      ./configure --with-howmdir=$HOME/elisp --prefix=$HOME
      +
        +
      • *.el, *.elc ¤Ï ~/elisp/ ¤Ë
      • +
      • doc/, ext/ ¤Ï ~/share/howm/ ¤Ë
      • +
    • +
    • ¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤Ï ./configure --help ¤ò»²¾È
    • +
  • +
  • ÀßÄê +
      +
    • ~/.emacs (.emacs.el ¤«¤â)¤ËÄɲà +
        +
      • case 1: emacs µ¯Æ°»þ¤ËÆɤ߹þ¤à

        +
        (setq howm-menu-lang 'ja)
        +(require 'howm)
      • +
      • case 2: ¤Ï¤¸¤á¤Æ C-c , , ¤·¤¿»þ¤ËÆɤ߹þ¤à

        +
        (setq howm-menu-lang 'ja)
        +(global-set-key "\C-c,," 'howm-menu)
        +(autoload 'howm-menu "howm" "Hitori Otegaru Wiki Modoki" t)
      • +
      • ¤¤¤º¤ì¤â, ¤â¤·¡ÖCannot open load file¡×¤È¤«¥¨¥é¡¼¤¬½Ð¤ë¤Ê¤é, + ¾åµ­¤ÎÁ°¤Ë¤³¤ì¤òÄɲÃ

        +
        (add-to-list 'load-path "/usr/share/emacs/site-lisp/howm/")
      • +
    • +
    • ~/howm/ ¤ÎºîÀ®¤ä¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Î¥³¥Ô¡¼¤ÏÉÔÍפǤ¹ + (¥á¥Ë¥å¡¼µ¯Æ°»þ¤Ë¼«Æ°ºîÀ®)
    • +
  • +
+

¼êÆ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç

+
    +
  • *.el ¤òŬÅö¤Ê¾ì½ê¤ËÃÖ¤¯ (Îã: ~/elisp/howm) +
      +
    • ~/.emacs (.emacs.el ¤«¤â)¤Ë +
    • +
    • ¤ª¹¥¤ß¤Ç, ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë

      +
      cd ~/elisp/howm
      +\emacs -batch -q --no-site-file --eval '(progn (add-to-list (quote load-path) ".") (byte-recompile-directory "." 0))'
    • +
  • +
+

¥¤¥ó¥¹¥È¡¼¥ë¤ÎÊä­

+
    +
  • ¤ª¹¥¤ß¤Ç, ~/.emacs ¤ËÀßÄê¤òÄɲà (¢ª¥«¥¹¥¿¥Þ¥¤¥º)

    +
    ;; ÀßÄêÎã
    +(define-key global-map [katakana] 'howm-menu) ; [¥«¥¿¥«¥Ê] ¥­¡¼¤Ç¥á¥Ë¥å¡¼
    +(setq howm-file-name-format "%Y/%m/%Y_%m_%d.txt") ; 1 Æü 1 ¥Õ¥¡¥¤¥ë
    +(setq howm-keyword-case-fold-search t) ; <<< ¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤
    +(setq howm-list-title nil) ; °ìÍ÷»þ¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨¤·¤Ê¤¤
    +(setq howm-menu-refresh-after-save nil) ; save »þ¤Ë¥á¥Ë¥å¡¼¤ò¼«Æ°¹¹¿·¤»¤º
    +(setq howm-refresh-after-save nil) ; save »þ¤Ë²¼Àþ¤ò°ú¤­Ä¾¤µ¤Ê¤¤
    +(setq howm-menu-expiry-hours 2) ; ¥á¥Ë¥å¡¼¤ò 2 »þ´Ö¥­¥ã¥Ã¥·¥å
  • +
  • ¤Ê¤ª, ¥­¡¼¥ï¡¼¥É°ìÍ÷¤Ï ~/.howm-keys ¤Ëµ­Ï¿¤µ¤ì¤ë +
      +
    • Ëü°ì²õ¤ì¤Æ¤â, ºÆ¹½ÃۤϴÊñ. Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤˱þ¤¸¤Æ¡Ä +
        +
      • ¶èÊ̤¹¤ë¾ì¹ç

        +
        find ~/howm -name '*.txt' -print | xargs ruby -ne '$_ =~ /<<<\s+(.+)$/ and puts $1.split(/\s*<<<\s*/).join "\t"' | sort -u > ~/.howm-keys
      • +
      • ¶èÊ̤·¤Ê¤¤¾ì¹ç

        +
        find ~/howm -name '*.txt' -print | xargs ruby -ne '$_ =~ /<<<\s+(.+)$/ and puts $1.downcase.split(/\s*<<<\s*/).join "\t"' | sort -u > ~/.howm-keys
      • +
    • +
  • +
  • Ãí°Õ +
      +
    • GNU Emacs °Ê³°¤Î¾ì¹ç: + »ä¤Ï¤è¤¯¤ï¤«¤é¤Ê¤¤¤Î¤Ç, ¸¡º÷¤·¤Æ¤¯¤À¤µ¤¤ +
        +
      • meadow: + ÀßÄêºÑ¤ß Meadow + ¤Ê¤éºÇ½é¤«¤é»È¤¨¤Þ¤¹ +
          +
        • cygwin + grep »ÈÍѤΤȤ­¤Ï, + ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤È¥³¥Þ¥ó¥É¤ò¥É¥é¥¤¥Ö¥ì¥¿¡¼¤«¤é»ØÄꤹ¤ë. +
            +
          • ~/.emacs(.emacs.el ¤«¤â) ¤Ç¢­¤Î¤è¤¦¤Ë

            +
            (setq howm-directory "c:/cygwin/home/howm/")
          • +
          • cygwin ¤«¤é¸«¤¿ / ¤È emacs ¤«¤é¸«¤¿ / ¤¬¿©¤¤°ã¤¦¤È¤«¤¤¤¦ÏÃ.
          • +
        • +
      • +
      • xemacs: +
          +
        • font-lock ¤Î¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë¤È®¤¯¤Ê¤ë¤½¤¦. + thx > ³Þ¸¶¤µ¤ó

          +
          (setq font-lock-verbose nil)
        • +
      • +
      • Linux Zaurus: + Wiki + ¤ò»²¾È¤¯¤À¤µ¤¤. + thx > 100
      • +
    • +
    • SKK ¤ò»È¤¦¾ì¹ç +
        +
      • .emacs ¤Ë°Ê²¼¤ò½ñ¤¤¤Æ¤ª¤«¤Ê¤¤¤È, Dired-X ¤Ë C-x C-j ¤òÃ¥¤ï¤ì¤Þ¤¹

        +
        (setq dired-bind-jump nil)
      • +
    • +
    • viper-mode ¤ò»È¤¦¾ì¹ç +
        +
      • viper-mode ¤è¤êÀè¤Ë howm-mode ¤ò¥í¡¼¥É¤·¤Æ¤ª¤¯ +
          +
        • post-command-hook ¤Ë°­¤µ¤¹¤ë??
        • +
      • +
    • +
    • ¥³¥ó¥½¡¼¥ë (emacs -nw) ¤Î¾ì¹ç +
        +
      • ²¼Àþ¤¬É½¼¨¤µ¤ì¤Ê¤¤Ã¼Ëö¤Ê¤é

        +
        (set-face-foreground 'action-lock-face "blue") ;; ²¼Àþ¤Î¤«¤ï¤ê¤Ë¿§¤Ä¤±
      • +
    • +
    • RD¤ò»È¤¦¾ì¹ç +
        +
      • <<< ¤¬ RD ¤Î include ¤È¤«¤Ö¤ë
      • +
      • ÂкöÎã +
          +
        • include ¤Ï»È¤ï¤Ê¤¤. ¹Ô¤Î¤Ï¤¸¤á¤Ë <<< ¤ò½ñ¤«¤Ê¤¤¤è¤¦Ãí°Õ¤¹¤ë.
        • +
        • include ¤Ï»È¤ï¤Ê¤¤. rd2 ¤ò¤«¤±¤ëÁ°¤Ë howm2 -type=rd ¤òÄ̤¹.
        • +
        • ¥ê¥ó¥¯µ­¹æ¤òÊѹ¹¤¹¤ë

          +
          ;; Îã: .emacs (howm ¥í¡¼¥É¤è¤êÁ°)¤Ë
          +(setq howm-ref-header "==>") ; goto ¥ê¥ó¥¯
          +(setq howm-keyword-header "<==") ; come-from ¥ê¥ó¥¯
        • +
        • ¢ª howm wiki ¤Î¡ÖÊ»Íѥġ¼¥ë¡×¤â»²¾È
        • +
      • +
    • +
  • +
  • µìÈǤ«¤é¤Î°Ü¹Ô (ɬ¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!) ¢ª <URL:OLD.rd> +
      +
    • ¿·¤¿¤Ë make install ¤·¤Æ¤â, ¸Ä¿Í¤Î¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¹¹¿·¤Ï¤·¤Þ¤»¤ó. + ɬÍפʤé, ¥á¥Ë¥å¡¼¤ò¼«Ê¬¤ÇÊÔ½¸¤¹¤ë¤«, + ja/0000-00-00-000000.txt ¤ò¼«Ê¬¤Ç¥³¥Ô¡¼¤¹¤ë¤«¤·¤Æ¤¯¤À¤µ¤¤.
    • +
  • +
+

¥«¥¹¥¿¥Þ¥¤¥º

+

´ðËÜŪ¤Ë¤Ï M-x customize ¢ª [Applications] ¢ª [Howm] ¤Ç. +¤Ô¤ó¤È¤³¤Ê¤¤¹àÌܤâ, [Show] ¤Ç¤¢¤ê¤¬¤Á¤Ê´ûÄêÃͤ«¤éÁªÂò²Äǽ.

+

¤½¤³¤Ë¤Ê¤¤ÀßÄê¤Ë¤Ä¤¤¤Æ¤Ï, ~/.emacs (~/.emacs.el ¤«¤â)¤Ø, °Ê²¼¤Î¤è¤¦¤ËľÀܽñ¤¯. +(¤â¤Ã¤ÈÌÖÍåŪ¤À¤¬¸Å¤¤²òÀâ¤Ï, <URL:OLD.rd>¤ò»²¾È)

+
    +
  • ¿§ +
      +
    • howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê

      +
      ;; ¡Ö¤Û¤²¡×¤È¡Ö[¤Õ¤¬]¡×¤ËÃ忧
      +;; ¡¦ÀßÄêË¡¤Î¾ÜºÙ¤Ï, ÊÑ¿ô font-lock-keywords ¤Î¥Ø¥ë¥×¤ò»²¾È
      +;; ¡¦face ¤Î°ìÍ÷¤Ï M-x list-faces-display
      +(setq howm-user-font-lock-keywords
      +  '(
      +    ("¤Û¤²" . (0 'highlight prepend))
      +    ("\\[¤Õ¤¬\\]" . (0 'font-lock-doc-face prepend))
      +    ))
      +
        +
      • todo ¤äͽÄê¤Î¿§¤ï¤±¤Ë¤Ç¤â»È¤Ã¤Æ¤Ï¤¤¤«¤¬¤«¤È.
      • +
    • +
    • ÆâÍƥХåե¡¤Ë rd-mode ¤Ê¿§¤ò¤Ä¤±¤ë

      +
      ;; rd-mode.el ¤¬Æɤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤È¤¤¤¦Á°Äó¤Ç
      +(setq howm-view-contents-font-lock-keywords rd-font-lock-keywords)
    • +
  • +
  • ÊØÍø¥­¡¼ +
      +
    • ¡Ö¥«¥¿¥«¥Ê¡×¤Ç¥á¥Ë¥å¡¼, ¡ÖCtrl-¥«¥¿¥«¥Ê¡×¤Ç¿·µ¬¥á¥â

      +
      (define-key global-map [katakana] 'howm-menu)
      +(define-key global-map [(control katakana)] 'howm-create)
    • +
    • [tab]([alt]-[tab])¤Ç¼¡(Á°)¤Î¥ê¥ó¥¯¤Ë°ÜÆ°

      +
      (define-key howm-mode-map [tab] 'action-lock-goto-next-link)
      +(define-key howm-mode-map [(meta tab)] 'action-lock-goto-previous-link)
      +
        +
      • ËÜÍè¤Î tab ¤Ï C-i ¤Ç
      • +
    • +
  • +
  • Êݸ¾ì½ê +
      +
    • ¥á¥âÃÖ¤­¾ì/ǯ/ǯ·îÆü-»þʬÉÃ.txt ¤Ë

      +
      (setq howm-file-name-format "%Y/%Y%m%d-%H%M%S.txt")
      +
        +
      • ¥Õ¥¡¥¤¥ë̾¼«ÂΤËǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤Ê¤¤¤È, filter-by-date ¤¬µ¡Ç½¤·¤Ê¤¤
      • +
    • +
    • 1 Æü 1 ¥Õ¥¡¥¤¥ë (¥á¥âÃÖ¤­¾ì/ǯ/·î/ǯ_·î_Æü.txt ¤Ë)

      +
      (setq howm-file-name-format "%Y/%m/%Y_%m_%d.txt")
      +
        +
      • ÉÔ´°Á´¤ÊÅÀ¤¬¤¢¤ê¤Þ¤¹. ²æËý¤Ç¤­¤ë¿Í¤À¤±¤É¤¦¤¾ +
          +
        • ¥á¥âñ°Ì¤Ç¤¢¤ë¤Ù¤­½èÍý¤Î°ìÉô¤¬¥Õ¥¡¥¤¥ëñ°Ì¤Ë + (¥¿¥¤¥È¥ëɽ¼¨, ¹¹¿·½ç°ìÍ÷, ÆâÍƤǤιʤꤳ¤ß, uniq)
        • +
      • +
    • +
    • ¥­¡¼¥ï¡¼¥É°ìÍ÷¤ò ~/howm/.howm-keys ¤ËÃÖ¤¯

      +
      (setq howm-keyword-file "~/howm/.howm-keys") ;; ¥Ç¥Õ¥©¥ë¥È¤Ï ~/.howm-keys
      +
        +
      • ¤³¤¦¤·¤Æ¤ª¤±¤Ð, °ã¤¦¥Þ¥·¥ó¤Ç¤â ~/howm/ °Ê²¼¤Î¥³¥Ô¡¼¤À¤±¤ÇºÑ¤à.
      • +
      • ¤¹¤Ç¤Ë½ñ¤¤¤¿¥á¥â¤¬¤¢¤ë¤Ê¤é, mv ~/.howm-keys ~/howm/ ¤ò¤·¤Æ¤ª¤¯¤«, + ºÆ¹½ÃÛ¤¹¤ë(¢ª¥¤¥ó¥¹¥È¡¼¥ë).
      • +
      • ¥Ç¥á¥ê¥Ã¥È: ¸¡º÷¤¬ÃÙ¤¯¤Ê¤ë? (Âδ¶¤Ç¤­¤ë¤Û¤É¤«¤Ï, ¤ä¤Ã¤Æ¤ß¤Ê¤¤¤ÈÉÔÌÀ)
      • +
    • +
  • +
  • °ìÍ÷ +
      +
    • °ìÍ÷¤Ç¡Ö!¡×¤·¤¿¤È¤­¤Î½é´ü¥³¥Þ¥ó¥É¤òÊѹ¹

      +
      (setq howm-view-summary-shell-last-file "_FILE_")
      +(setq howm-view-summary-shell-hist
      +  '("mv _FILE_ ~/gomi" "touch _FILE_" "ls -l _FILE_"))
      +
        +
      • ½é´ü¥³¥Þ¥ó¥É¤Ï¡Ömv ¥Õ¥¡¥¤¥ë̾ ~/gomi¡×
      • +
      • M-p ²¡¤·¤Æ¤¤¤¯¤È, ¡Ötouch ¥Õ¥¡¥¤¥ë̾¡×¤ä¡Öls -l ¥Õ¥¡¥¤¥ë̾¡×
      • +
    • +
    • °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¿§¤Ä¤±Îã

      +
      (setq howm-view-summary-font-lock-keywords '(("^2003" . 'highlight)))
    • +
  • +
  • ¥á¥Ë¥å¡¼ +
      +
    • ¥á¥Ë¥å¡¼¤ÎÊѹ¹ +
        +
      • ¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ [menu ÊÔ½¸] ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼«Í³¤ËÊÔ½¸
      • +
      • ¤è¤¯³«¤¯¥á¥â¤Ø¤Î goto ¥ê¥ó¥¯¤Ê¤É¤ò½ñ¤¤¤Æ¤ª¤±¤ÐÊØÍø¤«¤È
      • +
    • +
    • ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Ë¡Ö%recent¡×¤ä¡Ö%random¡×¤È½ñ¤¯¤È, + ¡ÖºÇ¶á¤Î¥á¥â¡×¤ä¡Ö¥é¥ó¥À¥à¤ËÁª¤ó¤À¥á¥â¡×¤Î¥¿¥¤¥È¥ë°ìÍ÷ +
        +
      • ¥«¥¹¥¿¥Þ¥¤¥º

        +
        (setq howm-menu-recent-num 20)  ;; ɽ¼¨¤¹¤ë¸Ä¿ô
      • +
    • +
    • ¥á¥Ë¥å¡¼Ãæ¤ËÊÑ¿ô¤ä´Ø¿ô¤ÎÃͤòɽ¼¨ +
        +
      • ¥á¥Ë¥å¡¼Ãæ¤Ë¤³¤¦½ñ¤¯¤È¡Ä +
          +
        • %here%foo ¢ª foo ¤ÎÃͤòɽ¼¨
        • +
        • %here%(foo 3) ¢ª (foo '3) ¤Î·ë²Ì¤òɽ¼¨ +
            +
          • Îã: %here%(howm-menu-search "¤Û¤²") ¢ª ¡Ö¤Û¤²¡×¤Î¸¡º÷·ë²Ì¤òËä¤á¹þ¤ß
          • +
          • ¤¿¤À¤·, ÅÐÏ¿¤·¤¿´Ø¿ô¤·¤«»È¤¨¤Þ¤»¤ó (¤ª¤Ã¤«¤Ê¤¤¤«¤é)

            +
            (setq howm-menu-allow
            +      (append '(foo bar) howm-menu-allow)) ;; foo ¤È bar ¤òµö²Ä
          • +
        • +
      • +
    • +
    • ¥á¥Ë¥å¡¼¤ò¥á¥â°·¤¤¤·¤Ê¤¤ (¥á¥â°ìÍ÷¡¦¸¡º÷¤ÎÂоݳ°¤Ë)

      +
      ;; mv ~/howm/0000-00-00-000000.txt ~/hoge/fuga/menu.txt ¤·¤È¤¤¤Æ¡Ä
      +(setq howm-menu-file "~/hoge/fuga/menu.txt")
    • +
    • %reminder ¤Î»ÅÀÚ¤êÎã

      +
      (setq howm-menu-reminder-separators
      +      '(
      +        (-1  . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬º£Æü¢­¢¬Ä¶²á¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
      +        (0   . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬Í½Äꢭ¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
      +        (3   . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬¤â¤Ã¤ÈÀ袭¢¬3Æü¸å¤Þ¤Ç¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
      +        (nil . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬todo¢­¨¬¨¬¨¬¨¬¨¬¨¬¨¬") ;ͽÄê¤Ètodo¤Î¶­
      +        ))
    • +
  • +
  • ¤â¤Ã¤È·Ú¤¯ (cf. ÉÙ¹ëŪ¥×¥í¥°¥é¥ß¥ó¥°) +
      +
    • ¾å½Ò¤Î M-x customize ¤Ç [Howm Efficiency] ¤ò»²¾È
    • +
    • ÆäË, Ëܵ¤¤Ç»È¤¦¤Ë¤Ï howm-view-use-grep ¤ÎÀßÄê¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹ +
        +
      • grep »ÈÍÑ»þ¤Î coding system »ØÄê

        +
        (setq howm-process-coding-system 'euc-japan-unix) ;; Æɤ߽ñ¤­¶¦ÄÌ
        +(setq howm-process-coding-system '(utf-8-unix . sjis-unix)) ;; (ÆÉ.½ñ)
      • +
    • +
    • Tips: gc-cons-threshold ¤ÎÃͤòÁý¤ä¤¹¤È®¤¯¤Ê¤ë¾ì¹ç¤¬¤¢¤ë. + ref > 220,234-236

      +
      (setq gc-cons-threshold (* 4000 10000))
    • +
    • Tips: grep-2.5 ¤Ç¤Ï, ´Ä¶­ÊÑ¿ô LANG ¤ò C ¤Ë¤·¤Æ¤ª¤¯¤È, + ¥Þ¥ë¥Á¥Ð¥¤¥ÈÂбþ¤¬¥ª¥Õ¤Ë¤Ê¤Ã¤Æ®¤¯¤Ê¤ë + ref
    • +
  • +
  • ¸¡º÷ +
      +
    • Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲà +
        +
      • Á´Ê¸¸¡º÷¤Î¤È¤­, ¥á¥â¤Ë²Ã¤¨¤Æ»ØÄê¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤âºÆµ¢Åª¤Ëõ¤¹

        +
        (setq howm-search-path '("~/Mail" "~/News"))
        +(setq howm-search-other-dir t) ;; ²¼µ­¤Î¥È¥°¥ë¤Î½é´üÃÍ (t ¤« nil)
      • +
      • M-x howm-toggle-search-other-dir ¤Ç, + ¾åµ­¥Ç¥£¥ì¥¯¥È¥ê¤ò¸¡º÷Âоݤˤ¹¤ë¤«¤·¤Ê¤¤¤«¥È¥°¥ë +
          +
        • ¥­¡¼¥Ð¥¤¥ó¥É¤·¤¿¤±¤ì¤Ð³Æ¼«¤Ç (¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ÌϺ÷Ãæ¤Ë¤Ä¤­¡Ä)
        • +
      • +
    • +
  • +
  • ̤Êݸ¤À¤í¤¦¤È°ÑºÙ¹½¤ï¤º, howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¶¯À©ºï½ü¤¹¤ë¥³¥Þ¥ó¥É + (¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó. »È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤.) +
      +
    • C-u C-c , Q
    • +
    • ¥á¥Ë¥å¡¼¤Ë½ñ¤¯¤Ê¤é [¶¯À©Á´¾Ã]
    • +
    • ʪÁû¤Ê¤Î¤Ç, ¢­¤ò½ñ¤¤¤È¤«¤Ê¤¤¤È̵¸ú

      +
      (setq howm-kill-all-enable-force t)
    • +
  • +
  • ¥Æ¥ó¥×¥ì¡¼¥È¤ÎÊѹ¹Îã +
      +
    • ¤³¤ó¤Ê¤Õ¤¦¤Ë

      +
      Subject: ¥¿¥¤¥È¥ë¥Ð¡¼¤Ë»þ·×¤òɽ¼¨ ¢«Ä¾Á°¤Î¥ê¡¼¥¸¥ç¥ó¤ÎÆâÍÆ
      +Date: Thu, 12 Sep 2002 15:45:59 +0900
      +In-Reply-To: </home/hira/sawfish/rich-title/rich-title.jl> ¢«Ä¾Á°¥Õ¥¡¥¤¥ë
      +
      +¢£ ¢« ¥«¡¼¥½¥ë
      +
        +
      • ~/.emacs ¤Ë

        +
        (setq howm-template "Subject: %title\nDate: %date\n%file\n%cursor")
        +(setq howm-template-date-format "%a, %d %b %Y %H:%M:%S %z")
        +(setq howm-template-file-format "In-Reply-To: <%s>\n")
      • +
    • +
    • ¥Æ¥ó¥×¥ì¡¼¥È¤òÊ£¿ô»ØÄê

      +
      ;; C-u 2 C-c , c ¢ª 2 ÈÖÌܤΥƥó¥×¥ì¡¼¥È¤Ç¿·µ¬¥á¥â
      +;; ¥á¥Ë¥å¡¼¤«¤é C-u 2 c ¤Ç¤âƱÍÍ
      +(setq howm-template
      +      '("= %title%cursor\n%date %file\n\n" "%date: %title%cursor"))
      +
        +
      • ¤Ä¤¤¤Ç¤Ë, howm-template ¤ÎÃͤ¬´Ø¿ô¤Ê¤é + ¡Öuniversal-argument ¤ÈľÁ°¤Î¥Ð¥Ã¥Õ¥¡¤ò°ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö¡× + ¤Ã¤Æ¤¤¤¦¤Î¤â»Å¹þ¤ß¤Þ¤·¤¿
      • +
    • +
  • +
  • ½ñ¼°¤ÎÊѹ¹Îã (howm-*.el ¤Î load ¤è¤êÁ°¤Ë) +
      +
    • ¥¿¥¤¥È¥ë(¥á¥â¶èÀÚ¤ê) @@@ ¡Ä

      +
      (setq howm-view-title-header "@@@")
    • +
    • goto ¥ê¥ó¥¯ ==>¡Ä, come-from ¥ê¥ó¥¯ <==¡Ä

      +
      (setq howm-ref-header "==>")
      +(setq howm-keyword-header "<==")
    • +
    • goto ¥ê¥ó¥¯ ((¡ã¡Ä¡ä)), come-from ¥ê¥ó¥¯ ((¡§¡Ä¡§))

      +
      ;; ¡ã¡ä¡§¤ÏȾ³Ñ¤Ëľ¤·¤Æ¤¯¤À¤µ¤¤
      +(setq howm-ref-regexp "((¡ã\\([^¡ä\r\n]+\\)¡ä))")
      +(setq howm-ref-regexp-pos 1)
      +(setq howm-keyword-format "((¡§%s¡§))")
      +(setq howm-keyword-regexp "\\(((¡§\\)\\([^¡§\r\n]+\\)¡§))")
      +(setq howm-keyword-regexp-hilit-pos 1) ;; ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×ÍÑ
      +(setq howm-keyword-regexp-pos 2)
      +(setq howm-keyword-regexp-format "%s") ;; M-x describe-variable »²¾È
      +
        +
      • Ãí: come-from ¥­¡¼¥ï¡¼¥É¤Î alias ¤Ç¤Ï, + ¼¡¤Î¤É¤Á¤é¤«¤·¤«ÁÛÄꤷ¤Æ¤¤¤Þ¤»¤ó. +
          +
        • ¡Ö¡Ä¤«¤é¸å¡×·¿: <<< foo <<< bar <<< baz
        • +
        • ¡Ö¡Ä¤«¤é¡Ä¤Þ¤Ç¡×·¿: ((¡§foo¡§)) ((¡§bar¡§)) ((¡§baz¡§))
        • +
      • +
    • +
    • wiki É÷¥ê¥ó¥¯ [[hoge]] ¤Î²¼Àþ¤ò¡Ö]]¡×¤À¤±¤Ë +
        +
      • ¡Ö<<< hoge¡×¤ÎºîÀ®¸å¤Ï, ¡Öhoge¡×¤Ë¤â²¼Àþ

        +
        (setq howm-wiki-regexp "\\[\\[\\([^]\r\n]+\\)\\(\\]\\]\\)")
        +(setq howm-wiki-regexp-hilit-pos 2)
        +(setq howm-wiki-regexp-pos 1)
      • +
    • +
  • +
  • ¤³¤Þ¤´¤Þ +
      +
    • ÆüÉÕÆþÎÏ(C-c , d ¤Þ¤¿¤Ï [Æü¢­])¤Çǯ¤ä·î¤òά¤·¤¿¤é, ¡Ö̤Íè¡×¤È²ò¼á

      +
      (setq howm-insert-date-future t)
      +
        +
      • ¿·µ¬ÆþÎÏ»þ¤Î¤ß¤Ç¤¹. ¡Ö[2003-12-27]¡×¾å¤Ç RET ¤·¤¿¤È¤­¤ÎÆ°ºî¤Ï½¾Íè¤É¤ª¤ê.
      • +
    • +
    • ¡Öhttp://¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, URL ¤ò kill-ring ¤Ø

      +
      (setq action-lock-no-browser t)
    • +
  • +
  • ͽÄêɽ¡¦todo °ìÍ÷ +
      +
    • ¥ê¥Þ¥¤¥ó¥Àµ­¹æ(!+-~@.)¤«¤é RET °ìȯ¤Ç¡ÖºÑ¡×¤Ë

      +
      (setq howm-action-lock-reminder-done-default "")
      +
        +
      • ¤³¤Î¾ì¹ç, C-u RET ¤Ç½¾Íè¤ÎÆ°ºî (¥­¥ã¥ó¥»¥ë, µ­¹æÊѹ¹, ¡Ä)
      • +
    • +
    • ͽÄêɽ¡¦todo °ìÍ÷¤«¤é¥ê¥Þ¥¤¥ó¥Àµ­¹æ¾å¤ÇľÀÜ RET ¤·¤¿¤È¤­, + ᤫ¤ìÀè¥Ð¥Ã¥Õ¥¡¤ò¼«Æ° save

      +
      (setq howm-action-lock-forward-save-buffer t)
      +
        +
      • ¡Ö¼«Æ° save¡×¤ËÄñ¹³¤Ê¤¤Êý¤À¤±¤É¤¦¤¾
      • +
      • ¼êÆ°¤Ç C-x s (̤Êݸ¥Ð¥Ã¥Õ¥¡¤¿¤Á¤ò save)¤Ê¤ê¤¹¤ëÊý¤¬ÀµÆ»¤«¤È
      • +
    • +
    • ÊÝα¤ÎÉâÄÀÈÏ°Ï

      +
      (setq howm-todo-priority-defer-init -14)  ;; ½é´üÃÍ = ²¼¸Â
      +(setq howm-todo-priority-defer-peak 0) ;; ¾å¸Â
    • +
    • !+-~. ¤Î½ÜÅ٤Υ«¥¹¥¿¥Þ¥¤¥º +
        +
      • Îã: ¥á¥Ë¥å¡¼¤Ç, ¡ÖÀøÉúÃæ¤ÏÈóɽ¼¨¡×¡ÖºÑ¤Ïɽ¼¨¡×

        +
        (setq howm-menu-todo-priority -50000)
        +(setq howm-todo-priority-done-bottom -44444)
      • +
      • howm-todo-priority-normal-bottom Åù. ¥½¡¼¥¹(howm-reminder.el)»²¾È.
      • +
    • +
    • todo °ìÍ÷(M-x howm-list-todo)¤Î»ÅÀÚ¤êÎã

      +
      (setq howm-todo-separators
      +      '(
      +        (0  . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬¢¬Ä¶²á¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
      +        (nil . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬ÀøÉúÃ梭¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
      +        ))
      +
        +
      • Ï¢·ëɽ¼¨¤ä¥½¡¼¥È¤ò¤¹¤ë¾ì¹ç¤Ë¤Ï¤¸¤ã¤Þ¤«¤â¡Ä
      • +
    • +
  • +
  • action-lock +
      +
    • { } (¥È¥°¥ë¥¹¥¤¥Ã¥Á)¤ÎÊѹ¹

      +
      ;; howm ¤Î load Á°¤Ë
      +(setq action-lock-switch-default '("{ }" "{*}" "{-}")) ;; ²¿¸Ä¤Ç¤â
    • +
    • {_} (̤½èÍý)¤ÎÊѹ¹

      +
      (setq howm-dtime-format "[%a %b %d %H:%M:%S %Y]") ;; {_}
      +(setq howm-template-date-format "[%Y-%m-%d %H:%M]") ;; ¥Æ¥ó¥×¥ì¡¼¥È
    • +
    • ¡Öfile://¡Ä¡×¤ä¡Öhttp://¡Ä¡×¤ÎÊѹ¹ (¤Þ¤·¤ÊÀßÄêÊ罸) + thx > 945

      +
      ;; howm (Àµ³Î¤Ë¤Ï action-lock.el) ¤Î¥í¡¼¥É¤è¤êÁ°¤Ë.
      +;; ¡¦file://¡Ä
      +(setq action-lock-open-regexp
      +      "\\<file://\\(localhost\\)?\\([-!@#$%^&*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&*()_+|=:~/?a-zA-Z0-9]+\\)\\>")
      +(setq action-lock-open-regexp-pos 2) ;; 2 ¸ÄÌܤΡÖ\\(¡Ä\\)¡×¤¬¥Õ¥¡¥¤¥ë̾
      +;; ¡¦http://¡Ä
      +(setq action-lock-browse-regexp
      +      "\\<\\([htp]\\{3,5\\}s?\\|ftp\\)://\\([-!@#$%^&*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&*()_+|=:~/?a-zA-Z0-9]+\\)\\>"
      +(setq action-lock-browse-regexp-pos 0) ;; ¥Þ¥Ã¥Á¤·¤¿Á´ÂΤ¬ URL
    • +
    • action-lock ÄɲÃÎã: + ¡ÖMessage-ID: ¡Ä¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, ³ºÅö¥á¡¼¥ë¤ò namazu ¤Ç¸¡º÷

      +
      ;; howm ¤ò load ¤·¤¿¸å¤Ë
      +(defun my-howm-search-message-id (id)
      +  (message "Searching...")
      +  (let* ((query (format "+message-id:%s" id))
      +         (args `("-l" "-n" "1" ,query "/home/hoge/NMZ/Mail"))
      +         (found (car (howm-call-process "namazu" args))))
      +    (if found
      +        (progn
      +          (find-file found)
      +          (re-search-forward "^$" nil t)
      +          (message "Done."))
      +      (message "No match."))))
      +(setq action-lock-default-rules
      +      (cons (action-lock-general 'my-howm-search-message-id
      +                                 "Message-[Ii][Dd]: \\(.*\\)$"
      +                                 1)
      +            action-lock-default-rules))
    • +
  • +
  • RD¤ò»È¤¦¾ì¹ç: + ¹ÔƬ¤Î * ¤Ç¥¨¥ó¥È¥ê¤Î³«ÊĤ¬¤Ç¤­¤ë¤è¤¦¤Ë + ¢ª 237-238
  • +
  • ¤ª¤Þ¤±

    +
    (setq howm-congrats-format
    +      '(
    +        "(¡­¡¦¦Ø¡¦¡®) %s"
    +        "(¡®¡¦¦Ø¡¦¡­) %s"
    +        ;; ¡Ä°Ê²¼Î¬¡Ä
    +        ))
    +(setq howm-congrats-command '("play" "~/sound/fanfare.wav"))
  • +
  • ¤â¤Ã¤È¤¤¤í¤¤¤í¤¤¤¸¤ë¤Ë¤Ï, *.el ËÁƬ¤ò»²¾È
  • +
+

³°Éô¥Ä¡¼¥ë

+

(Ʊº­¥Ä¡¼¥ë¤Ï ext/ ¤Ë)

+
    +
  • HTML ¤Ø¤ÎÊÑ´¹: howm2 (Ʊº­. Í× ruby) +
      +
    • Îã +
        +
      • ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê ~/howm/ ¤òÊÑ´¹¤·¤Æ ~/converted/ ¤ËÅǤ¯

        +
        ./howm2 ~/howm/ ~/converted/
      • +
      • <<< ¤ÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë

        +
        ./howm2 -i ~/howm/ ~/converted/
      • +
      • ¥ê¥ó¥¯½ñ¼°¤Î»ØÄê

        +
        ./howm2 -comefrom='<<<' -goto='>>>' ~/howm/ ~/converted/
      • +
      • ¡Ö¤Û¤²¡×¤ò´Þ¤à¥Õ¥¡¥¤¥ë¤À¤± HTML ²½

        +
        grep -rl '¤Û¤²' ~/howm/ | howm2 -list ~/converted/
      • +
    • +
    • ²¿¤â¹©Éפ·¤Æ¤Ê¤¤¤Î¤Ç, ·ãÃÙ¤«¤Ä¥á¥â¥ê¤É¤«¿©¤¤
    • +
    • alias ¤Î¡ÖºÆµ¢Åª¤Ê¡×Ÿ³«¤Ï̤¥µ¥Ý¡¼¥È
    • +
  • +
  • ¥«¥ì¥ó¥À¡¼ & todo °ìÍ÷: hcal.rb (Ʊº­. Í× ruby) +
      +
    • ¥«¥ì¥ó¥À¡¼(ͽÄꡦ¡ºÀÚ¡¦ºÑ¤ß¤Î°ìÍ÷)¤ò½ÐÎÏ

      +
      hcal.rb -schedule_mark='¡û' -deadline_mark='¡ü' -done_mark='¡¿' ~/howm/*/*/*.txt
      +
        +
      • ¤³¤ó¤Ê´¶¤¸¤Ç¤º¤é¤º¤é

        +
        ----------------<6>---------------- 2003
        +01 Sun 
        +02 Mon ¡üÅÄÃæÀèÀ¸¤ËÏ¢Íí ¡ûB4ÎØ¹Ö ¾®ÎÓ ¡û¹©³Ø´ðÁü¸³ 12:40 <<<<##>>>>
        +¡Ä
      • +
      • ¡ü¤Ï¡ºÀÚ(@[2003-06-02]!), ¡û¤ÏͽÄê(@[2003-06-02]@), ¡¿¤ÏºÑ(@[2003-06-02].)
      • +
      • <<<<# ¤Ï¡Öº£Æü¡×, #>>>> ¤Ï¡ÖËèǯ¤ÎƱ·îƱÆü¡× +
          +
        • ¤³¤ó¤Ê´¶¤¸¤Ç alias ¤·¤È¤¯¤ÈÊØÍø

          +
          alias hcal="hcal.rb -schedule_mark='¡û' -deadline_mark='¡ü' -done_mark='¡¿' ~/howm/*/*/*.txt | less '+/<<<<#'"
        • +
      • +
    • +
    • ¡Ö½ÜÅÙ½ç todo °ìÍ÷¡×¤ò½ÐÎÏ + (howm ¤ò»È¤¦¤Ê¤éÉÔÍ×. ChangeLog ÇɤʿͤؤΤª¤Þ¤±¤Ç¤¹) +
        +
      • ¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç

        +
        hcal.rb -l memo.txt
      • +
      • emacs ¤«¤é M-x grep ¤·¤Æ

        +
        Run grep (like this): hcal.rb -l ~/memo/*.txt
      • +
    • +
  • +
  • ²Õ¾ò½ñ¤­»Ù±ç: +
  • +
  • ´Ê°×¾®¸¯¤¤Ä¢ +
      +
    • ¥­¡¼¥ï¡¼¥É¤ò·è¤á¤Æ, Æüµ­Ãæ¤Ë½ñ¤¤¤Æ¤ª¤¯

      +
      $¿©Èñ$ 500±ß ¥é¡¼¥á¥ó
    • +
    • ¡Ö<<< $¿©Èñ$¡×¤Ê¤ê¡Ö>>> $¿©Èñ$¡×¤Ê¤ê¤Ç°ìÍ÷¤òɽ¼¨. + ¹Ê¤ê¹þ¤ß¡¦¥½¡¼¥È¤·¤ÆÈÏ°Ï»ØÄê.
    • +
    • M-x yen-region ¤Ç, ¡Ö¢þ¢þ±ß¡×¤ò¹ç·× + ¢ª yen.el
    • +
  • +
  • ¢ª howm wiki ¤Î¡ÖÊ»Íѥġ¼¥ë¡×¤â»²¾È
  • +
+

¼ÂÁõ

+

¼ÂÁõ¤Ë¤Ä¤¤¤Æ

+
    +
  • ¥Õ¥¡¥¤¥ë³«¤¯¤¿¤ó¤Ó¤Ë¥¹¥­¥ã¥ó¤Ã¤Æ¤¤¤¦°Â°×¼ÂÁõ +
      +
    • ~/.howm-keys ¤Ë¥­¡¼¥ï¡¼¥É¤Î°ìÍ÷
    • +
    • ¥Õ¥¡¥¤¥ë¤ò³«¤¯¤È¤­¤Ï¡Ä +
        +
      • .howm-keys ¤Î³Æ¥­¡¼¥ï¡¼¥É¤Ë¤Ä¤¤¤Æ, ½Ð¸½¤Î̵ͭ¤ò¸¡º÷
      • +
      • ½Ð¸½¥­¡¼¥ï¡¼¥É¤ò or ¤Ç¤Ä¤Ê¤¤¤ÀÀµµ¬É½¸½¤òºîÀ®
      • +
      • ¤½¤ÎÀµµ¬É½¸½¤ò font-lock ¤È action-lock ¤ËÀßÄê
      • +
    • +
    • ¥Õ¥¡¥¤¥ëÊݸ»þ¤ËÆâÍƤò¥¹¥­¥ã¥ó¤·¤Æ, ~/.howm-keys ¤ò¹¹¿·
    • +
  • +
  • ¸¡º÷ +
      +
    • ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê ~/howm/ °Ê²¼¤òºÆµ¢Åª¤ËÁ´¸¡º÷. + ¥Õ¥¡¥¤¥ë̾¤â³ÈÄ¥»Ò¤â ~/howm/ °Ê²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¹½À®¤â, ¤É¤¦¤Ç¤â¤è¤¤. +
        +
      • ¥Õ¥¡¥¤¥ë̾¤ÎÀ©Ìó¤Ï, +
          +
        • ¥Õ¥¡¥¤¥ë̾¤Ëǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤ë (filter-by-date ¤Î¤¿¤á)
        • +
        • string<= ¤Ç¥½¡¼¥È¤·¤¿¤éÆü»þ½ç¤Ë¤Ê¤ë
        • +
      • +
    • +
    • ¸ß´¹¤Ê¸¡º÷´Ø¿ô¤òÆóËÜÍÑ°Õ. ¹¥¤­¤ÊÊý¤ò»È¤¨¤ë. +
        +
      • real-grep (grep ¤ò¸Æ¤Ö)
      • +
      • fake-grep (elisp ¤Î¤ß)
      • +
    • +
  • +
  • ¥Õ¥¡¥¤¥ë¹½À® +
      +
    • howm ËÜÂΤȤÏÆÈΩ +
        +
      • bcomp.el +
          +
        • make »þ¤Ë»È¤¦¤À¤±
        • +
        • navi2ch-cvs-0.0.20031209 ¤«¤é¼ÚÍÑ
        • +
      • +
      • cheat-font-lock.el +
          +
        • font-lock-keywords ¤ò¸å¤«¤éÊѹ¹¤¹¤ë¤¿¤á¤Î´Ø¿ô
        • +
        • font-lock.el ¤ÎÆâÉô¼ÂÁõ¤Ë°Í¸
        • +
      • +
      • action-lock.el +
          +
        • action-lock-mode (minor-mode) +
            +
          • ¼öʸ(Àµµ¬É½¸½)¤ÈËâË¡(´Ø¿ô)¤ÎÁȤòÅÐÏ¿
          • +
          • ¥ê¥¿¡¼¥ó¥­¡¼Ã¡¤¤¤¿¤é +
              +
            • ¼öʸ¤Î¾å ¢ª ËâË¡¤¬È¯Æ°
            • +
            • ¤½¤ì°Ê³° ¢ª ËÜÍè¤Î¥ê¥¿¡¼¥ó¥­¡¼
            • +
          • +
        • +
      • +
      • riffle.el +
          +
        • riffle-{summary|contents}-mode +
            +
          • °ìÍ÷¡¦ÆâÍƤΤѤé¤Ñ¤éɽ¼¨, ÆâÍƤÎÏ¢·ëɽ¼¨
          • +
          • °ìÍ÷¤Ç¤Ï, post-command-hook ¤Ç°ÜÆ°¸¡½Ð ¢ª ÆâÍÆɽ¼¨¤ò¹¹¿·
          • +
          • ¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ëÊÑ¿ô riffle-item-list ¤Ë¹àÌܤòÊÝ»ý
          • +
        • +
        • gfunc.el ¤ò»ÈÍÑ
        • +
      • +
      • gfunc.el +
          +
        • °Âľ generic function
        • +
      • +
      • illusion.el +
          +
        • illusion-mode (minor-mode)
        • +
        • ¤Õ¤Ä¤¦¤Î¡Ö¥Õ¥¡¥¤¥ë¡×¤Ç¤Ê¤¤Âоݤò, ³«¤¤¤ÆÊÔ½¸¤·¤ÆÊݸ
        • +
        • º£¤Î¤È¤³¤í³èÍѤµ¤ì¤Æ¤¤¤Ê¤¤
        • +
      • +
      • honest-report.el +
          +
        • ¥Ð¥°¥ì¥Ý¡¼¥È¤ÎÀ¸À®
        • +
      • +
    • +
    • howm ËÜÂÎ +
        +
      • ¼çÌò +
          +
        • howm-backend.el +
            +
          • ¥Ð¥Ã¥¯¥¨¥ó¥É¤ÎʬΥ
          • +
          • Ãê¾Ý²½ +
              +
            • ¥Ç¥£¥ì¥¯¥È¥ê ¢ª folder
            • +
            • ¥Õ¥¡¥¤¥ë ¢ª page
            • +
            • ¥Þ¥Ã¥Á²Õ½ê ¢ª item
            • +
          • +
        • +
        • howm-view.el +
            +
          • howm-view-{summary|contents}-mode (major-mode) +
              +
            • riffle-{summary|contents}-mode ¤«¤éÇÉÀ¸
            • +
            • ¸¡º÷¤Î¼Â¹Ô
            • +
          • +
        • +
        • howm-mode.el (howm-mode-mode.el ¤«¤é²þ̾[2004-07-14]) +
            +
          • howm-mode (minor-mode) +
              +
            • ¾å½Ò¤Î¥¹¥­¥ã¥ó¤Ê¤É
            • +
          • +
        • +
      • +
      • ÏÆÌò +
          +
        • howm-date.el +
            +
          • ÆüÉÕÆþÎϤλٱç
          • +
        • +
        • howm-reminder.el +
            +
          • ÉâÄÀ¼° todo
          • +
        • +
        • howm-menu.el +
            +
          • howm-menu-mode (major-mode)
          • +
        • +
      • +
      • ÀßÄê +
          +
        • howm-version.el +
            +
          • Äê¿ô howm-version ¤òÀßÄꤹ¤ë¤À¤±
          • +
        • +
        • howm-vars.el +
            +
          • defvar, defcustom, Åù
          • +
        • +
        • howm-lang-*.el +
            +
          • ¸À¸ì°Í¸¤ÎÊÑ¿ô
          • +
        • +
        • howm-menu-*.el +
            +
          • ½é´ü¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòʸ»úÎóÄê¿ô¤È¤·¤ÆÄêµÁ
          • +
        • +
        • howm-mkmenu.el +
            +
          • howm-menu-*.el ¤ò ja/0000-00-00-000000.txt Åù¤«¤éÀ¸À®¤¹¤ë¥¹¥¯¥ê¥×¥È
          • +
          • ºî¼Ô°Ê³°¤Ï»È¤¦É¬Íפʤ¤¤Ï¤º
          • +
        • +
      • +
      • »¨ +
          +
        • howm-cl.el +
            +
          • cl ¥Ñ¥Ã¥±¡¼¥¸¤Ø¤Î°Í¸¤ò¤Þ¤È¤á¤¿¤À¤±
          • +
        • +
        • howm-common.el +
            +
          • howm-*.el ¤Ç require
          • +
          • ÆäË, ¥Õ¥¡¥¤¥ë¤Þ¤¿¤¤¤Ç»È¤¦¥Þ¥¯¥í¤Ï¤³¤³¤Ø (¢è byte-compile Âкö)
          • +
        • +
        • howm-misc.el +
            +
          • »¨
          • +
        • +
        • howm.el (howm-mode.el ¤«¤é²þ̾[2004-07-14]) +
            +
          • ¥á¥¤¥ó¥Õ¥¡¥¤¥ë. require ¤¹¤ë¤À¤±.
          • +
        • +
      • +
    • +
  • +
+

Æ°¤­¤Þ¤»¤ó¤è?

+

(¥Ð¥°¤Î»ØŦ¤ò¤¯¤À¤µ¤ëÊý¤Ø)

+
    +
  • °Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¤¤¤¿¤À¤¯¤È, Ä´ºº¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹ +
      +
    • ¤Ç¤­¤ë¤À¤± make test ¤ò¤ª´ê¤¤¤·¤Þ¤¹

      +
      cd howm-¡û.¡û.¡û
      +make test
    • +
    • win ¤Ê¤é, test.bat ¤ò¤ª´ê¤¤¤·¤Þ¤¹ +
        +
      • test.bat Ãæ¤Î¡ÖHOWM_EMACS=¡Ä¡×¤ò´Ä¶­¤Ë¤¢¤ï¤»¤Æ½¤Àµ
      • +
      • test.bat ¤ò¼Â¹Ô
      • +
    • +
    • ¤É¤Á¤é¤â, emacs ¤¬Î©¤Á¤¢¤¬¤ê, ¼ÁÌäɼ¤¬É½¼¨¤µ¤ì¤Þ¤¹
    • +
    • ¤Ê¤ó¤Ç¤ï¤¶¤ï¤¶? ¢ª ¥Ð¥°¥ì¥Ý¡¼¥ÈFAQ
    • +
  • +
  • Êä­: ¥¬¥¤¥·¥å¥Ä¾åÅù +
      +
    • ¡Ö»ÅÍͤ«¡×¡Ö´ûÃΤΥХ°¤«¡×¤Î¥Á¥§¥Ã¥¯¤Ã¤Æ, ¤ª¤Ã¤¯¤¦¤Ç¤¹¤è¤Í¤¨.
    • +
    • howm ¤Ë´Ø¤·¤Æ¤Ï, ¤³¤Î¥Á¥§¥Ã¥¯¤ÏÉÔÍפǤ¹. + ¤½¤ì¤è¤ê¤â, µ¤·Ú¤Ë¤É¤ó¤É¤ó»ØŦ¤·¤Æ¤¤¤¿¤À¤¯Êý¤¬¤¢¤ê¤¬¤¿¤¤¤Ç¤¹.
    • +
    • ¤¼¤Ò, ºî¼Ô¤ÎÌܤ¬ÆϤ¯¤È¤³¤í(2ch ¤« howm wiki)¤Ë¤¿¤ì¹þ¤ó¤Ç¤¯¤À¤µ¤¤.
    • +
    • cf. + ¥Ð¥°¥ì¥Ý¡¼¥ÈFAQ, + YASWiki:¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ï²¼Ä®µ¤¼Á
    • +
  • +
  • ºî¼Ô³Ð½ñ +
      +
    • ¥Ç¥Ð¥Ã¥°ÍÑÊÑ¿ô howm-call-process-last-command
    • +
    • C-u M-x howm-bug-report ¤Ç´ØÏ¢ÊÑ¿ô¤Î°ìÍ÷
    • +
    • M-x howm-elp ¤Ç, ¥×¥í¥Õ¥¡¥¤¥é elp ¤Î½àÈ÷
    • +
  • +
+

È÷¹Í

+

»²¹Í

+

¸µ¥Í¥¿»²¾È. +ÆäË, Q-pocket¡¦HashedWiki¡¦ChangeLog ¥á¥â¤«¤é¤¤¤Ã¤Ñ¤¤¤Þ¤Í¤·¤Æ¤Þ¤¹. ´¶¼Õ.

+
    +
  • ¹­À¥ÍºÆóÃø¡Ö¤ä¤µ¤·¤¤ Emacs-Lisp ¹ÖºÂ¡×(¥«¥Ã¥È¥·¥¹¥Æ¥à, 1999) + ISBN 4-906391-70-2 + ¢ª + ¥ª¥ó¥é¥¤¥óÈÇ (¾¶?) +
      +
    • elisp ¤Ï¤¸¤á¤ë¤Ê¤é°µÅÝŪ¤Ë¤ª¤¹¤¹¤á
    • +
    • 6.4 ¾ÏËöÌäÂê¤Î¡Ö¥µ¥¯¥µ¥¯ dired¡×¤ò»²¹Í¤Ë¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿
    • +
  • +
+

¹¹¿·µ­Ï¿

+

thx > patch¡¦²þÎÉ°Æ¡¦»ØŦ¤ò¤¯¤À¤µ¤Ã¤¿³§ÍÍ

+
    +
  • ¥Æ¥¹¥ÈÈÇ +
      +
    • [2016-01-01] +
        +
      • ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð¤ò²óÈò +
          +
        • cl ¤ò¤ä¤á¤Æ cl-lib ¤ò»È¤¦
        • +
        • howm-ime-fix (howm-1.1.1 °ÊÁ°¤Î canna, egg, yc, anthy ¸ÄÊÌÂкö) ¤òÇÑ»ß
        • +
        • ¤½¤Î¾¤³¤Þ¤´¤Þ
        • +
      • +
    • +
  • +
  • ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.3 [2015-12-31] +
      +
    • emacs 25.1.50.1 (2015-12-27 »þÅÀ¤Î git Àèü = de88375) ¤Çµ¯Æ°¤ò³Îǧ
    • +
    • howm-1.4.3rc1 ¤ÈƱ¤¸ÆâÍƤǤ¹
    • +
    • fix +
        +
      • git Àèü emacs ¤Ç¤Î¥¨¥é¡¼ (void-function ed)
      • +
      • C-c , A (howm-list-around) ¤Ç howm-list-title ¤ÎÀßÄ꤬¸ú¤¤¤Æ¤¤¤Ê¤«¤Ã¤¿ + thx
      • +
      • howm-recentf¤Ê¤É¤Ç̵Â̤˥ê¥â¡¼¥È¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¥ï¡¼¥É¤òʹ¤¤¤Æ¤³¤Ê¤¤¤è¤¦¤Ë. + thx > ¸ñ¹¾±Ñ䤵¤ó (hide at koie.org)
      • +
      • ¥É¥­¥å¥á¥ó¥È¤Î¥Õ¥¡¥¤¥ë¥â¡¼¥É¤ÎÄûÀµ
      • +
    • +
  • +
  • ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.2 [2013-12-31] +
      +
    • Note +
        +
      • emacs 24.3 ¤ËÂбþ. 2013-12-25 »þÅÀ¤Î trunk (24.3.50.1) ¤Ç¤âµ¯Æ°¤ò³Îǧ.
      • +
      • howm-test130321 ¤ä howm-1.4.2rc1 ¤ÈƱ¤¸ÆâÍƤǤ¹
      • +
    • +
    • ²þÎÉ +
        +
      • C-c , a (howm-list-all) ¤ò¹â®²½ + thx
      • +
    • +
    • fix +
        +
      • emacs 24.3.1 ¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤»¤º¤Ë¼Â¹Ô¤·¤¿¤È¤­¤Î¥¨¥é¡¼ + "Can't detect type of ..." + thx
      • +
      • ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯²¼¤Ç¿·µ¬¥á¥â¤¬ howm-mode ¤Ë¤Ê¤é¤Ê¤¤¥Ð¥° + thx
      • +
      • ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð
      • +
    • +
  • +
  • ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.1 [2012-12-27] +
      +
    • ~/.howm-keys ¤¬Ìµ¤«¤Ã¤¿¤é, Á´¥á¥â¤ò¥¹¥­¥ã¥ó¤·¤ÆºÆÀ¸À® + thx + > Albert-san (areiner at tph.tuwien.ac.at)
    • +
    • fix: *.txt ¤È *.howm ¤¬º®ºß¤·¤Æ¤â°ìÍ÷¥â¡¼¥É¤Îɽ¼¨¤¬¤º¤ì¤Ê¤¤¤è¤¦¤Ë + thx
    • +
  • +
  • ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.0 [2012-08-16] +
      +
    • Note +
        +
      • Èó¸ß´¹Êѹ¹¤ËÃí°Õ! +
          +
        • 1.3.* ¤É¤ª¤ê¤ÎµóÆ°¤ò˾¤à¤Ê¤é¢­

          +
          (setq howm-compatible-to-ver1dot3 t) ;; (require 'howm) ¤è¤êÁ°¤Ë!
        • +
        • ¸ÄÊ̤ËÀßÄꤷ¤¿¤±¤ì¤Ð, M-x customize-group RET howm-compatibility RET
        • +
      • +
      • Ť¤¤³¤È±£¤·µ¡Ç½¤À¤Ã¤¿¤â¤Î¤ò¸ø¼°µ¡Ç½¤Ë¤·¤Þ¤·¤¿.
      • +
      • emacs-24 Âбþ
      • +
      • howm-1.4.0rc2 ¤ÈƱÆâÍƤǤ¹.
      • +
    • +
    • Êѹ¹ +
        +
      • howm-file-name-format ¤Î¥Ç¥Õ¥©¥ë¥È¤ò *.howm ¤«¤é *.txt ¤ËÊѹ¹ +
          +
        • ³ÈÄ¥»Ò¤Î¤»¤¤¤Ç¾¥Ä¡¼¥ë¤È¤ÎÏ¢·È¤Ëº¤¤Ã¤Æ¤¤¤ë¤é¤·¤¤»öÎã¤ò¸«¤«¤±¤ë¤Î¤Ç
        • +
      • +
      • °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¤â, ¹Ê¤ê¹þ¤ßÅù¤ò¥Õ¥¡¥¤¥ëñ°Ì¤¸¤ã¤Ê¤¯¥á¥âñ°Ì¤Ë. + ¤¿¤À¤·, date ¤Ç¤Î¹Ê¤ê¹þ¤ß¤Ï¥Õ¥¡¥¤¥ëñ°Ì¤Î¤Þ¤Þ.
      • +
      • ¥¿¥¤¥È¥ë¤¬¶õ¤Î¤È¤­¤ÏËÜʸ¤Î°ì¹ÔÌܤò¥¿¥¤¥È¥ë¤Ë.
      • +
    • +
    • ¤³¤Þ¤´¤Þ²þÎÉ +
        +
      • ¥á¥Ë¥å¡¼¤Ë°Ê²¼¤ò½ñ¤±¤Ð, ¥¿¥¤¥à¥¹¥¿¥ó¥×½ç¤Ç¤Ê¤¯¥Õ¥¡¥¤¥ë̾½ç¤Î¾å°Ì¤òɽ¼¨. + thx

        +
        %here%(howm-menu-recent identity)
      • +
      • ¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ¤â¥Ó¥å¡¼¥¢¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë. + thx

        +
        ;; ¡Öfile://¡Ä/¡×¤ä¡Ö>>> ¡Ä/¡×¤Ï open ¥³¥Þ¥ó¥É(mac ÍÑ)¤Ç³«¤¯
        +(setq howm-view-external-viewer-assoc '(("/$" . "open %s")))
      • +
      • ÊÑ¿ô howm-normalizer ¤Î¤¢¤ê¤¬¤Á¤ÊÀßÄê¥ß¥¹¤ò»¡¤¹¤ë¤è¤¦¤Ë + thx
      • +
      • ¥É¥­¥å¥á¥ó¥È¤Î¸Å¤¤²Õ½ê¤ò¼êľ¤·
      • +
      • rast ¤Þ¤ï¤ê¤Î»îºî¤òºï½ü
      • +
    • +
    • ±£¤·µ¡Ç½¤Î¸ø¼°²½ +
        +
      • ¥³¥Þ¥ó¥É +
          +
        • C-c , e (howm-remember) + thx + thx + thx + thx + thx
        • +
        • C-c , b (howm-list-buffers)
        • +
        • C-c , x (howm-list-mark-ring)
        • +
        • C-c , o (howm-occur)
        • +
      • +
      • ¥ê¥Þ¥¤¥ó¥À +
          +
        • ¥á¥Ë¥å¡¼¤Ë¡Ö%reminder¡×¤È½ñ¤¯¤È, ͽÄê¤È todo ¤ÎÅý¹ç°ìÍ÷ +
            +
          • ͽÄê¡Ö@¡×¤Ï, + howm-menu-schedule-days-before ÆüÁ°¤«¤é + howm-menu-schedule-days Æü¸å¤Þ¤Ç¤òÀèƬ¤Ëɽ¼¨ +
              +
            • [2004-12-03]@5 ¤Ê¤É¤È½ñ¤¯¤È, ¡Ö5 Æü´Ö¡×¤Î°Õ + (ÅöÆü¤â´Þ¤à¤Î¤Ç¡Ö12·î3Æü¤«¤é12·î7Æü¤Þ¤Ç¡×). + °ìÍ÷¤«¤é¾Ã¤¨¤ë¤Î¤¬¤½¤ì¤À¤±Í±Í½¤µ¤ì¤ë. + thx
            • +
          • +
          • ¡ºÀÚ¡Ö!¡×¤â, ¡ºÀÚÆü¤¬¤½¤ÎÈϰϤޤǤʤé°ì½ï¤Ëɽ¼¨
          • +
          • ¤½¤ì¤è¤ê²¼¤Ï½¾Íè¤É¤ª¤ê
          • +
          • ½¾Íè¤Î %schedule + %todo ¤È¤¯¤é¤Ù¤ë¤È, ¥¹¥­¥ã¥ó¤¬°ì²ó¤Ç¤¹¤à¤Ö¤ó¸úΨŪ
          • +
        • +
        • [2005-05-15 21:37]@ ¤Î¤è¤¦¤Ê½ñ¼°¤ÎͽÄê¤Ï, »þ¹ï½ç¤Ë¥½¡¼¥È + thx + thx + thx + thx
        • +
        • ¥á¥Ë¥å¡¼¤«¤é¥ê¥Þ¥¤¥ó¥À¤òľá¤­¤·¤¿¤È¤­¤Ë, + Âбþ¥Ð¥Ã¥Õ¥¡¤Î¹Ô¿ô¤¬Â¿¾¯¤º¤ì¤Æ¤¤¤Æ¤âµö¤¹. + thx

          +
          (setq howm-action-lock-forward-fuzziness 5) ;; ²¿¹Ô¤Þ¤Ç¤º¤ì¤Æ¤âµö¤¹¤«
        • +
      • +
      • ¥«¥¹¥¿¥Þ¥¤¥º +
          +
        • ¾åµ­ %reminder ¤ä todo list Ãæ¤Î»ÅÀÚ¤ê
        • +
        • grep »ÈÍÑ»þ¤Î coding system »ØÄê + thx
        • +
        • howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê + thx + thx + > taku ¤µ¤ó
        • +
        • todo ¤òºÑ¤Þ¤»¤¿¤È¤­¤Ë»ØÄꥳ¥Þ¥ó¥É¤ò¼Â¹Ô (howm-congrats-command)
        • +
      • +
    • +
    • fix: 2012-01-21 °Ê¹ß¤Î emacs-24 ¤Ç¥¨¥é¡¼ (void-variable inhibit-first-line-modes-regexps) + thx + thx > º´¡¹ÌÚ ´² ¤µ¤ó (sasaki at fcc.ad.jp)
    • +
  • +
  • ±£¤·µ¡Ç½ (experimental) +
      +
    • 1.1.1.* °ÊÁ°¤«¤é +
        +
      • ¥½¡¼¥¹¥³¡¼¥É¤ÎÆɤ߽ñ¤­¤â howm ¤Ç +
          +
        • GNU global + (Îã) + ¤â¤É¤­¤Î on the fly ÈǤᤶ¤·¤Æ
        • +
        • ¤Þ¤À³«È¯Ãæ. Ì£¸«¤¹¤ë¤Ë¤Ï¡Ä +
            +
          • ÊÑ¿ô howm-configuration-for-major-mode ¤òÀßÄê +
              +
            • major-mode ¤Ë±þ¤¸¤Æ, come-from ¥ê¥ó¥¯Åù¤Î½ñ¼°¤òÊѤ¨¤ë
            • +
            • howm-misc.el ¤Î¥³¥á¥ó¥È»²¾È
            • +
          • +
          • M-x howm-open-directory-independently ¤·¤Æ ~/elisp/howm ¤Ê¤É¤ÈÆþÎÏ
          • +
        • +
        • ÀµÂΤϷë¶É grep ¤Ê¤ó¤À¤«¤é, ¤¢¤Þ¤ê¸­¤¤Æ°ºî¤ò´üÂÔ¤·¤Æ¤Ï¤¤¤±¤Ê¤¤ +
            +
          • elisp, tex ¤Ç¤ÏÊØÍø¤À¤±¤É, ruby ¤¸¤ã»È¤¤¤â¤Î¤Ë¤Ê¤é¤º. +
              +
            • ¢è elisp ¤Î´Ø¿ô̾¤ä tex ¤Î¥é¥Ù¥ë¤ÏÂç°èŪ¤Ë°ì°Õ. ruby ¤ÏÈÝ.
            • +
          • +
        • +
      • +
    • +
    • 1.2 +
        +
      • °ìÍ÷»þ¤ÎÆâÍƥХåե¡¤Ë¥Õ¥¡¥¤¥ëÁ´ÂΤòɽ¼¨¤µ¤»¤ë

        +
        (setq howm-view-preview-narrow nil)
        +
          +
        • Ï¢·ë»þ¤Ï½¾Íè¤É¤ª¤ê(¥á¥â¶èÀÚ¤ê¤ÎÈϰϤΤß)
        • +
        • howm-configuration-for-major-mode °Ê³°¤Ç»È¤¦¾ìÌ̤Ï, ¤Þ¤¢¤Ê¤¤¤Ç¤·¤ç¤¦
        • +
      • +
      • ¥ê¥Þ¥¤¥ó¥À +
          +
        • ¥ê¥Þ¥¤¥ó¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º + thx

          +
          ;; ¿·¤·¤¤·¿¤Î¥ê¥Þ¥¤¥ó¥À¡Ö*¡×¤òÄêµÁ¤¹¤ëÎã:
          +;; ¡Ö[2004-07-11]* ¤Û¤²¡×¤Ï, »ØÄêÆü¤Þ¤Ç¾å¾º¤·, ¤½¤Î¤¢¤È²¼¹ß.
          +;; (½ÜÅÙ = - |ÃÙ¤ì / ͱͽÆü¿ô|. ͱͽÆü¿ô¤Î¥Ç¥Õ¥©¥ë¥È¤Ï 3)
          +;; 1. ½ÜÅٴؿô¤ò½àÈ÷ (ÃÙ¤ì¤ÈͱͽÆü¿ô(¤È¥¢¥¤¥Æ¥à)¤ò¿©¤Ã¤Æ½ÜÅÙ¤òÅǤ¯)
          +;;    ÃÙ¤ì: »ØÄêÆü¤«¤éº£Æü¤Þ¤Ç¤ÎÆü¿ô. ¤Þ¤À¤Ê¤é¥Þ¥¤¥Ê¥¹.
          +;;    ͱͽ: ¡Ö[2004-07-11]*8¡×¤Ê¤é 8. ¡Ö[2004-07-11]*¡×¤À¤±¤Ê¤é nil.
          +;;    ½ÜÅÙ: Â礭¤¤¤Û¤É¾å. ¡Ö³Ð½ñ¡×¤Ê¤é½éÆü¤¬ 0 ¤ÇËèÆü 1 ¤º¤Ä¸º¤ë.
          +;;    (¥¢¥¤¥Æ¥à: ¤Õ¤Ä¤¦¤Ï»È¤ï¤Ê¤¤¤±¤É¤Ä¤¤¤Ç¤Ë. howm-backend.el »²¾È)
          +(defun my-priority (late lazy item)
          +  (let ((r (howm-todo-relative-late late lazy 3)))
          +    ;; r = late / lazy. ̵»ØÄê»þ¤Ï lazy = 3.
          +    (- (abs r))))
          +;; 2. face ¤ò½àÈ÷
          +(defface my-face '((t (:foreground "cyan"))) "my face")
          +(setq my-face 'my-face)
          +;; 3. µ­¹æ, ½ÜÅٴؿô, face ¤òÅÐÏ¿.
          +;; »Ä¤ê¤Î°ú¿ôÆó¤Ä¤Ï, ¡ÖͽÄêɽ¤Ëɽ¼¨¤¹¤ë¤«¡×¡Ötodo ¥ê¥¹¥È¤Ëɽ¼¨¤¹¤ë¤«¡×.
          +(howm-define-reminder "*" #'my-priority 'my-face nil t)
          +
            +
          • »²¹Í: ´û¸¤Î½ÜÅٴؿô¤Î¥°¥é¥Õ¤¬ + UNIX USER »ï¤Îµ­»ö + ¤Ë½Ð¤Æ¤Þ¤¹
          • +
          • ¥Ð¥° +
              +
            • °ìÉô¤Îµ­¹æ¤Ï¤³¤±¤½¤¦ (Àµµ¬É½¸½ [¡Ä] Æâ¤ÇÆÃÊ̤ʰÕÌ£¤ò»ý¤Äµ­¹æ¤Ï¡ß)
            • +
            • ¡Ö[2004-07-11]- ¤Û¤²¡×¤«¤é¡Ö-¡×¾å¤Ç RET ¤·¤Æ¡Ö*¡×¤òÆþÎϤ¹¤ë¤È¥¨¥é¡¼
            • +
          • +
          • ¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. ¤³¤ó¤Ê¤ó¤Ç¤¤¤¤¤ó¤Ç¤·¤ç¤¦¤«?
          • +
        • +
      • +
      • ÆüÉÕ·Á¼° +
          +
        • ÆüÉÕ¾å¤Ç RET¡ß2 ¤·¤Æ¤«¤é¡Ä

          +
          -, + ¢ª Á°Æü, ÍâÆü
          +(, ) ¢ª Á°Æü, ÍâÆü
          +{, } ¢ª Á°·î, Íâ·î
          +[, ] ¢ª Á°Ç¯, Íâǯ
          +
            +
          • C-u 20 - ¢ª 20ÆüÁ°
          • +
          • ¥Ò¥Ã¥È¤·¤Ê¤«¤Ã¤¿¤é¤½¤ÎÀè¤ÎÆüÉÕ¤ò½ç¤Ëõ¤¹

            +
            (setq howm-date-forward-ymd-limit 90)  ;; 90ÆüÀè¤Ç give up
          • +
          • ¤â¤Ã¤È¤Þ¤·¤Ê¥­¡¼ÀßÄê¤Ê¤¤¤«¤Í¤¨
          • +
        • +
        • ÆüÉÕÆþÎÏ¡ÖC-c , d¡×¤·¤¿¤È¤­¤ÎÆ°ºî¤ò¤µ¤é¤Ë¾®¸­¤·¤¯

          +
          (setq howm-insert-date-pass-through t)
          +
            +
          • ÆüÉÕ¥³¥Þ¥ó¥É¤Ë¤Ä¤¤¤Æ¤Ï¸µ¤ÈƱÍÍ
          • +
          • ÆüÉÕ¥³¥Þ¥ó¥É¤¸¤ã¤Ê¤¤¤È¤­¤Ï, ¤¿¤À¤Á¤ËÈ´¤±¤ë. + C-c , d hoge ¤È¤« C-c , d C-a ¤È¤«»î¤»¤Ð¤ï¤«¤ê¤Þ¤¹.
          • +
          • ¤·¤Þ¤Ã¤¿. ¡Ö[2004-05-21]+¡×¤È¤«ÆþÎϤ·¤è¤¦¤È¤¹¤ë¤È¤È¤Þ¤É¤¦. + ¡Ö+ RET¡×¤Ç¡Ö+¤òÁÞÆþ¡×¤Ë¤Ï¤·¤Æ¤ß¤¿¤±¤É¡Ä
          • +
        • +
      • +
    • +
    • 1.2.1 +
        +
      • Major +
          +
        • howm2 ¤Îºî¤êľ¤·? (ext/howmkara) +
            +
          • ɬÍפˤ»¤Þ¤é¤ì¤Æ¤Ç¤Ã¤Á¤¢¤². ̾Á°¤â¤Æ¤­¤È¤¦. +
              +
            • ɬÍפÏËþ¤¿¤µ¤ì¤¿¤«¤é, ¤Þ¤¿ÊüÃÖ¤«¤â. 狼¤É¤¦¤Ë¤«¤·¤Æ¤¯¤ì¤ì¤Ð¡Ä
            • +
          • +
          • µ¡Ç½¤ÏÂಽ. ¥½¡¼¥¹¤ÏÁ°¤è¤ê¤Ï¤Þ¤·. +
              +
            • magic string ¤¬¤Á¤é¤Ð¤Ã¤Æ¤ë¤Î¤Ï¤±¤·¤«¤é¤ó¤±¤É¡Ä
            • +
          • +
          • °ì¥á¥â°ì¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤¹¤ë ext/hsplit.rb ¤â½ñ¤¤¤¿¤±¤É, + ¤³¤ì¤Ï¤µ¤é¤Ë¼êÈ´¤­
          • +
        • +
      • +
      • Minor +
          +
        • hcal.rb ¤Î¡Ö[2004-09-02]?¡×Âбþ(¼«Ê¬ÀìÍѤ½¤Î¤Ð¤·¤Î¤®) + ref
        • +
        • M-x howm-return-to-list ¢ª °ìÍ÷ɽ¼¨¤ËÌá¤ë + thx +
            +
          • ¤È¤êµÞ¤®Ä¶»¨¤Ç¤Ã¤Á¤¢¤². È¿¶Á¤Ë±þ¤¸¤Æ¤Þ¤¿¹Í¤¨¤è¤¦.
          • +
          • °ìÍ÷ɽ¼¨¤Ë¤¤¤Á¤¤¤ÁÌá¤ë¤³¤È¤Ê¤¯, °ìÍ÷¤Î¼¡¹àÌܤòľÀܳ«¤¯:

            +
            (defun my-howm-next-hit (n)
            +  (interactive "p")
            +  (let ((buf (save-window-excursion
            +               (howm-return-to-list)
            +               (when (not (eq major-mode 'howm-view-summary-mode))
            +                 (error "Sorry. This case is not cared."))
            +               (forward-line n)
            +               (let ((howm-view-summary-keep-cursor nil))
            +                 (howm-view-summary-open))
            +               (current-buffer))))
            +    (switch-to-buffer buf)))
            +(defun my-howm-previous-hit (n)
            +  (interactive "p")
            +  (my-howm-next-hit (- n)))
          • +
        • +
      • +
    • +
    • 1.2.2 +
        +
      • Æüì¥Õ¥©¥ë¥À +
          +
        • namazu folder »îºî +
            +
          • ¥³¡¼¥É»¨¤¹¤®
          • +
          • +from: ¤Ê¤É¤Ë̤Âбþ
          • +
          • ľÀܸ¡º÷¤¹¤ë¤Ë¤Ï M-x howm-search-namazu
          • +
        • +
        • rot13 folder/page »îºî + thx +
            +
          • ¤³¤ì¼«ÂΤϤªÍ·¤Ó¤À¤±¤É, ¡Ö¤Õ¤Ä¤¦¤Ç¤Ê¤¤¥Ú¡¼¥¸¡×¤ÎÎý½¬¤È¤·¤Æ
          • +
          • rot13:xxx ¥Ð¥Ã¥Õ¥¡¤Ï, C-c C-c ¤Ç¡Örot13 ¤·¤ÆÊݸ¡× +
              +
            • rot13 ¤Ê¥Õ¥¡¥¤¥ë¤ò³«¤¯¤Ë¤Ï, M-x yarot13-find-file
            • +
          • +
        • +
        • howm-search-path ¤Ë, Ä̾ï¤Î¡Ö¥Ç¥£¥ì¥¯¥È¥ê¡×°Ê³°¤â½ñ¤±¤ë

          +
          ;; namazu folder ¤È rot13 folder ¤ò¸¡º÷ÂоݤËÄɲÃ
          +;; (M-x howm-toggle-search-other-dir ¤ÇÍ­¸ú¡¦Ìµ¸ú¤òÀڤ꤫¤¨)
          +(let* ((nd "~/PATH/NMZ/Mail") ;; namazu ¥¤¥ó¥Ç¥Ã¥¯¥¹¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê
          +       (rd "~/g/r13") ;; ¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤Ï rot13 ¤µ¤ì¤ë
          +       (nf (howm-make-folder:namazu nd))
          +       (rf (howm-make-folder:rot13dir rd)))
          +  (setq howm-search-path (list nf rf)))
          +(howm-toggle-search-other-dir 1) ;; 0 ¤Ê¤é½é´ü¾õÂ֤ϡÖ̵¸ú¡×
        • +
      • +
      • [2004-12-13]_3 ¤ÎͱͽÆü¿ô¡Ö3¡×¤Î°ÕÌ£¤ò 1 ¤º¤é¤·¤¿ +
          +
        • ¤¤¤Þ¤Þ¤Ç¤Ï, ¾Êά¤È 0 ¤È 1 ¤¬Æ±¤¸°ÕÌ£¤Ë¤Ê¤Ã¤Æ¤¤¤¿
        • +
        • ¤¤¤º¤ìµ¤¤¬¸þ¤¤¤¿¤é, ¤â¤Ã¤È¤Þ¤¸¤á¤Ë¼ÂÁõ¤·¤Ê¤ª¤¹¤«¤â + thx
        • +
      • +
      • ext/hcal.rb ¤Ë iCalendar ½ÐÎϤòÄɲÃ, ¡Ä¤ÎºÇÄã¸Â¤Î¤È¤Ã¤«¤«¤ê¤À¤±
      • +
    • +
    • 1.3.1 +
        +
      • ¿·¤·¤¤¡Ö¥Ð¥°¤Î»ØŦ¤Î¼ê½ç¡×°Æ +
          +
        • make test ¤Ç emacs ¤òµ¯Æ°
        • +
        • ¥Ð¥°¤òȯ¾É¤µ¤»¤ë +
            +
          • ȯ¾É¤·¤Ê¤±¤ì¤Ð, ¼«Ê¬¤Î .emacs ¤«¤é´ØÏ¢¤·¤½¤¦¤Ê¤È¤³¤í¤ò + sample/dot.emacs ¤Ø¥³¥Ô¡¼¤·¤Æ, ¤â¤¦°ìÅÙ make test
          • +
        • +
        • ȯ¾É¤·¤¿¤é¤¹¤«¤µ¤º M-x howm-bug-shot +
            +
          • ¥Ð¡¼¥¸¥ç¥ó¤ä¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤Ê¤É¤¬É½¼¨¤µ¤ì¤Þ¤¹
          • +
        • +
        • ¥³¥á¥ó¥È¤ò²Ã¤¨¤Æ 2ch ¤ËŽ¤ë
        • +
      • +
    • +
    • 1.3.3 +
        +
      • ¿·µ¬¥á¥âºîÀ®¤ò¤¹¤Ù¤Æ howm-remember ¤Ë¤¹¤ë¤Ë¤Ï¡Ä

        +
        ;; howm-create ¤ò¤¹¤Ù¤Æ howm-remember ¤Ë¤¹¤ê¤«¤¨¤ë
        +(defadvice howm-create (around remember activate)
        +  (if (interactive-p)
        +      (howm-remember)
        +    ad-do-it))
        +(setcdr (assoc "[¿·µ¬]" howm-menu-command-table-ja)
        +        '(howm-remember current))  ;; [2006-05-15] ½¤Àµ
        +
          +
        • ¥á¥Ë¥å¡¼¾å¤Ç c ¤ò²¡¤·¤¿¤È¤­, ¡Ö¥á¥Ë¥å¡¼¤ÎÁ°¤Ëɽ¼¨¤·¤Æ¤¤¤¿¥Ð¥Ã¥Õ¥¡¡× + ¤ò½Ð¤¹Êý¤¬¹¥¤ß¤Ê¤é, ¡Öcurrent¡×¤ò¡Öprevious¡×¤Èľ¤·¤Æ¤¯¤À¤µ¤¤
        • +
      • +
      • ¥«¥Æ¥´¥êÊ̤Πtodo list + thx + thx + thx + thx +
          +
        • ¡ÖʬÎà¡×¤ÎÍ×˾¤Ï¤Ä¤Ã¤Ñ¤Í¤Æ¤­¤¿¤ó¤À¤±¤É, º£Æü¤Ïµ¤¤Þ¤°¤ì¤Ëµ¤¤¬¸þ¤¤¤¿¤Î¤Ç + ¤ª»î¤·. Àµ¼°µ¡Ç½¤Ë¤·¤Æ¤¤¤¯¤«¤É¤¦¤«¤Ï̤Äê.
        • +
        • ¥á¥Ë¥å¡¼¤Ë¤³¤¦½ñ¤¯¤È, ¡Öfoo¡×¡Öbar¡×¡Öbaz¡×¤ò´Þ¤à todo ¤ò + ʬÎष¤Æɽ¼¨

          +
          %here%(howm-menu-categorized-reminder ("foo" "bar" "baz"))
          +
            +
          • ¤Á¤Ê¤ß¤Ë, %here% ¤Ç¤Ï¥¯¥ª¡¼¥È¤ÏÉÔÍפǤ¹
          • +
        • +
        • ¤µ¤é¤Ë, ³Æ¹Ô¤Î¡Öfoo¡×¡Öbar¡×¡Öbaz¡×¤ò¾Ã¤·¤¿¤±¤ì¤Ð

          +
          %here%(howm-menu-categorized-reminder ("foo" "bar" "baz") nil t)
        • +
        • ¡Ömisc.¡×¤òÈóɽ¼¨¤Ë¤·¤¿¤±¤ì¤Ð

          +
          %here%(howm-menu-categorized-reminder ("foo" "bar" "baz") nil nil t)
        • +
      • +
      • °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨. + ¤Á¤Ê¤ß¤Ë½¾Íè¤Î¤Ï, ¡Ö¥Þ¥Ã¥ÁÆâÍƤΤ«¤ï¤ê¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨¡×. + thx > Highfly ¤µ¤ó

        +
        (setq howm-view-list-title-type 2) ;; ¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨
        +(setq howm-view-summary-format "") ;; ¥Õ¥¡¥¤¥ë̾¤ò¾Ã¤·¤¿¤±¤ì¤Ð
      • +
      • C-c , M ¤Ç¡Ö¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Æ¥á¥â¤ò³«¤¯¡× + thx > Eduardo Ochs ¤µ¤ó
      • +
    • +
    • 1.3.7 +
        +
      • °ìÍ÷»þ¤Ë¥¦¥£¥ó¥É¥¦Ê¬³ä¤ò²õ¤µ¤Ê¤¤ÀßÄê. + thx

        +
        (setq riffle-keep-window t)
        +(setq riffle-window-initializer nil)
        +
          +
        • ÆâÍƥХåե¡¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó.
        • +
        • ¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. º£¸åÊѹ¹¤Î²ÄǽÀ­¤¢¤ê.
        • +
      • +
      • M-x howm-list-active-todo ¤Ç, ¸½ºßÍ­¸ú¤Ê(¡áÀøÉúÃæ¤Ç¤Ê¤¤) todo ¤Î¤ß¤ò°ìÍ÷. + thx +
          +
        • ¤Ä¤¤¤Ç¤Ë, M-x howm-list-sleeping-todo ¤Ç, ÀøÉúÃæ¤Î todo ¤Î¤ß¤ò°ìÍ÷.
        • +
        • ¤È¤ê¤¢¤¨¤º´Ø¿ô¤À¤±»îºî. ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î°Æ¤¬¤¢¤ì¤Ð¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤.
        • +
        • ¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤«¤éÀøÉúÃæ todo ¤ò¾Ã¤¹¤Ë¤Ï, + M-x customize-variable RET howm-menu-todo-priority RET ¤Ç + ¡ÖHide sleeping reminders¡×¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤.
        • +
      • +
      • ¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë¤¹¤ë. + thx > Mielke-san (peter at exegenix.com), + thx

        +
        ;; emacs ¾å¤Ç¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë.
        +;; (¥Õ¥¡¥¤¥ë̾¼«ÂΤÏÊѹ¹¤·¤Ê¤¤)
        +(add-hook 'howm-mode-hook 'howm-mode-set-buffer-name)
        +(add-hook 'after-save-hook 'howm-mode-set-buffer-name)
        +
          +
        • ¥¿¥¤¥È¥ë¡Ö¤Û¤²¡×¤Î¥á¥â¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò¡Ö=¤Û¤²¡×¤Ë + thx

          +
          ;; ¥¿¥¤¥È¥ë¤¬ AAA ¤Ê¤é¥Ð¥Ã¥Õ¥¡Ì¾¤ò =AAA ¤Ë.
          +;; ²¼¤Î howm-mode-set-buffer-name ¤òÀßÄꤷ¤¿¾å¤Ç¡Ä
          +(setq howm-buffer-name-format "=%s")
        • +
        • ËÜÅö¤Ï howm ¤ÈÆÈΩ¤·¤¿¥Ä¡¼¥ë¤Ë¤¹¤ëÊý¤¬¤¤¤¤¤±¤É, + ¤ª¤Ã¤¯¤¦¤Ê¤Î¤Ç¤Ò¤È¤Þ¤º.
        • +
      • +
    • +
    • 1.3.8 +
        +
      • M-x howm-extend-deadlines ¤Ç, + »ØÄêÆü¤ò²á¤®¤¿¡ºÀÚ(!)¤ò¤¹¤Ù¤Æ°ìÄêÆü¿ô¸å¤Ø±ä´ü. + thx +
          +
        • »ÅÍͤ⥤¥ó¥¿¥Õ¥§¡¼¥¹¤â¤Þ¤À᤭Âæ.
        • +
        • ¥á¥â¤ò¾¡¼ê¤Ë½ñ¤­¤«¤¨¤ë´í¸±¤ÊÁàºî¤Ê¤Î¤Ç, ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!
        • +
      • +
    • +
    • 1.3.9 +
        +
      • ¥á¥Ë¥å¡¼¤Ë¡Ö%here%(howm-menu-search "[ÃÇ]ÊÒŪ" full t)¡×¤È½ñ¤±¤Ð, + ¡ÖÃÇÊÒŪ¡×¤ò´Þ¤à¥á¥â¤ÎÆâÍÆÁ´ÂΤò¥á¥Ë¥å¡¼¤ËËä¤á¹þ¤ß. + thx + > Morgan Veyret ¤µ¤ó (morgan.veyret at gmail.com). +
          +
        • ñ¤Ë "ÃÇÊÒŪ" ¤È¤·¤Ê¤¤¤Î¤Ï, ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¼«¿È¤¬¥Ò¥Ã¥È¤¹¤ë¤Î¤òÈò¤±¤ë¾®ºÙ¹©
        • +
      • +
    • +
    • 1.4.2 +
        +
      • °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ç¡Ö¥Õ¥¡¥¤¥ë | ¥Þ¥Ã¥Á¹Ô¡×¤Î¤«¤ï¤ê¤Ë¤³¤ó¤Êɽ¼¨¤Ë. + ¤³¤Î¤È¤­¥¿¥¤¥È¥ëÀèƬ¤Î¡Ö=¡×¤Ïɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë. + (experimental) + thx + thx + > Albert-san (areiner at tph.tuwien.ac.at)

        +
        ¥¿¥¤¥È¥ë A|
        +|¥Þ¥Ã¥Á¹Ô A1
        +|¥Þ¥Ã¥Á¹Ô A2
        +¥¿¥¤¥È¥ë B|
        +|¥Þ¥Ã¥Á¹Ô B1
        +|¥Þ¥Ã¥Á¹Ô B2
        +
          +
        • ÀßÄê

          +
          (setq howm-view-list-title-type 2) ;; Show title before summary.
          +(setq howm-view-summary-format "") ;; If you want to delete file names.
          +(setq howm-entitle-items-style2-max-length 50)
          +(setq howm-entitle-items-style2-format "%-0s|%s") ;; for title and summary
          +(setq howm-entitle-items-style2-title-line t) ;; independent title line?
        • +
        • ¤µ¤é¤Ë, M-x customize-variable RET howm-list-title RET ¤âÀßÄê¤ò
        • +
        • À©¸Â: °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Ç C-c , a (howm-list-all) ¤·¤¿¤È¤­¤Ï + Âбþ¤¹¤ë¥¿¥¤¥È¥ë¹Ô¤ËÈô¤ó¤Ç¤¯¤ì¤Ê¤¤ +
            +
          • ¤½¤â¤½¤â¹Ô»Ø¸þ¤Çºî¤Ã¤Æ¤¤¤¿¤Î¤Ç¼ÂÁõ¤¬ÌµÍýÌðÍý
          • +
          • ¤­¤Á¤ó¤Èľ¤¹¤Î¤Ï¤á¤ó¤É¤¦. ¶¯¤¤¼ûÍפ¬¤Ê¤±¤ì¤Ð¡Ä
          • +
        • +
      • +
    • +
  • +
  • ¡ÄÍúÎòÈ´¿è¡Ä (<URL:OLD.rd> »²¾È) +
      +
    • [2010-12-30] 1.3.9 Èù½¤Àµ
    • +
    • [2009-12-31] 1.3.8 ²á¤®¤¿¡ºÀÚ¤ËÃ忧
    • +
    • [2008-12-31] 1.3.7 ÆâÉô¥³¡¼¥ÉÀ°Íý (ÉûºîÍѤòʬΥ). + howm-list-normalizer ¤«¤é howm-normalizer ¤Ø.
    • +
    • [2008-05-31] 1.3.6 Ã忧¤ÎÉÔ¶ñ¹ç½¤Àµ
    • +
    • [2007-12-09] 1.3.5 ²Æ»þ´Ö¤ÎÉÔ¶ñ¹ç½¤Àµ
    • +
    • [2006-12-16] 1.3.4 ¥»¥­¥å¥ê¥Æ¥£½¤Àµ
    • +
    • [2005-08-02] 1.3.0 alias. M-x customize. ¥¿¥¤¥È¥ëɽ¼¨.
    • +
    • [2005-05-02] 1.2.2 ¥Ð¥Ã¥¯¥¨¥ó¥ÉÀÚ¤êÎ¥¤·. gfunc.el
    • +
    • [2004-08-24] 1.2 ÊÝα¡Ö~¡×¤Î¸ø¼°²½. howm.el, riffle.el
    • +
    • [2004-05-06] 1.1.2 make test
    • +
    • [2004-02-27] 2ch howm ¥¹¥ì 2
    • +
    • [2004-02-21] 1.1.1 ¡Ö±£¤·µ¡Ç½¡×À©ÅÙ¤òƳÆþ
    • +
    • [2004-01-25] sf.jp ¤Ø°ÜÆ°
    • +
    • [2005-01-08] UNIX USER 2004.2
    • +
    • [2003-12-27] howm wiki
    • +
    • [2003-11-22] 1.1 ¥Ç¥Õ¥©¥ë¥È¤ÎÊѹ¹ + (¥ê¥ó¥¯¡¦ÆüÉÕ¡¦¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°, °ì¥á¥â°ì¥Õ¥¡¥¤¥ë, ¥á¥Ë¥å¡¼¤â¥á¥â¤Î°ì¼ï)
    • +
    • [2003-10-27] 1.0.4.2 ½Å¤¯¤Ê¤ë¥Ð¥°¤ò½¤Àµ. ¤è¤¯¤³¤ó¤Ê¤Î¤ÇÆ°¤¤¤Æ¤¿¤Ê¤¢¡Ä
    • +
    • [2003-10-02] 1.0.4 ³°Éô viewer, ¥á¥Ë¥å¡¼¤Î²á¾ê¶¯²½
    • +
    • [2003-09-23] ¡Ö¥Æ¥¹¥ÈÈǡפòƳÆþ
    • +
    • [2003-09-18] 1.0.2 HTML ²½¥¹¥¯¥ê¥×¥È howm2
    • +
    • [2003-09-17] 2ch howm ¥¹¥ì
    • +
    • [2003-09-17] 1.0 ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤ò³¬Áز½
    • +
    • [2003-09-16] 0.9.7.1 Wiki É÷¥ê¥ó¥¯ [[¤Û¤²]]
    • +
    • [2003-09-14] 0.9.4.1 grep æµÑ
    • +
    • [2003-09-09] 0.9 ruby æµÑ
    • +
    • [2003-08-31] 0.8.5 ¥¿¥¤¥È¥ë°ìÍ÷
    • +
    • [2003-06-03] 0.8.4 °Âľ¥«¥ì¥ó¥À¡¼ hcal.rb
    • +
    • [2002-11-03] 0.8 ¥á¥Ë¥å¡¼, ½ÜÅÙ½ç todo @[2003/09/20]+
    • +
    • [2002-09-17] 0.7 1 Æü 1 ¥Õ¥¡¥¤¥ë, come-from ¥ê¥ó¥¯ <<
    • +
    • [2002-09-14] 0.6 ¥ê¥ó¥¯ÇÑ»ß(¤¹¤Ù¤Æ¤Ï¡Ö¸¡º÷¡×)
    • +
    • [2002-06-10] ÆüËÜȯ¤Î wiki ¥¯¥í¡¼¥ó¥ê¥¹¥È
    • +
    • [2002-05-29] 0.1 ¸ø³«
    • +
  • +
+

¥¢¥É¥ì¥¹

+ + + + diff --git a/doc/README.html b/doc/README.html new file mode 100644 index 0000000..7cb4e43 --- /dev/null +++ b/doc/README.html @@ -0,0 +1,241 @@ + + + + +README.rd + + +

howm tutorial

+

First day

+

Write a note.

+
    +
  • Type Ctrl-C , , to open the menu.

    +
    [New] Search([String] [Regexp]) [Dup] [<Title] [<Name] [Date>] [Key>] [Update]
    +[All] [Recent] [Schedule] [Todo] [Update Menu]
  • +
  • Confirm the cursor is on [New], and type [return] there to open new note.

    +
    = 
    +[2002-09-16 20:08] >>> /home/hira/elisp/howm/howm-mode.el
  • +
  • Write anything.

    +
    = First note
    +[2002-09-16 20:08] >>> /home/hira/elisp/howm/howm-mode.el
    +foo
    +bar
    +baz
  • +
+

Second day

+

Write today's note.

+
    +
  • Type Ctrl-C , , and type [return] on [New]. Then, write freely.
  • +
+

Read notes.

+
    +
  • Type Ctrl-C , , to open the menu.

    +
    [New] Search([String] [Regexp]) [Dup] [<Title] [<Name] [Date>] [Key>] [Update]
    +[All] [Recent] [Schedule] [Todo] [Update Menu]
  • +
  • Move the cursor to [All] and type [return] there to browse all notes.
  • +
  • Move the cursor up and down to view each note.
  • +
  • Type [space] and [backspace] to scroll the note.
  • +
  • Type [return] to open the note.
  • +
+

Concatenate notes.

+
    +
  • Type Ctrl-C , , to open the menu.
  • +
  • Move the cursor to [All] and type [return].
  • +
  • Type @ to concatenate all notes.
  • +
  • Type [space] and [backspace] to scroll the notes.
  • +
  • Type @ to toggle summary-view and concatenated-view.
  • +
  • Type [return] to open the note.
  • +
+

Search a word in notes.

+
    +
  • Type Ctrl-C , , to open the menu.
  • +
  • Move the cursor to [String] and type [return] there to search for a string.

    +
    Keyword:
  • +
  • Input a string.

    +
    Keyword: foo
  • +
  • Type [return] to browse matched notes.
  • +
+

Search a phrase in notes.

+
    +
  • Type Ctrl-C , , to open the menu.
  • +
  • Move the cursor to [String] and type [return].
  • +
  • Input a string. Type Ctrl-q and [space] to input a whitespace.

    +
    Keyword: hoge fuga
  • +
  • Type [return] to browse matched notes.
  • +
+

Third day

+

Try goto link.

+
    +
  • Ctrl-C , , and [return] on [New] to open new note.
  • +
  • Write '>>> foo'.

    +
    = 
    +[2002-09-17 20:15]
    +>>> foo
  • +
  • A line is drawn under it. + Move the cursor on it and type [return] to search for 'foo' in all notes.
  • +
+

Try come-from link.

+
    +
  • Write '<<< hoge' in today's note.

    +
    = 
    +[2002-09-17 20:15]
    +>>> foo
    +<<< hoge
  • +
  • Move the cursor on '<<<' and type [return] to search for 'hoge' in all notes.
  • +
  • Select the first day's note and type [return] to open it.
  • +
  • A line is drawn under 'hoge'. + Move the cursor on it and type [return] to search for 'hoge' in all notes.
  • +
  • Remember that '<<< hoge' is always shown first when you search for 'hoge'. + Others are sorted by their modification time.
  • +
+

Search come-from keyword with completion.

+
    +
  • Ctrl-C , , and [return] on [String] to search for a keyword.

    +
    Keyword:
  • +
  • Type 'ho' and type [space] to complete come-from keyword 'hoge'.

    +
    Keyword: hoge
  • +
  • Type [return] to search for 'hoge'.
  • +
+

Fourth day

+

Sort notes.

+
    +
  • Ctrl-C , , and [return] on [All] to browse all notes.
  • +
  • Type S to sort notes.

    +
    Sort by:
  • +
  • Type [space] to show available criteria.
  • +
  • Type 'da' and type [space] to complete 'date'.

    +
    Sort by: date
  • +
  • Type [return] to execute it.
  • +
+

Filter notes.

+
    +
  • Ctrl-C , , and [return] on [All] to browse all notes.
  • +
  • Type f to filter notes.

    +
    Filter by:
  • +
  • Type [space] to show available criteria.
  • +
  • Type 'co' and type [space] to complete 'contents'.

    +
    Filter by: contents
  • +
  • Type [return] and input 'foo'.

    +
    Search in result (grep): foo
  • +
  • Type [return] to execute it.
  • +
+

Read help.

+
    +
  • Ctrl-C , , and [return] on [All] to browse all notes.
  • +
  • Type ? and read the help message.
  • +
+

Use shortcut.

+
    +
  • Type Ctrl-C , c to create new note.
  • +
+

Fifth day

+

Input todo.

+
    +
  • Type Ctrl-C , c to create new note.
  • +
  • Write as follows.

    +
    [2003-09-10]- foo
    +[2003-09-10]+ bar
    +[2003-09-10]! baz
    +[2003-09-10]~ qux
  • +
+

Browse todo.

+
    +
  • Ctrl-C , , and [return] on [Todo] to browse all todo.
  • +
  • Move cursor and type [return] to open the note.
  • +
  • Type Ctrl-C , , to show the head of todo under the menu.
  • +
  • Items are sorted by a magic criterion.

    +
    - sink after the date (reminder)
    ++ float after the date (todo)
    +! float until the date (deadline)
    +~ sink and float periodically after the date (defer)
  • +
+

Finish todo.

+
    +
  • Ctrl-C , , and [return] on [Todo] to browse all todo.
  • +
  • Move cursor and type [return] to open the note.

    +
    [2003-09-10]- foo
  • +
  • Move cursor on - and type [return] to show todo-menu.

    +
    RET (done), x (cancel), symbol (type), num(laziness): 
  • +
  • Type [return] to finish this todo.

    +
    [2003-09-10]. [2003-09-10]:- foo
  • +
+

Input schedule.

+
    +
  • Type Ctrl-C , c to create new note.
  • +
  • Write as follows.

    +
    [2003-09-10]@ hoge
  • +
+

Browse schedule.

+
    +
  • Ctrl-C , , and [return] on [Schedule] to browse all schedule.
  • +
  • Type [space] and [backspace] to scroll the list.
  • +
  • Type . to jump to today.
  • +
  • Type Ctrl-C , , to show the head of schedule under the menu.
  • +
  • Type [return] on > at the beginning of line to open the corresponding note.
  • +
+

Input recurring tasks.

+
    +
  • move cursor to '2003-09-10' on the below form in the opened note.

    +
    [2003-09-10]@ hoge
  • +
  • Type [return] to show date-menu.

    +
    [Wed] RET(goto), +num(shift), yymmdd(set), ~yymmdd(repeat), .(today): 
  • +
  • Input ~031231 [return] and then type m [return] to the below question.

    +
    Every? [RET(all), num(days) w(week), m(month), y(year)] 
  • +
  • And monthly tasks are added automatically until 2003-12-31.

    +
    [2003-09-10]@ hoge
    +[2003-10-10]@ hoge
    +[2003-11-10]@ hoge
    +[2003-12-10]@ hoge
  • +
  • You can use '~1231' instead of '~031231' to input same-year items.
  • +
+

Sixth day

+

Try action-lock { }.

+
    +
  • Type Ctrl-C , c to create new note.
  • +
  • Write { }.

    +
    { }
  • +
  • Move cursor on { } and type [return].

    +
    {*}
  • +
  • Type [return] again.

    +
    {-}
  • +
+

Try action-lock {_}.

+
    +
  • Type Ctrl-C , c to create new note.
  • +
  • Write {_}.

    +
    {_}
  • +
  • Move cursor on {_} and type [return].

    +
    [2003-09-10 04:12]
  • +
+

Try aliases.

+
    +
  • Write '<<< hoge <<< fuga <<< piyo' in a note.

    +
    = 
    +[2002-09-17 20:15]
    +<<< hoge <<< fuga <<< piyo
  • +
  • Write 'hoge' in another note.
  • +
  • Write 'fuga' in yet another note.
  • +
  • Put cursor on 'fuga' and type [return]. + You will see all 'hoge', 'fuga', and 'piyo' are found together.
  • +
+

Seventh day

+

Try customization.

+
    +
  • Type Ctrl-C , , to show the menu.
  • +
  • Move cursor on [Preference] and type [return].
  • +
  • Watch customization items and modify them if you like.
  • +
+

Try editing menu.

+
    +
  • Type Ctrl-C , , to show the menu.
  • +
  • Move cursor on [Edit Menu] and type [return].
  • +
  • Delete the line '%random', and type Ctrl-C , , to observe its effect.
  • +
  • Again try [Edit Menu] and write '%random' to restore it.
  • +
  • Type Ctrl-C , , and move cursor to '%Editing Menu%' at the bottom.
  • +
  • Type [return] and read documentation of menu syntax.
  • +
+ + + diff --git a/doc/README.ja.rd b/doc/README.ja.rd new file mode 100644 index 0000000..df65329 --- /dev/null +++ b/doc/README.ja.rd @@ -0,0 +1,1305 @@ +=begin + += howm (°ì¿Í¤ª¼ê·Ú Wiki ¤â¤É¤­) +$Id: README.ja.rd,v 1.337 2012-12-29 00:59:48 hira Exp $ + +Emacs ¤ÇÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó¤È¤ë¤¿¤á¤Î´Ä¶­¤Ç¤¹. +ʬÎൡǽ¤Ï¤¢¤¨¤Æ¤Ä¤±¤Þ¤»¤ó. +¤«¤ï¤ê¤Ë, Á´Ê¸¸¡º÷¤È¥á¥â´Ö¥ê¥ó¥¯¤¬¼ê·Ú¤Ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. +¼«Í³½ñ¼°¤Ê¤Î¤Ç²þ½¡¤âÉÔÍ× :-) + +== Ìܼ¡ + +* ((<»È¤¤Êý>)) ¡Ä + ((<¥á¥â¤ò½ñ¤³¤¦>))¡¿((<¥á¥â¤òÆɤ⤦>))¡¿((<¥ê¥Þ¥¤¥ó¥À>)) +* ((<ƳÆþË¡>)) ¡Ä + ((<¥¤¥ó¥¹¥È¡¼¥ë>))¡¿((<¥«¥¹¥¿¥Þ¥¤¥º>))¡¿((<³°Éô¥Ä¡¼¥ë>)) +* ((<¼ÂÁõ>)) ¡Ä + ((<¼ÂÁõ¤Ë¤Ä¤¤¤Æ>))¡¿((<Æ°¤­¤Þ¤»¤ó¤è?>)) +* ((<È÷¹Í>)) ¡Ä + ((<»²¹Í>))¡¿((<¹¹¿·µ­Ï¿>))¡¿((<¥¢¥É¥ì¥¹>)) + +== »È¤¤Êý + +* ¤¤¤í¤¤¤í¤¢¤ê¤¹¤®¤Æ²¿¤¬²¿¤ä¤é + ¢ª Àè¤Ë((<¥Á¥å¡¼¥È¥ê¥¢¥ë|URL:TUTORIAL.ja.rd>))¤ò¤É¤¦¤¾ +* ¼«Í³ÅÙ¤¢¤ê¤¹¤®¤Æ¤É¤¦»È¤¨¤Ð¤¤¤¤¤ä¤é + ¢ª ((<¤³¤ó¤Ê¤Õ¤¦¤Ë»È¤¨¤Þ¤¹|URL:index-j.html#hint>)) + +=== ¥á¥â¤ò½ñ¤³¤¦ +(howm-mode) + +* ¼ê½ç + * C-c , , (M-x howm-menu) ¤Ç¥á¥Ë¥å¡¼¤ò½Ð¤·, + [¿·µ¬] ¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó ¢ª ¡Öº£Æü¤Î¥á¥â¡×¤ò³«¤¯ + * ¤Þ¤¿¤Ï, ľÀÜ C-c , c (M-x howm-create) + * ¤³¤ó¤Ê¥Æ¥ó¥×¥ì¡¼¥È¤¬É½¼¨¤µ¤ì¤ë + = ¢£ ¢«(¥¿¥¤¥È¥ëÍó) + [2002-09-16 20:08] >>> /home/hira/elisp/howm/howm-mode.el + ¢¬(ºîÀ®Æü & ¤½¤ÎÁ°¤Ë¸«¤Æ¤¿¥Õ¥¡¥¤¥ë) + * ¸«¤Æ¤¿¥Õ¥¡¥¤¥ë¤¬ÉÔÍפʤé, undo (C-x u ¤À¤« C-_ ¤À¤«) ¤Ç¾Ã¤¹ + * ¥Æ¥ó¥×¥ì¡¼¥È¼«ÂΤ¬ÉÔÍפʤé, ³¤±¤Æ¤â¤¦°ìÅÙ undo + * ¹¥¤­¤Ê¤³¤È¤ò¹¥¤­¤Ê¤è¤¦¤Ë½ñ¤¯ + * ¤½¤ó¤À¤±. + +* ¥¿¥¤¥È¥ëÍó (1 ¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â) + * ¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤È, foo ¤È bar ¤¬¥¿¥¤¥È¥ë + = foo + (¡Ä ¤Û¤²¤Û¤² ¡Ä) + = bar + (¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä) + * Ï¢·ëɽ¼¨¤Ç¤Ï, (¡Ä ¤Û¤²¤Û¤² ¡Ä) ¤ä (¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä) ¤¬¤Ò¤È¤«¤¿¤Þ¤ê + * Àµ³Î¤Ê½ñ¼°¤Ï, + (¹ÔƬ)=(¶õÇò)(¥¿¥¤¥È¥ë)(¹ÔËö) + * ½ñ¼°¤ÏÊѹ¹²Ä (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * ¥¿¥¤¥È¥ë¤Ê¤·¤Ç, ñ¤Ë¥á¥â¤Î¶èÀÚ¤ê¤È¤·¤Æ»È¤¦¤À¤±¤Ç¤â OK + (¡Ä ¤Û¤²¤Û¤² ¡Ä) + = + (¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä) + = + (¡Ä ¤Ø¤í¤Ø¤í ¡Ä) + +* ¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤È¥ê¥ó¥¯ + * goto ¥ê¥ó¥¯: ¥Õ¥¡¥¤¥ë(¥Ç¥£¥ì¥¯¥È¥ê)̾ or ´Þ¤Þ¤ì¤ëʸ»úÎó + >>> ~/.emacs + >>> /usr/src + >>> ¤Û¤²¤Û¤² + * ËÜʸÃæ¤Ë¡Ö¤Û¤²¤Û¤²¡×¤È¤¤¤¦Ê¸»úÎó¤ò´Þ¤à¥á¥â¤Ø¤Î¥ê¥ó¥¯ + * come-from ¥ê¥ó¥¯: ¾¤Î¥á¥â¤Ç¡Ö¤Õ¤¬¤Õ¤¬¡×¤È¤¤¤¦Ê¸»úÎ󤬽ФƤ­¤¿¤é, + ¤¼¤ó¤Ö¤³¤Î¥á¥â¤Ø¤Î¥ê¥ó¥¯¤Ë + <<< ¤Õ¤¬¤Õ¤¬ + * »²¹Í + ((<"Jargon: COME-FROM"|URL:http://catb.org/~esr/jargon/html/C/COME-FROM.html>)) + * Wiki É÷¥ê¥ó¥¯: goto ¤ÈƱ¤¸. ¤¿¤À¤·¡Ö<<< ¤Ø¤í¤Ø¤í¡×¤¬¤â¤·¤Ê¤±¤ì¤Ðºî¤ë. + [[¤Ø¤í¤Ø¤í]] + +* ¥ê¥ó¥¯¤Ë¤Ï²¼Àþ¤¬°ú¤«¤ì¤ë. ²¼Àþ¤Ë¥«¡¼¥½¥ë»ý¤Ã¤Æ¤Ã¤Æ¥ê¥¿¡¼¥ó¥­¡¼! + * ³ºÅö¥Õ¥¡¥¤¥ë¤Î°ìÍ÷¤¬É½¼¨¤µ¤ì¤ë (¢ª((<¥á¥â¤òÆɤ⤦>))) + * ¤¿¤È¤¨¤Ð, ¡Ö>>> emacs¡×¤Ê¤é¤³¤ó¤Ê°ìÍ÷ + <<< emacs ¢« ¤º¤Ð¤ê¤Î come-from Àë¸À¤ò¤·¤¿¥á¥â + <<< emacs lisp ¢« ¡Öemacs¡×¤ò´Þ¤à come-from ¤òÀë¸À¤·¤¿¥á¥â + <<< ¼«ºî emacs lisp + grep, ruby, emacs ¤Î regexp ¤Î°ã¤¤ ¢« ËÜʸÃæ¤Ë¡Öemacs¡×¤ò´Þ¤à¥á¥â + emacs ÍѸ¡º÷¥Ä¡¼¥ë?[2001-08-13] (¿·¤·¤¤½ç) + ¡Ä + * Æɤߤ¿¤¤¥á¥â¤Ë¥«¡¼¥½¥ë¤¢¤ï¤»¤Æ¥ê¥¿¡¼¥ó¥­¡¼! + ¢ª ¤½¤Î¥á¥â¤ò³«¤¯ + * ΢µ» + * come-from ¥ê¥ó¥¯¤Î <<< ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×¤Ø¤Î¥ê¥ó¥¯ + * Îã + * ¡Ö¼«ºî¡×¡Ölisp¡×¤¬ come-from ¥­¡¼¥ï¡¼¥É¤Î¤È¤­ + * ¡Ö<<< ¼«ºî¤Î lisp¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó + ¢ª ¡Ö¼«ºî¡×¡Ölisp¡×¤ò´Þ¤à¥­¡¼¥ï¡¼¥É¤¬¥Ò¥Ã¥È + * ¥á¥âÃæ¤Ë¡Ö<<< foo <<< bar <<< baz¡×¤È½ñ¤±¤Ð, ¡Öalias¡× + * foo, bar, baz ¤Î¤É¤ì¤Ç¥ê¥¿¡¼¥ó¤òᤤ¤Æ¤â + ¡Öfoo ¤Þ¤¿¤Ï bar ¤Þ¤¿¤Ï baz¡×¤Î¸¡º÷¤Ë¤Ê¤ê¤Þ¤¹ + * Tips: ¸ß¤¤¤Ë¤¿¤°¤ê¤¿¤¤¤±¤É alias ¤Çº®¤¼¤ë¤Î¤Ï·ù, ¤È¤¤¤¦¾ì¹ç¤Ë¤Ï¡Ä + * ¤É¤³¤«¤Ë¡Ö<<< foo¡× + * Ê̤Τɤ³¤«¤Ë¡Öfoo <<< bar¡× + * ¤³¤¦¤¹¤ì¤Ð, foo¡¦bar ¤É¤Á¤é¤Ç¸¡º÷¤·¤Æ¤â¡Öfoo <<< bar¡×¤¬¾å°Ì¤Ë + +* ¥ê¥ó¥¯¤Î¿¿Áê + * ¼Â¤Ïñ¤Ë, ¡Ögrep ¤Õ¤¬¤Õ¤¬¡×¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤À¤Ã¤¿¤ê + * come-from ¥ê¥ó¥¯¤Î¸ú²Ì + * ¤³¤Î¥­¡¼¥ï¡¼¥É¤¬½Ð¤Æ¤­¤¿¤é, ¼«Æ°Åª¤Ë¥ê¥ó¥¯(= ¸¡º÷)¤Ë¤·¤Æ¤¯¤ì + * ¤½¤Î¥­¡¼¥ï¡¼¥É¤ò¸¡º÷¤·¤¿¤È¤­¤Ï, ÀèƬ¤Ëɽ¼¨¤·¤Æ¤¯¤ì + * come-from ¥ê¥ó¥¯¤Ï¡Ä + * ¤Ê¤¯¤Æ¤â¤è¤· + * 1 ¤Ä¤Î¥á¥âÆâ¤Ë 2 ¸Ä 3 ¸Ä¤È¤¢¤Ã¤Æ¤â¤è¤· + * Ê̤Υá¥â¤ÈƱ¤¸¥­¡¼¥ï¡¼¥É¤¬¤«¤Ö¤Ã¤Æ¤â¤è¤· + * ¥¿¥¤¥È¥ë¤È·ó¤Í¤ë¤Ê¤é, + = <<< ¤Õ¤¬¤Õ¤¬ + * come-from, goto ¤È¤â, Âçʸ»ú¾®Ê¸»ú¤ò¶èÊÌ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * ½ñ¼°¤ÏÊѹ¹²Ä (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + * °Ê²¼, come-from ¥ê¥ó¥¯¤Î¥­¡¼¥ï¡¼¥É¤òñ¤Ë¡Ö¥­¡¼¥ï¡¼¥É¡×¤Èɽµ­ + +* action-lock + * ¼öʸ¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼¤¿¤¿¤¯¤ÈËâˡȯư + * { } ¤È½ñ¤¯¤È¡Ö¥È¥°¥ë¥¹¥¤¥Ã¥Á¡×. + ¤¿¤¿¤¯¤¿¤ó¤Ó¤Ë { } ¢ª {*} ¢ª {-} ¢ª { } ¢ª ¡Ä + * {_} ¤È½ñ¤¯¤È¡Ö̤½èÍý¡×. + ¤¿¤¿¤±¤Ð {_} ¢ª [2002-09-13 02:31] + * http://¡Ä ¢ª ¥Ö¥é¥¦¥¶µ¯Æ° + * browse-url ¤ò»ÈÍÑ. ɬÍפʤéŬÅö¤ËÀßÄê. + (setq browse-url-browser-function 'browse-url-mozilla) + * file://¡Ä ¢ª ¥Õ¥¡¥¤¥ë¤ò³«¤¯ + * C-u RET ¤Ê¤éÁë¤òʬ³ä¤·¤Æ³«¤¯ + * [2002-10-18] ¤Î¤è¤¦¤ÊÆüÉÕ·Á¼°¤Î¾å¤Ç¥ê¥¿¡¼¥ó ¢ª minibuffer ¤Ç¡Ä + * ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¤½¤ÎÆüÉÕ¤ò¸¡º÷ (goto link) + * ¡Ö+17¡× ¢ª 17 Æü¸å¤ÎÆüÉդ˽ñ¤­¤«¤¨ + * ¡Ö20030921¡× ¢ª [2003-09-21] ¤Ë½ñ¤­¤«¤¨ + * ǯ¤ä·î¤Ï¾Êά²Äǽ + * ¡Ö6¡× ¢ª [2002-10-06] + * ¡Ö803¡× ¢ª [2002-08-03] + * ¡Ö31103¡× ¢ª [2003-11-03] + * ¡Ö~20031030¡× ¢ª ¤½¤Î¹Ô¤ÎÊ£À½¤ò [2003-10-30] ʬ¤Þ¤ÇÁÞÆþ + * ǯ¤ä·î¤Ï¾Êά²Äǽ (¾å¤ÈƱÍÍ) + * ¡ÖEvery?¡×¤ËÂФ·¤Æ + * ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ËèÆü + * 3 ¢ª 3Æü¤´¤È + * w ¢ª Ëè½µ + * m ¢ª Ëè·î + * y ¢ª Ëèǯ + * ¡Ö.¡× ¢ª º£Æü¤ÎÆüÉդ˽ñ¤­¤«¤¨ + * ¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤Î [Æü¢­] ¤ÇÆüÉÕ·Á¼°¤òÆþÎϤǤ­¤Þ¤¹ + * ¥ê¥ó¥¯¤â¤³¤Î¼öʸ¤Î°ì¼ï + * ¾¤Ë¤ª¤â¤·¤í¤¤¥¢¥¤¥Ç¥¢¤¢¤Ã¤¿¤é¶µ¤¨¤Æ¤¯¤À¤µ¤¤ + +* ¥³¥Þ¥ó¥É (¡ú¤Ï howm-mode °Ê³°¤Ç¤â¾ï¤ËÍ­¸ú) + * C-c , , ¢ª ¥á¥Ë¥å¡¼¤ò³«¤¯ ¡ú + * ¥á¥Ë¥å¡¼ + * ¥­¡¼ + * [space] ¤È [backspace] ¢ª ¥¹¥¯¥í¡¼¥ë + * TAB (M-TAB) ¢ª ¼¡(Á°)¤Î¹àÌÜ¤Ø + * [¡û¡û] ¤ä > ¤Î¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼Â¹Ô (¥¸¥ã¥ó¥×) + * ? ¢ª ¥Ø¥ë¥× + * q ¢ª æ½Ð + * ¥Ü¥¿¥ó [¡û¡û] (¥³¥Þ¥ó¥É) + * ºîÀ® + * [®µ­] (C-c , e) ¢ª ¤Ñ¤Ñ¤Ã¤È¥á¥â¤È¤ê (C-c C-c ¤ÇÊݸ) ¡ú + * [¿·µ¬] (C-c , c) ¢ª ¿·µ¬¥á¥âºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë) ¡ú + * [Ê£À½] (C-c , D) ¢ª ¸½¥á¥â¤òÊ£À½ (½»½êÏ¿¥Æ¥ó¥×¥ì¡¼¥È¤Ê¤É¤ÎÍÑÅÓ¤òÁÛÄê) + * °ìÍ÷ + * [°ìÍ÷] (C-c , a) ¢ª Á´¥á¥â¤Î°ìÍ÷ ¡ú + * [ºÇ¶á] (C-c , l) ¢ª ºÇ¶á¤Î¥á¥â¤ÎÏ¢·ëɽ¼¨ ¡ú + * (C-u 20 C-c , l) ¢ª ºÇ¶á 20 Æüʬ¤Î°ìÍ÷ + * [Á°¸å] (C-c , A) ¢ª Á°¸å¤Î¥á¥â (¸«¤Æ¤¿¥á¥â¤òÃæ¿´¤ËÁ´¥á¥â¤ÎÆüÉÕ½ç°ìÍ÷) + * Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È + * [ÍúÎò] (C-c , h) ¢ª ¸¡º÷ÍúÎò ¡ú + * [ͽÄê] (C-c , y) ¢ª ͽÄêɽ: ((<¥ê¥Þ¥¤¥ó¥À>))»²¾È ¡ú + * [Todo] (C-c , t) ¢ª todo °ìÍ÷: ((<¥ê¥Þ¥¤¥ó¥À>))»²¾È ¡ú + * [Á´¥Ð] (C-c , b) ¢ª ¥Ð¥Ã¥Õ¥¡°ìÍ÷ ¡ú + * [mark] (C-c , x) ¢ª ¥Ð¥Ã¥Õ¥¡Æâ¤Î¥Þ¡¼¥¯°ÌÃÖ°ìÍ÷ ¡ú + * ¸¡º÷ + * [Àµµ¬] (C-c , g) ¢ª Àµµ¬É½¸½¤Î¸¡º÷ ¡ú + * ´ðËÜŪ¤Ë¤ÏÂçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ʤ· + * ¡ÖWiki¡×¤Î¤è¤¦¤ËÌÀ¼¨Åª¤ËÂçʸ»ú¤ò»ØÄꤷ¤¿¤È¤­¤Ï¶èÊÌ + * [¸ÇÄê] (C-c , s) ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸ÇÄêʸ»úÎó¤Î¸¡º÷ ¡ú + * C-u C-c , g ¤ä C-u C-c , m ¤Ç¤â + * [roma] (C-c , m) ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo) ¡ú + * [º£Æü] (C-c , .) ¢ª º£Æü¤Î¥á¥â ¡ú + * (C-u 20 C-c , .) ¢ª 20 ÆüÁ°¤Î¥á¥â + * [ºòÆü] (C-c , :) ¢ª ºòÆü¤Î¥á¥â ¡ú + * (C-u 20 C-c , :) ¢ª 20 ÆüÁ°¤Î¥á¥â + * [¥ÐÆâ] (C-c , o) ¢ª ¥Ð¥Ã¥Õ¥¡Æâ¤òÀµµ¬É½¸½¸¡º÷ ¡ú + * ÊÔ½¸: Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È + * [¹¹¿·] (C-c , r) ¢ª ²¼Àþ¤ò°ú¤­¤Ê¤ª¤¹ + * [¸°¢­] (C-c , i) ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤ÆŽ¤ê¤Ä¤± ¡ú + * Tips: M-v ¤Ç¸õÊä°ìÍ÷¤Ë°Ü¤Ã¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú + * [Æü¢­] (C-c , d) ¢ª º£Æü¤ÎÆüÉÕ [yyyy-mm-dd] ¤òŽ¤ê¤Ä¤± ¡ú + * [»þ¢­] (C-c , T) ¢ª º£Æü¤ÎÆü»þ [yyyy-mm-dd HH:MM] ¤òŽ¤ê¤Ä¤± ¡ú + * [Âꢬ] (C-c , K) ¢ª ¸½¥á¥â¤Î¥¿¥¤¥È¥ë¤ò kill ring ¤Ø (C-y ¤ÇŽ¤ê¤Ä¤±) ¡ú + * ¥¿¥¤¥È¥ë¤¬¤ß¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ï¥Õ¥¡¥¤¥ë̾ + * [̾¢¬] (C-u C-c , K) ¢ª ¥Õ¥¡¥¤¥ë̾¤ò kill ring ¤Ø ¡ú + * ÆÃÊÌ + * [menu ¹¹¿·] (R) ¢ª ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Ê¤É¤ò¹¹¿· + * [menu ÊÔ½¸] ¢ª ¥á¥Ë¥å¡¼¤òÊÔ½¸ + * [Á´¾Ã] (C-c , Q) ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯) ¡ú + * [¿ìÊâ] (C-c , w) ¢ª ¥é¥ó¥À¥à¤Ë¥ê¥ó¥¯¤ò¤¿¤É¤Ã¤Æ¼«Æ°±ÜÍ÷. C-g ¤ÇÄä»ß. ¡ú + * ¤½¤Î¾ + * [return] ¢ª ¥ê¥ó¥¯¾å¤Ê¤é³ºÅö¥Õ¥¡¥¤¥ë¤ò³«¤¯. ¤µ¤â¤Ê¤¯¤Ð²þ¹Ô. + * °ÜÆ° + * C-c , n ¢ª ¼¡¤Î¥ê¥ó¥¯¤Ø + * C-c , p ¢ª Á°¤Î¥ê¥ó¥¯¤Ø + * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¡Ä + * C-c , N ¢ª ¼¡¤Î¥á¥â¤Ø + * C-c , P ¢ª Á°¤Î¥á¥â¤Ø + * C-c , H ¢ª ºÇ½é¤Î¥á¥â¤Ø + * C-c , L ¢ª ºÇ¸å¤Î¥á¥â¤Ø + * ¿·µ¬¥á¥â + * C-c , C ¢ª ¤¤¤Þ³«¤¤¤Æ¤ë¥Õ¥¡¥¤¥ë¤ËÄɲà + * ¥á¥Ë¥å¡¼¤Ë [ÄɲÃ] ¤È½ñ¤¯¤È, ¤³¤ÎÆ°ºî¤Î¥Ü¥¿¥ó. + ±Ñ¸ì¥á¥Ë¥å¡¼¤Ê¤é [Add]. + * C-c , I ¢ª ¥Õ¥¡¥¤¥ë̾¤ò¼êÆ°¤Ç (Èó¿ä¾©) + * C-u C-c , I ¤Ê¤é, ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë + * narrow (1 ¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­) + * M-x howm-narrow-to-memo ¢ª Á°¸å¤Î¥á¥â¤ò±£¤¹. Ì᤹¤Ë¤Ï M-x widen + * M-x howm-toggle-narrow ¢ª ¡Ö±£¤¹¡×¡Ö¸«¤»¤ë¡×¤ò¥È¥°¥ë + * C-c , SPC ¢ª howm ¤Ê¥Ð¥Ã¥Õ¥¡¤È howm ¤Ç¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤È¤òÀÚ¤êÂؤ¨ ¡ú + * M-x howm-show-buffer-as-howm ¢ª ¸½¥Ð¥Ã¥Õ¥¡¤Î¥³¥Ô¡¼¤ò howm-mode ¤Çɽ¼¨ ¡ú + * ¼ûÍ×ÉÔÌÀ¤Ê¤Î¤ÇÍͻҸ«[2003-09-29] + +=== ¥á¥â¤òÆɤ⤦ +(°ìÍ÷¥â¡¼¥É) + +* ¥³¥Þ¥ó¥É(ºÆ·Ç) + * C-c , , (M-x howm-menu) ¢ª ¥á¥Ë¥å¡¼ + * C-c , a (M-x howm-list-all) ¢ª Á´¥á¥â°ìÍ÷ + * C-c , g (M-x howm-list-grep) ¢ª Á´¥á¥â¸¡º÷ (Àµµ¬É½¸½) + * C-c , s (M-x howm-list-grep-fixed) ¢ª Á´¥á¥â¸¡º÷ (¸ÇÄꥭ¡¼¥ï¡¼¥É) + +* ¸¡º÷¤ä¥ê¥ó¥¯¥¸¥ã¥ó¥×¤ò¤¹¤ë¤È, °ìÍ÷¥â¡¼¥É + * ¥Ç¥Õ¥©¥ë¥È¤Ï°ìÍ÷ɽ¼¨ + * °ìÍ÷¥Ð¥Ã¥Õ¥¡ + ÆâÍƥХåե¡ + * ¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤ÎÆâÍƤ¬É½¼¨¤µ¤ì¤ë + * Ï¢·ëɽ¼¨¤â¤Ç¤­¤ë + * @ ¤ÇÏ¢·ëɽ¼¨. ¤â¤¦°ìÅÙ @ ¤Ç°ìÍ÷ɽ¼¨¤ËÌá¤ë. + * ¥Ò¥Ã¥È¤·¤¿¥á¥â¤ÎÆâÍƤò¤¼¤ó¤Ö¤Ä¤Ê¤²¤Æɽ¼¨ + * ÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó½ñ¤¯ ¢ª ¤Ä¤Ê¤²¤ÆÆɤà + * [tab] ¤È [alt]-[tab] ¤Ç¼¡/Á°¤Î¥á¥â¤Ø + * Tips: ¥á¥â¤òõ¤¹¤È¤­, ¸¡º÷¤Ç¤¢¤ëÄøÅÙ¤·¤Ü¤ê¤³¤ó¤À¤é, + Ï¢·ëɽ¼¨¤·¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú + * °ìÍ÷ɽ¼¨¤Ç + * 0 ¢ª Ï¢·ëɽ¼¨¤Î¥È¥°¥ë (@ ¤ÈƱ¤¸) + * 1 ¢ª ÆâÍƥХåե¡¤ò¾Ã¤¹ + * 2 ¢ª ÆâÍƥХåե¡¤ò½Ð¤¹ + * v ¢ª ÆâÍƥХåե¡¤ò¥È¥°¥ë + * TAB, M-TAB ¢ª ¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø + * T ¢ª ¥¿¥¤¥È¥ëɽ¼¨¤ò¥È¥°¥ë + * ¤É¤Á¤é¤Îɽ¼¨¤Ç¤â + * n ¤È p ¢ª ¾å²¼ + * [space] ¤È [backspace] ¢ª ¥¹¥¯¥í¡¼¥ë + * j ¤È k ¢ª °ì¹Ô¥¹¥¯¥í¡¼¥ë + * [return] ¢ª ¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤ò³«¤¯ + * C-u ¤·¤Æ [return] ¢ª ¥á¥â¤ò³«¤¤¤Æ°ìÍ÷¤ò¾Ã¤¹ + * X ¢ª Dired-X ¤òµ¯Æ° (²þ̾¡¦ºï½ü¤Ê¤É¤Î¥Õ¥¡¥¤¥ëÁàºî) + * Dired-X ¤Î»È¤¤Êý¤Ï, info dired-x Åù¤ò»²¾È + v ¢ª Ãæ¿È¤ò¸«¤ë (q ¢ª Ìá¤ë) + d ¢ª ¡Ö¾Ã¤¹¤¾¡×¥Þ¡¼¥¯ + x ¢ª ¥Þ¡¼¥¯¤·¤¿¥Õ¥¡¥¤¥ë¤¿¤Á¤òËÜÅö¤Ë¾Ã¤¹ + * ? ¢ª ¥Ø¥ë¥× + * q ¢ª æ½Ð + +* ¥½¡¼¥È + * S ¢ª ²¿¤Ç¥½¡¼¥È¤¹¤ë¤«Ê¹¤¤¤Æ¤¯¤ë (Êä´°ÆþÎÏ) + * name: ¥Õ¥¡¥¤¥ë̾ + * name-match: »ØÄꤷ¤¿¥Õ¥¡¥¤¥ë̾¤ò¾å°Ì¤Ë°Ü¤¹ + * date: ºîÀ®Æü + * mtime: ¹¹¿·»þ¹ï + * summary: °ì¹Ôɽ¼¨¤Îʸ»úÎó + * summary-match: »ØÄꤷ¤¿Àµµ¬É½¸½¤ò°ì¹Ôɽ¼¨¤«¤é¸¡º÷¤·¤Æ, ¾å°Ì¤Ë°Ü¤¹ + * summary-match-string: Ʊ¾å + ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó½ç¤Ë¥½¡¼¥È + * random: ¥é¥ó¥À¥à¥·¥ã¥Ã¥Õ¥ë + * reminder: ¥ê¥Þ¥¤¥ó¥À½ç + * numerical-name: ¥Õ¥¡¥¤¥ë̾ (¿ô»ú½ç. ¥á¡¼¥ë¤Î¥½¡¼¥È¤òÁÛÄê) + * reverse: ¸½É½¼¨¤ÎµÕ½ç + * C-u S ¤Ê¤é¥Ç¥Õ¥©¥ë¥È¤ÎµÕ½ç + * R ¢ª reverse + +* ¹Ê¤ê¤³¤ß (and ¸¡º÷) + * f ¢ª ²¿¤Ç¹Ê¤ê¤³¤à¤«Ê¹¤¤¤Æ¤¯¤ë (Êä´°ÆþÎÏ) + * name: ¥Õ¥¡¥¤¥ë̾ + * date: ºîÀ®Æü + * mtime: ¹¹¿·»þ¹ï + * summary: °ì¹Ôɽ¼¨¤Îʸ»úÎó + * contents: ÆâÍÆ + * reminder: ¥ê¥Þ¥¤¥ó¥À¤ÎÆüÉÕÈÏ°Ï + * Region: Îΰè + * Around: ¥«¡¼¥½¥ë°ÌÃ֤μþÊÕ + * C-u 7 f ¢ª Around ¤Ê¤é, Á°¸å 7 ¤Ä + * uniq: Ʊ¤¸¥Õ¥¡¥¤¥ëÃæ¤Ç²¿²Õ½ê¥Ò¥Ã¥È¤·¤Æ¤â, ºÇ½é¤Î°ì²Õ½ê¤À¤±É½¼¨ + * C-u f ¤Ê¤é, ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤ò¼è¤ê½ü¤¯ + * G ¢ª contents + * u ¢ª uniq + +* howm-mode ¤È¶¦ÄÌ + * l ¢ª Á´¥á¥â¤Î°ìÍ÷ + * g ¢ª ¸¡º÷ (grep) + * C-u g ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸¡º÷ + * m ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo) + * C-u m ¢ª C-u g ¤ÈƱ¤¸ + * c ¢ª ¿·µ¬¥Õ¥¡¥¤¥ëºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë) + * Q ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯) + +* ¤½¤Î¾ + * °ìÍ÷ɽ¼¨¤Ç ! ¢ª shell ¤Ç¥³¥Þ¥ó¥É¼Â¹Ô + * ¥á¥â¤ò¼ê¤Ã¼è¤êÁ᤯¼Î¤Æ¤¿¤±¤ì¤Ð, ¤³¤ì¤Ç mv ¤Ê¤ê rm ¤Ê¤ê¤·¤Æ¤¯¤À¤µ¤¤ + * 2 ²óÌܤ«¤é¤Ï¾®¸­¤·¤¤µóÆ°¤ò¤·¤Þ¤¹ :-) + * >>> hoge.png ¤Ê¤é³°Éô viewer ¤Ç²èÁü¤ò³«¤¯ + * ÀßÄê¤Ï((<¥«¥¹¥¿¥Þ¥¤¥º>))»²¾È + +=== ¥ê¥Þ¥¤¥ó¥À +(ͽÄêɽ¡¦todo) + +* µ¡Ç½ + * ¥á¥âÃæ¤Ë + [2002-10-20]+ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦ + ¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤ª¤¯¤È, °ìÍ÷¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹ + * C-c , y ¢ª ͽÄêɽ + * . ¢ª º£Æü¤Ø + * C-c , t ¢ª todo °ìÍ÷ + * °ìÍ÷Ãæ¤Î¾å²¼¤É¤Î°ÌÃÖ¤Ëɽ¼¨¤µ¤ì¤ë¤«¤Ï, ÆüÉդȼïÎष¤À¤¤ + * ¡ÖºÇ¶á¤ÎͽÄê¡×¤È¡Ötodo ËÁƬ¡×¤Ï¥á¥Ë¥å¡¼¤Ë¤âɽ¼¨¤µ¤ì¤Þ¤¹ + (¤³¤È¤¢¤ë¤´¤È¤Ë¤Á¤é¤Ã¤È¸«¤¨¤ë¤Î¤¬½ÅÍפ«¤È) + * ¥á¥Ë¥å¡¼¤Ç¤Ï, ¹ÔƬ¤Î¡Ö>¡×¾å¤Ç RET ¤ò᤯¤È¥á¥â¤ËÈô¤Ó¤Þ¤¹ + (¤½¤ì°Ê³°¤Î°ÌÃ֤Ǥâ, ²¼Àþ¤¬¤Ê¤¤½ê¤Ê¤éƱÍÍ) + * ¥«¥ì¥ó¥À¡¼¥½¥Õ¥È plan ¤Ø¤Î export ¤â²Äǽ (¢ª((<³°Éô¥Ä¡¼¥ë>))) + +* ½ñ¼° + * ³Ð½ñ (-) + [2002-10-20]- ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦ + * »ØÄêÆü¤ËÉ⤭¤¢¤¬¤ê, °Ê¸å¤Ï½ù¡¹¤ËÄÀ¤à + * »ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú + * ÄÀ¤à¤Î¤òÃÙ¤¯¤¹¤ë¤Ë¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 1 Æü) + [2002-10-20]-14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦ ¢ª 14 Æü´Ö¤°¤é¤¤¤Ïµ¤¤Ë¤«¤±¤è¤¦ + * todo (+) + [2002-10-20]+ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤦¤Ù¤· + * »ØÄêÆü¤«¤é, ½ù¡¹¤ËÉ⤭¤¢¤¬¤Ã¤Æ¤¯¤ë + * »ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú + * É⤭¤¢¤¬¤ë®¤µ¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 7 Æü) + [2002-10-20]+14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤦¤Ù¤· ¢ª 14 Æü´Ö¤°¤é¤¤¤Î¤¦¤Á¤Ë + * ¡ºÀÚ (!) + [2002-10-20]! ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± ¡ºÀÚ + * »ØÄêÆü¤¬¶á¤Å¤¯¤È, É⤭¤¢¤¬¤Ã¤Æ¤¯¤ë + * »ØÄêÆü°Ê¹ß¤Ï, °ìÈÖ¾å¤ËÉ⤭¤Ã¤Ñ¤Ê¤· + * ²¿ÆüÁ°¤«¤éÉ⤭¤Ï¤¸¤á¤ë¤«¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 7 Æü) + [2002-10-20]!14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± ¡ºÀÚ ¢ª 14 ÆüÁ°¤°¤é¤¤¤«¤é¤Ü¤Á¤Ü¤Á + * ͽÄêɽ(¸å½Ò)¤Ë¤âɽ¼¨ + * ÊÝα (~) + [2002-10-20]~ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦¤« + * »ØÄêÆü¤«¤é, É⤭ÄÀ¤ß¤ò¤¯¤ê¤«¤¨¤¹ + * »ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú + * ²¿Æü¼þ´ü¤ÇÉ⤭ÄÀ¤ß¤¹¤ë¤«¤Ï, ͱͽÆü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 30 Æü) + [2002-10-20]!14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦¤« ¢ª 14 Æü¼þ´ü + * ͽÄê (@) + [2002-10-20]@ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± + * todo °ìÍ÷¤Ç¤Ï¤Ê¤¯, ͽÄêɽ¤Ëɽ¼¨ + * ºÑ (.) + [2002-10-20]. ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± + * ¾ï¤ËÄì + +* action-lock + * Îã + [2002-10-20]+9 ¤Û¤²¤Û¤² + ¤Î¡Ö+9¡×¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È, ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ë¥á¥Ë¥å¡¼¤¬½Ð¤Æ¡Ä + * ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¡ÖºÑ¡× + [2002-10-20]. [2002-10-20]:+9 ¤Û¤²¤Û¤² + * x ¤òÆþÎÏ ¢ª ¡Öcancel¡× + [2002-10-20]. cancel [2002-10-20]:+9 ¤Û¤²¤Û¤² + * - ¤òÆþÎÏ ¢ª ¼ïÎà¤ò³Ð½ñ¤ËÊѹ¹ + [2002-10-20]-9 ¤Û¤²¤Û¤² + * 14 ¤òÆþÎÏ ¢ª ͱͽÆü¿ô¤ò 14 Æü¤ËÊѹ¹ + [2002-10-20]+14 ¤Û¤²¤Û¤² + * ¥á¥Ë¥å¡¼¡¦Í½Äêɽ¡¦todo °ìÍ÷¤«¤é¤âľÀÜᤱ¤Þ¤¹ + +* Tips (»ä¤Î»È¤¤Êý) + * ¡Ötodo¡×¤ä¡Ö¡ºÀڡפÏËÜÅö¤ËɬÍפʤâ¤Î¤À¤± + * ¤½¤ì°Ê³°¤Ï¡Ö³Ð½ñ¡×¤ÇÄÀ¤à¤Ë¤Þ¤«¤»¤ë (¤É¤¦¤»Á´Éô¤Ï¤Ç¤­¤Þ¤»¤ó :p) + * ¸å¤í¤á¤¿¤±¤ì¤Ð, ͱͽÆü¿ô¤ÎŤ¤¡Ö³Ð½ñ¡×¤Ë + [2002-11-10]-10 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± + * ¶ÛµÞ¤Ç¤Ï¤Ê¤¤¤¬½ÅÍפʤ³¤È + [2002-11-10]-999 ¡ü¥Ï¥¤¥¦¥§¥¤ÏÇÀ± + * ÌÜΩ¤¿¤»¤¿¤¤¤³¤È + [2002-11-10]! ¡ú¡ú¥Ï¥¤¥¦¥§¥¤ÏÇÀ± + +== ƳÆþË¡ + +=== ¥¤¥ó¥¹¥È¡¼¥ë + +==== ¼«Æ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç + +* ¥¤¥ó¥¹¥È¡¼¥ë + * ./configure ¤·¤Æ make ¤·¤Æ, root ¤Ë¤Ê¤Ã¤Æ make install + * *.el, *.elc ¤Ï /usr/share/emacs/site-lisp/howm/ ¤Ë + * doc/, ext/ ¤Ï /usr/local/share/howm/ ¤Ë + * xemacs ¤Î¾ì¹ç + ./configure --with-xemacs + * *.el, *.elc ¤Ï /usr/lib/xemacs/site-lisp/howm/ ¤Ë + * ¥¤¥ó¥¹¥È¡¼¥ëÀè¤ÎÊѹ¹Îã + ./configure --with-howmdir=$HOME/elisp --prefix=$HOME + * *.el, *.elc ¤Ï ~/elisp/ ¤Ë + * doc/, ext/ ¤Ï ~/share/howm/ ¤Ë + * ¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤Ï ./configure --help ¤ò»²¾È +* ÀßÄê + * ~/.emacs (.emacs.el ¤«¤â)¤ËÄɲà + * case 1: emacs µ¯Æ°»þ¤ËÆɤ߹þ¤à + (setq howm-menu-lang 'ja) + (require 'howm) + * case 2: ¤Ï¤¸¤á¤Æ C-c , , ¤·¤¿»þ¤ËÆɤ߹þ¤à + (setq howm-menu-lang 'ja) + (global-set-key "\C-c,," 'howm-menu) + (autoload 'howm-menu "howm" "Hitori Otegaru Wiki Modoki" t) + * ¤¤¤º¤ì¤â, ¤â¤·¡ÖCannot open load file¡×¤È¤«¥¨¥é¡¼¤¬½Ð¤ë¤Ê¤é, + ¾åµ­¤ÎÁ°¤Ë¤³¤ì¤òÄɲà + (add-to-list 'load-path "/usr/share/emacs/site-lisp/howm/") + * ~/howm/ ¤ÎºîÀ®¤ä¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Î¥³¥Ô¡¼¤ÏÉÔÍפǤ¹ + (¥á¥Ë¥å¡¼µ¯Æ°»þ¤Ë¼«Æ°ºîÀ®) + +==== ¼êÆ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç + +* *.el ¤òŬÅö¤Ê¾ì½ê¤ËÃÖ¤¯ (Îã: ~/elisp/howm) + * ~/.emacs (.emacs.el ¤«¤â)¤Ë + * ÃÖ¤­¾ì¤Ë±þ¤¸¤Æ, ¢­¤Î¤è¤¦¤Ëµ­½Ò + (add-to-list 'load-path "~/elisp/howm/") + * ¤µ¤é¤Ë, ((<¼«Æ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç>))¤ÈƱÍͤε­½Ò¤òÄɲà + * ¤ª¹¥¤ß¤Ç, ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë + cd ~/elisp/howm + \emacs -batch -q --no-site-file --eval '(progn (add-to-list (quote load-path) ".") (byte-recompile-directory "." 0))' + +==== ¥¤¥ó¥¹¥È¡¼¥ë¤ÎÊä­ + +* ¤ª¹¥¤ß¤Ç, ~/.emacs ¤ËÀßÄê¤òÄɲà (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>))) + ;; ÀßÄêÎã + (define-key global-map [katakana] 'howm-menu) ; [¥«¥¿¥«¥Ê] ¥­¡¼¤Ç¥á¥Ë¥å¡¼ + (setq howm-file-name-format "%Y/%m/%Y_%m_%d.txt") ; 1 Æü 1 ¥Õ¥¡¥¤¥ë + (setq howm-keyword-case-fold-search t) ; <<< ¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤ + (setq howm-list-title nil) ; °ìÍ÷»þ¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨¤·¤Ê¤¤ + (setq howm-menu-refresh-after-save nil) ; save »þ¤Ë¥á¥Ë¥å¡¼¤ò¼«Æ°¹¹¿·¤»¤º + (setq howm-refresh-after-save nil) ; save »þ¤Ë²¼Àþ¤ò°ú¤­Ä¾¤µ¤Ê¤¤ + (setq howm-menu-expiry-hours 2) ; ¥á¥Ë¥å¡¼¤ò 2 »þ´Ö¥­¥ã¥Ã¥·¥å + +* ¤Ê¤ª, ¥­¡¼¥ï¡¼¥É°ìÍ÷¤Ï ~/.howm-keys ¤Ëµ­Ï¿¤µ¤ì¤ë + * Ëü°ì²õ¤ì¤Æ¤â, ºÆ¹½ÃۤϴÊñ. Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤˱þ¤¸¤Æ¡Ä + * ¶èÊ̤¹¤ë¾ì¹ç + find ~/howm -name '*.txt' -print | xargs ruby -ne '$_ =~ /<<<\s+(.+)$/ and puts $1.split(/\s*<<<\s*/).join "\t"' | sort -u > ~/.howm-keys + * ¶èÊ̤·¤Ê¤¤¾ì¹ç + find ~/howm -name '*.txt' -print | xargs ruby -ne '$_ =~ /<<<\s+(.+)$/ and puts $1.downcase.split(/\s*<<<\s*/).join "\t"' | sort -u > ~/.howm-keys + +* Ãí°Õ + * GNU Emacs °Ê³°¤Î¾ì¹ç: + »ä¤Ï¤è¤¯¤ï¤«¤é¤Ê¤¤¤Î¤Ç, ¸¡º÷¤·¤Æ¤¯¤À¤µ¤¤ + * meadow: + ((<ÀßÄêºÑ¤ß Meadow|URL:http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=meadowmemo%20edition>)) + ¤Ê¤éºÇ½é¤«¤é»È¤¨¤Þ¤¹ + * cygwin + grep »ÈÍѤΤȤ­¤Ï, + ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤È¥³¥Þ¥ó¥É¤ò¥É¥é¥¤¥Ö¥ì¥¿¡¼¤«¤é»ØÄꤹ¤ë. + * ~/.emacs(.emacs.el ¤«¤â) ¤Ç¢­¤Î¤è¤¦¤Ë + (setq howm-directory "c:/cygwin/home/howm/") + * cygwin ¤«¤é¸«¤¿ / ¤È emacs ¤«¤é¸«¤¿ / ¤¬¿©¤¤°ã¤¦¤È¤«¤¤¤¦ÏÃ. + * xemacs: + * font-lock ¤Î¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë¤È®¤¯¤Ê¤ë¤½¤¦. + thx > ((<³Þ¸¶¤µ¤ó|URL:http://eron.info/k/diary/>)) + (setq font-lock-verbose nil) + * Linux Zaurus: + (()) + ¤ò»²¾È¤¯¤À¤µ¤¤. + thx > ((<100|URL:http://www.bookshelf.jp/2ch/unix/1063800495.html>)) + * SKK ¤ò»È¤¦¾ì¹ç + * .emacs ¤Ë°Ê²¼¤ò½ñ¤¤¤Æ¤ª¤«¤Ê¤¤¤È, Dired-X ¤Ë C-x C-j ¤òÃ¥¤ï¤ì¤Þ¤¹ + (setq dired-bind-jump nil) + * viper-mode ¤ò»È¤¦¾ì¹ç + * viper-mode ¤è¤êÀè¤Ë howm-mode ¤ò¥í¡¼¥É¤·¤Æ¤ª¤¯ + * post-command-hook ¤Ë°­¤µ¤¹¤ë?? + * ¥³¥ó¥½¡¼¥ë (emacs -nw) ¤Î¾ì¹ç + * ²¼Àþ¤¬É½¼¨¤µ¤ì¤Ê¤¤Ã¼Ëö¤Ê¤é + (set-face-foreground 'action-lock-face "blue") ;; ²¼Àþ¤Î¤«¤ï¤ê¤Ë¿§¤Ä¤± + * (())¤ò»È¤¦¾ì¹ç + * <<< ¤¬ RD ¤Î include ¤È¤«¤Ö¤ë + * ÂкöÎã + * include ¤Ï»È¤ï¤Ê¤¤. ¹Ô¤Î¤Ï¤¸¤á¤Ë <<< ¤ò½ñ¤«¤Ê¤¤¤è¤¦Ãí°Õ¤¹¤ë. + * include ¤Ï»È¤ï¤Ê¤¤. rd2 ¤ò¤«¤±¤ëÁ°¤Ë howm2 -type=rd ¤òÄ̤¹. + * ¥ê¥ó¥¯µ­¹æ¤òÊѹ¹¤¹¤ë + ;; Îã: .emacs (howm ¥í¡¼¥É¤è¤êÁ°)¤Ë + (setq howm-ref-header "==>") ; goto ¥ê¥ó¥¯ + (setq howm-keyword-header "<==") ; come-from ¥ê¥ó¥¯ + * ((<¢ª howm wiki ¤Î¡ÖÊ»Íѥġ¼¥ë¡×|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool>))¤â»²¾È + +* µìÈǤ«¤é¤Î°Ü¹Ô (ɬ¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!) ¢ª (()) + * ¿·¤¿¤Ë make install ¤·¤Æ¤â, ¸Ä¿Í¤Î¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¹¹¿·¤Ï¤·¤Þ¤»¤ó. + ɬÍפʤé, ¥á¥Ë¥å¡¼¤ò¼«Ê¬¤ÇÊÔ½¸¤¹¤ë¤«, + ja/0000-00-00-000000.txt ¤ò¼«Ê¬¤Ç¥³¥Ô¡¼¤¹¤ë¤«¤·¤Æ¤¯¤À¤µ¤¤. + +=== ¥«¥¹¥¿¥Þ¥¤¥º + +´ðËÜŪ¤Ë¤Ï M-x customize ¢ª [Applications] ¢ª [Howm] ¤Ç. +¤Ô¤ó¤È¤³¤Ê¤¤¹àÌܤâ, [Show] ¤Ç¤¢¤ê¤¬¤Á¤Ê´ûÄêÃͤ«¤éÁªÂò²Äǽ. + +¤½¤³¤Ë¤Ê¤¤ÀßÄê¤Ë¤Ä¤¤¤Æ¤Ï, ~/.emacs (~/.emacs.el ¤«¤â)¤Ø, °Ê²¼¤Î¤è¤¦¤ËľÀܽñ¤¯. +(¤â¤Ã¤ÈÌÖÍåŪ¤À¤¬¸Å¤¤²òÀâ¤Ï, (())¤ò»²¾È) + +* ¿§ + * howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê + ;; ¡Ö¤Û¤²¡×¤È¡Ö[¤Õ¤¬]¡×¤ËÃ忧 + ;; ¡¦ÀßÄêË¡¤Î¾ÜºÙ¤Ï, ÊÑ¿ô font-lock-keywords ¤Î¥Ø¥ë¥×¤ò»²¾È + ;; ¡¦face ¤Î°ìÍ÷¤Ï M-x list-faces-display + (setq howm-user-font-lock-keywords + '( + ("¤Û¤²" . (0 'highlight prepend)) + ("\\[¤Õ¤¬\\]" . (0 'font-lock-doc-face prepend)) + )) + * todo ¤äͽÄê¤Î¿§¤ï¤±¤Ë¤Ç¤â»È¤Ã¤Æ¤Ï¤¤¤«¤¬¤«¤È. + * ÆâÍƥХåե¡¤Ë rd-mode ¤Ê¿§¤ò¤Ä¤±¤ë + ;; rd-mode.el ¤¬Æɤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤È¤¤¤¦Á°Äó¤Ç + (setq howm-view-contents-font-lock-keywords rd-font-lock-keywords) + +* ÊØÍø¥­¡¼ + * ¡Ö¥«¥¿¥«¥Ê¡×¤Ç¥á¥Ë¥å¡¼, ¡ÖCtrl-¥«¥¿¥«¥Ê¡×¤Ç¿·µ¬¥á¥â + (define-key global-map [katakana] 'howm-menu) + (define-key global-map [(control katakana)] 'howm-create) + * [tab]([alt]-[tab])¤Ç¼¡(Á°)¤Î¥ê¥ó¥¯¤Ë°ÜÆ° + (define-key howm-mode-map [tab] 'action-lock-goto-next-link) + (define-key howm-mode-map [(meta tab)] 'action-lock-goto-previous-link) + * ËÜÍè¤Î tab ¤Ï C-i ¤Ç + +* Êݸ¾ì½ê + * ¥á¥âÃÖ¤­¾ì/ǯ/ǯ·îÆü-»þʬÉÃ.txt ¤Ë + (setq howm-file-name-format "%Y/%Y%m%d-%H%M%S.txt") + * ¥Õ¥¡¥¤¥ë̾¼«ÂΤËǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤Ê¤¤¤È, filter-by-date ¤¬µ¡Ç½¤·¤Ê¤¤ + * 1 Æü 1 ¥Õ¥¡¥¤¥ë (¥á¥âÃÖ¤­¾ì/ǯ/·î/ǯ_·î_Æü.txt ¤Ë) + (setq howm-file-name-format "%Y/%m/%Y_%m_%d.txt") + * ÉÔ´°Á´¤ÊÅÀ¤¬¤¢¤ê¤Þ¤¹. ²æËý¤Ç¤­¤ë¿Í¤À¤±¤É¤¦¤¾ + * ¥á¥âñ°Ì¤Ç¤¢¤ë¤Ù¤­½èÍý¤Î°ìÉô¤¬¥Õ¥¡¥¤¥ëñ°Ì¤Ë + (¥¿¥¤¥È¥ëɽ¼¨, ¹¹¿·½ç°ìÍ÷, ÆâÍƤǤιʤꤳ¤ß, uniq) + * ¥­¡¼¥ï¡¼¥É°ìÍ÷¤ò ~/howm/.howm-keys ¤ËÃÖ¤¯ + (setq howm-keyword-file "~/howm/.howm-keys") ;; ¥Ç¥Õ¥©¥ë¥È¤Ï ~/.howm-keys + * ¤³¤¦¤·¤Æ¤ª¤±¤Ð, °ã¤¦¥Þ¥·¥ó¤Ç¤â ~/howm/ °Ê²¼¤Î¥³¥Ô¡¼¤À¤±¤ÇºÑ¤à. + * ¤¹¤Ç¤Ë½ñ¤¤¤¿¥á¥â¤¬¤¢¤ë¤Ê¤é, mv ~/.howm-keys ~/howm/ ¤ò¤·¤Æ¤ª¤¯¤«, + ºÆ¹½ÃÛ¤¹¤ë(¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>))). + * ¥Ç¥á¥ê¥Ã¥È: ¸¡º÷¤¬ÃÙ¤¯¤Ê¤ë? (Âδ¶¤Ç¤­¤ë¤Û¤É¤«¤Ï, ¤ä¤Ã¤Æ¤ß¤Ê¤¤¤ÈÉÔÌÀ) + +* °ìÍ÷ + * °ìÍ÷¤Ç¡Ö!¡×¤·¤¿¤È¤­¤Î½é´ü¥³¥Þ¥ó¥É¤òÊѹ¹ + (setq howm-view-summary-shell-last-file "_FILE_") + (setq howm-view-summary-shell-hist + '("mv _FILE_ ~/gomi" "touch _FILE_" "ls -l _FILE_")) + * ½é´ü¥³¥Þ¥ó¥É¤Ï¡Ömv ¥Õ¥¡¥¤¥ë̾ ~/gomi¡× + * M-p ²¡¤·¤Æ¤¤¤¯¤È, ¡Ötouch ¥Õ¥¡¥¤¥ë̾¡×¤ä¡Öls -l ¥Õ¥¡¥¤¥ë̾¡× + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¿§¤Ä¤±Îã + (setq howm-view-summary-font-lock-keywords '(("^2003" . 'highlight))) + +* ¥á¥Ë¥å¡¼ + * ¥á¥Ë¥å¡¼¤ÎÊѹ¹ + * ¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ [menu ÊÔ½¸] ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼«Í³¤ËÊÔ½¸ + * ¤è¤¯³«¤¯¥á¥â¤Ø¤Î goto ¥ê¥ó¥¯¤Ê¤É¤ò½ñ¤¤¤Æ¤ª¤±¤ÐÊØÍø¤«¤È + * ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Ë¡Ö%recent¡×¤ä¡Ö%random¡×¤È½ñ¤¯¤È, + ¡ÖºÇ¶á¤Î¥á¥â¡×¤ä¡Ö¥é¥ó¥À¥à¤ËÁª¤ó¤À¥á¥â¡×¤Î¥¿¥¤¥È¥ë°ìÍ÷ + * ¥«¥¹¥¿¥Þ¥¤¥º + (setq howm-menu-recent-num 20) ;; ɽ¼¨¤¹¤ë¸Ä¿ô + * ¥á¥Ë¥å¡¼Ãæ¤ËÊÑ¿ô¤ä´Ø¿ô¤ÎÃͤòɽ¼¨ + * ¥á¥Ë¥å¡¼Ãæ¤Ë¤³¤¦½ñ¤¯¤È¡Ä + * %here%foo ¢ª foo ¤ÎÃͤòɽ¼¨ + * %here%(foo 3) ¢ª (foo '3) ¤Î·ë²Ì¤òɽ¼¨ + * Îã: %here%(howm-menu-search "¤Û¤²") ¢ª ¡Ö¤Û¤²¡×¤Î¸¡º÷·ë²Ì¤òËä¤á¹þ¤ß + * ¤¿¤À¤·, ÅÐÏ¿¤·¤¿´Ø¿ô¤·¤«»È¤¨¤Þ¤»¤ó (¤ª¤Ã¤«¤Ê¤¤¤«¤é) + (setq howm-menu-allow + (append '(foo bar) howm-menu-allow)) ;; foo ¤È bar ¤òµö²Ä + * ¥á¥Ë¥å¡¼¤ò¥á¥â°·¤¤¤·¤Ê¤¤ (¥á¥â°ìÍ÷¡¦¸¡º÷¤ÎÂоݳ°¤Ë) + ;; mv ~/howm/0000-00-00-000000.txt ~/hoge/fuga/menu.txt ¤·¤È¤¤¤Æ¡Ä + (setq howm-menu-file "~/hoge/fuga/menu.txt") + * %reminder ¤Î»ÅÀÚ¤êÎã + (setq howm-menu-reminder-separators + '( + (-1 . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬º£Æü¢­¢¬Ä¶²á¨¬¨¬¨¬¨¬¨¬¨¬¨¬") + (0 . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬Í½Äꢭ¨¬¨¬¨¬¨¬¨¬¨¬¨¬") + (3 . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬¤â¤Ã¤ÈÀ袭¢¬3Æü¸å¤Þ¤Ç¨¬¨¬¨¬¨¬¨¬¨¬¨¬") + (nil . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬todo¢­¨¬¨¬¨¬¨¬¨¬¨¬¨¬") ;ͽÄê¤Ètodo¤Î¶­ + )) + +* ¤â¤Ã¤È·Ú¤¯ (cf. ((<ÉÙ¹ëŪ¥×¥í¥°¥é¥ß¥ó¥°|URL:http://pitecan.com/fugo.html>))) + * ¾å½Ò¤Î M-x customize ¤Ç [Howm Efficiency] ¤ò»²¾È + * ÆäË, Ëܵ¤¤Ç»È¤¦¤Ë¤Ï howm-view-use-grep ¤ÎÀßÄê¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹ + * grep »ÈÍÑ»þ¤Î coding system »ØÄê + (setq howm-process-coding-system 'euc-japan-unix) ;; Æɤ߽ñ¤­¶¦ÄÌ + (setq howm-process-coding-system '(utf-8-unix . sjis-unix)) ;; (ÆÉ.½ñ) + * Tips: gc-cons-threshold ¤ÎÃͤòÁý¤ä¤¹¤È®¤¯¤Ê¤ë¾ì¹ç¤¬¤¢¤ë. + ref > ((<220,234-236|URL:http://www.bookshelf.jp/2ch/unix/1077881095.html>)) + (setq gc-cons-threshold (* 4000 10000)) + * Tips: grep-2.5 ¤Ç¤Ï, ´Ä¶­ÊÑ¿ô LANG ¤ò C ¤Ë¤·¤Æ¤ª¤¯¤È, + ¥Þ¥ë¥Á¥Ð¥¤¥ÈÂбþ¤¬¥ª¥Õ¤Ë¤Ê¤Ã¤Æ®¤¯¤Ê¤ë + (()) + +* ¸¡º÷ + * Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲà + * Á´Ê¸¸¡º÷¤Î¤È¤­, ¥á¥â¤Ë²Ã¤¨¤Æ»ØÄê¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤âºÆµ¢Åª¤Ëõ¤¹ + (setq howm-search-path '("~/Mail" "~/News")) + (setq howm-search-other-dir t) ;; ²¼µ­¤Î¥È¥°¥ë¤Î½é´üÃÍ (t ¤« nil) + * M-x howm-toggle-search-other-dir ¤Ç, + ¾åµ­¥Ç¥£¥ì¥¯¥È¥ê¤ò¸¡º÷Âоݤˤ¹¤ë¤«¤·¤Ê¤¤¤«¥È¥°¥ë + * ¥­¡¼¥Ð¥¤¥ó¥É¤·¤¿¤±¤ì¤Ð³Æ¼«¤Ç (¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ÌϺ÷Ãæ¤Ë¤Ä¤­¡Ä) + +* ̤Êݸ¤À¤í¤¦¤È°ÑºÙ¹½¤ï¤º, howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¶¯À©ºï½ü¤¹¤ë¥³¥Þ¥ó¥É + (¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó. »È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤.) + * C-u C-c , Q + * ¥á¥Ë¥å¡¼¤Ë½ñ¤¯¤Ê¤é [¶¯À©Á´¾Ã] + * ʪÁû¤Ê¤Î¤Ç, ¢­¤ò½ñ¤¤¤È¤«¤Ê¤¤¤È̵¸ú + (setq howm-kill-all-enable-force t) + +* ¥Æ¥ó¥×¥ì¡¼¥È¤ÎÊѹ¹Îã + * ¤³¤ó¤Ê¤Õ¤¦¤Ë + Subject: ¥¿¥¤¥È¥ë¥Ð¡¼¤Ë»þ·×¤òɽ¼¨ ¢«Ä¾Á°¤Î¥ê¡¼¥¸¥ç¥ó¤ÎÆâÍÆ + Date: Thu, 12 Sep 2002 15:45:59 +0900 + In-Reply-To: ¢«Ä¾Á°¥Õ¥¡¥¤¥ë + + ¢£ ¢« ¥«¡¼¥½¥ë + * ~/.emacs ¤Ë + (setq howm-template "Subject: %title\nDate: %date\n%file\n%cursor") + (setq howm-template-date-format "%a, %d %b %Y %H:%M:%S %z") + (setq howm-template-file-format "In-Reply-To: <%s>\n") + * ¥Æ¥ó¥×¥ì¡¼¥È¤òÊ£¿ô»ØÄê + ;; C-u 2 C-c , c ¢ª 2 ÈÖÌܤΥƥó¥×¥ì¡¼¥È¤Ç¿·µ¬¥á¥â + ;; ¥á¥Ë¥å¡¼¤«¤é C-u 2 c ¤Ç¤âƱÍÍ + (setq howm-template + '("= %title%cursor\n%date %file\n\n" "%date: %title%cursor")) + * ¤Ä¤¤¤Ç¤Ë, howm-template ¤ÎÃͤ¬´Ø¿ô¤Ê¤é + ¡Öuniversal-argument ¤ÈľÁ°¤Î¥Ð¥Ã¥Õ¥¡¤ò°ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö¡× + ¤Ã¤Æ¤¤¤¦¤Î¤â»Å¹þ¤ß¤Þ¤·¤¿ + +* ½ñ¼°¤ÎÊѹ¹Îã (howm-*.el ¤Î load ¤è¤êÁ°¤Ë) + * ¥¿¥¤¥È¥ë(¥á¥â¶èÀÚ¤ê) @@@ ¡Ä + (setq howm-view-title-header "@@@") + * goto ¥ê¥ó¥¯ ==>¡Ä, come-from ¥ê¥ó¥¯ <==¡Ä + (setq howm-ref-header "==>") + (setq howm-keyword-header "<==") + * goto ¥ê¥ó¥¯ ((¡ã¡Ä¡ä)), come-from ¥ê¥ó¥¯ ((¡§¡Ä¡§)) + ;; ¡ã¡ä¡§¤ÏȾ³Ñ¤Ëľ¤·¤Æ¤¯¤À¤µ¤¤ + (setq howm-ref-regexp "((¡ã\\([^¡ä\r\n]+\\)¡ä))") + (setq howm-ref-regexp-pos 1) + (setq howm-keyword-format "((¡§%s¡§))") + (setq howm-keyword-regexp "\\(((¡§\\)\\([^¡§\r\n]+\\)¡§))") + (setq howm-keyword-regexp-hilit-pos 1) ;; ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×ÍÑ + (setq howm-keyword-regexp-pos 2) + (setq howm-keyword-regexp-format "%s") ;; M-x describe-variable »²¾È + * Ãí: come-from ¥­¡¼¥ï¡¼¥É¤Î alias ¤Ç¤Ï, + ¼¡¤Î¤É¤Á¤é¤«¤·¤«ÁÛÄꤷ¤Æ¤¤¤Þ¤»¤ó. + * ¡Ö¡Ä¤«¤é¸å¡×·¿: <<< foo <<< bar <<< baz + * ¡Ö¡Ä¤«¤é¡Ä¤Þ¤Ç¡×·¿: ((¡§foo¡§)) ((¡§bar¡§)) ((¡§baz¡§)) + * wiki É÷¥ê¥ó¥¯ [[hoge]] ¤Î²¼Àþ¤ò¡Ö]]¡×¤À¤±¤Ë + * ¡Ö<<< hoge¡×¤ÎºîÀ®¸å¤Ï, ¡Öhoge¡×¤Ë¤â²¼Àþ + (setq howm-wiki-regexp "\\[\\[\\([^]\r\n]+\\)\\(\\]\\]\\)") + (setq howm-wiki-regexp-hilit-pos 2) + (setq howm-wiki-regexp-pos 1) + +* ¤³¤Þ¤´¤Þ + * ÆüÉÕÆþÎÏ(C-c , d ¤Þ¤¿¤Ï [Æü¢­])¤Çǯ¤ä·î¤òά¤·¤¿¤é, ¡Ö̤Íè¡×¤È²ò¼á + (setq howm-insert-date-future t) + * ¿·µ¬ÆþÎÏ»þ¤Î¤ß¤Ç¤¹. ¡Ö[2003-12-27]¡×¾å¤Ç RET ¤·¤¿¤È¤­¤ÎÆ°ºî¤Ï½¾Íè¤É¤ª¤ê. + * ¡Öhttp://¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, URL ¤ò kill-ring ¤Ø + (setq action-lock-no-browser t) + +* ͽÄêɽ¡¦todo °ìÍ÷ + * ¥ê¥Þ¥¤¥ó¥Àµ­¹æ(!+-~@.)¤«¤é RET °ìȯ¤Ç¡ÖºÑ¡×¤Ë + (setq howm-action-lock-reminder-done-default "") + * ¤³¤Î¾ì¹ç, C-u RET ¤Ç½¾Íè¤ÎÆ°ºî (¥­¥ã¥ó¥»¥ë, µ­¹æÊѹ¹, ¡Ä) + * ͽÄêɽ¡¦todo °ìÍ÷¤«¤é¥ê¥Þ¥¤¥ó¥Àµ­¹æ¾å¤ÇľÀÜ RET ¤·¤¿¤È¤­, + ᤫ¤ìÀè¥Ð¥Ã¥Õ¥¡¤ò¼«Æ° save + (setq howm-action-lock-forward-save-buffer t) + * ¡Ö¼«Æ° save¡×¤ËÄñ¹³¤Ê¤¤Êý¤À¤±¤É¤¦¤¾ + * ¼êÆ°¤Ç C-x s (̤Êݸ¥Ð¥Ã¥Õ¥¡¤¿¤Á¤ò save)¤Ê¤ê¤¹¤ëÊý¤¬ÀµÆ»¤«¤È + * ÊÝα¤ÎÉâÄÀÈÏ°Ï + (setq howm-todo-priority-defer-init -14) ;; ½é´üÃÍ = ²¼¸Â + (setq howm-todo-priority-defer-peak 0) ;; ¾å¸Â + * !+-~. ¤Î½ÜÅ٤Υ«¥¹¥¿¥Þ¥¤¥º + * Îã: ¥á¥Ë¥å¡¼¤Ç, ¡ÖÀøÉúÃæ¤ÏÈóɽ¼¨¡×¡ÖºÑ¤Ïɽ¼¨¡× + (setq howm-menu-todo-priority -50000) + (setq howm-todo-priority-done-bottom -44444) + * howm-todo-priority-normal-bottom Åù. ¥½¡¼¥¹(howm-reminder.el)»²¾È. + * todo °ìÍ÷(M-x howm-list-todo)¤Î»ÅÀÚ¤êÎã + (setq howm-todo-separators + '( + (0 . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬¢¬Ä¶²á¨¬¨¬¨¬¨¬¨¬¨¬¨¬") + (nil . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬ÀøÉúÃ梭¨¬¨¬¨¬¨¬¨¬¨¬¨¬") + )) + * Ï¢·ëɽ¼¨¤ä¥½¡¼¥È¤ò¤¹¤ë¾ì¹ç¤Ë¤Ï¤¸¤ã¤Þ¤«¤â¡Ä + +* action-lock + * { } (¥È¥°¥ë¥¹¥¤¥Ã¥Á)¤ÎÊѹ¹ + ;; howm ¤Î load Á°¤Ë + (setq action-lock-switch-default '("{ }" "{*}" "{-}")) ;; ²¿¸Ä¤Ç¤â + * {_} (̤½èÍý)¤ÎÊѹ¹ + (setq howm-dtime-format "[%a %b %d %H:%M:%S %Y]") ;; {_} + (setq howm-template-date-format "[%Y-%m-%d %H:%M]") ;; ¥Æ¥ó¥×¥ì¡¼¥È + * ¡Öfile://¡Ä¡×¤ä¡Öhttp://¡Ä¡×¤ÎÊѹ¹ (¤Þ¤·¤ÊÀßÄêÊ罸) + thx > ((<945|URL:http://www.bookshelf.jp/2ch/unix/1063800495.html>)) + ;; howm (Àµ³Î¤Ë¤Ï action-lock.el) ¤Î¥í¡¼¥É¤è¤êÁ°¤Ë. + ;; ¡¦file://¡Ä + (setq action-lock-open-regexp + "\\") + (setq action-lock-open-regexp-pos 2) ;; 2 ¸ÄÌܤΡÖ\\(¡Ä\\)¡×¤¬¥Õ¥¡¥¤¥ë̾ + ;; ¡¦http://¡Ä + (setq action-lock-browse-regexp + "\\<\\([htp]\\{3,5\\}s?\\|ftp\\)://\\([-!@#$%^&*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&*()_+|=:~/?a-zA-Z0-9]+\\)\\>" + (setq action-lock-browse-regexp-pos 0) ;; ¥Þ¥Ã¥Á¤·¤¿Á´ÂΤ¬ URL + * action-lock ÄɲÃÎã: + ¡ÖMessage-ID: ¡Ä¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, ³ºÅö¥á¡¼¥ë¤ò namazu ¤Ç¸¡º÷ + ;; howm ¤ò load ¤·¤¿¸å¤Ë + (defun my-howm-search-message-id (id) + (message "Searching...") + (let* ((query (format "+message-id:%s" id)) + (args `("-l" "-n" "1" ,query "/home/hoge/NMZ/Mail")) + (found (car (howm-call-process "namazu" args)))) + (if found + (progn + (find-file found) + (re-search-forward "^$" nil t) + (message "Done.")) + (message "No match.")))) + (setq action-lock-default-rules + (cons (action-lock-general 'my-howm-search-message-id + "Message-[Ii][Dd]: \\(.*\\)$" + 1) + action-lock-default-rules)) + +* (())¤ò»È¤¦¾ì¹ç: + ¹ÔƬ¤Î * ¤Ç¥¨¥ó¥È¥ê¤Î³«ÊĤ¬¤Ç¤­¤ë¤è¤¦¤Ë + ¢ª ((<237-238|URL:http://www.bookshelf.jp/2ch/unix/1063800495.html>)) + +* ¤ª¤Þ¤± + (setq howm-congrats-format + '( + "(¡­¡¦¦Ø¡¦¡®) %s" + "(¡®¡¦¦Ø¡¦¡­) %s" + ;; ¡Ä°Ê²¼Î¬¡Ä + )) + (setq howm-congrats-command '("play" "~/sound/fanfare.wav")) + +* ¤â¤Ã¤È¤¤¤í¤¤¤í¤¤¤¸¤ë¤Ë¤Ï, *.el ËÁƬ¤ò»²¾È + +=== ³°Éô¥Ä¡¼¥ë +(Ʊº­¥Ä¡¼¥ë¤Ï ext/ ¤Ë) + +* HTML ¤Ø¤ÎÊÑ´¹: howm2 (Ʊº­. Í× ruby) + * Îã + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê ~/howm/ ¤òÊÑ´¹¤·¤Æ ~/converted/ ¤ËÅǤ¯ + ./howm2 ~/howm/ ~/converted/ + * <<< ¤ÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë + ./howm2 -i ~/howm/ ~/converted/ + * ¥ê¥ó¥¯½ñ¼°¤Î»ØÄê + ./howm2 -comefrom='<<<' -goto='>>>' ~/howm/ ~/converted/ + * ¡Ö¤Û¤²¡×¤ò´Þ¤à¥Õ¥¡¥¤¥ë¤À¤± HTML ²½ + grep -rl '¤Û¤²' ~/howm/ | howm2 -list ~/converted/ + * ²¿¤â¹©Éפ·¤Æ¤Ê¤¤¤Î¤Ç, ·ãÃÙ¤«¤Ä¥á¥â¥ê¤É¤«¿©¤¤ + * alias ¤Î¡ÖºÆµ¢Åª¤Ê¡×Ÿ³«¤Ï̤¥µ¥Ý¡¼¥È + +* ¥«¥ì¥ó¥À¡¼ & todo °ìÍ÷: hcal.rb (Ʊº­. Í× ruby) + * ¥«¥ì¥ó¥À¡¼(ͽÄꡦ¡ºÀÚ¡¦ºÑ¤ß¤Î°ìÍ÷)¤ò½ÐÎÏ + hcal.rb -schedule_mark='¡û' -deadline_mark='¡ü' -done_mark='¡¿' ~/howm/*/*/*.txt + * ¤³¤ó¤Ê´¶¤¸¤Ç¤º¤é¤º¤é + ----------------<6>---------------- 2003 + 01 Sun + 02 Mon ¡üÅÄÃæÀèÀ¸¤ËÏ¢Íí ¡ûB4ÎØ¹Ö ¾®ÎÓ ¡û¹©³Ø´ðÁü¸³ 12:40 <<<<##>>>> + ¡Ä + * ¡ü¤Ï¡ºÀÚ(@[2003-06-02]!), ¡û¤ÏͽÄê(@[2003-06-02]@), ¡¿¤ÏºÑ(@[2003-06-02].) + * <<<<# ¤Ï¡Öº£Æü¡×, #>>>> ¤Ï¡ÖËèǯ¤ÎƱ·îƱÆü¡× + * ¤³¤ó¤Ê´¶¤¸¤Ç alias ¤·¤È¤¯¤ÈÊØÍø + alias hcal="hcal.rb -schedule_mark='¡û' -deadline_mark='¡ü' -done_mark='¡¿' ~/howm/*/*/*.txt | less '+/<<<<#'" + * ¡Ö½ÜÅÙ½ç todo °ìÍ÷¡×¤ò½ÐÎÏ + (howm ¤ò»È¤¦¤Ê¤éÉÔÍ×. ChangeLog ÇɤʿͤؤΤª¤Þ¤±¤Ç¤¹) + * ¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç + hcal.rb -l memo.txt + * emacs ¤«¤é M-x grep ¤·¤Æ + Run grep (like this): hcal.rb -l ~/memo/*.txt + +* ²Õ¾ò½ñ¤­»Ù±ç: + * (()) + +* ´Ê°×¾®¸¯¤¤Ä¢ + * ¥­¡¼¥ï¡¼¥É¤ò·è¤á¤Æ, Æüµ­Ãæ¤Ë½ñ¤¤¤Æ¤ª¤¯ + $¿©Èñ$ 500±ß ¥é¡¼¥á¥ó + * ¡Ö<<< $¿©Èñ$¡×¤Ê¤ê¡Ö>>> $¿©Èñ$¡×¤Ê¤ê¤Ç°ìÍ÷¤òɽ¼¨. + ¹Ê¤ê¹þ¤ß¡¦¥½¡¼¥È¤·¤ÆÈÏ°Ï»ØÄê. + * M-x yen-region ¤Ç, ¡Ö¢þ¢þ±ß¡×¤ò¹ç·× + ¢ª (()) + +* ((<¢ª howm wiki ¤Î¡ÖÊ»Íѥġ¼¥ë¡×|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool>))¤â»²¾È + +== ¼ÂÁõ + +=== ¼ÂÁõ¤Ë¤Ä¤¤¤Æ + +* ¥Õ¥¡¥¤¥ë³«¤¯¤¿¤ó¤Ó¤Ë¥¹¥­¥ã¥ó¤Ã¤Æ¤¤¤¦°Â°×¼ÂÁõ + * ~/.howm-keys ¤Ë¥­¡¼¥ï¡¼¥É¤Î°ìÍ÷ + * ¥Õ¥¡¥¤¥ë¤ò³«¤¯¤È¤­¤Ï¡Ä + * .howm-keys ¤Î³Æ¥­¡¼¥ï¡¼¥É¤Ë¤Ä¤¤¤Æ, ½Ð¸½¤Î̵ͭ¤ò¸¡º÷ + * ½Ð¸½¥­¡¼¥ï¡¼¥É¤ò or ¤Ç¤Ä¤Ê¤¤¤ÀÀµµ¬É½¸½¤òºîÀ® + * ¤½¤ÎÀµµ¬É½¸½¤ò font-lock ¤È action-lock ¤ËÀßÄê + * ¥Õ¥¡¥¤¥ëÊݸ»þ¤ËÆâÍƤò¥¹¥­¥ã¥ó¤·¤Æ, ~/.howm-keys ¤ò¹¹¿· + +* ¸¡º÷ + * ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê ~/howm/ °Ê²¼¤òºÆµ¢Åª¤ËÁ´¸¡º÷. + ¥Õ¥¡¥¤¥ë̾¤â³ÈÄ¥»Ò¤â ~/howm/ °Ê²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¹½À®¤â, ¤É¤¦¤Ç¤â¤è¤¤. + * ¥Õ¥¡¥¤¥ë̾¤ÎÀ©Ìó¤Ï, + * ¥Õ¥¡¥¤¥ë̾¤Ëǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤ë (filter-by-date ¤Î¤¿¤á) + * string<= ¤Ç¥½¡¼¥È¤·¤¿¤éÆü»þ½ç¤Ë¤Ê¤ë + * ¸ß´¹¤Ê¸¡º÷´Ø¿ô¤òÆóËÜÍÑ°Õ. ¹¥¤­¤ÊÊý¤ò»È¤¨¤ë. + * real-grep (grep ¤ò¸Æ¤Ö) + * fake-grep (elisp ¤Î¤ß) + +* ¥Õ¥¡¥¤¥ë¹½À® + * howm ËÜÂΤȤÏÆÈΩ + * bcomp.el + * make »þ¤Ë»È¤¦¤À¤± + * navi2ch-cvs-0.0.20031209 ¤«¤é¼ÚÍÑ + * cheat-font-lock.el + * font-lock-keywords ¤ò¸å¤«¤éÊѹ¹¤¹¤ë¤¿¤á¤Î´Ø¿ô + * font-lock.el ¤ÎÆâÉô¼ÂÁõ¤Ë°Í¸ + * action-lock.el + * action-lock-mode (minor-mode) + * ¼öʸ(Àµµ¬É½¸½)¤ÈËâË¡(´Ø¿ô)¤ÎÁȤòÅÐÏ¿ + * ¥ê¥¿¡¼¥ó¥­¡¼Ã¡¤¤¤¿¤é + * ¼öʸ¤Î¾å ¢ª ËâË¡¤¬È¯Æ° + * ¤½¤ì°Ê³° ¢ª ËÜÍè¤Î¥ê¥¿¡¼¥ó¥­¡¼ + * riffle.el + * riffle-{summary|contents}-mode + * °ìÍ÷¡¦ÆâÍƤΤѤé¤Ñ¤éɽ¼¨, ÆâÍƤÎÏ¢·ëɽ¼¨ + * °ìÍ÷¤Ç¤Ï, post-command-hook ¤Ç°ÜÆ°¸¡½Ð ¢ª ÆâÍÆɽ¼¨¤ò¹¹¿· + * ¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ëÊÑ¿ô riffle-item-list ¤Ë¹àÌܤòÊÝ»ý + * gfunc.el ¤ò»ÈÍÑ + * gfunc.el + * °Âľ generic function + * illusion.el + * illusion-mode (minor-mode) + * ¤Õ¤Ä¤¦¤Î¡Ö¥Õ¥¡¥¤¥ë¡×¤Ç¤Ê¤¤Âоݤò, ³«¤¤¤ÆÊÔ½¸¤·¤ÆÊݸ + * º£¤Î¤È¤³¤í³èÍѤµ¤ì¤Æ¤¤¤Ê¤¤ + * honest-report.el + * ¥Ð¥°¥ì¥Ý¡¼¥È¤ÎÀ¸À® + * howm ËÜÂÎ + * ¼çÌò + * howm-backend.el + * ¥Ð¥Ã¥¯¥¨¥ó¥É¤ÎʬΥ + * Ãê¾Ý²½ + * ¥Ç¥£¥ì¥¯¥È¥ê ¢ª folder + * ¥Õ¥¡¥¤¥ë ¢ª page + * ¥Þ¥Ã¥Á²Õ½ê ¢ª item + * howm-view.el + * howm-view-{summary|contents}-mode (major-mode) + * riffle-{summary|contents}-mode ¤«¤éÇÉÀ¸ + * ¸¡º÷¤Î¼Â¹Ô + * howm-mode.el (howm-mode-mode.el ¤«¤é²þ̾[2004-07-14]) + * howm-mode (minor-mode) + * ¾å½Ò¤Î¥¹¥­¥ã¥ó¤Ê¤É + * ÏÆÌò + * howm-date.el + * ÆüÉÕÆþÎϤλٱç + * howm-reminder.el + * ÉâÄÀ¼° todo + * howm-menu.el + * howm-menu-mode (major-mode) + * ÀßÄê + * howm-version.el + * Äê¿ô howm-version ¤òÀßÄꤹ¤ë¤À¤± + * howm-vars.el + * defvar, defcustom, Åù + * howm-lang-*.el + * ¸À¸ì°Í¸¤ÎÊÑ¿ô + * howm-menu-*.el + * ½é´ü¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòʸ»úÎóÄê¿ô¤È¤·¤ÆÄêµÁ + * howm-mkmenu.el + * howm-menu-*.el ¤ò ja/0000-00-00-000000.txt Åù¤«¤éÀ¸À®¤¹¤ë¥¹¥¯¥ê¥×¥È + * ºî¼Ô°Ê³°¤Ï»È¤¦É¬Íפʤ¤¤Ï¤º + * »¨ + * howm-cl.el + * cl ¥Ñ¥Ã¥±¡¼¥¸¤Ø¤Î°Í¸¤ò¤Þ¤È¤á¤¿¤À¤± + * howm-common.el + * howm-*.el ¤Ç require + * ÆäË, ¥Õ¥¡¥¤¥ë¤Þ¤¿¤¤¤Ç»È¤¦¥Þ¥¯¥í¤Ï¤³¤³¤Ø (¢è byte-compile Âкö) + * howm-misc.el + * »¨ + * howm.el (howm-mode.el ¤«¤é²þ̾[2004-07-14]) + * ¥á¥¤¥ó¥Õ¥¡¥¤¥ë. require ¤¹¤ë¤À¤±. + +=== Æ°¤­¤Þ¤»¤ó¤è? + +(¥Ð¥°¤Î»ØŦ¤ò¤¯¤À¤µ¤ëÊý¤Ø) + +* °Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¤¤¤¿¤À¤¯¤È, Ä´ºº¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹ + * ¤Ç¤­¤ë¤À¤± make test ¤ò¤ª´ê¤¤¤·¤Þ¤¹ + cd howm-¡û.¡û.¡û + make test + * win ¤Ê¤é, test.bat ¤ò¤ª´ê¤¤¤·¤Þ¤¹ + * test.bat Ãæ¤Î¡ÖHOWM_EMACS=¡Ä¡×¤ò´Ä¶­¤Ë¤¢¤ï¤»¤Æ½¤Àµ + * test.bat ¤ò¼Â¹Ô + * ¤É¤Á¤é¤â, emacs ¤¬Î©¤Á¤¢¤¬¤ê, ¼ÁÌäɼ¤¬É½¼¨¤µ¤ì¤Þ¤¹ + * ((<¤Ê¤ó¤Ç¤ï¤¶¤ï¤¶? ¢ª ¥Ð¥°¥ì¥Ý¡¼¥ÈFAQ|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportFAQ>)) + +* Êä­: ¥¬¥¤¥·¥å¥Ä¾åÅù + * ¡Ö»ÅÍͤ«¡×¡Ö´ûÃΤΥХ°¤«¡×¤Î¥Á¥§¥Ã¥¯¤Ã¤Æ, ¤ª¤Ã¤¯¤¦¤Ç¤¹¤è¤Í¤¨. + * howm ¤Ë´Ø¤·¤Æ¤Ï, ¤³¤Î¥Á¥§¥Ã¥¯¤ÏÉÔÍפǤ¹. + ¤½¤ì¤è¤ê¤â, µ¤·Ú¤Ë¤É¤ó¤É¤ó»ØŦ¤·¤Æ¤¤¤¿¤À¤¯Êý¤¬¤¢¤ê¤¬¤¿¤¤¤Ç¤¹. + * ¤¼¤Ò, ºî¼Ô¤ÎÌܤ¬ÆϤ¯¤È¤³¤í(2ch ¤« howm wiki)¤Ë¤¿¤ì¹þ¤ó¤Ç¤¯¤À¤µ¤¤. + * cf. + ((<¥Ð¥°¥ì¥Ý¡¼¥ÈFAQ|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportFAQ>)), + (()) + +* ºî¼Ô³Ð½ñ + * ¥Ç¥Ð¥Ã¥°ÍÑÊÑ¿ô howm-call-process-last-command + * C-u M-x howm-bug-report ¤Ç´ØÏ¢ÊÑ¿ô¤Î°ìÍ÷ + * M-x howm-elp ¤Ç, ¥×¥í¥Õ¥¡¥¤¥é elp ¤Î½àÈ÷ + +== È÷¹Í + +=== »²¹Í + +((<¸µ¥Í¥¿|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?IdeaSource>))»²¾È. +ÆäË, Q-pocket¡¦HashedWiki¡¦ChangeLog ¥á¥â¤«¤é¤¤¤Ã¤Ñ¤¤¤Þ¤Í¤·¤Æ¤Þ¤¹. ´¶¼Õ. + +* ¹­À¥ÍºÆóÃø¡Ö¤ä¤µ¤·¤¤ Emacs-Lisp ¹ÖºÂ¡×(¥«¥Ã¥È¥·¥¹¥Æ¥à, 1999) + ISBN 4-906391-70-2 + ¢ª + ((<¥ª¥ó¥é¥¤¥óÈÇ (¾¶?)|URL:http://www.gentei.org/~yuuji/elisp/>)) + * elisp ¤Ï¤¸¤á¤ë¤Ê¤é°µÅÝŪ¤Ë¤ª¤¹¤¹¤á + * 6.4 ¾ÏËöÌäÂê¤Î¡Ö¥µ¥¯¥µ¥¯ dired¡×¤ò»²¹Í¤Ë¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿ + +=== ¹¹¿·µ­Ï¿ + +thx > patch¡¦²þÎÉ°Æ¡¦»ØŦ¤ò¤¯¤À¤µ¤Ã¤¿³§ÍÍ + +* ¥Æ¥¹¥ÈÈÇ + * [2016-01-01] + * ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð¤ò²óÈò + * cl ¤ò¤ä¤á¤Æ cl-lib ¤ò»È¤¦ + * howm-ime-fix (howm-1.1.1 °ÊÁ°¤Î canna, egg, yc, anthy ¸ÄÊÌÂкö) ¤òÇÑ»ß + * ¤½¤Î¾¤³¤Þ¤´¤Þ + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.3 [2015-12-31] + * emacs 25.1.50.1 (2015-12-27 »þÅÀ¤Î git Àèü = de88375) ¤Çµ¯Æ°¤ò³Îǧ + * howm-1.4.3rc1 ¤ÈƱ¤¸ÆâÍƤǤ¹ + * fix + * git Àèü emacs ¤Ç¤Î¥¨¥é¡¼ (void-function ed) + * C-c , A (howm-list-around) ¤Ç howm-list-title ¤ÎÀßÄ꤬¸ú¤¤¤Æ¤¤¤Ê¤«¤Ã¤¿ + (()) + * (())¤Ê¤É¤Ç̵Â̤˥ê¥â¡¼¥È¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¥ï¡¼¥É¤òʹ¤¤¤Æ¤³¤Ê¤¤¤è¤¦¤Ë. + thx > ¸ñ¹¾±Ñ䤵¤ó (hide at koie.org) + * ¥É¥­¥å¥á¥ó¥È¤Î¥Õ¥¡¥¤¥ë¥â¡¼¥É¤ÎÄûÀµ + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.2 [2013-12-31] + * Note + * emacs 24.3 ¤ËÂбþ. 2013-12-25 »þÅÀ¤Î trunk (24.3.50.1) ¤Ç¤âµ¯Æ°¤ò³Îǧ. + * howm-test130321 ¤ä howm-1.4.2rc1 ¤ÈƱ¤¸ÆâÍƤǤ¹ + * ²þÎÉ + * C-c , a (howm-list-all) ¤ò¹â®²½ + (()) + * fix + * emacs 24.3.1 ¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤»¤º¤Ë¼Â¹Ô¤·¤¿¤È¤­¤Î¥¨¥é¡¼ + "Can't detect type of ..." + (()) + * ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯²¼¤Ç¿·µ¬¥á¥â¤¬ howm-mode ¤Ë¤Ê¤é¤Ê¤¤¥Ð¥° + (()) + * ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.1 [2012-12-27] + * ~/.howm-keys ¤¬Ìµ¤«¤Ã¤¿¤é, Á´¥á¥â¤ò¥¹¥­¥ã¥ó¤·¤ÆºÆÀ¸À® + (()) + > Albert-san (areiner at tph.tuwien.ac.at) + * fix: *.txt ¤È *.howm ¤¬º®ºß¤·¤Æ¤â°ìÍ÷¥â¡¼¥É¤Îɽ¼¨¤¬¤º¤ì¤Ê¤¤¤è¤¦¤Ë + (()) + +* ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.0 [2012-08-16] + * Note + * ((*Èó¸ß´¹Êѹ¹*))¤ËÃí°Õ! + * 1.3.* ¤É¤ª¤ê¤ÎµóÆ°¤ò˾¤à¤Ê¤é¢­ + (setq howm-compatible-to-ver1dot3 t) ;; (require 'howm) ¤è¤êÁ°¤Ë! + * ¸ÄÊ̤ËÀßÄꤷ¤¿¤±¤ì¤Ð, M-x customize-group RET howm-compatibility RET + * Ť¤¤³¤È±£¤·µ¡Ç½¤À¤Ã¤¿¤â¤Î¤ò¸ø¼°µ¡Ç½¤Ë¤·¤Þ¤·¤¿. + * emacs-24 Âбþ + * howm-1.4.0rc2 ¤ÈƱÆâÍƤǤ¹. + * Êѹ¹ + * howm-file-name-format ¤Î¥Ç¥Õ¥©¥ë¥È¤ò *.howm ¤«¤é *.txt ¤ËÊѹ¹ + * ³ÈÄ¥»Ò¤Î¤»¤¤¤Ç¾¥Ä¡¼¥ë¤È¤ÎÏ¢·È¤Ëº¤¤Ã¤Æ¤¤¤ë¤é¤·¤¤»öÎã¤ò¸«¤«¤±¤ë¤Î¤Ç + * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¤â, ¹Ê¤ê¹þ¤ßÅù¤ò¥Õ¥¡¥¤¥ëñ°Ì¤¸¤ã¤Ê¤¯¥á¥âñ°Ì¤Ë. + ¤¿¤À¤·, date ¤Ç¤Î¹Ê¤ê¹þ¤ß¤Ï¥Õ¥¡¥¤¥ëñ°Ì¤Î¤Þ¤Þ. + * ¥¿¥¤¥È¥ë¤¬¶õ¤Î¤È¤­¤ÏËÜʸ¤Î°ì¹ÔÌܤò¥¿¥¤¥È¥ë¤Ë. + * ¤³¤Þ¤´¤Þ²þÎÉ + * ¥á¥Ë¥å¡¼¤Ë°Ê²¼¤ò½ñ¤±¤Ð, ¥¿¥¤¥à¥¹¥¿¥ó¥×½ç¤Ç¤Ê¤¯¥Õ¥¡¥¤¥ë̾½ç¤Î¾å°Ì¤òɽ¼¨. + (()) + %here%(howm-menu-recent identity) + * ¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ¤â¥Ó¥å¡¼¥¢¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë. + (()) + ;; ¡Öfile://¡Ä/¡×¤ä¡Ö>>> ¡Ä/¡×¤Ï open ¥³¥Þ¥ó¥É(mac ÍÑ)¤Ç³«¤¯ + (setq howm-view-external-viewer-assoc '(("/$" . "open %s"))) + * ÊÑ¿ô howm-normalizer ¤Î¤¢¤ê¤¬¤Á¤ÊÀßÄê¥ß¥¹¤ò»¡¤¹¤ë¤è¤¦¤Ë + (()) + * ¥É¥­¥å¥á¥ó¥È¤Î¸Å¤¤²Õ½ê¤ò¼êľ¤· + * rast ¤Þ¤ï¤ê¤Î»îºî¤òºï½ü + * ±£¤·µ¡Ç½¤Î¸ø¼°²½ + * ¥³¥Þ¥ó¥É + * C-c , e (howm-remember) + (()) + (()) + (()) + (()) + (()) + * C-c , b (howm-list-buffers) + * C-c , x (howm-list-mark-ring) + * C-c , o (howm-occur) + * ¥ê¥Þ¥¤¥ó¥À + * ¥á¥Ë¥å¡¼¤Ë¡Ö%reminder¡×¤È½ñ¤¯¤È, ͽÄê¤È todo ¤ÎÅý¹ç°ìÍ÷ + * ͽÄê¡Ö@¡×¤Ï, + howm-menu-schedule-days-before ÆüÁ°¤«¤é + howm-menu-schedule-days Æü¸å¤Þ¤Ç¤òÀèƬ¤Ëɽ¼¨ + * [2004-12-03]@5 ¤Ê¤É¤È½ñ¤¯¤È, ¡Ö5 Æü´Ö¡×¤Î°Õ + (ÅöÆü¤â´Þ¤à¤Î¤Ç¡Ö12·î3Æü¤«¤é12·î7Æü¤Þ¤Ç¡×). + °ìÍ÷¤«¤é¾Ã¤¨¤ë¤Î¤¬¤½¤ì¤À¤±Í±Í½¤µ¤ì¤ë. + (()) + * ¡ºÀÚ¡Ö!¡×¤â, ¡ºÀÚÆü¤¬¤½¤ÎÈϰϤޤǤʤé°ì½ï¤Ëɽ¼¨ + * ¤½¤ì¤è¤ê²¼¤Ï½¾Íè¤É¤ª¤ê + * ½¾Íè¤Î %schedule + %todo ¤È¤¯¤é¤Ù¤ë¤È, ¥¹¥­¥ã¥ó¤¬°ì²ó¤Ç¤¹¤à¤Ö¤ó¸úΨŪ + * [2005-05-15 21:37]@ ¤Î¤è¤¦¤Ê½ñ¼°¤ÎͽÄê¤Ï, »þ¹ï½ç¤Ë¥½¡¼¥È + (()) + (()) + (()) + (()) + * ¥á¥Ë¥å¡¼¤«¤é¥ê¥Þ¥¤¥ó¥À¤òľá¤­¤·¤¿¤È¤­¤Ë, + Âбþ¥Ð¥Ã¥Õ¥¡¤Î¹Ô¿ô¤¬Â¿¾¯¤º¤ì¤Æ¤¤¤Æ¤âµö¤¹. + (()) + (setq howm-action-lock-forward-fuzziness 5) ;; ²¿¹Ô¤Þ¤Ç¤º¤ì¤Æ¤âµö¤¹¤« + * ((<¥«¥¹¥¿¥Þ¥¤¥º>)) + * ¾åµ­ %reminder ¤ä todo list Ãæ¤Î»ÅÀÚ¤ê + * grep »ÈÍÑ»þ¤Î coding system »ØÄê + (()) + * howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê + (()) + (()) + > taku ¤µ¤ó + * todo ¤òºÑ¤Þ¤»¤¿¤È¤­¤Ë»ØÄꥳ¥Þ¥ó¥É¤ò¼Â¹Ô (howm-congrats-command) + * fix: 2012-01-21 °Ê¹ß¤Î emacs-24 ¤Ç¥¨¥é¡¼ (void-variable inhibit-first-line-modes-regexps) + (()) + thx > º´¡¹ÌÚ ´² ¤µ¤ó (sasaki at fcc.ad.jp) + +* ±£¤·µ¡Ç½ (experimental) + * 1.1.1.* °ÊÁ°¤«¤é + * ¥½¡¼¥¹¥³¡¼¥É¤ÎÆɤ߽ñ¤­¤â howm ¤Ç + * (()) + (((<Îã|URL:http://www.tamacom.com/tour/lang/ruby/S/21.html>))) + ¤â¤É¤­¤Î on the fly ÈǤᤶ¤·¤Æ + * ¤Þ¤À³«È¯Ãæ. Ì£¸«¤¹¤ë¤Ë¤Ï¡Ä + * ÊÑ¿ô howm-configuration-for-major-mode ¤òÀßÄê + * major-mode ¤Ë±þ¤¸¤Æ, come-from ¥ê¥ó¥¯Åù¤Î½ñ¼°¤òÊѤ¨¤ë + * howm-misc.el ¤Î¥³¥á¥ó¥È»²¾È + * M-x howm-open-directory-independently ¤·¤Æ ~/elisp/howm ¤Ê¤É¤ÈÆþÎÏ + * ÀµÂΤϷë¶É grep ¤Ê¤ó¤À¤«¤é, ¤¢¤Þ¤ê¸­¤¤Æ°ºî¤ò´üÂÔ¤·¤Æ¤Ï¤¤¤±¤Ê¤¤ + * elisp, tex ¤Ç¤ÏÊØÍø¤À¤±¤É, ruby ¤¸¤ã»È¤¤¤â¤Î¤Ë¤Ê¤é¤º. + * ¢è elisp ¤Î´Ø¿ô̾¤ä tex ¤Î¥é¥Ù¥ë¤ÏÂç°èŪ¤Ë°ì°Õ. ruby ¤ÏÈÝ. + * 1.2 + * °ìÍ÷»þ¤ÎÆâÍƥХåե¡¤Ë¥Õ¥¡¥¤¥ëÁ´ÂΤòɽ¼¨¤µ¤»¤ë + (setq howm-view-preview-narrow nil) + * Ï¢·ë»þ¤Ï½¾Íè¤É¤ª¤ê(¥á¥â¶èÀÚ¤ê¤ÎÈϰϤΤß) + * howm-configuration-for-major-mode °Ê³°¤Ç»È¤¦¾ìÌ̤Ï, ¤Þ¤¢¤Ê¤¤¤Ç¤·¤ç¤¦ + * ¥ê¥Þ¥¤¥ó¥À + * ¥ê¥Þ¥¤¥ó¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º + (()) + ;; ¿·¤·¤¤·¿¤Î¥ê¥Þ¥¤¥ó¥À¡Ö*¡×¤òÄêµÁ¤¹¤ëÎã: + ;; ¡Ö[2004-07-11]* ¤Û¤²¡×¤Ï, »ØÄêÆü¤Þ¤Ç¾å¾º¤·, ¤½¤Î¤¢¤È²¼¹ß. + ;; (½ÜÅÙ = - |ÃÙ¤ì / ͱͽÆü¿ô|. ͱͽÆü¿ô¤Î¥Ç¥Õ¥©¥ë¥È¤Ï 3) + ;; 1. ½ÜÅٴؿô¤ò½àÈ÷ (ÃÙ¤ì¤ÈͱͽÆü¿ô(¤È¥¢¥¤¥Æ¥à)¤ò¿©¤Ã¤Æ½ÜÅÙ¤òÅǤ¯) + ;; ÃÙ¤ì: »ØÄêÆü¤«¤éº£Æü¤Þ¤Ç¤ÎÆü¿ô. ¤Þ¤À¤Ê¤é¥Þ¥¤¥Ê¥¹. + ;; ͱͽ: ¡Ö[2004-07-11]*8¡×¤Ê¤é 8. ¡Ö[2004-07-11]*¡×¤À¤±¤Ê¤é nil. + ;; ½ÜÅÙ: Â礭¤¤¤Û¤É¾å. ¡Ö³Ð½ñ¡×¤Ê¤é½éÆü¤¬ 0 ¤ÇËèÆü 1 ¤º¤Ä¸º¤ë. + ;; (¥¢¥¤¥Æ¥à: ¤Õ¤Ä¤¦¤Ï»È¤ï¤Ê¤¤¤±¤É¤Ä¤¤¤Ç¤Ë. howm-backend.el »²¾È) + (defun my-priority (late lazy item) + (let ((r (howm-todo-relative-late late lazy 3))) + ;; r = late / lazy. ̵»ØÄê»þ¤Ï lazy = 3. + (- (abs r)))) + ;; 2. face ¤ò½àÈ÷ + (defface my-face '((t (:foreground "cyan"))) "my face") + (setq my-face 'my-face) + ;; 3. µ­¹æ, ½ÜÅٴؿô, face ¤òÅÐÏ¿. + ;; »Ä¤ê¤Î°ú¿ôÆó¤Ä¤Ï, ¡ÖͽÄêɽ¤Ëɽ¼¨¤¹¤ë¤«¡×¡Ötodo ¥ê¥¹¥È¤Ëɽ¼¨¤¹¤ë¤«¡×. + (howm-define-reminder "*" #'my-priority 'my-face nil t) + * »²¹Í: ´û¸¤Î½ÜÅٴؿô¤Î¥°¥é¥Õ¤¬ + (()) + ¤Ë½Ð¤Æ¤Þ¤¹ + * ¥Ð¥° + * °ìÉô¤Îµ­¹æ¤Ï¤³¤±¤½¤¦ (Àµµ¬É½¸½ [¡Ä] Æâ¤ÇÆÃÊ̤ʰÕÌ£¤ò»ý¤Äµ­¹æ¤Ï¡ß) + * ¡Ö[2004-07-11]- ¤Û¤²¡×¤«¤é¡Ö-¡×¾å¤Ç RET ¤·¤Æ¡Ö*¡×¤òÆþÎϤ¹¤ë¤È¥¨¥é¡¼ + * ¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. ¤³¤ó¤Ê¤ó¤Ç¤¤¤¤¤ó¤Ç¤·¤ç¤¦¤«? + * ÆüÉÕ·Á¼° + * ÆüÉÕ¾å¤Ç RET¡ß2 ¤·¤Æ¤«¤é¡Ä + -, + ¢ª Á°Æü, ÍâÆü + (, ) ¢ª Á°Æü, ÍâÆü + {, } ¢ª Á°·î, Íâ·î + [, ] ¢ª Á°Ç¯, Íâǯ + * C-u 20 - ¢ª 20ÆüÁ° + * ¥Ò¥Ã¥È¤·¤Ê¤«¤Ã¤¿¤é¤½¤ÎÀè¤ÎÆüÉÕ¤ò½ç¤Ëõ¤¹ + (setq howm-date-forward-ymd-limit 90) ;; 90ÆüÀè¤Ç give up + * ¤â¤Ã¤È¤Þ¤·¤Ê¥­¡¼ÀßÄê¤Ê¤¤¤«¤Í¤¨ + * ÆüÉÕÆþÎÏ¡ÖC-c , d¡×¤·¤¿¤È¤­¤ÎÆ°ºî¤ò¤µ¤é¤Ë¾®¸­¤·¤¯ + (setq howm-insert-date-pass-through t) + * ÆüÉÕ¥³¥Þ¥ó¥É¤Ë¤Ä¤¤¤Æ¤Ï¸µ¤ÈƱÍÍ + * ÆüÉÕ¥³¥Þ¥ó¥É¤¸¤ã¤Ê¤¤¤È¤­¤Ï, ¤¿¤À¤Á¤ËÈ´¤±¤ë. + C-c , d hoge ¤È¤« C-c , d C-a ¤È¤«»î¤»¤Ð¤ï¤«¤ê¤Þ¤¹. + * ¤·¤Þ¤Ã¤¿. ¡Ö[2004-05-21]+¡×¤È¤«ÆþÎϤ·¤è¤¦¤È¤¹¤ë¤È¤È¤Þ¤É¤¦. + ¡Ö+ RET¡×¤Ç¡Ö+¤òÁÞÆþ¡×¤Ë¤Ï¤·¤Æ¤ß¤¿¤±¤É¡Ä + * 1.2.1 + * Major + * howm2 ¤Îºî¤êľ¤·? (ext/howmkara) + * ɬÍפˤ»¤Þ¤é¤ì¤Æ¤Ç¤Ã¤Á¤¢¤². ̾Á°¤â¤Æ¤­¤È¤¦. + * ɬÍפÏËþ¤¿¤µ¤ì¤¿¤«¤é, ¤Þ¤¿ÊüÃÖ¤«¤â. 狼¤É¤¦¤Ë¤«¤·¤Æ¤¯¤ì¤ì¤Ð¡Ä + * µ¡Ç½¤ÏÂಽ. ¥½¡¼¥¹¤ÏÁ°¤è¤ê¤Ï¤Þ¤·. + * magic string ¤¬¤Á¤é¤Ð¤Ã¤Æ¤ë¤Î¤Ï¤±¤·¤«¤é¤ó¤±¤É¡Ä + * °ì¥á¥â°ì¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤¹¤ë ext/hsplit.rb ¤â½ñ¤¤¤¿¤±¤É, + ¤³¤ì¤Ï¤µ¤é¤Ë¼êÈ´¤­ + * Minor + * hcal.rb ¤Î¡Ö[2004-09-02]?¡×Âбþ(¼«Ê¬ÀìÍѤ½¤Î¤Ð¤·¤Î¤®) + (()) + * M-x howm-return-to-list ¢ª °ìÍ÷ɽ¼¨¤ËÌá¤ë + (()) + * ¤È¤êµÞ¤®Ä¶»¨¤Ç¤Ã¤Á¤¢¤². È¿¶Á¤Ë±þ¤¸¤Æ¤Þ¤¿¹Í¤¨¤è¤¦. + * °ìÍ÷ɽ¼¨¤Ë¤¤¤Á¤¤¤ÁÌá¤ë¤³¤È¤Ê¤¯, °ìÍ÷¤Î¼¡¹àÌܤòľÀܳ«¤¯: + (defun my-howm-next-hit (n) + (interactive "p") + (let ((buf (save-window-excursion + (howm-return-to-list) + (when (not (eq major-mode 'howm-view-summary-mode)) + (error "Sorry. This case is not cared.")) + (forward-line n) + (let ((howm-view-summary-keep-cursor nil)) + (howm-view-summary-open)) + (current-buffer)))) + (switch-to-buffer buf))) + (defun my-howm-previous-hit (n) + (interactive "p") + (my-howm-next-hit (- n))) + * 1.2.2 + * Æüì¥Õ¥©¥ë¥À + * namazu folder »îºî + * ¥³¡¼¥É»¨¤¹¤® + * +from: ¤Ê¤É¤Ë̤Âбþ + * ľÀܸ¡º÷¤¹¤ë¤Ë¤Ï M-x howm-search-namazu + * rot13 folder/page »îºî + (()) + * ¤³¤ì¼«ÂΤϤªÍ·¤Ó¤À¤±¤É, ¡Ö¤Õ¤Ä¤¦¤Ç¤Ê¤¤¥Ú¡¼¥¸¡×¤ÎÎý½¬¤È¤·¤Æ + * rot13:xxx ¥Ð¥Ã¥Õ¥¡¤Ï, C-c C-c ¤Ç¡Örot13 ¤·¤ÆÊݸ¡× + * rot13 ¤Ê¥Õ¥¡¥¤¥ë¤ò³«¤¯¤Ë¤Ï, M-x yarot13-find-file + * howm-search-path ¤Ë, Ä̾ï¤Î¡Ö¥Ç¥£¥ì¥¯¥È¥ê¡×°Ê³°¤â½ñ¤±¤ë + ;; namazu folder ¤È rot13 folder ¤ò¸¡º÷ÂоݤËÄɲà + ;; (M-x howm-toggle-search-other-dir ¤ÇÍ­¸ú¡¦Ìµ¸ú¤òÀڤ꤫¤¨) + (let* ((nd "~/PATH/NMZ/Mail") ;; namazu ¥¤¥ó¥Ç¥Ã¥¯¥¹¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê + (rd "~/g/r13") ;; ¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤Ï rot13 ¤µ¤ì¤ë + (nf (howm-make-folder:namazu nd)) + (rf (howm-make-folder:rot13dir rd))) + (setq howm-search-path (list nf rf))) + (howm-toggle-search-other-dir 1) ;; 0 ¤Ê¤é½é´ü¾õÂ֤ϡÖ̵¸ú¡× + * [2004-12-13]_3 ¤ÎͱͽÆü¿ô¡Ö3¡×¤Î°ÕÌ£¤ò 1 ¤º¤é¤·¤¿ + * ¤¤¤Þ¤Þ¤Ç¤Ï, ¾Êά¤È 0 ¤È 1 ¤¬Æ±¤¸°ÕÌ£¤Ë¤Ê¤Ã¤Æ¤¤¤¿ + * ¤¤¤º¤ìµ¤¤¬¸þ¤¤¤¿¤é, ¤â¤Ã¤È¤Þ¤¸¤á¤Ë¼ÂÁõ¤·¤Ê¤ª¤¹¤«¤â + (()) + * ext/hcal.rb ¤Ë iCalendar ½ÐÎϤòÄɲÃ, ¡Ä¤ÎºÇÄã¸Â¤Î¤È¤Ã¤«¤«¤ê¤À¤± + * 1.3.1 + * ¿·¤·¤¤¡Ö¥Ð¥°¤Î»ØŦ¤Î¼ê½ç¡×°Æ + * make test ¤Ç emacs ¤òµ¯Æ° + * ¥Ð¥°¤òȯ¾É¤µ¤»¤ë + * ȯ¾É¤·¤Ê¤±¤ì¤Ð, ¼«Ê¬¤Î .emacs ¤«¤é´ØÏ¢¤·¤½¤¦¤Ê¤È¤³¤í¤ò + sample/dot.emacs ¤Ø¥³¥Ô¡¼¤·¤Æ, ¤â¤¦°ìÅÙ make test + * ȯ¾É¤·¤¿¤é¤¹¤«¤µ¤º M-x howm-bug-shot + * ¥Ð¡¼¥¸¥ç¥ó¤ä¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤Ê¤É¤¬É½¼¨¤µ¤ì¤Þ¤¹ + * ¥³¥á¥ó¥È¤ò²Ã¤¨¤Æ 2ch ¤ËŽ¤ë + * 1.3.3 + * ¿·µ¬¥á¥âºîÀ®¤ò¤¹¤Ù¤Æ howm-remember ¤Ë¤¹¤ë¤Ë¤Ï¡Ä + ;; howm-create ¤ò¤¹¤Ù¤Æ howm-remember ¤Ë¤¹¤ê¤«¤¨¤ë + (defadvice howm-create (around remember activate) + (if (interactive-p) + (howm-remember) + ad-do-it)) + (setcdr (assoc "[¿·µ¬]" howm-menu-command-table-ja) + '(howm-remember current)) ;; [2006-05-15] ½¤Àµ + * ¥á¥Ë¥å¡¼¾å¤Ç c ¤ò²¡¤·¤¿¤È¤­, ¡Ö¥á¥Ë¥å¡¼¤ÎÁ°¤Ëɽ¼¨¤·¤Æ¤¤¤¿¥Ð¥Ã¥Õ¥¡¡× + ¤ò½Ð¤¹Êý¤¬¹¥¤ß¤Ê¤é, ¡Öcurrent¡×¤ò¡Öprevious¡×¤Èľ¤·¤Æ¤¯¤À¤µ¤¤ + * ¥«¥Æ¥´¥êÊ̤Πtodo list + (()) + (()) + (()) + (()) + * ¡ÖʬÎà¡×¤ÎÍ×˾¤Ï¤Ä¤Ã¤Ñ¤Í¤Æ¤­¤¿¤ó¤À¤±¤É, º£Æü¤Ïµ¤¤Þ¤°¤ì¤Ëµ¤¤¬¸þ¤¤¤¿¤Î¤Ç + ¤ª»î¤·. Àµ¼°µ¡Ç½¤Ë¤·¤Æ¤¤¤¯¤«¤É¤¦¤«¤Ï̤Äê. + * ¥á¥Ë¥å¡¼¤Ë¤³¤¦½ñ¤¯¤È, ¡Öfoo¡×¡Öbar¡×¡Öbaz¡×¤ò´Þ¤à todo ¤ò + ʬÎष¤Æɽ¼¨ + %here%(howm-menu-categorized-reminder ("foo" "bar" "baz")) + * ¤Á¤Ê¤ß¤Ë, %here% ¤Ç¤Ï¥¯¥ª¡¼¥È¤ÏÉÔÍפǤ¹ + * ¤µ¤é¤Ë, ³Æ¹Ô¤Î¡Öfoo¡×¡Öbar¡×¡Öbaz¡×¤ò¾Ã¤·¤¿¤±¤ì¤Ð + %here%(howm-menu-categorized-reminder ("foo" "bar" "baz") nil t) + * ¡Ömisc.¡×¤òÈóɽ¼¨¤Ë¤·¤¿¤±¤ì¤Ð + %here%(howm-menu-categorized-reminder ("foo" "bar" "baz") nil nil t) + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨. + ¤Á¤Ê¤ß¤Ë½¾Íè¤Î¤Ï, ¡Ö¥Þ¥Ã¥ÁÆâÍƤΤ«¤ï¤ê¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨¡×. + (()) > Highfly ¤µ¤ó + (setq howm-view-list-title-type 2) ;; ¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨ + (setq howm-view-summary-format "") ;; ¥Õ¥¡¥¤¥ë̾¤ò¾Ã¤·¤¿¤±¤ì¤Ð + * C-c , M ¤Ç¡Ö¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Æ¥á¥â¤ò³«¤¯¡× + (()) > Eduardo Ochs ¤µ¤ó + * 1.3.7 + * °ìÍ÷»þ¤Ë¥¦¥£¥ó¥É¥¦Ê¬³ä¤ò²õ¤µ¤Ê¤¤ÀßÄê. + (()) + (setq riffle-keep-window t) + (setq riffle-window-initializer nil) + * ÆâÍƥХåե¡¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó. + * ¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. º£¸åÊѹ¹¤Î²ÄǽÀ­¤¢¤ê. + * M-x howm-list-active-todo ¤Ç, ¸½ºßÍ­¸ú¤Ê(¡áÀøÉúÃæ¤Ç¤Ê¤¤) todo ¤Î¤ß¤ò°ìÍ÷. + (()) + * ¤Ä¤¤¤Ç¤Ë, M-x howm-list-sleeping-todo ¤Ç, ÀøÉúÃæ¤Î todo ¤Î¤ß¤ò°ìÍ÷. + * ¤È¤ê¤¢¤¨¤º´Ø¿ô¤À¤±»îºî. ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î°Æ¤¬¤¢¤ì¤Ð¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤. + * ¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤«¤éÀøÉúÃæ todo ¤ò¾Ã¤¹¤Ë¤Ï, + M-x customize-variable RET howm-menu-todo-priority RET ¤Ç + ¡ÖHide sleeping reminders¡×¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤. + * ¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë¤¹¤ë. + (()) > Mielke-san (peter at exegenix.com), + (()) + ;; emacs ¾å¤Ç¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë. + ;; (¥Õ¥¡¥¤¥ë̾¼«ÂΤÏÊѹ¹¤·¤Ê¤¤) + (add-hook 'howm-mode-hook 'howm-mode-set-buffer-name) + (add-hook 'after-save-hook 'howm-mode-set-buffer-name) + * ¥¿¥¤¥È¥ë¡Ö¤Û¤²¡×¤Î¥á¥â¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò¡Ö=¤Û¤²¡×¤Ë + (()) + ;; ¥¿¥¤¥È¥ë¤¬ AAA ¤Ê¤é¥Ð¥Ã¥Õ¥¡Ì¾¤ò =AAA ¤Ë. + ;; ²¼¤Î howm-mode-set-buffer-name ¤òÀßÄꤷ¤¿¾å¤Ç¡Ä + (setq howm-buffer-name-format "=%s") + * ËÜÅö¤Ï howm ¤ÈÆÈΩ¤·¤¿¥Ä¡¼¥ë¤Ë¤¹¤ëÊý¤¬¤¤¤¤¤±¤É, + ¤ª¤Ã¤¯¤¦¤Ê¤Î¤Ç¤Ò¤È¤Þ¤º. + * 1.3.8 + * M-x howm-extend-deadlines ¤Ç, + »ØÄêÆü¤ò²á¤®¤¿¡ºÀÚ(!)¤ò¤¹¤Ù¤Æ°ìÄêÆü¿ô¸å¤Ø±ä´ü. + (()) + * »ÅÍͤ⥤¥ó¥¿¥Õ¥§¡¼¥¹¤â¤Þ¤À᤭Âæ. + * ¥á¥â¤ò¾¡¼ê¤Ë½ñ¤­¤«¤¨¤ë´í¸±¤ÊÁàºî¤Ê¤Î¤Ç, ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é! + * 1.3.9 + * ¥á¥Ë¥å¡¼¤Ë¡Ö%here%(howm-menu-search "[ÃÇ]ÊÒŪ" full t)¡×¤È½ñ¤±¤Ð, + ¡ÖÃÇÊÒŪ¡×¤ò´Þ¤à¥á¥â¤ÎÆâÍÆÁ´ÂΤò¥á¥Ë¥å¡¼¤ËËä¤á¹þ¤ß. + (()) + > Morgan Veyret ¤µ¤ó (morgan.veyret at gmail.com). + * ñ¤Ë "ÃÇÊÒŪ" ¤È¤·¤Ê¤¤¤Î¤Ï, ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¼«¿È¤¬¥Ò¥Ã¥È¤¹¤ë¤Î¤òÈò¤±¤ë¾®ºÙ¹© + * 1.4.2 + * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ç¡Ö¥Õ¥¡¥¤¥ë | ¥Þ¥Ã¥Á¹Ô¡×¤Î¤«¤ï¤ê¤Ë¤³¤ó¤Êɽ¼¨¤Ë. + ¤³¤Î¤È¤­¥¿¥¤¥È¥ëÀèƬ¤Î¡Ö=¡×¤Ïɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë. + (experimental) + (()) + (()) + > Albert-san (areiner at tph.tuwien.ac.at) + ¥¿¥¤¥È¥ë A| + |¥Þ¥Ã¥Á¹Ô A1 + |¥Þ¥Ã¥Á¹Ô A2 + ¥¿¥¤¥È¥ë B| + |¥Þ¥Ã¥Á¹Ô B1 + |¥Þ¥Ã¥Á¹Ô B2 + * ÀßÄê + (setq howm-view-list-title-type 2) ;; Show title before summary. + (setq howm-view-summary-format "") ;; If you want to delete file names. + (setq howm-entitle-items-style2-max-length 50) + (setq howm-entitle-items-style2-format "%-0s|%s") ;; for title and summary + (setq howm-entitle-items-style2-title-line t) ;; independent title line? + * ¤µ¤é¤Ë, M-x customize-variable RET howm-list-title RET ¤âÀßÄê¤ò + * À©¸Â: °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Ç C-c , a (howm-list-all) ¤·¤¿¤È¤­¤Ï + Âбþ¤¹¤ë¥¿¥¤¥È¥ë¹Ô¤ËÈô¤ó¤Ç¤¯¤ì¤Ê¤¤ + * ¤½¤â¤½¤â¹Ô»Ø¸þ¤Çºî¤Ã¤Æ¤¤¤¿¤Î¤Ç¼ÂÁõ¤¬ÌµÍýÌðÍý + * ¤­¤Á¤ó¤Èľ¤¹¤Î¤Ï¤á¤ó¤É¤¦. ¶¯¤¤¼ûÍפ¬¤Ê¤±¤ì¤Ð¡Ä + +* ¡ÄÍúÎòÈ´¿è¡Ä ((()) »²¾È) + * [2010-12-30] 1.3.9 Èù½¤Àµ + * [2009-12-31] 1.3.8 ²á¤®¤¿¡ºÀÚ¤ËÃ忧 + * [2008-12-31] 1.3.7 ÆâÉô¥³¡¼¥ÉÀ°Íý (ÉûºîÍѤòʬΥ). + howm-list-normalizer ¤«¤é howm-normalizer ¤Ø. + * [2008-05-31] 1.3.6 Ã忧¤ÎÉÔ¶ñ¹ç½¤Àµ + * [2007-12-09] 1.3.5 ²Æ»þ´Ö¤ÎÉÔ¶ñ¹ç½¤Àµ + * [2006-12-16] 1.3.4 ¥»¥­¥å¥ê¥Æ¥£½¤Àµ + * [2005-08-02] 1.3.0 alias. M-x customize. ¥¿¥¤¥È¥ëɽ¼¨. + * [2005-05-02] 1.2.2 ¥Ð¥Ã¥¯¥¨¥ó¥ÉÀÚ¤êÎ¥¤·. gfunc.el + * [2004-08-24] 1.2 ÊÝα¡Ö~¡×¤Î¸ø¼°²½. howm.el, riffle.el + * [2004-05-06] 1.1.2 make test + * [2004-02-27] ((<"2ch howm ¥¹¥ì 2"|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/>)) + * [2004-02-21] 1.1.1 ¡Ö±£¤·µ¡Ç½¡×À©ÅÙ¤òƳÆþ + * [2004-01-25] ((<"sf.jp"|URL:http://howm.sourceforge.jp/>)) ¤Ø°ÜÆ° + * [2005-01-08] ((<"UNIX USER 2004.2"|URL:http://www.unixuser.jp/magazine/2004/200402.html>)) + * [2003-12-27] (()) + * [2003-11-22] 1.1 ¥Ç¥Õ¥©¥ë¥È¤ÎÊѹ¹ + (¥ê¥ó¥¯¡¦ÆüÉÕ¡¦¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°, °ì¥á¥â°ì¥Õ¥¡¥¤¥ë, ¥á¥Ë¥å¡¼¤â¥á¥â¤Î°ì¼ï) + * [2003-10-27] 1.0.4.2 ½Å¤¯¤Ê¤ë¥Ð¥°¤ò½¤Àµ. ¤è¤¯¤³¤ó¤Ê¤Î¤ÇÆ°¤¤¤Æ¤¿¤Ê¤¢¡Ä + * [2003-10-02] 1.0.4 ³°Éô viewer, ¥á¥Ë¥å¡¼¤Î²á¾ê¶¯²½ + * [2003-09-23] ¡Ö¥Æ¥¹¥ÈÈǡפòƳÆþ + * [2003-09-18] 1.0.2 HTML ²½¥¹¥¯¥ê¥×¥È howm2 + * [2003-09-17] ((<2ch howm ¥¹¥ì|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/>)) + * [2003-09-17] 1.0 ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤ò³¬Áز½ + * [2003-09-16] 0.9.7.1 Wiki É÷¥ê¥ó¥¯ [[¤Û¤²]] + * [2003-09-14] 0.9.4.1 grep æµÑ + * [2003-09-09] 0.9 ruby æµÑ + * [2003-08-31] 0.8.5 ¥¿¥¤¥È¥ë°ìÍ÷ + * [2003-06-03] 0.8.4 °Âľ¥«¥ì¥ó¥À¡¼ hcal.rb + * [2002-11-03] 0.8 ¥á¥Ë¥å¡¼, ½ÜÅÙ½ç todo @[2003/09/20]+ + * [2002-09-17] 0.7 1 Æü 1 ¥Õ¥¡¥¤¥ë, come-from ¥ê¥ó¥¯ << + * [2002-09-14] 0.6 ¥ê¥ó¥¯ÇÑ»ß(¤¹¤Ù¤Æ¤Ï¡Ö¸¡º÷¡×) + * [2002-06-10] ((<"ÆüËÜȯ¤Î wiki ¥¯¥í¡¼¥ó¥ê¥¹¥È"|URL:http://www1.neweb.ne.jp/wa/yamdas/column/technique/clonelist.html>)) + * [2002-05-29] 0.1 ¸ø³« + +=== ¥¢¥É¥ì¥¹ + +* ºÇ¿·ÈÇ: (()) +* Ï¢ÍíÀè: email ¥¢¥É¥ì¥¹¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ëËÁƬ¤ò»²¾È¤¯¤À¤µ¤¤ + +=end diff --git a/doc/README.rd b/doc/README.rd new file mode 100644 index 0000000..1662a54 --- /dev/null +++ b/doc/README.rd @@ -0,0 +1,246 @@ +=begin + += howm tutorial + +== First day + +=== Write a note. + +* Type Ctrl-C , , to open the menu. + [New] Search([String] [Regexp]) [Dup] [] [Key>] [Update] + [All] [Recent] [Schedule] [Todo] [Update Menu] +* Confirm the cursor is on [New], and type [return] there to open new note. + = + [2002-09-16 20:08] >>> /home/hira/elisp/howm/howm-mode.el +* Write anything. + = First note + [2002-09-16 20:08] >>> /home/hira/elisp/howm/howm-mode.el + foo + bar + baz + + +== Second day + +=== Write today's note. + +* Type Ctrl-C , , and type [return] on [New]. Then, write freely. + +=== Read notes. + +* Type Ctrl-C , , to open the menu. + [New] Search([String] [Regexp]) [Dup] [] [Key>] [Update] + [All] [Recent] [Schedule] [Todo] [Update Menu] +* Move the cursor to [All] and type [return] there to browse all notes. +* Move the cursor up and down to view each note. +* Type [space] and [backspace] to scroll the note. +* Type [return] to open the note. + +=== Concatenate notes. + +* Type Ctrl-C , , to open the menu. +* Move the cursor to [All] and type [return]. +* Type @ to concatenate all notes. +* Type [space] and [backspace] to scroll the notes. +* Type @ to toggle summary-view and concatenated-view. +* Type [return] to open the note. + +=== Search a word in notes. + +* Type Ctrl-C , , to open the menu. +* Move the cursor to [String] and type [return] there to search for a string. + Keyword: +* Input a string. + Keyword: foo +* Type [return] to browse matched notes. + +=== Search a phrase in notes. + +* Type Ctrl-C , , to open the menu. +* Move the cursor to [String] and type [return]. +* Input a string. Type Ctrl-q and [space] to input a whitespace. + Keyword: hoge fuga +* Type [return] to browse matched notes. + + +== Third day + +=== Try goto link. + +* Ctrl-C , , and [return] on [New] to open new note. +* Write '>>> foo'. + = + [2002-09-17 20:15] + >>> foo +* A line is drawn under it. + Move the cursor on it and type [return] to search for 'foo' in all notes. + +=== Try come-from link. + +* Write '<<< hoge' in today's note. + = + [2002-09-17 20:15] + >>> foo + <<< hoge +* Move the cursor on '<<<' and type [return] to search for 'hoge' in all notes. +* Select the first day's note and type [return] to open it. +* A line is drawn under 'hoge'. + Move the cursor on it and type [return] to search for 'hoge' in all notes. +* Remember that '<<< hoge' is always shown first when you search for 'hoge'. + Others are sorted by their modification time. + +=== Search come-from keyword with completion. + +* Ctrl-C , , and [return] on [String] to search for a keyword. + Keyword: +* Type 'ho' and type [space] to complete come-from keyword 'hoge'. + Keyword: hoge +* Type [return] to search for 'hoge'. + + +== Fourth day + +=== Sort notes. + +* Ctrl-C , , and [return] on [All] to browse all notes. +* Type S to sort notes. + Sort by: +* Type [space] to show available criteria. +* Type 'da' and type [space] to complete 'date'. + Sort by: date +* Type [return] to execute it. + +=== Filter notes. + +* Ctrl-C , , and [return] on [All] to browse all notes. +* Type f to filter notes. + Filter by: +* Type [space] to show available criteria. +* Type 'co' and type [space] to complete 'contents'. + Filter by: contents +* Type [return] and input 'foo'. + Search in result (grep): foo +* Type [return] to execute it. + +=== Read help. + +* Ctrl-C , , and [return] on [All] to browse all notes. +* Type ? and read the help message. + +=== Use shortcut. + +* Type Ctrl-C , c to create new note. + + +== Fifth day + +=== Input todo. + +* Type Ctrl-C , c to create new note. +* Write as follows. + [2003-09-10]- foo + [2003-09-10]+ bar + [2003-09-10]! baz + [2003-09-10]~ qux + +=== Browse todo. + +* Ctrl-C , , and [return] on [Todo] to browse all todo. +* Move cursor and type [return] to open the note. +* Type Ctrl-C , , to show the head of todo under the menu. +* Items are sorted by a magic criterion. + - sink after the date (reminder) + + float after the date (todo) + ! float until the date (deadline) + ~ sink and float periodically after the date (defer) + +=== Finish todo. + +* Ctrl-C , , and [return] on [Todo] to browse all todo. +* Move cursor and type [return] to open the note. + [2003-09-10]- foo +* Move cursor on - and type [return] to show todo-menu. + RET (done), x (cancel), symbol (type), num(laziness): +* Type [return] to finish this todo. + [2003-09-10]. [2003-09-10]:- foo + +=== Input schedule. + +* Type Ctrl-C , c to create new note. +* Write as follows. + [2003-09-10]@ hoge + +=== Browse schedule. + +* Ctrl-C , , and [return] on [Schedule] to browse all schedule. +* Type [space] and [backspace] to scroll the list. +* Type . to jump to today. +* Type Ctrl-C , , to show the head of schedule under the menu. +* Type [return] on > at the beginning of line to open the corresponding note. + +=== Input recurring tasks. + +* move cursor to '2003-09-10' on the below form in the opened note. + [2003-09-10]@ hoge +* Type [return] to show date-menu. + [Wed] RET(goto), +num(shift), yymmdd(set), ~yymmdd(repeat), .(today): +* Input ~031231 [return] and then type m [return] to the below question. + Every? [RET(all), num(days) w(week), m(month), y(year)] +* And monthly tasks are added automatically until 2003-12-31. + [2003-09-10]@ hoge + [2003-10-10]@ hoge + [2003-11-10]@ hoge + [2003-12-10]@ hoge +* You can use '~1231' instead of '~031231' to input same-year items. + + +== Sixth day + +=== Try action-lock { }. + +* Type Ctrl-C , c to create new note. +* Write { }. + { } +* Move cursor on { } and type [return]. + {*} +* Type [return] again. + {-} + +=== Try action-lock {_}. + +* Type Ctrl-C , c to create new note. +* Write {_}. + {_} +* Move cursor on {_} and type [return]. + [2003-09-10 04:12] + +=== Try aliases. + +* Write '<<< hoge <<< fuga <<< piyo' in a note. + = + [2002-09-17 20:15] + <<< hoge <<< fuga <<< piyo +* Write 'hoge' in another note. +* Write 'fuga' in yet another note. +* Put cursor on 'fuga' and type [return]. + You will see all 'hoge', 'fuga', and 'piyo' are found together. + + +== Seventh day + +=== Try customization. + +* Type Ctrl-C , , to show the menu. +* Move cursor on [Preference] and type [return]. +* Watch customization items and modify them if you like. + +=== Try editing menu. + +* Type Ctrl-C , , to show the menu. +* Move cursor on [Edit Menu] and type [return]. +* Delete the line '%random', and type Ctrl-C , , to observe its effect. +* Again try [Edit Menu] and write '%random' to restore it. +* Type Ctrl-C , , and move cursor to '%Editing Menu%' at the bottom. +* Type [return] and read documentation of menu syntax. + +=end diff --git a/doc/TUTORIAL.ja.rd b/doc/TUTORIAL.ja.rd new file mode 100644 index 0000000..be23a72 --- /dev/null +++ b/doc/TUTORIAL.ja.rd @@ -0,0 +1,189 @@ +=begin + += Tutorial + +¤³¤ì¤òÆɤà¤è¤ê¤â, ¢­¤ÎÊý¤¬¤ï¤«¤ê¤ä¤¹¤¯¤Æ¤ª¤¹¤¹¤á¤Ç¤¹ + +* ((<"Meadow/Emacs memo ¤Ç¤Î¾Ò²ð"|URL:http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=howm>)) +* (()) + +== ¥á¥â¤ò½ñ¤¯ + +¡ÖChangeLog É÷¡×¡ÖWiki É÷¡×¤Î¤É¤Á¤é¤«¹¥¤­¤ÊÊý¤ò¤Þ¤º¤ª»î¤·¤¯¤À¤µ¤¤ + +=== ChangeLog É÷¤Ë + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤¬³«¤¯ +* [¿·µ¬] ¤Î¾å¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼ ¢ª ¥á¥â¤¬³«¤¯ + = + [2003-09-16 06:16] + +* ŬÅö¤ËÊÔ½¸¡¦Êݸ + = ºÇ½é¤Î¥á¥â + [2003-09-16 06:16] + »È¤Ã¤Æ¤ß¤¿¤è + +* °ìö, Ê̤Υե¡¥¤¥ë¤ò³«¤¯ +* ¤Þ¤¿¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [¿·µ¬] ¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¼¡¤Î¥á¥â¤¬³«¤¯ + = + [2003-09-16 06:18] >>> /home/hoge/gomi/kuzu + +* ŬÅö¤ËÊÔ½¸¡¦Êݸ + = ¼¡¤Î¥á¥â + [2003-09-16 06:18] >>> /home/hoge/gomi/kuzu + ³«¤¤¤Æ¤¿¥Õ¥¡¥¤¥ë¤¬¤³¤ó¤Ê¤È¤³¤Ë½ñ¤¤¤Æ¤¢¤ë¤Í¢¬ + +* ¡Ö>>> /home/hoge/gomi/kuzu¡×¤Ë¤Ï²¼Àþ¤¬¤Ä¤¯. ¤½¤³¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼¡ß2 + ¢ª ¤½¤Î¥Õ¥¡¥¤¥ë¤ËÈô¤Ö + +=== Wiki É÷¤Ë + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤¬³«¤¯ +* [menu ÊÔ½¸] ¤Î¾å¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¥á¥Ë¥å¡¼¤Î¸µ¥Õ¥¡¥¤¥ë¤¬³«¤¯ +* ¸µ¥Õ¥¡¥¤¥ë¤òÊÔ½¸¡¦Êݸ. ¤¿¤È¤¨¤Ð¼¡¤Î¤è¤¦¤Ë. + ¤¿¤á¤·¤Ë[[SandBox]]¤È½ñ¤¤¤Æ¤ß¤¿. + [¿·µ¬] ¸¡º÷([¸ÇÄê] [Àµµ¬] [roma]) [Ê£À½] [Âꢬ] [̾¢¬] [¹¹¿·] [¸°¢­] + ¡Ä +* [[SandBox]]¤ÎÊĤ¸³ç¸Ì¤Ë¤Ï²¼Àþ¤¬¤Ä¤¯. ¤½¤Î¾å¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¡ÖSandBox¡×¤Î¥á¥â¤¬ºî¤é¤ì¤ë. + = <<< SandBox + [2003-09-16 05:50] + +* ŬÅö¤ËÊÔ½¸¡¦Êݸ + = <<< SandBox + [2003-09-16 05:50] + [[Îý½¬]]¤·¤è¤¦. + +* ¤³¤Î[[Îý½¬]]¤ÎÊĤ¸³ç¸Ì(²¼Àþ¤¬¤Ä¤¯)¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¡ÖÎý½¬¡×¤Î¥á¥â¤¬ºî¤é¤ì¤ë + = <<< Îý½¬ + [2003-09-16 05:53] + +* ŬÅö¤ËÊÔ½¸¡¦Êݸ + = <<< Îý½¬ + [2003-09-16 05:53] + SandBox ¤Ï¤É¤¦¤«¤Ê? + +* ¡ÖSandBox¡×¤Ë¤Ï²¼Àþ¤¬¤Ä¤¯ (Wiki ¤Ç¸À¤¦ AutoLink) + * ¤Ä¤«¤Ê¤¤¤È¤­¤Ï, ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [¹¹¿·] ¤Ç¥ê¥¿¡¼¥ó¥­¡¼ +* ¡ÖSandBox¡×¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼¡ß2 ¢ª ¡ÖSandBox¡×¤Î¥á¥â¤ËÈô¤Ö + * ¥ê¥¿¡¼¥ó¥­¡¼ 1 ²óÌܤǡÖSandBox¡×¤ÎÁ´Ê¸¸¡º÷ + * ¥ê¥¿¡¼¥ó¥­¡¼ 2 ²óÌܤǤ½¤ÎÀèƬ¤ò³«¤¯ + * ÀèƬ¤Ïɬ¤º¡Ö<<< SandBox¡×¤Ê¤Î¤Ç¿´ÇÛ̵ÍÑ + +* ¤µ¤Ã¤­¤Î [[Îý½¬]] ¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼¡ß2 ¢ª ¡ÖÎý½¬¡×¤Î¥á¥â¤ËÈô¤Ö + +== ¥á¥â¤òÆɤà + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [°ìÍ÷] ¤Î¾å¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª Á´¥á¥â¤Î°ìÍ÷¤¬½Ð¤ë (°ìÍ÷¥Ð¥Ã¥Õ¥¡ + ÆâÍƥХåե¡) + * ¥«¡¼¥½¥ë¾å²¼¤Ç¥Õ¥¡¥¤¥ë¤òÁªÂò (¥ê¥¢¥ë¥¿¥¤¥à¤ËÆâÍƤòɽ¼¨) + * SPC ¤È BS ¤ÇÆâÍƤò¥¹¥¯¥í¡¼¥ë + * ¥ê¥¿¡¼¥ó¤Ç¤½¤Î¥Õ¥¡¥¤¥ë¤ò³«¤¯ + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, ¡Ö¸¡º÷¡×¤Î [¸ÇÄê] ¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¸¡º÷¸ì¤òÆþÎÏ + Keyword: ¤Û¤² + ¢ª °ìÍ÷¤¬½Ð¤ë. Áàºî¤ÏƱÍÍ. + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [ºÇ¶á] ¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ºÇ¶á½ñ¤¤¤¿¥á¥â¤ÎÏ¢·ëɽ¼¨. ¡Ö@¡×¤Ç°ìÍ÷ɽ¼¨¤ÈÏ¢·ëɽ¼¨¤ò¥È¥°¥ë. + +* ¤µ¤é¤Ë¥½¡¼¥È¡¦¹Ê¤ê¹þ¤ß¤â¤Ç¤­¤ë¤ó¤À¤±¤É, ά. + +== ¥ê¥ó¥¯¤òÄ¥¤ë + +* ¡Ö>>> ¤Û¤²¡×¤È½ñ¤¤¤Æ, ¤½¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¡Ö¤Û¤²¡×¤ò´Þ¤à¥á¥â¤Î°ìÍ÷ + +* ¡Ö>>> /etc/services¡×¤È½ñ¤¤¤Æ, ¤½¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼¡ß2 + ¢ª /etc/services ¤ò³«¤¯ + * ¥ê¥¿¡¼¥ó¥­¡¼ 1 ²óÌܤǡÖ/etc/services¡×¤ÎÁ´Ê¸¸¡º÷ + * ¥ê¥¿¡¼¥ó¥­¡¼ 2 ²óÌܤǤ½¤ÎÀèƬ¤ò³«¤¯ + * ÀèƬ¤Ïɬ¤º /etc/services ¼«¿È¤Ê¤Î¤Ç¿´ÇÛ̵ÍÑ + +* ¡Ö<<< ¤Û¤²¡×¤È½ñ¤¯¤È, Á´¥á¥âÃæ¤Î¡Ö¤Û¤²¡×¤Ë²¼Àþ¤¬¤Ä¤¯ + * ¤Ä¤«¤Ê¤¤¤È¤­¤Ï, ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [¹¹¿·] ¤Ç¥ê¥¿¡¼¥ó¥­¡¼ +* ¡Ö¤Û¤²¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + ¢ª ¡Ö¤Û¤²¡×¤ò´Þ¤à¥á¥â¤Î°ìÍ÷ + * ¡Ö<<< ¤Û¤²¡×¤Ïɬ¤ºÀèƬ + +== action-lock ¤ÇÍ·¤Ö + +* ¥á¥âÃæ¤Ë { } ¤È½ñ¤¯¤È¡Ö¥È¥°¥ë¥¹¥¤¥Ã¥Á¡× + * ¤½¤Î¾å¤Ç¥ê¥¿¡¼¥ó᤯¤È, ᤯¤¿¤ó¤Ó¤Ëµ­¹æ¤¬ÊѲ½ + { } ¢ª {*} ¢ª {-} ¢ª { } ¢ª ¡Ä + +* ¥á¥âÃæ¤Ë {_} ¤È½ñ¤¯¤È¡Ö̤½èÍý¡× + * ¤½¤Î¾å¤Ç¥ê¥¿¡¼¥ó᤯¤È, Æü»þ¤òÁÞÆþ + {_} ¢ª [2002-09-13 02:31] + +== ÆüÉÕ¤òÆþ¤ì¤ë + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [Æü¢­] ¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + * º£Æü¤ÎÆüÉÕ [2003-10-04] ¤¬ÁÞÆþ¤µ¤ì, ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤¬ÆþÎÏÂÔ¤Á¤Ë + Command? [RET (ok), +num (shift), yymmdd (set), ~yymmdd(repeat), .(today)] + * ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó¥­¡¼ ¢ª ³ÎÄê + +* ¡ÖC-c , ,¡×¤Ç¥á¥Ë¥å¡¼¤ò³«¤­, [Æü¢­] ¤Ç¥ê¥¿¡¼¥ó¥­¡¼Ã¡¤¤¤Æ, + ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç 7 ¤ÈÆþÎÏ ¢ª [2003-10-07] ¤¬ÁÞÆþ¤µ¤ì¤ë + +* ƱÍͤË, [Æü¢­] ¤«¤é¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¡Ä (¢¨) + * 25 ¢ª [2003-10-25] + * 401 ¢ª [2003-04-01] + * 1224 ¢ª [2003-12-24] + * 10203 ¢ª [2001-02-03] + * +3 ¢ª [2003-10-07] (3 Æü¸å) + * -14 ¢ª [2003-09-20] (14 ÆüÁ°) + +* ÆüÉդˤϲ¼Àþ¤¬°ú¤«¤ì¤ë. ¤½¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + * ¤Þ¤¿¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤¬ÆþÎÏÂÔ¤Á¤Ë + Command? [RET (goto), +num (shift), yymmdd (set), ~yymmdd(repeat), .(today)] + * ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó¥­¡¼ ¢ª ¡Ö2003-10-04¡×¤òÁ´¥á¥â¤«¤é¸¡º÷ + +* ƱÍͤË, ÆüÉÕ¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼Ã¡¤¤¤Æ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¡Ä + * (¢¨)¤Î¤è¤¦¤ËÆþÎÏ ¢ª ÆüÉÕ¤òÊѹ¹ + * . ¢ª º£Æü¤ÎÆüÉÕ¤ËÊѹ¹ + * d ¢ª ¸½ºß¤ÎÆü»þ¤ËÊѹ¹ + +* ¼¡¤Î¤è¤¦¤ËÆþÎϤ·¤Æ¤ª¤¤¤Æ, ÆüÉÕ¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼ + [2003-10-30] ¤Û¤²¤Û¤² + * ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¡Ö~20031102¡×¤ÈÆþÎÏ + * ¤Þ¤¿¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤¬ÆþÎÏÂÔ¤Á¤Ë + Every? [RET(all), num(days), w(week), m(month), y(year)] + * ¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¤½¤Î¹Ô¤ÎÊ£À½¤ò [2003-11-02] ʬ¤Þ¤ÇÁÞÆþ + [2003-10-30] ¤Û¤²¤Û¤² + [2003-10-31] ¤Û¤²¤Û¤² + [2003-11-01] ¤Û¤²¤Û¤² + [2003-11-02] ¤Û¤²¤Û¤² + +* º£¤Î [2003-11-02] ¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼Ã¡¤¤¤Æ, ¡Ö~1231¡×¤ÈÆþÎÏ + * ¡ÖEvery?¡×¤ËÂФ·¤Æ¡Ä + * 9 ¢ª 9Æü¤´¤È + [2003-11-02] ¤Û¤²¤Û¤² + [2003-11-11] ¤Û¤²¤Û¤² + [2003-11-20] ¤Û¤²¤Û¤² + ¡Ä + [2003-12-26] ¤Û¤²¤Û¤² + * w ¢ª Ëè½µ + [2003-11-02] ¤Û¤²¤Û¤² + [2003-11-09] ¤Û¤²¤Û¤² + [2003-11-16] ¤Û¤²¤Û¤² + ¡Ä + [2003-12-28] ¤Û¤²¤Û¤² + * ƱÍͤË, + * m ¢ª Ëè·î + * y ¢ª Ëèǯ + +== ¥¹¥±¥¸¥å¡¼¥ë¡¦todo list ¤ò»È¤¦ + +* ¤Þ¤À +* ÉâÄÀÊý¼° + * ³Ð½ñ: ½ù¡¹¤ËÄÀ¤à + * todo: ½ù¡¹¤ËÉ⤫¤Ö + * ¡ºÀÚ: »ØÄêÆü¤¬¶á¤Å¤¯¤ÈÉ⤫¤Ö + * ÊÝα: ¼þ´üŪ¤ËÉ⤭ÄÀ¤ß + +=end diff --git a/doc/cat.png b/doc/cat.png new file mode 100644 index 0000000000000000000000000000000000000000..b908e893b5836c590a432283af7abb6e84969a89 GIT binary patch literal 15701 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 z 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 +howm: Hitori Otegaru Wiki Modoki + + + + +English +
+ +

howm: °ì¿Í¤ª¼ê·Ú Wiki ¤â¤É¤­

+ +

+Emacs ¤ÇÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó¤È¤ë¤¿¤á¤Î´Ä¶­¤Ç¤¹. +ʬÎൡǽ¤Ï¤¢¤¨¤Æ¤Ä¤±¤Þ¤»¤ó. +¤«¤ï¤ê¤Ë, Á´Ê¸¸¡º÷¤È¥á¥â´Ö¥ê¥ó¥¯¤¬¼ê·Ú¤Ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. +¼«Í³½ñ¼°¤Ê¤Î¤Ç²þ½¡¤âÉÔÍ× :-) +

+ + +

+ +
+ +

¤³¤ó¤ÊÊ·°Ïµ¤

+ +screen shot +¥á¥â´Ö¥ê¥ó¥¯ (Wiki É÷)
+screen shot +Á´Ê¸¸¡º÷ (°ìÍ÷ɽ¼¨ + ÆâÍÆɽ¼¨)
+screen shot +Ï¢·ëɽ¼¨ (¸¡º÷¤µ¤ì¤¿¥á¥â¤ÎÆâÍƤò¤Ä¤Ê¤²¤Æ)
+ +
+ +

¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤À¤±¤Ç¥ê¥ó¥¯

+
    +
  • goto ¥ê¥ó¥¯: ¥Õ¥¡¥¤¥ë̾ or ´Þ¤Þ¤ì¤ëʸ»úÎó +
    +      >>> ~/BabyloniaWave.txt
    +      >>> ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
    +      
    +
  • come-from ¥ê¥ó¥¯ +
      +
    • ¥Õ¥¡¥¤¥ë A ¤Ë +
      +       <<< ·ë¾½À±ÃÄ
      +            
      + ¤È½ñ¤¤¤Æ¤ª¤¯¤È¡Ä +
    • ¾¤Î¥Õ¥¡¥¤¥ëÃæ¤Î¡Ö·ë¾½À±ÃġפȤ¤¤¦Ê¸»úÎó¤Ï¤¹¤Ù¤Æ A ¤Ø¤Î¥ê¥ó¥¯¤Ë +
    +
  • Wiki É÷¥ê¥ó¥¯: goto ¤ÈƱ¤¸. ¤¿¤À¤·, Âбþ¤¹¤ë come-from ¤¬¤Ê¤±¤ì¤Ðºî¤ë +
    +      [[·ë¾½À±ÃÄ]]
    +      
    +
+goto link +come-from link + +

Á´Ê¸¸¡º÷¤ò¥Õ¥ë³èÍÑ

+
    +
  • ¾å¤Îʸ»úÎó¥ê¥ó¥¯¤â, ¼Â¤ÏÁ´Ê¸¸¡º÷¤Î¥·¥ç¡¼¥È¥«¥Ã¥È +
  • ¥Ò¥Ã¥È¤·¤¿¥Õ¥¡¥¤¥ë¤òÁ´Éô¤Ä¤Ê¤²¤Æɽ¼¨¤¹¤ëµ¡Ç½ + (¢ª ÃÇÊÒŪ¥á¥â¤ò¤Ð¤ó¤Ð¤ó¤È¤Ã¤Æ OK) +
+ +

²þ½¡ÉÔÍ×. ´·¤ì¤¿¥¹¥¿¥¤¥ë¤ËÁȤ߹ç¤ï¤»¤Æ.

+
    +
  • ¤Ù¤¿¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¼«Í³½ñ¼° +
  • ¥Þ¥¤¥Ê¡¼¥â¡¼¥É¤Ç¼ÂÁõ ¢ª ¾¤Î¥â¡¼¥É¤ÈÊ»ÍÑ²Ä +
  • ¥ê¥ó¥¯½ñ¼°¤âÊѹ¹²Ä + +
+ +

HTML ¤Ø¤ÎÊÑ´¹¤¬²Äǽ

+
    +
  • ¾­Íè¤ä¤á¤Æ¤â, ¥á¥â¤Ï¤à¤À¤Ë¤Ê¤ê¤Þ¤»¤ó +
+ +
+ +

ͽÄêɽ¡¦todo

+ +screen shot +¡Ö½ÜÅÙ¡×½ç (¡â½ÅÍ×½ç, ÆüÉÕ½ç) + +

¥«¥ì¥ó¥À¡¼¤Ø¤Îžµ­¤Ê¤ó¤ÆÉÔÊØ

+
    +
  • ¼¡¤Î·Á¼°¤Ç¥á¥âÃæ¤Ë½ñ¤±¤Ð, ¼«Æ°Ãê½Ð +
    +      [2002-10-22]@ ¤Û¤²¤Û¤²
    +
    +
  • °ìÍ÷¤«¤é¥á¥â¤Ø°ìȯ¥¸¥ã¥ó¥× +
  • ¥«¥ì¥ó¥À¡¼¥½¥Õ¥È¤Ø¤Î export ¤â +
+todo list +

¸«¤è¤¦¤È¤·¤Ê¤¤¤È¸«¤¨¤Ê¤¤¤ó¤¸¤ã¸«¤Ê¤¤

+
    +
  • ¥á¥Ë¥å¡¼¤ËͽÄêɽ¡¦todo ¤òɽ¼¨ ¢ª ¤³¤È¤¢¤ë¤´¤È¤ËÌÜ¤Ë +
  • ¡ÖʬÎà¡×¤Ï¤·¤Ê¤¤ +
+

todo ¥ê¥¹¥È¤Ê¤ó¤Æ¤¹¤°¤¢¤Õ¤ì¤ë

+·ï¿ô¤Õ¤¨¤ë ¢ª ¡Ö½ÅÍספ·¤«¸«¤Ê¤¤ ¢ª ¤Á¤ç¤Ã¤È¤·¤¿¤Î¤â¡Ö½ÅÍספÇÅÐÏ¿ +¢ª ¥¤¥ó¥Õ¥ì ¢ª ÇËþ +
    +
  • ¡Ö½ÅÍ×Å١פÏÇÑ»ß +
  • ¤«¤ï¤ê¤Ë¡ÖÉâÄÀÊý¼°¡×¤Çɽ¼¨½ç¤ò¹©É× +
      +
    • ³Ð½ñ: ½ù¡¹¤ËÄÀ¤à (¤É¤¦¤»Á´Éô¤Ï¤Ç¤­¤Þ¤»¤ó :p) +
    • todo: ½ù¡¹¤ËÉ⤫¤Ö +
    • ¡ºÀÚ: »ØÄêÆü¤¬¶á¤Å¤¯¤ÈÉ⤫¤Ö +
    +
+magic sorting + +
+ +

¤³¤ó¤Ê¤Õ¤¦¤Ë»È¤¨¤Þ¤¹

+ +

Æüµ­¤Îµ¤Ê¬¤Ç

+
    +
  • ¤¤¤Ä¤Ç¤â C-c , c ¤Ç¿·µ¬¥á¥â +
  • ½ñ¤¤¤¿¥á¥â¤òÆüÉÕ½ç°ìÍ÷¤Çį¤á¤ë +
+ +

ChangeLog ¥á¥â¤Îµ¤Ê¬¤Ç

+
    +
  • C-c , c ¢ª ¥á¥â¤ò³«¤­, Æü»þ¤ä¸«¤Æ¤¿¥Õ¥¡¥¤¥ë̾¤ò¼«Æ°ÁÞÆþ +
  • ¥á¥â¥Õ¥¡¥¤¥ë¤Î̾Á°¤ä½ñ¤¯¾ì½ê¤Ç̤¦¤³¤È¤Ê¤·. + Ï¢·ëɽ¼¨¤Ç¼Â¼ÁŪ¤Ë¡Ö¥Ý¥±¥Ã¥È°ì¤Ä»þ´Ö½çÇÛÃÖ¡×. +
  • clgrep ÁêÅö¤Î¡Ö¸¡º÷ ¢ª ¥Ò¥Ã¥È¤·¤¿¥á¥â¤òÆüÉս祽¡¼¥È ¢ª Ï¢·ëɽ¼¨¡× +
+ +

¥ê¥ó¥¯¤Ä¤­¥Æ¥­¥¹¥È¤Îµ¤Ê¬¤Ç

+
    +
  • ¡Ö>>> ~/BabyloniaWave.txt¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¡ß2 + ¢ª BabyloniaWave.txt ¤ò³«¤¯ +
  • ¡Ö>>> ~/BabyloniaWave.png¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¡ß2 + ¢ª ²èÁü viewer ¤òµ¯Æ° +
  • ¡Ö>>> ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó + ¢ª ¡Ö¥Ï¥¤¥¦¥§¥¤ÏÇÀ±¡×¤ò¸¡º÷ +
  • ÆäË, ¡Ö¸¦µæ¥á¥â¤Ë¤Ïɬ¤º {S} ¤È½ñ¤¯¡×¤Î¤è¤¦¤Êµ­¹æ¤ò·è¤á¤Æ¤ª¤±¤Ð, + ¡Ö¸¦µæ¥á¥â°ìÍ÷ >>> {S}¡×¤Î¤è¤¦¤Ê¥·¥ç¡¼¥È¥«¥Ã¥È¤¬¤Ç¤­¤ë +
+ +

Wiki ¤Îµ¤Ê¬¤Ç

+
    +
  • ¡Ö[[·ë¾½À±ÃÄ]]¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È, WikiName ¡Ö·ë¾½À±ÃġפΥڡ¼¥¸¤òºîÀ® +
  • ¾¤Î¥Ú¡¼¥¸¤Î¡Ö·ë¾½À±Ãġפˤϲ¼Àþ¤¬¤Ä¤¯. + ¥ê¥¿¡¼¥ó 2 ²ó¤¿¤¿¤¯¤È¾å¤Î¥Ú¡¼¥¸¤Ø¥¸¥ã¥ó¥×. +
+ + + +

¤³¤Å¤«¤¤Ä¢¤Îµ¤Ê¬¤Ç

+
    +
  • ¤³¤Å¤«¤¤µ­¹æ(Îã: $$$)¤ò·è¤á¤Æ, ¤É¤³¤«¤Ë¡Ö<<< $$$¡×¤È½ñ¤¤¤Æ¤ª¤¯ +
  • ¤³¤Å¤«¤¤¤ò»È¤Ã¤¿¤é, Æüµ­Ãæ¤Ë¡Ö$$$ 651±ß ¥Ð¥Ó¥í¥Ë¥¢¥¦¥§¡¼¥Ö¡×¤Î¤è¤¦¤Ë½ñ¤¯ + (Æüµ­¤ËËä¤á¹þ¤à¤Î¤¬¥ß¥½) +
  • ¡Ö$$$¡×¤Ë¤Ï²¼Àþ¤¬¤Ä¤¯. ¥ê¥¿¡¼¥ó 1 ²ó¤¿¤¿¤¯¤È¤³¤Å¤«¤¤°ìÍ÷¤¬½Ð¤ë. +
  • ÆüÉÕÈϰϤäÀµµ¬É½¸½¤Ç¹Ê¤ê¤³¤ß +
  • °ìÍ÷¾å¤Ç¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È³ºÅöÆüµ­¤Ø¥¸¥ã¥ó¥× +
+ +

¥Æ¡¼¥ÞÊ̷Ǽ¨ÈĤε¤Ê¬¤Ç

+
    +
  • ¥Æ¡¼¥Þ¤´¤È¤Ë, ¡Ö<<< ¥Æ¡¼¥Þ̾¡×¤È½ñ¤¤¤¿¥á¥â¤òºî¤Ã¤Æ¤ª¤¯ +
  • ¥Æ¡¼¥Þ¡Ö·ë¾½À±ÃġפηǼ¨ÈĤËÅê¹Æ¤¹¤ë¤Ë¤Ï, + ¥á¥â¤ò½ñ¤­, ¤É¤³¤«¤Ë¡Ö·ë¾½À±ÃġפȽñ¤¤¤Æ¤ª¤¯ +
  • ¡Ö·ë¾½À±Ãġפˤϲ¼Àþ¤¬¤Ä¤¯. ¥ê¥¿¡¼¥ó 1 ²ó¤¿¤¿¤¯¤È°ìÍ÷¤¬½Ð¤ë¤Î¤Ç, + @ ¤ÇÏ¢·ëɽ¼¨ ¢ª ¿·¤·¤¤½ç¤ÇÅê¹Æ¤¬ÊÂ¤Ö +
+ +

¡Ö»ñÎÁ(¥¹¥È¥Ã¥¯·¿¥á¥â) + ¥³¥á¥ó¥È(¥Õ¥í¡¼·¿¥á¥â)¡×¤Îµ¤Ê¬¤Ç

+
    +
  • »ñÎÁ¤ò½ñ¤­, ¤É¤³¤«¤Ë¡Ö<<< »ñÎÁ̾¡×¤È½ñ¤¤¤Æ¤ª¤¯ +
  • »ñÎÁ¡Ö·ë¾½À±Ãġפ˥³¥á¥ó¥È¤¹¤ë¤Ë¤Ï, + ¥á¥â¤ò½ñ¤­, ¤É¤³¤«¤Ë¡Ö·ë¾½À±ÃġפȽñ¤¤¤Æ¤ª¤¯ +
  • °ìÍ÷ ¢ª Ï¢·ëɽ¼¨¤Ç, ÀèƬ¤Ë»ñÎÁ, ¸å¤Ë¿·¤·¤¤½ç¤Ç¥³¥á¥ó¥È¤¬ÊÂ¤Ö +
+ + + +
+$Id: index-j.html,v 1.279 2012-12-29 08:57:18 hira Exp $
+email ¥¢¥É¥ì¥¹¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ëËÁƬ¤ò»²¾È¤¯¤À¤µ¤¤ + +SourceForge.jp + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..bb7f50f --- /dev/null +++ b/doc/index.html @@ -0,0 +1,308 @@ + +howm: note-taking tool on Emacs + + + + +Japanese +
+ +

howm: Write fragmentarily and read collectively.

+ + + +
+ +Howm is a note-taking tool on Emacs. +It is similar to emacs-wiki.el; +you can enjoy hyperlinks and full-text search easily. +It is not similar to emacs-wiki.el; +it can be combined with any format. + +

+screen shot +screen shot +screen shot +screen shot +
+(Title bar? See rich-title.) +

+ +
+ +

Hyperlinks

+ +
    +
  • goto link: file name or keyword +
    +      >>> ~/BabyloniaWave.txt
    +      >>> highway planet
    +
    +
  • come-from link: + If you write +
    +      <<< crystal star cluster
    +
    + in file A, + all strings 'crystal star cluster' in other files are automatically linked to A. +
+goto link +come-from link + +

Full-text search

+ +
    +
  • Everything is based on full-text search (grep); + the above 'links' are shortcuts to grep. +
  • Write fragmentarily and read collectively; + you can concatenate all matched notes into a single buffer. +
+ +

No conversion

+You can keep your favorite style. :-) +
    +
  • text file and free format +
  • implemented as a minor mode; can be combined with other modes. +
+ +

Todo list with magic sorting

+
    +
  • Reminder: sinks slowly. +
  • Todo: floats slowly. +
  • Deadline: floats rapidly when the date is approaching. +
+ +
+ +

Install

+ +
    +
  • './configure', 'make', and 'make install'. + Files are installed to /usr/share/emacs/site-lisp/howm/ + and /usr/local/share/howm/. +
  • Write below in your .emacs. +
    +        (require 'howm)
    +      
    +
  • If you see 'cannot open load file' error, put this before + the above description. +
    +        (add-to-list 'load-path "/usr/share/emacs/site-lisp/howm/")
    +      
    +
  • (Optional) + When howm runs too slow, try + 'M-x customize-group RET howm-efficiency RET'. + In particular, the below settings will be necessary for heavy users. +
    +        (setq howm-view-use-grep t)  ;; use external grep
    +        (setq howm-menu-refresh-after-save nil)
    +        (setq howm-menu-expiry-hours 6)  ;; cache menu N hours
    +        (setq howm-menu-file "0000-00-00-000000.txt")  ;; don't *search*
    +      
    +
+ +

Update from old version

+ +

1.4.2 to 1.4.3

+ +

+fix for emacs-25, etc. +

+ +

1.4.1 to 1.4.2

+ +

+fix for emacs-24.3, etc. +

+ +

1.4.0 to 1.4.1

+ +

+small bug fix, etc. +

+ +

1.3.9.2 to 1.4.0

+ +

+INCOMPATIBLE update. +If you need compatibility with 1.3.*, +put (setq howm-compatible-to-ver1dot3 t) before (require 'howm) in your .emacs. +See M-x customize-group RET howm-compatibility RET for details. +

+ +

+Though howm-1.4.0 has a new menu file, +your old menu file is not updated automatically. +Copy en/0000-00-00-000000.txt into howm/ directory if you like. +Alternatively, you can cut and paste some parts of it to your +howm/0000-00-00-000000.txt by hand. +

+ +

1.3.9.1 to 1.3.9.2

+ +

+small bug fix. +

+ +

1.3.9 to 1.3.9.1

+ +

+bug fix for emacs-24.0.50. +

+ +

1.3.8 to 1.3.9

+ +

+small bug fix, etc. +

+ +

1.3.7 to 1.3.8

+ +

+highlight late deadlines. +small bug fix, etc. +

+ +

1.3.6 to 1.3.7

+ +

+Maintenance release (internal cleaning). +The variable howm-list-normalizer is obsolete now. +Use howm-normalizer instead: +

    +
  • (Case 0) What is howm-list-normalizer? I don't know it at all. + --- You need to do nothing. :-) +
  • (Case 1) I've set it in M-x customize-variable. + --- M-x customize-variable howm-list-normalizer RET and select Off. + Then M-x customize-variable howm-normalizer RET and select + the corresponding item again. +
  • (Case 2) I've written (setq howm-list-normalizer 'howm-view-sort-by-XXX) + in my .emacs. + --- Rewrite it to + (setq howm-normalizer 'howm-sort-items-by-XXX). +
  • (Case 3) I've written (setq howm-list-normalizer ...my_original_elisp...). + --- Modify it correspondingly with the below change. +
      +
    • Old (howm-list-normalizer): + Specify a function that sorts and REDISPLAYS CURRENT items. +
    • New (howm-normalizer): + Specify a function that RETURNS the sorted list of items + for the GIVEN items. +
    + Or, Ask me in + + howm-eng ML. +
+

+ +

1.3.5 to 1.3.6

+ +

+Maintenance release. +Font-lock problem was fixed for CVS-head emacs. +

+ +

1.3.4 to 1.3.5

+ +

+Maintenance release. +Today's schedule didn't appear on menu on the last day of DST. +(cf. patch for 1.3.4) +

+ +

1.3.3 to 1.3.4

+ +

+Maintenance release (security fix). +All symbols are marked as risky-local-variable. +

+ +

1.3.2 to 1.3.3

+ +

+Maintenance release. +Several bugs are fixed (for CVS-head emacs, etc). +From this version, sleeping reminders can appear in todo list +in menu buffer. +If you don't like this behavior, please try +M-x customize-variable howm-menu-todo-priority. +

+ +

1.3.1 to 1.3.2

+ +

+Maintenance release. +A few bugs are fixed (mainly for xemacs). +Default value of an option is changed so that +[Today] function will show titles instead of matched lines themselves. +If you don't like this change, try below steps. +

    +
  • M-x customize-variable RET howm-list-title RET +
  • Remove check mark on howm-action-lock-date-search. +
  • [Save for Future Sessions] +
+

+ +

1.3.0 to 1.3.1

+ +

+Maintenance release. +A few bugs (locale, xemacs) are fixed. +

+ +

1.2.* to 1.3.0

+ + + +

+Though howm-1.3.0 has a new menu file, +your old menu file is not updated automatically. +Copy en/0000-00-00-000000.txt into howm/ directory if you like. +Alternatively, you can cut and paste some parts of it to your +howm/0000-00-00-000000.txt by hand. +

+ +

+Among several new features in howm-1.3.0, +the most useful one will be 'aliases'. +See README for details. +

+ +

Customization

+ +For customization, try 'M-x customize-group RET howm RET'. + +
+ +

Contact

+ +My email address is written at the beginning of source files. + +
+$Id: index.html,v 1.47 2012-12-27 03:23:31 hira Exp $ +SourceForge.jp + diff --git a/doc/menu.png b/doc/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9be6b3cb960d9a391ea0ba52d8915b8b6a5d25 GIT binary patch literal 22098 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
bahlk3b%C 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 literal 0 HcmV?d00001 diff --git a/doc/s-screen-shot.png b/doc/s-screen-shot.png new file mode 100644 index 0000000000000000000000000000000000000000..739f07c3c2a589d14fd1de8024c8a28bf5692675 GIT binary patch literal 21340 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 Ls6(pdED-+#Ca@a; literal 0 HcmV?d00001 diff --git a/doc/screen-shot.png b/doc/screen-shot.png new file mode 100644 index 0000000000000000000000000000000000000000..6d327d47dd3bb57a1eaef2dcfa9d77e044e25b93 GIT binary patch literal 14254 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 f_y5i>JA8Axpko@s5FTKV&oH0B~IW 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 QOvX#*ec3qkSHqkie+1p7AxahiQ`?>+~T-LG94e z8CdooDGq8q`f*FT?xWoKscDr0=i{xA`-To*e5U++KP{3UE5Dpbwu9F>=f-CHr;G$Po7&VZ&=(t{Mw~oA)CVlxV`H z?a~Pkb%d4RQYIv=zb{552Hu;XQN}3Gx^du35LnG_{Z#mpk8aitX#twB$$wAymzDnK z53ZPzyjiPJN(}XP?GaL&4w5Q**avo-fte{YHoRbB=h^l#w`8njm1pO-Ht*N*D@RDq z#yuuq2B!;T;`S f-Vy1Cvvo26COr7p$rMiU>S2Rcq7qqip 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 literal 0 HcmV?d00001 diff --git a/elisp-comp b/elisp-comp new file mode 100755 index 0000000..2d1eb65 --- /dev/null +++ b/elisp-comp @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright (C) 1995, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. + +scriptversion=2005-05-14.22 + +# 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 $? + 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: diff --git a/en/0000-00-00-000000.txt b/en/0000-00-00-000000.txt new file mode 100644 index 0000000..1811da6 --- /dev/null +++ b/en/0000-00-00-000000.txt @@ -0,0 +1,98 @@ += <<< %menu% + %"e"[Remember] %"c"[New] %"D"[Dup] Search(%"s"[String] %"g"[Regexp] %"o"[Occur]) + %"a"[All] %"l"[Recent] %"A"[Around] %"y"[Schedule] %"t"[Todo] %"b"[Buffers] %"x"[Marks] + %"K"[] %"i"[Key>] %"r"[Update] %"w"[Random Walk] [Killall] + %"."[Today] %":"[Yesterday] %"h"[History] %"R"[Update Menu] [Edit Menu] [Preference] +------------------------------------- +[Schedule, Todo] -- @schedule, !deadline (until %sdays days from now) +!deadline, +todo, -reminder, ~defer (top %tnum entries) +%reminder +------------------------------------- +Recent +%recent +------------------------------------- +Random -- If you do not like this, [Edit Menu] to erase it. +%random +------------------------------------- + +Format of schedule and todo (Please replace {} with []): +{2002-10-21}@1 schedule -- (shown in schedule part. @3 = "3 days schedule to 10-23") +{2002-10-21}+7 todo -- float up slowly from the date in 7 days +{2002-10-21}!7 deadline -- float up fast from 7 days before the date +{2002-10-21}-1 reminder -- float at the date and sink slowly one unit per 1 day +{2002-10-21}~30 defer -- float at the date and repeat sinking and floating with 30 days period +{2002-10-21}. done -- sink forever +(Numbers after marks are default values.) + +How to remember: +* Schedule at(@) the date +* Reminder sinks down(-). +* Todo floats up(+). +* Deadline needs attention! +* Defer waves(~) up and down. +* Done is the end(.). + +------------------------------------- + +You can edit this menu itself. +>>> %Editing Menu% + + += <<< %Editing Menu% +[Edit Menu] Hit RET on the left button to edit this menu. +[Update Menu] Hit RET on the left button to update this menu. +-------------------------------------------------------- + +*** Format of the menu file *** +(Please hit RET on [Edit Menu] and read the source file.) + +== Basic format + +As you see... + +* [xxx] is button. +* %REMINDER (in small letters) is schedule and todo list. +* %RECENT (in small letters) is list of recent entries. +* %RANDOM (in small letters) is list of random entries. + +You can arrange their places as you like. +Writing favorite files or goto links may be also convenient. +(ex) file:///etc/services >>> wiki + +== Shortcut + +%"foo"[All] +This is displayed as foo[All], and the key "f" executes [All]. +Exactly speaking, it executes the following sequence: +(1) move to closing ", (2) move to next underline, and (3) hit it. + +%"bar%" +If you put % at the tail like this, the key "b" means "move cursor here". + +== For lispers + +Display: +%here%howm-congrats-count ;; embed value of variable howm-congrats-count +%here%(howm-menu-search "search") +;; embed result of (...), that is, search "search" and embed matched lines +Functions must be registered for safety. +(setq howm-menu-allow (append '(foo bar) howm-menu-allow)) ;; allow foo, bar + +Action: +%eval%(message (buffer-name)) ;; evaluate S expr +%call%find-file ;; call function interactively +Both are evaluated in the previous buffer before raising menu. + +== Hiding + +'%' + '|' toggles invisibility +like this: visible%|invisible%|appear%|disappear - until the end of line +(Newline is removed when the end of line is invisible.) + +== Multiple menus + +Links to %xxx% open "<< < %xxx%" with menu-mode: >>> %menu% +When you add new menu, [[%menu%]] may be more convenient because corresponding +entry is generated automatically. + +%eval%(howm-menu-open "00000000-000000.txt") -- open file with menu-mode diff --git a/en/ChangeLog b/en/ChangeLog new file mode 100644 index 0000000..9675a3d --- /dev/null +++ b/en/ChangeLog @@ -0,0 +1,20 @@ +2011-01-01 HIRAOKA Kazuyuki + + * 0000-00-00-000000.txt: support new commands. + +2010-12-31 HIRAOKA Kazuyuki + + * 0000-00-00-000000.txt: use %reminder instead of %schedule and %todo. + +2005-12-09 HIRAOKA Kazuyuki + + * Makefile.am: no need to install 0000-00-00-000000.howm. + +2005-05-11 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: added [Preference], %recent, %random + +2005-05-06 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: bind R = [Update Menu] + diff --git a/en/Makefile.am b/en/Makefile.am new file mode 100644 index 0000000..c37714d --- /dev/null +++ b/en/Makefile.am @@ -0,0 +1,6 @@ +EXTRA_DIST = 0000-00-00-000000.txt + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && \ + CONFIG_HEADERS= CONFIG_LINKS= \ + CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status diff --git a/en/Makefile.in b/en/Makefile.in new file mode 100644 index 0000000..a9b2ccc --- /dev/null +++ b/en/Makefile.in @@ -0,0 +1,385 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 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@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +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 = : +build_triplet = @build@ +host_triplet = @host@ +subdir = en +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CVS = @CVS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +howmdir = @howmdir@ +htmldir = @htmldir@ +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@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = 0000-00-00-000000.txt +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 ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu en/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu en/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 +$(am__aclocal_m4_deps): +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$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: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +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: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-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: diff --git a/ext/ChangeLog b/ext/ChangeLog new file mode 100644 index 0000000..5c6d357 --- /dev/null +++ b/ext/ChangeLog @@ -0,0 +1,44 @@ +2010-12-29 HIRAOKA Kazuyuki + + * tag2plan: removed (not maintained) + +2008-02-12 HIRAOKA Kazuyuki + + * howm2 (ls_R): fix. + string =~ string is obsolete. + thx > dareka + http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport + + * howmkara + (ls_R): ditto. + (Book::interpret): ditto. + +2005-10-05 HIRAOKA Kazuyuki + + * howmkara + (String::offsets): avoid warning. + (Book::search): escape $ in regexp. + +2005-09-15 HIRAOKA Kazuyuki + + * hcal.rb (ical_item): don't use Date + +2005-07-18 HIRAOKA Kazuyuki + + * hcal.rb + (ical): fix. + iCalendar PRODID was merely copied from output of vPim + without consideration. + (usage): update URL + +2005-05-20 HIRAOKA Kazuyuki + + * howm2: support aliases of come-from keywords + +2005-05-15 HIRAOKA Kazuyuki + + * Makefile.am (EXTRA_DIST): + howmkara, hsplit.rb, howm-rast-register.rb, howm-rast-search.rb + are added. + + diff --git a/ext/Makefile.am b/ext/Makefile.am new file mode 100644 index 0000000..e6e83c4 --- /dev/null +++ b/ext/Makefile.am @@ -0,0 +1,12 @@ +EXTRA_DIST = \ + hcal.rb \ + howm2 \ + howmkara \ + hsplit.rb + +ext_DATA = $(EXTRA_DIST) + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && \ + CONFIG_HEADERS= CONFIG_LINKS= \ + CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status diff --git a/ext/Makefile.in b/ext/Makefile.in new file mode 100644 index 0000000..3fd53ae --- /dev/null +++ b/ext/Makefile.in @@ -0,0 +1,446 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 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@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +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 = : +build_triplet = @build@ +host_triplet = @host@ +subdir = ext +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +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 = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(extdir)" +DATA = $(ext_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CVS = @CVS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +howmdir = @howmdir@ +htmldir = @htmldir@ +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@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + hcal.rb \ + howm2 \ + howmkara \ + hsplit.rb + +ext_DATA = $(EXTRA_DIST) +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 ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu ext/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 +$(am__aclocal_m4_deps): +install-extDATA: $(ext_DATA) + @$(NORMAL_INSTALL) + @list='$(ext_DATA)'; test -n "$(extdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(extdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(extdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(extdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(extdir)" || exit $$?; \ + done + +uninstall-extDATA: + @$(NORMAL_UNINSTALL) + @list='$(ext_DATA)'; test -n "$(extdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(extdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$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)$(extdir)"; 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: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 + +html-am: + +info: info-am + +info-am: + +install-data-am: install-extDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +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-extDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-extDATA install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am \ + uninstall-extDATA + + +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: diff --git a/ext/hcal.rb b/ext/hcal.rb new file mode 100755 index 0000000..fd9805d --- /dev/null +++ b/ext/hcal.rb @@ -0,0 +1,280 @@ +#!/usr/bin/ruby -sKe +# -*- Ruby -*- + +# require 'jcode' +require 'iconv' +require 'date' + +def usage + name = File::basename $0 + print < '-'} +$date_sep = '-' + +def item_regexp(types) + x = $date_sep + if $format == 'old' + $todo_types ||= '[-+~!.]?' + %r|(@\[(\d\d\d\d)#{x}(\d\d)#{x}(\d\d)\](#{types})(\d*)\s+(.*))$| + else + $todo_types ||= '[-+~!.]' + %r|(\[(\d\d\d\d)#{x}(\d\d)#{x}(\d\d)\](#{types})(\d*)\s+(.*))$| + end +end + +# calendar + +$comment_width ||= 12 +$comment_width = $comment_width.to_i + +$schedule_mark ||= '@' +$deadline_mark ||= '!' +$done_mark ||= '.' +$type_display = { + '@' => $schedule_mark, + '!' => $deadline_mark, + '.' => $done_mark, + '?' => '¢¥' +} +$type_order = {'@' => 2, '!' => 1, '.' => 3, '?' => 4} +$today_mark ||= ' <<<<##>>>>' +$same_day_mark ||= ' #>>>>' + +# todo + +$priority_func = { +# '' => lambda{|lt, lz| pr_normal lt, lz}, + '-' => lambda{|lt, lz| pr_normal lt, lz}, + '+' => lambda{|lt, lz| pr_todo lt, lz}, + '~' => lambda{|lt, lz| pr_defer lt, lz}, + '!' => lambda{|lt, lz| pr_deadline lt, lz}, + '@' => lambda{|lt, lz| pr_schedule lt, lz}, + '.' => lambda{|lt, lz| pr_done lt, lz}, + '?' => lambda{|lt, lz| 0}, +} + +# defaults +$lz_normal = 1 +$lz_todo = 7 +$lz_defer = 30 +$lz_deadline = 7 + +# init +$pr_todo = -7 +$pr_defer = -14 +$pr_defer_peak = 0 +$pr_deadline = -2 + +$huge = 77777 +$huger = 88888 +$pr_normal_bottom = - $huge +$pr_todo_bottom = - $huge +$pr_defer_bottom = - $huge +$pr_deadline_bottom = - $huge +$pr_deadline_top = $huge +$pr_done_bottom = - $huger + +# misc + +$now = Time::now.to_f +$daysec = 60 * 60 * 24 + +############################################ +# func + +def late(time) + ($now - time.to_f) / $daysec +end + +# def late(y, m, d, now) +# ($now - Time::local(y,m,d,0,0,0).to_f) / $daysec +# end + +def relative_late(late, laziness, default) + laziness = default if laziness == 0 + late / laziness +end + +def pr_normal(lt, lz) + r = relative_late lt, lz, $lz_normal + r >= 0 ? - r : $pr_normal_bottom + r +end + +def pr_todo(lt, lz) + r = relative_late lt, lz, $lz_todo + c = - $pr_todo + r >= 0 ? c * (r - 1) : $pr_todo_bottom + r +end + +def pr_defer(lt, lz) + r = relative_late lt, lz, $lz_defer + c = $pr_defer_peak - $pr_defer + v = 2 * (((r % 1) - 0.5).abs) + r >= 0 ? $pr_defer_peak - c * v : $pr_defer_bottom + r +end + +def pr_deadline(lt, lz) + r = relative_late lt, lz, $lz_deadline + c = - $pr_deadline + if r > 0 + $pr_deadline_top + r + elsif r < -1 + $pr_deadline_bottom + r + else + c * r + end +end + +# dummy +def pr_schedule(lt, lz) + 0 +end + +def pr_done(lt, lz) + $pr_done_bottom + lt +end + +############################################ +# main + +if ($help || $h) + usage + exit 0 +end + +def item(types) + ARGF.grep(item_regexp(types)){|x| + h = Hash::new + h[:text] = $1 + y, m, d = [$2, $3, $4].map{|s| s.to_i} +# h[:y] = y = $2.to_i +# h[:m] = m = $3.to_i +# h[:d] = d = $4.to_i + h[:time] = time = Time::mktime(y, m, d) + h[:type] = type = $type_alias[$5] || $5 + h[:laziness] = laziness = $6.to_i + h[:comment] = $7 + h[:priority] = - $priority_func[type].call(late(time), laziness) + h[:file] = ARGF.filename + h[:line] = ARGF.file.lineno + h + } +end + +# def select_type(item, types) +# item.select{|h| types.member? h[:type]} +# end + +### todo + +def todo() + item($todo_types).sort{ + |a, b| a[:priority] <=> b[:priority] + }.each{|a| + puts "#{a[:file]}:#{a[:line]}:#{a[:text]}" + } +end + +### ical + +$conv = Iconv.new("UTF-8", "EUC-JP") + +def ical() + puts <<_EOS_ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//howm.sourceforge.jp//hcal.rb $Revision: 1.12 $//EN +CALSCALE:Gregorian +#{item($schedule_types).map{|h| ical_item h}.select{|z| z}.join.chomp} +END:VCALENDAR +_EOS_ +end + +def ical_item(h) +# if !Date.valid_date?(h[:y], h[:m], 1) +# $stderr.puts 'Invalid date:#{h[:file]}:#{h[:line]}:#{h[:text]}' +# return nil +# end +# # convert 2005-09-31 to 2005-10-01 +# d = Date.new(h[:y], h[:m], 1) + (h[:d] - 1) +# d = Date.new h[:y], h[:m], h[:d] +# s, e = [d, d+1].map{|z| z.strftime '%Y%m%d'} + s, e = [h[:time], h[:time] + 86400].map{|z| z.strftime '%Y%m%d'} + return <<_EOS_ +BEGIN:VEVENT +DTSTART:#{s} +DTEND:#{e} +SUMMARY:#{$conv.iconv(h[:type] + h[:comment])} +END:VEVENT +_EOS_ +end + +### schedule + +def schedule() + cal = Hash::new + item($schedule_types).each{|h| + t = h[:time] + cal[t] ||= Array::new + cal[t].push h + # [2004-12-25]@3 ==> [2004-12-25]@ [2004-12-26]@ [2004-12-27]@ + if h[:type] == '@' && h[:laziness] > 1 + (1...h[:laziness]).each{|d| + td = t + 60 * 60 * 24 * d + cal[td] ||= Array::new + cal[td].push h + } + end + } + min_time = cal.keys.min + max_time = cal.keys.max + t = min_time + while t <= max_time + c = cal[t] || [] + puts if t.wday == 0 + puts "----------------<#{t.month}>---------------- #{t.year}" if t.day == 1 + day = t.strftime '%d %a' + text = c.sort{|a,b| + x, y = [a, b].map{|z| [$type_order[z[:type]], z[:comment]]} + x <=> y +# $type_order[a[:type]] <=> $type_order[b[:type]] + }.map{|h| + h[:comment].sub!(%r|^(cancel)? *\[[#{$date_sep}0-9]+\][!+]?[0-9]*\s*|){|s| $1 ? 'x' : ''} if h[:type] == '.' # adhoc! + $type_display[h[:type]] + h[:comment].split(//)[0, $comment_width].join + }.join ' ' + mark = if t.strftime('%Y%m%d') == Time::now.strftime('%Y%m%d') + $today_mark + elsif t.strftime('%m%d') == Time::now.strftime('%m%d') + $same_day_mark + else + '' + end + puts "#{day} #{text}#{mark}" + t += 60*60*24 + end +end + +### main + +if $l + todo +elsif $i + ical +else + schedule +end diff --git a/ext/howm2 b/ext/howm2 new file mode 100755 index 0000000..806218c --- /dev/null +++ b/ext/howm2 @@ -0,0 +1,534 @@ +#!/usr/bin/ruby -s +# -*- coding: euc-jp -*- +# -*- Ruby -*- +# $Id: howm2,v 1.10 2010-12-31 12:12:47 hira Exp $ + +# Convert ~/howm/ to HTML or other formats. +# Only RD format is supported unless you will give me patches. :p + +require 'cgi' + +def usage + name = File::basename $0 + print < lambda{|str| CGI::escapeHTML str}, + :unescaper => lambda{|str| CGI::unescapeHTML str}, + # body page + :namer => appender('.b.html'), + :header => lambda{|file| + %!#{file}
\n!
+  },
+  :come_tag => lambda{|a|
+    # Fix me.
+    %!#{a[:orig]}!
+  },
+  :come_jump => lambda{|a|
+    %!#{a[:orig]}!
+  },
+  :come_anchor => lambda{|a|
+    %!!
+  },
+  :go_tag => lambda{|a|
+    %!#{a[:orig]}!
+  },
+  :go_anchor => lambda{|a|
+    %!!
+#     %!#{a[:key]}!
+  },
+  :url => lambda{|a|
+    %!#{CGI::unescapeHTML a[:url]}!
+  },
+  :footer => lambda{|file|
+    %!

index\n! + }, + # reference page + :ref_namer => appender('.r.html'), + :ref_header => lambda{|file| + "#{file}

References: #{file}

\n" + }, + :ref_itemer => lambda{|a| + go = a[:goto_file] + url = go ? "file://#{a[:goto_file]}" : "#{a[:path]}\##{a[:anch]}" + ocs = a[:occur] + %!

#{a[:key]} (#{ocs.length})

\n
    \n! + + ocs.map{|oc| + %!
  1. #{oc[:file]} #{oc[:text]}\n! + }.join + + "
\n" + }, + :ref_footer => constant("\n"), + # index page + :index_namer => constant('index.html'), + :index_header => constant("#{$title}

#{$title}

\n"), + :index_keyworder => lambda{|as| + "

Keywords (#{as.length})

\n" + + as.map{|a| %!#{a[:key]}!}.join(" /\n") + + "\n" + }, + :index_filer => lambda{|as| + "

Files (#{as.length})

\n
    \n" + + as.map{|a| %!
  1. #{a[:file]}: #{a[:title]}\n!}.join + + "
\n" + }, + :index_footer => constant("\n"), +} + +$formatter['rd'] = { # RD doesn't have anchor? + :escaper => no_change, + :unescaper => no_change, + # body page + :namer => appender('.b.rd'), + :header => empty, + :come_tag => lambda{|a| %!((<"#{a[:orig]}"|URL:#{a[:rpath]}>))!}, + :come_jump => lambda{|a| %!((<"#{a[:orig]}"|URL:#{a[:path]}>))!}, + :come_anchor => constant(''), + :footer => empty, + :go_tag => lambda{|a| %!((<"#{a[:orig]}"|URL:#{a[:rpath]}>))!}, + :go_anchor => constant(''), + :url => lambda{|a| %!((<"#{a[:url]}"|URL:#{a[:url]}>))!}, + # reference page + :ref_namer => appender('.r.rd'), + :ref_header => lambda{|file| "=begin\n= References: #{file}\n"}, + :ref_itemer => lambda{|a| + go = a[:goto_file] + url = go ? "file://#{go}" : "#{a[:path]}" + %!== ((<"#{a[:key]}"|URL:#{url}>))\n! + + a[:occur].map{|oc| + %!* ((<"#{oc[:file]}"|URL:#{oc[:path]}>)) #{oc[:text]}\n! + }.join + + "\n" + }, + :ref_footer => constant("=end\n"), + # index page + :index_namer => constant('index.rd'), + :index_header => constant("=begin\n= #{$title}\n"), + :index_keyworder => lambda{|as| + "== Keywords (#{as.length})\n" + + as.map{|a| %!((<"#{a[:key]}"|URL:#{a[:dest]}>))!}.join(" /\n") + + "\n" + }, + :index_filer => lambda{|as| + "== Files (#{as.length})\n" + + as.map{|a| %!* ((<"#{a[:file]}"|URL:#{a[:dest]}>)): #{a[:title]}\n!}.join + }, + :index_footer => constant("=end\n"), +} + +b = $formatter['rd'].dup +b[:header] = constant "=begin\n" +b[:footer] = constant "=end\n" +$formatter['rdbody'] = b + +##################################### + +class String + def indices(substr) + a = Array::new + pos = 0 + while (i = index substr, pos) + a.push(substr.is_a?(Regexp) ? [i, $&] : i) + pos = i + 1 + end + return a + end +end + +class HashList < Hash + def cons(key, val) + self[key] ||= Array::new + self[key].push val + end +end + +def ls_R(dir) + a = Array::new + Dir::open(dir){|d| d.each{|f| a.push f}} # map doesn't work?? + b = Array::new + a.each{|f| + next if f =~ /#$exclude/ + path = File::expand_path f, dir + b.push f if FileTest::file? path + b += ls_R(path).map{|g| "#{f}/#{g}"} if FileTest::directory? path + } + return b +end + +# FixMe :-( +def bundle(file_list) + fs = file_list.map{|f| File::expand_path f} + ds = fs.map{|f| File::dirname f} + common = ds[0] || '' + ds.each{|d| + while common != d + if common.length <= d.length + d = File::dirname d + else + common = File::dirname common + end + end + } + rs = fs.map{|f| f[(common.length + 1)..-1]} # +1 for '/' + return [common, rs] +end + +# Fixme :-( +def mkdir_p(path) + parent = File::dirname path + return true if parent == path # root dir + mkdir_p parent + if !FileTest::exist? path + Dir::mkdir path + end +end + +# Fixme :-( +def relative_path(target, origin) + return target if origin == '.' + sep = '/' + parent = '..' + root = origin.split(sep).map{|any| parent}.join(sep) + return root + sep + target +end + +def to_index(origin) + relative_path $formatter[$type][:index_namer].call, File::dirname(origin) +end + +$unique_id = ':000000' +def unique_name(base) + base + $unique_id.succ!.dup +end + +##################################### + +$titles_in_file = HashList::new # dirty! +def come_go_master(files, dir, formatter) + h = HashList::new # key => master files + aliases = [] + files.each{|f| + open(File::expand_path(f, dir)){|io| + io.each_line{|line| + if (t = title_match line) + $titles_in_file.cons f, t + end + if (found = come_go_match line) + equiv_key = [] + equiv_raw = [] + found.each{|m| + type, key, raw = m + s = formatter[:escaper].call raw + k = formatter[:escaper].call key + g = formatter[:namer].call f + r = formatter[:ref_namer].call f + a = CGI::escape(k) + arg = { + :type => type, + :raw => s, + :key => k, + :occur => Array::new, + :file => f, + :dest => g, + :ref => r, + :anch => a, + } + case type + when :comefrom + h.cons s, [:come_tag, arg] + h.cons k, [:come_jump, arg] + h.cons k, [:come_anchor, arg] + equiv_key.push k + equiv_raw.push s + when :goto + h.cons s, [:go_tag, arg] + h.cons k, [:go_anchor, arg] + end + } + if equiv_key.length > 1 + aliases += [equiv_key, equiv_raw] + end + end + } + } + } + return h, aliases +end + +def format_line(line, prog) + match = HashList::new # pos => key + prog.each{|rule| + regexp, func, greedy = [:regexp, :func, :greedy].map{|k| rule[k]} + line.indices(regexp).each{|r| + i, k = r + match.cons i, [k, func, greedy] + } + } + p match if $debug + cursor = 0 + done = "" + match.keys.sort.each{|i| + skipping = (i < cursor) + if !skipping + done += line[cursor..(i - 1)] if i > 0 # 'foobar'[0..-1] is 'foobar' + cursor = i + end + match[i].each{|com| + key, func, greedy = com + next if greedy && skipping + done += func.call(key, line) + if greedy + cursor = i + key.length + break + end + } + } + if (cursor <= (len = line.length)) + done += line[cursor..len] + end + return done +end + +def format_io(input, output, prog_src, compiler, escaper) + a = input.readlines.map{|s| escaper.call s} + whole = a.join + matched_rules = prog_src.select{|rule| + whole =~ rule[:regexp] + } + prog = matched_rules.map{|r| compiler.call r} + a.each{|line| + output.print format_line(line, prog) + } +end + +##################################### + +def notice(str) + STDERR.print str if !$silent +end + +if $list + dest_dir = ARGV.shift + src_dir, files = bundle(STDIN.readlines.map{|s| s.chomp}) +else + src_dir, dest_dir = ARGV + files = ls_R src_dir +end +notice "#{files.length} files " +fmt = $formatter[$type] +k2m, aliases = come_go_master files, src_dir, fmt +aliases = [] if $no_alias +notice "(#{k2m.length} entries)\n" +p k2m if $debug + +aliases.each{|equiv| + key0 = equiv.shift + type0, arg0 = k2m[key0][0] + equiv.each{|key| + k2m[key].each{|m| + type, arg = m + [:occur, :file, :dest, :ref].each{|x| + arg[x] = arg0[x] + } + arg[:anch_alias] = arg0[:anch] if type == :come_tag + } + } +} + +notice 'body pages: ' +greedy = Array::new +nongreedy = Array::new +k2m.each_pair{|k, v| + v.each{|m| + type, arg = m + r = /#{Regexp::escape k}/ + g = [:come_tag, :come_jump, :go_tag].member?(type) + z = g ? greedy : nongreedy + h = {:raw => k, :regexp => r, :type => type, :arg => arg, :greedy => g} + z.push h + } +} +greedy.sort!{|x, y| x[:raw].length <=> y[:raw].length} +greedy.reverse! +p greedy if $debug +p nongreedy if $debug +u = {:regexp => $url_regexp, :type => :url, :arg => Hash::new, :greedy => true} +prog_src = nongreedy + [u] + greedy +files.each{|f| + notice $progress + g = fmt[:namer].call f + r = fmt[:ref_namer].call f + spath = File::expand_path f, src_dir + dpath, rpath = [g, r].map{|x| File::expand_path x, dest_dir} + mkdir_p File::dirname(dpath) + compiler = lambda{|h| + func = lambda{|k, s| + type = h[:type] + arg = h[:arg] + if type == :url + arg[:url] = k + else + dir = File::dirname(f) + arg[:path] = relative_path arg[:dest], dir + arg[:rpath] = relative_path arg[:ref], dir + a = unique_name arg[:anch] + path = relative_path(g, dir) + occur = { + :file => f, :path => path, :text => s.chop, + :anch => a, :type => type, + } + arg[:occur].unshift occur + arg[:orig] = k + arg[:anch_n] = arg[:anch_alias] || arg[:anch] + end + fmt[type].call arg + } + reg = h[:regexp] + ignore_case = [:come_tag, :come_jump, :come_anchor].member?(h[:type]) && $i + reg = /#{reg.source}/i if ignore_case + {:regexp => reg, :func => func, :greedy => h[:greedy]} + } + open(spath){|input| + open(dpath, 'w'){|output| + output.print fmt[:header].call(f) + format_io input, output, prog_src, compiler, fmt[:escaper] + output.print fmt[:footer].call(f) + } + } +} +notice "\n" + +notice 'reference pages: ' +m2a = HashList::new +k2m.each_pair{|k, v| + v.each{|z| + type, arg = z + next if arg[:anch_alias] + m2a.cons arg[:file], arg if [:come_anchor, :go_anchor].member? type + } +} +m2a.each_pair{|f, v| + notice $progress + body = fmt[:namer].call f + ref = fmt[:ref_namer].call f + rpath = File::expand_path ref, dest_dir + mkdir_p File::dirname(rpath) + open(rpath, 'w'){|output| + output.print fmt[:ref_header].call(f) + v.each{|arg| + g = fmt[:unescaper].call arg[:key] + arg[:goto_file] = g if arg[:type] == :goto && FileTest::exist?(g) + arg[:occur].reject!{|oc| ![:come_anchor, :go_anchor].member? oc[:type]} + arg[:occur].sort!{|a,b| - (a[:file] <=> b[:file])} + output.print fmt[:ref_itemer].call(arg) + } + output.print fmt[:ref_footer].call(f) + } +} +notice "\n" + +notice 'index page: ' +path = File::expand_path fmt[:index_namer].call(), dest_dir +open(path, 'w'){|output| + output.print fmt[:index_header].call + output.print fmt[:index_keyworder].call(k2m.keys.sort.map{|k| + k2m[k].map{|m| + type, arg = m + [:come_anchor].member?(type) ? arg : nil + }.select{|a| a} + }.flatten) + # alphabet files precede numerical files + z = files.sort{|f, g| + a, b = [f, g].map{|h| (h =~ /^[0-9]/ ? 'z' : 'a') + h} + a <=> b + } + z.reverse! if $r + output.print fmt[:index_filer].call(z.map{|f| + g = fmt[:namer].call f +# ts = $titles_in_file[f].reject{|t| t =~ /^\s*$/} || [] + ts = $titles_in_file[f] || [] + {:file => f, :dest => g, :title => ts.join(' / ')} + }) + output.print fmt[:index_footer].call +} +notice ".\n" diff --git a/ext/howmkara b/ext/howmkara new file mode 100755 index 0000000..96ebc92 --- /dev/null +++ b/ext/howmkara @@ -0,0 +1,361 @@ +#!/usr/bin/ruby -s +# -*- coding: euc-jp -*- +# -*- Ruby -*- +# $Id: howmkara,v 1.7 2010-12-31 12:12:47 hira Exp $ + +# Convert ~/howm/ to HTML or other formats. +# Only RD format is supported unless you will give me patches. :p + +############################################################# + +require 'cgi' + +def usage + name = File::basename $0 + print <#{CGI::escapeHTML str}! + when :list + items = command.shift + @result += "
    \n" + items.each{|i| @result += '
  1. '; put_one i; @result += "\n"} + @result += "
\n" + end + end + def wrapped_result(title) + etitle = CGI::escapeHTML title + <<_EOS_ + +#{etitle} + +

#{etitle}

+
+#{@result} +
+Home +Files +Keywords + + +_EOS_ + end + def write(title, file, dir) + f = File::expand_path(file, dir) + '.html' + mkdir_p File::dirname(f) + open(f, 'w'){|io| io.puts wrapped_result(title)} + end +end + +class Book + include Bundle + attr_accessor :files, :base_dir + def initialize(files, base_dir) + @files = files + @base_dir = base_dir + end + def first_page + link_tag(@files[0]) + end + def write(dest_dir, formatter) + index = Index::new @files, @base_dir + write_each dest_dir, formatter, index + write_list dest_dir, formatter + index.write dest_dir, formatter + end + def write_list(dest_dir, formatter) + formatter.newpage + formatter.put [:list, @files.sort.map{|f| + link_tag f +# first_line = open(File::expand_path f, @base_dir){|io| io.gets.chop} +# [:link, f + '.b', f + ': ' + first_line[0, $summary_length]] + }] + formatter.write 'Files', 'book.h', dest_dir + notice ".\n" + end + def write_each(dest_dir, formatter, index) + @files.each{|f| + formatter.newpage + formatter.put [:pre, interpret(expand_readlines(f), index, f)] + formatter.write first_line(f), f + '.b', dest_dir +# formatter.write f, f + '.b', dest_dir + notice '.' + } + notice "\n" + end + def interpret(src, index, f) + hit = search src, index, f + cursor = 0 + ret = [] + while !hit.empty? + h = hit.shift + b, e, key = h + case cursor <=> b + when -1 # eat until beginning of this hit, and retry + ret.push [:as_is, src[cursor...b]] + hit.unshift h + cursor = b + when 0 # expand this hit + s = src[b...e] + if key == :url + link = [:url, s] + elsif key == :decl + s =~ /#$come_from/ + w = Regexp::last_match[$come_from_pos] + link = CGI::escape(CGI::escape(w)) + '.i' + else + decl = index.decl[key] + link = decl.member?(f) ? nil : decl[0] + '.b' + end + ret.push(link ? [:link, link, s] : [:as_is, s]) + cursor = e + when 1 # discard this hit + end + end + ret.push [:as_is, src[cursor..-1]] + ret + end + def search(src, index, f) + hit = [] + index.decl.each_key{|k| + offsets = src.offsets k + index.used.cons k, f if !offsets.empty? && !index.decl[k].member?(f) + hit += offsets.map{|o| o.push k} + } + hit += src.offsets(%r{http://[-!@#\$%^&*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#\$%^&*()_+|=:~/?a-zA-Z0-9]+}).map{|o| o.push :url} + hit += src.offsets($come_from).map{|o| o.push :decl} + hit.sort{|h1, h2| earlier_longer h1, h2} + end + def earlier_longer(h1, h2) + [h1[0], - h1[1]] <=> [h2[0], - h2[1]] + end +end + +class Index + include Bundle + attr_accessor :files, :base_dir + attr_reader :decl, :used + def initialize(files, base_dir) + @files = files + @base_dir = base_dir + @decl = HashList::new + @used = HashList::new + search_decl + end + def search_decl + @files.each{|f| + expand_readlines(f).scan($come_from){|hit| @decl.cons hit[0], f} + } + end + def write(dest_dir, formatter) + write_each dest_dir, formatter + write_list dest_dir, formatter + end + def write_list(dest_dir, formatter) + formatter.newpage + formatter.put [ + :list, + @decl.keys.sort.map{|key| + [:link, CGI::escape(CGI::escape(key)) + '.i', key + " (#{(@used[key]||[]).length})"] + } + ] + formatter.write 'Keywords', 'index.h', dest_dir + notice ".\n" + end + def write_each(dest_dir, formatter) + @decl.each_key{|key| + f = CGI::escape(key) + '.i' + to_decl = @decl[key].map{|g| link_tag g} + to_used = (@used[key] || []).map{|g| link_tag g} + to_rel = related_keys(key).map{|g| [:link, @decl[g][0] + '.b', g]} +# to_decl = @decl[key].map{|g| [:link, g + '.b', g]} +# to_used = (@used[key] || []).map{|g| [:link, g + '.b', g]} +# to_rel = related_keys(key).map{|g| [:link, @decl[g][0] + '.b', g]} + formatter.newpage + c = [ + [:as_is, "Declared:\n"], + [:list, to_decl], + [:as_is, "Linked:\n"], + [:list, to_used], + [:as_is, "Related:\n"], + [:list, to_rel], + ] + formatter.put *c + formatter.write key, f, dest_dir + notice '.' + } + notice "\n" + end + def related_keys(key) + sub = included_keys key + sub.map{|k| @decl.keys.select{|x| x.include? k and x != key}}.flatten.uniq.sort + end + def included_keys(key) + @decl.keys.select{|k| key.include? k} + end +end + +############################################################# + +if $list + dest_dir = ARGV.shift + src_dir, files = split_base(STDIN.readlines.map{|s| s.chomp}) +else + src_dir, dest_dir = ARGV + files = ls_R src_dir +end +notice "#{files.length} files " + +b = Book::new files, src_dir +i = Index::new files, src_dir +notice "(#{i.decl.length} entries)\n" + +$home ||= b.first_page[1] + '.html' +fmt = Formatter::new $home +b.write dest_dir, fmt diff --git a/ext/hsplit.rb b/ext/hsplit.rb new file mode 100755 index 0000000..cd583da --- /dev/null +++ b/ext/hsplit.rb @@ -0,0 +1,33 @@ +#!/usr/bin/ruby -s +# -*- coding: euc-jp -*- +# -*- Ruby -*- + +def usage + name = File::basename $0 + print < 0 + open($prefix + ext, 'w'){|io| io.print x} + ext.succ! +} diff --git a/gfunc.el b/gfunc.el new file mode 100644 index 0000000..4670b63 --- /dev/null +++ b/gfunc.el @@ -0,0 +1,121 @@ +;;; gfunc.el --- support for generic function +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: gfunc.el,v 1.16 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;;-------------------------------------------------------------------- + +;; sample +;; +;; (defun less-than:num (x y) +;; (< x y)) +;; (defun less-than:str (x y) +;; (string< x y)) +;; (defun type-of (x y) +;; (cond ((numberp x) ':num) +;; ((stringp x) ':str))) +;; (defvar disp-list (list #'type-of)) +;; (gfunc-define-function less-than (x y) disp-list) ;; --- <*> +;; (less-than 3 8) ;; (less-than:num 3 8) ==> t +;; (less-than "xyz" "abc") ;; (less-than:str "xyz" "abc") ==> nil +;; (pp (macroexpand '(gfunc-def less-than (x y) disp-list))) +;; +;; ;; This is equivalent to above <*>. +;; (gfunc-with disp-list +;; (gfunc-def less-than (x y)) +;; ;; You can insert more methods here. For example... +;; ;; (less-or-equal (x y)) +;; ;; (more-than (x y)) +;; ) + +(defvar *gfunc-dispatchers-var* nil + "For internal use") +(put '*gfunc-dispatchers-var* 'risky-local-variable t) + +;; loop version +(defun gfunc-call (base-name dispatchers args) + (let (type) + (catch 'done + (while dispatchers + (setq type (apply (car dispatchers) args)) + (if type + (throw 'done + (apply (intern-soft (format "%s%s" base-name type)) + args)) + (setq dispatchers (cdr dispatchers)))) + (error "Can't detect type of %s for %s." args base-name)))) + +;; (defun gfunc-call (base-name dispatchers args) +;; (if (null dispatchers) +;; (error "Can't detect type of %s for %s." args base-name) +;; (let ((type (apply (car dispatchers) args))) +;; (if (null type) +;; (gfunc-call base-name (cdr dispatchers) args) +;; (let ((f (intern-soft (format "%s%s" base-name type)))) +;; (apply f args)))))) + +;; (put 'gfunc-def 'lisp-indent-hook 2) +(defmacro gfunc-define-function (base-name args-declaration dispatchers-var + &optional description) + "Define generic function. +BASE-NAME is name of generic function. +ARGS-DECLARATION has no effect; it is merely note for programmers. +DISPATCHERS-VAR is name of variable whose value is list of type-detectors. +Type-detector receives arguments to the function BASE-NAME, and returns +its 'type' symbol. +Then, BASE-NAME + type is the name of real function. +Type detector must return nil if it cannot determine the type, so that +the task is chained to next detector." + (let ((desc-str (format "%s + +ARGS = %s + +Internally, %s___ is called according to the type of ARGS. +The type part ___ is determined by functions in the list `%s'. +This function is generated by `gfunc-define-function'." + (or description "Generic function.") + args-declaration + base-name + dispatchers-var))) + `(defun ,base-name (&rest args) + ,desc-str + (gfunc-call (quote ,base-name) ,dispatchers-var args)))) + +(defmacro gfunc-def (base-name args-declaration &optional description) + "Define generic function like `gfunc-define-function'. +The only difference is omission of dispatchers; it must be specified +by `gfunc-with' outside." + (declare (indent 2)) + `(gfunc-define-function ,base-name ,args-declaration ,*gfunc-dispatchers-var* + ,description)) + +(defmacro gfunc-with (dispatchers-var &rest body) + "With the defalut DISPATCHERS-VAR, execute BODY. +BODY is typically a set of `gfunc-def', and DISPATCHERS-VAR is used +as their dispatchers. +This macro cannot be nested." + (declare (indent 1)) + ;; Be careful to etc/NEWS in Emacs 24.3 or + ;; http://www.masteringemacs.org/articles/2013/03/11/whats-new-emacs-24-3/ + ;; "Emacs tries to macroexpand interpreted (non-compiled) files during load." + (setq *gfunc-dispatchers-var* dispatchers-var) + `(eval-and-compile + ,@body)) + +(provide 'gfunc) + +;;; gfunc.el ends here diff --git a/honest-report.el b/honest-report.el new file mode 100644 index 0000000..e3d7536 --- /dev/null +++ b/honest-report.el @@ -0,0 +1,138 @@ +;;; honest-report.el --- make bug report with screenshot and keylog + +;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;; HIRAOKA Kazuyuki +;; $Id: honest-report.el,v 1.13 2011-12-31 15:07:29 hira Exp $ +;; +;; 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 1, 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. +;; +;; The GNU General Public License is available by anonymouse ftp from +;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;; USA. + +;;; Commentary: + +;; (For users) +;; This small tool helps you write clear bug report. +;; Just type M-x honest-report to show recent keys and screen shots. +;; Copy them into your bug report. + +;; (For programmers) +;; Write a wrapper of `honest-report' with your favorite header and footer. + +;; (Bug) +;; Text properties are ignored in screen shot. +;; In particular, too large region can be copied for outline-mode +;; because all closed items are shown as opened. + +;;; Code: + +(defun honest-report (&optional header footer) + (interactive) + (let ((ver (honest-report-version)) + (key (honest-report-recent-keys)) + (msg (honest-report-message)) + (scr (honest-report-screenshot))) + (honest-report-setup) + (mapc (lambda (a) (apply #'honest-report-insert a)) + `( + ("Header" ,header) + ("Emacs version" ,ver) + ("Recent keys" ,key) + ("Recent messages" ,msg) + ("Screen shot" ,scr) + ("Footer" ,footer) + )) + (goto-char (point-max)))) + +(defun honest-report-insert (title content) + (when content + (insert "* " title ":\n\n" content "\n\n"))) + +;;;;;;;;;;;;; + +(defun honest-report-setup () + (let ((report-buf (format-time-string "honest-report-%Y%m%d-%H%M%S"))) + (switch-to-buffer report-buf))) + +;; snap:///usr/share/emacs/21.4/lisp/mail/emacsbug.el#136:(insert (mapconcat (lambda (key) +(defun honest-report-recent-keys () + (mapconcat (lambda (key) + (if (or (integerp key) + (symbolp key) + (listp key)) + (single-key-description key) + (prin1-to-string key nil))) + (recent-keys) + " ")) + +(defun honest-report-screenshot () + (mapconcat (lambda (w) + (with-current-buffer (window-buffer w) + (let ((b (max (window-start w) (point-min))) + (e (min (window-end w t) (point-max)))) + (format "--- %s ---\n%s" + w + (buffer-substring-no-properties b e))))) + (honest-report-window-list) + "\n")) + +(defun honest-report-window-list () + "Mimic `window-list'. +This function exists only for emacs20 (and meadow-1.15), +which lack `window-list'." + (let ((ws nil)) + (walk-windows (lambda (w) (setq ws (cons w ws)))) + (reverse ws))) + +(defun honest-report-message () + (with-current-buffer (or (get-buffer "*Messages*") + (get-buffer " *Message-Log*")) + (save-excursion + (goto-char (point-max)) + (forward-line -10) + (buffer-substring-no-properties (point) (point-max))))) + +(defun honest-report-version () + (mapconcat (lambda (sv) (format "[%s] %s" (car sv) (cdr sv))) + (honest-report-version-assoc) + "\n")) + +(defun honest-report-version-assoc () + (remove nil + `( + ("Emacs" . ,(format "%s (%s) of %s" + emacs-version + system-configuration + (honest-report-emacs-build-time))) + ("system" . ,system-type) + ("window system" . ,window-system) + ,(let ((f 'Meadow-version)) + ;; cheat to avoid warning while byte-compilation. + (and (fboundp f) + (cons "Meadow" (funcall f)))) + ("ENV" . ,(mapconcat (lambda (v) (format "%s=%s" v (getenv v))) + '("LC_ALL" "LC_CTYPE" "LANGUAGE" "LANG") + ", ")) + ))) + +(defun honest-report-emacs-build-time () + (if (stringp emacs-build-time) + emacs-build-time ;; xemacs + (format-time-string "%Y-%m-%d" + emacs-build-time))) + +;;;;;;;;;;;;; + +(provide 'honest-report) + +;;; honest-report.el ends here diff --git a/howm-backend.el b/howm-backend.el new file mode 100644 index 0000000..69d285c --- /dev/null +++ b/howm-backend.el @@ -0,0 +1,994 @@ +;;; howm-backend.el --- Wiki-like note-taking tool +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-backend.el,v 1.50 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(provide 'howm-backend) +(require 'howm) + +;; in preparation at now. +;; many WRONG COMMENTS and TENTATIVE CODES. + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; class Folder + +(defun howm-folder () + (howm-make-folder:files (howm-search-path))) + +;; * class Folder: abstraction of directory + +;; (Wrong comments. Ignore me.) +;; * grep(pattern, fixed, case_insensitive) +;; * list of items +;; * new_page +;; * all_pages +;; * all_keys +;; * add_keys +;; * keys_in(page) +;; * This method is optional. + +(defun howm-folder-type (folder &rest r) + (cond ((stringp folder) ':dir) + ((eq folder 'buf) ':buf) + ((listp folder) (car folder)))) + +(howm-defvar-risky howm-folder-dispatchers (list #'howm-folder-type)) + +(gfunc-with howm-folder-dispatchers + (gfunc-def howm-folder-items (folder &optional recursive-p) + "All pages in FOLDER is returned as list of items. +When RECURSIVE-P is non-nil, pages in subfolders are also listed.") + (gfunc-def howm-folder-grep-internal (folder pattern &optional fixed-p) + "In FOLDER, PATTERN is searched. +Result is returned as list of items. When FIXED-P is nil, PATTERN is +regarded as regular expression.") + ;; need to suppor below for howm-directory + (gfunc-def howm-folder-get-page-create (folder page-name) + "In FOLDER, get page whose name is PAGE-NAME. +If corresponding page does not exist, new page is created. +Return value is a cons pair of page and flag. +Flag is non-nil if new page is created.") + (gfunc-def howm-folder-territory-p (folder name) + "Non nil if FOLDER should own NAME.") + ) + +;; (gfunc-def-with howm-folder-dispatchers +;; (howm-folder-items (folder &optional recursive-p) +;; "All pages in FOLDER is returned as list of items. +;; When RECURSIVE-P is non-nil, pages in subfolders are also listed.") +;; (howm-folder-grep-internal (folder pattern &optional fixed-p) +;; "In FOLDER, PATTERN is searched. +;; Result is returned as list of items. When FIXED-P is nil, PATTERN is +;; regarded as regular expression.") +;; ) + +(defun howm-folder-match-under-p (dir regexp filename) + (and (eq (howm-folder-type dir) ':dir) + (string-match regexp (file-relative-name filename dir)))) + +(defun howm-make-folder-from-items (items) + (howm-make-folder:pages (howm-cl-remove-duplicates* (mapcar #'howm-item-page + items) + :test #'howm-page=))) + +;;; +;;; dir folder: single directory +;;; + +(defun howm-make-folder:dir (dir) + dir) + +(defun howm-folder-items:dir (dir &optional recursive-p) + (let ((files (if recursive-p + (howm-files-in-directory dir) + (directory-files dir t)))) + (howm-folder-items:files (howm-make-folder:files files)))) + +(defun howm-folder-grep-internal:dir (folder pattern &optional fixed-p) + (howm-grep-items pattern folder fixed-p #'howm-exclude-p)) + +(defun howm-files-in-directory (path &optional dummy-exclusion-checker) + "List files in PATH recursively, when PATH is a directory. +When PATH is a file, list of it is returned. +Some files and directories are ignored according to `howm-exclude-p'. +DUMMY-EXCLUSION-CHECKER has no effect; it should be removed soon." + (howm-files-in-directory-sub (expand-file-name path))) + +(defun howm-files-in-directory-sub (full-path &optional under) + (let* ((top-call-p (null under)) + (excluded-p (if top-call-p + nil + (or (howm-exclude-p full-path) + ;; exclude "." & ".." + (not (howm-subdirectory-p under full-path + 'strict)))))) + (cond (excluded-p + nil) + ((file-directory-p full-path) + (cl-mapcan (lambda (s) + (howm-files-in-directory-sub s full-path)) + (directory-files full-path t))) + ((file-exists-p full-path) + (list full-path)) + (t + nil)))) + +;; ;; list files recursively +;; (defun howm-files-in-directory (dir &optional exclusion-checker) +;; (when (null exclusion-checker) +;; (setq exclusion-checker (lambda (x) nil))) +;; (cond ((file-directory-p dir) (howm-files-in-directory-sub dir +;; exclusion-checker)) +;; ((file-exists-p dir) (list dir)) +;; (t nil))) + +;; (defun howm-files-in-directory-sub (dir exclusion-checker) +;; (cl-mapcan (lambda (f) +;; (cond +;; ((funcall exclusion-checker f) nil) +;; ((file-directory-p f) (if (howm-subdirectory-p dir f t) +;; (howm-files-in-directory f exclusion-checker) +;; nil)) ;; exclude "." & ".." +;; ((file-regular-p f) (list f)) +;; (t nil))) +;; (directory-files dir t))) + +(defun howm-folder-get-page-create:dir (folder page-name) + (let* ((file (expand-file-name page-name folder)) + (dir (file-name-directory file)) + (createp (not (file-exists-p file)))) + (make-directory dir t) + (cons (howm-make-page:file file) createp))) + +(defun howm-folder-territory-p:dir (folder name) + (howm-subdirectory-p folder name)) + +;;; +;;; pages folder: list of 'pages' +;;; + +(defun howm-make-folder:pages (pages) + (cons ':pages pages)) + +(defun howm-folder-pages:pages (folder) + (cdr folder)) + +(defun howm-folder-items:pages (folder &optional recursive-p) + (let ((summary "")) + (mapcar (lambda (p) (howm-make-item p summary)) + (howm-folder-pages:pages folder)))) + +;; should be removed, or renamed at least +(defun howm-folder-files:pages (folder &optional exclusion-checker) + (remove nil (mapcar #'howm-page-name (howm-folder-pages:pages folder)))) + +(defun howm-folder-grep-internal:pages (folder pattern &optional fixed-p) + (let ((h (howm-classify #'howm-page-type (howm-folder-pages:pages folder) t))) + ;; get result for each type + (apply #'append (mapcar (lambda (p) + (let ((type (car p)) + (searcher (cdr p))) + (let ((pages (reverse (cdr (assoc type h))))) + (funcall searcher pages pattern fixed-p)))) + howm-folder-grep-internal:pages-searcher)))) + +(howm-defvar-risky howm-folder-grep-internal:pages-searcher + '((:file . howm-folder-grep-internal:pages-files) + (:buf . howm-folder-grep-internal:pages-buffers))) +(defun howm-folder-grep-internal:pages-files (pages pattern fixed-p) + (let ((files (mapcar #'howm-page-name pages))) + (howm-folder-grep-internal:files (howm-make-folder:files files) + pattern fixed-p))) +(defun howm-folder-grep-internal:pages-buffers (pages pattern fixed-p) + (let ((bufs pages) + (r (howm-fake-grep-regexp pattern fixed-p)) + (c *howm-view-force-case-fold-search*)) + (let ((grep-result (cl-mapcan + (lambda (b) + (if (howm-buffer-killed-p b) + nil + (with-current-buffer b + (howm-fake-grep-current-buffer r b c)))) + bufs))) + (mapcar (lambda (g) + (let ((buf (car g)) + (place (cadr g)) + (content (cl-caddr g))) + (howm-make-item (howm-make-page:buf buf) content place))) + grep-result)))) + +(defun howm-list-buffers (&optional all) + "Show buffer list. If ALL is non-nil, hidden buffers are also listed." + (interactive "P") + (let* ((bufs (if all + (buffer-list) + (cl-remove-if + (lambda (b) + (let ((name (buffer-name b))) + (or (null name) + (string-match "^ " name) + (member name howm-list-buffers-exclude) + (with-current-buffer b + (member major-mode + '(howm-view-summary-mode + howm-view-contents-mode)))))) + (buffer-list)))) + (pages (mapcar (lambda (b) (howm-make-page:buf b)) bufs)) + (folder (howm-make-folder:pages pages))) + (howm-view-directory folder))) +(defun howm-occur (regexp) + "Show all lines in the current buffer containing a match for REGEXP." + (interactive "sSearch (regexp): ") + (let ((howm-view-use-grep (if howm-occur-force-fake-grep + nil + howm-view-use-grep))) + (howm-view-search-folder regexp + (howm-make-folder:pages + (list (howm-make-page:buf (current-buffer))))))) +(defun howm-list-mark-ring () + "Show all marks in the current buffer." + (interactive) + (let* ((page (howm-make-page:buf (current-buffer))) + (items (mapcar (lambda (m) + (let ((place (riffle-get-place m)) + (summary (save-excursion + (goto-char m) + (let ((b (line-beginning-position)) + (e (line-end-position))) + (buffer-substring b e))))) + (howm-make-item page summary place))) + (howm-cl-remove-duplicates* + (cons (mark-marker) mark-ring) + :test #'howm-mark-same-line-p)))) + (howm-view-summary "" items))) +(defun howm-mark-same-line-p (m1 m2) + (apply #'= + (mapcar (lambda (m) + (save-excursion + (goto-char m) + (line-beginning-position))) + (list m1 m2)))) + +;;; +;;; files folder: list of file names +;;; + +;;; This folder is treated specially for efficient search. + +;;; Fix me: [2005-02-17] +;;; Sorry. I can't remember whether 'file' means really 'file' only. +;;; It may be 'file or directory'. + +;; Try this to check it. +;; (setq howm-menu-top nil) +;; (setq howm-menu-file (expand-file-name "sample/0000-00-00-000000.howm")) +;; (setq howm-directory (howm-make-folder:files (mapcar (lambda (f) (expand-file-name f "sample/")) '("top.txt" "search.txt")))) + +(defun howm-make-folder:files (files) + (cons ':files files)) + +(defun howm-folder-items:files (folder &optional recursive-p) + (let ((summary "")) + (mapcar (lambda (f) + (howm-make-item (howm-make-page:file f) summary)) + (howm-folder-files:files folder)))) + +(defun howm-folder-grep-internal:files (folder pattern &optional fixed-p) + (howm-grep-items pattern (howm-folder-files:files folder) fixed-p)) + +;; should be removed, or renamed at least +(defun howm-folder-files:files (folder &optional exclusion-checker) + (cdr folder)) + +;;; +;;; nest folder: list of folders +;;; + +;; Try this to check it. +;; (setq howm-menu-top nil) +;; (setq howm-menu-file (expand-file-name "sample/0000-00-00-000000.howm")) +;; (setq howm-directory (howm-make-folder:nest (mapcar #'expand-file-name '("sample" "/usr/share/emacs/site-lisp/navi2ch")))) + +(defun howm-make-folder:nest (list-of-folders) + (cons ':nest list-of-folders)) + +(defun howm-folder-subfolders (self) + (cdr self)) + +(defun howm-folder-items:nest (folder &optional recursive-p) + (cl-mapcan (lambda (f) (howm-folder-items f recursive-p)) + (howm-folder-subfolders folder))) + +(defun howm-folder-grep-internal:nest (folder pattern &optional fixed-p) + (cl-mapcan (lambda (f) (howm-folder-grep-internal f pattern fixed-p)) + (howm-folder-subfolders folder))) + +;;; +;;; namazu folder: namazu index directory +;;; + +;; (cf.) Namazu: a Full-Text Search Engine http://www.namazu.org/index.html.en + +;; test: +(defun howm-search-namazu (dir pattern) + (interactive "Dindex directory: +ssearch: ") + (let ((folder (howm-make-folder:namazu (expand-file-name dir)))) + (howm-view-summary "" + (howm-view-search-folder-items pattern folder)))) + +(defun howm-make-folder:namazu (index-dir) + (cons ':namazu (expand-file-name index-dir))) + +(defun howm-folder-items:namazu (folder &optional recursive-p) + (let ((files (howm-folder-files:namazu folder))) + (howm-folder-items:files (howm-make-folder:files files)))) + +;; should be removed, or renamed at least +(defun howm-folder-files:namazu (folder &optional exclusion-checker) + (with-temp-buffer + (insert-file-contents (expand-file-name "NMZ.r" + (cdr folder))) + (split-string (buffer-substring-no-properties (point-min) + (point-max)) + "[\n\r\v]+"))) + +(defun howm-folder-grep-internal:namazu (folder pattern-list &optional fixed-p) + (let* ((index-dir (cdr folder)) + (namazu-pattern (mapconcat #'identity pattern-list " or ")) + (hits (with-temp-buffer + (call-process "namazu" nil t nil + "-l" "-a" namazu-pattern index-dir) + (split-string (buffer-substring-no-properties (point-min) + (point-max)) + "[\n\r\v]+"))) + (files (cl-remove-if (lambda (f) (not (file-exists-p f))) hits))) + ;; grep again + (let ((howm-view-use-grep nil)) ;; Japanese encoding is annoying. + (howm-folder-grep-internal (howm-make-folder:files files) + pattern-list fixed-p)))) + +;;; +;;; rot13dir folder: almost same as dir folder except that files are rot13ed. +;;; + +(defun howm-make-folder:rot13dir (dir) + (cons ':rot13dir dir)) + +(defun howm-folder-items:rot13dir (folder &optional recursive-p) + (let ((files (if recursive-p + (howm-files-in-directory (cdr folder)) + (directory-files (cdr folder) t)))) + (mapcar (lambda (f) + (howm-make-item (howm-make-page:rot13file f))) + files))) + +(defun howm-folder-grep-internal:rot13dir (folder pattern-list &optional fixed-p) + (let* ((dir (cdr folder)) + (ps (mapcar (lambda (p) (yarot13-rotate-string p)) pattern-list)) + (is (howm-folder-grep-internal:dir dir ps fixed-p))) + (mapc (lambda (i) + (let ((file (howm-page-name (howm-item-page i))) + (summary (howm-item-summary i))) + (howm-item-set-page i (howm-make-page:rot13file file)) + (howm-item-set-summary i (yarot13-rotate-string summary)))) + is) + is)) + +;;; For backward compatibility. Don't use it any more. + +(defalias 'howm-view-directory-items #'howm-folder-items) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Grep + +;; Fix me: +;; Name of arguments are inappropriate. +;; Pattern and str may be list of strings. +;; File-list may be a string. + +(defun howm-folder-grep (folder pattern &optional fixed-p) + (when (stringp pattern) + (setq pattern (list pattern))) + (howm-folder-grep-internal folder pattern fixed-p)) + +(defvar *howm-view-force-case-fold-search* nil) ;; dirty! +(howm-defvar-risky howm-view-grep-log-file nil) +(defvar howm-view-grep-log-format "> %s | %s") + +(defun howm-grep-items (str file-list &optional fixed-p exclusion-checker) + (let* ((found (howm-grep str file-list fixed-p)) + (items (mapcar (lambda (z) + (let ((file (car z)) + (place (cadr z)) + (content (cl-caddr z))) + (if (and exclusion-checker + (funcall exclusion-checker file)) + nil + (howm-make-item file content place)))) + found))) + (if exclusion-checker + (remove nil items) + items))) + +(defun howm-grep (str file-list &optional fixed-p) + (when howm-view-grep-log-file + (howm-write-log str howm-view-grep-log-format howm-view-grep-log-file)) + (when (stringp file-list) + (setq file-list (list file-list))) + (let ((grep-func (cond ((eq howm-view-use-grep t) 'howm-real-grep) + ((null howm-view-use-grep) 'howm-fake-grep) + ((functionp howm-view-use-grep) howm-view-use-grep) + (t (error "No function %s." howm-view-use-grep))))) + (funcall grep-func + str file-list fixed-p *howm-view-force-case-fold-search*))) + +(defun howm-real-grep (str file-list &optional fixed-p force-case-fold) + "Call grep and parse its result. +'((file line-number line) (file line-number line) ...) +" + (if (howm-grep-multi-p) + (howm-real-grep-multi str file-list fixed-p force-case-fold) + (howm-real-grep-single str file-list fixed-p force-case-fold))) + +(defun howm-grep-multi-p () + howm-view-grep-file-stdin-option) + +;; obsolete +(defun howm-real-grep-single (str file-list + &optional fixed-p force-case-fold) + "Call grep and parse its result. +'((file line-number line) (file line-number line) ...) +" + (when (listp str) + (if (null (cdr str)) + (setq str (car str)) + (error "Multiple patterns are not supported: %s" str))) + (let ((grep-command (or (and fixed-p howm-view-fgrep-command) + howm-view-grep-command)) + (opt (split-string howm-view-grep-option)) + (eopt (and howm-view-grep-expr-option + (list howm-view-grep-expr-option))) + (case-fold (or force-case-fold + (not (let ((case-fold-search nil)) + (string-match "[A-Z]" str)))))) + (cl-labels ((add-opt (pred x) (when (and pred x) (setq opt (cons x opt))))) + (add-opt case-fold howm-view-grep-ignore-case-option) + (add-opt fixed-p howm-view-grep-fixed-option) + (add-opt (not fixed-p) howm-view-grep-extended-option)) + (with-temp-buffer + (let* ((fs (howm-expand-file-names file-list)) + (lines (howm-call-process* grep-command + `(,@opt ,@eopt ,str) fs)) + (parsed (mapcar 'howm-grep-parse-line lines))) + (remove nil parsed))))) + +(defun howm-real-grep-multi (str file-list &optional fixed-p force-case-fold) + (let ((grep-command (or (and fixed-p howm-view-fgrep-command) + howm-view-grep-command)) + (opt (split-string howm-view-grep-option)) + (eopt (split-string howm-view-grep-file-stdin-option))) + (let* ((str-list (cond ((stringp str) (list str)) + ((listp str) str) + (t (error "Wrong type: %s" str)))) + (caps-p (cl-member-if (lambda (s) (howm-capital-p s)) str-list)) + (case-fold (or force-case-fold (not caps-p)))) + (cl-labels ((add-opt (pred x) (when (and pred x) (setq opt (cons x opt))))) + (add-opt case-fold howm-view-grep-ignore-case-option) + (add-opt fixed-p howm-view-grep-fixed-option) + (add-opt (not fixed-p) howm-view-grep-extended-option)) + (with-temp-buffer + (let* ((fs (howm-expand-file-names file-list)) + (pat (apply #'concat + (mapcar (lambda (s) (concat s "\n")) str-list))) + (lines (howm-call-process* grep-command + `(,@opt ,@eopt) fs + nil pat)) + (parsed (mapcar 'howm-grep-parse-line lines))) + (remove nil parsed)))))) + +(defun howm-fake-grep (str file-list &optional fixed-p force-case-fold) + "Search STR in files. +Return a list ((name number str) (name number str) ...), where +name is file name, number is line number, and str is line content. +FILE-LIST is list of file names. +If FIXED-P is non-nil, regexp search is performed. +If FIXED-P is nil, fixed string search is performed. +When STR has no capital letters or FORCE-CASE-FOLD is non-nil, +difference of capital letters and small letters are ignored. + +Extended feature: +STR can be list of strings. They are regarded as 'or' pattern of all elements." + (cl-mapcan (lambda (file) + (howm-fake-grep-file (howm-fake-grep-regexp str fixed-p) + file force-case-fold)) + (cl-mapcan #'howm-files-in-directory file-list))) + +(defun howm-fake-grep-regexp (str &optional fixed-p) + (let ((str-list (if (stringp str) (list str) str))) + (if fixed-p + (regexp-opt str-list) + (mapconcat (lambda (s) (format "\\(%s\\)" s)) str-list "\\|")))) + +(defun howm-fake-grep-file (reg file force-case-fold) + (let ((b (get-file-buffer file))) + (if (and b howm-view-watch-modified-buffer) + (with-current-buffer b + (howm-fake-grep-current-buffer reg file force-case-fold)) + (with-temp-buffer + (insert-file-contents file) + (howm-fake-grep-current-buffer reg file force-case-fold))))) + +(defun howm-fake-grep-current-buffer (reg file force-case-fold) + (save-excursion + (save-restriction + (widen) + (goto-char (point-max)) + (let* ((found nil) + (case-fold-search (or force-case-fold (not (howm-capital-p reg))))) + (while (re-search-backward reg nil t) + (beginning-of-line) + (setq found + (cons (list file + (riffle-get-place) + (buffer-substring-no-properties (point) + (line-end-position))) + found))) + found)))) + +(defun howm-grep-parse-line (line) + (if (string-match "^\\(\\([a-zA-Z]:/\\)?[^:]*\\):\\([0-9]*\\):\\(.*\\)$" + line) + (let ((file (match-string 1 line)) + (line (string-to-number (match-string 3 line))) + (content (match-string 4 line))) + (list file line content)) + nil)) + +;; For backward compatibility. Don't use them any more. +(defalias 'howm-view-grep #'howm-grep) +(defalias 'howm-view-call-process #'howm-call-process) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; class Page + +;; * class Page: abstraction of file + +;; Fix me: confusion between 'page name' and 'file name', +;; especially for a buffer. + +;; (Wrong comments. Ignore me.) +;; * folder +;; * name +;; * created_time +;; * modified_time +;; * load +;; * save(text) + +(defun howm-page-type (page &rest r) + (cond ((stringp page) ':file) + ((bufferp page) ':buf) + ((null page) ':nil) + ((listp page) (car page)))) + +(howm-defvar-risky howm-page-dispatchers (list #'howm-page-type)) + +(gfunc-with howm-page-dispatchers + (gfunc-def howm-page-name (page)) + (gfunc-def howm-page-mtime (page)) + (gfunc-def howm-page-open (page)) + (gfunc-def howm-page-insert (page)) + (gfunc-def howm-page-viewer (page)) + (gfunc-def howm-page-set-configuration (page)) + ) + +(defun howm-page= (x y) + (equal x y)) + +(defun howm-page-abbreviate-name (page) + (howm-abbreviate-file-name (format "%s" (howm-page-name page)))) + +(defalias 'howm-save-buffer #'save-buffer) + +(defun howm-insert-buffer-contents (buffer) + (insert (with-current-buffer buffer + (save-restriction + (widen) + (let ((limit (point-max))) + (when howm-view-contents-limit + (setq limit (min limit howm-view-contents-limit))) + (buffer-substring-no-properties (point-min) limit)))))) + +;; (defun howm-page-insert-range () +;; (let ((limit (point-max))) +;; (when howm-view-contents-limit +;; (setq limit (min limit howm-view-contents-limit))) +;; (list (point-min) limit))) + +;; (defun howm-page-save (&optional args) +;; (interactive "p") +;; (with-current-buffer (get-file-buffer (howm-page-name howm-buffer-page)) +;; (apply #'save-buffer args))) + +;; (defun howm-save-buffer (&optional args) +;; (interactive "p") +;; (prog1 +;; (save-buffer args) +;; (howm-after-save))) + +;;; +;;; file page: name of file +;;; + +(defun howm-make-page:file (filename) + filename) + +(defun howm-page-name:file (page) + page) + +(defun howm-page-mtime:file (page) + (nth 5 (file-attributes (howm-page-name page)))) + +(defun howm-page-open:file (page) + (find-file (howm-page-name page)) + ;; widen is desired when corresponding file is already opened and + ;; its buffer is narrowed. + (widen)) + +(defun howm-page-insert:file (page) + (let ((b (get-file-buffer page))) + (if (and b + howm-view-watch-modified-buffer + (not howm-view-use-grep)) + (howm-insert-buffer-contents b) + (howm-insert-file-contents page)))) + +(defun howm-page-viewer:file (page) + (let* ((ls (lambda (dir) + (with-temp-buffer + (insert-directory dir "-l") + (buffer-substring-no-properties (point-min) (point-max))))) + (dir-viewer (and (file-directory-p page) + (howm-make-viewer:func #'find-file ls))) + (viewer (cdr (cl-assoc-if (lambda (reg) (string-match reg page)) + howm-view-external-viewer-assoc)))) + (or viewer dir-viewer + (and howm-view-use-mailcap + (let* ((ext (if (string-match "\\.[^\\.]+$" page) + (match-string 0 page) + "")) + (type (howm-funcall-if-defined + (mailcap-extension-to-mime ext))) + (type-match (lambda (r) (string-match r type)))) + (cond ((null type) + nil) + ((cl-member-if type-match howm-view-open-by-myself) + nil) + (t + (howm-funcall-if-defined + (mailcap-mime-info type))))))))) + +(defun howm-page-set-configuration:file (page) + (howm-set-configuration-for-file-name page)) + +;;; +;;; buffer page: buffer object +;;; + +(defun howm-make-page:buf (buf) + buf) + +(defun howm-page-name:buf (page) + (buffer-name page)) + +(defconst howm-dummy-mtime (encode-time 0 0 9 1 1 1970) + "Dummy mtime which has no meaning.") + +(defun howm-page-mtime:buf (page) + howm-dummy-mtime) + +(defun howm-page-open:buf (page) + (switch-to-buffer page)) + +(defun howm-page-insert:buf (page) + (when (not (howm-buffer-killed-p page)) + (howm-insert-buffer-contents page))) + +(defun howm-page-viewer:buf (page) + nil) +;; (howm-make-viewer:func #'switch-to-buffer)) + +(defun howm-page-set-configuration:buf (page) + (when (buffer-file-name page) + (howm-set-configuration-for-file-name (buffer-file-name page)))) + +;;; +;;; nil page: dummy page +;;; + +(defun howm-make-page:nil () + nil) + +(defun howm-page-name:nil (page) + "") + +(defun howm-page-mtime:nil (page) + howm-dummy-mtime) + +(defun howm-page-open:nil (page) + "Do nothing." + nil) + +(defun howm-page-insert:nil (page) + "Do nothing." + nil) + +(defun howm-page-viewer:nil (page) + nil) + +(defun howm-page-set-configuration:nil (page) + "Do nothing." + nil) + +;;; +;;; rot13file page: almost same as file except that it is rot13ed +;;; + +(defun howm-make-page:rot13file (filename) + (cons ':rot13file filename)) + +(defun howm-page-name:rot13file (page) + (howm-page-name (cdr page))) + +(defun howm-page-mtime:rot13file (page) + (howm-page-mtime:file (cdr page))) + +(defun howm-page-open:rot13file (page) + (yarot13-find-file (howm-page-name page)) + ) + +(defun howm-page-insert:rot13file (page) + (yarot13-insert-file-contents (howm-page-name page))) + +(defun howm-page-viewer:rot13file (page) + nil) + +(defun howm-page-set-configuration:rot13file (page) + (howm-set-configuration-for-file-name (howm-page-name page))) + +;;; Clean me. + +;; (defun howm-file-path (&optional time) +;; (expand-file-name (howm-file-name time) howm-directory)) + +(defun howm-create-file (&optional keep-cursor-p) + (let* ((pc (howm-folder-get-page-create howm-directory (howm-file-name))) + (page (car pc)) + (createp (cdr pc))) + (howm-page-open page) + (when (not keep-cursor-p) + (widen) + (goto-char (point-max))) + (when createp + (run-hooks 'howm-create-file-hook)) + createp)) + +;; (defun howm-create-file (&optional keep-cursor-p) +;; (let* ((file (howm-file-path)) +;; (dir (file-name-directory file)) +;; (createp (not (file-exists-p file)))) +;; (make-directory dir t) +;; (howm-page-open file) +;; (when createp +;; (run-hooks 'howm-create-file-hook)) +;; (when (not keep-cursor-p) +;; (widen) +;; (goto-char (point-max))) +;; createp)) + +;;; viewer + +;; Viewer is one of the following. +;; func ==> (func) is called after (find-file page). +;; (func) ==> (func page) is called. +;; (func . previewer) +;; ==> (func page) and (previewer page) are called for open and preview +;; (previewer must return a string). +;; "str" ==> (format "str" page) is externally executed on shell. + +(defun howm-viewer-type (viewer &rest r) + (cond ((stringp viewer) ':str) + ((functionp viewer) ':func0) + ((listp viewer) ':func))) + +(howm-defvar-risky howm-viewer-dispatchers (list #'howm-viewer-type)) + +(gfunc-with howm-viewer-dispatchers + (gfunc-def howm-viewer-call (viewer page)) + (gfunc-def howm-viewer-indicator (viewer page)) +) + +(defun howm-make-viewer:func (f &optional previewer) + (cons f previewer)) + +(when howm-view-use-mailcap + (require 'mailcap) + (howm-funcall-if-defined (mailcap-parse-mailcaps)) + (howm-funcall-if-defined (mailcap-parse-mimetypes))) + +(defun howm-viewer-call:str (viewer page) + (start-process "howm-view-external-viewer" nil + shell-file-name + shell-command-switch + (format viewer (howm-page-name page)))) +(defun howm-viewer-call:func0 (viewer page) + (howm-page-open page) + (funcall viewer)) +(defun howm-viewer-call:func (viewer page) + (funcall (car viewer) page)) + +(defvar howm-viewer-indicator-format "%%%%%% %s %%%%%%") +(defun howm-viewer-indicator-gen (fmt &rest args) + (format howm-viewer-indicator-format + (apply #'format (cons fmt args)))) +(defun howm-viewer-indicator:str (viewer page) + (howm-viewer-indicator-gen viewer (howm-page-name page))) +(defun howm-viewer-indicator:func0 (viewer page) + (howm-viewer-indicator-gen "%S %S" viewer page)) +(defun howm-viewer-indicator:func (viewer page) + (let ((func (car viewer)) + (previewer (cdr viewer))) + (if previewer + (funcall previewer page) + (howm-viewer-indicator-gen "(%S %S)" func page)))) + +(defadvice action-lock-find-file (around external-viewer (f u) activate) + (let ((viewer (howm-page-viewer f))) + (if viewer + (howm-viewer-call viewer (expand-file-name f)) + ad-do-it))) + +;; For backward compatibility. Don't use them any more. +(defalias 'howm-view-external-viewer #'howm-page-viewer) +(defalias 'howm-view-call-external-viewer #'howm-viewer-call) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; class Item + +;; Fix me: confusion between howm-item-page and howm-item-name + +;; * class Item: abstraction of hit position in file +;; * page +;; * place +;; * and conventional properties + +(defun howm-make-item (page &optional summary place offset home privilege) + (list page summary place offset home privilege)) +(defun howm-item-page (item) (nth 0 item)) ;; page can be nil. +(defun howm-item-summary (item) (howm-item-nth 1 item "")) +(defun howm-item-place (item) (howm-item-nth 2 item nil)) +(defun howm-item-offset (item) (howm-item-nth 3 item nil)) +(defun howm-item-home (item) (howm-item-nth 4 item nil)) +(defun howm-item-privilege (item) (howm-item-nth 5 item nil)) +(defun howm-item-nth (n item default) + (or (nth n item) default)) +(defun howm-item-set-page (item val) + (setf (nth 0 item) val)) +(defun howm-item-set-summary (item val) + (setf (nth 1 item) val)) +(defun howm-item-set-offset (item val) + (setf (nth 3 item) val)) +(defun howm-item-set-home (item val) + (setf (nth 4 item) val)) +(defun howm-item-set-privilege (item val) + (setf (nth 5 item) val)) + +(defun howm-item-name (item) + (format "%s" (howm-page-name (howm-item-page item)))) + +(defun howm-item-dup (item) (mapcar #'identity item)) + +;; For backward compatibility. Don't use them any more. +;; ;; item = (filename summary place offset home) +(defun howm-view-make-item (filename &rest r) + (apply #'howm-make-item (cons (howm-make-page:file filename) r))) +(defalias 'howm-view-item-filename #'howm-item-name) +(defalias 'howm-view-item-summary #'howm-item-summary) +(defalias 'howm-view-item-place #'howm-item-place) +(defalias 'howm-view-item-offset #'howm-item-offset) +(defalias 'howm-view-item-home #'howm-item-home) +(defalias 'howm-view-item-privilege #'howm-item-privilege) +(defalias 'howm-view-item-set-summary #'howm-item-set-summary) +(defalias 'howm-view-item-set-offset #'howm-item-set-offset) +(defalias 'howm-view-item-set-home #'howm-item-set-home) +(defalias 'howm-view-item-set-privilege #'howm-item-set-privilege) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; search path + +;; historical & awkward mechanism + +(howm-defvar-risky howm-search-path nil) +(defvar howm-search-other-dir nil) +(defvar *howm-independent-directories* nil) ;; for internal use + +(defun howm-independent-search-path () + (let ((c default-directory)) + (and c + (car (cl-member-if (lambda (dir) (howm-subdirectory-p dir c)) + *howm-independent-directories*))))) + +(defun howm-search-path (&optional ignore-independent-search-path) + (let ((d (howm-independent-search-path))) + (cond ((and d (not ignore-independent-search-path)) (list d)) + (howm-search-other-dir (howm-search-path-multi)) + (t (howm-search-path-single))))) +(defun howm-search-path-single () + (list howm-directory)) +(defun howm-search-path-multi () + (cons howm-directory howm-search-path)) + +(defun howm-search-path-folder (&optional ignore-independent-search-path) + (howm-make-folder:nest (howm-search-path ignore-independent-search-path))) + +(defun howm-toggle-search-other-dir (&optional arg) + "Change whether `howm-search-path' is searched or not. +With arg, search `howm-search-path' iff arg is positive." + (interactive "P") + (setq howm-search-other-dir + (if arg + (> (prefix-numeric-value arg) 0) + (not howm-search-other-dir))) + (message "howm search-path = %s" (howm-search-path))) + +(defun howm-open-directory-independently (dir) + (interactive "DDirectory: ") + (add-to-list '*howm-independent-directories* + (expand-file-name dir)) + (let ((default-directory dir)) + (howm-normalize-show "" (howm-folder-items dir t)) + (howm-keyword-add-items (howm-view-item-list)))) + +(defvar howm-keyword-buffer-name-format " *howm-keys:%s*") +(defun howm-keyword-buffer () + (let* ((dir (howm-independent-search-path)) + (buffer-name (format howm-keyword-buffer-name-format + (if dir (expand-file-name dir) "")))) + (if dir + (get-buffer-create buffer-name) + (howm-get-buffer-for-file (howm-keyword-file) buffer-name)))) + +;;; exclusion + +;; Fix me on inefficiency. +;; +;; [2005-02-18] I can't remember why I checked relative path in old versions. +;; [2005-04-24] Now I remember the reason. +;; Some people like ~/.howm/ rather than ~/howm/ as their howm-directory. +;; It must be included even if it matches to howm-excluded-file-regexp. +;; +;; Bug: (howm-exclude-p "~/howm/CVS") != (howm-exclude-p "~/howm/CVS/") +(defun howm-exclude-p (filename) + (not (cl-find-if-not + (lambda (dir) (howm-folder-match-under-p dir + howm-excluded-file-regexp + filename)) + (howm-search-path)))) + +;;; howm-backend.el ends here diff --git a/howm-common.el b/howm-common.el new file mode 100644 index 0000000..b842dda --- /dev/null +++ b/howm-common.el @@ -0,0 +1,634 @@ +;;; howm-common.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-common.el,v 1.90 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(require 'howm-vars) + +(defun howm-cl-remove-duplicates* (&rest args) + ":from-end version of `remove-duplicates'" + (apply #'cl-remove-duplicates `(,@args :from-end t))) + +(defun howm-sort (evaluator comparer obj-list) + (let* ((orig (mapcar (lambda (obj) (cons (funcall evaluator obj) obj)) + obj-list)) + (sorted (sort orig (lambda (x y) + (funcall comparer (car x) (car y)))))) + (mapcar #'cdr sorted))) + +(defun howm-subdirectory-p (dir target &optional strict) + "For the directory DIR, check whether TARGET is under it. +When TARGET and DIR are same, (not STRICT) is returned." + (and (stringp dir) + ;; avoid unnecessary password prompting + ;; (I'm not sure about the return value of file-remote-p.) + (eq (not (file-remote-p dir)) (not (file-remote-p target))) + (progn + (setq target (howm-normalize-file-name target)) + (setq dir (howm-normalize-file-name dir)) + (if (string= target dir) + (not strict) + (and (string-match (regexp-quote dir) target) + (= 0 (match-beginning 0))))))) + +(defun howm-normalize-file-name (filename) + (let* ((r (file-remote-p filename)) + (f (if r + (concat r filename) + (file-truename (expand-file-name filename))))) + ;; for meadow + (if (string-match "^[A-Z]:" f) + (let ((drive (substring f 0 1)) + (rest (substring f 1))) + (concat (downcase drive) rest)) + f))) + +(defvar howm-abbreviate-file-name t) +(defun howm-abbreviate-file-name (f) + (if (howm-abbreviate-file-name-p) + (abbreviate-file-name f) + f)) +;; for compatibility (incomplete) +(howm-dont-warn-free-variable howm-template-file-abbrev) +(howm-dont-warn-free-variable howm-view-header-abbrev) +(defun howm-abbreviate-file-name-p () + (cond ((boundp 'howm-template-file-abbrev) howm-template-file-abbrev) + ((boundp 'howm-view-header-abbrev) howm-view-header-abbrev) + (t howm-abbreviate-file-name))) +;; (defun howm-abbreviate-file-name-p () howm-abbreviate-file-name) + +(defun howm-expand-file-names (file-list) + (mapcar (lambda (f) (directory-file-name (expand-file-name f))) + file-list)) + +(defun howm-insert-file-contents (file) + (insert-file-contents file nil nil howm-view-contents-limit)) + +;;; for XEmacs fallback +;; (if (not (fboundp 'font-lock-fontify-block)) +;; (defalias 'font-lock-fontify-block 'font-lock-fontify-buffer)) +;;; If you use APEL, you can replace a below block with (require 'poe). +(if (not (fboundp 'line-beginning-position)) + (defalias 'line-beginning-position 'point-at-bol)) +(if (not (fboundp 'line-end-position)) + (defalias 'line-end-position 'point-at-eol)) +;;; Imported from APEL 10.6 +(if (not (fboundp 'match-string-no-properties)) + ;; Emacs 20.3 and later: (match-string-no-properties NUM &optional STRING) + (defun match-string-no-properties (num &optional string) + "Return string of text matched by last search, without text properties. +NUM specifies which parenthesized expression in the last regexp. + Value is nil if NUMth pair didn't match, or there were less than NUM pairs. +Zero means the entire text matched by the whole regexp or whole string. +STRING should be given if the last search was by `string-match' on STRING." + (if (match-beginning num) + (if string + (let ((result + (substring string (match-beginning num) (match-end num)))) + (set-text-properties 0 (length result) nil result) + result) + (buffer-substring-no-properties (match-beginning num) + (match-end num)))))) + +(defmacro howm-message-time (name &rest body) + (declare (indent 1)) + `(let ((howm-message-time-0 (current-time))) + (prog1 + (progn + ,@body) + (when howm-message-time + (message "%s (%s: %.2f sec)" + (or (current-message) "") + ,name + (howm-time-difference-second (current-time) + howm-message-time-0)))))) +;; (defun howm-message-time-from (ti0) +;; (when howm-message-time +;; (let ((ti1 (current-time))) +;; (message "took %.2f sec." +;; (howm-time-difference-second ti1 ti0))))) +(defun howm-time-difference-second (ti1 ti0) + (let ((h (- (car ti1) (car ti0))) + (l (- (cadr ti1) (cadr ti0))) + (m (- (cl-caddr ti1) (cl-caddr ti0))) + ) + (+ (* h 65536) l + (* m 1e-6) + ))) + +(defun howm-xor (a b) + (if a (not b) b)) +(defun howm-buffer-empty-p (&optional buf) + ;; emacs20 doesn't have (buffer-size buf) + (with-current-buffer (or buf (current-buffer)) + (= (buffer-size) 0))) +(defun howm-point-beginning-of-line () + (save-excursion + (beginning-of-line) + (point))) +(defun howm-point-end-of-line () + (save-excursion + (end-of-line) + (point))) + +(defun howm-inhibit-warning-in-compilation (&rest dummy) + (error "This is dummy function to inhibit warning in compilation.")) + +;; (defvar howm-reminder-quick-check-key ";") + +(defun howm-get-value (z) + (if (functionp z) + (funcall z) + z)) + +;; (howm-map-with-index #'cons '(a b c)) ==> ((a . 0) (b . 1) (c . 2)) +(defun howm-map-with-index (f seq) + "Map with index. For example, +(howm-map-with-index #'cons '(a b c)) returns ((a . 0) (b . 1) (c . 2))." + (let ((howm-map-with-index-count -1)) + (mapcar (lambda (x) + (setq howm-map-with-index-count (1+ howm-map-with-index-count)) + (apply f (list x howm-map-with-index-count))) + seq))) + +(defun howm-capital-p (str) + "Return nil iff STR has no capital letter." + (let ((case-fold-search nil)) + (string-match "[A-Z]" str))) + +(defun howm-single-element-p (a) + (and a (null (cdr a)))) + +(defun howm-read-string (prompt &optional immediate-chars continued-chars + pass-through pass-ret-through) + "Read a string from minibuffer with some extensions to `read-string'. +(1) When the first input char is in IMMEDIATE-CHARS string, +this function returns the char as one letter string +without waiting for rest input and RET key. +(2) Otherwise, when the char is in CONTINUED-CHARS, +this function is equivalent to read-string. +(3) When the char is not in either IMMEDIATE-CHARS or CONTINUED-CHARS, +the behavior depends on PASS-THROUGH. +If PASS-THROUGH is nil, error is raised. +If PASS-THROUGH is non-nil, the input event is unread and nil is returned. +(4) Note that RET key at the first char is the special case. +If PASS-RET-THROUGH is nil, empty string is returned. +If PASS-RET-THROUGH is non-nil, RET is unread and nil is returned. +" + (if (null immediate-chars) + (read-string prompt) + (save-window-excursion + (message "%s" prompt) + (select-window (minibuffer-window)) + (let* ((ev (howm-read-event)) + (ch (howm-event-to-character ev))) + (cond ((howm-characterp ch) + (howm-read-string-sub ev ch + prompt immediate-chars continued-chars + pass-through pass-ret-through)) + (t + (howm-read-string-fail ev pass-through pass-ret-through))))))) + +(defun howm-read-string-sub (event char + prompt immediate-chars continued-chars + pass-through pass-ret-through) + (let* ((ichars (string-to-list (or immediate-chars ""))) + (cchars (string-to-list (or continued-chars ""))) + (first-char char) + (first-str (char-to-string first-char))) + (cond ((member first-char ichars) + first-str) + ((member first-char cchars) + (read-string prompt (cons first-str (1+ (length first-str))))) + (t + (howm-read-string-fail event pass-through pass-ret-through))))) + +(defun howm-read-string-fail (event pass-through pass-ret-through) + (cond ((and (howm-ret-key-event-p event) (not pass-ret-through)) + "") + (pass-through + (progn + (howm-unread-event event) + nil)) + (t + (error "Invalid input.")))) + +(defun howm-unread-event (event) + (setq unread-command-events + (cons event unread-command-events))) + +(defun howm-first-n (seq n) + "Return the subsequence of SEQ from start to N-th item. +(howm-first-n '(a b c d e) 3) ==> (a b c) +(howm-first-n '(a b c d e) 10) ==> (a b c d e) +" + ;; GNU emacs: (subseq '(a b c d e) 0 7) ==> (a b c d e nil nil) + ;; xemacs: (subseq '(a b c d e) 0 7) ==> Args out of range + (if (<= (length seq) n) + seq + (cl-subseq seq 0 n))) + +;; check +(let ((seq '(a b c d e)) + (qa '((0 . nil) + (4 . (a b c d)) + (5 . (a b c d e)) + (7 . (a b c d e))))) + (mapc (lambda (z) + (let ((ans (howm-first-n seq (car z)))) + (when (not (equal ans (cdr z))) + (error "howm-first-n is wrong: %s for %s" ans z)))) + qa)) + +(defun howm-replace-region (beg end val) + (delete-region beg end) + ;; `format' in xemacs doesn't keep text properties. + (insert (if (stringp val) + val + (format "%s" val)))) + +(defmacro howm-edit-read-only-buffer (&rest body) + (declare (indent 0)) + `(progn + (buffer-disable-undo) + (setq buffer-read-only nil) + ,@body + (set-buffer-modified-p nil) + (setq buffer-read-only t))) + +(defmacro howm-rewrite-read-only-buffer (&rest body) + (declare (indent 0)) + `(howm-edit-read-only-buffer + (erase-buffer) + ,@body)) + +;; (put 'howm-rewrite-read-only-buffer 'lisp-indent-hook 0) +;; (defmacro howm-rewrite-read-only-buffer (&rest body) +;; `(progn +;; (setq buffer-read-only nil) +;; (erase-buffer) +;; ,@body +;; (set-buffer-modified-p nil) +;; (setq buffer-read-only t))) + +(defun howm-get-buffer-for-file (file &optional buffer-name) + "Get buffer for FILE, and rename buffer if BUFFER-NAME is given." + ;; This may cause "File XXX no longer exists!" message if the file + ;; is deleted and the corresponding buffer still exists. + (let ((buf (find-file-noselect file))) + (when buffer-name + (with-current-buffer buf + (rename-buffer buffer-name))) + buf)) + +(defun howm-basic-save-buffer () + "Silent version of `basic-save-buffer' without \"Wrote ...\" message." + (let ((original-write-region (symbol-function 'write-region))) + ;; make silent `write-region', which doesn't say "Wrote ...". + ;; I borrowed the idea from Okuyama's auto-save-buffers. thx. + ;; http://homepage3.nifty.com/oatu/emacs/misc.html + (cl-flet ((write-region (start end filename + &optional append visit lockname must) + (funcall original-write-region + start end filename append + 'dont-say-wrote-foobar + lockname must))) + (basic-save-buffer))) + ;; As a side effect, basic-save-buffer does not update buffer-modified-p. + (set-visited-file-modtime) + (set-buffer-modified-p nil)) + +(defvar howm-log-buffer-name-format " *howm-log:%s*") +(defun howm-write-log (message fmt file &optional limit remove-fmt) + "Write MESSAGE with format FMT to the top of FILE. +FORMAT must have two %s; the formar is time and the latter is message. +When LIMIT is non-nil, only that number of recent messages are recorded. +When REMOVE-FMT is non-nil, it is used to generate regular expression +to remove matched lines. REMOVE-FMT must have one %s." + (save-excursion + (let ((buffer-name (format howm-log-buffer-name-format + (file-name-nondirectory file)))) + (with-current-buffer (howm-get-buffer-for-file file buffer-name) + (goto-char (point-min)) + (when remove-fmt + (save-excursion + (flush-lines (format remove-fmt (regexp-quote message))))) + (insert (format fmt + (format-time-string howm-dtime-format (current-time)) + message) + "\n") + (when limit + ;; Since I don't understand `selective-display' in goto-line, + ;; I avoid it. + (goto-char (point-min)) + (when (= (forward-line limit) 0) ;; buffer lines > LIMIT + (delete-region (point) (point-max)))) + (howm-basic-save-buffer))))) + +(defun howm-get-symbol (soft &rest args) + "Return the canonical symbol for a specified name. +If SOFT is non-nil, return nil when the corresponding symbol does not exist. +Name of returned symbol is concatenation of ARGS. +Both strings and symbols are acceptable in ARGS." + (funcall (if soft #'intern-soft #'intern) + (mapconcat (lambda (s) + (cond ((sequencep s) s) + ((symbolp s) (symbol-name s)) + (t (error "Not supported: %S" s)))) + args + ""))) + +;; snap://Info-mode/elisp#Killing Buffers +(defun howm-buffer-killed-p (buffer) + "Return t if BUFFER is killed." + (not (buffer-name buffer))) + +(defun howm-classify (classifier lis &optional reverse) + "Classify elements in given list. +CLASSIFIER is criterion of classification for list LIS. +If REVERSE is non-nil, order of elements are reversed (faster). +For example, + (howm-classify (lambda (s) (substring s 0 1)) '(\"aaa\" \"abc\" \"xyz\")) +returns ((\"a\" \"aaa\" \"abc\") (\"x\" \"xyz\"))." + (let ((ans nil)) + (mapc (lambda (x) + (let* ((label (funcall classifier x)) + (pair (assoc label ans))) + (if (null pair) + (setq ans (cons (cons label (list x)) ans)) + (setcdr pair (cons x (cdr pair)))))) + lis) + (if reverse + ans + (reverse (mapcar (lambda (pair) (cons (car pair) (reverse (cdr pair)))) + ans))))) +;; (howm-classify (lambda (s) (substring s 0 1)) '("aaa" "abc" "xyz")) + +(defun howm-message-nolog (str &rest args) + (let ((message-log-max nil)) + (apply #'message `(,str ,@args)))) + +(defun howm-decode-time (&optional specified-time) + "Decode SPECIFIED-TIME and remove DOW, DST, ZONE. +When we do something like (encode-time (decode-time)), we use this function +instead of the original `decode-time', so that we can force +current timezone rule uniformly to avoid inconsistency." + (butlast (decode-time specified-time) 3)) + +(defmacro howm-with-need (&rest body) + "Execute BODY where (need xxx) exits from this form if xxx is nil." + (declare (indent 0)) + (let ((g (cl-gensym))) + `(catch ',g + (cl-labels ((need (x) (or x (throw ',g nil)))) + ,@body)))) + +(defun howm-goto-line (n) + ;; see the document of `goto-line' + (goto-char (point-min)) (forward-line (1- n))) + +;; view-in-background + +(defvar *howm-view-in-background* nil + "for internal use. +Don't set this variable directly. +Use `howm-view-in-background' and `howm-view-in-background-p' instead.") + +(defmacro howm-view-in-background (&rest body) + "Obsolete. Do not use this any more." + (declare (indent 0)) + `(let ((*howm-view-in-background* t)) + ,@body)) + +(defun howm-view-in-background-p () + *howm-view-in-background*) + +;;; history of search + +(defvar howm-history-format "> %s | %s") +(defvar howm-history-remove-format "| %s$") + +(defun howm-write-history (message) + (when (and howm-history-file + (or (null howm-history-limit) (> howm-history-limit 0))) + (howm-write-log message howm-history-format howm-history-file + howm-history-limit + (and howm-history-unique howm-history-remove-format)))) + +;;; call process + +(defvar howm-call-process-last-command nil + "List of arguments for last `howm-call-process'. +This variable exists only for debug. You can reproduce the last call +with the below code. + (apply #'howm-call-process howm-call-process-last-command)") + +(defmacro howm-with-coding-system (coding-system &rest body) + "With CODING-SYSTEM, execute BODY. +examples: + (howm-with-coding-system 'euc-jp-unix ...) ;; for both read and write + (howm-with-coding-system '(utf-8-unix . sjis-unix) ...) ;; (read . write) + (howm-with-coding-system nil ...) ;; howm-process-coding-system is used." + (declare (indent 1)) + (let ((g (cl-gensym)) + (cs (or coding-system 'howm-process-coding-system))) + `(let* ((,g ,cs) + (coding-system-for-read (or (car-safe ,g) ,g)) + (coding-system-for-write (or (cdr-safe ,g) ,g))) + ,@body))) + +(defun howm-call-process (command args + &optional expected-return-value stdin-string) + (setq howm-call-process-last-command (list command args + expected-return-value + stdin-string)) + (with-temp-buffer + (howm-with-coding-system nil + (let ((r (howm-call-process-here command args stdin-string))) + (when (and expected-return-value + (not (= expected-return-value r))) + (error "Process returns %s instead of expected %s." + r expected-return-value)) + (howm-buffer-lines))))) + +(defun howm-call-process-here (command args &optional stdin-string) + (let* ((beg (point)) + (end (progn + (insert (or stdin-string "")) + (point))) + (a `(,beg ,end ,command t (t nil) nil ,@args))) + (howm-with-coding-system nil + (apply #'call-process-region a)))) + +(defun howm-buffer-lines (&optional buf) + (save-excursion + (when buf + (set-buffer buf)) + (split-string (buffer-substring (point-min) (point-max)) "\n"))) + +(defun howm-call-process* (command common-args rest-args &rest options) + ;; (howm-call-process* "grep" '("pattern") '("001" ... "999")) + ;; is expanded to concatenation of + ;; (howm-call-process "grep" '("pattern" "001" ... "099")) + ;; (howm-call-process "grep" '("pattern" "101" ... "199")) + ;; ..., depending on howm-command-length-limit. + (cl-labels ((div (a limit measure) + ;; (div '(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8) 20 #'identity) + ;; ==> ((3 1 4 1 5) (9 2 6) (5 3 5) (8 9) (7 9 3) (2 3 8)) + ;; [create new group when sum >= 20] + (let ((sum limit) ;; measure >= 0 is assumed. + (ans nil)) + (mapc (lambda (x) + (let* ((w (funcall measure x)) + (new-sum (+ sum w))) + (if (< new-sum limit) + (setq sum new-sum + ans (cons (cons x (car ans)) (cdr ans))) + (setq sum w + ans (cons (list x) ans))))) + a) + (reverse (mapcar #'reverse ans))))) + ;; XEmacs 21.4 lacks "string-bytes". + (let* ((len (symbol-function + (cl-find-if #'fboundp '(string-bytes length)))) + (limit (apply #'- howm-command-length-limit + (mapcar len (cons command common-args)))) + (as (div rest-args limit len))) + (cl-mapcan (lambda (args) + (apply #'howm-call-process + command (append common-args args) options)) + as)))) + +;;; schedule-interval & reminder-setting (clean me) + +(defvar howm-reminder-schedule-interval nil + "For internal use. Do not setq this variable. +Use `howm-with-schedule-interval' instead.") +(defun howm-reminder-schedule-interval-from () + (car howm-reminder-schedule-interval)) +(defun howm-reminder-schedule-interval-to () + (cdr howm-reminder-schedule-interval)) +(defmacro howm-with-schedule-interval (interval &rest body) + "Set the interval of visible schedule items in reminder list on menu. +INTERVAL is a form like (-1 2), which means 'from yesterday to the day +after tomorrow'. BODY is evaluated under this setting; +`howm-reminder-schedule-interval-from' returns -1 and +`howm-reminder-schedule-interval-to' returns 2." + (declare (indent 1)) + `(let ((howm-reminder-schedule-interval ,(cons 'cons interval))) + ,@body)) + +(defmacro howm-with-reminder-setting (&rest body) + (declare (indent 0)) + `(howm-with-schedule-interval + (howm-menu-schedule-days-before howm-menu-schedule-days) + (let ((howm-todo-menu-types howm-reminder-menu-types)) ;; dirty! + ,@body))) + +;;; xemacs + +;; http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=switch%20config +;; http://pc2.2ch.net/test/read.cgi/software/1056601345/510 +(eval-and-compile + (defun howm-xemacsp () + (featurep 'xemacs))) + +(defmacro howm-defun-xemacs (func args emacs-f xemacs-f) + (declare (indent 'defun)) + `(defun ,func ,args + ,(if (howm-xemacsp) + xemacs-f + emacs-f))) + +(howm-defun-xemacs howm-deactivate-mark () + (deactivate-mark) + (zmacs-deactivate-region)) + +(howm-defun-xemacs howm-read-event () + (read-event) + ;; We have to skip # when howm-action-lock-date is + ;; called (RET is hit on date format like [2005-10-15]) in menu buffer. + ;; + ;; Though (make-event 'key-press `(key ,(read-char))) looks to be a simpler + ;; solution, it causes error when RET RET is hit in the above situation. + ;; I don't have enough time to examine it now. + (let ((ev (next-event))) + (if (key-press-event-p ev) + ev + (howm-read-event)))) + +;; Though this function is used only once, I dare to define it +;; with howm-defun-xemacs macro in order to avoid warning +;; in byte-compilation on GNU emacs. I don't have enough energy now. +(howm-defun-xemacs howm-ret-key-event () + (event-convert-list '(return)) + (make-event 'key-press '(key return))) + +(defvar howm-ret-key-event (howm-ret-key-event)) + +(defun howm-ret-key-event-p (event) + (or (equal event 13) (equal event howm-ret-key-event))) + +(howm-defun-xemacs howm-event-to-character (event) + (and (howm-characterp event) event) + (event-to-character event)) + +(howm-defun-xemacs howm-characterp (x) + (numberp x) + (characterp x)) + +(defvar howm-infinity + (if (howm-xemacsp) + 1.0e+100 ;; xemacs info on my machine is broken :( + 1.0e+INF)) + +;;; cl + +;; (defmacro howm-define-maybe (fname fargs &rest fbody) +;; (when (not (fboundp fname)) +;; `(defun ,fname ,fargs +;; ,@fbody))) + +;; (howm-define-maybe caddr (x) +;; (car (cdr (cdr x)))) + +;; (howm-define-maybe second (x) +;; (cadr x)) + +;; (howm-define-maybe third (x) +;; (caddr x)) + +;;; regexp + +;; (defun howm-regexp-opt (strings &optional paren) +;; "Imitation of `regexp-opt' without optimization. +;; This is used for large set of strings when `regexp-opt' causes an error +;; \"Variable binding depth exceeds max-specpdl-size\"." +;; (let* ((open (if paren "\\(" "")) +;; (close (if paren "\\)" "")) +;; (re (concat open (mapconcat 'regexp-quote strings "\\|") close))) +;; (if (eq paren 'words) +;; (concat "\\<" re "\\>") +;; re))) + +;;; + +(provide 'howm-common) + +;;; howm-common.el ends here diff --git a/howm-date.el b/howm-date.el new file mode 100644 index 0000000..f7fb5f3 --- /dev/null +++ b/howm-date.el @@ -0,0 +1,272 @@ +;;; howm-date.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-date.el,v 1.35 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(provide 'howm-date) +(require 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; insert & action-lock + +(defvar howm-insert-date-pass-through nil) + +(defun howm-insert-date () + (interactive) + (let ((date (format-time-string howm-date-format))) + (insert (format howm-insert-date-format date)) + (howm-action-lock-date date t howm-insert-date-future))) + +(defun howm-insert-dtime () + (interactive) + (insert (format-time-string howm-dtime-format))) + +;; Sorry for ugly behavior around "new" to keep backward compatibility. +(defun howm-action-lock-date (date &optional new future-p) + (let* ((pass-through (and new howm-insert-date-pass-through)) + (prompt (howm-action-lock-date-prompt date new pass-through)) + (immediate-chars (if pass-through "" ".")) + (c (howm-read-string prompt immediate-chars "+-~0123456789" + pass-through pass-through))) + (cond + ((null c) nil) ;; pass through + ((string= c "") + (if new + t + (howm-action-lock-date-search date))) + ((string-match "^[-+][0-9]+$" c) + (howm-action-lock-date-shift (string-to-number c) date)) + ((string-match "^[0-9]+$" c) + (howm-action-lock-date-set c date future-p)) + ((string-match "^~\\([0-9]+\\)$" c) + (howm-action-lock-date-repeat (match-string-no-properties 1 c) date)) + ((string-match "^[.]$" c) + (howm-datestr-replace (howm-time-to-datestr))) + ((and (string-match "^[-+~]$" c) pass-through) + (insert c)) + (t (error (format "Can't understand %s." c)))))) + +(defun howm-action-lock-date-prompt (date new pass-through) + (let* ((dow (howm-datestr-day-of-week date)) + (common-help "+num(shift), yymmdd(set), ~yymmdd(repeat)") + (today-help ", .(today)") + (help (cond ((and new pass-through) + common-help) + ((and new (not pass-through)) + (concat "RET(ok), " common-help today-help)) + ((not new) + (concat "RET(list), " common-help today-help)) + (t + (error "Can't happen."))))) + (format "[%s] %s: " dow help))) + +(defvar howm-date-current nil) +(make-variable-buffer-local 'howm-date-current) + +(defun howm-action-lock-date-search (date) + (howm-set-command 'howm-action-lock-date-search) + (prog1 + (howm-search date t) + (howm-action-lock-forward-escape) + (setq howm-date-current date))) + +(defun howm-search-today () + (interactive) + (howm-search-past 0)) + +(defun howm-search-past (&optional days-before) + (interactive "P") + (let* ((n (or days-before 0)) + (today (format-time-string howm-date-format)) + (target (howm-datestr-shift today 0 0 (- n)))) + (howm-action-lock-date-search target))) + +(defun howm-action-lock-date-shift (n date) + (howm-datestr-replace (howm-datestr-shift date 0 0 n))) + +(defun howm-action-lock-date-set (val date &optional future-p) + (howm-datestr-replace (howm-datestr-expand val date future-p))) + +(defvar howm-action-lock-date-repeat-max 200) +(defun howm-action-lock-date-repeat (until date) + (let ((every (read-from-minibuffer "Every? [RET(all), num(days), w(week), m(month), y(year)] "))) + (let ((max-d (howm-datestr-expand until date t)) + (offset-y (if (string= every "y") 1 0)) + (offset-m (if (string= every "m") 1 0)) + (offset-d (or (cdr (assoc every '(("y" . 0) ("m" . 0) ("w" . 7)))) + (max (string-to-number every) 1)))) + (let ((d date) + (i 0) + (check t)) + (catch 'too-many + (while (progn + (setq d (howm-datestr-shift d offset-y offset-m offset-d)) + (howm-datestr<= d max-d)) + (when (and check (>= i howm-action-lock-date-repeat-max)) + (if (y-or-n-p (format "More than %d lines. Continue? " i)) + (setq check nil) + (throw 'too-many nil))) + (howm-duplicate-line) + (howm-datestr-replace d) + (setq i (+ i 1)))))))) + +(defun howm-make-datestr (y m d) + (let ((ti (encode-time 0 0 0 d m y))) + (format-time-string howm-date-format ti))) + +(defun howm-datestr-parse (date) + (string-match howm-date-regexp date) + (mapcar (lambda (pos) + (string-to-number (match-string-no-properties pos date))) + (list howm-date-regexp-year-pos + howm-date-regexp-month-pos + howm-date-regexp-day-pos))) + +(defun howm-datestr-to-time (date) + (let* ((ymd (howm-datestr-parse date)) + (y (car ymd)) + (m (cadr ymd)) + (d (cl-caddr ymd))) + (encode-time 0 0 0 d m y))) + +(defun howm-time-to-datestr (&optional time) + (let ((x (decode-time time))) + (howm-make-datestr (nth 5 x) (nth 4 x) (nth 3 x)))) + +(defun howm-datestr-day-of-week (date) + (format-time-string "%a" (howm-datestr-to-time date))) + +(defun howm-datestr-expand (date base &optional future-p) + (if future-p + (howm-datestr-expand-future date base) + (howm-datestr-expand-general date base future-p))) + +(defun howm-datestr-expand-future (date base) + (let ((raw (howm-datestr-expand-general date base nil)) + (future (howm-datestr-expand-general date base t))) + (when (not (string= raw future)) + (message "Future date")) + future)) + +(defun howm-datestr-expand-general (date base &optional future-p) + (let* ((base-ymd (howm-datestr-parse base)) + (nval (format "%8s" date)) + (given-ymd-str (mapcar (lambda (r) + (substring nval (car r) (cadr r))) + '((0 4) (4 6) (6 8)))) + (ys (car given-ymd-str)) + (ms (cadr given-ymd-str)) + (ds (cl-caddr given-ymd-str))) + (when (string-match "^ +0+$" ys) + (setq ys "2000")) + (let* ((given-ymd (mapcar #'string-to-number (list ys ms ds))) + (carry nil) ;; to force future date + (dmy (cl-mapcar (lambda (ox nx) + (when future-p + (when (and carry (= nx 0)) + (setq ox (+ ox 1))) + (setq carry + (cond ((= nx 0) nil) + ((= nx ox) carry) + ((< nx ox) t) + (t nil)))) + (if (= nx 0) ox nx)) + (reverse base-ymd) (reverse given-ymd))) + (d (car dmy)) + (m (cadr dmy)) + (y (cl-caddr dmy))) + (howm-make-datestr (if (<= y 99) (+ y 2000) y) m d)))) + +(defun howm-datestr-shift (date y m d) + (let* ((ymd (howm-datestr-parse date)) + (oy (car ymd)) + (om (cadr ymd)) + (od (cl-caddr ymd))) + (howm-make-datestr (+ oy y) (+ om m) (+ od d)))) + +(defun howm-datestr<= (date1 date2) + (or (string< date1 date2) + (string= date1 date2))) + +(defun howm-datestr-replace (date) + (let ((p (point))) + (while (not (looking-at howm-date-regexp)) + (backward-char)) + (replace-match date t t) + (goto-char p))) + +(defun howm-duplicate-line () + (let ((c (current-column)) + (s (buffer-substring (line-beginning-position) (line-end-position)))) + (end-of-line) + (insert "\n" s) + (move-to-column c))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; search for next/previous date + +(defvar howm-date-forward-ymd-msg "Searching %s...") +(defvar howm-date-forward-ymd-limit 35) +(defun howm-date-forward-ymd (y m d) + (when (not howm-date-current) + (error "Not in date search.")) + (let* ((new-date (howm-datestr-shift howm-date-current y m d)) + (b (current-buffer)) + (step (if (> (+ y m d) 0) +1 -1)) + (c 0)) + (when (catch :found + (while (progn + (when (howm-action-lock-date-search new-date) + (throw :found t)) + (< c howm-date-forward-ymd-limit)) + (setq new-date (howm-datestr-shift new-date 0 0 step)) + (setq c (1+ c)) + (when howm-date-forward-ymd-msg + (format howm-date-forward-ymd-msg new-date))) + (error "Not found within %d days." howm-date-forward-ymd-limit)) + (when (not (eq (current-buffer) b)) + (with-current-buffer b + (howm-view-kill-buffer))) + (howm-view-summary-check t)))) + +(defmacro howm-date-defun-f/b (func y m d) + `(defun ,func (&optional k) + (interactive "P") + (let ((n (or k 1))) + (howm-date-forward-ymd ,y ,m ,d)))) + +(howm-date-defun-f/b howm-date-forward 0 0 n) +(howm-date-defun-f/b howm-date-forward-month 0 n 0) +(howm-date-defun-f/b howm-date-forward-year n 0 0) +(howm-date-defun-f/b howm-date-backward 0 0 (- n)) +(howm-date-defun-f/b howm-date-backward-month 0 (- n) 0) +(howm-date-defun-f/b howm-date-backward-year (- n) 0 0) + +(let ((m howm-view-summary-mode-map)) + (define-key m "+" 'howm-date-forward) + (define-key m "-" 'howm-date-backward) + (define-key m ")" 'howm-date-forward) + (define-key m "(" 'howm-date-backward) + (define-key m "}" 'howm-date-forward-month) + (define-key m "{" 'howm-date-backward-month) + (define-key m "]" 'howm-date-forward-year) + (define-key m "[" 'howm-date-backward-year) + ) + +;;; howm-date.el ends here diff --git a/howm-lang-en.el b/howm-lang-en.el new file mode 100644 index 0000000..1fbc87a --- /dev/null +++ b/howm-lang-en.el @@ -0,0 +1,62 @@ +;;; howm-lang-en.el --- Wiki-like note-taking tool +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-lang-en.el,v 1.11 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(require 'howm-common) + +(defvar howm-day-of-week-en '("Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat")) + +(defvar howm-menu-command-table-en + `( + ("[Remember]" howm-remember previous) + ("[New]" (lambda () (howm-create ,howm-menu-action-arg))) + ("[Add]" (lambda () (howm-create-here ,howm-menu-action-arg))) + ("[Dup]" howm-dup) + ("[Update]" howm-initialize-buffer previous) + ("[Regexp]" howm-list-grep) + ("[String]" howm-list-grep-fixed) + ;; ("[roma]" howm-list-migemo) + ("[Today]" howm-find-today) + ("[Yesterday]" howm-find-yesterday) + ("[All]" howm-list-all) + ("[Recent]" howm-list-recent) + ("[Around]" howm-list-around) + ("[Schedule]" howm-list-schedule) + ("[Occur]" (lambda () (call-interactively 'howm-occur)) previous) + ("[Buffers]" (lambda () (howm-list-buffers ,howm-menu-action-arg))) + ("[Marks]" howm-list-mark-ring previous) + ("[History]" howm-history) + ("[]" howm-insert-keyword previous) + ("[Date>]" howm-insert-date previous) + ("[DTime>]" howm-insert-dtime previous) + ("[Todo]" howm-list-todo) + ("[Killall]" howm-kill-all) + ("[Force Killall]" (lambda () (interactive) (howm-kill-all t))) + ("[Edit Menu]" howm-menu-edit current) + ("[Update Menu]" howm-menu-refresh current) + ("[Preference]" (lambda () (customize-group 'howm))) + ("[Random Walk]" howm-random-walk previous) + )) + +(provide 'howm-lang-en) + +;;; howm-lang-en.el ends here diff --git a/howm-lang-ja.el b/howm-lang-ja.el new file mode 100644 index 0000000..63f53c9 --- /dev/null +++ b/howm-lang-ja.el @@ -0,0 +1,63 @@ +;;; howm-lang-ja.el --- Wiki-like note-taking tool +;;; -*- Coding: iso-2022-7bit -*- +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-lang-ja.el,v 1.11 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(require 'howm-common) + +(defvar howm-day-of-week-ja '("$BF|(B" "$B7n(B" "$B2P(B" "$B?e(B" "$BLZ(B" "$B6b(B" "$BEZ(B")) + +(defvar howm-menu-command-table-ja + `( + ("[$BB.5-(B]" howm-remember previous) + ("[$B?75,(B]" (lambda () (howm-create ,howm-menu-action-arg))) + ("[$BDI2C(B]" (lambda () (howm-create-here ,howm-menu-action-arg))) + ("[$BJ#@=(B]" howm-dup) + ("[$B99?7(B]" howm-initialize-buffer previous) + ("[$B@55,(B]" howm-list-grep) + ("[$B8GDj(B]" howm-list-grep-fixed) + ("[roma]" howm-list-migemo) + ("[$B:#F|(B]" howm-find-today) + ("[$B:rF|(B]" howm-find-yesterday) + ("[$B0lMw(B]" howm-list-all) + ("[$B:G6a(B]" howm-list-recent) + ("[$BA08e(B]" howm-list-around) + ("[$BM=Dj(B]" howm-list-schedule) + ("[$B%PFb(B]" (lambda () (call-interactively 'howm-occur)) previous) + ("[$BA4%P(B]" (lambda () (howm-list-buffers ,howm-menu-action-arg))) + ("[mark]" howm-list-mark-ring previous) + ("[$BMzNr(B]" howm-history) + ("[$BBj",(B]" howm-keyword-to-kill-ring) + ("[$BL>",(B]" (lambda () (howm-keyword-to-kill-ring t))) + ("[$B80"-(B]" howm-insert-keyword previous) + ("[$BF|"-(B]" howm-insert-date previous) + ("[$B;~"-(B]" howm-insert-dtime previous) + ("[Todo]" howm-list-todo) + ("[$BA4>C(B]" howm-kill-all) + ("[$B6/@)A4>C(B]" (lambda () (interactive) (howm-kill-all t))) + ("[menu $BJT=8(B]" howm-menu-edit current) + ("[menu $B99?7(B]" howm-menu-refresh current) + ("[$B@_Dj(B]" (lambda () (customize-group 'howm))) + ("[$B?lJb(B]" howm-random-walk previous) + )) + +(provide 'howm-lang-ja) + +;;; howm-lang-ja.el ends here diff --git a/howm-menu-en.el b/howm-menu-en.el new file mode 100644 index 0000000..ff4bd69 --- /dev/null +++ b/howm-menu-en.el @@ -0,0 +1,106 @@ +;;; automatically generated from en/0000-00-00-000000.txt +;;; by howm-mkmenu.el. + +(require 'howm-vars) + +(howm-defconst-risky howm-menu-en "= <<< %menu% + %\"e\"[Remember] %\"c\"[New] %\"D\"[Dup] Search(%\"s\"[String] %\"g\"[Regexp] %\"o\"[Occur]) + %\"a\"[All] %\"l\"[Recent] %\"A\"[Around] %\"y\"[Schedule] %\"t\"[Todo] %\"b\"[Buffers] %\"x\"[Marks] + %\"K\"[] %\"i\"[Key>] %\"r\"[Update] %\"w\"[Random Walk] [Killall] + %\".\"[Today] %\":\"[Yesterday] %\"h\"[History] %\"R\"[Update Menu] [Edit Menu] [Preference] +------------------------------------- +[Schedule, Todo] -- @schedule, !deadline (until %sdays days from now) +!deadline, +todo, -reminder, ~defer (top %tnum entries) +%reminder +------------------------------------- +Recent +%recent +------------------------------------- +Random -- If you do not like this, [Edit Menu] to erase it. +%random +------------------------------------- + +Format of schedule and todo (Please replace {} with []): +{2002-10-21}@1 schedule -- (shown in schedule part. @3 = \"3 days schedule to 10-23\") +{2002-10-21}+7 todo -- float up slowly from the date in 7 days +{2002-10-21}!7 deadline -- float up fast from 7 days before the date +{2002-10-21}-1 reminder -- float at the date and sink slowly one unit per 1 day +{2002-10-21}~30 defer -- float at the date and repeat sinking and floating with 30 days period +{2002-10-21}. done -- sink forever +(Numbers after marks are default values.) + +How to remember: +* Schedule at(@) the date +* Reminder sinks down(-). +* Todo floats up(+). +* Deadline needs attention! +* Defer waves(~) up and down. +* Done is the end(.). + +------------------------------------- + +You can edit this menu itself. +>>> %Editing Menu% + + += <<< %Editing Menu% +[Edit Menu] Hit RET on the left button to edit this menu. +[Update Menu] Hit RET on the left button to update this menu. +-------------------------------------------------------- + +*** Format of the menu file *** +(Please hit RET on [Edit Menu] and read the source file.) + +== Basic format + +As you see... + +* [xxx] is button. +* %REMINDER (in small letters) is schedule and todo list. +* %RECENT (in small letters) is list of recent entries. +* %RANDOM (in small letters) is list of random entries. + +You can arrange their places as you like. +Writing favorite files or goto links may be also convenient. +(ex) file:///etc/services >>> wiki + +== Shortcut + +%\"foo\"[All] +This is displayed as foo[All], and the key \"f\" executes [All]. +Exactly speaking, it executes the following sequence: +(1) move to closing \", (2) move to next underline, and (3) hit it. + +%\"bar%\" +If you put % at the tail like this, the key \"b\" means \"move cursor here\". + +== For lispers + +Display: +%here%howm-congrats-count ;; embed value of variable howm-congrats-count +%here%(howm-menu-search \"search\") +;; embed result of (...), that is, search \"search\" and embed matched lines +Functions must be registered for safety. +(setq howm-menu-allow (append '(foo bar) howm-menu-allow)) ;; allow foo, bar + +Action: +%eval%(message (buffer-name)) ;; evaluate S expr +%call%find-file ;; call function interactively +Both are evaluated in the previous buffer before raising menu. + +== Hiding + +'%' + '|' toggles invisibility +like this: visible%|invisible%|appear%|disappear - until the end of line +(Newline is removed when the end of line is invisible.) + +== Multiple menus + +Links to %xxx% open \"<< < %xxx%\" with menu-mode: >>> %menu% +When you add new menu, [[%menu%]] may be more convenient because corresponding +entry is generated automatically. + +%eval%(howm-menu-open \"00000000-000000.txt\") -- open file with menu-mode +") + +(provide 'howm-menu-en) diff --git a/howm-menu-ja.el b/howm-menu-ja.el new file mode 100644 index 0000000..74aae32 --- /dev/null +++ b/howm-menu-ja.el @@ -0,0 +1,166 @@ +;;; -*- Coding: iso-2022-7bit -*- +;;; automatically generated from ja/0000-00-00-000000.txt +;;; by howm-mkmenu.el. + +(require 'howm-vars) + +(howm-defconst-risky howm-menu-ja "= <<< %menu% + %\"e\"[$BB.5-(B] %\"c\"[$B?75,(B] %\"D\"[$BJ#@=(B] $B8!:w(B(%\"s\"[$B8GDj(B] %\"g\"[$B@55,(B] %\"m\"[roma] %\"o\"[$B%PFb(B]) %\":\"[$B:rF|(B] %\".\"[$B:#F|(B] + %\"a\"[$B0lMw(B] %\"l\"[$B:G6a(B] %\"A\"[$BA08e(B] %\"h\"[$BMzNr(B] %\"y\"[$BM=Dj(B] %\"t\"[Todo] %\"b\"[$BA4%P(B] %\"x\"[mark] %\"w\"[$B?lJb(B] [$B@_Dj(B] + %\"K\"[$BBj",(B] [$BL>",(B] %\"d\"[$BF|"-(B] %\"T\"[$B;~"-(B] %\"i\"[$B80"-(B] %\"r\"[$B99?7(B] %\"R\"[menu $B99?7(B] [menu $BJT=8(B] [$BA4>C(B] +------------------------------------- +[$BM=Dj!&(BTodo] $B!D(B $BM=Dj(B@, $B!:@Z(B! $B$r(B %sdays $BF|@h$^$GI=<((B. +$B!:@Z(B!, todo+, $B3P=q(B-, $BJ]N1(B~ $B$r>e0L(B %tnum $B8D$^$GI=<((B. +%reminder +------------------------------------- +$B:G6a$N%a%b(B +%recent +------------------------------------- +$B%i%s%@%`%;%l%/%H(B ($BITMW$J$i(B[menu $BJT=8(B]$B$G3:Ev2U=j$r:o=|$7$F$/$@$5$$(B) +%random +------------------------------------- + +$BM=Dj!&(Btodo $B$N=q<0(B ($B3Q$G(B) +[2002-10-21]$B!w(B1 $BM=Dj(B ($BM=DjI=$KI=<(!#$b$7!w(B3$B$J$i(B3$BF|4V$NM=Dj!"$D$^$j(B23$BF|$^$G$N0UL#(B) +[2002-10-21]$B!\(B7 todo $B;XDjF|$K$J$C$F$+$i(B7$BF|4V$+$1$F=y!9$KIb$+$SB3$1$k(B +[2002-10-21]$B!*(B7 $B!:@Z(B $B;XDjF|$N(B7$BF|A0$+$i=y!9$KIb$+$S!";XDjF|0J9_Ib$-$C$Q$J$7(B +[2002-10-21]$B!](B1 $B3P=q(B $B;XDjF|$KIb$+$S>e$,$j!"0J9_(B1$BF|$+$1$FC10LNL$@$1=y!9$KD@$`(B +[2002-10-21]$B!A(B30 $BJ]N1(B $B;XDjF|$KIb$+$S>e$,$j!"0J9_(B30$BF|<~4|$GIb$-D@$_$r$/$j$+$($9(B +[2002-10-21]$B!%(B $B:Q$_(B $B>o$KDl(B +($B5-9f$N8e$N?t;z$O%G%U%)%k%HCM(B) + +$B3P$(J}(B +$B!&M=Dj$O$=$NF|$K7k$SIU$1$i$l$F$k$+$i(B@(at) +$B!&3P=q$OD@$s$G$$$/$+$i(B- +$B!&(Btodo$B$OIb$+$S>e$,$C$F$/$k$+$i(B+ +$B!&!:@Z$O$=$NF|$KCm0U$7$J$1$l$P$J$i$J$$$+$i(B! +$B!&J]N1$OGHBG$D$+$i(B~ +$B!&:Q$_$O=*$o$j$@$+$i(B. + +------------------------------------- + +[$B!{!{(B]$B$O2?(B? >>> %$B%\%?%s$N@bL@(B% +$B$3$N%a%K%e!<<+BN$rJT=8$G$-$^$9(B >>> %$B%a%K%e!<$NJT=8$K$D$$$F(B% +$B%a%b$,A}$($F$-$?$i!D(B >>> %$B9bB.2=$K$D$$$F(B% + + += <<< %$B%\%?%s$N@bL@(B% + +$B"!(B $B:n@.(B + +[$B?75,(B] $B"*(B $B?75,%a%b:n@.(B ($B8=%j!<%8%g%s$,%?%$%H%k(B) +[$BJ#@=(B] $B"*(B $B8=%a%b$rJ#@=(B ($B=;=jO?%F%s%W%l!<%H$J$I$NMQES$rA[Dj(B) + +$B"!(B $B0lMw(B + +[$B0lMw(B] $B"*(B $BA4%a%b$N0lMw(B +[$B:G6a(B] $B"*(B $B:G6a$N%a%b$NO"7kI=<((B +[$BA08e(B] $B"*(B $BA08e$N%a%b(B ($B8+$F$?%a%b$rCf?4$KA4%a%b$NF|IU=g0lMw(B) +* $BBP>]%U%!%$%k$r(B($BJT=8%b!<%I$G(B)$B3+$$$?>uBV$+$i%a%K%e!<$r8F$V$3$H(B +[$BMzNr(B] $B"*(B $B8!:wMzNr(B +[$BM=Dj(B] $B"*(B $BM=DjI=(B +[todo] $B"*(B todo $B0lMw(B + +$B"!(B $B8!:w(B + +[$B@55,(B] $B"*(B $B@55,I=8=$N8!:w(B +* $B4pK\E*$K$OBgJ8;z>.J8;z$N6hJL$J$7(B + * $B!V(BWiki$B!W$N$h$&$KL@<(E*$KBgJ8;z$r;XDj$7$?$H$-$O6hJL(B +[$B8GDj(B] $B"*(B $B%-!<%o!<%I$rJd40F~NO$7$F8GDjJ8;zNs$N8!:w(B +[roma] $B"*(B $B%m!<%^;z8!:w(B (migemo) +[$B:#F|(B] $B"*(B $B:#F|$N%a%b(B +[$B:rF|(B] $B"*(B $B:rF|$N%a%b(B + +$B"!(B $BJT=8(B: $BBP>]%U%!%$%k$r(B($BJT=8%b!<%I$G(B)$B3+$$$?>uBV$+$i%a%K%e!<$r8F$V$3$H(B + +[$B99?7(B] $B"*(B $B2<@~$r0z$-$J$*$9(B +[$B80"-(B] $B"*(B $B%-!<%o!<%I$rJd40F~NO$7$FE=$j$D$1(B +* Tips: M-v $B$G8uJd0lMw$K0\$C$F(B migemo $B8!:w$9$k$H3Z(B + +[$BF|"-(B] $B"*(B $B:#F|$NF|IU(B [yyyy-mm-dd] $B$rE=$j$D$1(B +[$B;~"-(B] $B"*(B $B:#F|$NF|;~(B [yyyy-mm-dd HH:MM] $B$rE=$j$D$1(B +[$BBj",(B] $B"*(B $B8=%a%b$N%?%$%H%k$r(B kill ring $B$X(B (C-y $B$GE=$j$D$1(B) +* $B%?%$%H%k$,$_$D$+$i$J$+$C$?$H$-$O%U%!%$%kL>(B +[$BL>",(B] $B"*(B $B%U%!%$%kL>$r(B kill ring $B$X(B + +$B"!(B $BFCJL(B + +[menu $B99?7(B] $B"*(B $B%a%K%e!<$NM=DjI=$J$I$r99?7(B +[menu $BJT=8(B] $B"*(B $B%a%K%e!<$rJT=8(B +[$BA4>C(B] $B"*(B howm-mode $B$J%P%C%U%!$r$9$Y$F>C$9(B ($BL$J]B8$O=|$/(B) +[$B?lJb(B] $B"*(B $B%i%s%@%`$K%j%s%/$r$?$I$C$F<+F01\Mw(B. C-g $B$GDd;_(B. + += <<< %$B9bB.2=$K$D$$$F(B% + +$B%a%b$,A}$($F8!:w$,CY$/$J$C$F$-$?$i(B, $B9bB.2=$N$?$a$N%*%W%7%g%s@_Dj$r(B +$B8!F$$7$F$/$@$5$$(B. + +$B:G$b8z2L$,Bg$-$$$N$O(B, $B8!:w$K(B grep $B%3%^%s%I$r;H$&$3$H$G$9(B. +Unix $B7O$NI8=`E*$J4D6-$J$i(B, $B$?$$$F$$LdBj$J$/;H$($k$G$7$g$&(B. +$B$=$l0J30$N4D6-$G$O(B, $B2?$i$+$N=`Hw$,I,MW$K$J$k$+$b$7$l$^$;$s(B. + +$B3F4D6-$G6qBNE*$K$I$&$9$l$P$h$$$+$O!D>pJs$r$*BT$A$7$F$$$^$9(B. +$B!&(Bhttp://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Windows +$B!&(Bhttp://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus + +grep $B$N;HMQ$r@_Dj$9$k$K$O(B, + M-x customize-variable howm-view-use-grep +$B$HF~NO$9$k$+(B, $B=i4|2=%U%!%$%k(B(.emacs $BEy(B)$B$KD>@\(B + (setq howm-view-use-grep t) +$B$H=q$/$+(B, $B$"$k$$$O:#$3$N2hLL$G!V(B%\"!$B!W$r2!$7$F$/$@$5$$(B.\" %| %eval%(customize-variable 'howm-view-use-grep) %| + +$B$=$NB>$N%*%W%7%g%s$K$D$$$F$O(B, +[$B@_Dj(B] $B$+$i!V(BHowm Efficiency$B!W$N9`L\$r;2>H$/$@$5$$(B. + + += <<< %$B%a%K%e!<$NJT=8$K$D$$$F(B% +[menu $BJT=8(B] $B$G$3$N%a%K%e!<$rJT=8(B +[menu $B99?7(B] $B$G$3$N%a%K%e!<$r99?7(B +-------------------------------------------------------- + +$B%a%K%e!<$N=q$-J}(B +([menu $BJT=8(B] $B>e$G%j%?!<%s$rC!$-(B, $B85%U%!%$%k$rFI$s$G$/$@$5$$(B) + +$B"!(B $B4pK\(B +$B8+$l$P$o$+$k$G$7$g$&$,(B, +$B!&(B[$B!{!{(B] $B$H=q$$$?=j$,%\%?%s(B +$B!&!s(Breminder $B$H(B($BH>3Q$G(B)$B=q$$$?=j$,M=DjI=$H(B todo list +$B!&!s(Brecent $B$H(B($BH>3Q$G(B)$B=q$$$?=j$,(B, $B:G6a$N%a%b0lMw(B +$B!&!s(Brandom $B$H(B($BH>3Q$G(B)$B=q$$$?=j$,(B, $B%i%s%@%`$J%a%b0lMw(B +$B$K$J$j$^$9(B. +$B$I$3$K=q$$$F$b5!G=$7$^$9$+$i(B, $BJB$Y$+$($k$J$j$J$s$J$j(B, $B$*9%$-$K$I$&$>(B. +$B$h$/;H$&%U%!%$%k$d(B goto link $B$b=q$$$F$*$1$PJXMx$+$b(B. +($BNc(B) file:///etc/services >>> wiki + +$B"!(B $B%7%g!<%H%+%C%H(B +%\"hoge\"[$B0lMw(B] +$B",$3$&=q$$$F$*$/$H(B, $B!V(Bhoge[$B0lMw(B]$B!W$HI=<($5$l(B, $B%-!<(B h $B$G0lMw$r5/F0(B +($B@53N$K$O(B, (1) $BJD$8!V(B\"$B!W$X0\F0(B (2) $B2A$5$l$^$9(B + +$B"!(B $BIT2D;k(B +$B!V!s(B|$B!W$H(B($BH>3Q$G(B)$B=q$/$H(B, $B2D;k!&IT2D;k$r%H%0%k(B. +$B$3$s$J$U$&$K(B $B"*(B $B8+$($k(B%|$B8+$($J$$(B%|$B2D;k(B%|$BIT2D;k!D9TKv$^$G(B +($B9TKv$,IT2D;k$@$H(B, $B2~9T$b>C$($^$9(B) + +$B"!(B $BJ#?t%a%K%e!<(B +$B!V(B%$B!{!{(B%$B!W$X$N%j%s%/$O(B, $B!V!c!c!c(B %$B!{!{(B%$B!W$r%a%K%e!<%b!<%I$G3+$-$^$9(B: >>> %menu% +$B?75,%a%K%e!<$rDI2C$7$?$$$H$-$O(B [[%menu%]] $B$NJ}$,JXMx$G$7$g$&(B ($B<+F0@8@.$9$k$N$G(B) +$B;XDj%U%!%$%k$r%a%K%e!<%b!<%I$G3+$/(B: %eval%(howm-menu-open \"00000000-000000.txt\") +") + +(provide 'howm-menu-ja) diff --git a/howm-menu.el b/howm-menu.el new file mode 100644 index 0000000..941d595 --- /dev/null +++ b/howm-menu.el @@ -0,0 +1,963 @@ +;;; howm-menu.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-menu.el,v 1.106 2012-09-23 11:34:59 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;;-------------------------------------------------------------------- + +(provide 'howm-menu) +(require 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; customize + +;;; general + +(howm-defvar-risky howm-menu-mode-map nil) +(let ((m (make-keymap))) + (define-key m action-lock-magic-return-key 'howm-menu-invoke) + (define-key m [tab] 'action-lock-goto-next-link) + (define-key m [(meta tab)] 'action-lock-goto-previous-link) + (define-key m "\C-i" 'action-lock-goto-next-link) + (define-key m "\M-\C-i" 'action-lock-goto-previous-link) + (define-key m " " 'scroll-up) + (define-key m [backspace] 'scroll-down) + (define-key m "\C-h" 'scroll-down) + (define-key m "q" 'bury-buffer) + (define-key m "?" 'describe-mode) + (setq howm-menu-mode-map m) + ) + +;;; schedule, todo, recent, random + +;; Set random seed. +;; snap://Info-mode/elisp#Random Numbers +(defvar howm-randomize t) +(when howm-randomize + (random t)) + +(defvar howm-menu-reminder-format "> %s | %s" + "Format to show schedule/todo list in `howm-menu-mode'.") +(defvar howm-menu-list-format + (let* ((path (format-time-string howm-file-name-format)) + (width (length (file-name-sans-extension + (file-name-nondirectory path))))) + (concat "> %-" (format "%s" width) "s | %s")) + "Format to show recent/random list in `howm-menu-mode'.") +(defvar howm-menu-list-regexp "^\\(>\\([^|\r\n]*|\\)\\) +\\(.*\\)$" + "Regexp to find and parse schedule/todo/recent/random list in `howm-menu-mode'. +`howm-menu-list-regexp-action-pos' must cover header part. +Otherwise, `howm-action-lock-forward' may be invoked unintentionally.") +(defvar howm-menu-list-regexp-key-pos 3 + "Position of target string for action-lock in history buffer. +This target is searched when action-lock is invoked.") +(defvar howm-menu-list-regexp-action-pos 1 + "Position of action-lock hilight on schedule/todo/recent/random list +in `howm-menu-mode'.") +(defvar howm-menu-list-regexp-face-pos 2 + "Position to apply `howm-menu-list-face' on schedule/todo/recent/random list +in `howm-menu-mode'.") + +;;; shortcut + +;; %"..." or %"...%" +(defvar howm-menu-key-regexp + "%\"\\(\\([^\r\n%\"]\\)[^\r\n%\"]*\\(%+[^\r\n%\"]+\\)*\\)\\(%\\)?\"") +(defvar howm-menu-key-regexp-word-pos 1) +(defvar howm-menu-key-regexp-key-pos 2) +(defvar howm-menu-key-regexp-moveonly-pos 4) + +;;; dynamic contents + +(howm-defvar-risky howm-menu-allow + '(howm-menu-schedule + howm-menu-todo + howm-menu-reminder + howm-menu-recent + howm-menu-random + howm-menu-search + howm-menu-categorized-reminder + )) + +(howm-defvar-risky howm-menu-display-rules + `( + ;; static + ("%sdays" . "%here%howm-menu-schedule-days") + ("%tnum" . "%here%howm-menu-todo-num") + ("%schedule" . "%here%(howm-menu-schedule)") + ("%todo" . "%here%(howm-menu-todo)") + ("%reminder" . "%here%(howm-menu-reminder)") + ("%recent" . "%here%(howm-menu-recent)") + ("%random" . "%here%(howm-menu-random)") + ;; dynamic + ("%here%" . howm-menu-here) + (,howm-menu-key-regexp . howm-menu-shortcut) + ) + "List of rules for dynamic contents in howm menu. +((R1 . T1) (R2 . T2) ...): +Regexp R1 is replaced by T1 if T1 is a string. +(T1) is called at R1 if T1 is a function.") + +;;; command table + +;; howm-menu-command-table-* = ((MATCHER FUNC ONBUF) ...) +;; +;; (FUNC) is evalueted on ONBUF when return key is hit on MATCHER. +;; +;; MATCHER = regexp | (regexp position) +;; (optional) ONBUF = nil | 'previous | 'current +;; nil: previous non-menu buffer (set-buffer) +;; 'previous: previous non-menu buffer (switch-to-buffer) +;; 'current: current menu buffer + +(howm-defvar-risky howm-menu-command-table-common + '( + (("%eval%\\(.*$\\)" 1) howm-menu-eval previous) + (("%call%\\(.*$\\)" 1) howm-menu-call previous) + )) + +;;; which is opened as menu? + +(howm-defvar-risky howm-menu-keyword-regexp "^%.*%$") +(howm-defvar-risky howm-menu-top "%menu%") + +;;; misc. + +(howm-defvar-risky howm-menu-toggle-invisible "%|") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; internal + +(defvar *howm-menu-force-refresh* nil) ;; dirty. clean me. [2003/09/29 21:39] + +(defvar *howm-menu-shortcut-keys* nil) +(defvar *howm-menu-shortcut-multidef-keys* nil) +(defvar *howm-menu-shortcut-markers* nil) +(make-variable-buffer-local '*howm-menu-shortcut-markers*) + +(defvar howm-menu-previous-buffer nil) +(defvar howm-menu-next-expiry-time (current-time)) +(defvar howm-menu-last-time (current-time)) +(defvar howm-menu-buffer-file nil) +(defvar howm-menu-buffer-file-place nil) +(howm-defvar-risky howm-menu-mode-local-map nil) +(make-variable-buffer-local 'howm-menu-previous-buffer) +(make-variable-buffer-local 'howm-menu-next-expiry-time) +(make-variable-buffer-local 'howm-menu-last-time) +(make-variable-buffer-local 'howm-menu-buffer-file) +(make-variable-buffer-local 'howm-menu-buffer-file-place) +(make-variable-buffer-local 'howm-menu-mode-local-map) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mode + +(defun howm-menu-mode () + "howm menu +key binding +--- ------- +\\[action-lock-magic-return] Follow link +\\[action-lock-goto-next-link] Next link +\\[action-lock-goto-previous-link] Prev link +\\[describe-mode] This help +\\[bury-buffer] Quit +" + (interactive) + (setq major-mode 'howm-menu-mode + mode-name "HM") + (setq howm-menu-mode-local-map (copy-keymap howm-menu-mode-map)) + (use-local-map howm-menu-mode-local-map) + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; main + +(defun howm-menu (&optional force-refresh last-chance) + (interactive) + (when (and (eq (howm-folder-type howm-directory) ':dir) + (not (file-exists-p howm-directory))) + (make-directory howm-directory t)) + (let ((*howm-menu-force-refresh* force-refresh) + ;; force to use the original howm-directory + (*howm-independent-directories* nil)) + (if (and howm-menu-keyword-regexp (null howm-menu-file)) + (let ((m (howm-keyword-search howm-menu-top))) + (when (and (cdr (assoc 'menu-p m)) + (not (cdr (assoc 'keyword-matched m)))) + (howm-menu-initialize-skel last-chance))) + (howm-menu-open howm-menu-file)))) + +(defun howm-menu-open (file &optional place name) + (setq name (or name (howm-menu-name file))) + (let ((f (if (file-name-absolute-p file) + file + (expand-file-name file howm-directory)))) + (if (file-exists-p f) + (howm-menu-open-sub f place name) + (progn + (find-file f) + (howm-mode))))) + +(defun howm-menu-open-sub (f place name) + (let* ((pb (current-buffer)) + (pm major-mode) + (b (get-buffer name)) + (mtime (nth 5 (file-attributes f)))) + (if (or *howm-menu-force-refresh* + (null b) + (progn + (set-buffer b) + (or (howm-time< howm-menu-last-time mtime) + (howm-time< howm-menu-next-expiry-time + (current-time))))) + (howm-menu-refresh f place name) + (switch-to-buffer b)) + (let ((cm major-mode)) + (save-excursion + (while (eq pm cm) + (set-buffer pb) + (setq pb howm-menu-previous-buffer) + (set-buffer pb) + (setq pm major-mode))) + (setq howm-menu-previous-buffer pb)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; refresh + +(howm-defvar-risky howm-menu-shortcut-assoc nil) +(make-variable-buffer-local 'howm-menu-shortcut-assoc) +(howm-defvar-risky howm-menu-invisible t + "*Non nil if 'invisible' property should be used in menu. +This must be t at now. +When this is nil, delete-region is used instead, and bug appears.") + +(defun howm-menu-refresh (&optional file place name) + (interactive) + ;; preprocess + (when name + (switch-to-buffer (get-buffer-create name))) + (howm-menu-mode) + (setq howm-menu-buffer-file (or file howm-menu-buffer-file)) + (setq howm-menu-buffer-file-place (or place + howm-menu-buffer-file-place + 1)) + (setq howm-menu-shortcut-assoc nil) + ;; main + (howm-rewrite-read-only-buffer + (howm-menu-insert-paragraph howm-menu-buffer-file + howm-menu-buffer-file-place) + (howm-menu-dynamic-setup) ;; shotcut & dynamic contents + (howm-menu-set-face)) + ;; postprocess + (goto-char (point-min)) + (setq howm-menu-last-time (current-time)) + (setq howm-menu-next-expiry-time + (howm-days-after (current-time) 0 + howm-menu-expiry-hours)) + (howm-menu-shortcut-warn) + (run-hooks 'howm-menu-hook)) + +(defun howm-menu-insert-paragraph (file place) + (insert-file-contents (expand-file-name file + howm-directory)) + (howm-view-set-place place) + (let* ((r (howm-view-paragraph-region)) + (b (car r)) + (e (cadr r))) + (delete-region e (point-max)) + (delete-region (point-min) b)) + (goto-char (point-max)) + (insert (howm-menu-footer))) + +;; (defun howm-menu-dynamic-setup () +;; (let* ((action-lock-default-rules (howm-menu-action-lock-rules))) +;; (if howm-mode +;; (howm-initialize-buffer) +;; (howm-mode 1))) +;; (howm-menu-shortcut-initialize) +;; (howm-menu-replace howm-menu-display-rules)) + +(defun howm-menu-dynamic-setup () + (howm-menu-shortcut-initialize) + (howm-menu-replace howm-menu-display-rules) + (let* ((action-lock-default-rules (howm-menu-action-lock-rules))) + (if howm-mode + (howm-initialize-buffer) + (howm-mode 1)))) + +(defun howm-menu-set-face () + (set (make-local-variable 'font-lock-keywords-only) t) + (howm-menu-add-font-lock) + (font-lock-fontify-buffer) + (when howm-menu-toggle-invisible + (howm-menu-make-invisible))) + +(defun howm-menu-footer () + (or howm-menu-footer + (let* ((r (howm-menu-command-table-raw)) + (buttons (mapcar (lambda (f) + (cdr (assoc f + (mapcar (lambda (z) + (cons (cadr z) + (car z))) + r)))) + '(howm-menu-refresh howm-menu-edit))) + (footer (apply #'concat `("\n-- \n" ,@buttons)))) + (setq howm-menu-footer footer) + footer))) + +(defun howm-menu-refresh-background () + ;; save-current-buffer doesn't work on GNU Emacs 21.4.1 + (let ((b (current-buffer))) + (howm-menu t) + (switch-to-buffer b))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; action-lock + +(defun howm-menu-invoke (arg) + (interactive "P") + (cond ((save-excursion + (beginning-of-line) + (looking-at howm-menu-list-regexp)) + (beginning-of-line) + (action-lock-invoke arg)) + ((howm-menu-list-get-item) + (howm-view-open-item (howm-menu-list-get-item))) + (t + (error "Not on spell string.")))) + +(defun howm-menu-action-lock-rules () + (let* ((d action-lock-default-rules) + (f (howm-action-lock-reminder-forward-rules)) + (j (howm-menu-list-rules)) + (m (mapcar (lambda (pair) + (let* ((h (car pair)) + (r (if (listp h) (car h) h)) + (n (if (listp h) (cadr h) nil)) + (args (if n + `(list (match-string-no-properties ,n)) + nil)) + (functab (cdr pair)) + (c (howm-menu-action functab args))) + (list r c))) + (howm-menu-command-table)))) + (append m d j f))) + +;; Elisp is not Scheme. Lambda is not closure. Don't forget dynamic binding. +;; Check +;; (pp (car (howm-menu-action-lock-rules))) +;; for debug. [2003/09/25] +(defun howm-menu-action (function-table args) + (let* ((func (car function-table)) + (onbuf (cadr function-table)) + (switch-p (eq onbuf 'previous))) + (let* ((s-buf (if (eq onbuf 'current) 'cur 'prev)) + (s-switch `(switch-to-buffer ,s-buf)) + (s-apply `(apply #',func ,(if args 'a nil)))) +;; (s-apply `(apply #',func ,(if args '(list a) nil)))) + (let* ((s-body (if switch-p + `(progn ,s-switch ,s-apply) + `(with-current-buffer ,s-buf ,s-apply)))) + `(lambda (&optional ,howm-menu-action-arg) + (let ((a ,args) + (cur (current-buffer)) + (prev (if (howm-buffer-alive-p howm-menu-previous-buffer) + howm-menu-previous-buffer + (current-buffer)))) + ,s-body)))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shortcut + +(defun howm-menu-shortcut-get-marker () + (let ((m (make-marker))) + (set-marker m (point)) + (add-to-list '*howm-menu-shortcut-markers* m) + m)) + +(defun howm-menu-shortcut-clear-markers () + (mapc (lambda (m) (set-marker m nil)) + *howm-menu-shortcut-markers*) + (setq *howm-menu-shortcut-markers* nil)) + +(defun howm-menu-shortcut-initialize () + (setq *howm-menu-shortcut-keys* nil) + (setq *howm-menu-shortcut-multidef-keys* nil) + (howm-menu-shortcut-clear-markers)) + +(defun howm-menu-shortcut-sort (keys) + (mapconcat #'identity + (sort (copy-sequence keys) #'string<) + "")) + +(defun howm-menu-shortcut-warn () + (when *howm-menu-shortcut-multidef-keys* + (beep) + (message "Multiple definitions for key(s): \"%s\" in \"%s\"" + (howm-menu-shortcut-sort *howm-menu-shortcut-multidef-keys*) + (howm-menu-shortcut-sort *howm-menu-shortcut-keys*)))) + +;; Check howm-menu-mode-local-map if you want to debug howm-menu-shortcut. +(defun howm-menu-shortcut () + (let* ((beg (match-beginning 0)) + (end (match-end 0)) + (wbeg (match-beginning howm-menu-key-regexp-word-pos)) + (wend (match-end howm-menu-key-regexp-word-pos)) + (key (match-string-no-properties howm-menu-key-regexp-key-pos)) + (move-only (match-beginning howm-menu-key-regexp-moveonly-pos))) + ;; 'end' must be first. + ;; howm-menu-invisible-region can be delete-region indeed, + ;; and points after the region can be slided. + (howm-menu-invisible-region wend end) + (howm-menu-invisible-region beg wbeg) + (let ((p (howm-menu-shortcut-get-marker))) + (setq howm-menu-shortcut-assoc + (cons (cons key p) howm-menu-shortcut-assoc)) + (define-key howm-menu-mode-local-map key + (howm-menu-shortcut-func key p move-only))) + (when (member key *howm-menu-shortcut-keys*) + (setq *howm-menu-shortcut-multidef-keys* + (cons key *howm-menu-shortcut-multidef-keys*))) + (setq *howm-menu-shortcut-keys* + (cons key *howm-menu-shortcut-keys*)))) + +(defun howm-menu-shortcut-func (key p move-only) + (if howm-menu-invisible + (howm-menu-shortcut-func1 p move-only) + (howm-menu-shortcut-func2 key p move-only))) + +;; old code. it works. +(defun howm-menu-shortcut-func1 (p move-only) + `(lambda (arg) + (interactive "P") + (let ((pos ,p)) + (if ,move-only + (goto-char pos) + (save-excursion + (goto-char pos) + (let ((case-fold-search nil)) ;; temporaly + (when (null (action-lock-get-action)) + (action-lock-goto-next-link)) + (action-lock-invoke arg))))))) + +;; new code. broken. +;; It doesn't work because action can be +;; (let ((s (match-string-no-properties 0))) (howm-keyword-search s nil nil)). +(defun howm-menu-shortcut-func2 (key p move-only) + (if move-only + `(lambda (arg) (interactive "P") (goto-char ,p)) + (save-excursion + (goto-char p) + (let ((case-fold-search nil)) ;; temporaly + (when (null (action-lock-get-action)) + (action-lock-goto-next-link)) + (let ((action (action-lock-get-action))) + (if (null action) + (lambda (arg) (interactive "P") nil) + (progn + (rplacd (assoc key howm-menu-shortcut-assoc) + action) + `(lambda (arg) + (interactive "P") + (funcall (cdr (assoc ,key howm-menu-shortcut-assoc)) + arg))))))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; action + +(defun howm-menu-edit () + (interactive) + (let ((place howm-menu-buffer-file-place)) + (find-file (expand-file-name howm-menu-buffer-file howm-directory)) + (howm-mode t) + (when place + (howm-view-set-place place) + (recenter 0)))) + +(defun howm-menu-eval (s) + (let ((expr (read s))) + (eval expr))) + +(defun howm-menu-call (s) + (let ((expr (read s))) + (call-interactively expr))) + +(defun howm-open-today () + (interactive) + (and (howm-create-file t) + (howm-insert-template "")) + (howm-set-mode)) + +(defun howm-open-past (&optional days-before) + (interactive "p") + (setq days-before (or days-before 1)) + (if (= days-before 0) + (howm-open-today) + (howm-open-past-sub days-before))) + +(defun howm-open-past-sub (days-before) + (let ((f (expand-file-name (howm-file-name (howm-days-after (current-time) + (- days-before))) + howm-directory))) + (if (file-exists-p f) + (find-file f) + (error "No such file: %s" f))) + (howm-set-mode)) + +(defun howm-find-past (&optional days-before) + (interactive "p") + (cond ((howm-one-file-one-day-p) (howm-open-past days-before)) + (t (howm-search-past days-before)))) + +(defun howm-find-today (&optional days-before) + (interactive "P") + (howm-find-past (or days-before 0))) + +(defun howm-find-yesterday (&optional days-before) + (interactive) + (howm-find-past (or days-before 1))) + +(defun howm-one-file-one-day-p () + (let* ((now (decode-time)) + (d (nth 3 now)) + (m (nth 4 now)) + (y (nth 5 now)) + (beginning-of-day (encode-time 0 0 0 d m y)) + (end-of-day (encode-time 59 59 23 d m y))) + (string= (howm-file-name beginning-of-day) + (howm-file-name end-of-day)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; face + +(defun howm-menu-make-invisible () + (save-excursion + (goto-char (point-min)) + (let (visible-p + invisible-beg) + (while (not (= (point) (point-max))) + (setq visible-p t) + (while (re-search-forward howm-menu-toggle-invisible + (line-end-position) t) + (if visible-p + (setq invisible-beg (match-beginning 0)) + (howm-menu-invisible-region invisible-beg (match-end 0))) + (setq visible-p (not visible-p))) + (when (not visible-p) + (howm-menu-invisible-region invisible-beg + (save-excursion (forward-line) (point)))) + (forward-line))))) + +(defun howm-menu-font-lock-rules () + `((,howm-menu-key-regexp + (,howm-menu-key-regexp-key-pos howm-menu-key-face t)) + ;; In menu-list form "> FILE-NAME | ", + ;; I want to hide annoying long underlines drawn by action-lock. + (,howm-menu-list-regexp + (,howm-menu-list-regexp-face-pos howm-menu-list-face t)) + ;; But some users may want to highlight today's YYYY-MM-DD even if + ;; it is a part of a FILE-NAME. + ;; The next code makes duplicated entries; they are already put into + ;; font-lock-keywords by howm-reminder-add-font-lock + ;; in howm-initialize-buffer because menu is howm-mode. + ;; They are hidden by the above rule in FILE-NAME columns, + ;; and I need to put them again now. Sigh... + ;; Clean me! + ,@(howm-reminder-today-font-lock-keywords))) +(defun howm-menu-add-font-lock () + (cheat-font-lock-append-keywords (howm-menu-font-lock-rules))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dynamic contents + +(defun howm-menu-replace (rules) + (mapc (lambda (pair) + (let* ((reg (car pair)) + (to (cdr pair))) + (goto-char (point-min)) + (while (re-search-forward reg nil t) + (cond ((stringp to) (replace-match to)) + ((functionp to) (funcall to)) + (t (error "Invalid to-part: %s." to)))))) + rules)) + +;; (defun howm-menu-func () +;; (let ((b (match-beginning 0)) +;; (e (match-end 0)) +;; (f (read (match-string-no-properties 1)))) +;; (if (or (eq howm-menu-allow t) +;; (member f howm-menu-allow)) +;; (howm-replace-region b e (funcall f)) +;; (message "%s is not allowed." f)))) + +;; (defun howm-menu-var () +;; (let ((b (match-beginning 0)) +;; (e (match-end 0)) +;; (f (read (match-string-no-properties 1)))) +;; (howm-replace-region b e (eval f)))) + +(defun howm-menu-here () + (let* ((beg (match-beginning 0)) + (expr-beg (match-end 0)) + (expr-end (progn (forward-sexp) (point))) + (expr (read (buffer-substring-no-properties expr-beg expr-end)))) + (cond ((symbolp expr) (howm-menu-here-var expr beg expr-end)) + ((listp expr) (howm-menu-here-func (car expr) (cdr expr) + beg expr-end)) + (t (message "Unknown expr: %s" expr))))) + +(defun howm-menu-here-var (expr beg end) + (if (boundp expr) + (howm-replace-region beg end (symbol-value expr)) + (message "Unknown symbol: %s" expr))) + +(defun howm-menu-here-func (func args beg end) +;; (let ((allowed (or (eq howm-menu-allow t) (member func howm-menu-allow)))) + (let ((allowed (member func howm-menu-allow))) + (cond ((not allowed) (message "Not allowed: %s" func)) + ((not (fboundp func)) (message "Unknown function: %s" func)) + (t (howm-replace-region beg end (apply func args)))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; schedule, todo, recent, random + +;;; command + +(defun howm-menu-schedule () + (howm-menu-general "schedule" 'schedule + (howm-schedule-menu howm-menu-schedule-days + howm-menu-schedule-days-before))) + +(defvar howm-menu-todo-show-day-of-week t) +(defun howm-menu-todo () + (howm-menu-general "todo" 'todo + (howm-todo-menu howm-menu-todo-num + howm-menu-todo-priority + howm-menu-reminder-separators))) +(defun howm-menu-reminder () + (howm-menu-general "reminder" 'todo + (howm-reminder-menu howm-menu-todo-num + howm-menu-todo-priority + howm-menu-reminder-separators))) + +(defun howm-menu-recent (&optional evaluator label) + (howm-menu-general (or label "recent") + nil + (howm-recent-menu howm-menu-recent-num evaluator))) + +(defun howm-menu-random () (howm-menu-recent t "random")) + +(defun howm-menu-general (label formatter item-list) + "Generate output string for items in howm menu. +LABEL is only used for message. +FORMATTER is a function which receives an item and returns an output string + (without newline). +FORMATTER can be nil for standard style, 'todo for todo style, +'schedule for schedule style, or 'full for full note. +ITEM-LIST is list of items which should be shown." + (let ((f (cond ((null formatter) #'howm-menu-format-item) + ((eq 'todo formatter) #'howm-menu-format-todo) + ((eq 'schedule formatter) #'howm-menu-format-reminder) + ((eq 'full formatter) #'howm-menu-format-full) + (t formatter)))) + (let* ((msg "scanning %s...") + (msg-done (concat msg "done"))) + (message msg label) + ;; (delete-region (match-beginning 0) (match-end 0)) + (prog1 + (mapconcat f item-list "\n") + (message msg-done label))))) + +;;; schedule/todo + +(defun howm-menu-format-todo (item) + ;; item can be a separator. + (if (eq (howm-page-type (howm-item-page item)) ':nil) + (howm-item-summary item) + (let ((dow-str (cond (howm-menu-todo-show-day-of-week nil) + (t " ")))) + (howm-menu-format-reminder item dow-str t)))) + +(defun howm-menu-format-reminder (item &optional day-of-week-str show-priority) + (let* ((p (howm-todo-parse item)) + (late (floor (car p))) + (dow (cl-cadddr p)) + (dow-str (or day-of-week-str + (howm-day-of-week-string dow))) + (priority (if (and howm-menu-todo-priority-format + show-priority) + (format howm-menu-todo-priority-format + (howm-todo-priority item)) + "")) + (h (format "%s%3s%s" dow-str late priority))) + (howm-menu-list-format h (howm-view-item-summary item) item + howm-menu-reminder-format))) + +(defun howm-day-of-week-string (&optional day-of-week) + ;; 0 = Sunday + (let ((dow (or day-of-week (nth 6 (decode-time)))) + (names (howm-day-of-week))) + (cond ((stringp names) (substring names dow (1+ dow))) ;; backward compatibility + ((listp names) (nth dow names)) + (t " ")))) + +(defun howm-menu-format-full (item) + (let ((text (format "%s %s\n%s" + howm-ref-header + (howm-item-name item) + (with-temp-buffer + (howm-page-insert (howm-item-page item)) + (howm-view-set-place (howm-view-item-place item)) + (apply 'buffer-substring-no-properties + (howm-view-paragraph-region)))))) + (howm-menu-list-put-item text item) + text)) + +;;; recent/random + +(defun howm-recent-menu (num &optional evaluator) + ;; Bug: (length howm-recent-menu) can be smaller than NUM + ;; when empty files exist. + (let* ((randomp (eq evaluator t)) + (summarizer #'(lambda (file line content) content)) + ;; Unique name is needed for dynamic binding. Sigh... + (h-r-m-evaluator (if randomp + (lambda (f) (number-to-string (random))) + (or evaluator #'howm-view-mtime))) + (sorted (howm-sort (lambda (f) (funcall h-r-m-evaluator f)) + #'howm-view-string> + (mapcar #'howm-item-name + (howm-folder-items howm-directory t)))) + (files (howm-first-n sorted num))) + (let ((r (howm-menu-recent-regexp))) + (if randomp + (cl-mapcan (lambda (f) + (let ((is (howm-view-search-items r (list f) + summarizer))) + (and is (list (nth (random (length is)) + is))))) + files) + (howm-first-n (howm-view-search-items r files summarizer) num))))) + +(defun howm-menu-recent-regexp () + (or howm-menu-recent-regexp (howm-view-title-regexp-grep))) + +;;; common + +(defun howm-menu-list-put-item (text item) + ;; put it to whole text, because I don't assume "> ..." format here. + (put-text-property 0 (length text) 'howm-menu-list-item item text)) +(defun howm-menu-list-get-item (&optional text) + (get-text-property (if text 0 (point)) 'howm-menu-list-item text)) +(defun howm-menu-list-getput-item (from-text to-text) + (howm-menu-list-put-item to-text + (howm-menu-list-get-item from-text))) + +(defun howm-menu-list-action (&optional keyword) + (let ((item (howm-menu-list-get-item keyword))) + (cond (item (howm-view-open-item item)) ;; schedule, todo, etc. + (keyword (howm-keyword-search keyword)) ;; history + (t (error "Target is not specified."))))) ;; can't happen + +(defun howm-menu-format-item (item &optional list-format) + (let* ((info (file-name-sans-extension (howm-view-item-basename item))) + (line (howm-view-item-summary item))) + (howm-menu-list-format info line item list-format))) + +(defun howm-menu-list-format (info line item &optional list-format) + (let ((s (format (or list-format howm-menu-list-format) info line))) + (howm-menu-list-put-item s item) + s)) + +(defun howm-menu-list-rules () + (list (action-lock-general #'howm-menu-list-action + howm-menu-list-regexp + howm-menu-list-regexp-key-pos + howm-menu-list-regexp-action-pos))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; embed search result + +(defun howm-menu-search (key &optional formatter regexp-p) + "Embed search result of KEY into menu. +See `howm-menu-general' for FORMATTER. +KEY is a regular expression if REGEXP-P is not nil. + +Bugs: If you write %here%(howm-menu-search \"foo\" full) in your menu, +- menu file itself is also searched. +Write %here%(howm-menu-search \"[f]oo\" full t) insteadly. +- same note is shown twice if \"foo\" is hit twice in it." + (let ((fixed-p (not regexp-p))) + (howm-menu-general "menu-search" + formatter + (howm-view-search-folder-items key (howm-folder) + nil fixed-p)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; categorized todo-list + +;; Experimental [2006-01-16] + +(defun howm-menu-classified-reminder (classifier &optional comparer + title-format) + "Generate string of classified reminder-list. +CLASSIFIER is a function which receives an item and answers its class. +Class can be an arbitrary lisp object. +When class is nil, corresponding item is not shown in this list. +COMPARER is a function which receives two keys and answer t or nil. +It is used for sorting of keys. +TITLE-FORMAT is a format string for class title." + (let* ((a (howm-classify classifier + (howm-reminder-menu nil + howm-menu-todo-priority + nil))) + ;; key 'nil' is skipped. + (keys (remove nil (mapcar #'car a))) + (tform (concat (or title-format "--%s--") "\n"))) + (when comparer + (setq keys (sort keys comparer))) + (mapconcat (lambda (k) + (let* ((item-list (howm-first-n (cdr (assoc k a)) + howm-menu-todo-num)) + (is (howm-with-reminder-setting + (howm-todo-insert-separators + item-list + howm-menu-reminder-separators + t)))) + (concat (format tform k) + (howm-menu-general (format "reminder(%s)" k) 'todo + is)))) + keys "\n"))) + +(defun howm-menu-categorized-reminder (categories &optional title-format + erase-p omit-misc-p) + "Generate string of categorized reminder-list. + +Write %here%(howm-menu-categorized-reminder (\"foo\" \"bar\" \"baz\")) +to show categorized list in menu. (You don't need quote(') +before the above list; arguments are not evaluated in %here% +because I don't have enough courage to call eval.) + +If you like to erase category label from summary string, try +%here%(howm-menu-categorized-reminder (\"foo\" \"bar\" \"baz\") nil t) +instead. + +If you don't like misc. category, try +%here%(howm-menu-categorized-reminder (\"foo\" \"bar\" \"baz\") nil nil t)." + ;; Using categories, matcher, etc. in lambda is bad indeed + ;; because of dynamic binding. + (let* ((matcher (lambda (cat str item) + (and (string-match (regexp-quote cat) str) + (progn + (when erase-p + (howm-item-set-summary item + (replace-match "" nil nil + str))) + t)))) + (classifier (lambda (item) + (let ((s (howm-item-summary item))) + (or (cl-find-if (lambda (c) + (funcall matcher c s item)) + categories) + (if omit-misc-p nil "misc."))))) + (pos (lambda (c) (or (cl-position c categories) howm-infinity))) + (comparer (lambda (a b) (< (funcall pos a) (funcall pos b))))) + (howm-menu-classified-reminder classifier comparer title-format))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generate initial menu + +(defun howm-menu-initialize-skel (&optional dummy) + (let ((menu-name (howm-get-symbol nil "howm-menu-" howm-menu-lang))) + (require menu-name) + (howm-menu-copy-skel (symbol-value menu-name)) + (howm-view-kill-buffer) + (howm-menu nil t))) + +(defun howm-menu-copy-skel (contents) + (let ((menu-file (or howm-menu-file + (expand-file-name "0000-00-00-000000.txt" + howm-directory))) + (r "^=")) + (if (file-exists-p menu-file) + ;; I have no courage to erase existing file. + (progn + (setq howm-menu-file menu-file) + (message "Assume %s as menu file." menu-file)) + (progn + (find-file menu-file) + (insert contents) + (goto-char (point-min)) + (while (re-search-forward r nil t) + (replace-match howm-view-title-header nil nil)) + (howm-mode 1) + (save-buffer))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; switch language + +(defun howm-require-lang (&optional lang) + (require (howm-get-symbol nil "howm-lang-" (or lang howm-menu-lang)))) + +(defun howm-lang-ref (var) + (let ((lang howm-menu-lang)) + (howm-require-lang lang) + ;; For backward compatibility, I use howm-day-of-week-en + ;; rather than howm-day-of-week:en. + (symbol-value (howm-get-symbol t var "-" lang)))) + +(defun howm-menu-command-table-raw () + (howm-lang-ref "howm-menu-command-table")) + +(defun howm-menu-command-table () + (append howm-menu-command-table-common + (mapcar (lambda (pair) (cons (regexp-quote (car pair)) (cdr pair))) + (howm-menu-command-table-raw)))) + +(defun howm-day-of-week () + (howm-lang-ref "howm-day-of-week")) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; misc. + +(defun howm-menu-p () + (string= major-mode "howm-menu-mode")) + +(defun howm-menu-name (file) + (format howm-menu-name-format file)) + +(defun howm-buffer-alive-p (buf) + (and buf (buffer-name buf))) + +(defun howm-menu-keyword-p (keyword) + (and howm-menu-keyword-regexp + (stringp keyword) ;; perhaps unnecessary + (string-match howm-menu-keyword-regexp keyword))) + +(defun howm-time< (t1 t2) + (or (< (car t1) (car t2)) + (and (= (car t1) (car t2)) + (< (cadr t1) (cadr t2))))) + +(defun howm-menu-invisible-region (beg end) + (if howm-menu-invisible + (put-text-property beg end 'invisible t) + (delete-region beg end)) +;; (put-text-property beg end 'intangible t) + ) + +;;; howm-menu.el ends here diff --git a/howm-misc.el b/howm-misc.el new file mode 100644 index 0000000..97d7112 --- /dev/null +++ b/howm-misc.el @@ -0,0 +1,1084 @@ +;;; howm-misc.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-misc.el,v 1.96 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;;-------------------------------------------------------------------- + +(provide 'howm-misc) +(require 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Misc. + +(defun howm-version () + (interactive) + (message "howm-%s" howm-version)) + +(defun howm-keyword-file () + ;; create .howm-keys + (when (not (file-exists-p howm-keyword-file)) + (save-excursion + (find-file howm-keyword-file) + (when howm-menu-top + (goto-char (point-min)) + (insert howm-menu-top "\n")) + (set-buffer-modified-p t) + (save-buffer) + (kill-buffer nil) + (message "Generating %s ..." howm-keyword-file) + (howm-keyword-add-items (howm-all-items)) + (message "Done."))) + howm-keyword-file) + +(add-hook 'howm-view-open-hook 'howm-set-mode) +(defun howm-set-mode () + (when (howm-set-mode-p) + (howm-set-configuration-for-major-mode major-mode) + (howm-mode 1))) + +(defun howm-set-mode-p (&optional buf) + (with-current-buffer (or buf (current-buffer)) + (let ((hdir (car (howm-search-path)))) + (and (buffer-file-name) + (howm-folder-territory-p hdir (buffer-file-name)))))) + +(defvar howm-configuration-for-major-mode nil) +;; ;; sample +;; (setq howm-configuration-for-major-mode +;; '( +;; ;; fix me +;; (emacs-lisp-mode +;; . ( +;; (howm-keyword-format . "(def[a-z*]+ +%s[ \t\r\n]") +;; (howm-keyword-regexp-format . "%s") +;; (howm-keyword-regexp . "(\\(def[a-z]+\\) +'?\\([-+=*/_~!@$%^&:<>{}?a-zA-Z0-9]+\\)") ;; ' for (defalias 'xxx ...) +;; (howm-keyword-regexp-hilit-pos . 1) +;; (howm-keyword-regexp-pos . 2) +;; (howm-view-title-regexp . "^(.*$") +;; ;; (howm-view-title-regexp . "^[^; \t\r\n].*$") +;; (howm-view-title-regexp-pos . 0) +;; (howm-view-title-regexp-grep . "^[^; \t\r\n].*$") +;; (howm-mode-title-face . nil) +;; (howm-keyword-list-alias-sep . nil) +;; (howm-view-preview-narrow . nil) +;; )) +;; (scheme-mode +;; . ( +;; (howm-keyword-format . "(def[a-z]+ +[(]?%s[) \t\r\n]") +;; (howm-keyword-regexp-format . "%s") +;; (howm-keyword-regexp . "(\\(def[a-z]+\\) +[(]?\\([-+=*/_~!@$%^&:<>{}?a-zA-Z0-9]+\\)") +;; (howm-keyword-regexp-hilit-pos . 1) +;; (howm-keyword-regexp-pos . 2) +;; (howm-view-title-regexp . "^[^; \t\r\n].*$") +;; (howm-view-title-regexp-pos . 0) +;; (howm-view-title-regexp-grep . "^[^; \t\r\n].*$") +;; (howm-mode-title-face . nil) +;; (howm-keyword-list-alias-sep . nil) +;; (howm-view-preview-narrow . nil) +;; )) +;; (ruby-mode +;; . ( +;; (howm-keyword-format . "\\(def\\|class\\) +%s\\b") +;; (howm-keyword-regexp-format . "%s") +;; (howm-keyword-regexp . "\\(def\\|class\\) +\\([-+=*/_~!@$%^&:<>{}?a-zA-Z0-9]+\\)") +;; (howm-keyword-regexp-hilit-pos . 1) +;; (howm-keyword-regexp-pos . 2) +;; (howm-view-title-regexp . "^[^# \t\r\n].*$") +;; (howm-view-title-regexp-pos . 0) +;; (howm-view-title-regexp-grep . "^[^# \t\r\n].*$") +;; (howm-mode-title-face . nil) +;; (howm-keyword-list-alias-sep . nil) +;; (howm-view-preview-narrow . nil) +;; )) +;; (yatex-mode +;; . ( +;; (howm-keyword-format . "\\\\label%s") +;; (howm-keyword-regexp-format . "%s") +;; (howm-keyword-regexp . "\\(\\\\label\\)\\({[^}\r\n]+}\\)") +;; (howm-keyword-regexp-hilit-pos . 1) +;; (howm-keyword-regexp-pos . 2) +;; (howm-view-title-regexp . "\\\\\\(\\(sub\\)*section\\|chapter\\|part\\|begin\\)") +;; (howm-view-title-regexp-pos . 0) +;; (howm-view-title-regexp-grep . "\\\\((sub)*section|chapter|part|begin)") +;; (howm-mode-title-face . nil) +;; (howm-keyword-list-alias-sep . nil) +;; (howm-view-preview-narrow . nil) +;; )) +;; )) + +(defun howm-set-configuration-for-file-name (f) + (let ((mode (howm-auto-mode f))) + (howm-set-configuration-for-major-mode mode))) + +(defun howm-set-configuration-for-major-mode (mode) + (let ((a (cdr (assoc mode howm-configuration-for-major-mode)))) + (when a ;; I know this is redundant. + (mapc (lambda (sv) + (let ((symbol (car sv)) + (value (cdr sv))) + (set (make-local-variable symbol) value))) + a)))) + +(defmacro howm-if-unbound (var &rest alt-body) + `(if (boundp ',var) ,var ,@alt-body)) + +;; copied and modified from set-auto-mode in /usr/share/emacs/21.2/lisp/files.el +;; (I don't want to set the mode actually. Sigh...) +(howm-dont-warn-free-variable auto-mode-interpreter-regexp) +(defvar howm-auto-mode-interpreter-regexp + (howm-if-unbound auto-mode-interpreter-regexp + ;; xemacs doesn't have it. + "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)")) +(defun howm-auto-mode (&optional file-name) + "Major mode appropriate for current buffer. +This checks for a -*- mode tag in the buffer's text, +compares the filename against the entries in `auto-mode-alist', +or checks the interpreter that runs this file against +`interpreter-mode-alist'. + +It does not check for the `mode:' local variable in the +Local Variables section of the file; for that, use `hack-local-variables'. + +If `enable-local-variables' is nil, this function does not check for a +-*- mode tag. + +This function merely returns the mode; it does not set the mode. +" + ;; Look for -*-MODENAME-*- or -*- ... mode: MODENAME; ... -*- + (let (beg end done modes ans) + (save-excursion + (goto-char (point-min)) + (skip-chars-forward " \t\n") + (and enable-local-variables + ;; Don't look for -*- if this file name matches any + ;; of the regexps in inhibit-first-line-modes-regexps. + (let ((temp (howm-if-unbound inhibit-first-line-modes-regexps + inhibit-local-variables-regexps)) + (name (file-name-sans-versions (or file-name "")))) + (while (let ((sufs (howm-if-unbound inhibit-first-line-modes-suffixes + inhibit-local-variables-suffixes))) + (while (and sufs (not (string-match (car sufs) name))) + (setq sufs (cdr sufs))) + sufs) + (setq name (substring name 0 (match-beginning 0)))) + (while (and temp + (not (string-match (car temp) name))) + (setq temp (cdr temp))) + (not temp)) + (search-forward "-*-" (save-excursion + ;; If the file begins with "#!" + ;; (exec interpreter magic), look + ;; for mode frobs in the first two + ;; lines. You cannot necessarily + ;; put them in the first line of + ;; such a file without screwing up + ;; the interpreter invocation. + (end-of-line (and (looking-at "^#!") 2)) + (point)) t) + (progn + (skip-chars-forward " \t") + (setq beg (point)) + (search-forward "-*-" + (save-excursion (end-of-line) (point)) + t)) + (progn + (forward-char -3) + (skip-chars-backward " \t") + (setq end (point)) + (goto-char beg) + (if (save-excursion (search-forward ":" end t)) + ;; Find all specifications for the `mode:' variable + ;; and execute them left to right. + (while (let ((case-fold-search t)) + (or (and (looking-at "mode:") + (goto-char (match-end 0))) + (re-search-forward "[ \t;]mode:" end t))) + (skip-chars-forward " \t") + (setq beg (point)) + (if (search-forward ";" end t) + (forward-char -1) + (goto-char end)) + (skip-chars-backward " \t") + (push (intern (concat (downcase (buffer-substring beg (point))) "-mode")) + modes)) + ;; Simple -*-MODE-*- case. + (push (intern (concat (downcase (buffer-substring beg end)) + "-mode")) + modes))))) + ;; If we found modes to use, set done. + (dolist (mode (nreverse modes)) + (when (functionp mode) + (setq ans mode) + (setq done t))) + ;; If we didn't find a mode from a -*- line, try using the file name. + (if (and (not done) file-name) + (let ((name file-name) + (keep-going t)) + ;; Remove backup-suffixes from file name. + (setq name (file-name-sans-versions name)) + (while keep-going + (setq keep-going nil) + (let ((alist auto-mode-alist) + (mode nil)) + ;; Find first matching alist entry. + (let ((case-fold-search + (memq system-type '(vax-vms windows-nt)))) + (while (and (not mode) alist) + (if (string-match (car (car alist)) name) + (if (and (consp (cdr (car alist))) + (nth 2 (car alist))) + (setq mode (car (cdr (car alist))) + name (substring name 0 (match-beginning 0)) + keep-going t) + (setq mode (cdr (car alist)) + keep-going nil))) + (setq alist (cdr alist)))) + (if mode + (setq ans mode) + ;; If we can't deduce a mode from the file name, + ;; look for an interpreter specified in the first line. + ;; As a special case, allow for things like "#!/bin/env perl", + ;; which finds the interpreter anywhere in $PATH. + (let ((interpreter + (save-excursion + (goto-char (point-min)) + (if (looking-at howm-auto-mode-interpreter-regexp) + (match-string 2) + ""))) + elt) + ;; Map interpreter name to a mode. + (setq elt (assoc (file-name-nondirectory interpreter) + interpreter-mode-alist)) + (if elt + (setq ans (cdr elt))))))))) + ans + )) + +;; copied from /usr/share/emacs/21.2/lisp/subr.el +;; for emacs20 and xemacs +(when (not (fboundp 'replace-regexp-in-string)) + (defun replace-regexp-in-string (regexp rep string &optional + fixedcase literal subexp start) + "Replace all matches for REGEXP with REP in STRING. + +Return a new string containing the replacements. + +Optional arguments FIXEDCASE, LITERAL and SUBEXP are like the +arguments with the same names of function `replace-match'. If START +is non-nil, start replacements at that index in STRING. + +REP is either a string used as the NEWTEXT arg of `replace-match' or a +function. If it is a function it is applied to each match to generate +the replacement passed to `replace-match'; the match-data at this +point are such that match 0 is the function's argument. + +To replace only the first match (if any), make REGEXP match up to \\' +and replace a sub-expression, e.g. + (replace-regexp-in-string \"\\(foo\\).*\\'\" \"bar\" \" foo foo\" nil nil 1) + => \" bar foo\" +" + + ;; To avoid excessive consing from multiple matches in long strings, + ;; don't just call `replace-match' continually. Walk down the + ;; string looking for matches of REGEXP and building up a (reversed) + ;; list MATCHES. This comprises segments of STRING which weren't + ;; matched interspersed with replacements for segments that were. + ;; [For a `large' number of replacments it's more efficient to + ;; operate in a temporary buffer; we can't tell from the function's + ;; args whether to choose the buffer-based implementation, though it + ;; might be reasonable to do so for long enough STRING.] + (let ((l (length string)) + (start (or start 0)) + matches str mb me) + (save-match-data + (while (and (< start l) (string-match regexp string start)) + (setq mb (match-beginning 0) + me (match-end 0)) + ;; If we matched the empty string, make sure we advance by one char + (when (= me mb) (setq me (min l (1+ mb)))) + ;; Generate a replacement for the matched substring. + ;; Operate only on the substring to minimize string consing. + ;; Set up match data for the substring for replacement; + ;; presumably this is likely to be faster than munging the + ;; match data directly in Lisp. + (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 subexp) + (cons (substring string start mb) ; unmatched prefix + matches))) + (setq start me)) + ;; Reconstruct a string from the pieces. + (setq matches (cons (substring string start l) matches)) ; leftover + (apply #'concat (nreverse matches))))) + ) + +(howm-defvar-risky howm-kill-all-enable-force nil) +(defun howm-kill-all (&optional force-p) + "Kill all buffers which is howm-mode and unmodified." + (interactive "P") + (let ((anyway (and force-p howm-kill-all-enable-force))) + (when (if anyway + (yes-or-no-p "Discard all unsaved changes on howm-mode buffers? ") + (y-or-n-p "Kill all howm-mode buffers? ")) + (when (eq major-mode 'howm-view-summary-mode) + (howm-view-restore-window-configuration)) + (mapc (lambda (b) + (when (howm-buffer-p b) + (when anyway + (switch-to-buffer b) + (set-buffer-modified-p nil)) ;; dangerous! + (when (not (buffer-modified-p b)) + (kill-buffer b)))) + (buffer-list)) + (message "Done.")))) + +(defun howm-toggle-buffer () + (interactive) + (if (howm-buffer-p) + (howm-switch-to-nonhowm-buffer) + (howm-switch-to-howm-buffer))) +(defun howm-switch-to-howm-buffer () + (interactive) + (let ((b (howm-find-buffer #'howm-buffer-p))) + (if b + (switch-to-buffer b) + (howm-menu)))) +(defun howm-switch-to-nonhowm-buffer () + (interactive) + (switch-to-buffer (or (howm-find-buffer #'(lambda (b) + (not (howm-buffer-p b)))) + (error "No nonhowm buffer")))) + +(defun howm-find-buffer (pred) + (catch :found + (mapc (lambda (b) + (cond ((howm-internal-buffer-p b) nil) ;; skip + ((funcall pred b) (throw :found b)) + (t t))) + (buffer-list)) + nil)) + +(defun howm-internal-buffer-p (buf) + (string= (substring (buffer-name buf) 0 1) " ")) + +(defun howm-buffer-p (&optional buf) + (let* ((indep-dirs (cons nil *howm-independent-directories*)) + (keyword-bufs (mapcar + (lambda (d) + (let ((default-directory (or d default-directory))) + (howm-keyword-buffer))) + indep-dirs))) + (with-current-buffer (or buf (current-buffer)) + (or howm-mode + (member major-mode + '(howm-view-summary-mode + howm-view-contents-mode)) + (member buf keyword-bufs))))) + +(defun howm-mode-add-font-lock () + (cheat-font-lock-append-keywords (howm-mode-add-font-lock-internal))) + +(defun howm-mode-add-font-lock-internal () + (when howm-use-color + `(,@howm-user-font-lock-keywords + (,howm-view-title-regexp + (0 howm-mode-title-face prepend)) + (,howm-keyword-regexp + (,howm-keyword-regexp-hilit-pos howm-mode-keyword-face prepend)) + (,howm-ref-regexp + (,howm-ref-regexp-hilit-pos howm-mode-ref-face prepend)) + (,howm-wiki-regexp + (,howm-wiki-regexp-pos howm-mode-wiki-face prepend)) + ))) + +;;; unofficial. may be removed if no one needs them. + +(defun howm-show-buffer-as-howm () + (interactive) + (let* ((name (buffer-name)) + (pos (point)) + (s (buffer-substring-no-properties (point-min) (point-max))) + (b (get-buffer-create (format "*howm[%s]*" name)))) + (set-buffer b) + (howm-rewrite-read-only-buffer + (insert s) + (howm-mode 1) + (howm-initialize-buffer)) + (goto-char pos) + (switch-to-buffer b))) + +;;; narrowing + +(defun howm-narrow-to-memo () + (interactive) + (apply #'narrow-to-region (howm-view-paragraph-region t))) + +(defun howm-toggle-narrow () + (interactive) + (if (howm-narrow-p) + (widen) + (howm-narrow-to-memo))) + +(put 'howm-narrow-to-memo 'disabled t) +(put 'howm-toggle-narrow 'disabled t) + +(defun howm-narrow-p () + (let ((b (point-min)) + (e (point-max))) + (save-restriction + (widen) + (not (and (equal b (point-min)) + (equal e (point-max))))))) + +(defun howm-auto-narrow () + (when (cond (*howm-view-item-privilege* nil) + ((eq howm-auto-narrow t) t) + (t (member (howm-command) howm-auto-narrow))) + (howm-narrow-to-memo))) +;; (when (and (member (howm-command) howm-auto-narrow) +;; (not *howm-view-item-privilege*)) + +;;; select file for new memo by hand + +(defun howm-create-interactively (&optional use-current-directory) + (interactive "P") + (find-file (read-file-name "Memo file: " + (if use-current-directory + nil + howm-directory))) + (goto-char (point-max)) + (howm-create-here)) + +;;; next/previous memo + +(defmacro howm-save-narrowing (&rest body) + (declare (indent 0)) + `(let ((narrowp (howm-narrow-p))) + (when narrowp + (widen)) + (unwind-protect + (progn + ,@body) + (when narrowp + (howm-narrow-to-memo))))) + +(defun howm-next-memo (n) + (interactive "p") + (howm-save-narrowing + (when (looking-at howm-view-title-regexp) + (setq n (+ n 1))) + (re-search-forward howm-view-title-regexp nil nil n))) + +(defun howm-previous-memo (n) + (interactive "p") + (howm-save-narrowing + (when (not (looking-at howm-view-title-regexp)) + (setq n (+ n 1))) + (re-search-backward howm-view-title-regexp nil nil n))) + +(defun howm-first-memo () + (interactive) + (howm-save-narrowing + (goto-char (point-min)))) + +(defun howm-last-memo () + (interactive) + (howm-save-narrowing + (goto-char (point-max))) + (re-search-backward howm-view-title-regexp)) + +;;; random walk + +(defvar howm-random-walk-buf nil "for internal use") +(defvar howm-random-walk-ro t "for internal use") + +(defun howm-random-walk () + (interactive) + (let ((orig-bufs (buffer-list)) + (howm-history-file nil)) + (while (let ((v (frame-visible-p (selected-frame)))) + (and v (not (eq v 'icon)) + (not (input-pending-p)))) + (unwind-protect + (cond ((eq major-mode 'howm-view-summary-mode) + (howm-random-walk-summary)) + (howm-mode + (howm-random-walk-text)) + (t + (howm-list-all) + (howm-random-walk-summary))) + (mapc (lambda (b) + (when (and (not (member b orig-bufs)) + (null (get-buffer-window b))) + (kill-buffer b))) + (buffer-list))) + (sit-for howm-random-walk-wait)))) + +(defun howm-random-walk-summary () + (let ((n (length (riffle-item-list)))) + (goto-char (point-min)) + (forward-line (random n)) + (howm-view-summary-check) + (sit-for howm-random-walk-wait) + (howm-view-summary-open))) + +(defun howm-random-walk-text () + (let* ((ks (howm-keyword-for-goto)) + (k (nth (random (length ks)) ks)) + (d (- (point-max) (point-min)))) + (goto-char (+ (point-min) (random d))) + (if (search-forward k nil t) + (goto-char (match-beginning 0)) + (search-backward k nil t)) + (sit-for howm-random-walk-wait) + (howm-keyword-search k))) + +;; named note + +(defun howm-open-named-file () + "Ask a file name and open it as howm note if it is under howm directory." + (interactive) + (let* ((item-dir (lambda (item) (file-name-directory (howm-item-name item)))) + (dir (cond ((eq major-mode 'howm-view-summary-mode) + (funcall item-dir (howm-view-summary-current-item))) + ((eq major-mode 'howm-view-contents-mode) + (funcall item-dir (howm-view-contents-current-item))) + (t + howm-directory))) + (fname (read-file-name "Howm file name: " dir))) + (find-file fname) + (if (file-exists-p fname) + (howm-set-mode) + (progn + (howm-insert-template "") + (howm-create-finish))))) + +;; imitation of remember.el +;; http://www.emacswiki.org/cgi-bin/emacs-en/RememberMode + +;; shamelessly copied from http://newartisans.com/johnw/Emacs/remember.el +;; (I cannot browse http://sacha.free.net.ph/notebook/emacs/dev today.) + +(defvar howm-remember-wconf nil + "for internal use") +(defvar howm-remember-buffer-name "*howm-remember*") +(defvar howm-remember-mode-hook nil) +(let ((m (make-sparse-keymap))) + (define-key m "\C-c\C-c" 'howm-remember-submit) + (define-key m "\C-c\C-k" 'howm-remember-discard) + (howm-defvar-risky howm-remember-mode-map m)) + +(defun howm-remember () + "Add text to new note in howm." + (interactive) + (setq howm-remember-wconf (current-window-configuration)) + (switch-to-buffer-other-window (get-buffer-create howm-remember-buffer-name)) + (howm-remember-mode) + (apply #'message + `("Remember (%s) or discard (%s)." + ,@(mapcar (lambda (f) + (key-description + (where-is-internal f howm-remember-mode-map t))) + '(howm-remember-submit howm-remember-discard))))) + +(defun howm-remember-mode () + "Major mode for `howm-remember'. + +\\{howm-remember-mode-map}" + (interactive) + (kill-all-local-variables) + (text-mode) + (use-local-map howm-remember-mode-map) + (setq major-mode 'howm-remember-mode + mode-name "HowmRemember") + (run-hooks 'howm-remember-mode-hook)) + +(defun howm-remember-submit () + (interactive) + (save-excursion + (let* ((title (howm-remember-get-title)) ;; has side effect + (s (buffer-substring-no-properties (point-min) (point-max)))) + (set-window-configuration howm-remember-wconf) + (howm-create-file-with-title title) + (insert s "\n") + (save-buffer) + (kill-buffer (current-buffer)))) + (howm-remember-discard)) + +(defun howm-remember-get-title () + (if (not howm-remember-first-line-to-title) + "" + (progn + (goto-char (point-min)) + (prog1 + (buffer-substring-no-properties (point-min) + (line-end-position)) + (forward-line 1) + (delete-region (point-min) (point)))))) + +(defun howm-remember-discard () + (interactive) + (kill-buffer (current-buffer)) + (set-window-configuration howm-remember-wconf)) + +;; Rename buffer +;; +;; You can rename howm buffers based on their titles. +;; Only buffer names in emacs are changed; file names are kept unchanged. +;; +;; Add the next lines to your .emacs if you like this feature. +;; (add-hook 'howm-mode-hook 'howm-mode-set-buffer-name) +;; (add-hook 'after-save-hook 'howm-mode-set-buffer-name) +;; +;; The original idea and code are given by Mielke-san (peter at exegenix.com). +;; http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000020.html +;; thx! + +(defvar howm-buffer-name-limit 20) +(defvar howm-buffer-name-total-limit howm-buffer-name-limit) +(defvar howm-buffer-name-format "%s" + "Buffer name format for `howm-mode-set-buffer-name'. +For example, buffer name is _ABC_ if title is ABC and the value of +this variable is \"_%s_\".") + +(defun howm-truncate-string (string limit &optional dots-str) + "Truncate STRING if it is longer than LIMIT. +For example, \"1234567...\" is returned if string is \"123456789012\" +and limit is 10. +When DOTS-STR is non-nil, it is used instead of \"...\"." + (let ((dots (or dots-str "..."))) + (when (> (length dots) limit) + (setq dots (substring dots 0 limit))) + (if (> (length string) limit) + (concat (substring string 0 (- limit (length dots))) + dots) + string))) + +(defun howm-set-buffer-name-from-title (checker title-regexp title-regexp-pos) + "Set the buffer name to the title(s) of the file." + (when (funcall checker) + (save-excursion + (goto-char 0) + (let ((titles nil)) + (while (re-search-forward title-regexp nil t) + (setq titles + (cons (match-string-no-properties title-regexp-pos) + titles))) + (let ((name0 (mapconcat + (lambda (s) + (howm-truncate-string s howm-buffer-name-limit)) + (reverse (cl-remove-if (lambda (s) (string= s "")) + titles)) + "/"))) + (when (not (string= name0 "")) ;; exclude "no title" case + (let ((name (format howm-buffer-name-format + (howm-truncate-string + name0 + howm-buffer-name-total-limit)))) + (rename-buffer name t)))))))) + +(defun howm-mode-set-buffer-name () + (howm-set-buffer-name-from-title (lambda () + (and howm-mode (buffer-file-name))) + howm-view-title-regexp + howm-view-title-regexp-pos)) + +;; memoize: used in howm-bayesian-set + +(defun howm-memoize-put (fname value) + (put fname 'howm-memoize value)) +(defun howm-memoize-get (fname) + (get fname 'howm-memoize)) + +(defun howm-memoize-call (fname func args) + (let* ((p (assoc args (howm-memoize-get fname)))) + (if p + (progn +;; (message "hit %s" p) + (cdr p)) + (let ((r (apply func args))) + ;; We need to get it again because func can change memory. + (howm-memoize-put fname `((,args . ,r) ,@(howm-memoize-get fname))) + r)))) + +(defun howm-memoize-reset (fname) + (howm-memoize-put fname nil)) + +(defmacro howm-defun-memoize (fname args &rest body) + (declare (indent 2)) + `(progn + (howm-memoize-reset ',fname) + (defun ,fname ,args + "Function generated by `howm-defun-memoize'" + (howm-memoize-call ',fname (lambda ,args ,@body) (list ,@args))))) + +;; ;; test +;; (howm-memoize-reset 'fib) +;; (howm-defun-memoize fib (n) (if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2))))) +;; (fib 5) +;; (howm-memoize-get 'fib) + +;; Bayesian set +;; +;; "M-x howm-bayesian-set RET lisp scheme haskell RET" to estimate +;; related keywords with lisp, scheme, and haskell. +;; If you are lucky, you may find ruby, elisp, gauche, etc. +;; in estimated candidates. +;; +;; (ref.) +;; Zoubin Ghahramani and Katherine Heller: "Bayesian Sets", +;; Advances in Neural Information Processing Systems, +;; Vol. 18, pp. 435-442, MIT Press, 2006. +;; http://books.nips.cc/nips18.html +;; http://books.nips.cc/papers/files/nips18/NIPS2005_0712.pdf + +(defun howm-bset-nodup (f &rest args) + (cl-remove-duplicates (apply f args) :test #'equal)) +(defun howm-bset-mapcar (func lis) + (howm-bset-nodup #'mapcar func lis)) +(defun howm-bset-mapcan (func lis) + (howm-bset-nodup (lambda (f z) (apply #'append (mapcar f z))) + func lis)) + +(defun howm-bset-message (&rest args) + (let (message-log-max) ;; prevent it from being logged + (apply #'message args))) + +(defun howm-bset-matched-files (query) +;; (howm-bset-message "Finding files for query (%s)..." query) + (howm-bset-mapcar #'howm-item-name + (howm-view-search-folder-items query (howm-folder) + nil t))) + +(howm-defun-memoize howm-bset-keywords-in-file* (file keyword-list) +;; (howm-bset-message "Finding keywords in file (%s)..." file) + (with-temp-buffer + (insert-file-contents file) + (howm-keyword-for-goto keyword-list))) + +(defun howm-bset-keywords-in-file (file) + (howm-bset-keywords-in-file* file nil)) + +(defun howm-bset-candidate-keywords (query-list) +;; (howm-bset-message "Collecting keywords...") + (let ((files (howm-bset-mapcan #'howm-bset-matched-files + query-list))) + (howm-bset-mapcan (lambda (f) + (howm-bset-message "Collecting keywords in file (%s)..." + f) + (howm-bset-keywords-in-file f)) + files))) + +(howm-defun-memoize howm-bset-file-score (file query-list + coef number-of-all-keywords) +;; (howm-bset-message "Scoring file (%s)..." file) + (let* ((m (/ (length (howm-bset-keywords-in-file file)) + (float number-of-all-keywords))) + (a (* coef m)) + (b (* coef (- 1 m))) + (s (length (howm-bset-keywords-in-file* file query-list))) + (a2 (+ a s)) + (b2 (+ b (- (length query-list) s)))) + ;; log{(a2/a) * (b/b2)} + (- (- (log a2) (log a)) (- (log b2) (log b))))) + +(howm-defun-memoize howm-bset-keyword-score (keyword query-list + coef + number-of-all-keywords) + (howm-bset-message "Scoring keyword (%s)..." keyword) + (apply #'+ + (mapcar (lambda (file) + (howm-bset-file-score file query-list coef + number-of-all-keywords)) + (howm-bset-matched-files keyword)))) + +(defun howm-bset-reset () + (mapc #'howm-memoize-reset '(howm-bset-file-score + howm-bset-keyword-score + howm-bset-keywords-in-file*))) + +(defun howm-bset (query-list) + (howm-bset-reset) + (unwind-protect + (let ((n (length (howm-keyword-list))) + (c 2.0)) ;; heuristic value + (sort (copy-sequence (howm-bset-candidate-keywords query-list)) + (lambda (k1 k2) + (apply #'> + (mapcar (lambda (k) + (howm-bset-keyword-score k query-list c n)) + (list k1 k2)))))) + (howm-bset-reset))) + +(defun howm-bayesian-set (query-str) + (interactive "sQueries: ") + (switch-to-buffer (get-buffer-create "*howm-bayesian-set*")) + (howm-rewrite-read-only-buffer + (insert (mapconcat #'identity + (howm-bset (split-string query-str)) + "\n")) + (howm-mode 1)) + (goto-char (point-min)) + (howm-bset-message "Done.")) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Fellowship + +;; xemacs: add-to-list doesn't have APPEND +;; (add-to-list 'auto-mode-alist '("\\.howm$" . text-mode) t) +(setq auto-mode-alist (append auto-mode-alist + (list '("\\.howm$" . text-mode)))) + +;; xyzzy doesn't have eval-after-load. +;; It will be useless anyway. +(when (not (fboundp 'eval-after-load)) + (defun eval-after-load (file form) + nil)) + +;; xemacs canna doesn't use minor-mode. [2004-01-30] +(defvar action-lock-mode-before-canna nil) +(make-variable-buffer-local 'action-lock-mode-before-canna) +(defadvice canna:enter-canna-mode (around action-lock-fix activate) + (setq action-lock-mode-before-canna action-lock-mode) + (setq action-lock-mode nil) + ad-do-it) +(defadvice canna:quit-canna-mode (around action-lock-fix activate) + (setq action-lock-mode action-lock-mode-before-canna) + ad-do-it) + +;; for mcomplete.el [2003-12-17] +;; http://homepage1.nifty.com/bmonkey/emacs/elisp/mcomplete.el +;; error when this-command is (lambda () (interactive) ...) +(defadvice mcomplete-p (around symbol-check activate) + (and (symbolp this-command) + ad-do-it)) + +;; for auto-save-buffers.el [2004-01-10] +;; http://www.namazu.org/~satoru/auto-save/ +;; http://homepage3.nifty.com/oatu/emacs/misc.html +;; http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=auto%20save +(defvar howm-auto-save-buffers-disposed nil) +(howm-dont-warn-free-variable auto-save-buffers-regexp) +(howm-dont-warn-free-variable auto-save-reject-buffers-regexp) +(defun howm-auto-save-buffers-p () + (let ((f (howm-file-name))) + (and (if (boundp 'auto-save-buffers-regexp) + (string-match auto-save-buffers-regexp f) + nil) + (if (boundp 'auto-save-reject-buffers-regexp) + (not (string-match auto-save-reject-buffers-regexp f)) + t)))) +(defun howm-auto-save-buffers-dispose () + (setq howm-menu-refresh-after-save nil) + (setq howm-refresh-after-save nil) + (setq howm-auto-save-buffers-disposed t) + (message "howm: Automatic refresh is disabled when auto-save-buffers is called.")) +(defadvice auto-save-buffers (around howm-dispose activate) + (if (or howm-auto-save-buffers-disposed + (not (howm-auto-save-buffers-p))) + ad-do-it + (howm-auto-save-buffers-dispose))) + +;; howm on ChangeLog Memo +(defun howm-setup-change-log () + (setq howm-keyword-format "\t* %s") + (setq howm-keyword-regexp "^\t\\(\\*\\)[ \t]+\\([^:\r\n]+\\)") + (setq howm-keyword-regexp-hilit-pos 1) ;; ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×ÍÑ + (setq howm-keyword-regexp-pos 2) + (setq howm-view-title-regexp "^$") + (setq howm-view-title-regexp-pos 0) + (setq howm-view-title-regexp-grep 'sorry-not-yet) + (setq howm-use-color nil) + (setq howm-menu-top nil) + (defadvice howm-exclude-p (around change-log (filename) activate) + (setq ad-return-value + (not (find-if (lambda (dir) + (string= (howm-file-name) + (file-relative-name filename dir))) + (howm-search-path))))) + (defadvice howm-create-file-with-title (around change-log (title) activate) + (howm-create-file) + (when (string-match howm-keyword-regexp title) + (setq title (match-string-no-properties howm-keyword-regexp-pos + title))) + (insert title)) + (defadvice howm-create-file (around change-log + (&optional keep-cursor-p) activate) + (let* ((default (howm-file-name)) + (file (expand-file-name default howm-directory)) + (dir (file-name-directory file)) + (buffer-file-name file)) ;; don't insert file name + (make-directory dir t) + (add-change-log-entry nil file))) + (add-hook 'change-log-mode-hook 'howm-mode) + ) + +;; howm with ChangeLog Memo +(defvar howm-change-log-file-name "ChangeLog") +(defun howm-to-change-log () + (interactive) + (let* ((title (howm-title-at-current-point)) + (file (expand-file-name howm-change-log-file-name howm-directory)) + ;; cheat add-change-log-entry + (buffer-file-name title) + (default-directory howm-directory)) + (add-change-log-entry nil file))) +(defun howm-from-change-log () + (interactive) + (let* ((title-regexp "^\t[*][ \t]*\\(.*\\)$") + (title-regexp-pos 1) + (title (howm-title-at-current-point nil + title-regexp title-regexp-pos))) + (howm-create-file-with-title title))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Bug Report + +;; Japanese is assumed at now. + +(defun howm-test () + "Show bug report template for howm." + (howm-set-lang) + (howm-bug-report)) + +(defun howm-set-lang () + (set-language-environment "Japanese") + (set-default-coding-systems 'euc-jp) + (set-buffer-file-coding-system 'euc-jp-unix) + (set-terminal-coding-system 'euc-jp) + (set-keyboard-coding-system 'euc-jp) + ) + +(defun howm-compiled-p () + (byte-code-function-p (symbol-function 'howm-compiled-p))) +(defun howm-make-file-p () + (eval-when-compile + (getenv "HOWM_MAKE"))) +(defun howm-test-p () + (getenv "HOWM_TEST")) + +(defun howm-bug-report (&optional show-sym) + (interactive "P") + (let ((report-buf (format-time-string "howm-bug-report-%Y%m%d-%H%M%S")) + (template "sample/bug-report.txt")) + (switch-to-buffer report-buf) + (when (not (howm-buffer-empty-p)) + (error "Buffer %s exists (and not empty)." report-buf)) + (if (file-exists-p template) + (insert-file-contents template) + (insert "Please copy the following text to your bug report.\n\n")) + (goto-char (point-max)) + (mapc (lambda (sv) + (insert (format "%s: %s\n" (car sv) (cdr sv)))) + `( + ("howm" . ,(howm-version-long)) + ,@(honest-report-version-assoc) + )) + (when (eq howm-view-use-grep t) + (insert + (format "grep: %s - %s\n" + (cl-mapcan (lambda (d) + (let ((f (expand-file-name + howm-view-grep-command d))) + (and (file-executable-p f) + (list f)))) + exec-path) + (car (howm-call-process "grep" '("--version")))))) + (when show-sym + (goto-char (point-max)) + (insert "\n(List of variables)\n") + (insert (howm-symbols-desc))) + (goto-char (point-min)))) + +(defun howm-version-long () + (format "%s (compile: %s, make: %s, test: %s)" + howm-version + (howm-compiled-p) + (howm-make-file-p) + (howm-test-p))) + +(defun howm-symbols-desc (&optional max-desc-len) + (when (null max-desc-len) + (setq max-desc-len 50)) + (apply #'concat + (mapcar (lambda (sym) + (when (boundp sym) + (let ((v (format "%S" (symbol-value sym)))) + (when (and (numberp max-desc-len) + (< max-desc-len (length v))) + (setq v + (let* ((tl (/ max-desc-len 4)) + (hd (- max-desc-len tl))) + (concat (substring v 0 hd) + " ... " + (substring v (- tl)))))) + (format "%s: %s\n" (symbol-name sym) v)))) + (sort (howm-symbols) + (lambda (x y) + (string< (symbol-name x) (symbol-name y))))))) + +(defvar howm-required-features '( + cheat-font-lock + action-lock + riffle + gfunc + illusion + honest-report + ) + "List of features which are required for, and distributed with, howm itself.") + +(defun howm-prefix-names () + (mapcar #'symbol-name (cons 'howm howm-required-features))) + +(defun howm-symbols () + (let* ((reg (format "^%s" (regexp-opt (howm-prefix-names) t))) + (a nil)) + (mapatoms (lambda (s) + (when (string-match reg (symbol-name s)) + (setq a (cons s a))))) + a)) + +(defun howm-elp () + (interactive) + (mapcar #'elp-instrument-package + (howm-prefix-names))) + +(defvar howm-sample-directory (expand-file-name "sample/") + "for internal use") +(defun howm-bug-shot () + (interactive) + (let* ((version (concat "[howm] " (howm-version-long))) + (init (and (howm-test-p) + (let ((f (expand-file-name "dot.emacs" + howm-sample-directory))) + (and (file-readable-p f) + (with-temp-buffer + (insert-file-contents f) + (buffer-substring-no-properties (point-min) + (point-max))))))) + (header (if init + (concat version "\n\n[init]\n" init) + version)) + (footer "--- your comment ---")) + (honest-report header footer) + (message "Please copy this buffer to your report."))) + +;;; howm-misc.el ends here diff --git a/howm-mkmenu.el b/howm-mkmenu.el new file mode 100644 index 0000000..466adaf --- /dev/null +++ b/howm-mkmenu.el @@ -0,0 +1,73 @@ +;;; howm-mkmenu.el --- Wiki-like note-taking tool +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-mkmenu.el,v 1.11 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +;; emacs -q --no-site-file -batch -l + +(defvar howm-mkmenu-rules + '( + ;; ( [ ]) ==> .el + (howm-menu-en "en/0000-00-00-000000.txt") + (howm-menu-ja "ja/0000-00-00-000000.txt" euc-jp iso-2022-7bit) + )) + +(defmacro howm-mkmenu-insert (&rest clauses) + (declare (indent 0)) + (let ((commands (mapcar (lambda (c) + (let ((format (car c)) + (parameters (cdr c))) + `(insert (format ,(concat format "\n") + ,@parameters)))) + clauses))) + `(progn ,@commands))) + +(defun howm-mkmenu (rule) + (let ((var (car rule)) + (src (cadr rule)) + (opt (cddr rule))) + (let ((dest (concat (symbol-name var) ".el")) + (src-coding (and opt (car opt))) + (dest-coding (and opt (cadr opt)))) + ;; read src + (when (and src-coding (featurep 'mule)) + (prefer-coding-system src-coding)) + (with-temp-buffer + (insert-file-contents src) + (let ((str (buffer-substring-no-properties (point-min) (point-max)))) + ;; write to dest + (find-file dest) + (delete-region (point-min) (point-max)) + (when dest-coding + (set-buffer-file-coding-system dest-coding) + (howm-mkmenu-insert + (";;; -*- Coding: %s -*-" dest-coding))) + (howm-mkmenu-insert + (";;; automatically generated from %s" src) + (";;; by %s.\n" (file-name-nondirectory load-file-name)) + ("(require 'howm-vars)\n") + ("(howm-defconst-risky %s %S)\n" var str) + ("(provide '%s)" var)) + (let ((make-backup-files nil)) + (basic-save-buffer)) + t))))) + +(mapcar #'howm-mkmenu howm-mkmenu-rules) + +;;; howm-mkmenu.el ends here diff --git a/howm-mode.el b/howm-mode.el new file mode 100644 index 0000000..82e5815 --- /dev/null +++ b/howm-mode.el @@ -0,0 +1,1228 @@ +;;; howm-mode.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-mode.el,v 1.318 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;;-------------------------------------------------------------------- + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Backward compatibility + +;; (require 'howm-mode) in .emacs is obsolete. Use (require 'howm) instead. + +;; This must be earlier than (require 'howm-common), because +;; howm-common needs cl, and (require 'cl) should be written in howm.el. +(when (not (featurep 'howm-version)) + (message "Warning: Requiring howm-mode is obsolete. Require howm instead.") +;; (beep) +;; (sit-for 1) + (require 'howm)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Require + +(provide 'howm-mode) +(require 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Customize + +;;; --- level 1 --- + +;; You can easily modify them. + +(howm-defvar-risky howm-template + (concat howm-view-title-header " %title%cursor\n%date %file\n\n") + "Contents of new file. %xxx are replaced with specified items. +If it is a list, -th one is used when you type C-u M-x howm-create. +If it is a function, it is called to get template string with the argument .") +(defvar howm-keyword-header "<<<" + "Header string for declaration of keyword (implicit link).") +(defvar howm-ref-header ">>>" + "Header string for explicit link.") +(defvar howm-lighter " howm" + "Mode line for howm-mode") + +(defvar howm-inhibit-title-file-match t + "If non-nil, inhibit howm-list-title when search string matches file name") +(defvar howm-list-all-title nil) ;; obsolete [2003-11-30] +(defvar howm-list-recent-title nil) ;; obsolete [2003-11-30] + +(defvar howm-default-key-table + '( + ;; ("key" func list-mode-p global-p) + ("r" howm-refresh) + ("l" howm-list-recent t t) + ("a" howm-list-all t t) + ("g" howm-list-grep t t) + ("s" howm-list-grep-fixed t t) + ("m" howm-list-migemo t t) + ("t" howm-list-todo t t) + ("y" howm-list-schedule t t) + ("b" howm-list-buffers t t) + ("x" howm-list-mark-ring t t) + ("o" howm-occur t t) + ("c" howm-create t t) + ("e" howm-remember t t) + ("," howm-menu t t) + ("." howm-find-today nil t) + (":" howm-find-yesterday nil t) + ("A" howm-list-around) + ("h" howm-history nil t) + ("D" howm-dup) + ("i" howm-insert-keyword nil t) + ("d" howm-insert-date nil t) + ("T" howm-insert-dtime nil t) + ("K" howm-keyword-to-kill-ring t t) + ("n" action-lock-goto-next-link) + ("p" action-lock-goto-previous-link) + ("Q" howm-kill-all t t) + (" " howm-toggle-buffer nil t) + ("N" howm-next-memo) + ("P" howm-previous-memo) + ("H" howm-first-memo) + ("L" howm-last-memo) + ("C" howm-create-here nil t) + ("I" howm-create-interactively nil t) + ("w" howm-random-walk nil t) + ("M" howm-open-named-file t t) + ) + "List of (key function list-mode-p global-p). +`howm-prefix' + this key is real stroke. +If optional argument list-mode-p is non-nil, +same key is also available in view mode. +It is further registered globally if global-p is non-nil." + ) + +(howm-defvar-risky howm-migemo-client nil + "Command name of migemo-client. +Try (setq howm-migemo-client \"migemo-client\") for howm-migemo-*.") +(howm-defvar-risky howm-migemo-client-option nil + "List of option for migemo-client. +e.g. (\"-H\" \"::1\")") + +;;; --- level 2 --- + +;; Be careful to keep consistency. + +(howm-defvar-risky howm-keyword/ref-regexp-format + "\\(%s\\)[ \t]*\\([^ \t\r\n].*\\)") +(howm-defvar-risky howm-keyword-format + (format "%s %%s" howm-keyword-header) + "Format for declaration of keyword. See `format'.") +(howm-defvar-risky howm-keyword-regexp + (format howm-keyword/ref-regexp-format (regexp-quote howm-keyword-header))) +(howm-defvar-risky howm-keyword-regexp-hilit-pos 1) +(howm-defvar-risky howm-keyword-regexp-pos 2) +(howm-defvar-risky howm-ref-regexp + (format howm-keyword/ref-regexp-format (regexp-quote howm-ref-header)) + "Regexp for explicit link.") +(howm-defvar-risky howm-ref-regexp-hilit-pos 0 + "Position of search string in `howm-ref-regexp'") +(howm-defvar-risky howm-ref-regexp-pos 2 + "Position of search string in `howm-ref-regexp'") +(howm-defvar-risky howm-wiki-regexp "\\[\\[\\([^]\r\n]+\\)\\]\\]" + "Regexp for explicit link.") +(howm-defvar-risky howm-wiki-regexp-hilit-pos 1 + "Position of hilight in `howm-wiki-regexp'") +(howm-defvar-risky howm-wiki-regexp-pos 1 + "Position of search string in `howm-wiki-regexp'") +(howm-defvar-risky howm-wiki-format "[[%s]]" + "Format for declaration of wiki word. See `format'.") + +(howm-defvar-risky howm-template-rules + '(("%title" . howm-template-title) + ("%date" . howm-template-date) + ("%file" . howm-template-previous-file) + ("%cursor" . howm-template-cursor))) ;; Cursor must be the last rule. +(defvar howm-template-date-format howm-dtime-format + "%date is replaced with `howm-template-date-format' +in `howm-template'. See `format-time-string'") +(defvar howm-template-file-format (concat howm-ref-header " %s") + "%file is replaced with `homw-template-file-format' +in `howm-template'. %s is replaced with name of last file. See `format'.") + +;;; --- level 3 --- + +;; As you like. + +(defun howm-action-lock-general (command regexp pos + &optional hilit-pos + &rest options) + (list regexp + `(lambda (&optional dummy) + (let ((s (match-string-no-properties ,pos))) +;; (when howm-keyword-case-fold-search +;; (setq s (downcase s))) + (,command s ,@options))) + (or hilit-pos 0) + t)) + +(defun howm-action-lock-search (regexp + pos + &optional hilit-pos create-p open-unique-p) + (howm-action-lock-general 'howm-keyword-search + regexp pos hilit-pos create-p open-unique-p)) +(defun howm-action-lock-related (regexp pos hilit-pos) + (howm-action-lock-general 'howm-list-related regexp pos hilit-pos)) + +(defun howm-action-lock-date-rule () + (action-lock-general 'howm-action-lock-date howm-date-regexp 0 0)) + +(defun howm-action-lock-quote-keyword (keyword) + (let ((q (regexp-quote keyword))) + ;; when a regexp is specified, leave unmatched keywords. + (if (and (stringp howm-check-word-break) + (not (string-match howm-check-word-break keyword))) + q + ;; add word break checks + (concat "\\b" q "\\b")))) + +(defun howm-action-lock-setup () + (setq action-lock-case-fold-search howm-keyword-case-fold-search) + (action-lock-mode t) + (let* ((date-al (action-lock-date "{_}" howm-dtime-format))) + ;; override the rule in action-lock.el + (action-lock-add-rules (list date-al) t)) + (let* ((ks (howm-keyword-for-goto)) + (r (mapconcat (if howm-check-word-break + #'howm-action-lock-quote-keyword + #'regexp-quote) + ks "\\|")) + ;; The following optimization causes an error + ;; "Variable binding depth exceeds max-specpdl-size". + ;; (r (cond ((stringp howm-check-word-break) + ;; (mapconcat #'howm-action-lock-quote-keyword ks "\\|")) + ;; (t + ;; (regexp-opt ks (and howm-check-word-break 'word))))) + (wiki (howm-action-lock-search howm-wiki-regexp + howm-wiki-regexp-pos + howm-wiki-regexp-hilit-pos + t)) + (explicit (howm-action-lock-search howm-ref-regexp + howm-ref-regexp-pos + howm-ref-regexp-hilit-pos)) + (implicit (howm-action-lock-search r 0)) + (rev (howm-action-lock-related howm-keyword-regexp + howm-keyword-regexp-pos + howm-keyword-regexp-hilit-pos)) + (date (howm-action-lock-date-rule)) + (done (howm-action-lock-reminder-done-rule)) + (all `( + ,explicit + ,rev + ,@(if ks (list implicit) nil) + ,wiki + ,@(if (howm-menu-p) nil (list date done)) + )) + ) + ;; don't override the rule in action-lock.el + ;; esp. http://xxx should call browser even if "<<< http" exists + (action-lock-add-rules all))) + +(defun howm-file-name (&optional time) + (format-time-string howm-file-name-format + (or time (current-time)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Definitions + +(easy-mmode-define-minor-mode howm-mode + "With no argument, this command toggles the mode. +Non-null prefix argument turns on the mode. +Null prefix argument turns off the mode. + +When the mode is enabled, underlines are drawn on texts which match +to titles of other files. Typing \\[action-lock-magic-return] there, +you can jump to the corresponding file. + +key binding +--- ------- +\\[action-lock-magic-return] Follow link +\\[howm-refresh] Refresh buffer +\\[howm-list-all] List all files +\\[howm-list-grep] Search (grep) +\\[howm-create] Create new file +\\[howm-dup] Duplicate current file +\\[howm-insert-keyword] Insert keyword +\\[howm-insert-date] Insert date +\\[howm-insert-dtime] Insert date with time +\\[howm-keyword-to-kill-ring] Copy current keyword to kill ring +\\[action-lock-goto-next-link] Go to next link +\\[action-lock-goto-previous-link] Go to previous link +\\[howm-next-memo] Go to next entry in current buffer +\\[howm-previous-memo] Go to previous entry in current buffer +\\[howm-first-memo] Go to first entry in current buffer +\\[howm-last-memo] Go to last entry in current buffer +\\[howm-create-here] Add new entry to current buffer +\\[howm-create-interactively] Create new file interactively (not recommended) +\\[howm-random-walk] Browse random entries automtically +" + nil ;; default = off + howm-lighter ;; mode-line + (mapcar (lambda (entry) + (let ((k (car entry)) + (f (cadr entry))) + (cons (concat howm-prefix k) f))) + howm-default-key-table) + ) + +;; emacs20's easy-mmode-define-minor-mode can't have body. sigh... +(add-hook 'howm-mode-on-hook 'howm-initialize-buffer) +(add-hook 'howm-mode-off-hook 'howm-restore-buffer) + +(defun howm-set-keymap () + (mapc (lambda (entry) + (let* ((k (car entry)) + (f (cadr entry)) + (list-mode-p (cl-caddr entry)) + (global-p (cl-cadddr entry)) + (pk (concat howm-prefix k))) + (define-key howm-mode-map pk f) + (when list-mode-p + (mapc (lambda (m) + (define-key m k f) + (define-key m pk f)) + (list howm-view-summary-mode-map + howm-view-contents-mode-map))) + (when global-p + (define-key global-map pk f)))) + howm-default-key-table) + (define-key howm-mode-map "\C-x\C-s" 'howm-save-buffer)) +(howm-set-keymap) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Main functions + +(defun howm-refresh () + (interactive) + (if (howm-menu-p) + (howm-menu-refresh) + (howm-initialize-buffer))) + +(defun howm-initialize-buffer () + (interactive) + (when (not howm-mode) + (error "Not howm-mode")) + (howm-message-time "init-buf" + (save-restriction + (widen) + (howm-set-configuration-for-major-mode major-mode) + (howm-action-lock-setup) + (howm-mode-add-font-lock) + (howm-reminder-add-font-lock) + (cheat-font-lock-fontify) + ;; make-local-hook is obsolete for emacs >= 21.1. + (howm-funcall-if-defined (make-local-hook 'after-save-hook)) + (add-hook 'after-save-hook 'howm-after-save t t)))) + +(defun howm-after-save () + (when howm-mode + (howm-keyword-add-current-buffer) + (when howm-refresh-after-save + (howm-initialize-buffer)) + (when (and howm-menu-refresh-after-save + (> howm-menu-expiry-hours 0)) + (howm-menu-refresh-background)) + (run-hooks 'howm-after-save-hook))) + +(defun howm-restore-buffer () + (action-lock-mode 0)) + +(defun howm-list-all () + (interactive) + (howm-set-command 'howm-list-all) + (howm-normalize-show "" (howm-all-items)) + ;; for backward compatibility + (cond ((howm-list-title-p) t) ;; already done in howm-normalize-show + (howm-list-all-title (howm-list-title-internal)))) + +(defun howm-all-items () + "Returns list of all items in the first search path." + (howm-folder-items (car (howm-search-path)) t)) + +(defun howm-list-recent (&optional days) + (interactive "P") + (howm-set-command 'howm-list-recent) + (let* ((d (or days howm-list-recent-days)) + (now (current-time)) + (from (howm-days-before now d)) + (item-list (howm-folder-items howm-directory t))) + (howm-normalize-show "" (howm-filter-items-by-mtime item-list from now)) + ;; clean me [2003-11-30] + (cond ((howm-list-title-p) t) ;; already done in howm-normalize-show + (howm-list-recent-title (howm-list-title-internal)) + ((not days) (howm-view-summary-to-contents))))) + +;; clean me: direct access to howm-view-* is undesirable. + +(defvar howm-list-title-previous nil + "For internal use") +(make-variable-buffer-local 'howm-list-title-previous) +(defun howm-list-title-put-previous (&optional item-list) + (when howm-list-title-undo + (setq howm-list-title-previous (or item-list (howm-view-item-list))))) +(defun howm-list-title-clear-previous () + (setq howm-list-title-previous nil)) +(defun howm-list-title-get-previous () + (if howm-list-title-undo + (let ((prev howm-list-title-previous)) + (setq howm-list-title-previous nil) + (howm-view-summary-rebuild prev)) + (error "Undo is not enabled."))) +(defun howm-list-title-regexp () + (or howm-list-title-regexp (howm-view-title-regexp-grep))) +(defalias 'howm-list-title 'howm-list-toggle-title) ;; backward compatibility +(defun howm-list-toggle-title (&optional undo) + (interactive "P") + (if (or undo howm-list-title-previous) + (howm-list-title-get-previous) + (howm-list-title-internal))) +(defun howm-list-title-internal () + (let ((b (current-buffer))) + (howm-list-title-put-previous) + (howm-view-list-title (howm-list-title-regexp)) + ;; (howm-view-filter-by-contents (howm-list-title-regexp)) + (let ((c (current-buffer))) + (when (not (eq b c)) + (set-buffer b) + (howm-view-kill-buffer) + (switch-to-buffer c) + (howm-view-summary-check t))))) + +(defun howm-list-title-p () + (let ((a (howm-get-value howm-list-title))) + (cond ((null a) nil) ;; I know this is redundant. + ((listp a) (member (howm-command) a)) + (t a)))) + +(defun howm-days-after (ti days &optional hours) + (let* ((ne (howm-decode-time ti)) + (hour-pos 2) + (day-pos 3) + (nh (nth hour-pos ne)) + (nd (nth day-pos ne))) + (setf (nth hour-pos ne) (+ nh (or hours 0))) + (setf (nth day-pos ne) (+ nd days)) + (apply #'encode-time ne))) + +(defun howm-days-before (ti days) + (howm-days-after ti (- days))) + +(defun howm-list-grep (&optional completion-p) + (interactive "P") + (howm-set-command 'howm-list-grep) + (howm-list-grep-general completion-p)) + +(defun howm-list-grep-fixed () + (interactive) + (howm-set-command 'howm-list-grep-fixed) + (howm-list-grep-general t)) + +(defun howm-list-grep-general (&optional completion-p) + (let* ((regexp (if completion-p + (howm-completing-read-keyword) + (read-from-minibuffer "Search all (grep): ")))) + (when completion-p ;; Goto link works only for fixed string at now. + (howm-write-history regexp)) + (howm-search regexp completion-p))) + +(defun howm-search (regexp fixed-p &optional emacs-regexp filter) + (if (string= regexp "") + (howm-list-all) + (howm-message-time "search" + (let* ((trio (howm-call-view-search-internal regexp fixed-p emacs-regexp)) + (kw (car trio)) + (name (cadr trio)) + (items (cl-caddr trio))) + (when filter + (setq items (funcall filter items))) + (howm-normalize-show name items (or emacs-regexp regexp) nil nil kw) + (howm-record-view-window-configuration))))) + +(defvar *howm-view-window-configuration* nil + "For internal use") +(defun howm-view-window-configuration () + *howm-view-window-configuration*) +(defun howm-set-view-window-configuration (conf) + (setq *howm-view-window-configuration* conf)) +(defun howm-record-view-window-configuration () + (howm-set-view-window-configuration (current-window-configuration))) +(defun howm-restore-view-window-configuration () + (set-window-configuration (howm-view-window-configuration))) +(defun howm-return-to-list () + (interactive) + (howm-restore-view-window-configuration)) + +(defun howm-call-view-search-internal (regexp fixed-p &optional emacs-regexp) + (let ((hilit (if emacs-regexp + `((,emacs-regexp . howm-view-hilit-face)) + nil))) + (howm-view-search-folder-internal regexp (howm-search-path-folder) + nil nil fixed-p hilit))) + +(defun howm-list-migemo (&optional completion-p) + (interactive "P") + (howm-set-command 'howm-list-migemo) + (if completion-p + (howm-list-grep t) + (let* ((roma (read-from-minibuffer "Search all (migemo): ")) + (e-reg (howm-migemo-get-pattern roma "emacs")) + (g-reg (if howm-view-use-grep + (howm-migemo-get-pattern roma "egrep") + e-reg))) + (if (and e-reg g-reg) + (howm-search g-reg nil e-reg) + (message "No response from migemo-client."))))) + +(defun howm-migemo-get-pattern (roma type) + (when (and (null howm-migemo-client) (not howm-view-use-grep)) + (require 'migemo)) + (if (and (featurep 'migemo) (string= type "emacs")) + (howm-funcall-if-defined (migemo-get-pattern roma)) +;; (migemo-get-pattern roma) + (car (howm-call-process (or howm-migemo-client "migemo-client") + `(,@howm-migemo-client-option "-t" ,type ,roma) + 0)))) + +;; (defun howm-migemo-get-pattern (roma type) +;; (when (and (null (howm-migemo-client)) (not howm-view-use-grep)) +;; (require 'migemo)) +;; (if (and (featurep 'migemo) (string= type "emacs")) +;; (howm-funcall-if-defined (migemo-get-pattern roma)) +;; ;; (migemo-get-pattern roma) +;; (car (howm-call-process (howm-migemo-client) +;; `(,@(howm-migemo-client-option) "-t" ,type ,roma) +;; 0)))) + +;; (defun howm-migemo-client () +;; (if (stringp howm-migemo-client) +;; howm-migemo-client +;; (or (car howm-migemo-client) "migemo-client"))) + +;; (defun howm-migemo-client-option () +;; (cdr-safe howm-migemo-client)) + +(defun howm-normalize-oldp () + howm-list-normalizer) + +;; ;; generate conv in howm-normalizer-pair +;; (let ((methods '("random" "name" "numerical-name" "date" "reverse-date" +;; "summary" "reminder" "mtime" "reverse"))) +;; (mapcar (lambda (m) +;; (let ((command +;; (howm-get-symbol nil "howm-view-sort-by-" m)) +;; (internal +;; (howm-get-symbol nil "howm-sort-items-by-" m))) +;; (cons command internal))) +;; methods)) + +(defun howm-normalizer-pair () + (let* ((old howm-list-normalizer) + (new howm-normalizer) + (conv '((howm-view-sort-by-random . howm-sort-items-by-random) + (howm-view-sort-by-name . howm-sort-items-by-name) + (howm-view-sort-by-numerical-name + . howm-sort-items-by-numerical-name) + (howm-view-sort-by-date . howm-sort-items-by-date) + (howm-view-sort-by-reverse-date + . howm-sort-items-by-reverse-date) + (howm-view-sort-by-summary . howm-sort-items-by-summary) + (howm-view-sort-by-reminder . howm-sort-items-by-reminder) + (howm-view-sort-by-mtime . howm-sort-items-by-mtime) + (howm-view-sort-by-reverse . howm-sort-items-by-reverse))) + (p (assoc old conv)) + (q (assoc new conv))) + (when q + (message "Warning: %s is wrong for howm-normalizer. Use %s." (car q) (cdr q)) + (setq new (cdr q))) + (cond ((null old) (cons old new)) + (p (cons nil (cdr p))) + (t (cons old #'identity))))) + +(defmacro howm-with-normalizer (&rest body) + (declare (indent 0)) + (let ((g (cl-gensym))) + `(progn + (when (howm-normalize-oldp) + (message + "Warning: howm-list-normalizer is obsolete. Use howm-normalizer.")) + (let* ((,g (howm-normalizer-pair)) + (howm-list-normalizer (car ,g)) + (howm-normalizer (cdr ,g))) + ,@body)))) + +(defun howm-normalize-show (name item-list + &optional keyword comefrom-regexp no-list-title + fl-keywords) + ;; comefrom-regexp and no-list-title are never used now. [2009-07-23] + (howm-with-normalizer + (if (howm-normalize-oldp) + ;; for backward compatibility. + (progn + (howm-view-summary name item-list fl-keywords) + (howm-list-normalize-old keyword comefrom-regexp no-list-title)) + (let* ((r (howm-normalize item-list keyword + comefrom-regexp no-list-title))) + (howm-call-view-summary name (cdr r) fl-keywords) + (car r))))) + +(defun howm-call-view-summary (name item-list-pair fl-keywords) + (let ((orig (car item-list-pair)) + (entitled (cdr item-list-pair))) + (howm-view-summary name (or entitled orig) fl-keywords) + ;; side effect + (if entitled + (howm-list-title-put-previous orig) + (howm-list-title-clear-previous)))) + +(defun howm-normalize (item-list + &optional keyword comefrom-regexp no-list-title) + ;; no-list-title is never used now. [2009-07-23] + "Sort ITEM-LIST in the standard order." + (let ((matched nil) + (entitled-item-list nil)) + (setq item-list (funcall howm-normalizer item-list)) + (when keyword + (let ((key-reg (or comefrom-regexp + (howm-make-keyword-regexp1 keyword))) + (word-reg (format "\\<%s\\>" + (if (stringp keyword) + (regexp-quote keyword) + (regexp-opt keyword t)))) + (wiki-reg (regexp-quote (howm-make-wiki-string keyword))) + (file-reg (and + (stringp keyword) + (format "^%s$" + (regexp-quote (expand-file-name keyword))))) + (case-fold-search howm-keyword-case-fold-search)) + (cl-labels ((check (tag flag reg &optional tag-when-multi-hits) + (when flag + (let ((r (howm-normalize-check item-list tag reg + tag-when-multi-hits))) + (setq matched (append (car r) matched)) + (setq item-list (cdr r)))))) + ;; not efficient. should I do them at once? + (check 'word howm-list-prefer-word word-reg) + (check 'wiki howm-list-prefer-wiki wiki-reg) + (check 'related-keyword t howm-keyword-regexp) + (check 'keyword t key-reg 'keyword-multi-hits) + (check 'file file-reg file-reg)))) + (when (and (howm-list-title-p) + (not no-list-title) + (not (and (member 'file matched) + howm-inhibit-title-file-match))) + (setq entitled-item-list + (howm-entitle-items (howm-list-title-regexp) item-list))) + (cons matched (cons item-list entitled-item-list)))) + +(defun howm-normalize-check (item-list tag reg tag-when-multi-hits) + (let* ((r (if (eq tag 'file) + (howm-view-lift-by-path-internal item-list reg) + (howm-view-lift-by-summary-internal item-list reg))) + (m (car r)) + (item-list (cdr r)) + (matched (cond ((and tag-when-multi-hits (eq m 'multi)) + (list tag-when-multi-hits tag)) + (m (list tag)) + (t nil)))) + (cons matched item-list))) + +(defun howm-list-normalize-old (&optional keyword comefrom-regexp no-list-title) + "Sort displayed items in the standard order. +This function is obsolete. Use `howm-normalize' insteadly. +--- Sorry, below documentation is incomplete. --- +When KEYWORD is given, matched items are placed on the top. +KEYWORD can be a string or a list of strings. +" + (prog1 + (howm-view-in-background + (howm-list-normalize-subr keyword comefrom-regexp no-list-title)) + (howm-view-summary))) + +(defun howm-list-normalize-subr (keyword comefrom-regexp no-list-title) + "Obsolete. Do not use this any more." + (let ((matched nil)) + (funcall howm-list-normalizer) + (when keyword + (let ((key-reg (or comefrom-regexp + (howm-make-keyword-regexp1 keyword))) + (word-reg (format "\\<%s\\>" + (if (stringp keyword) + (regexp-quote keyword) + (regexp-opt keyword t)))) + (wiki-reg (regexp-quote (howm-make-wiki-string keyword))) + (file-reg (and + (stringp keyword) + (format "^%s$" + (regexp-quote (expand-file-name keyword))))) + (case-fold-search howm-keyword-case-fold-search)) + ;; clean me. + (let ((check (lambda (tag flag reg &optional tag-when-multi-hits) + (when flag + (let ((m (if (eq tag 'file) + (howm-view-lift-by-name nil reg t) + (howm-view-lift-by-summary nil reg)))) + (when m + (setq matched (cons tag matched))) + (when (and tag-when-multi-hits (eq m 'multi)) + (setq matched + (cons tag-when-multi-hits matched)))))))) + (funcall check 'word howm-list-prefer-word word-reg) + (funcall check 'wiki howm-list-prefer-wiki wiki-reg) + (funcall check 'related-keyword t howm-keyword-regexp) + (funcall check 'keyword t key-reg 'keyword-multi-hits) + (funcall check 'file file-reg file-reg)))) + (when (and (howm-list-title-p) + (not no-list-title) + (not (and (member 'file matched) + howm-inhibit-title-file-match))) + (howm-list-title-internal)) + matched)) + +(defun howm-make-keyword-string (keyword) + (format howm-keyword-format keyword)) +(defun howm-make-wiki-string (keyword) + (format howm-wiki-format keyword)) + +;; clean me +(defvar howm-keyword-regexp-format "%s$" + "Format to make entire-match regexp from keyword string. +Default is \"%s$\" because we want to make regexp \"<<< foo$\" +from keyword string \"<<< foo\", +so that we can accept \"<<< foo\" and reject \"<<< foobar\". +We need entire-match in order to +(1) place \"<<< foo\" on the top when \"foo\" is searched, and +(2) judge existence of \"<<< foo\" when [[foo]] is hit.") +(defun howm-make-keyword-regexp1 (keyword) + (howm-make-keyword-regexp-general keyword #'howm-make-keyword-regexp1-sub)) +(defun howm-make-keyword-regexp2 (keyword) + (howm-make-keyword-regexp-general keyword #'howm-make-keyword-regexp2-sub)) +(defun howm-make-keyword-regexp1-sub (keyword) + (format howm-keyword-regexp-format + (regexp-quote (howm-make-keyword-string keyword)))) +(defun howm-make-keyword-regexp2-sub (keyword) + (format howm-keyword-regexp-format + (howm-make-keyword-string (regexp-quote keyword)))) +(defun howm-make-keyword-regexp-general (keyword regexp-generator) + (cond ((stringp keyword) + (funcall regexp-generator keyword)) + ((listp keyword) + (mapconcat (lambda (s) + (concat "\\(" + (funcall regexp-generator s) + "\\)")) + keyword + "\\|")) + (t (error "Wrong type: %s" keyword)))) + +(defun howm-list-related (str) + (howm-set-command 'howm-list-related) + (let* ((keys (mapcar (lambda (k) + (if howm-keyword-case-fold-search + (downcase k) + k)) + (howm-subkeyword str))) + (filter `(lambda (items) + (howm-filter-items-by-summary items ,(regexp-opt keys))))) + ;; Note that regexp-opt returns a regexp for emacs (not for grep). + (howm-search (howm-make-keyword-string ".*") nil nil filter))) + +(defun howm-subkeyword (str) + (with-temp-buffer + (insert str) + (howm-keyword-for-goto))) + +(defun howm-list-around () + (interactive) + (howm-set-command 'howm-list-around) + (let ((f (buffer-file-name)) + (item-list (howm-view-sort-by-reverse-date-internal + (howm-all-items)))) + (let ((howm-normalizer #'identity)) + (howm-normalize-show "" item-list)) + (let ((pos (cl-position-if (lambda (item) + (string= (howm-item-name item) f)) + (howm-view-item-list)))) + (goto-char (point-min)) + (when pos + (forward-line pos))) + (howm-view-summary-check t))) + +(defun howm-history () + (interactive) + (unless (file-exists-p howm-history-file) + (error "No history.")) + ;; disable expansion of %schedule etc. + (let ((howm-menu-display-rules nil)) ;; dirty + (howm-menu-open howm-history-file))) + +;; (defvar howm-history-exclude +;; (let ((strings '("[0-9][0-9][0-9][0-9]" "^[*=] [^ ]"))) +;; `("| %.*%$" +;; ,(mapconcat 'regexp-quote strings "\\|")))) +;; (defun howm-history () +;; (interactive) +;; (howm-menu-open howm-history-file) +;; (howm-edit-read-only-buffer +;; (mapc #'flush-lines +;; howm-history-exclude))) + +(defvar *howm-command* nil + "For internal use") +(defun howm-set-command (com) + (setq *howm-command* com)) +(defun howm-command () + *howm-command*) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Create + +(defun howm-create (&optional which-template here) + (interactive "p") + (let* ((t-c (howm-create-default-title-content)) + (title (car t-c)) + (content (cdr t-c))) + (howm-create-file-with-title title which-template nil here content))) + +(howm-dont-warn-free-variable transient-mark-mode) +(howm-dont-warn-free-variable mark-active) +(defun howm-create-default-title-content () + (let* ((p (point)) + (m (or (mark t) -777)) + (beg (min p m)) + (end (max p m)) + (search-str (howm-view-name))) + (let* ((transient-mark-p (and (boundp 'transient-mark-mode) + transient-mark-mode)) + (mark-active-p (and (boundp 'mark-active) mark-active)) + (active-p (if transient-mark-p + mark-active-p + t)) + (strictly-active-p (and transient-mark-p mark-active-p)) + (title-p (let* ((b (line-beginning-position)) + (e (line-end-position))) + (and active-p + (< 0 beg) (<= b beg) (<= end e) (not (= beg end))))) + (content-p (and strictly-active-p + howm-content-from-region)) + (search-p (and howm-title-from-search + (stringp search-str))) + (s (cond ((or title-p content-p) (buffer-substring-no-properties beg + end)) + (search-p search-str)))) + (cond ((null s) (cons "" "")) + ((eq content-p t) (cons "" s)) + ((or title-p search-p) (cons s "")) + (content-p (cons "" s)) + (t (cons "" "")))))) + +(defun howm-create-here (&optional which-template) + (interactive "p") + (howm-create which-template t)) + +(defun howm-create-file-with-title (title &optional + which-template not-use-file here content) + (let ((b (current-buffer))) + (when (not here) + (howm-create-file)) + (cond ((howm-buffer-empty-p) nil) + ((and here howm-create-here-just) (beginning-of-line)) + (t (howm-create-newline))) + (let ((p (point)) + (insert-f (lambda (switch) + (howm-insert-template (if switch title "") + b which-template (not switch)))) + (use-file (not not-use-file))) + ;; second candidate which appears when undo is called + (let ((end (funcall insert-f not-use-file))) + (save-excursion + (goto-char end) + (insert (or content ""))) + (undo-boundary) + (delete-region p end)) + (funcall insert-f use-file)) + (howm-create-finish))) + +(defun howm-create-finish () + (howm-set-mode) + (run-hooks 'howm-create-hook)) + +(defun howm-create-newline () + (widen) + (if howm-prepend + (howm-create-newline-prepend) + (howm-create-newline-append))) +(defun howm-create-newline-prepend () + (goto-char (point-min))) +(defun howm-create-newline-append () + (goto-char (point-max)) + (delete-blank-lines) + (when (not (= (line-beginning-position) (point))) ;; not empty line + (insert "\n")) + (insert "\n")) + +(defun howm-insert-template (title &optional + previous-buffer which-template not-use-file) + (let* ((beg (point)) + (f (buffer-file-name previous-buffer)) + (af (and f (howm-abbreviate-file-name f)))) + (insert (howm-template-string which-template previous-buffer)) + (let* ((date (format-time-string howm-template-date-format)) + (use-file (not not-use-file)) + (file (cond ((not use-file) "") + ((null f) "") + ((string= f (buffer-file-name)) "") + (t (format howm-template-file-format af))))) + (let ((arg `((title . ,title) (date . ,date) (file . ,file))) + (end (point-marker))) + (howm-replace howm-template-rules arg beg end) + end)))) + +(defvar howm-template-receive-buffer t + "Non nil if howm-template should receive previous-buffer +when howm-template is a function. +Set this option to nil if backward compatibility with howm-1.2.4 or earlier +is necessary.") + +(defun howm-template-string (which-template previous-buffer) + ;; which-template should be 1, 2, 3, ... + (setq which-template (or which-template 1)) + (cond ((stringp howm-template) howm-template) + ((functionp howm-template) (let ((args (if howm-template-receive-buffer + (list which-template + previous-buffer) + (list which-template)))) + (apply howm-template args))) + ((listp howm-template) (nth (- which-template 1) howm-template)))) + +(defun howm-replace (rules arg &optional beg end) + (mapc (lambda (pair) + (let ((spell (car pair)) + (disp-f (cdr pair))) + (goto-char (or beg (point-min))) + (while (re-search-forward spell end t) + (delete-region (match-beginning 0) (match-end 0)) + (funcall disp-f arg)))) + rules)) + +;; Use dynamic bindings dirtily! +(defun howm-template-title (arg) + (insert (cdr (assoc 'title arg)))) +(defun howm-template-date (arg) + (insert (cdr (assoc 'date arg)))) +(defun howm-template-previous-file (arg) + (insert (cdr (assoc 'file arg)))) +(defun howm-template-cursor (arg)) ;; do nothing + +(defun howm-dup () + (interactive) + (let* ((r (howm-view-paragraph-region)) + (s (buffer-substring-no-properties (car r) (cadr r)))) + (howm-create-file) + (howm-set-mode) + (insert "\n" s))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Keyword + +(defun howm-completing-read-keyword () + (message "Scanning...") + (let* ((kl (howm-keyword-list)) + (table (mapcar #'list kl)) + (completion-ignore-case howm-keyword-case-fold-search)) + (completing-read "Keyword: " table))) + +(defun howm-insert-keyword () + (interactive) + (insert (howm-completing-read-keyword))) + +(defun howm-keyword-to-kill-ring (&optional filename-p) + (interactive "P") + (let ((title (howm-title-at-current-point filename-p))) + (if title + (howm-string-to-kill-ring title) + (error "No keyword.")))) + +(defun howm-title-at-current-point (&optional filename-p + title-regexp title-regexp-pos) + (let ((reg (or title-regexp howm-view-title-regexp)) + (pos (or title-regexp-pos howm-view-title-regexp-pos))) + (save-excursion + (end-of-line) + (cond ((and (not filename-p) + (re-search-backward reg nil t)) + (match-string-no-properties pos)) + ((buffer-file-name) + (howm-abbreviate-file-name (buffer-file-name))) + (t nil))))) + +(defun howm-string-to-kill-ring (str) + (if str + (progn + (kill-new str) + (message "%s" str)) + (error "Empty."))) + +(defun howm-keyword-for-comefrom () + (save-excursion + (goto-char (point-min)) + (let ((keyword-list nil)) + (while (re-search-forward howm-keyword-regexp nil t) + (setq keyword-list + (cons (match-string-no-properties howm-keyword-regexp-pos) + keyword-list))) + (reverse keyword-list)))) + +(defun howm-keyword-list () + (let ((sep (format "[\n%s]" (or howm-keyword-list-alias-sep "")))) + (with-current-buffer (howm-keyword-buffer) + (delete "" + (split-string (buffer-substring (point-min) (point-max)) sep))))) + +(defun howm-keyword-add (keyword-list) + (interactive "sKeyword: ") + (setq keyword-list (if (stringp keyword-list) + (list keyword-list) + keyword-list)) + (with-current-buffer (howm-keyword-buffer) + (save-excursion + (goto-char (point-max)) + (mapc (lambda (k) + (when (howm-keyword-new-p k) + (insert k "\n"))) + keyword-list) + (when (buffer-file-name) + (howm-basic-save-buffer))))) + +(defun howm-keyword-new-p (str) + (save-excursion + (let ((r (format "^%s$" (regexp-quote str))) + (case-fold-search howm-keyword-case-fold-search)) + (goto-char (point-min)) + (not (re-search-forward r nil t))))) + +(defun howm-support-aliases-p () + howm-keyword-list-alias-sep) +(defun howm-aliases () + (if (howm-support-aliases-p) + (howm-read-aliases) + nil)) +(defun howm-read-aliases () + (with-current-buffer (howm-keyword-buffer) + (save-excursion + (let ((ans nil)) + (goto-char (point-min)) + (while (search-forward howm-keyword-list-alias-sep nil t) + (let* ((line (buffer-substring-no-properties (line-beginning-position) + (line-end-position))) + (keys (split-string line howm-keyword-list-alias-sep)) + (ks (if howm-keyword-case-fold-search + (mapcar #'downcase keys) + keys))) + (setq ans (cons ks ans)) + (end-of-line))) + ans)))) + +(defun howm-expand-aliases-recursively (keyword aliases) + (let ((keys (list keyword)) + (prev nil)) + (cl-labels ((expand (keys) + (sort (cl-remove-duplicates + (cl-mapcan (lambda (k) + (cl-mapcan + (lambda (a) (if (member k a) + (copy-sequence a) + nil)) + aliases)) + keys) :test #'string=) + #'string<))) + (while (not (equal prev keys)) + (setq prev keys) + (setq keys (expand keys)))) + keys)) +(cl-assert (equal (howm-expand-aliases-recursively "a" + '(("d" "e" "f") ("a" "b" "c"))) + '("a" "b" "c"))) +(cl-assert (equal (howm-expand-aliases-recursively "a" + '(("d" "e" "b") ("a" "b" "c"))) + '("a" "b" "c" "d" "e"))) + +(defun howm-keyword-aliases (keyword) + "List of strings which are equivalent to KEYWORD. +KEYWORD itself is always at the head of the returneded list. +" + ;; Return the original keyword (not downcased) for backward compatibility. + ;; I'm not sure whether this behavior is really needed. + (let* ((key (if howm-keyword-case-fold-search + (downcase keyword) + keyword)) + (aliases (howm-aliases)) + (equiv (if howm-keyword-aliases-recursive + (howm-expand-aliases-recursively key aliases) + (cl-remove-duplicates + (apply #'append + (cl-remove-if-not (lambda (a) (member key a)) + aliases)))))) + (if (null equiv) + keyword + (cons keyword (remove key equiv))))) + +(defun howm-keyword-search (keyword &optional create-p open-unique-p) + (howm-message-time "key-search" + (howm-set-command 'howm-keyword-search) + (howm-with-normalizer + (howm-keyword-search-subr keyword create-p open-unique-p)))) + +(defun howm-keyword-search-subr (keyword create-p open-unique-p) + (let* ((aliases (if (howm-support-aliases-p) + (howm-keyword-aliases keyword) + keyword)) + (menu-p (howm-menu-keyword-p keyword)) + (comefrom-regexp (if menu-p ;; clean me + nil + (howm-make-keyword-regexp2 aliases))) + (trio (let ((howm-search-other-dir (if menu-p ;; clean me + nil + howm-search-other-dir)) + (*howm-view-force-case-fold-search* + howm-keyword-case-fold-search)) ;; dirty! + (howm-call-view-search-internal aliases t))) +;; code for . +;; but this change is canceled; I'll try more fundamental fix. [2005-11-04] +;; (if open-unique-p +;; (let ((r (concat "^" (regexp-quote keyword) "$"))) +;; (howm-call-view-search r nil)) +;; (howm-call-view-search aliases t)))) + (kw (car trio)) + (name (cadr trio)) + (items (cl-caddr trio)) + (items-pair nil) + (found (if items t nil)) ;; want to forget items as soon as possible + (matched (and found + (let* ((howm-keyword-format + (if menu-p ;; clean me + (default-value 'howm-keyword-format) + howm-keyword-format)) + (r (howm-normalize items aliases + comefrom-regexp))) + (setq items-pair (cdr r)) + (car r)))) + (keyword-matched (member 'keyword matched)) + (keyword-matched-multi (member 'keyword-multi-hits matched)) + (file-matched (member 'file matched)) + (title (howm-make-keyword-string keyword))) + ;; main processing (clean me!) [2003-12-01] + (cond + ;; for %foo% + ((and menu-p keyword-matched) + (howm-keyword-search-open-menu keyword (car items-pair) + keyword-matched-multi)) + ;; for [[foo]] + ((and create-p (not keyword-matched)) + (howm-keyword-search-create title)) + ;; open if unique match + ((and open-unique-p (howm-single-element-p items)) + (howm-keyword-search-open-unique items)) + (t + (howm-call-view-summary name items-pair kw) + (when (howm-normalize-oldp) + ;; sorry for redundancy & inefficiency + (howm-list-normalize-old aliases comefrom-regexp t)))) + ;; record history + (when (not menu-p) + (howm-write-history keyword)) + ;; return information + `((menu-p . ,menu-p) + (found . ,found) + (matched . ,matched) + (keyword-matched . ,keyword-matched) + (create-p . ,create-p)) + )) + +(defun howm-keyword-search-open-menu (keyword item-list multi-hits-p) + "Open KEYWORD as menu." + ;; dirty. peeking howm-view.el + (let* ((item (car item-list)) + (fname (howm-view-item-filename item)) + (place (howm-view-item-place item))) + (let ((howm-search-other-dir nil)) + (howm-menu-open fname place (howm-menu-name keyword)))) + (when multi-hits-p + (message "Warning: found two or more %s." keyword))) + +(defun howm-keyword-search-create (title) + "create new memo <<< TITLE." + (howm-create-file-with-title title) + (message "New keyword.")) + +(defun howm-keyword-search-open-unique (items) + "Open unique match." + (howm-view-open-item (car items))) + +;; (defvar *howm-keyword-buffer* nil) ;; for internal use +(defun howm-keyword-for-goto (&optional keyword-list) + (save-excursion + (let ((case-fold-search howm-keyword-case-fold-search)) + (sort (cl-mapcan (lambda (k) + (goto-char (point-min)) + ;; when howm-check-word-break is non-nil, + ;; checking word breaks is desired for efficiency. + ;; it is not implemented yet. + (if (search-forward k nil 'noerr) + (list k) + nil)) + (or keyword-list (howm-keyword-list))) + (lambda (x y) + (> (length x) (length y))))))) + +(defun howm-keyword-add-current-buffer () + (save-excursion + (goto-char (point-min)) + (let ((m (current-message)) + (keyword-list nil)) + (while (re-search-forward howm-keyword-regexp nil t) + (let ((key-str (if howm-keyword-list-alias-sep + (mapconcat #'identity + (howm-keyword-read) + howm-keyword-list-alias-sep) + (match-string-no-properties howm-keyword-regexp-pos)))) + (setq keyword-list (cons key-str keyword-list)))) + (howm-keyword-add keyword-list) + (message "%s" m)))) +(defun howm-keyword-add-items (items) + (let ((files (mapcar #'howm-view-item-filename items))) + (with-temp-buffer + (mapc (lambda (f) + (erase-buffer) + (insert-file-contents f) + (howm-set-configuration-for-file-name f) + (howm-keyword-add-current-buffer)) + files)))) + +(defun howm-keyword-read () + (let ((ks nil) + (beg (line-beginning-position))) + (end-of-line) + (skip-chars-backward " ") + (while (re-search-backward howm-keyword-regexp beg t) + (setq ks (cons (match-string-no-properties howm-keyword-regexp-pos) ks)) + (skip-chars-backward " ")) + (end-of-line) + ks)) + +;;; howm-mode.el ends here diff --git a/howm-reminder.el b/howm-reminder.el new file mode 100644 index 0000000..32e975c --- /dev/null +++ b/howm-reminder.el @@ -0,0 +1,918 @@ +;;; howm-reminder.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-reminder.el,v 1.83 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(provide 'howm-reminder) +(require 'howm) + +(defvar howm-list-schedule-name "{schedule}") +(defvar howm-list-todo-name "{todo}") +; "This is used for buffer name of `howm-list-reminder'. +; See `howm-view-summary-name'.") + +(howm-defvar-risky howm-todo-priority-func + '(("-" . howm-todo-priority-normal) + (" " . howm-todo-priority-normal) + ("+" . howm-todo-priority-todo) + ("~" . howm-todo-priority-defer) + ("!" . howm-todo-priority-deadline) + ("@" . howm-todo-priority-schedule) + ("." . howm-todo-priority-done))) +(defvar howm-todo-priority-normal-laziness 1) +(defvar howm-todo-priority-todo-laziness 7) +(defvar howm-todo-priority-todo-init -7) +(defvar howm-todo-priority-defer-laziness 30) +(defvar howm-todo-priority-defer-init -14) +(defvar howm-todo-priority-defer-peak 0) +(defvar howm-todo-priority-deadline-laziness 7) +(defvar howm-todo-priority-deadline-init -2) +(defvar howm-todo-priority-schedule-laziness 1) +(defvar howm-todo-priority-normal-bottom (- howm-huge)) +(defvar howm-todo-priority-todo-bottom (- howm-huge)) +(defvar howm-todo-priority-defer-bottom (- howm-huge)) +(defvar howm-todo-priority-deadline-bottom (- howm-huge)) +(defvar howm-todo-priority-schedule-bottom (- howm-huge++) + "Base priority of schedules in the bottom. +Its default value is extremely negative so that you never see +schedules outside the range in %reminder in the menu.") +(defvar howm-todo-priority-deadline-top howm-huge) +(defvar howm-todo-priority-schedule-top howm-huge) +(defvar howm-todo-priority-unknown-top howm-huge+) + +(defvar howm-action-lock-reminder-done-default nil) + +(defvar howm-congrats-count 0) + +;;; --- level ? --- + +;; Fix me: redundant (howm-date-* & howm-reminder-*) + +;; (defun howm-reminder-regexp-grep (types) +;; (howm-inhibit-warning-in-compilation)) +;; (defun howm-reminder-regexp (types) +;; (howm-inhibit-warning-in-compilation)) + +(if howm-reminder-old-format + (progn ;; old format + (defvar howm-reminder-regexp-grep-format + "@\\[[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]\\]%s") + (defvar howm-reminder-regexp-format + "\\(@\\)\\[\\([0-9][0-9][0-9][0-9]\\)/\\([0-9][0-9]\\)/\\([0-9][0-9]\\)\\]\\(%s\\)\\([0-9]*\\)") + (defun howm-reminder-regexp-grep (types) + (format howm-reminder-regexp-grep-format types)) + (defun howm-reminder-regexp (types) + (format howm-reminder-regexp-format types)) + (defvar howm-reminder-regexp-command-pos 1) + (defvar howm-reminder-regexp-year-pos 2) + (defvar howm-reminder-regexp-month-pos 3) + (defvar howm-reminder-regexp-day-pos 4) + (defvar howm-reminder-regexp-type-pos 5) + (defvar howm-reminder-regexp-laziness-pos 6) + (defvar howm-reminder-today-format "@[%Y/%m/%d]") + (howm-defvar-risky howm-reminder-font-lock-keywords + `( + (,(howm-reminder-regexp "[-]?") (0 howm-reminder-normal-face prepend)) + (,(howm-reminder-regexp "[+]") (0 howm-reminder-todo-face prepend)) + (,(howm-reminder-regexp "[~]") (0 howm-reminder-defer-face prepend)) + (,(howm-reminder-regexp "[!]") + (0 howm-reminder-deadline-face prepend) + (,howm-reminder-regexp-type-pos (howm-reminder-deadline-type-face) prepend)) + (,(howm-reminder-regexp "[@]") (0 howm-reminder-schedule-face prepend)) + (,(howm-reminder-regexp "[.]") (0 howm-reminder-done-face prepend)) + )) + (defun howm-reminder-font-lock-keywords () + howm-reminder-font-lock-keywords) + (defun howm-action-lock-done (&optional command) + (save-excursion + (let ((at-beg (match-beginning howm-reminder-regexp-command-pos)) + (at-end (match-end howm-reminder-regexp-command-pos)) + (type-beg (match-beginning howm-reminder-regexp-type-pos)) + (type-end (match-end howm-reminder-regexp-type-pos)) + (lazy-beg (match-beginning howm-reminder-regexp-laziness-pos)) + (lazy-end (match-end howm-reminder-regexp-laziness-pos))) + (let* ((s (or command + (read-from-minibuffer + "RET (done), x (cancel), symbol (type), num (laziness): "))) + (c (cond ((string= s "") ".") + ((= 0 (string-to-number s)) ". give up") + (t nil)))) + (when (string= s "") + (howm-congrats)) + (if c + (progn + (goto-char at-beg) + (delete-region at-beg at-end) + (insert (howm-reminder-today)) + (insert (format "%s " c))) + (progn + (goto-char lazy-beg) + (delete-region lazy-beg lazy-end) + (when (string= (buffer-substring-no-properties type-beg type-end) + " ") + (goto-char type-beg) + (insert "-")) ;; "no type" = "normal" + (insert s))))))) + ) + (progn ;; new format + (defvar howm-reminder-regexp-grep-format + (concat "\\[" howm-date-regexp-grep "[ :0-9]*\\]%s")) + (defvar howm-reminder-regexp-format + (concat "\\(\\[" howm-date-regexp "[ :0-9]*\\]\\)\\(\\(%s\\)\\([0-9]*\\)\\)")) +;; (defvar howm-reminder-regexp-grep-format +;; (concat "\\[" howm-date-regexp-grep "\\]%s")) +;; (defvar howm-reminder-regexp-format +;; (concat "\\[" howm-date-regexp "\\]\\(\\(%s\\)\\([0-9]*\\)\\)")) + (defun howm-reminder-regexp-grep (types) + (format howm-reminder-regexp-grep-format types)) + (defun howm-reminder-regexp (types) + (format howm-reminder-regexp-format types)) + (defvar howm-reminder-regexp-date-pos 1) + (defvar howm-reminder-regexp-year-pos (+ howm-date-regexp-year-pos 1)) + (defvar howm-reminder-regexp-month-pos (+ howm-date-regexp-month-pos 1)) + (defvar howm-reminder-regexp-day-pos (+ howm-date-regexp-day-pos 1)) + (defvar howm-reminder-regexp-command-pos 5) + (defvar howm-reminder-regexp-type-pos 6) + (defvar howm-reminder-regexp-laziness-pos 7) + (defvar howm-reminder-today-format + (format howm-insert-date-format howm-date-format)) + (howm-defvar-risky howm-reminder-font-lock-keywords + `( + (,(howm-reminder-regexp "[-]") (0 howm-reminder-normal-face prepend)) + (,(howm-reminder-regexp "[+]") (0 howm-reminder-todo-face prepend)) + (,(howm-reminder-regexp "[~]") (0 howm-reminder-defer-face prepend)) + (,(howm-reminder-regexp "[!]") + (0 howm-reminder-deadline-face prepend) + (,howm-reminder-regexp-type-pos (howm-reminder-deadline-type-face) prepend)) + (,(howm-reminder-regexp "[@]") (0 howm-reminder-schedule-face prepend)) + (,(howm-reminder-regexp "[.]") (0 howm-reminder-done-face prepend)) + )) + (defun howm-reminder-font-lock-keywords () + howm-reminder-font-lock-keywords) + (defun howm-action-lock-done-prompt () + (format "RET (done), x (%s), symbol (type), num (laziness): " + howm-reminder-cancel-string)) + (defun howm-action-lock-done (&optional command) + ;; parse line + (let* ((pos (point)) + (beg (match-beginning 0)) + (end (match-end 0)) + (date (match-string-no-properties howm-reminder-regexp-date-pos)) + (type (match-string-no-properties howm-reminder-regexp-type-pos)) + (lazy (match-string-no-properties howm-reminder-regexp-laziness-pos)) + (desc (buffer-substring-no-properties end (line-end-position)))) + ;; parse input command + (let* ((s (or command + (howm-read-string (howm-action-lock-done-prompt) + "x-+~!.@" + "0123456789"))) + (type-or-lazy (string-match (format "^\\(%s?\\)\\([0-9]*\\)$" + howm-reminder-types) + s)) + (new-type (and type-or-lazy (match-string-no-properties 1 s))) + (new-lazy (and type-or-lazy (match-string-no-properties 2 s)))) + (when (string= new-type "") + (setq new-type type)) + (when (string= new-lazy "") + (setq new-lazy lazy)) + ;; dispatch and get new contents + (let ((new (cond ((string= s "") + (howm-action-lock-done-done date type lazy desc)) + ((string= s "x") + (howm-action-lock-done-cancel date type lazy + desc)) + (type-or-lazy + (howm-action-lock-done-modify date + new-type new-lazy + desc)) + (t + (error "Can't understand %s" s))))) + ;; replace contents + (goto-char beg) + (delete-region (point) (line-end-position)) + (insert new) + (goto-char pos))))) + (defun howm-action-lock-done-done (date type lazy desc &optional done-mark) + (when (null done-mark) + (setq done-mark ".") + (howm-congrats)) + (concat (howm-reminder-today) done-mark " " + date ":" type lazy desc)) + (defun howm-action-lock-done-cancel (date type lazy desc) + (howm-action-lock-done-done date type lazy desc + (format ". %s" howm-reminder-cancel-string))) + (defun howm-action-lock-done-modify (date type lazy desc) + (concat date type lazy desc)) + )) + +(defun howm-reminder-deadline-type-face () + (let ((late (cadr (howm-todo-parse-string (match-string-no-properties 0))))) + (if (>= late 0) + howm-reminder-late-deadline-face + howm-reminder-deadline-face))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Reminder: schedule & todo + +(define-key howm-view-summary-mode-map "." 'howm-reminder-goto-today) + +;; Clean me. +;; I cannot remember why I wrote howm-with-schedule-summary-format. +(defmacro howm-with-schedule-summary-format (&rest body) + (declare (indent 0)) + `(let ((howm-view-summary-format (if howm-view-split-horizontally ;; dirty! + "" + howm-view-summary-format))) + ,@body)) + +(defun howm-list-schedule () + (interactive) + (howm-with-need + (howm-with-schedule-summary-format + (let ((items (need (howm-list-reminder-internal howm-schedule-types)))) + (howm-list-reminder-final-setup howm-list-schedule-name + (howm-schedule-sort-items items))) + (howm-reminder-goto-today) + (howm-view-summary-check)))) + +(defun howm-list-reminder-internal (types) + (let* ((r (howm-reminder-regexp types)) + (rg (howm-reminder-regexp-grep types)) + (summarizer (howm-reminder-summarizer r t)) + (folder (howm-reminder-search-path-folder))) + (cl-caddr (howm-view-search-folder-internal rg folder nil summarizer)))) + +(defun howm-list-reminder-final-setup (&optional name item-list) + (howm-view-summary name item-list + (append (howm-reminder-add-font-lock-internal) + (howm-mode-add-font-lock-internal))) + (let ((action-lock-default-rules + (howm-action-lock-reminder-forward-rules t))) + (action-lock-mode t))) + +(let ((rs (mapcar #'regexp-quote + (list howm-date-format howm-reminder-today-format)))) + (defcustom howm-highlight-date-regexp-format (car rs) + "Time format for highlight of today and tommorow. +This value is passed to `format-time-string', and the result must be a regexp." + :type `(radio ,@(mapcar (lambda (r) `(const ,r)) rs) + string) + :group 'howm-faces)) + +(defun howm-reminder-today-font-lock-keywords () + (let ((today (howm-reminder-today 0 howm-highlight-date-regexp-format)) + (tomorrow (howm-reminder-today 1 howm-highlight-date-regexp-format))) + `((,today (0 howm-reminder-today-face prepend)) + (,tomorrow (0 howm-reminder-tomorrow-face prepend))))) + +(defun howm-reminder-add-font-lock () + (cheat-font-lock-append-keywords (howm-reminder-add-font-lock-internal))) + +(defun howm-reminder-add-font-lock-internal () + (append (howm-reminder-font-lock-keywords) + (howm-reminder-today-font-lock-keywords))) + +(defun howm-reminder-omit-before (regexp str) + (string-match regexp str) + (substring str (match-beginning 0))) + +(defun howm-reminder-summarizer (regexp &optional show-day-of-week) + `(lambda (file line content) + (let ((s (howm-reminder-omit-before ,regexp content))) +;; (string-match ,regexp content) +;; (substring content (match-beginning 0))))) + ,(if show-day-of-week + '(let* ((p (howm-todo-parse-string s)) + (late (floor (nth 1 p))) + (dow (howm-day-of-week-string (nth 4 p)))) + (format "%s%3s %s" dow late s)) + 's)))) + +(defun howm-reminder-today (&optional days-after fmt) + (format-time-string (or fmt howm-reminder-today-format) + (howm-days-after (current-time) (or days-after 0)))) + +;; dirty. peek howm-view-* +(defun howm-reminder-goto-today () + (interactive) + (let* ((today (howm-reminder-today)) + (r (howm-reminder-regexp ".")) + (summaries (mapcar (lambda (item) + (howm-reminder-omit-before + r (howm-view-item-summary item))) + (howm-view-item-list)))) +;; (summaries (mapcar 'howm-view-item-summary (howm-view-item-list)))) + (let ((rest summaries) + (n 0)) + (while (and rest + (string< (car rest) today)) + (setq rest (cdr rest) + n (1+ n))) + (howm-goto-line (1+ n))))) + +(defun howm-schedule-menu (days &optional days-before) + (let* ((today (howm-encode-day t)) + (from (- today (or days-before 0))) + (to (+ today days 1)) + (howm-schedule-types howm-schedule-menu-types) ;; dirty + (raw (howm-reminder-search howm-schedule-types)) + (filtered (cl-remove-if #'(lambda (item) + (let ((s (howm-schedule-date item))) + (or (< s from) + (< to s)))) + raw))) + (howm-schedule-sort-items filtered))) + +(defun howm-schedule-sort-items (items &optional reverse-p) + (when reverse-p + (error "Not supported.")) + (howm-with-schedule-summary-format + (howm-sort #'howm-schedule-sort-converter #'howm-schedule-sort-comparer + items))) +(defun howm-schedule-sort-by-date () + (interactive) + (howm-view-sort-doit #'howm-schedule-sort-items)) +(defun howm-schedule-sort-converter (item) + (let ((z (howm-reminder-parse item))) + (cons (car z) + (if howm-schedule-sort-by-time + (howm-item-summary item) + (nth 5 z))))) +(defun howm-schedule-sort-comparer (a b) + (if (= (car a) (car b)) + (string< (cdr a) (cdr b)) + (< (car a) (car b)))) + +(defun howm-schedule-date (item) + (car (howm-reminder-parse item))) + +(defun howm-reminder-search (types) + (let* ((r (howm-reminder-regexp types)) + (rg (howm-reminder-regexp-grep types)) + (summarizer (howm-reminder-summarizer r)) + (folder (howm-reminder-search-path-folder))) + (howm-view-search-folder-items rg folder summarizer))) + +(defun howm-list-todo () + (interactive) + (howm-list-todo-sub)) + +;; experimental [2006-06-26] +(defun howm-todo-sleeping-p (item) + ;; (- howm-huge-) should be replaced with an appropreate variable. + (< (howm-todo-priority item) (- howm-huge-))) +(defun howm-list-active-todo () + (interactive) + (howm-list-todo-sub (lambda (item) + (not (howm-todo-sleeping-p item))))) +(defun howm-list-sleeping-todo () + (interactive) + (howm-list-todo-sub #'howm-todo-sleeping-p)) + +(defun howm-list-todo-sub (&optional pred) + (howm-with-need + (howm-with-schedule-summary-format + (let ((items (need (howm-list-reminder-internal howm-todo-types)))) + (when pred + (setq items + (need (cl-remove-if-not pred items)))) + (setq items (howm-todo-sort-items items)) + (when howm-todo-separators + (setq items + (howm-todo-insert-separators items + howm-todo-separators))) + (howm-list-reminder-final-setup howm-list-todo-name items))))) + +(defun howm-todo-menu (n limit-priority separators) + "Find top N todo items, or all todo items if N is nil. +Returned value is a sorted list of items (see `howm-make-item'). +Items whose priority is worse than LIMIT-PRIORITY are eliminated. +Separator strings are inserted to the returned list according to +the rule given as SEPARATORS. +See docstring of the variable `howm-menu-reminder-separators' for details." + (let* ((cutted (cl-remove-if (lambda (item) + (< (howm-todo-priority item) + limit-priority)) + (howm-reminder-search howm-todo-menu-types))) + (sorted (howm-todo-sort-items cutted))) + (howm-todo-insert-separators (if n (howm-first-n sorted n) sorted) + separators t))) + +(defun howm-reminder-menu (n limit-priority separators) + (howm-with-reminder-setting + (howm-todo-menu n limit-priority separators))) + +(defun howm-todo-insert-separators (item-list separators + &optional relative-date-p) + (let ((is (mapcar (lambda (item) (cons (howm-todo-priority item) item)) + item-list)) + (sep (mapcar (lambda (pair) + (cons (if relative-date-p + (- howm-todo-priority-schedule-top + (or (car pair) howm-huge-)) + (or (car pair) (- howm-huge-))) + (howm-make-item (howm-make-page:nil) (cdr pair)))) + separators))) + (mapcar #'cdr + (sort (append is sep) #'(lambda (x y) (> (car x) (car y))))))) + +(defun howm-todo-sort-items (items &optional reverse-p) + (when reverse-p + (error "Not supported.")) + (howm-sort #'howm-todo-priority-ext #'howm-todo-priority-ext-gt + items)) + +(defun howm-todo-sort-by-priority () + (howm-view-sort-doit #'howm-todo-sort-items)) + +;; Clean me. +(defun howm-reminder-parse (item) + (howm-todo-parse-string (howm-view-item-summary item))) +(defun howm-todo-parse (item) + (cdr (howm-reminder-parse item))) +(defun howm-todo-parse-string (str) + "Parse reminder format. +Example: (howm-todo-parse-string \"abcde [2004-11-04]@ hogehoge\") +==> (12725.625 0.022789351851315587 \"@\" nil 4 \" hogehoge\")" + (let ((summary str)) + (string-match (howm-reminder-regexp ".") summary) + (let ((y (match-string-no-properties howm-reminder-regexp-year-pos + summary)) + (m (match-string-no-properties howm-reminder-regexp-month-pos + summary)) + (d (match-string-no-properties howm-reminder-regexp-day-pos + summary)) + (ty (match-string-no-properties howm-reminder-regexp-type-pos + summary)) + (lz (match-string-no-properties howm-reminder-regexp-laziness-pos + summary)) + (description (substring str (match-end 0)))) + (let* ((day (howm-encode-day d m y)) + (today (howm-encode-day)) + (late (- today day)) + (type (substring (or ty "-") 0 1)) ;; "-" for old format + (lazy (cond ((string= type " ") nil) + ((null lz) nil) + (t (let ((z (string-to-number lz))) + (if (= z 0) nil z))))) + ;; (lazy (if (string= type " ") + ;; 0 + ;; (string-to-number (or lz "0")))) + (day-of-week (nth 6 + (decode-time (apply #'encode-time + (mapcar #'string-to-number + (list "0" "0" "0" + d m y))))))) + (list day late type lazy day-of-week description))))) + +(defun howm-todo-priority (item) + (let* ((p (howm-todo-parse item)) + (late (car p)) + (type (cadr p)) + (lazy (cl-caddr p)) + (f (or (cdr (assoc type howm-todo-priority-func)) + #'howm-todo-priority-unknown))) + (funcall f late lazy item))) + +(defun howm-todo-priority-ext (item) + (cons (howm-todo-priority item) (howm-view-item-summary item))) +(defun howm-todo-priority-ext-gt (e1 e2) + "Compare two results E1 and E2 of `howm-todo-priority-ext'. +Return true if E1 has higher priority than E2." + (cond ((> (car e1) (car e2)) t) + ((< (car e1) (car e2)) nil) + (t (string< (cdr e1) (cdr e2))))) + +(defun howm-todo-relative-late (late laziness default-laziness) + (/ late (float (or laziness default-laziness)))) + +(defun howm-todo-priority-normal (late lz item) + (let ((r (howm-todo-relative-late late lz + howm-todo-priority-normal-laziness))) + (cond ((< r 0) (+ r howm-todo-priority-normal-bottom)) + (t (- r))))) + +(defun howm-todo-priority-todo (late lz item) + (let ((r (howm-todo-relative-late late lz + howm-todo-priority-todo-laziness)) + (c (- howm-todo-priority-todo-init))) + (cond ((< r 0) (+ r howm-todo-priority-todo-bottom)) + (t (* c (- r 1)))))) + +(defun howm-todo-priority-defer (late lz item) + (let* ((r (howm-todo-relative-late late lz + howm-todo-priority-defer-laziness)) + (p howm-todo-priority-defer-peak) + (c (- p howm-todo-priority-defer-init))) + (let ((v (* 2 (abs (- (mod r 1) 0.5))))) + (cond ((< r 0) (+ r howm-todo-priority-defer-bottom)) + (t (- p (* c v))))))) + +;; ;; Clean me. +;; (defvar howm-todo-schedule-days nil) +;; (defvar howm-todo-schedule-days-before nil) +;; (defmacro howm-with-schedule-days (days days-before &rest body) +;; `(let ((howm-todo-schedule-days ,days) +;; (howm-todo-schedule-days-before ,days-before)) +;; ,@body)) +;; (put 'howm-with-schedule-days 'lisp-indent-hook 2) +;; (defun howm-todo-priority-schedule (late lz item) +;; (setq lz (or lz howm-todo-priority-schedule-laziness)) +;; (cond ((< late (- howm-todo-schedule-days)) +;; (+ late howm-todo-priority-schedule-bottom)) +;; ((< late (+ lz howm-todo-schedule-days-before)) +;; (+ late howm-todo-priority-schedule-top)) +;; (t +;; (+ late howm-todo-priority-schedule-bottom)))) + +(defun howm-todo-priority-deadline (late lz item) + (if howm-reminder-schedule-interval + (howm-todo-priority-deadline-1 late lz item) + (howm-todo-priority-deadline-2 late lz item))) + +(defun howm-todo-priority-deadline-1 (late lz item) + (let ((r (howm-todo-relative-late late lz + howm-todo-priority-deadline-laziness)) + (c (- howm-todo-priority-deadline-init)) + (d (- (howm-reminder-schedule-interval-to))) + (top howm-todo-priority-deadline-top) + (bot howm-todo-priority-deadline-bottom)) + ;; I dare to use late in the first case below so that + ;; deadline behaves like schedule after its deadline date. + (cond ((< d late) (+ top late)) + ((< r -1) (+ bot r)) + (t (* c r))))) + +(defun howm-todo-priority-deadline-2 (late lz item) + "This function may be obsolete in future. +`howm-todo-priority-deadline-1' will be used instead." + (let ((r (howm-todo-relative-late late lz + howm-todo-priority-deadline-laziness)) + (c (- howm-todo-priority-deadline-init))) + (cond ((> r 0) (+ r howm-todo-priority-deadline-top)) + ((< r -1) (+ r howm-todo-priority-deadline-bottom)) + (t (* c r))))) + +(defun howm-todo-priority-schedule (late lz item) + (if howm-reminder-schedule-interval + (howm-todo-priority-schedule-1 late lz item) + (howm-todo-priority-schedule-2 late lz item))) + +(defun howm-todo-priority-schedule-1 (late lz item) + (let ((lazy (or lz howm-todo-priority-schedule-laziness)) + (from (howm-reminder-schedule-interval-from)) + (to (howm-reminder-schedule-interval-to)) + (top howm-todo-priority-schedule-top) + (bot howm-todo-priority-schedule-bottom)) + (cond ((< late (- to)) (+ bot late)) + ((< late (+ from lazy)) (+ top late)) + (t (+ bot late))))) + +(defun howm-todo-priority-schedule-2 (late lz item) + "This function may be obsolete in future. +`howm-todo-priority-schedule-1' will be used instead." + (let ((r (howm-todo-relative-late late lz + howm-todo-priority-schedule-laziness))) + (cond ((> r 0) (+ r howm-todo-priority-schedule-bottom)) + (t r)))) + +(defun howm-todo-priority-done (late lz item) + (+ late howm-todo-priority-done-bottom)) + +(defun howm-todo-priority-unknown (late lz item) + (+ late howm-todo-priority-unknown-top)) + +(defun howm-encode-day (&optional d m y) + "Convert date Y-M-D to a float number, days from the reference date. +When D is omitted, the current time is encoded. +When D is t, the beginning of today is encoded." + (let* ((e (apply #'encode-time (cond ((eq d t) + (let ((now (howm-decode-time))) + (append '(0 0 0) (cl-cdddr now)))) + (d + (mapcar #'string-to-number + (list "0" "0" "0" d m y))) + (t + (howm-decode-time))))) + (hi (car e)) + (low (cadr e)) + (daysec (* 60 60 24.0))) + (+ (* hi (/ 65536 daysec)) (/ low daysec)))) + +(defun howm-congrats () + (setq howm-congrats-count (1+ howm-congrats-count)) + (let* ((n (length howm-congrats-format)) + (r (random n))) + (message (nth r howm-congrats-format) howm-congrats-count) + (when howm-congrats-command + (howm-congrats-run howm-congrats-command)) + (run-hooks 'howm-congrats-hook))) +(defun howm-congrats-run (com-arg-list) + (let* ((name "howm-congrats") + (command (car com-arg-list)) + (args (cdr com-arg-list)) + (prev (get-process name))) + (when prev + (delete-process prev)) + (apply #'start-process-shell-command `(,name nil ,command ,@args)))) + +(defun howm-action-lock-reminder-done-rule () + (list (howm-reminder-regexp howm-reminder-types) + `(lambda (&optional arg) + (let ((command (if arg + nil + howm-action-lock-reminder-done-default))) + (howm-action-lock-done command))) + howm-reminder-regexp-command-pos)) + +(defun howm-reminder-search-path () + (howm-search-path t)) + +(defun howm-reminder-search-path-folder () + (howm-search-path-folder t)) + +;;; direct manipulation of items from todo list + +;; I'm sorry for dirty procedure here. +;; If we use naive howm-date-regexp, it matches to file name "2004-05-11.txt" +;; in summary mode. +(defun howm-action-lock-reminder-forward-rules (&optional summary-mode-p) + (let* ((action-maker (lambda (pos) + `(lambda (&optional dummy) + (howm-action-lock-forward (match-beginning ,pos))))) + (reminder-rule (list (howm-reminder-regexp howm-reminder-types) + (funcall action-maker 0) + howm-reminder-regexp-command-pos)) + (summary-date-reg (format ".*%s.*\\(%s\\)" + (regexp-quote howm-view-summary-sep) + howm-date-regexp)) + (summary-date-reg-pos 1) + (summary-date-rule (list summary-date-reg + (funcall action-maker summary-date-reg-pos) + summary-date-reg-pos)) + (menu-date-rule (list howm-date-regexp + (funcall action-maker 0))) + (date-rule (if summary-mode-p + summary-date-rule + menu-date-rule))) + (list reminder-rule date-rule))) + +(defvar howm-action-lock-forward-wconf nil + "for internal use") +(defun howm-action-lock-forward-escape () + (setq howm-action-lock-forward-wconf + (current-window-configuration))) +(defmacro howm-action-lock-forward-block (&rest body) + (declare (indent 0)) + `(prog2 + (setq howm-action-lock-forward-wconf nil) + (progn + ,@body) + (when howm-action-lock-forward-wconf + (set-window-configuration howm-action-lock-forward-wconf)))) + +(defun howm-action-lock-forward (form-pos) + (howm-action-lock-forward-block + (let* ((cursor-pos (point)) + (form-reg (howm-line-tail-regexp form-pos)) + (cursor-reg (howm-line-tail-regexp cursor-pos))) + (let* ((mt (buffer-modified-tick)) + (original-tail (buffer-substring form-pos (line-end-position))) + (modified-tail (howm-action-lock-forward-invoke form-reg + cursor-reg)) + (untouched-p (= mt (buffer-modified-tick)))) + ;; Current-buffer may be already updated according to + ;; howm-menu-refresh-after-save because save-buffer in + ;; howm-action-lock-forward-invoke can run howm-after-save-hook. + ;; We have to exclude such cases. + (when (and untouched-p + (not (string= original-tail modified-tail))) + (let ((buffer-read-only nil)) + (howm-menu-list-getput-item original-tail modified-tail) + (delete-region form-pos (line-end-position)) + (insert modified-tail))) + (goto-char cursor-pos) + (howm-action-lock-forward-update))))) + +(defun howm-line-tail-regexp (pos) + (concat (regexp-quote (buffer-substring-no-properties pos + (line-end-position))) + "$")) + +(defun howm-action-lock-forward-invoke (form-reg cursor-reg) + (howm-modify-in-background (lambda (&rest dummy) + ;; open the target file + ;; and go to the corresponding line + (howm-action-lock-forward-open)) + (lambda (form-reg cursor-reg) + (howm-action-lock-forward-modify-current-line + form-reg cursor-reg)) + howm-action-lock-forward-save-buffer + howm-action-lock-forward-kill-buffer + form-reg + cursor-reg)) + +(defun howm-modify-in-background (opener modifier save-p kill-p &rest args) + (save-excursion + (save-window-excursion + (let ((original-buffers (buffer-list))) + (apply opener args) + ;; We are in the target buffer now. + (let ((initially-modified-p (buffer-modified-p))) + (prog1 + (apply modifier args) + (when (and save-p + (not initially-modified-p) + (buffer-modified-p)) + (save-buffer)) + (when (and kill-p + (not (buffer-modified-p)) + (not (member (current-buffer) original-buffers))) + (kill-buffer (current-buffer))))))))) + +(defun howm-action-lock-forward-modify-current-line (form-reg cursor-reg) + (howm-modify-form #'action-lock-invoke form-reg cursor-reg)) + +(defun howm-modify-form (proc form-reg cursor-reg &rest args) + (cl-labels + ((f-cursor () + (beginning-of-line) + (re-search-forward cursor-reg + (line-end-position + (+ 1 howm-action-lock-forward-fuzziness)) + t)) + (b-cursor () + (end-of-line) + (re-search-backward cursor-reg + (line-beginning-position + (- 1 howm-action-lock-forward-fuzziness)) + t)) + (b-form () + (end-of-line) + (re-search-backward form-reg (line-beginning-position) t))) + (or (save-excursion (and (f-cursor) (b-form))) + (save-excursion (and (b-cursor) (b-form))) + (error "Can't find corresponding line."))) + (goto-char (match-beginning 0)) + ;; Now we are at the beginning of the form. + ;; Remember this position to report the modified tail. + (save-excursion + (when (not (re-search-forward cursor-reg (line-end-position) t)) + (error "Can't find corresponding string.")) + (goto-char (match-beginning 0)) + ;; update display. I don't understand why this is needed. + ;; Without this, cursor is placed at the end of buffer if I delete many + ;; lines before the form position in the below setting (GNU Emacs 21.4.1). + ;; (setq howm-menu-refresh-after-save nil) + ;; (setq howm-menu-expiry-hours 3) + ;; (setq howm-action-lock-forward-fuzziness 20000) + ;; Sigh... + (switch-to-buffer (current-buffer) t) + ;; Now we are at the corresponding position. + ;; Let's call proc to modify the form! + (undo-boundary) + (apply proc args)) + ;; We are back to the beginning of the form. + ;; Report the modified tail. + (buffer-substring-no-properties (point) (line-end-position))) + +(defun howm-action-lock-forward-open () + (cond ((eq major-mode 'howm-menu-mode) + (progn + (howm-menu-list-action) + (when (eq major-mode 'howm-view-summary-mode) + (error "Several candidates.")))) + ((eq major-mode 'howm-view-summary-mode) + (howm-view-summary-open)) + (t + (error "Not supported on this buffer.")))) + +(defun howm-action-lock-forward-update () + (cond ((eq major-mode 'howm-menu-mode) + nil) ; do nothing + ((eq major-mode 'howm-view-summary-mode) + (howm-view-summary-check t)) + (t + (error "Not supported on this buffer.")))) + +;;; extend deadlines (experimental) + +(put 'howm-extend-deadlines 'disabled t) +(defun howm-extend-deadlines (days) + "Extend all overdue deadlines for DAYS from today." + (interactive "nHow many days? ") + (let ((hit (cl-remove-if (lambda (item) + (< (cadr (howm-reminder-parse item)) 0)) + (howm-reminder-search "!")))) + (mapc (lambda (item) + (howm-modify-in-background (lambda (item dummy) + (howm-view-open-item item)) + #'howm-extend-deadline-here + nil nil item days)) + hit) + (howm-menu-refresh-background) + (message "Extended %s deadline(s)." (length hit)))) + +(defun howm-extend-deadline-here (item days) + (apply (lambda (form-reg cursor-reg) ;; use apply for destructuring-bind + (howm-modify-form #'howm-extend-deadline-doit + form-reg cursor-reg days)) + (let ((summary (howm-item-summary item))) + (string-match (howm-reminder-regexp ".") summary) + (mapcar (lambda (p) + (concat (regexp-quote + (substring summary (match-beginning p))) + "$")) + (list howm-reminder-regexp-date-pos + howm-reminder-regexp-year-pos))))) + +(defun howm-extend-deadline-doit (days) + (or (looking-at howm-date-regexp) + (re-search-backward howm-date-regexp (line-beginning-position) t) + (error "Can't find corresponding date form.")) + (howm-datestr-replace + (howm-datestr-shift (howm-time-to-datestr) 0 0 days))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; customize + +(defun howm-define-reminder (letter priority-func face schedule todo + &optional reminder) + "Define reminder type LETTER whose priority is determined by PRIORITY-FUNC. +It appears with FACE in schedule list when SCHEDULE is non-nil, and in +todo list when TODO is non-nil. It also appears in menu if SCHEDULE +or TODO is t." + (add-to-list 'howm-todo-priority-func + (cons letter priority-func)) + (add-to-list 'howm-reminder-font-lock-keywords + `(,(howm-reminder-regexp (format "[%s]" letter)) + (0 ,face prepend))) + (let* ((schedule-menu (eq schedule t)) + (todo-menu (eq todo t)) + (reminder-menu (or schedule-menu todo-menu))) + ;; Don't modify howm-reminder-marks. + ;; Otherwise, defcustom will be confused for howm-reminder-menu-types, etc. + (cl-mapcar (lambda (var flag) + (howm-modify-reminder-types var letter flag)) + '(howm-reminder-types + howm-schedule-types howm-todo-types + howm-schedule-menu-types howm-todo-menu-types + howm-reminder-menu-types) + (list t schedule todo + schedule-menu todo-menu reminder-menu)))) + +(defun howm-modify-reminder-types (var letter flag) + "Modify variable VAR whose value is \"[...]\". +Example: + (setq foo \"[abc]\") + (howm-modify-reminder-types 'foo \"d\" t) foo ==> \"[abcd]\" + (howm-modify-reminder-types 'foo \"b\" nil) foo ==> \"[acd]\" +" + (let ((val (symbol-value var))) + (when (not (string-match "^\\[\\(.*\\)\\]$" val)) + (error "Wrong format - %s: %s" var val)) + (let* ((old (match-string-no-properties 1 val)) + (removed (remove (string-to-char letter) old)) + (new (if flag + ;; This order is important when val is "[-+~!.]". + (concat removed letter) + removed))) + (set var (format "[%s]" new))))) + +;; (example) +;; If you write like below in your memo, it will appear +;; under today's schedule in reminder list. +;; The date "2004-11-01" is dummy and "0" means the position "today - 0". +;; [2004-11-01]_0 ======================== +;; (defun howm-todo-priority-separator (late lazy item) +;; (- howm-huge (or lazy 0) -1)) +;; (defface howm-reminder-separator-face +;; ;; invisible :p +;; '((((class color) (background light)) (:foreground "white")) +;; (((class color) (background dark)) (:foreground "black")) +;; (t ())) +;; "Face for `howm-list-reminder'. This is obsolete and will be removed in future." +;; :group 'howm-faces) +;; (defvar howm-reminder-separator-face 'howm-reminder-separator-face) +;; (defvar howm-reminder-separator-type "_") +;; (howm-define-reminder howm-reminder-separator-type +;; #'howm-todo-priority-separator +;; 'howm-reminder-separator-face t t) + +;;; howm-reminder.el ends here diff --git a/howm-vars.el b/howm-vars.el new file mode 100644 index 0000000..08749f9 --- /dev/null +++ b/howm-vars.el @@ -0,0 +1,1234 @@ +;;; howm-vars.el --- Wiki-like note-taking tool +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-vars.el,v 1.59 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(require 'cl-lib) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Util + +(defmacro howm-define-risky-command (risky orig) + "Define a macro RISKY which is risky-version of ORIG." + (let* ((gsymbol (cl-gensym)) + (gargs (cl-gensym)) + (docstring (format "Do `%s' and set risky-local-variable property." + orig))) + `(defmacro ,risky + (,gsymbol &rest ,gargs) + ,docstring + (declare (indent 'defun)) + (howm-define-risky-command-body ',orig ,gsymbol ,gargs)))) + +;; [2011-01-13] +;; I split this function from howm-define-risky-command for avoiding +;; nested backquotes. Nested backquotes are byte-compiled to +;; old-style-backquotes, that cause warnings when *.elc is loaded. +(cl-eval-when (compile load eval) + (defun howm-define-risky-command-body (command symbol args) + `(progn + (,command ,symbol ,@args) + (put ',symbol 'risky-local-variable t)))) + +;; ;; This code is byte-compiled to old-style-backquotes. Sigh... +;; (defmacro howm-define-risky-command (risky orig) +;; "Define a macro RISKY which is risky-version of ORIG." +;; (let* ((gsymbol (cl-gensym)) +;; (gargs (cl-gensym)) +;; (docstring (format "Do `%s' and set risky-local-variable property." +;; orig))) +;; `(progn +;; (put ',risky 'lisp-indent-hook 'defun) +;; (defmacro ,risky +;; (,gsymbol &rest ,gargs) +;; ,docstring +;; (let ((command ',orig) +;; (symbol ,gsymbol) +;; (args ,gargs)) +;; `(progn +;; ;; (,',orig ...) doesn't work. +;; ;; So I need to bind temporal variables outside nested backquote. +;; (,command ,symbol ,@args) +;; (put ',symbol 'risky-local-variable t))))))) + +(howm-define-risky-command howm-defvar-risky defvar) +(howm-define-risky-command howm-defcustom-risky defcustom) +(howm-define-risky-command howm-defconst-risky defconst) + +;; ;; Should I use this? +;; (defmacro howm-boundp-q (var) +;; `(prog1 +;; (boundp ,var) +;; (howm-dont-warn-free-variable ,var))) +(defmacro howm-dont-warn-free-variable (var) + "No effect except for inhibition of warning in byte-compilation. +Without this trick, compiler says 'reference to free variable' even when +we have checked availability like (if (boundp xxx) ...)." + `(when (boundp (quote ,var)) + (defvar ,var nil))) + +(defmacro howm-funcall-if-defined (call &rest not-defined) + "Execute CALL if its car is defined as a function. +Otherwise, execute expressions in NOT-DEFINED. +This is cheat to avoid warning while byte-compilation. +Byte-compiler says \"not known to be defined\" even for codes like + (if (fboundp 'foo) (foo bar)). + +\(macroexpand '(howm-funcall-if-defined (migemo-get-pattern roma) nil)) +==> (if (fboundp 'migemo-get-pattern) + (let ((howm-funcall-if-defined-f 'migemo-get-pattern)) + (funcall howm-funcall-if-defined-f roma)) + nil) +" + (declare (indent 1)) + (let ((func (car call)) + (args (cdr call))) + `(if (fboundp (quote ,func)) + (let ((howm-funcall-if-defined-f (quote ,func))) + (funcall howm-funcall-if-defined-f ,@args)) + ,@not-defined))) + +;; copied and modified from mule-cmds.el +;; snap:///usr/share/emacs/21.2/lisp/international/mule-cmds.el#1870:(defun set-locale-environment (locale-name) +(defun howm-get-locale () + (let ((vars '("LC_ALL" "LC_CTYPE" "LANG")) + (locale nil)) + (while (and vars (not (setq locale (getenv (car vars))))) + (setq vars (cdr vars))) + (or locale ""))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Top + +(defgroup howm nil + "Wiki-like note-taking tool." + :group 'applications) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Compatibility + +(defvar howm-compatible-to-ver1dot3 nil + "If non-nil, compatible values to howm-1.3.* are used +as default of some variables; put (setq howm-compatible-to-ver1dot3 t) +*before* (require 'howm) if you like.") + +(defgroup howm-compatibility nil + "Compatibility to howm-1.3.*." + :group 'howm) + +(defmacro howm-if-ver1dot3 (oldval def) + (declare (indent 1)) + (cl-destructuring-bind (command var val &rest args) def + `(,command ,var (if howm-compatible-to-ver1dot3 ,oldval ,val) + ,@args + :group 'howm-compatibility))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Files + +(defgroup howm-files nil + "Names of files and directories." + :group 'howm) + +(howm-defcustom-risky howm-directory "~/howm/" + "*All files under this directory are scanned recursively." + :type 'directory + :group 'howm-files) + +(let ((default-format "%Y/%m/%Y-%m-%d-%H%M%S.txt")) + (howm-if-ver1dot3 "%Y/%m/%Y-%m-%d-%H%M%S.howm" + (defcustom howm-file-name-format default-format + "Name of new file. See `format-time-string'. +For example, set as \"%Y/%m/%Y-%m-%d-%H%M%S.txt\" to separate each entry +to its own file. You must guarantee (string< oldfile newfile)." + :type `(radio (const :tag "One file for one entry" ,default-format) + (const :tag "One file for one day" "%Y/%m/%Y-%m-%d.txt") + (const :tag "One file for one month" "%Y/%Y-%m.txt") + (const :tag "One file for one year" "%Y.txt") + string) + :group 'howm-efficiency + :group 'howm-files))) + +(howm-defcustom-risky howm-keyword-file "~/.howm-keys" + "*Keywords (WikiNames) are stored in this file." + :type 'file + :group 'howm-files) + +;; inhibit warning in compilation. +(howm-dont-warn-free-variable image-file-name-regexps) +(defvar howm-image-file-name-regexps + (let ((exts-regexp "\\.\\(GIF\\|JP\\(?:E?G\\)\\|P\\(?:BM\\|GM\\|NG\\|PM\\)\\|TIFF?\\|X\\(?:[BP]M\\)\\|gif\\|jp\\(?:e?g\\)\\|p\\(?:bm\\|gm\\|ng\\|pm\\)\\|tiff?\\|x\\(?:[bp]m\\)\\)\\'") + (image-file-name-regexps (and (boundp 'image-file-name-regexps) + image-file-name-regexps))) + ;; copied from image-file-name-regexp. + (if image-file-name-regexps + (mapconcat 'identity + (if exts-regexp + (cons exts-regexp image-file-name-regexps) + image-file-name-regexps) + "\\|") + exts-regexp)) + "Regular expression that matches image-file filenames. +Default value is equal to the result of `image-file-name-regexp' +on GNU Emacs 21.2.1. + +In order to use `image-file-name-regexp' on Meadow 2.10 (ASAGAO), +max-specpdl-size must be increased from the default value 600. +Otherwise, an error occurs both in byte-compilation and in run time. +To avoid such troubles, this variable is prepared as a fixed string.") + +(defvar howm-excluded-dirs '("RCS" "CVS" ".svn" ".git" "_darcs")) + +(defvar howm-excluded-file-regexp-common-list + (list "[~#]$" + "\\.\\(bak\\|elc\\|gz\\|aux\\|toc\\|idx\\|dvi\\)$" + howm-image-file-name-regexps)) +(defvar howm-excluded-file-regexp-dir-sep + (if (let ((case-fold-search t)) + (string-match "windows" (symbol-name system-type))) + "[/\\\\]" ;; / or \ for win + "/")) ;; / otherwise + +(let ((dir-head (concat "\\(^\\|" howm-excluded-file-regexp-dir-sep "\\)")) + (excluded-dirs (concat (regexp-opt howm-excluded-dirs t) + howm-excluded-file-regexp-dir-sep))) + (let ((howm-excluded-file-regexp-dots-ok + (mapconcat #'identity + `(,(concat dir-head excluded-dirs) + "^[.][.]" + ,@howm-excluded-file-regexp-common-list) + "\\|")) + (howm-excluded-file-regexp-dots-ng + (mapconcat #'identity + `(,(concat dir-head "\\([.]\\|" excluded-dirs "\\)") + ,@howm-excluded-file-regexp-common-list) + "\\|"))) + (howm-defcustom-risky howm-excluded-file-regexp + howm-excluded-file-regexp-dots-ng + "Regexp for excluded files. +It is checked for relative paths from howm-directory and howm-search-path. +A file is excluded iff this regexp matches with all the relative paths." + :type `(radio (const :tag "Don't search dot files" + ,howm-excluded-file-regexp-dots-ng) + (const :tag "Search dot files" + ,howm-excluded-file-regexp-dots-ok) + regexp) + :group 'howm-files + ))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Menu + +(defgroup howm-menu nil + "Menu." + :group 'howm) + +(defcustom howm-menu-lang + (if (or (and (boundp 'current-language-environment) + (string= current-language-environment "Japanese")) + (string-match "^ja" (howm-get-locale))) + 'ja + 'en) + "*Language of menu." + :type '(radio (const en) (const ja)) + :group 'howm-menu) + +(howm-defcustom-risky howm-menu-file nil + "*Specify menu file explicitly, or set as nil to search every time." + :type '(radio (const :tag "Search every time" nil) + (const "0000-00-00-000000.txt") + file) + :group 'howm-files + :group 'howm-efficiency + :group 'howm-menu) + +(defcustom howm-menu-expiry-hours 0 + "*Cache menu contents for this number of hours." + :type 'number + :group 'howm-efficiency + :group 'howm-menu) + +(defcustom howm-menu-refresh-after-save t + "*If non-nil, refresh menu contents after you save howm note." + :type 'boolean + :group 'howm-efficiency + :group 'howm-menu) + +(defcustom howm-menu-name-format "*howmM:%s*" + "*Name format of menu buffer." + :type '(radio (const :tag "Never show in normal buffer list" " *howmM:%s*") + string) + :group 'howm-menu) + +(defcustom howm-menu-footer nil + "Footer string for each menu. Nil means no footer." + :type '(radio (const :tag "Off" nil) + string) + :group 'howm-menu) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Reminder + +(defgroup howm-reminder nil + "Schedule and todo list." + :group 'howm) + +(defvar howm-reminder-old-format nil) + +(defvar howm-reminder-marks + ;; Be careful to order of characters. + ;; "-" must be first so that regexp "[-+~!@.]" makes sense. + (if howm-reminder-old-format "-+~!@. " "-+~!@.")) +(defvar howm-reminder-types + (format "[%s]" howm-reminder-marks)) + +(defun howm-custom-reminder-get-types (symbol) + (let ((reg (default-value symbol)) + (default-types (split-string howm-reminder-marks ""))) + ;; return list of types for standard cases + ;; and string itself for nonstandard cases + (if (not (string-match "^\\[\\(.*\\)\\]" reg)) + reg + (let ((types (split-string (match-string-no-properties 1 reg) ""))) + (if (cl-find-if-not (lambda (x) (member x default-types)) + types) + reg + (cl-remove-if-not (lambda (x) (member x types)) + default-types)))))) +(defun howm-custom-reminder-set-types (symbol types) + (when (listp types) + (setq types (apply #'concat `("[" ,@types "]")))) + (set-default symbol types)) +(defun howm-custom-reminder-list-types () + `(radio (set ,@(mapcar (lambda (ty) (list 'const ty)) + (split-string howm-reminder-marks ""))) + string)) + +(defcustom howm-schedule-types "[!@.]" + "*Regular expression of reminder types which are listed as schedule." + :get #'howm-custom-reminder-get-types + :set #'howm-custom-reminder-set-types + :type (howm-custom-reminder-list-types) + :group 'howm-efficiency + :group 'howm-reminder) + +(defcustom howm-todo-types + (if howm-reminder-old-format "[-+~! .]" "[-+~!.]") + "*Regular expression of reminder types which are listed as todo." + :get #'howm-custom-reminder-get-types + :set #'howm-custom-reminder-set-types + :type (howm-custom-reminder-list-types) + :group 'howm-efficiency + :group 'howm-reminder) + +(defcustom howm-congrats-format '("Finished %s tasks!") + "List of format strings to generate message when a reminder is finished. +One of elements is chosen randomly every time." + :type '(repeat string) + :group 'howm-reminder) + +(howm-defcustom-risky howm-congrats-command nil + "*If non-nil, this command is executed when a reminder is finished. +Example: (\"play\" \"~/sound/fanfare.wav\") for calling the command +\"play ~/sound/fanfare.wav\"." + :type '(repeat string) + :group 'howm-reminder) + +(defcustom howm-reminder-cancel-string "cancel" + "*This string is inserted automatically when a reminder is canceled." + :type 'string + :group 'howm-reminder) + +(defcustom howm-action-lock-forward-save-buffer nil + "*Non nil if direct manipulation on reminder list should cause auto-save." + :type 'boolean + :group 'howm-reminder) + +(defcustom howm-action-lock-forward-kill-buffer nil + "*Non nil if direct manipulation on reminder list should cause kill-buffer. +Be careful that you cannot undo the result of action-lock after kill-buffer." + :type 'boolean + :group 'howm-reminder) + +(howm-if-ver1dot3 0 + (defcustom howm-action-lock-forward-fuzziness 5 + "*Maximum lines of permitted inconsistency for `howm-action-lock-forward'." + :type 'integer + :group 'howm-reminder)) + +(let* ((sep "- - - - - - - - - - - - - - - - - - -") + (reminder-default `((-1 . ,sep) (0 . ,sep) (nil . ,sep))) + (todo-default `((0 . ,sep) (nil . ,sep)))) + (howm-if-ver1dot3 nil + (defcustom howm-menu-reminder-separators reminder-default + "Assoc list to specify positions and strings of separators in reminder +in menu. For each element, car is days from now, and cdr is separator string. +If car is nil, it means the border between schedule and todo. +This option is prepared for `howm-menu-reminder'." + :type `(radio (const :tag "No separators" nil) + (const :tag "Default separators" ,reminder-default) + (alist :key-type + (radio number + (const :tag "Between schedule and todo" nil)) + :value-type string)) + :group 'howm-reminder)) + (defcustom howm-todo-separators nil + "Assoc list to specify positions and strings of separators in todo buffer. +For each element, car is priority and cdr is separator string. +If car is nil, it means the border between active and sleeping reminders." + :type `(radio (const :tag "No separators" nil) + (const :tag "Default separators" ,todo-default) + (alist :key-type number + :value-type string)) + :group 'howm-reminder)) + +(howm-if-ver1dot3 nil + (defcustom howm-schedule-sort-by-time t + "Non nil if `howm-schedule-sort-converter' should consider time part." + :type 'boolean + :group 'howm-reminder)) + +(defcustom howm-reminder-menu-types + (if howm-reminder-old-format "[-+~!@ ]" "[-+~!@]") + "*Regular expression of reminder types which are shown in menu." + :get #'howm-custom-reminder-get-types + :set #'howm-custom-reminder-set-types + :type (howm-custom-reminder-list-types) + :group 'howm-reminder) + +;;; +;;; Menu reminder +;;; + +(defgroup howm-menu-reminder nil + "Reminders shown in menu." + :group 'howm-menu + :group 'howm-reminder) + +(defcustom howm-schedule-menu-types "[!@]" + "*Regular expression of reminder types which are shown in menu as schedule." + :get #'howm-custom-reminder-get-types + :set #'howm-custom-reminder-set-types + :type (howm-custom-reminder-list-types) + :group 'howm-efficiency + :group 'howm-menu-reminder) + +(defcustom howm-todo-menu-types + (if howm-reminder-old-format "[-+~! .]" "[-+~!.]") + "*Regular expression of reminder types which are shown in menu as todo." + :get #'howm-custom-reminder-get-types + :set #'howm-custom-reminder-set-types + :type (howm-custom-reminder-list-types) + :group 'howm-efficiency + :group 'howm-menu-reminder) + +(defcustom howm-menu-schedule-days 7 + "*Show schedule in menu until this number of days from now." + :type 'number + :group 'howm-menu-reminder) + +(defcustom howm-menu-schedule-days-before 0 + "*Show schedule in menu from this number of days ago." + :type 'number + :group 'howm-menu-reminder) + +(defcustom howm-menu-todo-num 50 + "*Maximum number of todo items shown in menu." + :type 'number + :group 'howm-menu-reminder) + +(defvar howm-huge- 66666) +(defvar howm-huge 77777) +(defvar howm-huge+ 88888) +(defvar howm-huge++ 99999) + +(defcustom howm-menu-todo-priority (- howm-huge+) + "*Limit priority for elimination of reminders in menu." + :type `(radio (const :tag "Show sleeping reminders",(- howm-huge+)) + (const :tag "Hide sleeping reminders" ,(- howm-huge-)) + number) + :group 'howm-menu-reminder) + +(defcustom howm-todo-priority-done-bottom (- howm-huge+) + "*Base priority of done reminder. + = + " + :type `(radio (const :tag "Deeper than sleeping reminders" ,(- howm-huge+)) + (const :tag "Shallower than sleeping reminders" + ,(- howm-huge-)) + number) + :group 'howm-menu-reminder) + +(defcustom howm-menu-recent-num 20 + "*Maximum number of recent items shown in menu." + :type 'number + :group 'howm-menu-reminder) + +(defcustom howm-menu-recent-regexp nil + "Regexp which is regarded as title line in recent list in menu. +When it is nil, `howm-view-title-regexp' is used." + :type '(radio (const :tag "Default" nil) + regexp) + :group 'howm-title + :group 'howm-menu-reminder) + +(defcustom howm-menu-todo-priority-format nil + "*Format for priority display in todo list in menu, or nil for no display." + :type '(radio (const :tag "Off" nil) + (const "(%8.1f)") + string) + :group 'howm-devel + :group 'howm-menu-reminder) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; List + +(defgroup howm-list nil + "Style of list view." + :group 'howm) + +(defcustom howm-view-contents-limit nil + "*Max length for howm-view-contents. Nil means no limit." + :type '(radio (const :tag "No limit" nil) + integer) + :group 'howm-list) + +(defcustom howm-view-summary-keep-cursor t + "*If non-nil, keep cursor position when you open a note from summary list." + :type 'boolean + :group 'howm-list) + +(defcustom howm-view-summary-omit-same-name t + "*If non-nil, same name is not written repeatedly in summary list." + :type 'boolean + :group 'howm-list) + +(defcustom howm-list-recent-days 7 + "*This number of days are listed by `howm-list-recent'." + :type 'integer + :group 'howm-list) + +(defcustom howm-list-buffers-exclude + '("*Messages*" ".howm-keys" ".howm-history") + "*List of excluded buffer names for `howm-list-buffers'." + :type '(repeat string) + :group 'howm-list) + +;; +;; Sort +;; + +(defgroup howm-sort nil + "Sorting and filtering of matched entries." + :group 'howm-list) + +(howm-defcustom-risky howm-list-normalizer nil + "*Obsolete. Use `howm-normalizer' insteadly." + :type '(radio (const :tag "Off (strongly recommended)" nil) + (function-item :tag "Sort by edit-time" + howm-view-sort-by-mtime) + (function-item :tag "Sort by create-time" + howm-view-sort-by-reverse-date) + function) + :group 'howm-sort) + +(howm-defcustom-risky howm-normalizer 'howm-sort-items-by-mtime + "*Default method to list matched notes. +For backward compatibility, this value is overridden +if `howm-list-normalizer' is non-nil." + :type '(radio (function-item :tag "Sort by edit-time" + howm-sort-items-by-mtime) + (function-item :tag "Sort by create-time" + howm-sort-items-by-reverse-date) + function) + :group 'howm-sort) + +(defcustom howm-list-prefer-word nil + "*Matches to whole word are listed first in summary buffer." + :type 'boolean + :group 'howm-sort) + +(defcustom howm-list-prefer-wiki t + "*Matches to wiki tags are listed first in summary buffer." + :type 'boolean + :group 'howm-sort) + +;; +;; Title +;; + +(defgroup howm-title nil + "Title of each entry." + :group 'howm-list) + +;; I don't know the way to generate this list automatically. Sigh... +(defvar howm-custom-command-list + `(set ,@(mapcar (lambda (com) (list 'const com)) + '(howm-list-all + howm-list-recent + howm-list-around + howm-keyword-search + howm-list-grep + howm-list-grep-fixed + howm-list-migemo + howm-list-related + howm-action-lock-date-search + )))) + +(howm-defcustom-risky howm-list-title + '( + howm-list-all + howm-list-recent + howm-list-around + ; howm-keyword-search + ; howm-list-grep howm-list-grep-fixed howm-list-migemo + ; howm-list-related + howm-action-lock-date-search + ) + "List of commands in which titles are listed instead of matched lines. +T means 'always'. +If it is a function, the evaluated value is used instead of itself." + :type `(radio (const :tag "Always" t) + (const :tag "Never" nil) + ,howm-custom-command-list +;; (set (const howm-list-all) +;; (const howm-list-recent) +;; (const howm-list-around) +;; (const howm-keyword-search) +;; (const howm-list-grep) +;; (const howm-list-grep-fixed) +;; (const howm-list-migemo) +;; (const howm-list-related)) + function) + :group 'howm-efficiency + :group 'howm-title) + +(defcustom howm-list-title-regexp nil + "Regexp which is regarded as title line in summary buffer. +When it is nil, `howm-view-title-regexp' is used." + :type '(radio (const :tag "Default" nil) + regexp) + :group 'howm-title) + +(defcustom howm-list-title-undo t + "*Non-nil if `howm-list-toggle-title' should toggle whether title is shown +or not." + :type 'boolean + :group 'howm-efficiency + :group 'howm-title) + +;; +;; BufWin +;; + +(defgroup howm-list-bufwin nil + "Buffers and windows for listing search result." + :group 'howm-list) + +(defcustom howm-view-summary-name "*howmS*" + "Format string of buffer name for summary. +%s is replaced with searched string. See `format'." + :type '(radio (const :tag "Use one common buffer" "*howmS*") + (const :tag "Make new buffer for each search" "*howmS:%s*") + string) + :group 'howm-list-bufwin) + +(defcustom howm-view-contents-name "*howmC*" + "Format string of buffer name for contents. +%s is replaced with searched string. See `format'." + :type '(radio (const :tag "Use one common buffer" "*howmC*") + (const :tag "Make new buffer for each search" "*howmC:%s*") + string) + :group 'howm-list-bufwin) + +(howm-defcustom-risky howm-view-summary-persistent t + "*If non-nil, keep summary buffer on howm-view-summary-open by default. +If it is a function, the evaluated value is used instead of itself." + :type 'boolean + :group 'howm-list-bufwin) + +(howm-defcustom-risky howm-view-contents-persistent t + "*If non-nil, keep contents buffer on howm-view-contents-open by default. +If it is a function, the evaluated value is used instead of itself." + :type 'boolean + :group 'howm-list-bufwin) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Search + +(defgroup howm-search nil + "Search methods." + :group 'howm) + +(defcustom howm-keyword-case-fold-search nil + "*Non-nil if searches of come-from keywords should ignore case." + :type 'boolean + :group 'howm-search) + +(defcustom howm-check-word-break nil + "*Non-nil if come-from keywords within a word should not linked. +When the value is a string (regexp), word breaks are checked +only for matched keywords. " + :type '(radio (const :tag "Always" t) + (const :tag "Never" nil) + (const :tag "ASCII only" "^[[:ascii:]]+$") + string) + :group 'howm-search) + +(defcustom howm-view-update-search-ring nil + "*Non-nil if search-ring should be updated in howm search." + :type 'boolean + :group 'howm-search) + +(defcustom howm-message-time nil + "*Non nil if search etc. should show took time." + :type 'boolean + :group 'howm-devel + :group 'howm-search) + +(howm-defcustom-risky howm-history-file "~/.howm-history" + "*Search history is recorded to that file." + :type 'file + :group 'howm-files + :group 'howm-search) + +(defcustom howm-history-limit 50 + "*Limit number of recorded search history, or nil for no limit. +Set 0 to inhibit recording." + :type '(radio (const :tag "No limit" nil) + integer) + :group 'howm-search) + +(defcustom howm-history-unique t + "*If non-nil, duplicated entries are removed from search history." + :type 'boolean + :group 'howm-search) + +(defcustom howm-keyword-list-alias-sep "\t" + "*Separator string for alias keywords in the keyword file `howm-keyword-file'. +If it is nil, alias of come-from keyword is disabled." + :type '(radio (const :tag "Disable aliases" nil) + (const :tag "Tab" "\t") + string) + :group 'howm-search) + +(defcustom howm-keyword-aliases-recursive t + "*Non nil if aliases of come-from keywords should be expanded recursively." + :type 'boolean + :group 'howm-search) + +;;; +;;; grep +;;; + +(defgroup howm-grep nil + "Use external grep command for fast search." + :group 'howm-efficiency + :group 'howm-search) + +(howm-defcustom-risky howm-view-use-grep nil + "*If non-nil, use external grep command for search. +Performance must be improved greatly if you set this. +When the value is elisp function, it is used instead of `howm-fake-grep'." + :type '(radio (const :tag "On" t) + (const :tag "Off" nil) + function) + :group 'howm-grep) + +;; These variables should be renamed: howm-view-xxx ==> howm-xxx. +(howm-defcustom-risky howm-view-grep-command "grep" + "*Command name for grep." + :type 'string + :group 'howm-grep) +(howm-defvar-risky howm-view-fgrep-command nil + "*Command name for fgrep. +This variable is obsolete and may be removed in future.") +(defvar howm-view-grep-default-option + ;; "labels" causes a trouble in git-head emacs (d5e3922) [2015-01-31] + (let* ((ed (lambda (d) (concat "--exclude-dir=" d))) + (has-ed (condition-case nil + (eq 0 (call-process howm-view-grep-command nil nil nil + (apply ed "/") "--version")) + (error nil))) + (opts (cons "-Hnr" (and has-ed (mapcar ed howm-excluded-dirs))))) + (mapconcat #'identity opts " "))) +(howm-defcustom-risky howm-view-grep-option howm-view-grep-default-option + "*Common grep option for howm." + :type `(radio (const :tag "scan all files" + ,howm-view-grep-default-option) + (const :tag "scan *.howm only" + ,(concat howm-view-grep-default-option + " --include=*.howm")) + string) + :group 'howm-grep) +(howm-defcustom-risky howm-view-grep-extended-option "-E" + "*Grep option for extended regular expression." + :type 'string + :group 'howm-grep) +(howm-defcustom-risky howm-view-grep-fixed-option "-F" + "*Grep option to search fixed strings." + :type 'string + :group 'howm-grep) +(howm-defcustom-risky howm-view-grep-ignore-case-option "-i" + "*Grep option for ignoring case distinctions." + :type 'string + :group 'howm-grep) +(howm-defcustom-risky howm-view-grep-expr-option "-e" + "*Grep option for pattern." + :type 'string + :group 'howm-grep) +(howm-defcustom-risky howm-view-grep-file-stdin-option "-f -" + "*Grep option for receiving patterns from standard input. +If this is nil, pattern is received as command line argument." + :type '(radio (const :tag "Off" nil) + string) + :group 'howm-grep) + +(howm-defcustom-risky howm-command-length-limit 10000 + "*Maximum length of command line for call-process." + :type 'integer + :group 'howm-grep) + +(defcustom howm-process-coding-system nil + "*Default coding system for grep command in howm. +If the value is a symbol, it is used for both read and write. +If the value is a cons pair, its car and cdr are used for read and write, +respectively. + +Example: + (setq howm-process-coding-system 'euc-japan-unix) + (setq howm-process-coding-system '(utf-8-unix . sjis-unix))" + :type '(radio (const :tag "Off" nil) + coding-system + (cons coding-system coding-system)) + :group 'howm-grep) + +(howm-if-ver1dot3 nil + (defcustom howm-occur-force-fake-grep t + "*If non-nil, force `howm-occur' to use `howm-fake-grep' +so that highlighting works correctly." + :type 'boolean + :group 'howm-grep)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Misc + +(defgroup howm-misc nil + "Miscellaneous customization." + :group 'howm) + +(defvar howm-prefix "\C-c," + "Howm commands are invoked by this prefix + some keys.") + +(defcustom howm-random-walk-wait 2 + "*Seconds of wait in `howm-random-walk'." + :type 'number + :group 'howm-misc) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Create + +(defgroup howm-create nil + "Create new note." + :group 'howm-misc) + +(defcustom howm-prepend nil + "*Non nil if new entries should be prepended to previous entries. +Otherwise, they are appended." + :type '(radio (const :tag "Append" nil) + (const :tag "Prepend" t)) + :group 'howm-create) + +(defcustom howm-content-from-region nil + "*When the value non-nil, selected string is inserted as default content. +Unless the value is t, single-line selection is inserted as title instead. +This variable is ignored when `transient-mark-mode' is nil." + :type '(radio (const :tag "Off" nil) + (const :tag "Single line selection is copied as title" 1) + (const :tag "Any selection is copied as content" t)) + :group 'howm-create) + +(defcustom howm-title-from-search nil + "*Non nil if searched keyword is inserted as default title +when `howm-create' is called on summary buffer." + :type 'boolean + :group 'howm-create) + +(defcustom howm-create-here-just nil + "*Non nil if `howm-create-here' should insert new entry into cursor position +rather than append or prepend." + :type '(radio (const :tag "Append or prepend" nil) + (const :tag "Just here" t)) + :group 'howm-create) + +(defcustom howm-remember-first-line-to-title nil + "If non-nil, the first line in `howm-remember' is set to %title +and the rest lines are inserted to the position at %cursor in `howm-template. +If nil, all the lines are simply inserted at %cursor." + :type 'boolean + :group 'howm-create) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Viewer + +(defgroup howm-viewer nil + "External viewers for images, movies, sounds, etc." + :group 'howm-misc) + +(defun howm-try-require (feature) + (and (locate-library (symbol-name feature)) + (require feature))) + +;; These variables should be renamed. + +(howm-defcustom-risky howm-view-external-viewer-assoc nil + "List of viewer specifications. +Each specification must be a cons pair of type and format. +Type is a regular expression of file names. +Format is a command string in which %s is replaced with file name. +This setting is prior to mailcap. + +This variable is marked as a risky local variable +because `howm-viewer-dispatchers' `howm-viewer-indicator' +and `howm-viewer-type' accept functions instead of format strings. + +Example: + (setq howm-view-external-viewer-assoc + '( + (\"[.]\\(jpg\\|gif\\|png\\)$\" . \"display %s\") + (\"[.]dvi$\" . \"xdvi %s\") + )) +" + :type '(alist :key-type regexp :value-type string) + :group 'howm-viewer) + +(defcustom howm-view-use-mailcap + (and (howm-try-require 'mailcap) + (fboundp 'mailcap-parse-mailcaps) + (fboundp 'mailcap-parse-mimetypes)) + "*Non nil if external viewers should be selected according to mailcap. +Mailcap processing depends on gnus/mailcap, and old FLIM library may +cause conflicts." + :type 'boolean + :group 'howm-viewer) + +(defcustom howm-view-open-by-myself '("text/.*" "application/emacs-lisp") + "List of regular expressions for mime types which should be opened normally." + :type '(repeat regexp) + :group 'howm-viewer) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Narrow + +(defgroup howm-narrow nil + "Narrowing to each entry." + :group 'howm-misc) + +(defcustom howm-auto-narrow t + "List of commands after which the function `howm-auto-narrow' can work. +If the value is t, it means 'always'." + :type `(radio (const :tag "Never" nil) + (const :tag "Always" t) + ,howm-custom-command-list) + :group 'howm-narrow) + +(mapc (lambda (hook) (custom-add-option hook 'howm-auto-narrow)) + '(howm-view-open-hook howm-create-hook)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Efficiency + +(defgroup howm-efficiency nil + "To improve performance, use grep and turn off expensive options." + :group 'howm) + +(defcustom howm-refresh-after-save t + "*Redraw links after you save howm note." + :type 'boolean + :group 'howm-efficiency) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Face + +(defgroup howm-faces nil + "Colors and fonts." + :group 'faces + :group 'howm) + +(howm-defcustom-risky howm-user-font-lock-keywords nil + "Font lock keywords for all howm-related buffers. +See help of `font-lock-keywords' for details. +Note: `howm-menu-font-lock-rules' overrides this variable." + ;; :type '(repeat (radio (cons regexp (list (const quote) face)) + ;; sexp)) + :type 'sexp + :group 'howm-faces) + +(defcustom howm-use-color t + "*If non-nil, highlight tags in howm-mode verbosely." + :type 'boolean + :group 'howm-faces) + +(defface howm-view-hilit-face + '((((class color)) (:foreground "red")) + (t ())) + "*Face for matched word." + :group 'howm-faces) + +(defface howm-view-name-face + '((((class color)) (:foreground "white" :background "blue")) + (t ())) + "*Face for file name in summary buffer." + :group 'howm-faces) + +(defface howm-view-empty-face + '((((class color)) (:background "midnight blue")) + (t ())) + "*Face for empty field in summary buffer." + :group 'howm-faces) + +(defface howm-mode-title-face ;; = + '((((class color)) (:foreground "RoyalBlue")) + (t ())) + "*Face for title." + :group 'howm-faces) +(defface howm-mode-ref-face ;; >>> + '((((class color) (background light)) (:foreground "blue")) + (((class color) (background dark)) (:foreground "cyan")) + (t ())) + "*Face for goto link." + :group 'howm-faces) +(defface howm-mode-keyword-face ;; <<< + '((((class color)) (:foreground "white" :background "blue")) + (t ())) + "*Face for come-from link." + :group 'howm-faces) +(defface howm-mode-wiki-face ;; [[]] + '((((class color) (background light)) (:foreground "blue")) + (((class color) (background dark)) (:foreground "cyan")) + (t ())) + "*Face for wiki link." + :group 'howm-faces) + +(defface howm-reminder-normal-face + '((((class color)) (:foreground "blue")) + (t ())) + "*Face for normal reminder." + :group 'howm-faces) +(defface howm-reminder-todo-face + '((((class color) (background light)) (:foreground "purple")) + (((class color) (background dark)) (:foreground "yellow")) + (t ())) + "*Face for todo." + :group 'howm-faces) +(defface howm-reminder-defer-face + '((((class color)) (:foreground "magenta")) + (t ())) + "*Face for defer." + :group 'howm-faces) +(defface howm-reminder-deadline-face + '((((class color)) (:foreground "red")) + (t ())) + "*Face for deadline." + :group 'howm-faces) +(defface howm-reminder-late-deadline-face + '((((class color)) (:background "red" :foreground "black")) + (t ())) + "*Face for late deadline." + :group 'howm-faces) +(defface howm-reminder-schedule-face + '((((class color) (background light)) (:foreground "dark green")) + (((class color) (background dark)) (:foreground "green")) + (t ())) + "*Face for schedule." + :group 'howm-faces) +(defface howm-reminder-done-face + '((((class color) (background light)) ()) + (((class color) (background dark)) (:foreground "gray")) + (t ())) + "*Face for done reminder." + :group 'howm-faces) +(defface howm-reminder-today-face + '((((class color)) (:foreground "black" :background "orange")) + (t ())) + "*Face for today." + :group 'howm-faces) +(defface howm-reminder-tomorrow-face + '((((class color)) (:foreground "black" :background "pink")) + (t ())) + "*Face for tommorow." + :group 'howm-faces) + +(defface howm-menu-list-face ;; item header in menu-mode list (schedule, todo) + '((t ())) + "*Face for list in menu." + :group 'howm-faces) +(defface howm-menu-key-face ;; shortcut key in menu-mode + '((((class color) (background light)) (:foreground "dark red")) + (((class color) (background dark)) (:foreground "orange")) + (t ())) + "*Face for key binding in menu." + :group 'howm-faces) + +(defvar howm-view-hilit-face 'howm-view-hilit-face + "*Face for matched word.") +(defvar howm-view-name-face 'howm-view-name-face + "*Face for file name in summary buffer.") +(defvar howm-view-empty-face 'howm-view-empty-face + "*Face for empty field in summary buffer.") +(defvar howm-mode-title-face 'howm-mode-title-face + "*Face for title.") +(defvar howm-mode-ref-face 'howm-mode-ref-face + "*Face for goto link.") +(defvar howm-mode-keyword-face 'howm-mode-keyword-face + "*Face for come-from link.") +(defvar howm-mode-wiki-face 'howm-mode-wiki-face + "*Face for wiki link.") +(defvar howm-reminder-normal-face 'howm-reminder-normal-face + "*Face for normal reminder.") +(defvar howm-reminder-todo-face 'howm-reminder-todo-face + "*Face for todo.") +(defvar howm-reminder-defer-face 'howm-reminder-defer-face + "*Face for defer.") +(defvar howm-reminder-deadline-face 'howm-reminder-deadline-face + "*Face for deadline.") +(defvar howm-reminder-late-deadline-face 'howm-reminder-late-deadline-face + "*Face for late deadline.") +(defvar howm-reminder-schedule-face 'howm-reminder-schedule-face + "*Face for schedule.") +(defvar howm-reminder-done-face 'howm-reminder-done-face + "*Face for done reminder.") +(defvar howm-reminder-today-face 'howm-reminder-today-face + "*Face for today.") +(defvar howm-reminder-tomorrow-face 'howm-reminder-tomorrow-face + "*Face for tommorow.") +(defvar howm-menu-list-face 'howm-menu-list-face + "*Face for list in menu.") +(defvar howm-menu-key-face 'howm-menu-key-face + "*Face for key binding in menu.") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Hook + +(defgroup howm-hooks nil + "Hooks." + :group 'howm) + +(defcustom howm-mode-hook nil + "Hook run at the end of function `howm-mode'" + :type 'hook + :group 'howm-hooks) + +(defcustom howm-mode-on-hook nil + "Hook run when `howm-mode' is turned on." + :type 'hook + :group 'howm-hooks) + +(defcustom howm-mode-off-hook nil + "Hook run when `howm-mode' is turned off." + :type 'hook + :group 'howm-hooks) + +(defcustom howm-view-open-hook nil + "Hook run when open a note from summary/contents buffer." + :type 'hook + :group 'howm-narrow + :group 'howm-hooks) + +(defcustom howm-view-before-open-hook nil + "Hook run before open something from summary or contents buffer." + :type 'hook + :group 'howm-hooks) + +(defcustom howm-create-file-hook nil + "Hook run when buffer for new note is created." + :type 'hook + :group 'howm-hooks) + +(defcustom howm-create-hook nil + "Hook run after new note is created and set up." + :type 'hook + :group 'howm-narrow + :group 'howm-hooks) + +(defcustom howm-menu-hook nil + "Hook run at the end of `howm-menu-refresh'." + :type 'hook + :group 'howm-hooks) + +(defcustom howm-congrats-hook nil + "Hook run at the end of `howm-congrats'." + :type 'hook + :group 'howm-hooks) + +(defcustom howm-after-save-hook nil + "Hook run at the end of `howm-after-save'." + :type 'hook + :group 'howm-hooks) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Devel + +(defgroup howm-devel nil + "Developers' diagnoses." + :group 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Experimental + +(defgroup howm-experimental nil + "Test of experimental features." + :group 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Date format (need refactoring) + +(defvar howm-date-separator "-") ;; "-" ==> 2003-10-21 + +;; Fix me: redundant (howm-date-* & howm-reminder-*) +;; (cf.) howm-reminder-regexp-grep-* howm-reminder-today-format +(defvar howm-date-regexp-grep + (concat "[1-2][0-9][0-9][0-9]" howm-date-separator + "[0-1][0-9]" howm-date-separator + "[0-3][0-9]")) +(defvar howm-date-regexp + (concat "\\([1-2][0-9][0-9][0-9]\\)" howm-date-separator + "\\([0-1][0-9]\\)" howm-date-separator + "\\([0-3][0-9]\\)")) +(defvar howm-date-regexp-year-pos 1) +(defvar howm-date-regexp-month-pos 2) +(defvar howm-date-regexp-day-pos 3) +(defvar howm-date-format + (concat "%Y" howm-date-separator "%m" howm-date-separator "%d")) +(defvar howm-dtime-body-format + (concat howm-date-format " %H:%M")) +(defvar howm-dtime-format + (concat "[" howm-dtime-body-format "]")) +(defvar howm-insert-date-format "[%s]") +(defvar howm-insert-date-future nil) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Avoid reference to free variable (need refactoring) + +(howm-defvar-risky howm-menu-action-arg 'howm-menu-action-arg-name) + +;;; + +(provide 'howm-vars) + +;;; howm-vars.el ends here diff --git a/howm-version.el b/howm-version.el new file mode 100644 index 0000000..09d8a7c --- /dev/null +++ b/howm-version.el @@ -0,0 +1,8 @@ +;;; howm-version.el --- Wiki-like keyword jump between files +;;; -*- Emacs-Lisp -*- +;;; @configure_input@ + +(provide 'howm-version) +(defconst howm-version "InsertVersionHere") + +;;; howm-version.el ends here diff --git a/howm-version.el.in b/howm-version.el.in new file mode 100644 index 0000000..d6ba815 --- /dev/null +++ b/howm-version.el.in @@ -0,0 +1,8 @@ +;;; howm-version.el --- Wiki-like keyword jump between files +;;; -*- Emacs-Lisp -*- +;;; @configure_input@ + +(provide 'howm-version) +(defconst howm-version "~VERSION~") + +;;; howm-version.el ends here diff --git a/howm-view.el b/howm-view.el new file mode 100644 index 0000000..2d94829 --- /dev/null +++ b/howm-view.el @@ -0,0 +1,1603 @@ +;;; howm-view.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm-view.el,v 1.251 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +(provide 'howm-view) +(require 'howm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; variables + +;; customize +(defvar howm-view-summary-sep "|") +(defvar howm-view-summary-format + (let* ((path (format-time-string howm-file-name-format)) + (width (length (file-name-nondirectory path)))) + (concat "%-" (format "%s" (1+ width)) "s" howm-view-summary-sep " "))) +(defvar howm-view-header-format + "\n==========================>>> %s\n" + "Format string of header for howm-view-contents. +%s is replaced with file name. See `format'.") +(defvar howm-view-header-regexp "^==========================>>> .*$") +(defvar howm-view-open-recenter howm-view-search-recenter) +(defvar howm-view-title-header "=") +;; howm-view-title-regexp is assumed to have a form "^xxxxxxx$" +(defvar howm-view-title-regexp (format "^%s\\( +\\(.*\\)\\|\\)$" + (regexp-quote howm-view-title-header))) +(defvar howm-view-title-regexp-pos 2) +(defvar howm-view-title-regexp-grep (format "^%s +" + (regexp-quote howm-view-title-header))) +(defun howm-view-title-regexp-grep () + (if howm-view-use-grep + howm-view-title-regexp-grep + howm-view-title-regexp)) + +(howm-defvar-risky howm-view-sort-methods + '(("random" . howm-view-sort-by-random) + ("name" . howm-view-sort-by-name) + ("name-match" . howm-view-lift-by-name) + ("numerical-name" . howm-view-sort-by-numerical-name) + ("summary" . howm-view-sort-by-summary) + ("summary-match" . howm-view-lift-by-summary) + ("summary-match-string" . howm-view-lift-by-summary-substring) +; ("atime" . howm-view-sort-by-atime) ;; nonsense +; ("ctime" . howm-view-sort-by-ctime) ;; needless + ("mtime" . howm-view-sort-by-mtime) + ("date" . howm-view-sort-by-reverse-date) + ("reminder" . howm-view-sort-by-reminder) + ("reverse" . howm-view-sort-reverse))) + +(howm-defvar-risky howm-view-filter-methods + '(("name" . howm-view-filter-by-name) + ("summary" . howm-view-filter-by-summary) + ("mtime" . howm-view-filter-by-mtime) +; ("ctime" . howm-view-filter-by-ctime) ;; needless + ("date" . howm-view-filter-by-date) + ("reminder" . howm-view-filter-by-reminder) + ("contents" . howm-view-filter-by-contents) + ("Region" . howm-view-filter-by-region) + ("Around" . howm-view-filter-by-around) +; ("uniq" . howm-view-filter-uniq)) + )) + +;; referred only when howm-view-use-grep is nil +(defvar howm-view-watch-modified-buffer t) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; item + +(defun howm-view-item-basename (item &optional nonempty) + (let* ((f (howm-item-name item)) + (b (file-name-nondirectory f))) + (if (and (string= b "") nonempty) + f + b))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; riffle + +(defalias 'riffle-home:howm 'howm-view-item-home) +(defalias 'riffle-summary-item:howm 'howm-view-summary-item) +(defalias 'riffle-contents-item:howm 'howm-view-contents-item) +(defalias 'riffle-summary-set-mode:howm 'howm-view-summary-mode) +(defalias 'riffle-contents-set-mode:howm 'howm-view-contents-mode) + +(defun riffle-summary-name-format:howm () + howm-view-summary-name) +(defun riffle-contents-name-format:howm () + howm-view-contents-name) +(defun riffle-post-update:howm (item) + (howm-message-nolog "View: %s" (howm-view-item-filename item))) + +;;; aliases + +;; Only howm-view.el should call riffle-xxx. +;; Define alias if it is used in howm-xxx besides howm-view.el. +(defalias 'howm-view-name #'riffle-name) +(defalias 'howm-view-item-list #'riffle-item-list) +(defalias 'howm-view-line-number #'riffle-line-number) +(defalias 'howm-view-summary-check #'riffle-summary-check) +(defalias 'howm-view-persistent-p #'riffle-persistent-p) +(defalias 'howm-view-kill-buffer #'riffle-kill-buffer) +(defalias 'howm-view-set-place #'riffle-set-place) +(defalias 'howm-view-get-place #'riffle-get-place) +(defalias 'howm-view-summary-current-item #'riffle-summary-current-item) +(defalias 'howm-view-contents-current-item #'riffle-contents-current-item) +(defalias 'howm-view-summary-to-contents #'riffle-summary-to-contents) +(defalias 'howm-view-restore-window-configuration #'riffle-restore-window-configuration) + +;; for howmoney.el +;; http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?howmoney +(defun howm-view-get-buffer (name-format &optional name new) + (let ((riffle-type ':howm)) ;; cheat + (riffle-get-buffer name-format name new))) +(defun howm-view-summary-buffer (&optional new) + (let ((riffle-type ':howm)) ;; cheat + (riffle-summary-buffer new))) +(defalias 'howm-view-summary-show 'riffle-summary-show) +(defalias 'howm-view-set-item-list 'riffle-set-item-list) + +;; for howmz +;; http://noir.s7.xrea.com/archives/000136.html +;; http://noir.s7.xrea.com/pub/zaurus/howmz.el +(defalias 'howm-view-sort-items 'howm-sort) + +;;; variables + +(defvar howm-view-font-lock-silent t + "Inhibit font-lock-verbose if non-nil.") +(howm-defvar-risky howm-view-summary-font-lock-keywords + `((,(concat "\\(^[^ \t\r\n].*?\\)" (regexp-quote howm-view-summary-sep)) + 1 howm-view-name-face) + ("^ +" . howm-view-empty-face))) +(howm-defvar-risky howm-view-contents-font-lock-keywords nil) + +(howm-defvar-risky *howm-view-font-lock-keywords* nil + "For internal use. Don't set this variable. +This is a shameful global variable and should be clearned in future.") +(howm-defvar-risky howm-view-font-lock-keywords nil + "For internal use.") +(defvar howm-view-font-lock-first-time t + "For internal use.") +(make-variable-buffer-local 'howm-view-font-lock-keywords) +(make-variable-buffer-local 'howm-view-font-lock-first-time) + +;;; modes + +(riffle-define-derived-mode howm-view-summary-mode riffle-summary-mode "HowmS" + "memo viewer (summary mode) +key binding +--- ------- +\\[howm-view-summary-open] Open file +\\[next-line] Next item +\\[previous-line] Previous item +\\[riffle-pop-or-scroll-other-window] Pop and scroll contents +\\[scroll-other-window-down] Scroll contents +\\[riffle-scroll-other-window] Scroll contents one line +\\[riffle-scroll-other-window-down] Scroll contents one line +\\[riffle-summary-to-contents] Concatenate all contents +\\[howm-view-filter-uniq] Remove duplication of same file +\\[howm-view-summary-shell-command] Execute command in inferior shell + +\\[delete-other-windows] Delete contents window +\\[riffle-pop-window] Pop contents window +\\[riffle-toggle-window] Toggle contents window +\\[howm-list-toggle-title] Show/Hide Title + +\\[howm-view-filter] Filter (by date, contents, etc.) +\\[howm-view-filter-by-contents] Search (= filter by contents) +\\[howm-view-sort] Sort (by date, summary line, etc.) +\\[howm-view-sort-reverse] Reverse order +\\[howm-view-dired] Invoke Dired-X +\\[describe-mode] This help +\\[riffle-kill-buffer] Quit +" + (make-local-variable 'font-lock-keywords) + (cheat-font-lock-mode howm-view-font-lock-silent) + (when howm-view-font-lock-first-time + (setq howm-view-font-lock-first-time nil) + (cheat-font-lock-merge-keywords howm-user-font-lock-keywords + howm-view-summary-font-lock-keywords + ;; dirty! Clean dependency between files. + (howm-reminder-today-font-lock-keywords))) + (when *howm-view-font-lock-keywords* + (setq howm-view-font-lock-keywords *howm-view-font-lock-keywords*)) + (when howm-view-font-lock-keywords + (cheat-font-lock-merge-keywords howm-view-font-lock-keywords + howm-user-font-lock-keywords + howm-view-summary-font-lock-keywords)) + ;; font-lock-set-defaults removes these local variables after 2008-02-24 + (set (make-local-variable 'font-lock-keywords-only) t) + (set (make-local-variable 'font-lock-keywords-case-fold-search) t) + ;; (setq font-lock-keywords-case-fold-search + ;; howm-view-grep-ignore-case-option) + (cheat-font-lock-fontify) + ) + +(riffle-define-derived-mode howm-view-contents-mode riffle-contents-mode "HowmC" + "memo viewer (contents mode) +key binding +--- ------- +\\[howm-view-contents-open] Open file +\\[next-line] Next line +\\[previous-line] Previous line +\\[scroll-up] Scroll up +\\[scroll-down] Scroll down +\\[riffle-scroll-up] Scroll one line up +\\[riffle-scroll-down] Scroll one line down +\\[riffle-contents-to-summary] Summary +\\[riffle-contents-goto-next-item] Next item +\\[riffle-contents-goto-previous-item] Previous item + +\\[howm-view-filter] Filter (by date, contents, etc.) +\\[howm-view-filter-by-contents] Search (= filter by contents) +\\[howm-view-sort] Sort +\\[howm-view-sort-reverse] Reverse order +\\[howm-view-dired] Invoke Dired-X +\\[describe-mode] This help +\\[riffle-kill-buffer] Quit +" +; (kill-all-local-variables) + (make-local-variable 'font-lock-keywords) + (cheat-font-lock-mode howm-view-font-lock-silent) + (let ((ck `((,howm-view-header-regexp (0 howm-view-hilit-face)))) + (sk (or (howm-view-font-lock-keywords) + *howm-view-font-lock-keywords*))) +;; ;; extremely dirty!! [2003/10/06 21:08] +;; (sk (or (with-current-buffer (riffle-summary-buffer) +;; font-lock-keywords) +;; *howm-view-font-lock-keywords*))) + (cheat-font-lock-merge-keywords sk ck + howm-user-font-lock-keywords + howm-view-contents-font-lock-keywords) + ;; font-lock-set-defaults removes these local variables after 2008-02-24 + (set (make-local-variable 'font-lock-keywords-only) t) + (set (make-local-variable 'font-lock-keywords-case-fold-search) + howm-view-grep-ignore-case-option) + (cheat-font-lock-fontify) + )) + +(defun howm-view-font-lock-keywords () + (with-current-buffer (riffle-summary-buffer) + howm-view-font-lock-keywords)) + +;;; keymaps + +;; (defvar howm-view-summary-mode-map nil) +;; (defvar howm-view-contents-mode-map nil) + +(defun howm-view-define-common-key (keymap) + (let ((m keymap)) +;; (define-key m "?" 'howm-view-help) + (define-key m "f" 'howm-view-filter) + (define-key m "G" 'howm-view-filter-by-contents) + (define-key m "S" 'howm-view-sort) + (define-key m "R" 'howm-view-sort-reverse) + (define-key m "q" 'howm-view-kill-buffer) + (define-key m "X" 'howm-view-dired) + )) + +(let ((m howm-view-summary-mode-map)) + (define-key m "\C-m" 'howm-view-summary-open) + (define-key m "\C-j" 'howm-view-summary-open) + (define-key m "u" 'howm-view-filter-uniq) + (define-key m "!" 'howm-view-summary-shell-command) + (define-key m "T" 'howm-list-toggle-title) ;; defined in other file. dirty! + ;; (define-key m howm-reminder-quick-check-key 'howm-reminder-quick-check) + ;; (define-key m ";" 'howm-view-invoke-action-lock) + (define-key m "\C-i" 'howm-view-summary-next-section) + (define-key m "\M-\C-i" 'howm-view-summary-previous-section) + (define-key m [tab] 'howm-view-summary-next-section) + (define-key m [(meta tab)] 'howm-view-summary-previous-section) + (howm-view-define-common-key m)) + +(let ((m howm-view-contents-mode-map)) + (define-key m "\C-m" 'howm-view-contents-open) + (define-key m "\C-j" 'howm-view-contents-open) + (howm-view-define-common-key m)) + +;;; summary + +(defun howm-view-summary (&optional name item-list fl-keywords) + (let* ((*howm-view-font-lock-keywords* fl-keywords) ;; ok? [2008-07-11] + (r (riffle-summary name item-list ':howm + (howm-view-in-background-p)))) + (if (null r) + (message "No match") + ;; We want to entry font-lock keywords even when background-p. + (when *howm-view-font-lock-keywords* + (setq howm-view-font-lock-keywords *howm-view-font-lock-keywords*))) + r)) + +;; (defun howm-view-summary (&optional name item-list) +;; (let ((*howm-view-font-lock-keywords* t)) +;; (riffle-summary name item-list ':howm))) + +(defun howm-view-summary-open (&optional reverse-delete-p) + (interactive "P") + (when (not (and howm-view-summary-keep-cursor + (get-buffer-window (riffle-contents-buffer)))) + (riffle-summary-check t)) + (let* ((p (riffle-persistent-p howm-view-summary-persistent)) + (persistent (if reverse-delete-p + (not p) + p))) + (howm-record-view-window-configuration) + (howm-view-summary-open-sub (not persistent)))) + +(defun howm-view-summary-open-sub (&optional kill) + (interactive "P") + (let ((b (riffle-contents-buffer)) + (looking-at-str (buffer-substring-no-properties (point) + (line-end-position)))) + (riffle-pop-to-buffer b howm-view-summary-window-size) + (let ((howm-view-open-hook nil)) ;; Don't execute it in contents-open. + (howm-view-contents-open-sub kill)) + (end-of-line) + (or (search-backward looking-at-str (line-beginning-position) t) + (beginning-of-line)) + (run-hooks 'howm-view-open-hook))) + +(defvar howm-view-summary-item-previous-name nil + "for internal use") +(defun howm-view-summary-item (item) + ;; Clean me. This depends on implementation of `riffle-summary-show' + ;; severely. + (when (eq (point) (point-min)) + (setq howm-view-summary-item-previous-name "")) + (let* ((f (howm-item-name item)) + (name (if (and howm-view-summary-omit-same-name + (string= f howm-view-summary-item-previous-name)) + "" + (progn + (setq howm-view-summary-item-previous-name f) + (howm-view-item-basename item t)))) + (h (format howm-view-summary-format name))) + (concat h (howm-view-item-summary item)))) + +(defun howm-view-summary-next-section (&optional n) + (interactive "P") + (setq n (or n 1)) + (let ((i (abs n)) + (step (if (>= n 0) 1 -1))) + (while (and (> i 0) + (howm-view-summary-next-section-sub step)) + (setq i (1- i))))) +(defun howm-view-summary-previous-section (&optional n) + (interactive "P") + (setq n (or n 1)) + (howm-view-summary-next-section (- n))) +(defun howm-view-summary-next-section-sub (step) + ;; inefficient. so what? + (let* ((f (lambda () + (howm-view-item-filename (riffle-summary-current-item)))) +;; (riffle-controller 'section (riffle-summary-current-item)))) + (cont-p (lambda () + (save-excursion + (let ((a (funcall f))) + (forward-line -1) + (string= a (funcall f))))))) + (while (and (= (forward-line step) 0) + (funcall cont-p)) + ;; no body + ))) + +;;; contents + +(defun howm-view-contents-open (&optional reverse-delete-p) + (interactive "P") + (let* ((p (riffle-persistent-p howm-view-contents-persistent)) + (persistent (if reverse-delete-p + (not p) + p))) + (howm-record-view-window-configuration) + (howm-view-contents-open-sub (not persistent)))) + +(defvar *howm-view-item-privilege* nil) ;; dirty + +(defun howm-view-contents-open-sub (&optional kill) + (let* ((item (riffle-contents-current-item)) + (page (howm-item-page item)) + (offset (howm-view-item-offset item)) + (pos (- (point) offset)) + (viewer (howm-view-external-viewer page))) + (when kill + (riffle-kill-buffer)) + (when (howm-view-item-privilege item) + (riffle-restore-window-configuration)) ;; force without mode check + (setq *howm-view-item-privilege* (howm-view-item-privilege item)) ;; dirty + (run-hooks 'howm-view-before-open-hook) + (if viewer + (howm-view-call-external-viewer viewer page) + (howm-view-open-item item + (lambda () + (when (or (< pos (point-min)) (<= (point-max) pos)) + (widen)) + (goto-char pos)) + t)) + (run-hooks 'howm-view-open-hook))) + +(defun howm-view-open-item (item &optional position-setter merely) + (howm-page-open (howm-item-page item)) + (howm-view-set-mark-command) + (if position-setter + (funcall position-setter) + (howm-view-set-place (howm-item-place item))) + (recenter howm-view-open-recenter) + (when (not merely) + (howm-view-open-postprocess))) +(defun howm-view-open-postprocess () + (run-hooks 'howm-view-open-hook)) + +(defvar howm-view-previous-section-page nil "For internal use") +(defvar howm-view-previous-section-beg nil "For internal use") +(defvar howm-view-previous-section-end nil "For internal use") + +(defun howm-view-contents-item (item) + (when (howm-buffer-empty-p) + (setq howm-view-previous-section-page "" + howm-view-previous-section-beg nil + howm-view-previous-section-end nil)) + (let* ((page (howm-item-page item)) + (place (howm-view-item-place item)) + (peq (howm-page= page howm-view-previous-section-page)) ;; dirty! + (done-p (if place + (and peq + (<= howm-view-previous-section-beg place) + (<= place howm-view-previous-section-end)) + peq))) + (if done-p + "" + (let* ((header (if (null (cdr (howm-view-item-list))) ;; dirty! + "" + (format howm-view-header-format + (howm-page-abbreviate-name page)))) + (header-length (howm-view-string-point-count header)) + (viewer (howm-view-external-viewer page))) + (concat header + (howm-view-contents-item-sub item page place header viewer + (+ (point) header-length))))))) + +(defvar howm-view-string-point-count-strict nil) +(defun howm-view-string-point-count (str) + "Count points of string STR. +Namely, it is the difference between start position and end position +of STR if STR is inserted to a buffer. +It looks to be simply equal to (length STR) on emacs-21.1.1. +But I'm not sure for multi-byte characters on other versions of emacsen." + (if howm-view-string-point-count-strict + (with-temp-buffer + (insert str) + (- (point) (point-min))) + ;; I assume (length (buffer-substring-no-properties START END)) + ;; is equal to (abs (- START END))). Is it correct? + ;; (cf.) snap://Info-mode/elisp#Positions + (length str))) + +(defun howm-view-contents-item-sub (item page place header viewer c) + (with-temp-buffer + (let (b e h) + (if viewer + (howm-view-contents-indicator viewer page) + (howm-page-insert page)) + (if place + (progn + (riffle-set-place place) + (setq h (point)) + (let ((r (howm-view-contents-region page))) + (setq b (car r) + e (cadr r)))) + (setq b (point-min) + e (point-max) + h b)) + (howm-view-item-set-offset item (- c b)) + (howm-view-item-set-home item (+ c (- b) h)) + (setq howm-view-previous-section-page page ;; dirty! + howm-view-previous-section-beg (riffle-get-place b) + howm-view-previous-section-end (riffle-get-place e)) + (buffer-substring-no-properties b e)))) + +(defvar howm-view-preview-narrow t) +(defun howm-view-contents-region (filename) + (when filename + (howm-page-set-configuration filename)) + (if (or howm-view-preview-narrow + (not (riffle-preview-p))) + (howm-view-paragraph-region) + (list (point-min) (point-max)))) + +(defun howm-view-contents-indicator (viewer fname) + (insert (howm-viewer-indicator viewer fname))) + +(defun howm-view-paragraph-region (&optional include-following-blank-p) + (let ((b (save-excursion + (end-of-line) + (re-search-backward howm-view-title-regexp + nil 'to-limit) + (line-beginning-position))) + (e (save-excursion + (end-of-line) + (let ((found (re-search-forward howm-view-title-regexp + nil 'to-limit))) + (if include-following-blank-p + (if found (match-beginning 0) (point-max)) + (progn + (if found + (forward-line -1) + (goto-char (point-max))) +; (end-of-line) + (while (and (looking-at "^$") + (= (forward-line -1) 0)) ;; successful + nil) ;; dummy + (end-of-line) + (point))))))) + (list b e))) + +(defun howm-view-set-mark-command () + (set-mark-command nil) + (howm-deactivate-mark)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; misc. + +(defun howm-view-file-list (&optional item-list) + (howm-cl-remove-duplicates* (mapcar #'howm-view-item-filename + (or item-list (howm-view-item-list))) + :test #'howm-page=)) + +(defun howm-view-mtime (file) + (howm-view-time-to-string (howm-page-mtime file))) + +;; (defun howm-view-xtime (file x) +;; (let* ((a (file-attributes file)) +;; (n (cdr (assoc x '((a . 4) (m . 5) (c . 6))))) +;; (ti (nth n a))) +;; (howm-view-time-to-string ti))) + +(defun howm-view-time-to-string (ti) + (format-time-string "%Y%m%d-%H%M%S" ti)) + +(defun howm-view-string> (a b) + (string< b a)) + +(defun howm-view-string<= (a b) + (not (string< b a))) + +(defun howm-view-string< (a b) + (string< a b)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; dir + +(defun howm-view-directory (dir &optional recursive-p) + (howm-view-summary "" (howm-folder-items dir recursive-p))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; filter + +(defun howm-view-filter (&optional remove-p) + (interactive "P") + (let* ((table howm-view-filter-methods) + (command (completing-read (if remove-p + "(Reject) filter by: " + "filter by: ") + table nil t))) + (call-interactively (cdr (assoc command table))))) + +(defun howm-view-filter-uniq () + (interactive) + (howm-view-filter-doit #'howm-filter-items-uniq)) + +(defun howm-view-filter-by-name (&optional remove-p regexp) + (interactive "P") + (howm-view-filter-by-name/summary #'howm-filter-items-by-name + regexp remove-p)) + +(defun howm-view-filter-by-summary (&optional remove-p regexp) + (interactive "P") + (howm-view-filter-by-name/summary #'howm-filter-items-by-summary + regexp remove-p)) + +(defun howm-view-filter-by-name/summary (filter regexp remove-p) + (let* ((r (or regexp (howm-view-filter-read-from-minibuffer "Regexp: " + remove-p))) + (f `(lambda (item-list rmv-p) + (funcall #',filter item-list ,r rmv-p)))) + (howm-view-filter-doit f remove-p))) + +(defun howm-view-filter-by-date (&optional remove-p) + (interactive "P") + (howm-view-filter-by-time-range #'howm-filter-items-by-date + remove-p)) + +(defun howm-view-filter-by-reminder (&optional remove-p) + (interactive "P") + (howm-view-filter-by-time-range #'howm-filter-items-by-reminder remove-p)) + +(defun howm-view-filter-by-mtime (&optional remove-p range) + (interactive "P") + (howm-view-filter-by-time-range #'howm-filter-items-by-mtime remove-p range)) + +(defun howm-view-filter-by-time-range (filter &optional remove-p range) + (let* ((r (or range (howm-view-ask-time-range remove-p))) + (from (car r)) + (to (cadr r)) + (f `(lambda (item-list rmv-p) + (funcall #',filter item-list ',from ',to rmv-p)))) + (howm-view-filter-doit f remove-p))) + +(defun howm-view-filter-by-region (beg end) + (interactive "r") + (let ((r (mapcar #'howm-view-line-number (list beg end)))) + (howm-view-filter-by-line-range (car r) (cadr r)))) + +(defvar howm-view-filter-by-around-default 10) +(defun howm-view-filter-by-around (&optional distance) + (interactive "P") + (let* ((d (or distance howm-view-filter-by-around-default)) + (c (howm-view-line-number))) + (howm-view-filter-by-line-range (- c d) (+ c d)))) + +(defun howm-view-filter-by-line-range (beg end) + (let ((f `(lambda (item-list remove-p) + (when remove-p + (error "Not supported.")) + ;; beg and end are counted as 1,2,3,... + (cl-subseq item-list + (max (1- ,beg) 0) + ;; end is included. + (min ,end (length item-list)))))) + (howm-view-filter-doit f))) + +(defun howm-view-filter-by-contents (&optional remove-p regexp) + (interactive "P") + (let ((r (or regexp (howm-view-filter-read-from-minibuffer + "Search in result (grep): " + remove-p)))) + (if remove-p + (howm-view-remove-by-contents r) + (howm-view-search-in-result r)))) + +(howm-if-ver1dot3 nil + (defcustom howm-view-search-in-result-correctly t + "*Non nil if search-in-result should be aware of paragraph." + :type 'boolean + :group 'howm-search)) + +(defun howm-view-search-in-result (regexp) +;; (interactive "sSearch in result (grep): ") + (let* ((orig (howm-view-name)) + (name (if (string= orig "") + regexp + (format "%s&%s" orig regexp))) + (orig-item-list (howm-view-item-list)) + (folder (howm-make-folder-from-items orig-item-list))) + (howm-write-history regexp) + (howm-view-search-folder regexp folder name) + (when howm-view-search-in-result-correctly + (howm-view-summary-rebuild (howm-item-list-filter (howm-view-item-list) + orig-item-list))))) + +(defun howm-view-remove-by-contents (regexp) +;; (interactive "s(Reject) Search in result (grep): ") + (let ((howm-v-r-b-c-regexp regexp)) + (howm-view-sort/filter-doit + (lambda (item-list switch) + (howm-filter-items-by-contents item-list howm-v-r-b-c-regexp t))))) + +(defun howm-view-sort/filter-doit (proc &optional switch) + (let ((kw font-lock-keywords)) + (prog1 + ;; return item-list for + ;; http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder + (howm-view-summary-rebuild (funcall proc (howm-view-item-list) switch)) + (setq font-lock-keywords kw)))) + +(defalias 'howm-view-filter-doit 'howm-view-sort/filter-doit) + +;; For backward compatibility with howmoney. Don't use this. +(defun howm-view-filter-general (pred) + (howm-view-filter-doit (lambda (item-list dummy) + (cl-remove-if-not pred item-list)))) +;; (defun howm-view-filter-general (pred &optional remove-p with-index) +;; (let* ((item-list (howm-view-item-list)) +;; (s (if with-index +;; (howm-map-with-index #'list item-list) +;; item-list)) +;; (r (if remove-p +;; (cl-remove-if pred s) +;; (cl-remove-if-not pred s))) +;; (filtered (if with-index +;; (mapcar #'car r) +;; r))) +;; (howm-view-summary-rebuild filtered))) + +(defmacro howm-filter-items (pred lis &optional remove-p) + `(if ,remove-p + (cl-remove-if ,pred ,lis) + (cl-remove-if-not ,pred ,lis))) + +(defun howm-filter-items-uniq (item-list &optional remove-p) + (when remove-p + (error "Not supported.")) + (let* ((howm-view-filter-uniq-prev (if howm-view-search-in-result-correctly + (cons "" nil) + "")) + (pred (if howm-view-search-in-result-correctly + (lambda (item) + (let ((page (howm-item-page item)) + (place (howm-item-place item)) + (range (howm-item-range item)) + (p-page (car howm-view-filter-uniq-prev)) + (p-range (cdr howm-view-filter-uniq-prev))) + (prog1 + (not (and (howm-page= page p-page) + (and place p-range + (<= (car p-range) place) + (<= place (cadr p-range))))) + (setq howm-view-filter-uniq-prev (cons page range))))) + ;; old code + (lambda (item) + (let ((f (howm-view-item-filename item))) + (prog1 + (not (howm-page= f howm-view-filter-uniq-prev)) + (setq howm-view-filter-uniq-prev f))))))) + (cl-remove-if-not pred item-list))) + +(defun howm-filter-items-by-name (item-list regexp &optional remove-p) + (howm-filter-items-by-name/summary #'howm-view-item-basename + item-list regexp remove-p)) + +(defun howm-filter-items-by-summary (item-list regexp &optional remove-p) + (howm-filter-items-by-name/summary #'howm-view-item-summary + item-list regexp remove-p)) + +(defun howm-filter-items-by-name/summary (accessor item-list regexp remove-p) + (howm-filter-items (lambda (item) + (string-match regexp (funcall accessor item))) + item-list remove-p)) + +(defun howm-filter-items-by-date (item-list from to &optional remove-p) + (let* ((form (howm-view-file-name-format)) + (fts (mapcar (lambda (x) + (file-name-nondirectory (format-time-string form x))) + (list from to))) + (fs (car fts)) + (ts (cadr fts))) + (howm-filter-items (lambda (item) + (let ((cs (howm-view-item-basename item))) + (and (howm-view-string<= fs cs) + (howm-view-string< cs ts)))) + item-list remove-p))) + +(defun howm-filter-items-by-reminder (item-list from to &optional remove-p) + (let* ((from-str (format-time-string howm-date-format from)) + (to-str (format-time-string howm-date-format to)) + (reg (howm-reminder-regexp howm-reminder-types))) + (howm-filter-items + (lambda (item) + (let ((s (howm-view-item-summary item))) + (and (string-match reg s) + (let* ((x (match-string-no-properties 0 s)) ;; [2004-02-07]@ + (d (and (string-match howm-date-regexp x) + (match-string-no-properties 0 x)))) ;; [2004-02-07] + (and (howm-view-string<= from-str d) + (howm-view-string< d to-str)))))) + item-list remove-p))) + +(defun howm-filter-items-by-mtime (item-list from to &optional remove-p) + (let ((fs (howm-view-time-to-string from)) + (ts (howm-view-time-to-string to))) + (howm-filter-items + (lambda (item) + (let ((cs (howm-view-mtime (howm-view-item-filename item)))) + (and (howm-view-string<= fs cs) + (howm-view-string< cs ts)))) + item-list remove-p))) + +(defun howm-filter-items-by-contents (item-list regexp &optional remove-p) + (let* ((match (howm-view-search-folder-items-fi regexp item-list))) + (if howm-view-search-in-result-correctly + (howm-item-list-filter item-list match remove-p) + ;; old behavior + (let ((match-names (howm-cl-remove-duplicates* + (mapcar #'howm-item-name match)))) + (howm-filter-items (lambda (item) + (member (howm-item-name item) match-names)) + item-list remove-p))))) + +(defun howm-view-file-name-format () + howm-file-name-format) ;; defined in howm-common.el + +(defun howm-view-ask-time-range (&optional remove-p) + (let* ((now (current-time)) + (from (howm-view-ask-time "From" now t remove-p)) + (to (howm-view-ask-time "To" from nil remove-p))) + (list from to))) + +(defvar howm-view-min-year 1950) +(defvar howm-view-max-year 2030) +(defun howm-view-ask-time (prompt default &optional from-p remove-p) + (let* ((z (decode-time default)) + (yd (nth 5 z)) + (md (nth 4 z)) + (dd (nth 3 z))) + (let (y0 m0 d0 hour0 min0 sec0) + (if from-p + (setq y0 howm-view-min-year m0 1 d0 1 + hour0 0 min0 0 sec0 0) + (setq y0 howm-view-max-year m0 12 d0 'last-day-of-month + hour0 24 min0 0 sec0 0)) + (let ((y (howm-ask-time-sub prompt "year" yd remove-p))) + (if (null y) + (howm-view-encode-time sec0 min0 hour0 d0 m0 y0) + (let ((m (howm-ask-time-sub prompt "month" md remove-p))) + (if (null m) + (howm-view-encode-time sec0 min0 hour0 d0 m0 y) + (let ((d (or (howm-ask-time-sub prompt "date" dd remove-p) d0))) + (howm-view-encode-time sec0 min0 hour0 d m y))))))))) + +(defun howm-ask-time-sub (prompt ymd default remove-p) + (let* ((message (format "%s %s (* = no limit) [%d]: " prompt ymd default)) + (raw (howm-view-filter-read-from-minibuffer message remove-p)) + (n (if (string= raw "") + default + (string-to-number raw)))) + (if (= n 0) + nil + n))) + +(defun howm-view-encode-time (sec min hour d m y) + (when (eq d 'last-day-of-month) + (setq m (+ m 1)) + (setq d -1)) + (encode-time sec min hour d m y)) + +(defun howm-view-filter-read-from-minibuffer (message &optional remove-p) + (read-from-minibuffer (if remove-p + (concat "(Reject) " message) + message))) + +(defun howm-view-summary-rebuild (item-list &optional fl-keywords) + (howm-view-summary (howm-view-name) item-list fl-keywords)) + +(let* ((h (regexp-quote howm-view-title-header)) + (t1 (format "Skip \"%s \"" howm-view-title-header)) + (r1 (format "^\\(%s\\)? *$" h)) + (t2 (format "Skip \"%s \" and \"[xxxx-xx-xx xx:xx]\"" + howm-view-title-header)) + (r2 (format "\\(%s\\)\\|\\(^\\[[-: 0-9]+\\]\\)" r1))) + (howm-if-ver1dot3 nil + (defcustom howm-view-title-skip-regexp r2 + "*Regular expression for lines which should not be titles. +If the original title matches this regexp, the first non-matched line +is shown as title instead. +Nil disables this feature. + +This feature does not work when `howm-view-search-in-result-correctly' is nil." + :type `(radio (const :tag "Off" nil) + (const :tag ,t1 ,r1) + (const :tag ,t2 ,r2) + regexp) + :group 'howm-title + :group 'howm-efficiency))) + +(defcustom howm-view-list-title-type 1 + "*Type of showing title in summary buffer. +Value 1 means \"show title instead of summary\". +Value 2 means \"show title before summary\". +You may want to set `howm-view-summary-format' to be \"\" if you never need +to see file names." + :type '(radio (const :tag "title instead of summary" + 1) + (const :tag "title before summary" + 2)) + :group 'howm-experimental) + +(defun howm-view-list-title (title-regexp) + (howm-view-summary-rebuild (howm-entitle-items + title-regexp (howm-view-item-list)))) + +(defun howm-entitle-items (title-regexp item-list) + (if (= howm-view-list-title-type 1) + (howm-entitle-items-style1 title-regexp item-list) + (howm-entitle-items-style2 title-regexp item-list))) + +(defun howm-entitle-items-style1 (title-regexp item-list) + "Put title instead of summary." + (let ((items (howm-view-search-folder-items-fi title-regexp item-list))) + (if howm-view-search-in-result-correctly + (let* ((r (howm-item-list-filter items item-list 'with-rest)) + (hit-items (car r)) + (nohit-items (cdr r)) + ;; should I use (howm-classify #'howm-item-place nohit-items) ? + (noplace-nohit-items + (cl-remove-if #'howm-item-place nohit-items)) + (rest-items + (howm-item-list-filter (cl-remove-if-not #'howm-item-place + nohit-items) + items t)) + (all-items (append hit-items noplace-nohit-items rest-items))) + (when howm-view-title-skip-regexp + (mapc #'howm-view-change-title all-items)) + all-items) + (let* ((pages (howm-cl-remove-duplicates* (mapcar #'howm-item-page + item-list))) + (hit-pages (mapcar #'howm-item-page items)) + (nohit-pages (cl-remove-if + (lambda (p) (cl-member p hit-pages + :test #'howm-page=)) + pages)) + (nohit-items (mapcar #'howm-make-item nohit-pages)) + (all-items (if (null nohit-items) + items + (append items nohit-items)))) + all-items)))) + +(defvar howm-entitle-items-style2-max-length 20) +(defvar howm-entitle-items-style2-format "%-13s | %s") ;; for title and summary +(defvar howm-entitle-items-style2-title-line nil) ;; independent title line? +(defun howm-entitle-items-style2 (title-regexp item-list) + "Put title before summary." + ;; fix me: howm-item-place is not set for howm-list-all + (let ((last-title "")) + (cl-mapcan + (lambda (item) + (let ((orig (howm-item-summary item)) + (titles (howm-item-titles item))) + (cl-mapcan + (lambda (s) + (if (string= s last-title) + (setq s "") + (setq last-title s)) + (when (> (length s) howm-entitle-items-style2-max-length) + (setq s (substring s 0 howm-entitle-items-style2-max-length))) + (mapcar (lambda (x) + (let ((i (howm-item-dup item))) + (howm-item-set-summary i x) + i)) + (if (and howm-entitle-items-style2-title-line + (not (string= s ""))) + (list (format howm-entitle-items-style2-format + s "") + (format howm-entitle-items-style2-format + "" orig)) + (list (format howm-entitle-items-style2-format + s orig))))) + (or titles (list ""))))) + item-list))) + +;;; detect items in same paragraph (= entry = memo. sorry for inconsistent terminology) + +(defun howm-item-with-temp-buffer (item proc) + (with-temp-buffer + (howm-page-insert (howm-item-page item)) + (let* ((p (howm-item-place item)) + (r (if (null p) + (list (point-min) (point-max)) + (progn + (riffle-set-place p) + (howm-view-paragraph-region))))) + (narrow-to-region (car r) (cadr r)) + (funcall proc item)))) + +(defun howm-item-titles (item) + "List of titles of ITEM. +When place (see `howm-item-place') is specified, ITEM has at most one title. +Otherwise, ITEM can have two or more titles." + (howm-item-with-temp-buffer + item + (lambda (i) + (let ((titles nil)) + (goto-char (point-min)) + (while (re-search-forward (howm-list-title-regexp) nil t) + (setq titles + (cons (buffer-substring-no-properties (match-beginning 0) + (line-end-position)) + titles))) + (mapcar (lambda (x) + (if (string-match howm-view-title-regexp x) + (match-string-no-properties howm-view-title-regexp-pos x) + x)) + (reverse titles)))))) + +(defun howm-item-range (item) + "List of beginning-place and end-place of paragraph to which ITEM belongs." + (howm-item-with-temp-buffer + item + (lambda (i) + (let ((r (list (point-min) (point-max)))) + (widen) + (list (progn + (goto-char (car r)) + (riffle-get-place)) + (progn + (goto-char (cadr r)) + (riffle-get-place))))))) +;; (with-temp-buffer +;; (howm-page-insert (howm-item-page item)) +;; (let* ((p (howm-item-place item)) +;; (r (if (null p) +;; (list (point-min) (point-max)) +;; (progn +;; (riffle-set-place p) +;; (howm-view-paragraph-region))))) +;; (list (progn +;; (goto-char (car r)) +;; (riffle-get-place)) +;; (progn +;; (goto-char (cadr r)) +;; (riffle-get-place)))))) + +(defun howm-item-list-rangeset (item-list) + "Make assoc list of page to rangeset. +ITEM-LIST is list of items. +Return value is assoc list; each element of it is a cons pair of page +and rangeset which indicates ranges of places of paragraphs to which items +in ITEM-LIST belongs." + (let ((alist nil)) ;; key = page, value = rangeset of place + (cl-labels ((add-to-alist (page rs) + (setq alist (cons (cons page rs) alist)))) + (mapc (lambda (item) + (let* ((page (howm-item-page item)) + (place (howm-item-place item)) + (rs (cdr (assoc page alist)))) + (cond ((null place) + (add-to-alist page (howm-make-rangeset))) + ((null rs) + (add-to-alist page (howm-make-rangeset + (howm-item-range item)))) + ((howm-rangeset-belong-p place rs) + nil) ;; do nothing + (t + (howm-rangeset-add! rs (howm-item-range item)))))) + item-list) + alist))) + +(defun howm-item-list-filter (item-list reference-item-list + &optional remove-match) + "Select items in ITEM-LIST according to REFERENCE-ITEM-LIST. +When REMOVE-MATCH is nil, return value is list of items i in ITEM-LIST +which satisfy the condition \"there exists i' in REFERENCE-ITEM-LIST +such that i and i' belong to same paragraph\" (case 1). +When REMOVE-MATCH is non-nil and not the symbol 'with-rest', +return value is complement of the above list; +list of items in ITEM-LIST which do not satisfy the above condition (case 2). +When REMOVE-MATCH is the symbol 'with-rest', +return value is (A . B), where A is the return value of case 1 and +B is items in REFERENCE-ITEM-LIST that do not match in case 1." + ;; + ;; split no-place items: + ;; Though implementation 1 calls grep many times, + ;; implementation 2 is slower in construction of folder from items. + ;; [2012-12-28] + ;; + ;; implementation 1 (call grep many times) + (setq item-list + (cl-mapcan (lambda (item) + (if (howm-item-place item) + (list item) + (or (howm-view-search-folder-items-fi + (howm-view-title-regexp-grep) (list item)) + (list item)))) + item-list)) + ;; + ;; ;; implementation 2 (making items-folder is slow) + ;; (let* ((place-items (cl-remove-if-not #'howm-item-place item-list)) + ;; (no-place-items (cl-remove-if #'howm-item-place item-list)) + ;; (split-items (howm-view-search-folder-items-fi + ;; (howm-view-title-regexp-grep) no-place-items)) + ;; ;;; !!!!!!!!! use CL !!!!!!!!!!!!!!!!!!!!!!!!!!!! + ;; (no-title-items (set-difference no-place-items split-items + ;; :key #'howm-item-page))) + ;; (setq item-list (append place-items split-items no-title-items))) + ;; + (let* ((alist (howm-item-list-rangeset reference-item-list)) + (matcher (lambda (item) + (let* ((page (howm-item-page item)) + (place (howm-item-place item)) + (rs (cdr (assoc page alist)))) + (cond ((null rs) nil) + ((howm-rangeset-belong-p place rs) rs) + (t nil)))))) + (cond ((eq remove-match 'with-rest) + (let ((match (cl-remove-if-not + (lambda (item) + (let ((rs (funcall matcher item))) + (and rs (howm-rangeset-hit! rs)))) + item-list))) + (cons match + (cl-mapcan + (lambda (a) (and (not (howm-rangeset-hit-p (cdr a))) + (list (howm-make-item (car a))))) + alist)))) + (remove-match (cl-remove-if matcher item-list)) + (t (cl-remove-if-not matcher item-list))))) + +;;; rangeset +;;; ex. +;;; (*rangeset* (1 . 4) (5 . 6) (8 . 14)) +;;; (*rangeset*) ==> "almighty" +;;; (*rangeset-hit* (1 . 4) (5 . 6) (8 . 14)) ==> "hit" is recorded + +(defun howm-make-rangeset (&optional beg-end) + (if (null beg-end) + (cons '*rangeset* nil) + (let ((rs (howm-make-rangeset))) + (howm-rangeset-add! rs beg-end)))) + +(defun howm-rangeset-belong-p (point rs) + (or (null (cdr rs)) + (cl-member-if (lambda (pair) + (and (<= (car pair) point) (<= point (cdr pair)))) + (cdr rs)))) + +(defun howm-rangeset-add! (rs beg-end) + ;; "almighty" is ignored here. sorry for confusion... + ;; c = cursor (pointing its cdr) + ;; p = pair + (let ((c rs) + (beg (car beg-end)) + (end (cadr beg-end))) + (while (and (cdr c) beg) + (let ((p (cadr c))) + (cond ((< end (car p)) ;; insert [beg, end] here + (rplacd c (cons (cons beg end) (cdr c))) + (setq beg nil)) + ((< (cdr p) beg) ;; skip this + (setq c (cdr c))) + (t ;; merge into [beg, end] + (setq beg (min beg (car p)) + end (max end (cdr p))) + (rplacd c (cddr c)))))) + (when beg + (rplacd c (list (cons beg end))))) + rs) + +(defvar howm-rangeset-hit-indicator '*rangeset-hit*) + +(defun howm-rangeset-hit! (rs) + (setcar rs howm-rangeset-hit-indicator)) + +(defun howm-rangeset-hit-p (rs) + (eq (car rs) howm-rangeset-hit-indicator)) + +;; check + +(let ((tests '( + (() + ()) + (((3 . 5)) + ((3 . 5))) + (((3 . 5) (0 . 1)) + ((0 . 1) (3 . 5))) + (((3 . 5) (6 . 8)) + ((3 . 5) (6 . 8))) + (((3 . 5) (1 . 4)) + ((1 . 5))) + (((3 . 5) (4 . 7)) + ((3 . 7))) + (((3 . 5) (1 . 9)) + ((1 . 9))) + (((3 . 1) (4 . 1) (5 . 9)) + ((1 . 4) (5 . 9))) + (((3 . 1) (4 . 1) (5 . 9) (2 . 6) (5 . 3)) + ((1 . 9))) + )) + ;; inhibit 'reference to free variable' warning in byte-compilation + (check nil)) + (cl-labels ((check (ans result) + (cond ((null ans) (null result)) + ((not (equal (car ans) (car result))) nil) + (t (funcall check (cdr ans) (cdr result)))))) + (mapc (lambda (z) + (apply (lambda (prob ans) + (let* ((rs (howm-make-rangeset))) + (mapc (lambda (pair) + (let ((a (car pair)) + (b (cdr pair))) + (howm-rangeset-add! rs + (list (min a b) + (max a b))))) + prob) + (when (not (equal (cdr rs) ans)) + (error "howm-rangeset-add: %s ==> %s" prob rs)))) + z)) + tests))) + +(let ((rs '(*rangeset* (1 . 4) (5 . 6) (8 . 14)))) + (if (and (howm-rangeset-belong-p 1 rs) + (howm-rangeset-belong-p 3 rs) + (howm-rangeset-belong-p 4 rs) + (howm-rangeset-belong-p 5 rs) + (not (howm-rangeset-belong-p 0 rs)) + (not (howm-rangeset-belong-p 4.5 rs)) + (not (howm-rangeset-belong-p 7 rs)) + (not (howm-rangeset-belong-p 15 rs))) + t + (error "howm-rangeset-belong-p: wrong result"))) + +(defun howm-view-change-title (item) + (when (string-match howm-view-title-skip-regexp (howm-item-summary item)) + (let ((title-line (with-temp-buffer + (howm-page-insert (howm-item-page item)) + (howm-view-set-place (or (howm-item-place item) + (howm-view-get-place + (point-min)))) + (howm-view-get-title-line)))) + (howm-item-set-summary item title-line)))) + +(defun howm-view-get-title-line () + (while (and (looking-at howm-view-title-skip-regexp) + (= (forward-line 1) 0)) + ;; do nothine + ) + (buffer-substring-no-properties (line-beginning-position) + (line-end-position))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; search + +(defun howm-view-search (str file-list &optional + name summarizer fixed-p hilit-keywords) + "This function is not used in howm any more." + (howm-view-search-folder str (howm-make-folder:files file-list) + name summarizer fixed-p hilit-keywords)) + +(defun howm-view-search-items (str file-list &optional summarizer fixed-p) + (howm-view-search-folder-items str (howm-make-folder:files file-list) + summarizer fixed-p)) + +(defun howm-view-search-folder (&rest args) + (howm-view-search-folder-doit (apply #'howm-view-search-folder-internal + args))) + +(defun howm-view-search-folder-internal (str folder + &optional name summarizer + fixed-p hilit-keywords) + ;; clean me. str-orig can be string or list of strings. + (let* ((str-orig str) + (str-list (if (listp str-orig) str-orig (list str-orig))) + (str-principal (if (listp str-orig) (car str-orig) str-orig))) + ;; rename str + (setq str str-principal) + (setq name (or name str)) + (when howm-view-update-search-ring + (isearch-update-ring str (not fixed-p))) + (let* ((items (howm-view-search-folder-items str-orig + folder summarizer fixed-p)) + (kw (or hilit-keywords + (let ((r (if fixed-p + (regexp-opt str-list) + (mapconcat (lambda (x) (concat "\\(" x "\\)")) + str-list + "\\|")))) + `((,r . howm-view-hilit-face)))))) + (let* ((f (expand-file-name str))) + (when (file-exists-p f) + (let ((fi (howm-view-make-item f))) + (howm-view-item-set-privilege fi t) + (setq items (cons fi items))))) + (list kw name items)))) + +(defun howm-view-search-folder-doit (p) + (howm-view-summary (cadr p) (cl-caddr p) (car p))) + +(defun howm-view-search-folder-items (str folder &optional summarizer fixed-p) + (let ((found (howm-folder-grep folder str fixed-p)) + (summarizer (or summarizer + (lambda (file place content) + (string-match "^ *\\(.*\\)" content) + (match-string-no-properties 1 content))))) + (mapc (lambda (i) + (let ((file (howm-page-name (howm-item-page i))) + (place (howm-item-place i)) + (content (howm-item-summary i))) + (howm-item-set-summary i (funcall summarizer + file place content)))) + found) + found)) + +;; sorry for confusing functions... + +(defun howm-view-search-folder-items-fi (regexp item-list &rest args) + (apply #'howm-view-search-folder-items + regexp (howm-make-folder-from-items item-list) args)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; sort + +(defun howm-view-sort () + (interactive) + (let* ((table howm-view-sort-methods) + (command (completing-read "sort by: " table nil t))) + (call-interactively (cdr (assoc command table))))) + +(defmacro howm-view-defun-sort-by (name) + "Define an interactive command howm-view-sort-by-NAME, +which simply calls howm-sort-items-by-NAME." + (let ((command (howm-get-symbol nil "howm-view-sort-by-" name)) + (internal (howm-get-symbol nil "howm-sort-items-by-" name))) + `(defun ,command (&optional reverse-p) + (interactive "P") + (howm-view-sort-doit #',internal reverse-p)))) +(howm-view-defun-sort-by "random") +(howm-view-defun-sort-by "name") +(howm-view-defun-sort-by "numerical-name") +(howm-view-defun-sort-by "date") +(howm-view-defun-sort-by "reverse-date") +(howm-view-defun-sort-by "summary") +(howm-view-defun-sort-by "reminder") +(howm-view-defun-sort-by "mtime") +(howm-view-defun-sort-by "reverse") + +(defalias 'howm-view-sort-reverse 'howm-view-sort-by-reverse) + +(defalias 'howm-view-sort-doit 'howm-view-sort/filter-doit) + +(defmacro howm-sort-items (evaluator comparer item-list + &optional reverse-p) + `(let* ((howm-view-s-i-comparer ,comparer) + (cmp (if reverse-p + (lambda (a b) (funcall howm-view-s-i-comparer b a)) + howm-view-s-i-comparer))) + (howm-sort ,evaluator cmp item-list))) + +;; ;; generate the below aliases for howm-test080714 +;; (let ((methods '("random" "name" "numerical-name" "date" "reverse-date" +;; "summary" "reminder" "mtime" "reverse"))) +;; (mapcar (lambda (m) +;; (let* ((command +;; (howm-get-symbol nil "howm-view-sort-by-" m)) +;; (internal +;; (howm-get-symbol nil "howm-sort-items-by-" m)) +;; (obsolete +;; (howm-get-symbol nil command "-internal"))) +;; `(defalias ',obsolete ',internal))) +;; methods)) + +;; for backward compatibility with howm-test080714 only +(defalias 'howm-view-sort-by-random-internal 'howm-sort-items-by-random) +(defalias 'howm-view-sort-by-name-internal 'howm-sort-items-by-name) +(defalias 'howm-view-sort-by-numerical-name-internal + 'howm-sort-items-by-numerical-name) +(defalias 'howm-view-sort-by-date-internal 'howm-sort-items-by-date) +(defalias 'howm-view-sort-by-reverse-date-internal + 'howm-sort-items-by-reverse-date) +(defalias 'howm-view-sort-by-summary-internal 'howm-sort-items-by-summary) +(defalias 'howm-view-sort-by-reminder-internal 'howm-sort-items-by-reminder) +(defalias 'howm-view-sort-by-mtime-internal 'howm-sort-items-by-mtime) +(defalias 'howm-view-sort-by-reverse-internal 'howm-sort-items-by-reverse) + +(defun howm-sort-items-by-random (item-list &optional reverse-p) + (howm-sort-items #'(lambda (dummy) (random)) #'< item-list reverse-p)) + +(defun howm-sort-items-by-name (item-list &optional reverse-p) + (howm-sort-items #'howm-view-item-basename #'string< reverse-p)) + +(defun howm-sort-items-by-numerical-name (item-list &optional reverse-p) + (howm-sort-items (lambda (i) + (let ((b (howm-view-item-basename i))) + (if (string-match "^[0-9]+$" b) + (string-to-number b) + howm-infinity))) + #'< reverse-p)) + +(defvar howm-view-sort-by-date-ignore-regexp "^[a-zA-Z]") +(defun howm-sort-items-by-date (item-list &optional reverse-p) + (let ((sorted (howm-sort-items #'howm-view-item-basename #'string< + item-list reverse-p))) + (cdr (howm-view-lift-internal #'howm-view-item-basename + sorted + howm-view-sort-by-date-ignore-regexp + t)))) + +(defun howm-sort-items-by-reverse-date (item-list &optional reverse-p) + (howm-sort-items-by-date item-list (not reverse-p))) + +(defun howm-sort-items-by-summary (item-list &optional reverse-p) + (howm-sort-items #'howm-view-item-summary #'string< + item-list reverse-p)) + +(defun howm-sort-items-by-reminder (item-list &optional reverse-p) + (let* ((howm-view-s-b-r-i-regexp (howm-reminder-regexp howm-reminder-types)) + (howm-view-s-b-r-i-max (format-time-string + howm-reminder-today-format + (encode-time 59 59 23 31 12 + howm-view-max-year))) + (evaluator (lambda (item) + (let ((s (howm-view-item-summary item))) + (if (string-match howm-view-s-b-r-i-regexp s) + (match-string-no-properties 0 s) + howm-view-s-b-r-i-max))))) + (howm-sort-items evaluator #'string< item-list reverse-p))) + +(defun howm-sort-items-by-mtime (item-list &optional reverse-p) + (howm-sort-items (lambda (item) + (howm-view-mtime (howm-view-item-filename item))) + #'howm-view-string> + item-list reverse-p)) + +(defun howm-sort-items-by-reverse (item-list &optional dummy) + (reverse item-list)) + +;;; lift (move matched items to the top) + +(defun howm-view-lift-by-name (&optional reverse-p regexp path-p) + (interactive "P") + (howm-view-lift-doit (if path-p + #'howm-view-lift-by-path-internal + #'howm-view-lift-by-name-internal) + reverse-p regexp)) + +(defun howm-view-lift-by-summary (&optional reverse-p regexp) + (interactive "P") + (howm-view-lift-doit #'howm-view-lift-by-summary-internal + reverse-p regexp)) + +(defun howm-view-lift-by-summary-substring (&optional reverse-p regexp + regexp-pos) + (interactive "P") + (howm-view-lift-doit #'howm-view-lift-by-summary-substring-internal + reverse-p regexp regexp-pos)) + +(defun howm-view-lift-doit (sorter &optional reverse-p regexp + regexp-pos) + (let* ((howm-view-s-b-m-d-regexp (or regexp + (read-from-minibuffer "Regexp: "))) + (howm-view-s-b-m-d-regexp-pos regexp-pos) + (howm-view-s-b-m-d-sorter sorter) + (howm-view-s-b-m-d-matched nil)) + (howm-view-sort-doit (lambda (item-list rvs-p) + (let ((p (apply howm-view-s-b-m-d-sorter + item-list + howm-view-s-b-m-d-regexp + rvs-p + howm-view-s-b-m-d-regexp-pos))) + (setq howm-view-s-b-m-d-matched (car p)) + (cdr p))) + reverse-p) + howm-view-s-b-m-d-matched)) + +(defun howm-view-lift-internal (picker item-list regexp + &optional reverse-p regexp-pos) + "Sort items and return (matched . sorted-list). +matched can be nil, single, or multi." + (let* ((howm-view-l-i-matched nil) + (evaluator (lambda (item) + (let ((str (funcall picker item))) + (if (string-match regexp str) + (progn + (setq howm-view-l-i-matched + (if howm-view-l-i-matched 'multi 'single)) + (if regexp-pos + (match-string-no-properties regexp-pos str) + 1)) + 0)))) + (comparer (if regexp-pos + (lambda (x y) + (cond ((eq x 0) nil) + ((eq y 0) t) + (t (string< x y)))) + #'>))) + (let ((sorted-list (howm-sort-items evaluator comparer item-list + reverse-p))) + (cons howm-view-l-i-matched sorted-list)))) + +(defun howm-view-lift-by-name-internal (item-list regexp &optional reverse-p) + (howm-view-lift-internal #'howm-view-item-basename + item-list regexp reverse-p)) + +(defun howm-view-lift-by-path-internal (item-list regexp &optional reverse-p) + (howm-view-lift-internal #'howm-item-name item-list regexp reverse-p)) + +(defun howm-view-lift-by-summary-internal (item-list regexp &optional reverse-p) + (howm-view-lift-internal #'howm-view-item-summary item-list regexp reverse-p)) + +(defun howm-view-lift-by-summary-substring-internal (item-list regexp + &optional + reverse-p + regexp-pos) + (howm-view-lift-internal #'howm-view-item-summary item-list regexp reverse-p + (or regexp-pos 0))) + +;; backward compatibility +(defalias 'howm-view-sort-by-name-match 'howm-view-lift-by-name) +(defalias 'howm-view-sort-by-summary-match 'howm-view-lift-by-summary) +(defalias 'howm-view-sort-by-summary-match-string + 'howm-view-lift-by-summary-substring) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Dired-X + +(defvar howm-view-dired-buffer-name "*howm-dired*") +(howm-defvar-risky howm-view-dired-ls-command "ls") +(howm-defvar-risky howm-view-dired-ls-options '("-l")) + +(defun dired-virtual (dir) + (howm-inhibit-warning-in-compilation)) + +(defun howm-view-dired () + (interactive) + (require (if (howm-xemacsp) 'dired-vir 'dired-x)) + (when (not (member major-mode + '(howm-view-summary-mode howm-view-contents-mode))) + (error "Invalid mode for this command.")) +;; ;; bug in emacs-21.3.50? +;; (when (not (fboundp 'dired-insert-headerline)) +;; (defun dired-insert-headerline (dir);; also used by dired-insert-subdir +;; ;; Insert DIR's headerline with no trailing slash, exactly like ls +;; ;; would, and put cursor where dired-build-subdir-alist puts subdir +;; ;; boundaries. +;; (save-excursion (insert " " (directory-file-name dir) ":\n")))) + (let* ((i2f (lambda (item) + (file-relative-name (howm-view-item-filename item)))) + (current-file (funcall i2f (riffle-summary-current-item))) + (files (howm-cl-remove-duplicates* (mapcar i2f (howm-view-item-list)) + :test #'equal)) +;; (pos (cl-position f files :test #'string=)) + (args (append howm-view-dired-ls-options files)) + (a `((howm-view-summary-mode . ,howm-view-summary-persistent) + (howm-view-contents-mode . ,howm-view-contents-persistent))) + (p (howm-view-persistent-p (cdr (assoc major-mode a))))) + (if p + (howm-view-restore-window-configuration) + (howm-view-kill-buffer)) + (switch-to-buffer (get-buffer-create howm-view-dired-buffer-name)) + (setq buffer-read-only nil) + (erase-buffer) + (howm-call-process-here howm-view-dired-ls-command args) + (set-buffer-modified-p nil) + (dired-virtual default-directory) + (howm-view-dired-goto current-file))) + +(defun howm-view-dired-goto (rname) +"In dired buffer, search file name RNAME and move cursor to corresponding line. +RNAME must be relative name." + (goto-char (point-min)) + ;; Raw call of `dired-get-filename' and `dired-next-line' causes + ;; warnings in compilation. + (while (let ((c (howm-funcall-if-defined (dired-get-filename 'no-dir t)))) + (not (and c (equal (file-relative-name c) rname)))) + (howm-funcall-if-defined (dired-next-line 1)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; shell + +(howm-defvar-risky howm-view-summary-shell-hist '("ls -l FILE" "FILE")) +(howm-defvar-risky howm-view-summary-shell-last-file "FILE") +(defun howm-view-summary-shell-command () + (interactive) + (when (not (member major-mode + '(howm-view-summary-mode))) + (error "Invalid mode for this command.")) + (let* ((n (howm-view-line-number)) + (item (nth (1- n) (howm-view-item-list))) + (file (howm-page-abbreviate-name (howm-view-item-filename item))) + (last-reg (regexp-quote howm-view-summary-shell-last-file))) + (setq howm-view-summary-shell-hist + (mapcar (lambda (h) + (replace-regexp-in-string last-reg file h t)) + howm-view-summary-shell-hist)) + (setq howm-view-summary-shell-last-file file) + (let* ((default (car howm-view-summary-shell-hist)) + (c (read-string "command: " + (cons default 0) + '(howm-view-summary-shell-hist . 1)))) + (shell-command c)) + (let ((item-list (cl-remove-if (lambda (item) + (not (file-exists-p + (howm-view-item-filename item)))) + (howm-view-item-list)))) + (setq *riffle-summary-check* nil) ;; dirty + (howm-view-summary (howm-view-name) item-list) + (howm-goto-line n) + (save-selected-window + (let ((b (get-buffer "*Shell Command Output*"))) + (cond ((not (howm-buffer-empty-p b)) + (switch-to-buffer-other-window b)) + ((eq item (riffle-summary-current-item)) + nil) + (t (progn + (setq *riffle-summary-check* t) ;; dirty + (howm-view-summary-check t)))))) + ))) + +;;; howm-view.el ends here diff --git a/howm.el b/howm.el new file mode 100644 index 0000000..33fb7cb --- /dev/null +++ b/howm.el @@ -0,0 +1,84 @@ +;;; howm.el --- Wiki-like note-taking tool +;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: howm.el,v 1.22 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +;;; DESCRIPTION: +;;; +;;; See README. +;;; HOWM is acronym of "Hitori Otegaru Wiki Modoki". + +;; Files [0]-[3] have only hierarchical dependencies, +;; whereas files in [5] have circular dependencies. +;; Each file in [5] provides itself first, +;; and then requires [4] (this file). + +;;; [0] official + +(require 'easy-mmode) +(require 'font-lock) + +;;; [1] cl + +(require 'cl-lib) + +;;; [2] howm basic libraries + +(require 'howm-version) +(require 'howm-vars) +(require 'howm-common) + +;;; [3] my tools + +;; This doesn't work in byte-compilation. I don't understand it. Sigh... +;; (mapcar #'require howm-required-features) + +(require 'cheat-font-lock) +(require 'illusion) +(require 'gfunc) +(require 'riffle) +(require 'action-lock) +(require 'honest-report) + +;;; [4] howm main (this file) + +(provide 'howm) + +;;; [5] howm modules + +(require 'howm-backend) +(require 'howm-view) +(require 'howm-mode) +(require 'howm-misc) +(require 'howm-date) +(require 'howm-reminder) +(require 'howm-menu) + +;;; for howmz.el [2006-02-02] +;;; http://noir.s7.xrea.com/archives/000136.html +;;; http://noir.s7.xrea.com/pub/zaurus/howmz.el + +(howm-require-lang 'en) +(howm-require-lang 'ja) + +;;; security fix [2006-12-16] +(mapc (lambda (symbol) (put symbol 'risky-local-variable t)) + (howm-symbols)) + +;;; howm.el ends here diff --git a/illusion.el b/illusion.el new file mode 100644 index 0000000..3b8bdc7 --- /dev/null +++ b/illusion.el @@ -0,0 +1,134 @@ +;;; illusion.el --- load, edit, and submit something which is not pure file +;;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: illusion.el,v 1.14 2011-12-31 15:07:29 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;;-------------------------------------------------------------------- + +;;; Commentary: + +;; Not yet. See the example 'yalot13' at the bottom of this file. + +;;; Code: + +(require 'easy-mmode) +(require 'howm-common) + +(defvar illusion-lighter " _i_") +(defvar illusion-submit-key "\C-c\C-c") + +(defvar illusion-submit-func + (lambda () + (error "Submission function is not defined.")) + "Value of this variable is called when `illusion-submit' is executed. +It must return non-nil value for successful case.") +(make-variable-buffer-local 'illusion-submit-func) +(put 'illusion-submit-func 'risky-local-variable t) + +(defun illusion-submit () + (interactive) + (funcall illusion-submit-func) + (set-buffer-modified-p nil)) + +(defun illusion-generate (name loader submitter) + (switch-to-buffer (generate-new-buffer name)) + (text-mode) + (illusion-mode 1) + (setq illusion-submit-func submitter) + (funcall loader) + (goto-char (point-min)) + (set-buffer-modified-p nil)) + +(easy-mmode-define-minor-mode illusion-mode + "With no argument, this command toggles the mode. +Non-null prefix argument turns on the mode. +Null prefix argument turns off the mode. + +When the mode is enabled, \\[illusion-submit] submits the content +with a manner which is suitable to current buffer. + +key binding +--- ------- +\\[illusion-submit] Submit changes +" + nil ;; default = off + illusion-lighter ;; mode-line + `( + (,illusion-submit-key . illusion-submit) + ) +) + +;; emacs20's easy-mmode-define-minor-mode can't have body. sigh... +(add-hook 'illusion-mode-on-hook + (lambda () (use-local-map illusion-mode-map))) + +;;; Example + +;; M-x yarot13-find-file to open rot13ed file. +;; Edit it, and C-c C-c to save it. + +;; (personal note) ruby -pe '$_.tr! "a-zA-Z", "n-za-mN-ZA-M"' + +(defun yarot13-find-file (file) + (interactive "Frot13 file: ") + (illusion-generate (concat "rot13:" (file-name-nondirectory file)) + `(lambda () (yarot13-insert-file-contents ,file)) + `(lambda () (yarot13-save-buffer-to ,file)))) + +(defun yarot13-insert-file-contents (file) + (if (file-exists-p file) + (let ((s (with-temp-buffer + (howm-insert-file-contents file) + (yarot13-rotate-buffer) + (buffer-string)))) + (insert s)) + (message "(New file)"))) + +(defun yarot13-save-buffer-to (file) + (let ((s (buffer-string))) + (with-temp-buffer + (insert s) + (yarot13-rotate-buffer) + (set-visited-file-name file) + (basic-save-buffer)))) + +(defun yarot13-rotate-buffer () + (save-excursion + (goto-char (point-min)) + (while (not (eobp)) + (let ((c (char-after))) + (setq c (yarot13-rotate-char c ?a ?z)) + (setq c (yarot13-rotate-char c ?A ?Z)) + (delete-char 1) + (insert-char c 1))))) + +(defun yarot13-rotate-string (str) + (with-temp-buffer + (insert str) + (yarot13-rotate-buffer) + (buffer-string))) + +(defun yarot13-rotate-char (x beg end) + (let ((d (- x beg)) + (w (+ 1 (- end beg)))) + (if (and (<= beg x) (<= x end)) + (+ beg (mod (+ d (/ w 2)) w)) + x))) + +(provide 'illusion) + +;;; illusion.el ends here diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..4fbbae7 --- /dev/null +++ b/install-sh @@ -0,0 +1,507 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-10-14.15 + +# 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. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment 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}" + +posix_glob= +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chmodcmd=$chmodprog +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 $# -ne 0; 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) mode=$2 + shift + shift + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + 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 $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac +done + +if test $# -ne 0 && test -z "$dir_arg$dstarg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # 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 +fi + +if test $# -eq 0; 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 + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + 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 + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix=/ ;; + -*) prefix=./ ;; + *) prefix= ;; + esac + + case $posix_glob in + '') + if (set -f) 2>/dev/null; then + posix_glob=true + else + posix_glob=false + fi ;; + esac + + oIFS=$IFS + IFS=/ + $posix_glob && set -f + set fnord $dstdir + shift + $posix_glob && set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # 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 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $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 $mode "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dst" 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 "$dst"; then + $doit $rmcmd -f "$dst" 2>/dev/null \ + || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ + && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ + || { + echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + } || exit 1 + + trap '' 0 + fi +done + +# 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: diff --git a/ja/0000-00-00-000000.txt b/ja/0000-00-00-000000.txt new file mode 100644 index 0000000..79fa0d5 --- /dev/null +++ b/ja/0000-00-00-000000.txt @@ -0,0 +1,157 @@ += <<< %menu% + %"e"[®µ­] %"c"[¿·µ¬] %"D"[Ê£À½] ¸¡º÷(%"s"[¸ÇÄê] %"g"[Àµµ¬] %"m"[roma] %"o"[¥ÐÆâ]) %":"[ºòÆü] %"."[º£Æü] + %"a"[°ìÍ÷] %"l"[ºÇ¶á] %"A"[Á°¸å] %"h"[ÍúÎò] %"y"[ͽÄê] %"t"[Todo] %"b"[Á´¥Ð] %"x"[mark] %"w"[¿ìÊâ] [ÀßÄê] + %"K"[Âꢬ] [̾¢¬] %"d"[Æü¢­] %"T"[»þ¢­] %"i"[¸°¢­] %"r"[¹¹¿·] %"R"[menu ¹¹¿·] [menu ÊÔ½¸] [Á´¾Ã] +------------------------------------- +[ͽÄꡦTodo] ¡Ä ͽÄê@, ¡ºÀÚ! ¤ò %sdays ÆüÀè¤Þ¤Çɽ¼¨. +¡ºÀÚ!, todo+, ³Ð½ñ-, ÊÝα~ ¤ò¾å°Ì %tnum ¸Ä¤Þ¤Çɽ¼¨. +%reminder +------------------------------------- +ºÇ¶á¤Î¥á¥â +%recent +------------------------------------- +¥é¥ó¥À¥à¥»¥ì¥¯¥È (ÉÔÍפʤé[menu ÊÔ½¸]¤Ç³ºÅö²Õ½ê¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤) +%random +------------------------------------- + +ͽÄꡦtodo ¤Î½ñ¼° (¼ÂºÝ¤ÏȾ³Ñ¤Ç) +[2002-10-21]¡÷1 ͽÄê (ͽÄêɽ¤Ëɽ¼¨¡£¤â¤·¡÷3¤Ê¤é3Æü´Ö¤ÎͽÄê¡¢¤Ä¤Þ¤ê23Æü¤Þ¤Ç¤Î°ÕÌ£) +[2002-10-21]¡Ü7 todo »ØÄêÆü¤Ë¤Ê¤Ã¤Æ¤«¤é7Æü´Ö¤«¤±¤Æ½ù¡¹¤ËÉ⤫¤Ó³¤±¤ë +[2002-10-21]¡ª7 ¡ºÀÚ »ØÄêÆü¤Î7ÆüÁ°¤«¤é½ù¡¹¤ËÉ⤫¤Ó¡¢»ØÄêÆü°Ê¹ßÉ⤭¤Ã¤Ñ¤Ê¤· +[2002-10-21]¡Ý1 ³Ð½ñ »ØÄêÆü¤ËÉ⤫¤Ó¾å¤¬¤ê¡¢°Ê¹ß1Æü¤«¤±¤Æñ°ÌÎ̤À¤±½ù¡¹¤ËÄÀ¤à +[2002-10-21]¡Á30 ÊÝα »ØÄêÆü¤ËÉ⤫¤Ó¾å¤¬¤ê¡¢°Ê¹ß30Æü¼þ´ü¤ÇÉ⤭ÄÀ¤ß¤ò¤¯¤ê¤«¤¨¤¹ +[2002-10-21]¡¥ ºÑ¤ß ¾ï¤ËÄì +(µ­¹æ¤Î¸å¤Î¿ô»ú¤Ï¥Ç¥Õ¥©¥ë¥ÈÃÍ) + +³Ð¤¨Êý +¡¦Í½Äê¤Ï¤½¤ÎÆü¤Ë·ë¤ÓÉÕ¤±¤é¤ì¤Æ¤ë¤«¤é@(at) +¡¦³Ð½ñ¤ÏÄÀ¤ó¤Ç¤¤¤¯¤«¤é- +¡¦todo¤ÏÉ⤫¤Ó¾å¤¬¤Ã¤Æ¤¯¤ë¤«¤é+ +¡¦¡ºÀڤϤ½¤ÎÆü¤ËÃí°Õ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤«¤é! +¡¦ÊÝα¤ÏÇÈÂǤĤ«¤é~ +¡¦ºÑ¤ß¤Ï½ª¤ï¤ê¤À¤«¤é. + +------------------------------------- + +[¡û¡û]¤Ï²¿? >>> %¥Ü¥¿¥ó¤ÎÀâÌÀ% +¤³¤Î¥á¥Ë¥å¡¼¼«ÂΤòÊÔ½¸¤Ç¤­¤Þ¤¹ >>> %¥á¥Ë¥å¡¼¤ÎÊÔ½¸¤Ë¤Ä¤¤¤Æ% +¥á¥â¤¬Áý¤¨¤Æ¤­¤¿¤é¡Ä >>> %¹â®²½¤Ë¤Ä¤¤¤Æ% + + += <<< %¥Ü¥¿¥ó¤ÎÀâÌÀ% + +¢¡ ºîÀ® + +[¿·µ¬] ¢ª ¿·µ¬¥á¥âºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë) +[Ê£À½] ¢ª ¸½¥á¥â¤òÊ£À½ (½»½êÏ¿¥Æ¥ó¥×¥ì¡¼¥È¤Ê¤É¤ÎÍÑÅÓ¤òÁÛÄê) + +¢¡ °ìÍ÷ + +[°ìÍ÷] ¢ª Á´¥á¥â¤Î°ìÍ÷ +[ºÇ¶á] ¢ª ºÇ¶á¤Î¥á¥â¤ÎÏ¢·ëɽ¼¨ +[Á°¸å] ¢ª Á°¸å¤Î¥á¥â (¸«¤Æ¤¿¥á¥â¤òÃæ¿´¤ËÁ´¥á¥â¤ÎÆüÉÕ½ç°ìÍ÷) +* Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È +[ÍúÎò] ¢ª ¸¡º÷ÍúÎò +[ͽÄê] ¢ª ͽÄêɽ +[todo] ¢ª todo °ìÍ÷ + +¢¡ ¸¡º÷ + +[Àµµ¬] ¢ª Àµµ¬É½¸½¤Î¸¡º÷ +* ´ðËÜŪ¤Ë¤ÏÂçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ʤ· + * ¡ÖWiki¡×¤Î¤è¤¦¤ËÌÀ¼¨Åª¤ËÂçʸ»ú¤ò»ØÄꤷ¤¿¤È¤­¤Ï¶èÊÌ +[¸ÇÄê] ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸ÇÄêʸ»úÎó¤Î¸¡º÷ +[roma] ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo) +[º£Æü] ¢ª º£Æü¤Î¥á¥â +[ºòÆü] ¢ª ºòÆü¤Î¥á¥â + +¢¡ ÊÔ½¸: Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È + +[¹¹¿·] ¢ª ²¼Àþ¤ò°ú¤­¤Ê¤ª¤¹ +[¸°¢­] ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤ÆŽ¤ê¤Ä¤± +* Tips: M-v ¤Ç¸õÊä°ìÍ÷¤Ë°Ü¤Ã¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú + +[Æü¢­] ¢ª º£Æü¤ÎÆüÉÕ [yyyy-mm-dd] ¤òŽ¤ê¤Ä¤± +[»þ¢­] ¢ª º£Æü¤ÎÆü»þ [yyyy-mm-dd HH:MM] ¤òŽ¤ê¤Ä¤± +[Âꢬ] ¢ª ¸½¥á¥â¤Î¥¿¥¤¥È¥ë¤ò kill ring ¤Ø (C-y ¤ÇŽ¤ê¤Ä¤±) +* ¥¿¥¤¥È¥ë¤¬¤ß¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ï¥Õ¥¡¥¤¥ë̾ +[̾¢¬] ¢ª ¥Õ¥¡¥¤¥ë̾¤ò kill ring ¤Ø + +¢¡ ÆÃÊÌ + +[menu ¹¹¿·] ¢ª ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Ê¤É¤ò¹¹¿· +[menu ÊÔ½¸] ¢ª ¥á¥Ë¥å¡¼¤òÊÔ½¸ +[Á´¾Ã] ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯) +[¿ìÊâ] ¢ª ¥é¥ó¥À¥à¤Ë¥ê¥ó¥¯¤ò¤¿¤É¤Ã¤Æ¼«Æ°±ÜÍ÷. C-g ¤ÇÄä»ß. + += <<< %¹â®²½¤Ë¤Ä¤¤¤Æ% + +¥á¥â¤¬Áý¤¨¤Æ¸¡º÷¤¬ÃÙ¤¯¤Ê¤Ã¤Æ¤­¤¿¤é, ¹â®²½¤Î¤¿¤á¤Î¥ª¥×¥·¥ç¥óÀßÄê¤ò +¸¡Æ¤¤·¤Æ¤¯¤À¤µ¤¤. + +ºÇ¤â¸ú²Ì¤¬Â礭¤¤¤Î¤Ï, ¸¡º÷¤Ë grep ¥³¥Þ¥ó¥É¤ò»È¤¦¤³¤È¤Ç¤¹. +Unix ·Ï¤Îɸ½àŪ¤Ê´Ä¶­¤Ê¤é, ¤¿¤¤¤Æ¤¤ÌäÂê¤Ê¤¯»È¤¨¤ë¤Ç¤·¤ç¤¦. +¤½¤ì°Ê³°¤Î´Ä¶­¤Ç¤Ï, ²¿¤é¤«¤Î½àÈ÷¤¬É¬Íפˤʤ뤫¤â¤·¤ì¤Þ¤»¤ó. + +³Æ´Ä¶­¤Ç¶ñÂÎŪ¤Ë¤É¤¦¤¹¤ì¤Ð¤è¤¤¤«¤Ï¡Ä¾ðÊó¤ò¤ªÂÔ¤Á¤·¤Æ¤¤¤Þ¤¹. +¡¦http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Windows +¡¦http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus + +grep ¤Î»ÈÍѤòÀßÄꤹ¤ë¤Ë¤Ï, + M-x customize-variable howm-view-use-grep +¤ÈÆþÎϤ¹¤ë¤«, ½é´ü²½¥Õ¥¡¥¤¥ë(.emacs Åù)¤ËľÀÜ + (setq howm-view-use-grep t) +¤È½ñ¤¯¤«, ¤¢¤ë¤¤¤Ïº£¤³¤Î²èÌ̤ǡÖ%"!¡×¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤." %| %eval%(customize-variable 'howm-view-use-grep) %| + +¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï, +[ÀßÄê] ¤«¤é¡ÖHowm Efficiency¡×¤Î¹àÌܤò»²¾È¤¯¤À¤µ¤¤. + + += <<< %¥á¥Ë¥å¡¼¤ÎÊÔ½¸¤Ë¤Ä¤¤¤Æ% +[menu ÊÔ½¸] ¤Ç¤³¤Î¥á¥Ë¥å¡¼¤òÊÔ½¸ +[menu ¹¹¿·] ¤Ç¤³¤Î¥á¥Ë¥å¡¼¤ò¹¹¿· +-------------------------------------------------------- + +¥á¥Ë¥å¡¼¤Î½ñ¤­Êý +([menu ÊÔ½¸] ¾å¤Ç¥ê¥¿¡¼¥ó¤ò᤭, ¸µ¥Õ¥¡¥¤¥ë¤òÆɤó¤Ç¤¯¤À¤µ¤¤) + +¢¡ ´ðËÜ +¸«¤ì¤Ð¤ï¤«¤ë¤Ç¤·¤ç¤¦¤¬, +¡¦[¡û¡û] ¤È½ñ¤¤¤¿½ê¤¬¥Ü¥¿¥ó +¡¦¡óreminder ¤È(Ⱦ³Ñ¤Ç)½ñ¤¤¤¿½ê¤¬Í½Äêɽ¤È todo list +¡¦¡órecent ¤È(Ⱦ³Ñ¤Ç)½ñ¤¤¤¿½ê¤¬, ºÇ¶á¤Î¥á¥â°ìÍ÷ +¡¦¡órandom ¤È(Ⱦ³Ñ¤Ç)½ñ¤¤¤¿½ê¤¬, ¥é¥ó¥À¥à¤Ê¥á¥â°ìÍ÷ +¤Ë¤Ê¤ê¤Þ¤¹. +¤É¤³¤Ë½ñ¤¤¤Æ¤âµ¡Ç½¤·¤Þ¤¹¤«¤é, ʤ٤«¤¨¤ë¤Ê¤ê¤Ê¤ó¤Ê¤ê, ¤ª¹¥¤­¤Ë¤É¤¦¤¾. +¤è¤¯»È¤¦¥Õ¥¡¥¤¥ë¤ä goto link ¤â½ñ¤¤¤Æ¤ª¤±¤ÐÊØÍø¤«¤â. +(Îã) file:///etc/services >>> wiki + +¢¡ ¥·¥ç¡¼¥È¥«¥Ã¥È +%"hoge"[°ìÍ÷] +¢¬¤³¤¦½ñ¤¤¤Æ¤ª¤¯¤È, ¡Öhoge[°ìÍ÷]¡×¤Èɽ¼¨¤µ¤ì, ¥­¡¼ h ¤Ç°ìÍ÷¤òµ¯Æ° +(Àµ³Î¤Ë¤Ï, (1) ÊĤ¸¡Ö"¡×¤Ø°ÜÆ° (2) ¼¡¤Î²¼Àþ¤Þ¤Ç¿Ê¤à (3) action-lock ȯư) +%"fuga%" ¢« ¤³¤ó¤Ê¤Õ¤¦¤ËºÇ¸å¤Ë % ¤ò¤Ä¤±¤ë¤È, ¥­¡¼ f ¤Ç¤½¤³¤Ë¥«¡¼¥½¥ë°ÜÆ° + +¢¡ lisper ¸þ¤± + +¡¦É½¼¨ +%here%howm-congrats-count ¢« ÊÑ¿ô howm-congrats-count ¤ÎÃͤòËä¤á¹þ¤ß +%here%(howm-menu-search "¸¡º÷") +¢¬(¡Ä) ¤Î·ë²Ì(¡Ö¸¡º÷¡×¤Î¸¡º÷·ë²Ì)¤òËä¤á¹þ¤ß +¢¨ ¤¿¤À¤·, »È¤¦´Ø¿ô¤ÏÅÐÏ¿¤¬É¬Í× (¤ª¤Ã¤«¤Ê¤¤¤«¤é) +(setq howm-menu-allow (append '(foo bar) howm-menu-allow)) ;; foo ¤È bar ¤òµö²Ä + +¡¦Æ°ºî +S ¼°¤ò eval: %eval%(message (buffer-name)) +´Ø¿ô¤ò call-interactively: %call%find-file +¢¨ ¤¤¤º¤ì¤â, ¥á¥Ë¥å¡¼¤ò¸Æ¤ÖÁ°¤Î¥Ð¥Ã¥Õ¥¡¤Çɾ²Á¤µ¤ì¤Þ¤¹ + +¢¡ ÉԲĻë +¡Ö¡ó|¡×¤È(Ⱦ³Ñ¤Ç)½ñ¤¯¤È, ²Ä»ë¡¦ÉԲĻë¤ò¥È¥°¥ë. +¤³¤ó¤Ê¤Õ¤¦¤Ë ¢ª ¸«¤¨¤ë%|¸«¤¨¤Ê¤¤%|²Ä»ë%|ÉԲĻë¡Ä¹ÔËö¤Þ¤Ç +(¹ÔËö¤¬ÉԲĻë¤À¤È, ²þ¹Ô¤â¾Ã¤¨¤Þ¤¹) + +¢¡ Ê£¿ô¥á¥Ë¥å¡¼ +¡Ö%¡û¡û%¡×¤Ø¤Î¥ê¥ó¥¯¤Ï, ¡Ö¡ã¡ã¡ã %¡û¡û%¡×¤ò¥á¥Ë¥å¡¼¥â¡¼¥É¤Ç³«¤­¤Þ¤¹: >>> %menu% +¿·µ¬¥á¥Ë¥å¡¼¤òÄɲä·¤¿¤¤¤È¤­¤Ï [[%menu%]] ¤ÎÊý¤¬ÊØÍø¤Ç¤·¤ç¤¦ (¼«Æ°À¸À®¤¹¤ë¤Î¤Ç) +»ØÄê¥Õ¥¡¥¤¥ë¤ò¥á¥Ë¥å¡¼¥â¡¼¥É¤Ç³«¤¯: %eval%(howm-menu-open "00000000-000000.txt") diff --git a/ja/ChangeLog b/ja/ChangeLog new file mode 100644 index 0000000..e8b616f --- /dev/null +++ b/ja/ChangeLog @@ -0,0 +1,26 @@ +2011-01-01 HIRAOKA Kazuyuki + + * 0000-00-00-000000.txt: support new commands. + +2010-12-31 HIRAOKA Kazuyuki + + * 0000-00-00-000000.txt: use %reminder instead of %schedule and %todo. + +2005-12-09 HIRAOKA Kazuyuki + + * Makefile.am (EXTRA_DIST): no need to install 0000-00-00-000000.howm. + +2005-11-19 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: add "about acceleration". + thx > window16 san + http://d.hatena.ne.jp/window16/20051118 + +2005-05-11 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: added [Preference], %recent, %random + +2005-05-06 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: bind R = [Update Menu] + thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/672-673n diff --git a/ja/Makefile.am b/ja/Makefile.am new file mode 100644 index 0000000..c37714d --- /dev/null +++ b/ja/Makefile.am @@ -0,0 +1,6 @@ +EXTRA_DIST = 0000-00-00-000000.txt + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && \ + CONFIG_HEADERS= CONFIG_LINKS= \ + CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status diff --git a/ja/Makefile.in b/ja/Makefile.in new file mode 100644 index 0000000..fbd182d --- /dev/null +++ b/ja/Makefile.in @@ -0,0 +1,385 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 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@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +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 = : +build_triplet = @build@ +host_triplet = @host@ +subdir = ja +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CVS = @CVS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +howmdir = @howmdir@ +htmldir = @htmldir@ +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@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = 0000-00-00-000000.txt +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 ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ja/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu ja/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 +$(am__aclocal_m4_deps): +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$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: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +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: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-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: diff --git a/missing b/missing new file mode 100755 index 0000000..1c8ff70 --- /dev/null +++ b/missing @@ -0,0 +1,367 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2006-05-10.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 +# 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=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# 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' + autom4te touch the output file, or create a stub one + 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 "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + 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 test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -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 test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -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 "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -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 "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + 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: diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..ef7e16f --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,161 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2006-05-11.19 + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' +IFS=" "" $nl" +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: diff --git a/riffle.el b/riffle.el new file mode 100644 index 0000000..518f1e8 --- /dev/null +++ b/riffle.el @@ -0,0 +1,634 @@ +;;; riffle.el --- template of list browser with immediate preview +;;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 +;;; HIRAOKA Kazuyuki +;;; $Id: riffle.el,v 1.42 2012-12-29 08:57:18 hira Exp $ +;;; +;;; 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 1, 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. +;;; +;;; The GNU General Public License is available by anonymouse ftp from +;;; prep.ai.mit.edu in pub/gnu/COPYING. Alternately, you can write to +;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +;;; USA. +;;-------------------------------------------------------------------- + +;;; Commentary: + +;; Not yet. See sample at the bottom of this file. + +;;; Code: + +(require 'cl-lib) +(require 'gfunc) +(require 'howm-common) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; customize + +;; These howm-view-xxx will be renamed to riffle-xxx in future. + +(defcustom howm-view-summary-window-size nil + "Size of summary window, or nil for half size." + :type '(radio (const :tag "Half" nil) + integer) + :group 'howm-list-bufwin) +(defcustom howm-view-split-horizontally nil + "If non-nil, split window horizontally to show summary and contents." + :type 'boolean + :group 'howm-list-bufwin) +(defcustom howm-view-keep-one-window nil + "If nil, split windows automatically for summary and contents +even if you delete other windows explicitly." + :type 'boolean + :group 'howm-list-bufwin) +(defcustom howm-view-pop-up-windows t + "If non-nil, override `pop-up-windows'." + :type 'boolean + :group 'howm-list-bufwin) + +;; clean me: This value is copied to howm-view-open-recenter. +(defvar howm-view-search-recenter 5) + +;; experimental [2008-05-23] +(defvar riffle-keep-window nil) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; internal variables and accessors + +(defvar *riffle-summary-check* t) + +(defvar riffle-name nil) +(defvar riffle-item-list nil) +(defvar riffle-type nil) +(defvar riffle-summary-last-line nil) +(defvar riffle-contents-end nil) +(make-variable-buffer-local 'riffle-name) +(make-variable-buffer-local 'riffle-item-list) +(make-variable-buffer-local 'riffle-type) +; update contents when changed +(make-variable-buffer-local 'riffle-summary-last-line) +; end points of items +(make-variable-buffer-local 'riffle-contents-end) + +(defun riffle-name () riffle-name) +(defun riffle-item-list () riffle-item-list) +(defun riffle-set-item-list (item-list) (setq riffle-item-list item-list)) + +;; clean me +(defun riffle-p () riffle-type) +(defun riffle-contents-first-time-p () (null riffle-contents-end)) + +(defvar *riffle-preview-p* nil) +(defun riffle-preview-p () *riffle-preview-p*) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; macro + +;; In xemacs, define-derived-mode makes the mode call +;; derived-mode-merge-syntax-tables, which takes long time. +;; To avoid it, we need ":syntax-table nil". Sigh... + +(defmacro riffle-define-derived-mode (child parent name + &optional docstring + &rest body) + (declare (indent 3)) + `(define-derived-mode ,child ,parent ,name + ,docstring + :syntax-table nil + :abbrev-table nil + ,@body)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; generic function + +(defun riffle-type (&rest r) + riffle-type) +(defvar riffle-dispatchers (list #'riffle-type)) +(put 'riffle-dispatchers 'risky-local-variable t) + +(gfunc-with riffle-dispatchers + (gfunc-def riffle-home (item)) + (gfunc-def riffle-summary-item (item)) + (gfunc-def riffle-contents-item (item)) + (gfunc-def riffle-summary-set-mode ()) + (gfunc-def riffle-contents-set-mode ()) + (gfunc-def riffle-summary-name-format ()) + (gfunc-def riffle-contents-name-format ()) + (gfunc-def riffle-post-update (item))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; common + +(defcustom riffle-mode-hook nil + "Hook run at the end of function `riffle-mode'" + :type 'hook + :group 'howm-hook) + +(defvar riffle-mode-map nil) +(put 'riffle-mode-map 'risky-local-variable t) +(defvar riffle-mode-syntax-table (make-syntax-table)) +(defvar riffle-mode-abbrev-table nil) + +(defun riffle-mode () + "not yet" + (setq major-mode 'riffle-mode + mode-name "Riffle") + (use-local-map riffle-mode-map) + (set-syntax-table riffle-mode-syntax-table) + (define-abbrev-table 'riffle-mode-abbrev-table nil) + (run-hooks 'riffle-mode-hook)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; summary + +(defun riffle-summary (&optional name item-list type background) + "Create summary buffer for NAME, ITEM-LIST, and TYPE. +When NAME is nil, default values for them are selected. +Created buffer is shown immediately as far as BACKGROUND is nil. +This function returns effective value of ITEM-LIST." + (when (null name) + (setq name (riffle-name) + item-list (riffle-item-list) + type riffle-type)) + (if (null item-list) + nil + (let ((d default-directory)) + (riffle-setup-buffer #'riffle-summary-name-format name item-list type) + (setq default-directory d) + (when (not background) + (riffle-summary-subr name item-list)) + item-list))) + +(defun riffle-summary-subr (name item-list) + (riffle-summary-set-mode) + (riffle-summary-show item-list) + (unless riffle-keep-window + (riffle-summary-check t))) + +(defun riffle-summary-show (item-list) + (buffer-disable-undo) + (setq buffer-read-only nil) + (erase-buffer) + (mapc 'riffle-summary-show-item item-list) + (set-buffer-modified-p nil) + (setq buffer-read-only t + truncate-lines t) + (goto-char (point-min)) + (setq riffle-summary-last-line -777)) + +(defun riffle-summary-show-item (item) + (insert (riffle-summary-item item) "\n")) + +(riffle-define-derived-mode riffle-summary-mode riffle-mode "RiffleS" + "not yet" + ;; make-local-hook is obsolete for emacs >= 21.1. + (when (fboundp 'make-local-hook) (make-local-hook 'post-command-hook)) + (add-hook 'post-command-hook 'riffle-post-command t t)) + +(defun riffle-post-command () + (unless riffle-keep-window + (if *riffle-summary-check* + (riffle-summary-check) + (setq *riffle-summary-check* t)))) + +(defun riffle-summary-current-item () + (let ((n (riffle-line-number))) + (nth (1- n) (riffle-item-list)))) + +(defun riffle-summary-check (&optional force) + (let ((keep-one howm-view-keep-one-window)) + (when force + (riffle-refresh-window-configuration) + (setq keep-one nil)) + (let ((n (riffle-line-number)) + (howm-view-keep-one-window keep-one)) + (when (or (not (= n riffle-summary-last-line)) + force) + (setq riffle-summary-last-line n) + (let ((item (riffle-summary-current-item))) + (when (and item *riffle-summary-check*) + (riffle-summary-update item force))))))) + +(defun riffle-summary-update (item &optional new) + (unless (and howm-view-keep-one-window (one-window-p)) + (riffle-summary-update-subr item new))) +(defun riffle-summary-update-subr (item &optional new) + (let* ((*riffle-preview-p* t) ;; dirty + (vbuf (riffle-contents-buffer new)) + (cwin (selected-window)) + (pop-up-windows (or pop-up-windows howm-view-pop-up-windows)) +;; (section (riffle-controller 'section item)) + (name (riffle-name)) + (type riffle-type)) ;; be careful to buffer local var. + (riffle-pop-to-buffer vbuf howm-view-summary-window-size) + (riffle-contents name (list item) type default-directory) + (goto-char (point-min)) + (let ((home (riffle-home item))) +;; (let ((home (howm-view-item-home item))) + (when (numberp home) + (goto-char home) + (recenter howm-view-search-recenter)) + (select-window cwin) + (riffle-post-update item)))) +;; (message "View: %s" section) + +(defun riffle-pop-window () + (interactive) + (let ((r (one-window-p))) + (when r + (riffle-summary-check t)) + r)) + +(defun riffle-pop-or-scroll-other-window () + (interactive) + (or (riffle-pop-window) + (scroll-other-window))) + +(defun riffle-toggle-window () + (interactive) + (or (riffle-pop-window) + (delete-other-windows))) + +(defun riffle-summary-to-contents () + (interactive) + (let ((b (current-buffer))) + (unless riffle-keep-window + (delete-other-windows) + (set-buffer b)) + (let ((n (riffle-line-number))) + (riffle-contents (riffle-name) (riffle-item-list) riffle-type + default-directory) + (goto-char (riffle-contents-beginning (1- n)))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; contents + +;; (defvar riffle-contents-mode-variant nil) + +(defun riffle-contents (name item-list type default-dir) + (if (null item-list) + (message "Empty.") + (progn + (riffle-setup-buffer #'riffle-contents-name-format name item-list type) + (setq default-directory default-dir) + (when (riffle-contents-first-time-p) + (riffle-contents-set-mode)) +;; (let ((cm (riffle-controller 'contents-mode))) +;; (when (not (eq major-mode cm)) +;; (funcall cm))) + (riffle-contents-show item-list)))) + +(riffle-define-derived-mode riffle-contents-mode riffle-mode "RiffleC" + "not yet" + ) + +(defun riffle-contents-show (item-list) + (buffer-disable-undo) + (setq buffer-read-only nil) + (erase-buffer) + (setq riffle-contents-end + (mapcar (lambda (item) (riffle-contents-show-item item)) + item-list)) + (set-buffer-modified-p nil) + (setq buffer-read-only t) + (goto-char (point-min)) + ) + +(defun riffle-contents-show-item (item) + (insert (riffle-contents-item item)) + (point)) + +(defun riffle-contents-item-number (position) + (let ((rest riffle-contents-end) + (n 0)) + (while (and rest (<= (car rest) position)) + (setq rest (cdr rest) + n (+ n 1))) + (min n (1- (length riffle-contents-end))))) ;; for the last line + +(defun riffle-contents-current-item () + (nth (riffle-contents-item-number (point)) (riffle-item-list))) + +(defun riffle-contents-beginning (n) + (nth n (cons 1 riffle-contents-end))) + +(defun riffle-contents-to-summary () + (interactive) + (let ((n (riffle-contents-item-number (point)))) + (riffle-summary (riffle-name) (riffle-item-list) riffle-type) +; (howm-view-summary (riffle-name) (riffle-item-list)) + (howm-goto-line (1+ n)))) ;; top = 1 for goto-line + +(defun riffle-contents-goto-next-item (&optional n) + (interactive "p") + (let* ((c (point)) + ;; remember that riffle-contents-end has duplicats + (stops (cl-remove-duplicates + (sort `(1 ,c ,@(copy-sequence riffle-contents-end)) + #'<))) + (pos (cl-position c stops)) + (new (+ pos n))) + (cond ((< new 0) + (goto-char (point-min)) + (error "Beginning of buffer")) + ((>= new (length stops)) + (goto-char (point-max)) + (error "End of buffer")) + (t + (goto-char (nth new stops)))))) + +(defun riffle-contents-goto-previous-item (&optional n) + (interactive "p") + (riffle-contents-goto-next-item (- n))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; misc. + +(defun riffle-summary-buffer (&optional new) + (riffle-get-buffer (riffle-summary-name-format) nil new)) +(defun riffle-contents-buffer (&optional new) + (riffle-get-buffer (riffle-contents-name-format) nil new)) +;; (defun riffle-contents-buffer (&optional new) +;; (riffle-get-buffer howm-view-contents-name nil new)) +;; (defun riffle-summary-buffer (&optional new) +;; (riffle-get-buffer howm-view-summary-name nil new)) +(defun riffle-get-buffer (name-format &optional name new) + (let* ((bufname (format name-format (or name (riffle-name)))) + (buf (get-buffer bufname))) + (when (and new buf) + (kill-buffer buf)) + (get-buffer-create bufname))) + +(defun riffle-kill-buffer () + (interactive) + (when (riffle-p) + (let* ((s (riffle-summary-buffer)) + (c (riffle-contents-buffer)) + (sw (get-buffer-window s))) + (when sw + (select-window sw)) + (kill-buffer s) + (kill-buffer c) + (riffle-restore-window-configuration)))) + +(defun riffle-setup-buffer (name-format-func name item-list type) + (let ((name-format (let ((riffle-type type)) + (funcall name-format-func)))) + (switch-to-buffer (riffle-get-buffer name-format name)) + (setq riffle-type type) + (setq riffle-name name + riffle-item-list item-list))) + +(defun riffle-line-number (&optional pos) + (save-excursion + (save-restriction + (widen) + (when pos + (goto-char pos)) + (let ((raw (count-lines (point-min) (point)))) + (if (bolp) + (+ raw 1) + raw))))) + +(defun riffle-persistent-p (z) + "Return whether the buffer should be persistent or not. +Note that the value of Z is funcall-ed if it is a function; +consider to set `risky-local-variable' property. +(cf) +snap://Info-mode/elisp#File Local Variables +snap://Info-mode/emacs#File Variables +" + (riffle-get-value z)) + +(defun riffle-get-value (z) + (if (functionp z) + (funcall z) + z)) + +(defun riffle-restore-window-configuration () + (riffle-refresh-window-configuration)) + +(defun riffle-refresh-window-configuration () +;; (message "%s -- %s" (buffer-name) (if (riffle-p) t nil)) ;; debug + (if (riffle-p) + (riffle-setup-window-configuration) + (unless riffle-keep-window + (delete-other-windows)))) + +(defvar riffle-window-initializer 'delete-other-windows) +;; (setq riffle-window-initializer '(lambda () (pop-to-buffer nil))) +(put 'riffle-window-initializer 'risky-local-variable t) +(defun riffle-setup-window-configuration () + (let ((orig (current-buffer)) + (s (riffle-summary-buffer)) + (c (riffle-contents-buffer))) + (when (functionp riffle-window-initializer) + (funcall riffle-window-initializer)) + (switch-to-buffer c) + (riffle-pop-to-buffer c howm-view-summary-window-size) + (switch-to-buffer s) + (select-window (get-buffer-window orig)))) + +(defun riffle-scroll-up (count) + (interactive "p") + (scroll-up count)) +(defun riffle-scroll-down (count) + (interactive "p") + (scroll-down count)) +(defun riffle-scroll-other-window (count) + (interactive "p") + (scroll-other-window count)) +(defun riffle-scroll-other-window-down (count) + (interactive "p") + (scroll-other-window-down count)) + +(defvar even-window-heights nil) ;; xemacs doesn't have it. +(defun riffle-pop-to-buffer (buf &optional size) + (if riffle-keep-window + (switch-to-buffer buf) + (progn + (when (one-window-p) + (split-window nil size howm-view-split-horizontally)) + (let ((even-window-heights (if size + nil + even-window-heights)) + ;; Don't split windows further even when + ;; riffle-pop-to-buffer is called twice. + (pop-up-windows nil)) + (pop-to-buffer buf))))) + +;; 'Place' is line number at now +(defun riffle-set-place (place) + (howm-goto-line place)) +(defun riffle-get-place (&optional point) + (riffle-line-number point)) + +;; ;; needless? +;; (defun riffle-jump-to-summary () +;; (interactive) +;; (riffle-jump-to-buffer (riffle-summary-buffer))) +;; (defun riffle-jump-to-contents () +;; (interactive) +;; (riffle-jump-to-buffer (riffle-contents-buffer))) +;; (defun riffle-jump-to-buffer (buf) +;; (let ((w (get-buffer-window buf))) +;; (if w +;; (select-window w) +;; (switch-to-buffer buf)))) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;;; controller + +;; (defun riffle-make-controller (alist) +;; alist) +;; (defun riffle-send (object command &rest args) +;; (if (eq command 'self) +;; object +;; (let ((func (cdr (assoc command object)))) +;; (apply func args)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; keymap + +;;; riffle-mode + +(let ((m (make-sparse-keymap))) + (define-key m "n" 'next-line) + (define-key m "p" 'previous-line) + (define-key m "?" 'describe-mode) + (define-key m "q" 'riffle-kill-buffer) + (setq riffle-mode-map m)) + +;;; riffle-summary-mode + +(let ((m riffle-summary-mode-map)) + (define-key m " " 'riffle-pop-or-scroll-other-window) + (define-key m [backspace] 'scroll-other-window-down) + (define-key m "\C-h" 'scroll-other-window-down) + (define-key m "j" 'riffle-scroll-other-window) + (define-key m "k" 'riffle-scroll-other-window-down) + (define-key m "@" 'riffle-summary-to-contents) + (define-key m "0" 'riffle-summary-to-contents) + (define-key m "1" 'delete-other-windows) + (define-key m "2" 'riffle-pop-window) + (define-key m "v" 'riffle-toggle-window) +;; (define-key m "o" 'riffle-jump-to-contents) + ) + +;;; riffle-contents-mode + +(let ((m riffle-contents-mode-map)) + (define-key m " " 'scroll-up) + (define-key m [backspace] 'scroll-down) + (define-key m "\C-h" 'scroll-down) + (define-key m "j" 'riffle-scroll-up) + (define-key m "k" 'riffle-scroll-down) + (define-key m "@" 'riffle-contents-to-summary) + (define-key m "0" 'riffle-contents-to-summary) + (define-key m "\C-i" 'riffle-contents-goto-next-item) + (define-key m "\M-\C-i" 'riffle-contents-goto-previous-item) + (define-key m [tab] 'riffle-contents-goto-next-item) + (define-key m [(meta tab)] 'riffle-contents-goto-previous-item) +;; (define-key m "o" 'riffle-jump-to-summary) + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; sample + +;; Sample code +;; (For more realistic example, see "riffle" section in howm-view.el.) +;; snap:///~/elisp/howm/howm-view.el#136:;;; riffle + +;; Usage: +;; 1. M-x load-file +;; 2. M-x riffle-sample +;; 3. Move cursor. Type ? for help. + +(defvar riffle-sample-item-list + '( + ("foo1" "foo1 line1\nfoo1 line2\nfoo1 line3\nfoo1 line4\n") + ("foo2" "foo2 line1\nfoo2 line2\nfoo2 line3\nfoo2 line4\n") + ("bar1" "bar1 line1\nbar1 line2\nbar1 line3\nbar1 line4\n") + ("bar2" "bar2 line1\nbar2 line2\nbar2 line3\nbar2 line4\n") + )) + +(defvar riffle-sample-summary-name "sampleS:%s") +(defvar riffle-sample-contents-name "sampleC:%s") +(defvar riffle-sample-cursor-point 3) + +(defun riffle-home:sample (item) + riffle-sample-cursor-point) +(defun riffle-summary-item:sample (item) + (car item)) +(defun riffle-contents-item:sample (item) + (concat (format "<%s>\n" (car item)) (cadr item) "\n")) +(defun riffle-summary-set-mode:sample () + (riffle-sample-summary-mode)) +(defun riffle-contents-set-mode:sample () + (riffle-sample-contents-mode)) +(defun riffle-summary-name-format:sample () + riffle-sample-summary-name) +(defun riffle-contents-name-format:sample () + riffle-sample-contents-name) +(defun riffle-post-update:sample (item) + (message "%s" (car item))) + +(riffle-define-derived-mode riffle-sample-summary-mode riffle-summary-mode + "SampleS" + "Sample summary mode. +key binding +--- ------- +\\[next-line] Next item +\\[previous-line] Previous item +\\[riffle-pop-or-scroll-other-window] Pop and scroll contents +\\[scroll-other-window-down] Scroll contents +\\[riffle-scroll-other-window] Scroll contents one line +\\[riffle-scroll-other-window-down] Scroll contents one line +\\[riffle-summary-to-contents] Concatenate all contents + +\\[delete-other-windows] Delete contents window +\\[riffle-pop-window] Pop contents window +\\[riffle-toggle-window] Toggle contents window + +\\[describe-mode] This help +\\[riffle-kill-buffer] Quit +" + ) + +(riffle-define-derived-mode riffle-sample-contents-mode riffle-contents-mode + "SampleC" + "Sample contents mode. +key binding +--- ------- +\\[next-line] Next line +\\[previous-line] Previous line +\\[scroll-up] Scroll up +\\[scroll-down] Scroll down +\\[riffle-scroll-up] Scroll one line up +\\[riffle-scroll-down] Scroll one line down +\\[riffle-contents-to-summary] Summary +\\[riffle-contents-goto-next-item] Next item +\\[riffle-contents-goto-previous-item] Previous item + +\\[describe-mode] This help +\\[riffle-kill-buffer] Quit +" + ) + +(defun riffle-sample () + (interactive) + (riffle-summary "sample-list" riffle-sample-item-list ':sample)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; provide + +(provide 'riffle) + +;;; riffle.el ends here diff --git a/sample/ChangeLog b/sample/ChangeLog new file mode 100644 index 0000000..f1b010c --- /dev/null +++ b/sample/ChangeLog @@ -0,0 +1,33 @@ +2008-05-14 HIRAOKA Kazuyuki + + * dot.emacs: set inhibit-startup-message + +2006-11-21 HIRAOKA Kazuyuki + + * dot.emacs: set howm-history-file + thx > http://pc8.2ch.net/test/read.cgi/unix/1141892764/193-194n + +2005-12-09 HIRAOKA Kazuyuki + + * dot.emacs: leave howm-menu-lang to auto-detection + + * Makefile.am (EXTRA_DIST): + 0000-00-00-000000.howm is not needed any longer. + +2005-05-24 HIRAOKA Kazuyuki + + * dot.emacs: howm-history-limit is set to be nil. + Otherwise, my private ~/.howm-history is shrunk. + +2005-05-11 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: added [Preference], %recent, %random + +2005-05-06 HIRAOKA Kazuyuki + + * 0000-00-00-000000.howm: bind R = [Update Menu] + +2005-02-25 HIRAOKA Kazuyuki + + * bug-report.txt: slightly modified expressions + diff --git a/sample/Makefile.am b/sample/Makefile.am new file mode 100644 index 0000000..bb1cb25 --- /dev/null +++ b/sample/Makefile.am @@ -0,0 +1,7 @@ +EXTRA_DIST = search.txt top.txt \ + dot.emacs bug-report.txt + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && \ + CONFIG_HEADERS= CONFIG_LINKS= \ + CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status diff --git a/sample/Makefile.in b/sample/Makefile.in new file mode 100644 index 0000000..27df011 --- /dev/null +++ b/sample/Makefile.in @@ -0,0 +1,387 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 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@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +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 = : +build_triplet = @build@ +host_triplet = @host@ +subdir = sample +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/mkinstalldirs ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CVS = @CVS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extdir = @extdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +howmdir = @howmdir@ +htmldir = @htmldir@ +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@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = search.txt top.txt \ + dot.emacs bug-report.txt + +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 ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sample/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu sample/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 +$(am__aclocal_m4_deps): +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$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: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +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: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-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: diff --git a/sample/bug-report.txt b/sample/bug-report.txt new file mode 100644 index 0000000..9d04319 --- /dev/null +++ b/sample/bug-report.txt @@ -0,0 +1,29 @@ +¢¨ make test ¤ä test.bat ¤Ç¤Ï, ¥Æ¥¹¥ÈÍѴĶ­(¤Û¤Ü̵ÀßÄê¤Î emacs)¤¬µ¯Æ°¤·¤Þ¤¹. + +¥Ð¥°¤Î»ØŦ¤ò¤¯¤À¤µ¤ëÊý¤Ø: +(1) ¤³¤Î¥Ð¥Ã¥Õ¥¡¤òÊݸ¤·¤Æ¤¯¤À¤µ¤¤. +(2) ²¼¤Î¥Æ¥¹¥È¤ò¤·¤Æ¤¯¤À¤µ¤¤. +(3) emacs ¤ò¤Õ¤Ä¤¦¤Ëµ¯Æ°¤·Ä¾¤·, Êݸ¤·¤¿¥Õ¥¡¥¤¥ë¤Î ¢ª ¤Ë·ë²Ì¤òµ­Æþ¤·¤Æ¤¯¤À¤µ¤¤. + +--------------------------------------------------------- + +¢£ [¾É¾õ] ²¿¤ò¤·¤¿¤é, ¤É¤¦¤Ê¤Ã¤Æ¤Û¤·¤¤¤Î¤Ë, ¤É¤¦¤Ê¤Ã¤¿? + +°­¤¤Îã ¡Ö¥«¥¿¥«¥Ê¤ò¸¡º÷¤¹¤ë¤È¡Ä¡× +Îɤ¤Îã ¡ÖC-c , , g ¥´¥Þ RET ¤ÈÆþÎϤ¹¤ë¤È¡Ä¡× (¶ñÂÎŪ¤ÊÁàºî¼ê½ç¤ò¤ª´ê¤¤¤·¤Þ¤¹) + +¢ª + +¢£ [¥Æ¥¹¥È1] make test ¤ä test.bat ¤«¤é¤½¤ÎÁàºî¤ò¤·¤Æ¤â, ¾É¾õ¤¬½Ð¤ë? + +¢ª + +¢£ [¥Æ¥¹¥È2] ½Ð¤Ê¤¤¤Ê¤é, sample/dot.emacs ¤Ë²¿¤òÄɲä·¤¿¤éȯ¾É¤¹¤ë? + +¡Ö.emacs ¤«¤é´ØÏ¢¤·¤½¤¦¤Ê½ê¤ò¥³¥Ô¡¼ ¢ª ºÆÅÙ make test ¤ä test.bat ¢ª ¾É¾õ³Îǧ¡× +¤Ë¤è¤ê, ȯ¾É¤µ¤»¤ëÀßÄê¤òõ¤Ã¤Æ¤¯¤À¤µ¤¤ + +¢ª + +¢£ ¥Ð¡¼¥¸¥ç¥ó + diff --git a/sample/dot.emacs b/sample/dot.emacs new file mode 100644 index 0000000..b5e9b46 --- /dev/null +++ b/sample/dot.emacs @@ -0,0 +1,13 @@ +(setq load-path (cons default-directory load-path)) +(setq debug-on-error t) +(setq inhibit-startup-message t) + +(setq howm-sample-directory (expand-file-name "sample/")) +(setq howm-directory howm-sample-directory) +(setq howm-keyword-file (expand-file-name ".howm-keys" howm-sample-directory)) +(setq howm-history-file (expand-file-name ".howm-history" howm-sample-directory)) +;(setq howm-menu-lang 'ja) +(setq howm-history-limit nil) ;; Don't erase my ~/.howm-history. + +(require 'howm) +(howm-test) diff --git a/sample/search.txt b/sample/search.txt new file mode 100644 index 0000000..bf9f820 --- /dev/null +++ b/sample/search.txt @@ -0,0 +1,13 @@ += search + +<<< Á´Ê¸¸¡º÷ + +°ìÍ÷ɽ¼¨ or Ï¢·ëɽ¼¨ (¥Ò¥Ã¥È¤·¤¿¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤òÁ´Éô¤Ä¤Ê¤¤¤Ç) + +¤³¤ì¤Î¤ª¤«¤²¤Ç, ÃÇÊÒŪ¤Ê¥á¥â¤ò¤Ð¤ó¤Ð¤ó¤È¤ì¤ë :-) + +¢¨ grep -r ¤Ã¤Æ¤±¤Ã¤³¤¦Â®¤¤. ¥á¥â¥Õ¥¡¥¤¥ë 1300 ¸Ä¤Ç¤â 1 É䫤«¤é¤ó. + +¢ª top ¥á¥â¤ËÌá¤ë + + diff --git a/sample/top.txt b/sample/top.txt new file mode 100644 index 0000000..089f66b --- /dev/null +++ b/sample/top.txt @@ -0,0 +1,90 @@ += top + +²¼Àþ¤¬¥ê¥ó¥¯. ¥«¡¼¥½¥ëÃÖ¤¤¤Æ [return] ¤Ç³ºÅö¥Õ¥¡¥¤¥ë¤Ë¥¸¥ã¥ó¥×! + +¡¦goto ¥ê¥ó¥¯(¥Õ¥¡¥¤¥ë): >>> search.txt +¡¦goto ¥ê¥ó¥¯(ʸ»úÎ󸡺÷): >>> ÃÇÊÒŪ¤Ê¥á¥â¤ò¤Ð¤ó¤Ð¤ó +¡¦come-from ¥ê¥ó¥¯: <<< top ¥á¥â + +goto / come-from ¥ê¥ó¥¯¤Ï, ¼Â¤ÏÁ´Ê¸¸¡º÷¤Î¥·¥ç¡¼¥È¥«¥Ã¥È + +¢¨Á´ÂΤνñ¼°¤Ï¼«Í³. ¥ê¥ó¥¯¤Î½ñ¼°¤âÊѹ¹²Ä. ¤Ù¤¿¥Æ¥­¥¹¥È¤Ð¤ó¤¶¤¤. + += title1 +[2006-11-10 13:19] +body1 + += +[2004-12-15 13:19] +body2 + += title3 +[2004-12-15 13:19] +body3 + += ¥¿¥¤¥È¥ë1 + +ËÜʸ1 [2004-07-18] + +[2007-03-02]@ ¤Û¤² +[2007-03-03]@ ¤Û¤² +[2007-03-04]@ ¤Û¤² +[2008-03-05]@ ¤Û¤² +[2008-03-06]@ ¤Û¤² +[2008-03-07]@ ¤Û¤² +[2008-03-08]@ ¤Û¤² +[2008-03-09]@ ¤Û¤² +[2008-03-10]@ ¤Û¤² +[2008-03-11]@ ¤Û¤² +[2008-03-12]@ ¤Û¤² +[2008-03-13]@ ¤Û¤² +[2008-03-14]@ ¤Û¤² +[2008-03-15]@ ¤Û¤² +[2008-03-15 23:59]@ ¤Û¤² +[2008-03-16]@ ¤Û¤² +[2008-03-17]@ ¤Û¤² +[2008-03-18]@ ¤Û¤² +[2008-03-19]@ ¤Û¤² +[2008-03-20]@ ¤Û¤² +[2008-04-01]@ ¤Û¤² +[2008-04-02]@ ¤Û¤² +[2008-02-24]+ piyo +[2008-02-25]+ piyo +[2008-02-26]+ piyo +[2008-02-27]+ piyo +[2008-02-14]. [2008-02-28]:+ piyo +[2008-04-01]+ piyo +[2008-04-02]+ piyo +[2008-04-03]+ piyo +[2008-04-04]+ piyo +[2008-04-05]+ piyo +[2008-02-15]. [2008-04-06]:+ piyo +[2008-04-07]+ piyo +[2008-04-08]+ piyo +[2008-04-09]+ piyo +[2008-04-10]+ piyo +[2009-06-05]! bar +[2009-06-06]! bar +[2009-06-07]! bar +[2009-06-08]! bar +[2009-06-09]! bar +[2009-06-10]! bar +[2009-06-11]! bar +[2009-06-12]! bar + += ¥¿¥¤¥È¥ë2 + +ËÜʸ2 [2004-07-17] + +FOO +Foo +foo +http://foo/bar/baz.html +>>> ../doc/s-screen-shot.png +hoge >>> foo >>> bar >>> baz > qux +>>> top.txt +>>> /tmp/ +[2005-01-16]&3 aaa +[2005-01-28]&7 bbb' +[2005-01-25]&7 bbb +[2005-01-08]&22 ccc diff --git a/test.bat b/test.bat new file mode 100644 index 0000000..2b7fce1 --- /dev/null +++ b/test.bat @@ -0,0 +1,7 @@ +REM $Id: test.bat,v 1.2 2010-05-05 13:18:39 hira Exp $ + +REM --- Edit HOWM_EMACS to point your emacs/meadow. --- +set HOWM_EMACS=d:/mdw/bin/meadow + +set HOWM_TEST=bat +start "howm test" %HOWM_EMACS% -q --no-site-file -l sample/dot.emacs -- 2.11.0

#{file}