OSDN Git Service

copy old 'master' branch (c3a8f31) just after test160101
authorHIRAOKA Kazuyuki <khi@users.sourceforge.jp>
Thu, 31 Mar 2016 08:46:08 +0000 (17:46 +0900)
committerHIRAOKA Kazuyuki <khi@users.sourceforge.jp>
Thu, 31 Mar 2016 08:47:06 +0000 (17:47 +0900)
94 files changed:
.gitignore [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
Makefile.old [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
acinclude.m4 [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
action-lock.el [new file with mode: 0644]
bcomp.el [new file with mode: 0644]
bcomp.el.in [new file with mode: 0644]
cheat-font-lock.el [new file with mode: 0644]
config.guess [new file with mode: 0755]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.ac [new file with mode: 0644]
doc/CL-HOWM.ja.rd [new file with mode: 0644]
doc/ChangeLog [new file with mode: 0644]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/OLD.rd [new file with mode: 0644]
doc/README-j.html [new file with mode: 0644]
doc/README.html [new file with mode: 0644]
doc/README.ja.rd [new file with mode: 0644]
doc/README.rd [new file with mode: 0644]
doc/TUTORIAL.ja.rd [new file with mode: 0644]
doc/cat.png [new file with mode: 0644]
doc/come.png [new file with mode: 0644]
doc/go.png [new file with mode: 0644]
doc/index-j.html [new file with mode: 0644]
doc/index.html [new file with mode: 0644]
doc/menu.png [new file with mode: 0644]
doc/s-cat.png [new file with mode: 0644]
doc/s-menu.png [new file with mode: 0644]
doc/s-screen-shot.png [new file with mode: 0644]
doc/s-search.png [new file with mode: 0644]
doc/s-source.png [new file with mode: 0644]
doc/screen-shot.png [new file with mode: 0644]
doc/search.png [new file with mode: 0644]
doc/source.png [new file with mode: 0644]
doc/todo.png [new file with mode: 0644]
doc/updown.png [new file with mode: 0644]
elisp-comp [new file with mode: 0755]
en/0000-00-00-000000.txt [new file with mode: 0644]
en/ChangeLog [new file with mode: 0644]
en/Makefile.am [new file with mode: 0644]
en/Makefile.in [new file with mode: 0644]
ext/ChangeLog [new file with mode: 0644]
ext/Makefile.am [new file with mode: 0644]
ext/Makefile.in [new file with mode: 0644]
ext/hcal.rb [new file with mode: 0755]
ext/howm2 [new file with mode: 0755]
ext/howmkara [new file with mode: 0755]
ext/hsplit.rb [new file with mode: 0755]
gfunc.el [new file with mode: 0644]
honest-report.el [new file with mode: 0644]
howm-backend.el [new file with mode: 0644]
howm-common.el [new file with mode: 0644]
howm-date.el [new file with mode: 0644]
howm-lang-en.el [new file with mode: 0644]
howm-lang-ja.el [new file with mode: 0644]
howm-menu-en.el [new file with mode: 0644]
howm-menu-ja.el [new file with mode: 0644]
howm-menu.el [new file with mode: 0644]
howm-misc.el [new file with mode: 0644]
howm-mkmenu.el [new file with mode: 0644]
howm-mode.el [new file with mode: 0644]
howm-reminder.el [new file with mode: 0644]
howm-vars.el [new file with mode: 0644]
howm-version.el [new file with mode: 0644]
howm-version.el.in [new file with mode: 0644]
howm-view.el [new file with mode: 0644]
howm.el [new file with mode: 0644]
illusion.el [new file with mode: 0644]
install-sh [new file with mode: 0755]
ja/0000-00-00-000000.txt [new file with mode: 0644]
ja/ChangeLog [new file with mode: 0644]
ja/Makefile.am [new file with mode: 0644]
ja/Makefile.in [new file with mode: 0644]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
riffle.el [new file with mode: 0644]
sample/ChangeLog [new file with mode: 0644]
sample/Makefile.am [new file with mode: 0644]
sample/Makefile.in [new file with mode: 0644]
sample/bug-report.txt [new file with mode: 0644]
sample/dot.emacs [new file with mode: 0644]
sample/search.txt [new file with mode: 0644]
sample/top.txt [new file with mode: 0644]
test.bat [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..4c4b0a7
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           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.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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.
+
+  <signature of Ty Coon>, 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 (file)
index 0000000..85c1066
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,2356 @@
+2016-01-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.ac: test version
+
+2016-01-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm.el: update copyright years
+
+2015-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm.el: use cl-lib instead of cl for avoiding warnings
+
+       * howm-cl.el: howm-cl-* are now useless.
+
+2015-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.ac: version 1.4.3
+
+2015-12-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.ac: version 1.4.3rc1
+
+       * howm-mode.el (howm-list-around): fix. howm-list-title didn't work.
+
+2015-05-24  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       update autotools
+
+2015-01-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.4.2
+
+2013-12-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.4.2rc1
+
+2013-03-21  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+        * 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  <khi@users.sourceforge.jp>
+
+       test version
+       - update copyright years
+       - use "declare" instead of "lisp-indent-hook"
+
+2012-12-30  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       test version
+
+2012-12-29  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2012-09-10  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.4.0
+
+2012-02-18  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm.el: update copyright years
+
+2011-12-28  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2011-03-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: fix warning "suspicious cache-id" in autoconf.
+
+2011-03-10  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2011-01-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-mode.el (howm-initialize-buffer): use howm-funcall-if-defined.
+
+       * riffle.el (riffle-summary-mode): ditto.
+
+2011-01-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-backend.el: delete rast.
+
+2011-01-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.9
+
+2010-12-29  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.9rc1
+
+2010-07-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.8
+
+2009-08-08  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-excluded-dirs): add ".git".
+
+2009-07-23  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * riffle.el (riffle-line-number): widen before counting.
+
+2009-05-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2009-03-21  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.7
+
+       * howm-misc.el (howm-basic-save-buffer): fix.
+       inhibit "Wrote ..." message.
+
+2008-11-05  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-misc.el (howm-configuration-for-major-mode): 
+       modify sample for "defun*"
+
+2008-08-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.7rc1
+
+2008-08-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-normalizer):
+       use original names instead of aliases
+
+2008-08-05  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2008-07-24  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2008-07-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-misc.el (howm-test): add docstring.
+       thx > dareka
+       http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport
+
+2007-11-07  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2007-11-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2007-04-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-misc.el (howm-truncate-string): fix. correct docstring
+
+2007-04-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2007-03-22  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * honest-report.el (honest-report-version-assoc): 
+       report environment variables "LANG" etc.
+
+2006-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-common.el (howm-message-nolog): message without logging
+
+       * howm-view.el (riffle-post-update:howm): ditto.
+
+2006-10-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+       * howm-misc.el (howm-bayesian-set): new command.
+
+2006-06-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * COPYING: fix.
+       obsolete address of FSF is corrected.
+       thx > Fujimura Yuki san <ykfj@users.sourceforge.jp>
+
+2006-06-05  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.3
+
+2006-05-20  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.3rc1
+
+2006-05-15  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2006-05-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2006-05-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * illusion.el: require easy-mmode explicitly
+
+       * honest-report.el (honest-report-window-list): 
+       support emacs20 (and meadow-1.15).
+
+2006-03-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2006-03-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2006-02-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2006-01-18  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-backend.el (howm-page-viewer:file): 
+       list files in directory in contents buffer.
+
+2006-01-17  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2006-01-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+       (packagedir): fix lispdir for xemacs with packagedir
+
+2005-12-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-mode-off-hook): fix.
+       remove duplicated defcustom.
+       thx > TAKEMURA Masayuki san. ICG04984@nifty.com
+
+2005-11-26  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+       * howm-menu.el (howm-menu-list-action): fix.
+       history list was broken.
+
+2005-11-05  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.2rc4
+
+2005-10-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.2rc3
+       something was wrong in 'cvs commit' of rc2.
+
+2005-10-20  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.2rc1
+
+2005-10-15  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2005-09-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-backend.el (howm-occur): new command
+
+2005-09-26  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-view-contents-limit): default is changed to 10000
+
+2005-09-07  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * action-lock.el
+       (action-lock-open-regexp): include / at the end
+       (action-lock-browse-regexp): ditto
+
+2005-09-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-view.el: add (require 'riffle)
+       thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/782
+
+2005-08-17  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.1
+
+2005-08-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-view.el (howm-view-title-skip-regexp): new option
+
+2005-08-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-misc.el (howm-bug-shot): new command for bug report
+
+2005-08-08  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+       * riffle.el (riffle-define-derived-mode):
+       defined to avoid slow down in xemacs.
+
+2005-08-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.0rc5
+
+2005-07-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-content-from-region): fix. Labels are corrected.
+
+2005-07-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.0rc3
+
+2005-07-08  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.0rc2
+
+2005-06-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-menu-lang):
+       check locale to select default language.
+
+2005-06-21  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.3.0rc1
+
+2005-06-17  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2005-06-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2005-06-07  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2005-06-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2005-05-30  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-action-lock-forward-save-buffer): 'defcustom'ed
+
+2005-05-24  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: test version
+
+2005-05-19  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-vars.el (howm-excluded-file-regexp): fix: wrong const values
+
+2005-05-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-view.el (howm-item-list-rangeset): add doc-str around this func
+
+2005-05-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * configure.in: version 1.2.2
+
+2005-04-29  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * cheat-font-lock.el: use old code for emacs20
+       New code may make howm-view-summary-open too slow.
+
+2005-04-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-menu.el (howm-menu-search): embed search result into menu
+
+2005-03-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-view.el (howm-view-filter-by-contents): support C-u (= reject)
+
+2005-03-17  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-view.el (howm-view-contents-item): fix.
+       doubly displayed when matched to the last line of paragraph
+
+2005-03-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-common.el (howm-time-difference-second): omit microsecond
+
+       * howm-misc.el (howm-elp): initialize profiler
+
+2005-03-08  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * test.bat: invoke test environment for win
+
+2005-03-03  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-misc.el
+       (howm-random-walk-text): clean
+       (howm-random-walk): kill old buffers after jump
+
+2005-03-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-misc.el (howm-random-walk): automatic random walk
+
+2005-02-28  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-mode.el (howm-list-normalize): fix.
+       error when '[hoge' is searched.
+
+2005-02-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-mode.el (howm-keyword-list): never return ""
+
+2005-02-23  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm-common.el: fix for xemacs and emacs20
+
+2005-02-22  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howm-backend.el (howm-files-in-directory): clean up
+
+       * howm-mode.el (howm-content-from-region): new option variable
+
+2005-02-18  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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 (file)
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 (file)
index 0000000..4a80863
--- /dev/null
@@ -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 (file)
index 0000000..6db111a
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..bcbcc3f
--- /dev/null
+++ b/NEWS
@@ -0,0 +1 @@
+see doc/
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..bcbcc3f
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+see doc/
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..b0a7656
--- /dev/null
@@ -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 (file)
index 0000000..07227fd
--- /dev/null
@@ -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:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+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: <http://austingroupbugs.net/view.php?id=542>
+
+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: <http://www.gnu.org/software/coreutils/>.
+
+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 <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/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 (file)
index 0000000..95c4c98
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;; $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 "\\<file://\\(localhost\\)?\\(" "\\>/?\\)"))
+(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) ;; ((<URL:...>))
+        (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 (file)
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 (file)
index 0000000..e4460b6
--- /dev/null
@@ -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 (file)
index 0000000..df19af3
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (executable)
index 0000000..396482d
--- /dev/null
@@ -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 <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  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 <config-patches@gnu.org>."
+
+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 <stdio.h>  /* 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 <sys/systemcfg.h>
+
+               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 <stdlib.h>
+              #include <unistd.h>
+
+              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 <unistd.h>
+       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 <features.h>
+       #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' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/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 <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # 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 <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#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 <sys/param.h>
+  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 <sys/param.h>
+#  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 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> 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 (executable)
index 0000000..387c18d
--- /dev/null
@@ -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 <config-patches@gnu.org>.  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 <config-patches@gnu.org>."
+
+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 (executable)
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 </dev/null
+exec 6>&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:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+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: <http://austingroupbugs.net/view.php?id=542>
+
+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: <http://www.gnu.org/software/coreutils/>.
+
+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 2>/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
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$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 = "\a"
+
+}
+{
+  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 (file)
index 0000000..8e3b48c
--- /dev/null
@@ -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 (file)
index 0000000..8db7cc8
--- /dev/null
@@ -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 ·Á¼°¤ò¤ª»È¤¤¤ÎÊý¤Ï,
+((<URL:http://howm.sourceforge.jp/a/rd-mode-plus.el>))
+¤âÊ»ÍѤ¹¤ë¤ÈÊØÍø¤«¤â¤·¤ì¤Þ¤»¤ó.
+¾å¤Î howm-to-change-log ¤Î¤«¤ï¤ê¤Ë, ¼¡¤Îµ¡Ç½¤¬»È¤¨¤Þ¤¹.
+
+* M-x rd-to-change-log ¢ª ChangeLog Memo ¤ò³«¤¤¤Æ¾Ï¡¦Àá¤Î¥¿¥¤¥È¥ë¤ò¥³¥Ô¡¼
+  * Îã
+    * howm memo ¤Ë¤³¤¦½ñ¤¤¤Æ¤¿¤é¡Ä
+        = ¤Û¤²
+        ¡Ä
+        == ¤Õ¤¬
+        ¡Ä
+        == ¤Ô¤è
+        ¡Ä
+        ¢£ ¢« ¥«¡¼¥½¥ë
+    * ¤³¤ó¤Ê ChangeLog ¤¬¤Ç¤­¤ë
+        2003-12-03  Foo Bar  <foo@bar.baz>
+               * ¤Û¤²
+               - ¤Ô¤è
+  * Ãí
+    * ¥«¡¼¥½¥ë¤¬Â°¤¹¤ë¾Ï(=), Àá(==)¤Î¥¿¥¤¥È¥ë¤òÃê½Ð¤·¤Þ¤¹
+    * ¡Ö¤Û¤²¡×¤Ë¥«¡¼¥½¥ë¤òÃÖ¤¤¤¿¾ì¹ç, == ¤Î¥¿¥¤¥È¥ë¤Ï¥³¥Ô¡¼¤µ¤ì¤Þ¤»¤ó
+    * C-u M-x rd-to-change-log ¤Ê¤é, ¤½¤Î¾Ï¤Î¤¹¤Ù¤Æ¤ÎÀá¤Î¥¿¥¤¥È¥ë¤òÃê½Ð¤·¤Þ¤¹
+        2003-12-03  Foo Bar  <foo@bar.baz>
+               * ¤Û¤²
+               - ¤Õ¤¬
+               - ¤Ô¤è
+
+
+=end
diff --git a/doc/ChangeLog b/doc/ChangeLog
new file mode 100644 (file)
index 0000000..bd2ffc4
--- /dev/null
@@ -0,0 +1,279 @@
+2015-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: add commit-hash of git-head emacs
+
+2015-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update version.
+
+       * index.html: ditto.
+
+       * index-j.html: ditto.
+
+       * TUTORIAL.ja.rd: delete obsolete link.
+
+2012-12-29  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index-j.html: add link to howmm. fix link to howm-mode.vim.
+
+2011-01-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: support new commands.
+
+       * README.ja.rd: move old changelogs to OLD.rd
+
+2010-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * index-j.html: add link to QFixHowm.
+
+2010-12-29  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update obsolete descriptions.
+
+       * OLD.rd: ditto.
+
+2009-07-23  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update table of contents.
+
+2009-05-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index-j.html: fix link.
+
+2009-01-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * index-j.html: delete debian package
+
+       * index.html: ditto.
+
+2008-07-16  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index-j.html: move old announce to OLD.rd
+
+       * README.ja.rd: move old changes to OLD.rd
+
+2008-05-14  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index.html: link to howm-1.3.5
+
+2008-04-07  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index.html: add customization example for efficiency
+
+2007-04-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: add Whem.
+
+2007-03-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update 2ch URL.
+
+2007-01-18  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update 2ch URL.
+
+2006-09-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: change on 2006-09-10 is canceled.
+
+2006-09-10  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: 
+       M-x customize-variable howm-menu-todo-priority for %reminder.
+
+2006-06-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: 
+       link to yaswiki is removed because of error response.
+       link to BugReportFAQ is added insteadly.
+
+2006-05-15  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: 
+       add thx link to http://pc8.2ch.net/test/read.cgi/unix/1077881095/42
+
+2006-01-17  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: link to BugReportFAQ
+
+2005-12-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update link to Hidemaru porting
+
+       * index-j.html: ditto.
+
+2005-11-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * CL-HOWM.ja.rd: describe merits of sort and filter.
+
+2005-10-24  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * Makefile.am (MAINTAINERCLEANFILES): 
+       move *.html from CLEANFILES to MAINTAINERCLEANFILES
+       so that users can try make clean && make without rdtool.
+
+2005-10-21  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: explain configure --with-xemacs
+       thx > http://pc8.2ch.net/test/read.cgi/unix/1077881095/810
+
+2005-10-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: remove incorrect description.
+       'd' key on date format is never implemented.
+
+2005-09-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.rd: 'search' is corrected to 'search for'
+
+2005-09-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * index-j.html: correct RD label
+
+2005-08-17  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index.html: email address is removed.
+
+2005-08-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * README.rd: add alias, customization, menu editing.
+
+2005-07-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: update URL of howm-mode.vim
+
+2005-07-26  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: add links to wema and LesserWiki
+
+2005-07-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index-j.html: correct anchor "#label:20" to "#label-20".
+       It depends on the version of rd2, perhaps.
+
+2005-07-16  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: add comment on grep-2.5 multibyte feature
+
+2005-06-07  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * Makefile.am (README.html): added to distribution.
+
+       * README.rd: 'Repeat schedule' is added.
+
+2005-05-26  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index.html: M-x custom ==> M-x customize-group
+
+2005-05-24  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: correct description of %here; args are quoted
+
+2005-05-08  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: move old customize section to OLD.rd
+
+2005-05-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: key bind R = [Update Menu]
+
+2005-04-02  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * README.ja.rd: link to LinuxZaurus on howm-wiki
+
+2005-03-27  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * OLD.rd: update 2ch URL (pc5 to pc8)
+
+       * README.ja.rd: update 2ch URL (pc5 to pc8)
+
+2005-03-13  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index-j.html: update URL of howm-mode.vim
+
+2005-02-19  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * index-j.html: add link to Meadow memo
+
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..596a4b8
--- /dev/null
@@ -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 (file)
index 0000000..72df3b1
--- /dev/null
@@ -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 (file)
index 0000000..8462121
--- /dev/null
@@ -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 »ÈÍÑ»þ¤Ë¥¨¥é¡¼¤¬½Ð¤Æ¤¤¤¿
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/787-790n>))
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/898-901n>))
+      * grep ¤Î¥Ç¥Õ¥©¥ë¥È¥ª¥×¥·¥ç¥ó¤òÀßÄꤹ¤ëÁ°¤Ë,
+        --exclude-dir ¤¬Ä̤뤫³Îǧ¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿.
+    * Â礭¤¤¥Õ¥ì¡¼¥à¤Ç°ìÍ÷ɽ¼¨¤ò¤·¤¿¤È¤­¤Î;·×¤Ê¥¦¥£¥ó¥É¥¦Ê¬³ä¤ò½¤Àµ
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+    * howm-vars.elc ¥í¡¼¥É»þ¤Î·Ù¹ð¡Öold-style backqoute detected!¡×¤ò²óÈò.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+
+* ¥ê¥ê¡¼¥¹ÈÇ 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)¤ÇͽÄêɽ¤ò³«¤¤¤¿¤È¤­,
+      ÆâÍƥХåե¡¤¬¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/826>))
+    * ¥É¥­¥å¥á¥ó¥È¤Î¸Å¤¤²Õ½ê¤ò¼êľ¤·
+    * ¥á¥ó¥Æ¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ä¡¼¥ë(ext/tag2plan)¤òºï½ü
+
+* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.8 [2009-12-31]
+  * Note
+    * Â礭¤ÊÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¤¬, °ìǯ¤¿¤Ã¤¿¤Î¤Ç¥ê¥ê¡¼¥¹¤·¤Æ¤ª¤­¤Þ¤¹.
+    * howm-test090723 ¤È¤Î°ã¤¤¤Ï, howm-excluded-dirs ¤Ë ".git" ¤ò
+      Äɲä·¤¿¤À¤±¤Ç¤¹.
+  * Êѹ¹¡¦²þÎÉ
+    * ²á¤®¤¿¡ºÀÚ¤ËÃ忧
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/738>))
+    * _darcs/ ¤Ê¤É¤ò¸¡º÷Âоݳ°¤Ë (howm-excluded-dirs).
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/708n>))
+      * ¤¤¤Þ¤É¤­¤Î GNU grep ¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¢­¤â¤·¤Æ¤ª¤¯¤È̵Â̤ʸ¡º÷¤ò¾Ê¤±¤Þ¤¹.
+          (setq howm-view-grep-option "-Hnr --exclude-dir=_darcs")
+      * ¤µ¤é¤Ë, *.txt ¤À¤±¸¡º÷¤¹¤ë¤è¤¦¤Ë¤·¤¿¤±¤ì¤Ð¡Ä
+          (setq howm-view-grep-option "-Hnr --exclude-dir=_darcs --include=*.txt")
+    * ((<yagrep|URL:http://www.kt.rim.or.jp/~kbk/yagrep/index.html>)) ¤È¤Î
+      ¸ß´¹À­¤Î¤¿¤á, grep ¸Æ¤Ó½Ð¤·»þ¤Ë¥Ç¥£¥ì¥¯¥È¥ê̾ËöÈø¤Î / ¤òºï½ü.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/685-686n>))
+    * ((<HidePrivateReminder|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder>))
+      ¤Î¤¿¤á¤ËÆâÉô¤ò¾¯¤·Áݽü.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/731>))
+  * fix
+    * C-c , l (howm-list-recent)»þ¤Ë³ºÅö¥Õ¥¡¥¤¥ë¤¬Â¿¤¹¤®¤ë¤È¥¨¥é¡¼.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/733>))
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Windows>))
+      * howm-view-use-grep ¤òÀßÄꤷ¤Æ¤¤¤ë¾ì¹ç¤Ëȯ¾É.
+        meadow ¤À¤È "Spawning child process: exec format error" ¤Ë¤Ê¤ë¤é¤·¤¤.
+      * grep ¸Æ¤Ó½Ð¤·»þ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬ howm-command-length-limit °Ê¾å¤Ë
+        Ä¹¤¤¤È¤­¤Ïʬ³ä¤·¤Æ¸Æ¤Ó½Ð¤¹¤è¤¦Ä¾¤·¤Þ¤·¤¿.
+    * (setq howm-list-title t) ¤·¤Æ¤¤¤¿¤é,
+      come-from ¥ê¥ó¥¯¾å¤Ç RET ¤·¤¿¤È¤­¤â¥¿¥¤¥È¥ë°ìÍ÷¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/762>))
+      * ¤â¤·°ÊÁ°¤ÎÆ°ºî¤¬¤è¤±¤ì¤Ð,
+        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>))
+              ¤«
+              ((<howm wiki ¤Î¡Ö¤Ê¤ó¤Ç¤â¡×|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+              ¤Ç¤´ÁêÃ̤ò
+        * ¤â¤·µìÊÑ¿ô¤ò¥»¥Ã¥È¤·¤¿¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¯¤È¡Ä
+          * Ã±½ã¤ËÆɤߤ«¤¨¤é¤ì¤½¤¦¤Ê¤é, ¿·ÊÑ¿ô¤ËÆɤߤ«¤¨¤Æ¿·½èÍý¤ò¼Â¹Ô
+          * Æɤߤ«¤¨¤é¤ì¤Ê¤«¤Ã¤¿¤é, µì½èÍý¤ò¼Â¹Ô (Èó¸úΨ)
+      * ¡Öº£Æü¤ÈÌÀÆü¤ÎÆüÉաפϠ[YYYY-MM-DD] ¤Ç¤Ê¤¯ YYYY-MM-DD ¤òÃ忧
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/691>))
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/275>))
+        * °ìÍ÷¤ä¥á¥Ë¥å¡¼¤Î¥Õ¥¡¥¤¥ë̾¤â, ¥Þ¥Ã¥Á¤¹¤ì¤ÐÃ忧
+        * Á°¤Î¤è¤¦¤ËÌᤷ¤¿¤±¤ì¤Ð¡Ä
+            ;; º£Æü¤ÈÌÀÆü¤ÎÆüÉÕ¤Ï, [YYYY-MM-DD] ¤Î·Á¼°¤À¤±Ã忧
+            (setq howm-highlight-date-regexp-format (regexp-quote "[%Y-%m-%d]"))
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡
+      * ¸¡º÷»þ¤ÎÆâÉôŪ¤Ê°ìÍ÷¥Ð¥Ã¥Õ¥¡ºÆɽ¼¨¤òÍÞÀ©
+      * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤«¤é¤Î X (dired-x) »þ¤Ë, ¥«¡¼¥½¥ë¤òÂбþ¥Õ¥¡¥¤¥ë̾¤ØÃÖ¤¯
+        ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+        > 797 ¤µ¤ó
+        * 1.3.2 ¤Î±£¤·µ¡Ç½¤ò¸ø¼°²½ & ¥Ç¥Õ¥©¥ë¥È²½.
+          ÊÑ¿ô howm-view-dired-keep-cursor ¤Ïºï½ü¤·¤Þ¤·¤¿.
+      * howm-view-summary-previous-section ¤â¡Ö³Æ¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Î¥Ò¥Ã¥È¹Ô¡×¤Ç
+        »ß¤Þ¤ë¤è¤¦Êѹ¹
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/360>))
+      * ÆâÍƥХåե¡¤Ç°ì¥¢¥¤¥Æ¥à¤À¤±É½¼¨¤·¤Æ¤¤¤ë¤È¤­¤Ï,
+        ¶èÀÚ¤êÀþ¡Ö====>>> xxx.txt¡×¤òÉÁ¤«¤Ê¤¤.
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/314>))
+      * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¥½¡¼¥È´ð½à¤Ë summary-match-string ¤òÄɲÃ
+        * »ØÄꤷ¤¿Àµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó¤Î½ç¤Ë¥½¡¼¥È
+          * Îã: ¡Ö2006-06-..¡×¤ò»ØÄꤹ¤ì¤Ð, 2006ǯ6·î¤Î¹àÌܤòÆüÉÕ½ç¤Ë
+        * ¤Á¤Ê¤ß¤Ë, summary-match ¤Ï, ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤ò¾å°Ì¤Ë¤â¤Ã¤Æ¤¯¤ë¤À¤±
+          * ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤É¤¦¤·¤Î¾å²¼Èæ³Ó¤Ï¤·¤Ê¤¤
+    * ¥á¥Ë¥å¡¼
+      * ¥á¥Ë¥å¡¼¤Î %recent ¤ä %random ¤Ç¤â¥Õ¥¡¥¤¥ë̾Íó¤ò·å¤½¤í¤¨.
+        ((<thx|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2007/000032.html>)) > Mielke-san (peter.mielke at gmail.com)
+        * ÊÑ¿ô howm-menu-list-format ¤Ï %recent ¤ª¤è¤Ó %random ÍѤË
+        * ¿·ÊÑ¿ô howm-menu-reminder-format ¤¬ %schedule ¤ª¤è¤Ó %todo ÍÑ
+      * ¥á¥Ë¥å¡¼¤Î %random% ¤Ç, Æ±¤¸¥Õ¥¡¥¤¥ë¤«¤é¤Ï°ì¹àÌܤ·¤«Áª¤Ð¤ì¤Ê¤¤¤è¤¦¤Ë
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/563-566n>))
+      * ¥á¥Ë¥å¡¼¤ÎÍËÆüɽµ­¤ò¥ê¥¹¥È¤Ç»ØÄꤹ¤ë¤è¤¦Êѹ¹.
+        ±Ñ¸ìɽµ­¤Î¥Ç¥Õ¥©¥ë¥È¤â "Sun" Åù¤Ëľ¤·¤¿.
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/147>))
+          (setq howm-day-of-week-ja '("Æü" "·î" "²Ð" "¿å" "ÌÚ" "¶â" "ÅÚ"))
+          (setq howm-day-of-week-en '("Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"))
+        * ¤Ã¤Æ¤¤¤¦¤«, ¤ï¤¶¤ï¤¶Æȼ«¤ËÄêµÁ¤»¤º¤Ë
+          (format-time-string "%a") ·è¤áÂǤÁ¤Ç¤â¹½¤ï¤Ê¤¤?
+      * ½é´ü¥á¥Ë¥å¡¼¤Ë¥Ü¥¿¥ó¤ÎÀâÌÀ¤òÄɲÃ.
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/144>))
+    * ¤¤¤í¤¤¤í
+      * howm-view-grep-option ¤ËÊ£¿ô¤Î¥ª¥×¥·¥ç¥ó¤ò½ñ¤±¤ë¤è¤¦¤Ë.
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/458>))
+          (setq howm-view-grep-option "-Hnr --include=*.txt") ;; *.txt ¤Î¤ß¸¡º÷
+        * Ã±½ã¤Ë split-string ¤·¤Æ¤ë¤À¤±.
+          ¤â¤Ã¤È¤Þ¤¸¤á¤Ê¤Î¤¬É¬Íפʤ餪ÃΤ餻¤¯¤À¤µ¤¤.
+      * Ã±¸ì¤ÎÅÓÃ椬¤¿¤Þ¤¿¤Þ come-from ¥­¡¼¥ï¡¼¥É¤Ë°ìÃפ·¤Æ¤â²¼Àþ¤ò°ú¤«¤Ê¤¤ÀßÄê.
+        ((<thx|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2007/000030.html>)) > Mielke-san (peter.mielke at gmail.com)
+          ;; ASCII Ê¸»ú¤Î¤ß¤Î¥­¡¼¥ï¡¼¥É¤Ï, Ã±¸ìÅÓÃæ¤Ë¥Þ¥Ã¥Á¤·¤Æ¤â²¼Àþ¤ò°ú¤«¤Ê¤¤
+          (setq howm-check-word-break "^[[:ascii:]]+$")
+      * Í½Äêɽ, ToDo ¥ê¥¹¥È¤Ë¤âĶ²áÆü¿ô¤òɽ¼¨.
+        ((<thx|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000028.html>)) > Mielke-san (peter.mielke at gmail.com)
+      * .howm-history ¤Þ¤ï¤ê¤ÎµóÆ°¤ò²þÁ±.
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/179>))
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/193-194n>))
+        * ¥Ð¥Ã¥Õ¥¡°ìÍ÷¤Ëɽ¼¨¤·¤Ê¤¤
+        * "Wrote ..." ¤òɽ¼¨¤·¤Ê¤¤
+        * make test »þ¤Ë ~/.howm-history ¤ò±ø¤µ¤Ê¤¤
+  * fix
+    * howm-menu-categorized-reminder ¤Çɽ¼¨¤µ¤ì¤Ê¤¤¹àÌܤ¬¤¢¤Ã¤¿
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+    * (setq howm-view-list-title-type 2) ¤Î¤È¤­ C-c , a ¤Ç¥¨¥é¡¼
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/552>))
+    * ¥¿¥¤¥È¥ë¤Î¤Ê¤¤¥á¥â¤¬ C-c , a ¤Çɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿
+    * howmoney ¤¬»È¤¨¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/503>))
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/514>))
+    * Í½Äê¤ä todo ¤¬°ì¤Ä¤â¤Ê¤¤¤È¤­¤ËͽÄêɽ¤ä todo ¥ê¥¹¥È¤ò¸Æ¤Ó½Ð¤·¤¿¾ì¹ç.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/494>))
+    * Í½Äêɽ¤ä todo ¥ê¥¹¥È¤Ç action-lock-mode ¤¬ÉÔËܰդ˥ȥ°¥ë.
+    * howm2, howmkara ¤Î -exclude ¥ª¥×¥·¥ç¥ó¤ËÉÔ¶ñ¹ç.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>)) > dareka ¤µ¤ó
+    * ((<HidePrivateReminder|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder>))¤Ç C-c , t ¤¬¡ÖNo match¡×¤Ë
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder>)) > taku ¤µ¤ó
+      * ¸ß´¹À­¤ò½¤Éü
+    * howm-occur ¤Ç°ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¸¡º÷¸ì¤¬¥Ï¥¤¥é¥¤¥È¤µ¤ì¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿
+    * ¡Ö¡ã¡ã¡ã ¥Æ¥¹¥È ¡ã¡ã¡ã Test¡×¤Î¡ÖTest¡×¾å¤Ç RET ¤òᤤ¤Æ¤â¡Ö¥Æ¥¹¥È¡×¤¬
+      ¸¡º÷¤µ¤ì¤Ê¤«¤Ã¤¿
+      * howm-keyword-case-fold-search ¤ò¥»¥Ã¥È¤·¤Æ¤¤¤¿¤È¤­¤ÎÂçʸ»ú¾®Ê¸»ú¤¬¤é¤ß
+    * C-c , l ¤Ç¤¤¤Á¤¤¤ÁÆüÉÕ¤òʹ¤«¤Ê¤¤¤è¤¦¤Ë
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/340>))
+      * [2007-04-02] ¤Ëºî¤ê¹þ¤ó¤À¥Ð¥°
+    * ¸¡º÷·ë²Ì¤Î°ìÍ÷¤Ç¡Ö¡ã¡ã¡ã ¤Û¤²¡×¤¬ÀèƬ¤Ë¤³¤Ê¤¤¾ì¹ç¤¬¤¢¤Ã¤¿
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/328>))
+      * (setq howm-list-title t) ¤·¤Æ¤¤¤ë¤Èȯ¾É
+      * remove-duplicates ¤Î»ÅÍͤò¤è¤¯ÃΤé¤Ê¤«¤Ã¤¿¤»¤¤. ÊÙ¶¯¤Ë¤Ê¤ê¤Þ¤·¤¿.
+    * (setq howm-list-title t) ¤À¤È°ìÍ÷¥Ð¥Ã¥Õ¥¡¤ËÁ°²ó¤ÎÆâÍƤ¬É½¼¨¤µ¤ì¤ë¥Ð¥°
+    * howm-view-contents-limit ¤¬¸ú¤¤¤Æ¤¤¤Ê¤«¤Ã¤¿
+    * ÆüÉդǤιʤê¹þ¤ß·ë²Ì¤¬°ìÆüʬ¿¤¹¤®¤¿
+    * narrowing ´ØÏ¢¤ÎÉÔ¶ñ¹ç(widen È´¤±)
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/160-161n>))
+    * ¥á¥Ë¥å¡¼¤Î¡Ö%reminder¡×¤ÎÄì¤Ë, ²á¤®¤¿Í½Ä꤬ɽ¼¨¤µ¤ì¤Æ¤¤¤¿.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/149>))
+    * ¥á¥Ë¥å¡¼Ãæ¤Î¡Ö> 2006-07-26-015606 | ¡Ä¡×¤Î¡Ö7¡×¾å¤Ç RET ¤ò᤯¤È¥¨¥é¡¼.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>)) > na ¤µ¤ó
+      * ÊÑ¿ô howm-menu-list-regexp ¤ÎÄêµÁ¤ò¤Á¤ç¤Ã¤Èľ¤·¤¿¤À¤±
+    * °Û¤Ê¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÎƱ̾¥Õ¥¡¥¤¥ë¤¬°ìÍ÷ɽ¼¨¤Çº®Æ±¤µ¤ì¤Æ¤¤¤¿.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+    * howm-view-split-horizontally ¤¬ t ¤Ç¤â nil ¤Ç¤â¤Ê¤¤¤È¤­¤ÎÆÃÊ̤ÊÆ°ºî¤òÇÑ»ß.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/591>))
+      * howm-1.2 ¡Á 1.3.7rc2 ¤Ç²õ¤ì¤Æ¤¤¤¿¤¬, ¥Ð¥°¥ì¥Ý¡¼¥È¤Ê¤·.
+        ¤­¤Ã¤Èï¤â»È¤Ã¤Æ¤¤¤Ê¤¤ ^^;
+
+* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.6 [2008-05-31]
+  * fix: 2008-02-24 °Ê¹ß¤Î CVS Àèü emacs ¤Ç, Â¾¥Ð¥Ã¥Õ¥¡¤ÎÃ忧¤¬Íð¤ì¤ë.
+    ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/484-487n>))
+    * minor mode ¤¬ font-lock-keywords-only ¤òľ¤Ë¿¨¤ë¤Î¤Ï¹Ôµ·°­¤¤?
+    * howm-test20080514 ¤«¤é¤Î¥Ð¥Ã¥¯¥Ý¡¼¥È
+  * (howm-1.3.6rc1 ¤ÈÃæ¿È¤ÏƱ¤¸¤Ç¤¹)
+
+* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.5 [2007-12-09]
+  * fix: ²Æ»þ´ÖºÇ½ªÆü¤ËÅöÆü¤ÎͽÄ꤬¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿.
+    ((<thx|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2007/000034.html>)) > 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]
+  * ¥»¥­¥å¥ê¥Æ¥£½¤Àµ
+    ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/207>))
+    * ²¿¤¬ÌäÂê?
+      * Emacs ¤Ë¤Ï, ¥Õ¥¡¥¤¥ë¤´¤È¤Ë¥í¡¼¥«¥ëÊÑ¿ô¤ò¼«Æ°ÀßÄꤹ¤ëµ¡Ç½¤¬¤¢¤ê¤Þ¤¹.
+        ¤³¤ì¤ò°­ÍѤ¹¤ë¤È, howm »ÈÍÑ»þ¤ËǤ°Õ¤ÎÌ¿Îá¤ò¼«Æ°¼Â¹Ô¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹.
+        ((<ref|URL:https://www.codeblog.org/blog/ueno/20060118.html>))
+    * ¤É¤¦Ä¾¤·¤¿?
+      * 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 ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤Ã¤Æ¤ÏÉÔ´°Á´¤«¤â¤·¤ì¤Þ¤»¤ó.
+        ((<ref|URL:http://www.kmc.gr.jp/~tak/memo/emacs-local-variable.html>))
+          ;; ¥í¡¼¥«¥ëÊÑ¿ô¤Î¼«Æ°ÀßÄê¤ò¥ª¥Õ
+          (setq enable-local-variables nil)
+  * fix: CVS Àèü emacs ¤Ç¥á¥Ë¥å¡¼¤Ê¤É¤Ë¿§¤¬¤Ä¤«¤Ê¤¤
+    ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/165-169n>))
+    * ½¤Àµ¤Ï, 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 °ìÍ÷¤Ç¤ÏÀøÉúÃæ¤Î¹àÌܤâ¥Ç¥Õ¥©¥ë¥È¤Çɽ¼¨
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/75-77n>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/842-845n>))
+      * ±£¤·¤¿¤±¤ì¤Ð M-x customize-variable howm-menu-todo-priority
+    * grep »þ¤Îʸ»ú¥³¡¼¥ÉÀßÄê howm-process-coding-system ¤Ç,
+      ÆþÎϤȽÐÎϤËÊ̤ÎÃͤò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/96>))
+        ;; process (UTF-8)¢ª emacs
+        ;; emacs ¢ª(SJIS) process
+        (setq howm-process-coding-system '(utf-8-unix . sjis-unix))
+    * ¥á¥Ë¥å¡¼¤Î¡Ö> ¡Ä¡×¤Ç RET ¤·¤¿¤È¤­, ¡Ö¡Ä¡×¤ò¸¡º÷¤¹¤ë¤Î¤Ç¤Ê¤¯,
+      Âбþ¥Õ¥¡¥¤¥ë¤òľÀܳ«¤¯
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/823>))
+    * ¥Õ¥¡¥¤¥ë¹½À®¤ä¥¤¥ó¥¹¥È¡¼¥ë¼ê½ç¤Ë¤Ä¤¤¤Æ
+      * ¸À¸ì°Í¸¤ÎÊÑ¿ô¤ò howm-lang-{en,ja}.el ¤ØʬΥ
+      * configure ¤Î¿·¥ª¥×¥·¥ç¥ó --with-howmdir.
+        thx > Ëܾ±¤µ¤ó
+        * *.el ¤È *.elc ¤Ï¤³¤³¤Ø¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë
+        * lispdir ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï, ¡Ä/site-lisp/howm ¤«¤é ¡Ä/site-lisp ¤ËÊѹ¹
+      * ½é´ü¥á¥Ë¥å¡¼¥Æ¥ó¥×¥ì¡¼¥È¤Î¥¤¥ó¥¹¥È¡¼¥ëË¡¤òÊѹ¹
+        thx > Ëܾ±¤µ¤ó, Á¬Ã«¤µ¤ó
+        ((<ref|URL:http://lists.sourceforge.jp/mailman/archives/macemacsjp-users/2005-November/000756.html>))
+        ((<ref|URL:http://lists.sourceforge.jp/mailman/archives/macemacsjp-users/2005-November/000760.html>))
+        * ½¾Íè¤Ï, /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".
+      ((<thx|URL:http://tty0.exblog.jp/2944244>))
+      ((<thx|URL:http://d.hatena.ne.jp/yoshk/20060102>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/867>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/873-874n>))
+      ((<thx|URL:http://d.hatena.ne.jp/clock9/20060406/1144291193>))
+      ((<thx|URL:http://d.hatena.ne.jp/AllStarMoves/20060425/p3>))
+      ((<thx|URL:http://d.hatena.ne.jp/katase_n/20060519>))
+      ((<thx|URL:http://d.hatena.ne.jp/AllStarMoves/20060602/p4>))
+    * grep »þ¤Î howm-process-coding-system ¤Î½èÍý¥¿¥¤¥ß¥ó¥°¤Ë¥Ð¥°
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/63-83n>))
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/94-95n>))
+    * migemo-client ¤Î¥ª¥×¥·¥ç¥ó¤òÄɲûØÄê²Äǽ¤Ë
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/9>))
+        (setq howm-migemo-client-option '("-H" "::1"))
+      * howm-view-grep-option ¤¢¤¿¤ê¤È¤ÎÉÔÅý°ì¤¬µ¤¤Ë¤Ê¤ë¤Î¤Ç,
+        ¥³¥Þ¥ó¥É»ØÄê°ìÈ̤γÈÄ¥»ÅÍÍ°Æ(¤È¤ê¤¢¤¨¤º°Æ¤À¤±). ¤ª¤ª¤²¤µ¤¹¤®?
+          nil  ;; ¢ª ¥Ç¥Õ¥©¥ë¥È
+          "¥³¥Þ¥ó¥É̾"
+          ("¥³¥Þ¥ó¥É̾" "¥ª¥×¥·¥ç¥ó" ¡Ä "¥ª¥×¥·¥ç¥ó")
+          ´Ø¿ô̾  ;; ¢ª ¥³¥Þ¥ó¥É¤Î¤«¤ï¤ê¤Ë elisp ¤Î´Ø¿ô¤ò¼Â¹Ô
+    * howm-kill-all ¤Ï .howm-keys ¥Ð¥Ã¥Õ¥¡¤â¾Ã¤¹¤Ù¤­
+      ((<thx|URL:http://d.hatena.ne.jp/dasm/20060110>))
+    * howm-mode-off-hook ¤ÎÄêµÁ¤¬¤À¤Ö¤Ã¤Æ¤¤¤¿.
+      thx > Ãݼ¤µ¤ó
+    * ((<howmz.el|URL:http://noir.s7.xrea.com/archives/000136.html>))
+      ¤Ç¥¨¥é¡¼¤¬½Ð¤Æ¤¤¤¿¤½¤¦.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus>))
+      > (TxT) ¤µ¤ó
+    * emacs20 ¤Ç M-x howm-bug-shot ¤¬¥¨¥é¡¼¤Ë¤Ê¤Ã¤Æ¤¤¤¿.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportFAQ>))
+      > Æ¨Èò¤µ¤ó
+
+* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.2 [2005-11-04]
+  * Note
+    * ¼ç¤Ë, ¾®¤µ¤Ê¥Ð¥°½¤Àµ¤À¤±
+    * ¤¢¤È¤Ï±£¤·µ¡Ç½¤ò¾¯¡¹
+    * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ 1.3.2rc4 ¤ÈƱ¤¸¤â¤Î¤Ç¤¹
+  * Êѹ¹
+    * ¥á¥Ë¥å¡¼¤Î [º£Æü] (C-c , , .) ¤Ç¤â¥Ç¥Õ¥©¥ë¥È¤Ç¥¿¥¤¥È¥ë¤òɽ¼¨.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+      > 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 ¤¬¥¨¥é¡¼
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/797-801n>))
+    * xemacs ¤À¤È, °ìÍ÷¥Ð¥Ã¥Õ¥¡¤«¤é¤Î X (dired-x) ¤¬¥¨¥é¡¼
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+      > 797 ¤µ¤ó
+      * ¤Ä¤¤¤Ç¤Ë, Æ±¤¸¥Õ¥¡¥¤¥ë¤¬²¿ÅÙ¤âɽ¼¨¤µ¤ì¤ë¤Î¤ò½¤Àµ
+    * howm-view.el ¤Ë (require 'riffle) ¤òÄɲÃ
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/782>))
+    * Makefile °Ê³°¤Î¼ê½ç¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È M-x howm-menu ¤¬¥¨¥é¡¼
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/789-791n>))
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BrokenMenu>))
+
+* ¥ê¥ê¡¼¥¹ÈÇ howm-1.3.1 [2005-08-17]
+  * xemacs ¤Ç¤ä¤±¤ËÃÙ¤¯¤Ê¤Ã¤Æ¤¤¤¿¤Î¤ò½¤Àµ
+    (xemacs ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤â¤è¤ë¤Î¤«¤â)
+  * ´Ä¶­ÊÑ¿ô LC_ALL, LC_CTYPE, LANG ¤òÀßÄꤷ¤Ê¤¤¤È¥¨¥é¡¼¤¬½Ð¤Æ¤¤¤¿¤Î¤ò½¤Àµ
+    ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/780-781n>))
+  * ¤³¤Î README ¤Î ½¤Àµ
+    ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/779>))
+    * my-howm-next-hit ¤Î¥³¡¼¥É¤ò¹¹¿·
+    * howm-view-search-in-result-correctly ¤òÀßÄꤷ¤Æ¤â,
+      date ¤Ç¤Î¹Ê¤ê¹þ¤ß¤Ï¥Õ¥¡¥¤¥ëñ°Ì
+      * ÅöÌ̤ϻÅÍÍ. °ìÆü°ì¥Õ¥¡¥¤¥ë¤Þ¤Ç¤Ê¤éÌäÂê¤Ê¤¤¤Ï¤º.
+      * °ì·î°ì¥Õ¥¡¥¤¥ë¡¦Á´¥á¥â°ì¥Õ¥¡¥¤¥ë¤Ê¤É¤À¤ÈÌäÂê.
+      * ¡Ö»ØÄê·î¤Î¥á¥â°ìÍ÷¡×¤È¤«¤Ç¤Ã¤Á¤¢¤²¤è¤¦¤«¤È¤â»×¤¤¤Þ¤·¤¿¤¬,
+        ¼«Ê¬¤Î¾ì¹ç¤ÏŤ¯¤Ê¤ê¤¹¤®¤ÆÌò¤ËΩ¤¿¤Ê¤½¤¦¤Ê¤Î¤Ç, ¤ä¤á¤Þ¤·¤¿.
+        ¤´°Õ¸«¤¬¤¢¤ì¤Ð¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤.
+  * °ìÍ÷¤Ç, Á°¤ÈƱ¤¸Ì¾Á°¤â¤¤¤Á¤¤¤Áɽ¼¨
+    ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/779>))
+      (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 ¤È((*ľÁ°¤Î¥Ð¥Ã¥Õ¥¡*))¡×¤ò°ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+      * »ÈÍÑÎã
+          ;; 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 ¤Ï¾­ÍèÇѻߤ¹¤ë¤«¤â.
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/670>))
+      * grep ¤Ø¤Ïɸ½àÆþÎϤǥѥ¿¡¼¥ó¤òÅϤ¹
+      * {Á´|ºÇ¶á|Á°¸å}¥á¥â°ìÍ÷¤Ë¥Ç¥Õ¥©¥ë¥È¤Ç¥¿¥¤¥È¥ëɽ¼¨
+  * ±£¤·µ¡Ç½¤Î¸ø¼°²½ (¢¥ ¤Ï¡Ö¤ª¤¹¤¹¤á¡×)
+    * 1.1.1.* °ÊÁ°¤«¤é
+      * howm-view-before-open-hook
+      * ¥á¥Ë¥å¡¼¤Î todo ¤Ë½ÜÅÙ¤òɽ¼¨²Ä
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/505>))
+          (setq howm-menu-todo-priority-format "(%8.1f)")
+      * ¥Ç¥Ð¥Ã¥°ÍÑÊÑ¿ô howm-call-process-last-command
+      * (setq howm-message-time t) ¤¹¤ì¤Ð, ¸¡º÷Åù¤ËÍפ·¤¿»þ´Ö¤òɽ¼¨
+    * 1.2 ¤«¤é
+      * come-from ¥­¡¼¥ï¡¼¥É¤Î alias ¢¥ ¢ª ((<¥á¥â¤ò½ñ¤³¤¦>))
+        ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?CompoundComeFrom>))
+      * ¥á¥Ë¥å¡¼
+        * ¥á¥Ë¥å¡¼¤Ë¡Ö%recent¡×¤ä¡Ö%random¡× ¢¥
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/242>))
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/273>))
+        * ¥á¥Ë¥å¡¼Ãæ¤ËÊÑ¿ô¤ä´Ø¿ô¤ÎÃͤòɽ¼¨
+      * °ìÍ÷
+        * ¥½¡¼¥ÈË¡¤Ë¡Örandom¡×¤òÄɲÃ
+          ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?OldMemo>))
+        * °ìÍ÷ɽ¼¨Áë¤Î¹Ô¿ôÀßÄê
+          ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/724>))
+            (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
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/293>))
+        * ¿·µ¬¥á¥â¤Î¥Õ¥¡¥¤¥ë̾¤ò¼êÆ°¤Ç¤Ä¤±¤ë: M-x howm-create-interactively
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/367>))
+          * ¤³¤ó¤Ê´¶¤¸¤Ç¤·¤ç¤¦¤«? > 367 ¤µ¤ó
+      * M-x howm-narrow-to-memo, M-x howm-toggle-narrow
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/293>))
+        * ¤Ä¤¤¤Ç¤Ë, M-x howm-toggle-narrow ¤Ç, ±£¤¹¡¦¸«¤»¤ë¤ò¥È¥°¥ë
+        * ¥á¥â¤ò³«¤¤¤¿¤È¤­¼«Æ°Åª¤Ë narrow ¤Ë
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/301>))
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/542>))
+            (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 ¤ÇÈô¤Ù¤ë. ¢¥
+        * ((<RandomNote|URL:http://ninjinix.x0.com/rn/index.rb?AboutPage.txt>))
+          ¤ä
+          ((<namapo|URL:http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=namapo>))
+          ¤Ë¿¨È¯¤µ¤ì¤Æ¡Ä
+        * µ­Ï¿¤Ï, ¡Ö¸ÇÄêʸ»úÎ󸡺÷¡×¡Ö¹Ê¤ê¹þ¤ß¸¡º÷¡×¡Ö¥ê¥ó¥¯¡×¤Î¤ß¤Ë¤·¤Æ¤ß¤¿
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/496>))
+        * Îã¤Ë¤è¤Ã¤Æ¡Ö¥á¥Ë¥å¡¼¤Ëɽ¼¨¡×¤â¤·¤¿¤¤¤±¤É,
+          ¡Ö¥á¥Ë¥å¡¼¤ò¥­¥ã¥Ã¥·¥å¡×¤È¤Î·ó¤Í¹ç¤¤¤¬.
+        * 1.2.2 ¤«¤é¤ÏºÇÂçµ­Ï¿¿ô¤òÀßÄê²Ä
+        * 1.3.0 ¤«¤é¤Ï½ÅÊ£¤ò½üµî
+      * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­, Á°¡¦¸å¡¦ºÇ½é¡¦ºÇ¸å¤Î¥á¥â¤Ø°ÜÆ°
+        (narrowing ¤â¹Íθ)
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/377>))
+        * 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 ¤Ë¤·¤Ê¤¤.
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/377>))
+          ;; ¢­¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤ËÉÔËþ¤¬¤Ê¤±¤ì¤ÐÀßÄêÉÔÍ×
+          (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] ¤È¤«µ­Æþ
+        ((<ref|URL:http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Programs/elisp/get-date.el>))
+        ((<ref|URL:http://www.gentei.org/~yuuji/software/euc/instamp.el>))
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/399>))
+    * 1.2.2 ¤«¤é
+      * ¼«Æ°¿ìÊâ ¢¥
+      * ¥á¥Ë¥å¡¼¤Ë¡Ö%here%(howm-menu-search "¤Û¤²")¡×¤È½ñ¤±¤Ð,
+        ¡Ö¤Û¤²¡×¤Î¸¡º÷·ë²Ì¤òËä¤á¹þ¤ß ¢¥
+        (thx > Konstantin Levinski (kostya@pmail.ntu.edu.sg))
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/605>))
+      * ¿·µ¬¥á¥â¤Þ¤ï¤ê
+        * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­, ¿·¤·¤¤¥á¥â¤ÏÀèƬ¤ËÄɲäȤ¹¤ëÀßÄê ¢¥
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/535>))
+            (setq howm-prepend t)
+        * ¡Ö¤Û¤²¡×¤ò¸¡º÷¤·¤Æ°ìÍ÷¤·¤¿¾õÂÖ¤«¤é¿·µ¬¥á¥â¤òºî¤ë¤È, ¥¿¥¤¥È¥ë¤ò¡Ö¤Û¤²¡×¤Ë
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/573>))
+            (setq howm-title-from-search t)
+        * ¥Æ¥­¥¹¥È¤òÁªÂò¤·¤Æ¤«¤é¡Ö¿·µ¬¥á¥â¡× ¢ª ¤½¤Î¥Æ¥­¥¹¥È¤ò¼«Æ°ÁÞÆþ
+          ((<thx|URL:http://hpcgi1.nifty.com/spen/index.cgi?ZaurusSL-C3000%2F%BD%E9%B4%FC%C0%DF%C4%EA%2Femacs%A4%BD%A4%CE%A3%B4#i0>))
+            ;; transient-mark-mode ¤Ç¤Ê¤¤¤È, ¤³¤ÎÀßÄê¤Ï̵»ë¤µ¤ì¤ë
+            (setq howm-content-from-region t)
+        * howm-create-here ¤Ç, Í­Ìµ¤ò¸À¤ï¤µ¤º¡Ö¸½¥«¡¼¥½¥ë¹Ô¤Ë¡×¿·µ¬¥á¥âºîÀ®
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/542>))
+            (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])
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?RoadMap>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/668>))
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ç, Æ±¤¸¥Õ¥¡¥¤¥ë̾¤ò¤¯¤êÊÖ¤·É½¼¨¤·¤Ê¤¤
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/754>))
+      * ¤Ä¤¤¤Ç¤Ë¿§¤â¤Ä¤±¤Æ¤ß¤¿. ¤É¤Ê¤¿¤«¤â¤Ã¤È¤Þ¤·¤ÊÇÛ¿§¤ò¤¯¤À¤µ¤¤.
+        (M-x customize-group RET howm-faces RET ¤·¤Æ,
+        howm-view-name-face ¤È howm-view-empty-face)
+      * (»²¹Í) ´ØÏ¢¤¹¤ë´û¸µ¡Ç½
+        * TAB¡¦ALT-TAB ¢ª ¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø
+        * u ¢ª °ì¤Ä¤Î¥á¥â¤Ï°ì¹Ô¤À¤±¤Ë
+        * @ ¢ª Ï¢·ëɽ¼¨¤¹¤ì¤ÐƱ¤¸¥á¥â¤Ï°ì¤Ä¤Ë¤Þ¤È¤Þ¤ë
+    * °ìÍ÷¤Ç T ¢ª ¥¿¥¤¥È¥ëɽ¼¨¤ò¡Ö¥È¥°¥ë¡×
+      * 1.2.1 ¤Î±£¤·µ¡Ç½¤«¤é²þÎÉ
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/427>))
+    * ¥á¥Ë¥å¡¼Æâ¤Î°ìÍ÷¤Ç¤Ï, ¹ÔƬ¤Ç¤Ê¤¯¤Æ¤â RET ¤Ç¥¸¥ã¥ó¥×
+    * ¥ê¥Þ¥¤¥ó¥Àľá¤­¤Ç¡ÖÎ×»þ¤Ë³«¤¤¤¿¥Ð¥Ã¥Õ¥¡¡×¤ò¼«Æ°¤ÇÊĤ¸¤ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/705>))
+        ;; Ã¡¤­Àè¤ò¼«Æ°¤ÇÊĤ¸¤ë. 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¡×¤òÍÞÀ©
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1111816102/485>))
+    * riffle.el ¤Î»ÅÍͤòÊѹ¹(gfunc.el ¤ò»È¤¦). ¥æ¡¼¥¶¡¼¤Ë¤Ï±Æ¶Á¤Ê¤¤¤Ä¤â¤ê.
+      ((<howmoney|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?howmoney>))
+      ¤â¤À¤¤¤¸¤ç¤¦¤Ö¤È»×¤¦¤ó¤À¤±¤É¡Ä
+  * ¥Ð¥°½¤Àµ
+    * Çò¹õµ¡¤Ç¥¨¥é¡¼
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/706>))
+      * ¥«¥é¡¼¥Ç¥£¥¹¥×¥ì¥¤¤Ç¤Ê¤¤¤È¤­¤Ï, ²¼Àþ¤Î¤«¤ï¤ê¤Ëȿžɽ¼¨¤·¤Æ,
+        ¤½¤ì°Ê³°¤Î¾þ¤ê¤Ï¤Ê¤·
+    * %reminder ¤Î¶èÀÚ¤êÀþ¤¬¤º¤ì¤ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/703>))
+    * °ìÍ÷¤«¤é T ¤Ç¥¿¥¤¥È¥ëɽ¼¨¤·¤¿¤È¤­, Ìµ¥¿¥¤¥È¥ëʬ¤¬Â¿½Åɽ¼¨¤µ¤ì¤Æ¤¤¤¿
+      * make test ¤·¤Æ C-c , s top [RET] T ¤Çȯ¾É
+    * win ¤Ç¡Ö¡Ä\.foo\¡Ä¡×¤Ê¤É¤ò¸¡º÷ÂоݤȤ·¤Ê¤¤¤è¤¦¤Ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/746>))
+    * howm-message-time ¤ò¥»¥Ã¥È¤·¤Æ¤â¡ÖNo match¡×¥á¥Ã¥»¡¼¥¸¤ò±£¤µ¤Ê¤¤¤è¤¦¤Ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/751>))
+    * ¥á¥Ë¥å¡¼¤Î¥ê¥Þ¥¤¥ó¥ÀÆâ¤Ç come-from ¥­¡¼¥ï¡¼¥É¤Ë
+      ²¼Àþ¤¬¤Ä¤«¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿.
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/732>))
+
+== 1.2.x
+
+* [2005-06-10] v1.2.4
+  * bug fix
+    * howm-search-path Æâ¤ÎͽÄꡦtodo ¤¬¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/685>))
+    * ¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤ëͽÄê¤ÎÈϰϤ¬°ìÆüû¤«¤«¤Ã¤¿
+    * xemacs ¤Ç, ¥Õ¥¡¥¤¥ë¤¬¾¯¤Ê¤¤¤È¥á¥Ë¥å¡¼¤Î %recent ¤¬¥¨¥é¡¼¤Ë
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+    * ¥á¥Ë¥å¡¼¾å¤Ç C-c , r ¤·¤¿¤È¤­¤Ï¡Ö¥á¥Ë¥å¡¼¹¹¿·¡×
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/696>))
+    * howm-menu-list-face ¤Î¥Ç¥Õ¥©¥ë¥È¤ò¶õ¤Ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/697>))
+    * (require 'howm-mode) ¤·¤¿¤é cl Ì¤¥í¡¼¥É¤Ç¥¨¥é¡¼
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/698>))
+      * howm-1.2 ¤«¤é¤Ï (require 'howm) ¤¬Àµ¼°.
+        ¡Öhowm-mode¡×¤ò require ¤ä autoload ¤·¤Æ¤¤¤¿¤é,
+        ¡Öhowm¡×¤Ëľ¤·¤Æ¤¯¤À¤µ¤¤.
+    * ((<howmz|URL:http://noir.s7.xrea.com/archives/000136.html>))
+      ¤Ç¥¨¥é¡¼ (´Ø¿ô howm-view-sort-items ¤¬¤Ê¤¤)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus>))
+      > (TxT) ¤µ¤ó
+    * ¥ê¥Þ¥¤¥ó¥Àľá¤­¤Ç¥á¥Ë¥å¡¼¤¬Êø¤ì¤ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/705>))
+      * ¤³¤ó¤ÊÀßÄê¤Çȯ¾É
+          (setq howm-menu-expiry-hours 2)
+          (setq howm-action-lock-forward-save-buffer t)
+    * POBox ¤Î RET (ÊÑ´¹³ÎÄê)¤òÃ¥¤Ã¤Æ¤·¤Þ¤¦
+      * ¼Â¤Ï POBox ¤Ë¸Â¤é¤ºÉÔËÜ°Õ¤ÊÆ°ºî¤ò¤·¤Æ¤¤¤¿
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/711>))
+    * howm-message-time ¤¬¿¿¤Î¤È¤­¤Î½êÍ×»þ´Öɽ¼¨¤Ï 1 ÉÃ̤Ëþ¤â·×¬
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/709>))
+      * [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 ¤Î¤è¤¦¤Ë¶õʸ»úÎó¤ò¸¡º÷¤·¤¿¤È¤­¤Ï, Á´¥á¥â°ìÍ÷
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/668>))
+    * make ¤Ç¤Ê¤¯¼êÆ° byte-compile ¤·¤¿¤é(?), %reminder ¤Ç¥¨¥é¡¼
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/669>))
+  * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ 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
+    * µ¤¤Ë¤Ê¤ë»ØŦ¤â¤¢¤ë¤±¤É, ¤É¤¦¤â¤Ï¤Ã¤­¤ê¤»¤º, ¸«ÀÚ¤ê.
+      ºÆ¸½¤Ç¤­¤¿Êý¤Ï¤ªÃΤ餻¤¯¤À¤µ¤¤.
+      ((<ref|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/582>))
+    * ÅÓÃ椫¤é ChangeLog ¤ò¤Ä¤±¤Ï¤¸¤á¤¿¤Î¤Ç, ºÙ¤«¤¤Ä¾¤·¤Ï¤½¤Á¤é¤â»²¾È
+    * ¥ê¥ê¡¼¥¹Í½ÄêÈÇ howm-1.2.2rc6 [2005-04-29]¤ÈƱ¤¸¤â¤Î¤Ç¤¹
+  * »ÅÍÍÊѹ¹ (¤¿¤¤¤¬¤¤±Æ¶Á¤Ê¤µ¤½¤¦)
+    * ÀßÄê howm-menu-top ¤È howm-menu-file ¤ÎÍ¥Àè½ç¤òµÕ¤Ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/648>))
+      * µì: 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 ¤Ï¤¢¤ë, ¤È¤¤¤¦´Ä¶­(¥ê¥Ê¥¶¥¦?)¤ËÂбþ
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/621-625n>))
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus>))
+    * contents ¤Ç¤Î¹Ê¤ê¹þ¤ß¤â C-u ¤ËÂбþ (¥Þ¥Ã¥Á¤·¤¿¥á¥â¤òÇÓ½ü)
+      ¢ª ((<±þÍÑÎã|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HidePrivateReminder>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/593>))
+    * todo ¥ê¥¹¥È¤ä¥á¥Ë¥å¡¼¤Î %reminder ¤Ç¤â, ½ÜÅÙ¤¬Æ±¤¸¤Ê¤éʸ»úÎó½ç¥½¡¼¥È
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/571>))
+    * ¤³¤Þ¤´¤Þ
+      * °ìÍ÷¤«¤é¡Ö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 ¤Ë
+      ³ºÅö¤¹¤ë¥Õ¥¡¥¤¥ë¤Ï¥¹¥­¥ã¥ó¤·¤Ê¤¤¤è¤¦¤Ë
+      ((<thx|URL:http://www.bookshelf.jp/pukiwiki/pukiwiki.php?%BC%C1%CC%E4%BD%B8%2F42>))
+      * ¡Ä¤È¤¤¤¦¤«, ¤â¤Ã¤Èº¬¸µ¤«¤éÂоݳ°¥Õ¥¡¥¤¥ë¤Î¥Á¥§¥Ã¥¯¤ò¸«Ä¾¤·
+      * ¤Ä¤¤¤Ç¤Ë, howm-excluded-file-regexp ¤Î¥Ç¥Õ¥©¥ë¥È¤Ë
+        (image-file-name-regexp) ÁêÅö¤òÄɲÃ
+    * 0123-45-6789 ¤ß¤¿¤ÊÅÅÏÃÈÖ¹æ¤Ë²¼Àþ¤ò°ú¤«¤Ê¤¤ (ÆüÉդȤߤʤ¹¾ò·ï¤ò¸·¤·¤¯)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+    * ¡Ö%¡×¤ò´Þ¤à message ¤Î¥¨¥é¡¼
+    * emacs20 ¤Ç¥á¥Ë¥å¡¼¤ò±£¤·¥Ð¥Ã¥Õ¥¡¤Ë¤¹¤ë¤È¿§¤¬¤Ä¤«¤Ê¤¤
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/541>))
+    * °ìÍ÷¡¦ÆâÍƥХåե¡¤«¤é¥á¥â¤ò³«¤¯ºÝ¤Î, narrowing ²ò½ü¤ÎȽÄê¥ß¥¹
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/532>))
+    * come-from µ­Ë¡¤òÊѹ¹¤·¤¿¾ì¹ç¤Î¼êÅö¤Æ
+      (thx > taku ¤µ¤ó)
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+  * ¥Æ¥¹¥ÈÈÇ¡¦¥ê¥ê¡¼¥¹Í½ÄêÈǤΠ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} ¤ò»È¤¤¤ï¤±
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/416>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/533>))
+      * Íý²ò¤·¤Æ¤Ê¤¯¤Æ, ¥¤¥ó¥Á¥­¼êÅö¤Ç¤¹
+      * °ì¥Õ¥¡¥¤¥ë¤¬Ä¹¤¯¤ÆÃ忧¤Ë»þ´Ö¤Î¤«¤«¤ëÊý¤Ï,
+        emacs20 ¤Ç¤Ê¤¯ emacs21 ¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹
+    * howm-list-all-title ¤¬ non-nil ¤Î¤È¤­ C-c , a ¤Îʤӽ礬µÕ
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/599-600n>))
+    * ¥á¥â¤ò³«¤¯¤Î¤¬°Û¾ï¤ËÃÙ¤¯
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/635-636n>))
+      ¡Ä Ä¾¤Ã¤¿¤Î¤«Ì¤³Îǧ
+    * Meadow 2.10 ¤Ç make ¤¬¥¨¥é¡¼¤Ë
+      (thx > taku ¤µ¤ó, ¡Ö¤â¡×¤µ¤ó)
+      ((<ref|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/638>))
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?MaxSpecpdlSize>))
+    * Meadow-1.15 ¤À¤È, image-file-name-regexps ¤¬Ì¤ÄêµÁ¤Ç¥¨¥é¡¼
+      (thx > Æ¨Èò¤µ¤ó)
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+    * howm-directory ¤¬ ~/.howm ¤Î¤è¤¦¤Ê¥É¥Ã¥È¥Ç¥£¥ì¥¯¥È¥ê¤À¤È²¿¤â¸¡º÷¤µ¤ì¤º
+      (thx > taku ¤µ¤ó)
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+
+* [2004-12-11] v1.2.1
+  * Note
+    * É½¸þ¤­¤Ï, ¤Û¤È¤ó¤É bug fix ¤Î¤ß
+    * ±£¤·µ¡Ç½¤Ï, ¤Þ¤À±£¤·
+  * ²þÎÉ¡¦Êѹ¹
+    * Í½Äêɽ¤Ç, Æ±¤¸Æü¤ÎͽÄê¤Ïµ­½ÒÆâÍƤǥ½¡¼¥È
+      * ¡Ö[2004-11-04]@ 07:30 ¤Û¤²¤Û¤²¡×¤ß¤¿¤¤¤Ë½ñ¤¤¤È¤±¤Ð, »þ¹ï½ç¤Ëʤ֤Ϥº
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/398>))
+      * ¡ÖƱ¤¸Æü¤Î¤Ï½ÅÍ×ÅÙ½ç¤Ç¥½¡¼¥È¡×¤Ã¤ÆÍ×˾¤â, ¤³¤ì»È¤Ã¤Æ¤Ê¤ó¤È¤«¤Ê¤ë?
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/433>))
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/442>))
+        ((<ref|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/445>))
+      * tag2plan ¤Ïľ¤·¤Æ¤¤¤Þ¤»¤ó.
+    * howm-template ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï howm-view-title-header ¤Ë±þ¤¸¤ë
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/498>))
+    * 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 Æü¸å¤Þ¤Ç¡×
+      ¤Î¤Ï¤º¤¬¡Ö¡ÄÆüÁ°¤«¤é¡ÄÆü´Ö¡×¤Ë¤Ê¤Ã¤Æ¤¤¤¿
+    * ¥¿¥¤¥È¥ëɽ¼¨»þ¤Ë, ¥¿¥¤¥È¥ëÍó¡Ö= ¡×¤¬¤Ê¤¤¥á¥â¤òµß½Ð
+      * ¥¿¥¤¥È¥ëɽ¼¨¥ª¥ó¤ò¥Ç¥Õ¥©¥ë¥È¤Ë¤¹¤ë¤¿¤á¤ÎÉÛÀÐ
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/490-493n>))
+        ((<ref|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/503>))
+    * ((<±ü»³¤µ¤óÈÇ auto-save-buffers|URL:http://homepage3.nifty.com/oatu/emacs/misc.html#asb>))
+      ¤È¤ÎÊ»ÍѤÇ,
+      ¡Ö.howm-keys has changed since visited or saved. Save anyway?¡×
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/507-509n>))
+    * [2004-09-01 23:26]@ ¤È¤«¤ÎÅöÆüʬ¤¬¥á¥Ë¥å¡¼¤Ëɽ¼¨¤µ¤ì¤Ê¤«¤Ã¤¿
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/411>))
+      * É½¼¨¤µ¤ì¤ë¤Ã¤Æ¤À¤±. ¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó.
+        ¤³¤Î½ñ¼°¤òËܵ¤¤Ç¥µ¥Ý¡¼¥È¤¹¤ë¤«Ì¤Äê¤Ê¤Î¤Ç.
+    * meadow ¤Ç, [2004-08-08]! ¤Î¡Ö!¡×¤Ç RET Ã¡¤¯¤È¥¨¥é¡¼ 
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/384>))
+      * ºÆ¸½¤Ç¤­¤Ê¤«¤Ã¤¿¤±¤É, ²¿¤Ë¤»¤è¤³¤ì¤Çľ¤ë¤ó¤¸¤ã¤Ê¤¤¤«¤È
+    * ¥á¥â¤ò³«¤¤¤¿¤È¤­¤Ë narrow ¤À¤È, ±£¤ì¤Æ¤ëÉôʬ¤Î½é´ü²½¤Ì¤±
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/377>))
+  * ÆâÉôÀ°Íý
+    * howm-list-migemo ¤¬Ä¾ÀÜ howm-view-search ¤òᤫ¤Ê¤¤¤è¤¦
+    * howm-set-mode-p ¤ò howm-set-mode ¤«¤éʬΥ
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/388>))
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?SetMode>))
+    * ¥ê¥Þ¥¤¥ó¥À¤Î action-lock ¤òÀ°Íý¤·¤Æ¤¤¤¸¤ê¤ä¤¹¤¯. Æ°ºî¤ÏÊѲ½¤Ê¤¤¤Ï¤º.
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?TangledToDo>))
+      * ÉûºîÍѤÇ, howm-reminder-regexp-XXX-pos ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤ¬¤Ò¤È¤Ä¤º¤ì¤¿
+  * ¤½¤Î¾
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤ÈÆâÍƥХåե¡¤ò¡Öo¡×¤Ç¹Ô¤­Íè
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/424>))
+      ¡Ä¤Ï, ½ñ¤¤¤Æ¤ß¤¿¤±¤É¾Ã¤·¤Þ¤·¤¿. @ 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 ¤Û¤²¡×
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/497>))
+        ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Defer>))
+      * ¥á¥Ë¥å¡¼¡¦Í½Äêɽ¡¦todo °ìÍ÷¤«¤é, -+!@~. ¾å¤Ç RET ¤òľÀÜᤱ¤ë
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/506>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/568>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/580>))
+        ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?RepeatedToDo>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/698>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/732>))
+    * ¾®²þ¤
+      * °ìÍ÷
+        * É½¼¨Àڤ꤫¤¨ (0,1,2,v ¥­¡¼)
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/826-827n>))
+        * T ¤Ç¥¿¥¤¥È¥ëɽ¼¨, TAB¡¦M-TAB ¤Ç¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/61>))
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/892>))
+        * ¥ê¥Þ¥¤¥ó¥À¤ÎÆüÉդˤè¤ë¥½¡¼¥È¡¦¹Ê¤ê¹þ¤ß
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/694>))
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/726>))
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/742>))
+          * ¤â¤¦¤Á¤ç¤Ã¤È¶ãÌ£¤·¤Æ°ìÈ̲½¤·¤¿¤¤µ¤¤â (ÀÖ»ú²Õ½ê¤Ç¥½¡¼¥È, ¤È¤«)
+        * ¹Ê¤ê¹þ¤ß´ð½à¤Ë Region, Around ¤òÄɲÃ
+        * ((<¥«¥¹¥¿¥Þ¥¤¥º>))»²¾È
+          * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ø¤Î¿§¤Ä¤±
+            ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/675>))
+          * ¡û¡û¤Î¤È¤­¤À¤±¥¿¥¤¥È¥ëɽ¼¨
+            * howm-list-recent-title, howm-list-all-title ¤Ï¤½¤Î¤¦¤ÁÇѻߤÎͽÄê
+            * howm-list-title ¤Ë¤Ï´Ø¿ô¤â»ØÄê²Äǽ
+              ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/61>))
+          * C-x 1 ¸å¤Ï¾¡¼ê¤Ë¥Õ¥ì¡¼¥à¤òʬ³ä¤·¤Ê¤¤
+            ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/747>))
+            ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/766>))
+      * ¸¡º÷
+        * foo ¤ò¸¡º÷¤·¤¿¤é [[foo]] ¤ò¾å°Ì¤Ë
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/835>))
+          * ¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤Þ¤·¤¿. ¤¤¤ä¤Ê¤é (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)
+        * ¸¡º÷¤Ë»È¤¦´Ø¿ô¤ò((<¥«¥¹¥¿¥Þ¥¤¥º>))
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/166-167n>))
+      * ¥á¥Ë¥å¡¼
+        * [º£Æü] [ºòÆü] ¤ò³ÈÄ¥
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/37>))
+          * °ì¥á¥â°ì¥Õ¥¡¥¤¥ë¤Î¤È¤­¤Ï, ¤½¤ÎÆüÉÕʸ»úÎó¤ò¸¡º÷.
+            °ìÆü°ì¥Õ¥¡¥¤¥ë¤Î¤È¤­¤Ï, ¤½¤ÎÆüÉդΥե¡¥¤¥ë¤ò³«¤¯.
+          * ¥Ç¥Õ¥©¥ë¥È¤Î¥á¥Ë¥å¡¼¤ËÄɲä·¤Þ¤·¤¿
+          * ¤â¤Ã¤ÈÊØÍø¤½¤¦¤Ê
+            ((<Ê̲ò|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/39>))
+            ¤¬¤¹¤Ç¤Ë :-)
+        * ¥­¡¼ÀßÄê¤Ë C-i ¤È M-C-i ¤òÄɲÃ
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/909>))
+      * action-lock ¤Î((<¥«¥¹¥¿¥Þ¥¤¥º>))
+        * ¡Öfile://¡Ä¡×¤ä¡Öhttp://¡Ä¡×
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/945>))
+        * { } ¤ä {_} ¤òÊѹ¹¤·¤ä¤¹¤¯
+          ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/828>))
+          * {_} ¤Ï¥Æ¥ó¥×¥ì¡¼¥È½ñ¼°¤ÈϢư¤·¤¿Êý¤¬¤¤¤¤¤«¤È»×¤Ã¤Æ, ¾®ºÙ¹©¤·¤Æ¤Þ¤·¤¿
+            * 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 ¤Ë½ñ¤¤¤Æ¤¿¤Î¤Ï¥¦¥½. ºî¤Ã¤Æ¤Þ¤»¤ó¤Ç¤·¤¿ ^^;
+      * ¥ê¥Þ¥¤¥ó¥À
+        * !+-~. ¤Î½ÜÅÙ¤Î((<¥«¥¹¥¿¥Þ¥¤¥º>))
+          ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/84>))
+  * ¤³¤Þ¤´¤Þ²þÎÉ
+    * file:// ¤Ç¤â²èÁüÅù¤Ï³°Éô viewer µ¯Æ°
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/309>))
+    * ÆüÉÕ·Á¼°¤Îľá¤­ (¥á¥Ë¥å¡¼¤ä todo °ìÍ÷¤«¤é)
+    * ¥á¥Ë¥å¡¼¤Î %schedule, %todo, %recent, %random ¤Î action-lock ¤òÅý°ì
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/264>))
+      * ¡Ö>¡×¤Ç 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 °ìÍ÷¤ËÍËÆü¤òɽ¼¨
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+    * Ê¸½ñ¤Î¹¹¿·
+      * ¥¤¥ó¥¹¥È¡¼¥ëË¡¤ÎÀâÌÀ¤Ï, 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 ¥ª¥×¥·¥ç¥óµ­Ë¡¤Ê¤ª¤·
+        ((<thx|URL:http://arika.org/debian/howm_1.1.2.1-0+0.diff.gz>))
+  * Fix
+    * CVS Àèü emacs ¤Ç¿§¤¬¤Ä¤«¤Ê¤¤
+      ((<thx|URL:http://www.unix-fan.com/celt/blog/20040612.html>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/302>))
+    * ¥á¥â¤¬ narrow ¤µ¤ì¤Æ¤ë¤È, ¸¡º÷¤µ¤ì¤Ê¤¤¡¦±ÜÍ÷¤Ç¤­¤Ê¤¤¡¦³«¤¤¤Æ¤â¸«¤¨¤Ê¤¤
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/311>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/329>))
+    * ¡Ö>>> ¥Õ¥¡¥¤¥ë̾¡×¤Î¤È¤­¤Ï¥¿¥¤¥È¥ëɽ¼¨¤ò off
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/309>))
+    * >>> ¤«¤é²èÁü¤ò³«¤¤¤¿¤¢¤È, ¸µ¤È°ã¤¦¥Ð¥Ã¥Õ¥¡¤¬É½¼¨¤µ¤ì¤¿¤ê¤·¤Æ¤¿
+    * ¡Ö<<<¡×¾å¤Ç 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). µóÆ°¤ÏÊѲ½¤Ê¤¤¤Ï¤º.
+      ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?DriveLetter>))
+    * ¥Æ¥¹¥ÈÈǤΥХ°(¾¶)
+      * ¡Ö¥á¥Ë¥å¡¼¤Ë %recent¡×¤ÇÂоݳ°¥Õ¥¡¥¤¥ë¤Î¥Á¥§¥Ã¥¯¤ò˺¤ì¤Æ¤¿
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/246>))
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/247-248n>))
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/255-257n>))
+      * ((<¥¤¥ó¥¹¥È¡¼¥ë>))¤Î¡Ö¤Ï¤¸¤á¤Æ C-c , , ¤·¤¿»þ¤ËÆɤ߹þ¤à¡×¤ÎÀßÄêÈ´¤±
+      * ¥Æ¥¹¥ÈÈǤΥС¼¥¸¥ç¥óɽ¼¨¤¬, ¥æ¡¼¥¶¤¬ ./configure ¤·¤¿Æü¤Ë¤Ê¤Ã¤Æ¤¿.
+      * emacs -nw ¤Ê¤È¤­, [2004-08-08]! ¤Î¡Ö!¡×¤Ç RET Ã¡¤¯¤È¥¨¥é¡¼
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/354>))
+      * ³Æ¥Õ¥¡¥¤¥ë¸ÄÊ̤ˠbyte-compile ¤·¤¿¤È¤­¤ÎÉÔ¶ñ¹ç
+        ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+        * ¥Þ¥¯¥í¤¬¥Þ¥¯¥í°·¤¤¤µ¤ì¤Æ¤Ê¤«¤Ã¤¿
+          ¢ª ¥Õ¥¡¥¤¥ë¤Þ¤¿¤¤¤Ç»È¤¦¥Þ¥¯¥í¤Ï 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 ¤Î¾Êά·Á¤È¤«¤Ö¤Ã¤Æ¤¿
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/133-134n>))
+    * ¡Ömake test¡×¤Ç¡ÖÁǤÎÀßÄê¤Ç¤Î¥Æ¥¹¥È¡×
+    * ¥á¥Ë¥å¡¼Ãæ¤Ç¤Î¡Ö%|¡×¤Ë¤è¤ëÉԲĻë¥È¥°¥ë¤ò¸ø¼°µ¡Ç½¤Ë
+    * howm-view-real-grep ¤Ï¡Ö¥Ñ¥¿¡¼¥ó¤Î¥ê¥¹¥È¡×¤â¼õ¤±¤Ä¤±¤ë
+        (setq howm-view-grep-file-stdin-option "-f -")
+      * Æäˠlinux °Ê³°¤Ç grep »ÈÍѤÊÊý¤Ï, ¤³¤ÎÀßÄê¤ò¤·¤ÆÉÔÅԹ礬½Ð¤Ê¤¤¤«,
+        »î¤·¤Æ¤¤¤¿¤À¤±¤ë¤È½õ¤«¤ê¤Þ¤¹.
+        ¸«¤¿ÌܤÎÆ°ºî¤Ï²¿¤âÊѤï¤é¤Ê¤¤¤Ä¤â¤ê¤Ç¤¹¤¬¡Ä
+      * ¡Öcome-from ¥­¡¼¥ï¡¼¥É¤Î alias¡×¤Ë¸þ¤±¤¿ÉÛÀФǤ¹
+        ((<ref|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?CompoundComeFrom>))
+  * 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 ÉÔ»ÈÍÑ»þ)
+    ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/88>))
+    * ¥á¥Ë¥å¡¼¤ÎͽÄꡦtodo °ìÍ÷¤Î¡Ö>¡×¤Ç RET ¢ª no match
+      ¤È¤¤¤¦¥Ð¥°¤â½Ð¤Æ¤¤¤¿ÌÏÍÍ
+      (howm-keyword-case-fold-search ÀßÄê»þ)
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/96>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/108>))
+      thx > NARA Shinsuke ¤µ¤ó
+
+* [2004-03-16] v1.1.1.1
+  * Note
+    * v1.1.1 ¤«¤é¤Î bug fix ÈǤǤ¹
+    * ¡Ö±£¤·µ¡Ç½¡×¤â¾¯¡¹ÄɲÃ
+  * Èù²þÎÉ
+    * migemo-server ¤òÉÔÍפË
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/899>))
+      * grep »ÈÍѤʤé¤Þ¤ÀɬÍ×
+        (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/909>))
+    * howm-menu-mode-map ¤ò¤Õ¤Ä¤¦¤Ë¥­¡¼ÄêµÁ²Äǽ¤Ë (buffer local ¤¸¤ã¤Ê¤¯¤·¤¿)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/909>))
+    * action-lock-set-rules ¤Ï¾¡¼ê¤Ë remove-duplicates
+  * fix
+    * (setq howm-list-title t) ¤·¤Æ¤â C-c , l ¤Ç¥¿¥¤¥È¥ë¤¬½Ð¤Ê¤¤
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/924>))
+    * ÆüÉÕÆþÎϤǠ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\\}")
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+    * grep ÉÔ»ÈÍÑ»þ, S ¢ª foo ¤Ç¡ÖFoo¡×¤¬¤Ò¤Ã¤«¤«¤é¤Ê¤¤
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/51-54n>))
+    * README ¤Î½¤Àµ
+      * todo É½¼¨·ï¿ô¤Î¥«¥¹¥¿¥Þ¥¤¥ºË¡¤òÄɵ­
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/69>))
+      * {_} ¤Î¥«¥¹¥¿¥Þ¥¤¥ºË¡¤ÎÀâÌÀ¤ò½¤Àµ
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/79-82n>))
+
+* [2004-02-21] v1.1.1
+  * Note
+    * ÂçÎ̤Τ³¤Þ¤´¤Þ²þÎÉ
+    * Ì̲ܶþ¤(ÊÝα, todo Ä¾Ã¡¤­, ¥½¡¼¥¹¥³¡¼¥É±ÜÍ÷)¤Ï,
+      ¤Þ¤À¡Ö±£¤·µ¡Ç½¡×¤Ã¤Æ¤³¤È¤Ç
+    * v1.1.0.* ¤«¤é, ¤½¤Î¤Þ¤Þ°Ü¹Ô¤Ç¤­¤ë¤Ä¤â¤ê. ½ñ¼°Êѹ¹¤Ê¤É¤Ê¤·.
+    * v1.1.1rc3 ¤ÈÆâÍÆƱ¤¸
+  * ¿·ÀßÄê (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    * todo ¤ò RET °ìȯ¤ÇºÑ¤Ë (howm-action-lock-reminder-done-default)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/698>))
+    * ÆâÍƥХåե¡¤Ë¿§¤Ä¤± (howm-view-contents-font-lock-keywords)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/665>))
+      * ¤Û¤ó¤È¤Ï¥Õ¥¡¥¤¥ëËÁƬ¤È³ÈÄ¥»Ò¤«¤é¼«Æ°È½Äꤹ¤Ù¤­¤Ê¤ó¤À¤±¤É, ¤Ò¤È¤Þ¤º.
+    * °ìÍ÷¤Î¥½¡¼¥È´ð½à (howm-list-normalizer)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/503>))
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?SortBy>))
+    * ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Îɽ¼¨ÈÏ°Ï (howm-menu-schedule-days-before)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+    * ÆüÉդο·µ¬ÆþÎÏ»þ¤Ëǯ¤ä·î¤òά¤·¤¿¤é̤Íè¤È²ò¼á (howm-insert-date-future)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/425>))
+    * howm-template ¤òÁªÂò²Äǽ¤Ë
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?SwitchTemplate>))
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReport>))
+    * (setq howm-list-title t) ¤¹¤ì¤Ð, °ìÍ÷¤Ç¤Ï¾ï¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/288>))
+      * 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 ¤ÈƱ¤¸)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?KeyBinding>))
+    * C-c , SPC ¤Ç howm ¤Ê¥Ð¥Ã¥Õ¥¡¤È howm ¤Ç¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤È¤òÀÚ¤êÂؤ¨.
+      howm ¤Ê¥Ð¥Ã¥Õ¥¡¤¬¤Ê¤±¤ì¤Ð¥á¥Ë¥å¡¼¤ò³«¤¯.
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Idea>))
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ImplementedIdea>))
+    * °ìÍ÷ɽ¼¨¡¦ÆâÍÆɽ¼¨¤Ç¤Ï n, p ¤Ç¤â¥«¡¼¥½¥ë¾å²¼
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/473>))
+    * ¡Öfile://¡Ä¡×¾å¤Ç C-u RET ¢ª find-file-other-window
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/449>))
+    * [º£Æü] [ºòÆü] ¤Þ¤ï¤ê (°ìÆü°ì¥Õ¥¡¥¤¥ë¤òÁÛÄê)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/452>))
+      * howm-open-today ¤Ï, ¿·µ¬ºîÀ®»þ¤Ë¥Æ¥ó¥×¥ì¡¼¥ÈÁÞÆþ
+      * M-x howm-open-past ¤ÇºòÆü¤ò,
+        C-u 3 M-x howm-open-past ¤Ç 3 ÆüÁ°¤ò³«¤¯ 
+  * Êѹ¹
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡¡¦ÆâÍƥХåե¡
+      * °ìÁȤ·¤«ºî¤é¤Ê¤¤(ÉÔɾ¤Ê¤éÌᤷ¤Þ¤¹). ((<¥«¥¹¥¿¥Þ¥¤¥º>))¤â»²¾È.
+      * q ¤·¤¿¤é, ¥Õ¥ì¡¼¥àʬ³ä¤ò¶¯À©²ò½ü
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/359>))
+        * ¡Ö¸µ¤Î¾õÂÖ¤ËÉüµ¢¡×¤Ï give up ¤Ç¤¹.
+          ¤´¤á¤ó¤Ê¤µ¤¤. »ä¤ÎÏӤȵ¤¹ç¤Ç¤Ï, º¬Ëܲò·è¤ÏÆñ¤·¤½¤¦¡Ä
+          ((<ref|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/194>))
+          ((<ref|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/415-416n>))
+      * sort-by-date ¤ò¡Ö¿·¤·¤¤¤â¤Î¤¬¾å¡×¤ËÊѹ¹
+      * °ìÍ÷ɽ¼¨¤«¤é @ ¤ÇÏ¢·ëɽ¼¨¤ËÀڤ꤫¤¨¤¿¤é, window ¤Îʬ³ä¤ò²ò½ü
+      * Ï¢·ëɽ¼¨¤Ç, ³Æ¥á¥â¤ÎºÇ¸å¤Î¶õ¹Ô¤ò¾Ê¤¯
+      * ¡Ö>>> ¥Õ¥¡¥¤¥ë̾¡×¤Ç RET¡ß2 ¤·¤¿¤é, window Ê¬³ä¾õÂÖ¤òÉü¸µ
+    * ¥á¥Ë¥å¡¼
+      * > ¤Ç RET ¢ª ³ºÅö¹Ô¤Øľ¥¸¥ã¥ó¥×
+      * ¡ÖºÑ¤ß¡×¤Ïɽ¼¨¤·¤Ê¤¤
+        ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+      * ÀøÉúÃæ¤Î¥ê¥Þ¥¤¥ó¥À¤Ïɽ¼¨¤·¤Ê¤¤ (howm-menu-todo-priority)
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/620>))
+      * ¥á¥Ë¥å¡¼¤Î¥­¥ã¥Ã¥·¥å¤òÀßÄꤷ¤Ê¤¤¸Â¤ê, ¥á¥âÊݸ»þ¤Î¥á¥Ë¥å¡¼¹¹¿·¤Ï¥ª¥Õ
+      * schedule, todo Íó¤ËɽÂꡦ½ñ¼°ÀâÌÀ¤òÄɲÃ
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/428-430n>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/432>))
+        * %sdays (ͽÄêɽ¤Îɽ¼¨Æü¿ô), %tnum (todo ¤Îɽ¼¨·ï¿ô)¤â
+    * howm2
+      * ¥á¥â°ìÍ÷¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/317>))
+      * howm2 -r ¤Ç¥Õ¥¡¥¤¥ë°ìÍ÷¤òµÕ½ç¤Ë
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/334>))
+    * autoconf, automake ¤ËÃå¼ê
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/304-307n>))
+      * navi2ch ¤«¤éÃÑÃΤ餺¤Ë¥³¥Ô¡¼. ¤è¤¯¤ï¤«¤é¤Ê¤¤¤Þ¤Þ¤¤¤¸¤ë.
+        * doc/releng.txt ¤è¤ê¥á¥â: tar.gz ¤òºî¤ë¤Ë¤Ï (³«È¯¼ÔÍÑ)
+            aclocal && autoconf && automake && make Makefiles && make dist elcdist
+      * »²¹Í: ((<URL:http://shimaki-hp.hp.infoseek.co.jp/autoconf/book1.html>))
+      * ¥Ç¥Õ¥©¥ë¥È¤Î¥¤¥ó¥¹¥È¡¼¥ëÀ褬 /usr/share/emacs/site-lisp/howm
+        ¤Ë¤Ê¤ë¤è¤¦¤Ë
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/324>))
+      * 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 ¤Î¤È¤­¤Ë¸Â¤ë)
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/482>))
+      * Wiki É÷¥ê¥ó¥¯ [[hoge]] ¤Ï hoge ¤Ë²¼Àþ (¡Ö<<< hoge¡×¤Î̵ͭ¤Ë¤«¤«¤ï¤é¤º)
+        (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+        ((<thx|URL:http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=howm>))
+        ((<thx|URL:http://pc2.2ch.net/test/read.cgi/win/1067394259/341-347n>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/672-673n>))
+        * ½¾Íè¤Ï¡Ö]]¡×¤À¤±¤Ë²¼Àþ.
+          ¡ÖºîÀ®ºÑ¤ß¤«¤É¤¦¤«¤ò²¼Àþ¤Î¤Ä¤­Êý¤Ç¶èÊ̤Ǥ­¤ë¡×¤Ã¤Æ¤¤¤¦
+          ¤È¤ó¤Á¤À¤Ã¤¿¤ó¤À¤±¤É, ¤Ï¤Þ¤Ã¤¿Êý¤¬Ê£¿ô.
+      * ttp:// ¤ÎÎà¤â http:// ¤Ëľ¤·¤Æ¥Ö¥é¥¦¥¶¤Ø
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/676>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/680>))
+      * howm-toggle-search-other-dir ¤Ç, Í½Äêɽ¤ä todo ¥ê¥¹¥È¤Î¸¡º÷ÈϰϤâ³ÈÂç
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/623>))
+      * ((<¥¤¥ó¥¹¥È¡¼¥ë>))¤ÎÀâÌÀ¤Ë¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤òÄɲÃ
+      * howm-reminder-tomorrow-face ¤ÎÇطʤòÃ㿧¤«¤é¥Ô¥ó¥¯¤Ë
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/805-807n>))
+    * ¥æ¡¼¥¶¡¼¤Ë¤Ï´Ø·¸¤Ê¤·
+      * ¥Õ¥¡¥¤¥ë¹½À®¤ÎÊѹ¹ (¢ª((<¼ÂÁõ¤Ë¤Ä¤¤¤Æ>)))
+      * howm-menu-action ¤Î°ú¿ô»ÅÍͤòÊѹ¹
+      * copy-list ¢ª copy-sequence (cl ¥Ñ¥Ã¥±¡¼¥¸ ¢ª built-in)
+  * fix
+    * URL ¤ÎÃê½Ð¤ò¤Á¤ç¤Ã¤È¤À¤±¤Þ¤·¤Ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/672-673n>))
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¤à¤À¤Ê½ñ¤­¤Ê¤ª¤·¤òÍÞÀ©
+      * howm-list-normalize ¤«¤é¤à¤À¤Ë²¿ÅÙ¤â howm-view-summary ¤¬¸Æ¤Ð¤ì¤Æ¡Ä
+      * ¤¤¤Á¤Ð¤ó¤Ò¤É¤¤¤È¤³¤À¤±½¤Àµ. ¤Þ¤À¤à¤À¤Ï»Ä¤Ã¤Æ¤ë.
+    * meadow ¸þ¤±¤Ë, ¥É¥é¥¤¥Ö¥ì¥¿¡¼¤ÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë
+      (howm-normalize-file-name)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?DriveLetter>))
+    * ±Ñ¸ì¥á¥Ë¥å¡¼¤Î [String] ¤È [Regexp] ¤¬µÕ
+    * xemacs canna Âкö
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?CannaReturnKey>))
+    * split-horizontally ¤¬ t ¤Ê¤é C-x 1 ¸å¤â²£Ê¤٤Ë
+      (((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/634>))
+      > ¡³(¡­¡¼`)¥Î¤µ¤ó)
+    * howm-menu-{schedule|todo} ¤Î¥á¥Ã¥»¡¼¥¸,
+      howm-view-call-process ¤ÎÌá¤êÃÍ¥Á¥§¥Ã¥¯
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/626>))
+    * 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) ¤¬¤Ê¤¤)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Usage>))
+    * 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)
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?WorkOn>))
+    * .gz, .jpg, .gif, .png ¤â¸¡º÷Âоݤ«¤é½ü³°
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ImageCapture>))
+    * ºÇ½ª¹Ô¤Ë²þ¹Ô¤¬¤Ê¤¤¤È, ÆâÍÆɽ¼¨¤Ç¤½¤Î¹Ô¤¬½Ð¤Ê¤¤
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/471>))
+    * °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Ç (setq howm-list-title t) ¤Ê¤È¤­,
+      °ìÍ÷¤Ç¡ÖS ¢ª date¡×¤ò¤¯¤êÊÖ¤¹¤È¥½¡¼¥È½ç¤¬Æþ¤ì¤«¤ï¤ë
+      (thx > NAKANO Yasuhiro ¤µ¤ó <nkyasu@yahoo.co.jp>)
+    * °ìÉô´Ä¶­¤Ç, global-font-lock ¤¬¸ú¤«¤Ê¤¯¤Ê¤ë
+      (emacs-20.7.2 on Vine Linux 2.6, Meadow1.15 on WindowsXP Professional).
+      (thx > NAKANO Yasuhiro ¤µ¤ó <nkyasu@yahoo.co.jp>)
+    * °ìÍ÷ɽ¼¨¤Î¥Õ¥¡¥¤¥ë̾Íó¤Î¥Ç¥Õ¥©¥ë¥ÈÉý
+      (thx > Jun Kuriyama ¤µ¤ó <kuriyama@imgsrc.co.jp>)
+    * Jargon ¤Î¥ê¥ó¥¯ÀÚ¤ì
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/420>))
+    * ¥³¡¼¥Éźºï
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/421>))
+      * skip-one-link ¢ª action-lock-skip-one-link
+      * *.el ¤ÎÀèƬ¡¦ËöÈø¤ËÄê·¿¥³¥á¥ó¥È
+    * ((<mcomplete.el|URL:http://homepage1.nifty.com/bmonkey/emacs/elisp/mcomplete.el>))
+      ¤È¤ÎÊ»ÍѤǥ¨¥é¡¼
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/365>))
+    * ¡Ö<<<¡×¤Ç RET ¤·¤¿¤È¤­¤Ë¤â howm-keyword-case-fold-search ¤òÈ¿±Ç
+    * (setq howm-list-title t) ¤¹¤ë¤È, °ìÍ÷¤ÈÆâÍƤξ岼¤¬µÕž
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/348>))
+    * ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð¤ò¤Û¤ÜÂ༣
+    * howm-keyword-regexp-header-pos ¢ª howm-keyword-regexp-hilit-pos
+    * howm2 ¤Î¥Ç¥Õ¥©¥ë¥È¤Ç, ¥Õ¥¡¥¤¥ë #foo.bar ¤ä foo.bar~ ¤âÂоݳ°¤Ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/316-317n>))
+    * ruby 1.8 ·Ï¤Ç howm2 ¤¬¥¨¥é¡¼
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/308-310n>))
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/317-318n>))
+    * ÌÀÇطʤऱ¤ÎÇÛ¿§
+    * ¥«¡¼¥½¥ë¤¬¥¿¥¤¥È¥ë¾å¤Ë¤¢¤ë¤È
+      C-c , K (howm-keyword-to-kill-ring) ¤Ë¼ºÇÔ
+    * CVS Àèü emacs ¤À¤È on-the-fly ¤Ç¿§¤¬¤Ä¤«¤Ê¤¤
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/268>))
+    * °ìÍ÷¤Ç ! ¤Ë¤è¤ë shell command ¤Î½ÐÎϤ¬¤¹¤°¾Ã¤¨¤Æ¤·¤Þ¤¦
+      * ¤Ä¤¤¤Ç¤Ë, ½ÐÎϤ¬¶õ¤Î¤È¤­¤Ï½ÐÎϥХåե¡¤ò½Ð¤µ¤Ê¤¤¤è¤¦¤Ë¤·¤¿
+      * ¤Ä¤¤¤Ç¤Ë, ¤³¤ì¤âû½Ì¥Õ¥¡¥¤¥ë̾¤Ë
+    * Ï¢·ëɽ¼¨¤Ç TAB ¤òᤤ¤Æ¤«¤é RET Ã¡¤¯¤È¥¨¥é¡¼
+    * CVS Àèü emacs ¤Ç, °ìÍ÷¡¦ÆâÍƥХåե¡¤Ë¿§¤¬¤Ä¤«¤Ê¤¤
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/259>))
+    * howm-search-other-dir ¤ÎÀâÌÀ¤òÄɲÃ
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/260>))
+  * ¥Æ¥¹¥ÈÈǤ«¤é¤ÎÊѹ¹ (¾¶)
+    * 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 Âкö¤ò½ÀÆð¤Ë ¢« ·ë¶ÉÇÑ»ß
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?WorkOn>))
+      * eval-after-load ¤À¤È (load "~/elisp/yc.el") ¤¬¥Þ¥Ã¥Á¤·¤Ê¤¤¤Î¤Ç,
+        defadvice ¤ËÊѹ¹
+      * ¤Û¤ó¤È¤Ï, Æ±ÍͤΤ³¤È¤ò egg, anthy ¤Ë¤â¤ä¤ë¤Ù¤­
+        (patch Ê罸. howm-misc.el »²¾È) ¢« ¤ä¤Ã¤Ñ¤ä¤á[2004-01-18]
+    * ¥á¥Ë¥å¡¼¤Ç¤Ï [2004-01-10]! Åù¤Ë²¼Àþ¤ò¤Ä¤±¤Ê¤¤ ¢« ¡Öľá¤­¡×¤È¤·¤ÆÉü³è
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/506>))
+    * fix: ¥á¥Ë¥å¡¼¤Ë½ÜÅÙ¤òɽ¼¨¤·¤¿¤é > ¤«¤éÈô¤Ù¤Ê¤¯¤Ê¤Ã¤Æ¤¿
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+    * fix: anthy ¤È¤ÎÊ»ÍÑ ¢« ·ë¶ÉÇÑ»ß
+      (thx > Jun Kuriyama ¤µ¤ó <kuriyama@imgsrc.co.jp>)
+    * fix: index-j.html ¤«¤é¤Î¥ê¥ó¥¯¤º¤ì
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/361>))
+    * fix: ¥É¥­¥å¥á¥ó¥È¤Î¥¤¥ó¥¹¥È¡¼¥ëÀè
+      /usr/local/share/doc/howm ¢ª /usr/local/share/howm/doc
+    * fix: README ¤Î¥ß¥¹. Á´¥á¥â°ìÍ÷¤Ï C-c, l ¤¸¤ã¤Ê¤¯ C-c , a
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/347>))
+    * fix: ¥í¡¼¥É¸å¤Ë howm-keyword-file ¤ò¥»¥Ã¥È¤·¤¿¾ì¹ç¤Ç¤â,
+      ½é²óµ¯Æ°»þ¤Ë¼«Æ°ºîÀ®
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/270>))
+    * fix: ((<yc.el|URL:http://www.ceres.dti.ne.jp/~knak/yc.html>))
+      ¤Ç¡Ö³ÎÄê¡×¤Î RET ¥­¡¼¤ò howm ¤¬¿©¤¦
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/274>))
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/283-284n>))
+    * C-c , d ¢ª d ¤ÇÆü»þ¤òÁÞÆþ ¢« ÇÑ»ß
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/595>))
+      ((<ref|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/597-598n>))
+      * ¤Ä¤¤¤Ç¤Ë prompt ¤ËÍËÆü
+    * ((<¥«¥¹¥¿¥Þ¥¤¥º>)) ¤Îµ­½Ò¥ß¥¹: howm-directory ¢ª howm-keyword-file
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Comment>))
+    * configure.in ¤Ë Meadow.exe ¤òÄɲÃ
+      (((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?RoadMap>))
+      > Meadow2»È¤¤¤µ¤ó)
+  * ÇÑ»ß
+    * canna, egg, yc, anthy ¤Î¸ÄÊÌÂкö
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?WorkOn>))
+      * ¤«¤ï¤ê¤Ë, 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 Âкö
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?CannaReturnKey>))
+    * ±Ñ¸ì¥á¥Ë¥å¡¼¤Î [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 ¤Ç¿§¤¬¤Ä¤«¤Ê¤¤
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/268>))
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/501>))
+    * ºÇ½ª¹Ô¤Ë²þ¹Ô¤¬¤Ê¤¤¾ì¹ç, ¤½¤Î¹Ô¤¬ÆâÍÆɽ¼¨¤Ë½Ð¤Ê¤¤
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/482>))
+* [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 ¤µ¤ó <nkyasu@yahoo.co.jp>)
+  * fix: °ìÍ÷ɽ¼¨¤Î¥Õ¥¡¥¤¥ë̾Íó¤Î¥Ç¥Õ¥©¥ë¥ÈÉý
+    (thx > Jun Kuriyama ¤µ¤ó <kuriyama@imgsrc.co.jp>)
+* [2003-12-29] v1.1.0.2
+  * fix: anthy ¤È¤ÎÊ»ÍÑ
+    (thx > Jun Kuriyama ¤µ¤ó <kuriyama@imgsrc.co.jp>)
+  * ¥á¥Ë¥å¡¼¤Ë schedule¡¦todo ¤ÎɽÂê¤ÈÀâÌÀ¤òÄɲÃ
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/428-432n>))
+* [2003-12-27] v1.1.0.1
+  * fix: Ï¢·ëɽ¼¨¤Ç TAB ¤òᤤ¤Æ¤«¤é RET Ã¡¤¯¤È¥¨¥é¡¼
+  * fix: ÌÀÇطʤऱ¤ÎÇÛ¿§
+  * fix: egg, yc, mcomplete ¤È¤ÎÊ»ÍÑ
+  * fix: Jargon ¤Î¥ê¥ó¥¯ÀÚ¤ì
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/420>))
+* [2003-11-22] v1.1
+  * Note
+    * Èó¸ß´¹¤ÊÊѹ¹¤ò¤Þ¤È¤á¤Æ¤ä¤Ã¤Æ¤·¤Þ¤ª¤¦ÈÇ
+    * ¥ª¥×¥·¥ç¥ó¤Ç, ½¾Íè¤É¤ª¤ê¤Ë¤â»È¤¨¤ë¤è¤¦¤Ë¤·¤¿¤Ä¤â¤ê
+    * ¡Ö((<¥¤¥ó¥¹¥È¡¼¥ë>))¡×¤Î°Ü¹ÔÎã¤ò»²¾È
+  * ¥Ç¥Õ¥©¥ë¥È½ñ¼°¤ÎÊѹ¹
+    * ¥ê¥ó¥¯½ñ¼°¤ò <<, >> ¤«¤é <<<, >>> ¤ËÊѹ¹
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/173>))
+      * Âбþ¤·¤Æ, 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 ¤Ç¤Ï¤Ê¤¯)
+  * ²þÎÉ
+    * <<< ¤Ç¤ÎÂçʸ»ú¾®Ê¸»ú¤Î¶èÊÌ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    * <<< ¤Ê¤É¤Ë¿§¤Ä¤±
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/133>))
+    * ¥Ç¥Õ¥©¥ë¥È¤Î¥á¥Ë¥å¡¼¤Ë¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤òÄɲÃ
+    * ÆüÉÕ·Á¼°¡Ö2003-10-30¡×¤Î action-lock ¤Ë¡Ö¤¯¤êÊÖ¤·¡×¤òÄɲÃ
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/224>))
+    * XEmacs, CVS Àèü Emacs, Carbon Emacs ¤ËÂбþ(?)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/209>))
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/229>))
+      * '¤ä'¤µ¤ó¤Î patch ¤ò¼è¤ê¹þ¤ß¤Þ¤·¤¿
+    * howm2
+      * <<< ¤È >>> ¤¬¤«¤é¤à¾ì¹ç¤ò½¤Àµ. ·ãÃ٤ˤʤä¿ ;_;
+      * Âоݥե¡¥¤¥ë¤òÁªÊ̲Äǽ¤Ë (-list)
+      * ¥ª¥×¥·¥ç¥óÄɲà(-goto, -comefrom, -i)
+    * ((<ChangeLog Memo ¤È¤ÎÊ»ÍÑ|URL:CL-HOWM.ja.rd>))
+  * ¾®Êѹ¹
+    * C-c , d ¤È C-c , D ¤òÆþ¤ì¤«¤¨
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/174>))
+    * ¥½¡¼¥¹¥Õ¥¡¥¤¥ëʬ³ä (howm-font-lock.el, howm-menu.el)
+    * ¥Ç¥Õ¥©¥ë¥È¤Î major-mode ¤ò text-mode ¤Ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/181>))
+    * [Á°¸å] ¤Ë¥­¡¼³ä¤ê¤¢¤Æ (C-c , A)
+    * ÆâÍÆɽ¼¨¤È¥Æ¥ó¥×¥ì¡¼¥È¤Î¥Õ¥¡¥¤¥ë̾¤Ï /home/hoge/¡Ä ¤¸¤ã¤Ê¤¯ ~/¡Ä ¤Ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/228-229n>))
+    * ¿·µ¬¥á¥âºîÀ®Ä¾¸å¤Ë undo ¤¹¤ì¤Ð¡Ö>>> ¸µ¥Õ¥¡¥¤¥ë¡×¤ò¾Ã¤»¤ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/230-235n>))
+  * ÈùÊѹ¹
+    * face ¤òÊÑ¿ô¤Ç»ØÄê
+    * howm-menu-lang ¤òÀßÄꤷ¤Ê¤±¤ì¤Ð, ¤ª¤»¤Ã¤«¤¤¤Ë¿ä¬
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/121-123n>))
+    * 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 ¤â¸¡º÷Âоݳ°
+    * ¥É¥­¥å¥á¥ó¥È
+      * ¡Ö((<Æ°¤­¤Þ¤»¤ó¤è?>))¡×¤Ë¥Á¥§¥Ã¥¯¥ê¥¹¥È¤òÄɲÃ
+      * ¡Ö((<¥¤¥ó¥¹¥È¡¼¥ë>))¡×¤ËÀßÄêÎã¤òÄɲÃ
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/174>))
+      * ¥á¥Ë¥å¡¼¤Ï ~/howm/ja/*.howm ¤¸¤ã¤Ê¤¯ ~/howm/*.howm
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/122>))
+      * ¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤ò¥«¥é¡¼ÈǤË
+      * goto, come-from ¤Î½ñ¼°Êѹ¹Îã¤ò RD É÷¤Ë
+        (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/174>))
+      * ¥á¥Ë¥å¡¼¥Ð¥Ã¥Õ¥¡±£¤·¤ÎÊÌË¡¤ò¾Ò²ð (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+      * ¼Â¤Ï¥³¥ó¥½¡¼¥ë¤Ç¤â»È¤¨¤Æ¤¿
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/167>))
+      * <<< ¤¬ RD ¤Î include ¤È¤«¤Ö¤Ã¤Æ¤ë»Ý¤ÎÃí°Õ
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/198-205n>))
+        (¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>)))
+      * ¥«¥¹¥¿¥Þ¥¤¥ºÎã¤Ë¤ª¤Þ¤±¤òÄɲÃ
+      * ¡Ö¥¤¥ó¥¹¥È¡¼¥ë¡×¤Î°Ü¹ÔÎã¤Ë, GNU touch ¤Ë¤¬¤Ê¤¤¾ì¹ç¤Î¥í¡¼¥Æ¥¯ÈǤòÄɲÃ
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/190>))
+      * ((<¥«¥¹¥¿¥Þ¥¤¥º>))¤Ë¡Ö¥á¥Ë¥å¡¼¤ò¥á¥â°·¤¤¤·¤Ê¤¤¡×ÀßÄê¤òÌÀµ­
+      * yen.el ¤Î¾Ò²ð (¢ª((<³°Éô¥Ä¡¼¥ë>)))
+      * tag2plan ¤ÎÀâÌÀ¤ò½¤Àµ (-date_sep, ~/howm/*/*/*.howm)
+      * ¡Ö»²¹Í¡×¤Ëä·ϡ¦Ä¶ä¤òÄɲÃ
+  * fix
+    * grep »ÈÍÑ»þ¤Ï¡Ö-hoge¡×¤¬¸¡º÷¤Ç¤­¤Ê¤«¤Ã¤¿
+    * ÆâÍƥХåե¡¤Î font-lock (²¾½¤Àµ)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/128-136n>))
+      * v1.0.4.1 ¤Î¥Ð¥°: ¸¡º÷ʸ»úÎó¤Î¿§
+      * [2003-10-05] ¤Î¥Ð¥°: ¥Õ¥¡¥¤¥ë¶èÀÚ¤ê¤Î¿§
+    * °ìÍ÷¥¢¤«¤é¤µ¤é¤Ë°ìÍ÷¥¤¤òɽ¼¨¤·¤¿¸å¤Ç q ¤·¤¿¤é, °ìÍ÷¥¢¤ËÌá¤ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/149-150n>))
+      * ¡Ö¥Õ¥ì¡¼¥àʬ³ä¤òÉü¸µ¡×¤È¤ÎÀޤꤢ¤¤¤Ë¼«¿®¤Ê¤·.
+        ¤â¤·ÉÔ¶ñ¹ç¤¬½Ð¤¿¤é, ¢­¤Ç½¾ÍèÆ°ºî(¥¢¤ÎÁ°¤Î¥Ð¥Ã¥Õ¥¡¤ËÌá¤ë)¤Ë.
+          (setq howm-view-quit-to-nonhowm t)
+    * [Á°¸å] ¤Î¼Â¹Ôľ¸å¤ÎÆâÍƥХåե¡
+    * filter-by-date Åù¤Ç¡Ö2003 Ç¯ 9 ·î * Æü¤Þ¤Ç¡×¤ÈÆþÎϤ·¤¿¤é,
+        ¡Ö2003 Ç¯ 9 ·î 31 Æü (= 10 ·î 2 Æü)¤Þ¤Ç¡×¤È²ò¼á¤µ¤ì¤Æ¤¿
+      * ¤³¤ì°Ê³°¤Ë¤â¥Ð¥°¤Þ¤ß¤ì¤À¤Ã¤¿[2003-10-26]
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤ÈÆâÍƥХåե¡¤Î°ÌÃÖ¤¬Æþ¤ì¤«¤ï¤ë¾É¾õ
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/193>))
+      * ºÆ¸½Ë¡: ÆâÍƥХåե¡¤ÎÊý¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ, g ¤Ç¸¡º÷ ¢ª q
+    * ÆóÆü°Ê¾åµ¯Æ°¤·Â³¤±¤ë¤È, ¥á¥Ë¥å¡¼(ͽÄꡦtodo)¤ÎÅöÆü¤ÈÍâÆü¤Î¿§¤Ä¤±¤¬ÊÑ
+    * mailcap.el ¤¬¤Ê¤¤¤È¤­¤Î >>> /etc
+    * >>> ¤Î¸å¤Ë²¿¤â½ñ¤¤¤Æ¤Ê¤¤¤È¤­¤Ï̵»ë¤¹¤Ù¤·
+    * Àµµ¬É½¸½ [^¡Ä] ¤ò [^\r\n¡Ä] ¤Ë¤Ò¤È¤È¤ª¤êľ¤·
+  * ¥Æ¥¹¥ÈÈǤ«¤é¤ÎÊѹ¹¡¦fix
+    * font-lock ¤¬¤É¤ó¤É¤ó½Å¤¯¤Ê¤Ã¤Æ¤¿. ¤è¤¯¤³¤ó¤Ê¤Î¤ÇÆ°¤¤¤Æ¤¿¤Ê¤¢¡Ä
+    * fix: xemacs ¤Ç font-lock ¤¬¸Ç¤Þ¤ë
+      ((<ref|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/248-249n>))
+    * ¤ä¤Ã¤Ñ¤ê¥Ç¥Õ¥©¥ë¥È¤Ï¡Ö¥¿¥¤¥È¥ëɽ¼¨¤Ê¤·¡×
+    * °Ü¹ÔÎã¤Îµì¥­¡¼ÀßÄ꤬, 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 ¤Î¼ÂÁõ¤ò¤¹¤Ã¤­¤ê
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/219>))
+    * ~/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 ¤Ç¥«¥¹¥¿¥Þ¥¤¥º)
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/230>))
+      ¡Ä 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 ¤Ç¥¨¥é¡¼
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/241-242n>))
+
+== 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 (¢ª((<¥á¥â¤òÆɤ⤦>)),((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/54-57>))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/107-112n>))
+    * ¥Ç¥£¥ì¥¯¥È¥ê¤âÂбþ. ¡Ö>> /usr/src¡×¤È¤«.
+  * ¥­¡¼³ä¤ê¤¢¤ÆÈù½¤Àµ
+    * (°ìÍ÷¥â¡¼¥É) °ì¹Ô¥¹¥¯¥í¡¼¥ë: n,p ¢ª j,k
+    * (¥á¥Ë¥å¡¼) ¥¹¥¯¥í¡¼¥ë: SPC, BS
+    * ¥¿¥¤¥È¥ë¤ò kill-ring ¤Ø: C-c , k ¢ª C-c , K
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/67>))
+    * fix: contents-mode ¤Ç C-h ¤¬Ì¤ÀßÄê¤À¤Ã¤¿
+  * howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤Î save »þ¤Ë, ²¼Àþ¤ò°ú¤­Ä¾¤·, ¥á¥Ë¥å¡¼¤â¹¹¿·
+    (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/98>))
+  * ¸¡º÷Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲà(¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/69-72n>))
+  * ¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤Ï¸¡º÷¤·¤Ê¤¤
+    (>> ¤ä howm-search-path ¤ÇÌÀ¼¨Åª¤Ë»ØÄꤹ¤ì¤Ðõ¤¹)
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/74>))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/86>))
+  * ¥á¥Ë¥å¡¼¤ò²á¾ê¤Ë¶¯²½
+    (¢ª((<URL:ja/menu_edit.howm>)))
+    * HyperCard ¤ä Um4 ¤Ë»É·ã¤µ¤ì¤Þ¤·¤¿. ¤Û¤ó¤È¤ÏÊ̥ġ¼¥ë¤Ë¤¹¤Ù¤­.
+  * ¸½¥Ð¥Ã¥Õ¥¡¤Î¥³¥Ô¡¼¤ò howm-mode ¤Çɽ¼¨(M-x howm-show-buffer-as-howm)
+    ((<ref|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/71>))
+    * ¼ûÍ×ÉÔÌÀ¤Ê¤Î¤ÇÍͻҸ«
+  * action-lock ¤Î "...Done" ¥á¥Ã¥»¡¼¥¸¤òÇÑ»ß
+  * fix
+    * ¡Ö>> ¥Õ¥¡¥¤¥ë̾¡×¤¬ howm-excluded-file-regexp ¤Ë´Ø¤ï¤é¤º¸ú¤¯¤è¤¦¤Ë
+    * call-process ¤Ç STDERR ¤Ï¼Î¤Æ¤ë
+    * action-lock ¤ÎÀâÌÀ¤Ë file://¡Ä ¤òÄɲÃ
+    * À£Á°¤Î window Ê¬³ä¾õ¶·¤Ë´Ø¤ï¤é¤º, °ìÍ÷¤ò¾å, ÆâÍƤò²¼¤Ëɽ¼¨
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/90>))
+    * sort ¤ä filter ¤Ë¥Õ¥¡¥¤¥ë̾¤ò»È¤¦ºÝ¤Ï, ¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤ò½üµî
+    * howm-menu-refresh ¤ò M-x ¤ä¥­¡¼³ä¤ê¤¢¤Æ¤«¤é¸Æ¤Ù¤ë¤è¤¦¤Ë
+    * ¥Æ¥¹¥ÈÈǤΥХ°
+      * °ìÍ÷ɽ¼¨¤·¤¿Ä¾¸å¤ÏÆâÍƤ¬É½¼¨¤µ¤ì¤Ê¤¤
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/59-64n>))
+      * Wiki É÷ link [[¡û¡û]] ¤¬¥¨¥é¡¼
+      * [¥á¥Ë¥å¡¼¹¹¿·] ¤¬¥¨¥é¡¼
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/95>))
+      * >> ¤Ç³ºÅö¥Õ¥¡¥¤¥ë¤¬ÀèƬ¤Ë½Ð¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿
+  * ¡Ö»²¹Í¡×¤òÀ°Íý
+  * °Ê²¼¤â¼ÂÁõºÑ¤ß¤À¤±¤É, v1.1 ¤Þ¤Ç¿²¤«¤¹¤Ä¤â¤ê
+    * ¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°Êѹ¹
+    * ¥á¥Ë¥å¡¼¤È¥á¥â¤ÎÅý¹ç
+* [2003-09-23] È¿¾Ê¤·¤Æ¥Æ¥¹¥ÈÈǤòʬΥ
+  * Æó·ÏÅý¥á¥ó¥Æ¤¹¤ëǽÎϤϤʤ¤¤Î¤Ç¡Ä
+    * ¥ê¥ê¡¼¥¹ÈǤÏÊüÃÖ
+    * ¥Æ¥¹¥ÈÈǤϱóθ¤Ê¤¯¹¹¿·
+    * ¥Æ¥¹¥ÈÈǤι¹¿·¤¬Íî¤ÁÃ夤¤¿¤é,
+      ¤½¤Î¾õÂ֤˥С¼¥¸¥ç¥óÈÖ¹æ¤Ä¤±¤Æ, ¥ê¥ê¡¼¥¹ÈǤäƤ³¤È¤Ë¤¹¤ë
+* [2003/09/23] v1.0.3.4
+  * ÆüÉÕ·Á¼° [2003/09/21] ¤Î action-lock ¤ò³ÈÄ¥ (¢ª((<¥á¥â¤ò½ñ¤³¤¦>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/49-51n>))
+  * fix: howm2 ¤Î¥ê¥ó¥¯°ìÍ÷¤òÁêÂХѥ¹¤Ë
+  * fix: template ¤Þ¤ï¤ê
+    * Á°¤Î¥á¥â¤È¤Î´Ö¤Ë¶õ¹Ô¤òÆþ¤ì¤ë
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/53>))
+    * ¥¹¥Ú¥ë¥ß¥¹ cursol ¢ª cursor
+    * ¿·¥á¥â template ¤Î %xxx ÃÖ¤­¤«¤¨¤¬, Á°¤Î¥á¥â¤Ë¤âµÚ¤ó¤Ç¤¤¤¿
+  * fix: ¡Ö¼¡(Á°)¤Î¥ê¥ó¥¯¤Ø¡×¤ò½¤Àµ
+  * fix: canna Âкö¤ò, ¥í¡¼¥É½ç½ø¤Ë´Ø¤ï¤é¤ºÍ­¸ú¤Ë
+* [2003/09/21] v1.0.2.3
+  * fix: ½é¤á¤Æµ¯Æ°¤·¤¿¤È¤­¤Ë ~/.howm-keys ¤òºîÀ®
+  * fix: canna Âкö
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/45>))
+* [2003/09/20] v1.0.2.2
+  * HTML ²½¥¹¥¯¥ê¥×¥È howm2 ¤Ç¤Ã¤Á¤¢¤¬¤ê (¢ª((<³°Éô¥Ä¡¼¥ë>)))
+  * fix: ¡Ö!¡×¤¹¤ë¤È¥Ð¥Ã¥Õ¥¡Ì¾¤¬ÊÑ
+* [2003/09/18] v1.0.2
+  * HTML ²½¥¹¥¯¥ê¥×¥È howm2 ¤Î»îºî (¢ª((<³°Éô¥Ä¡¼¥ë>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/35>))
+  * Ì¤Êݸ¤À¤í¤¦¤È°ÑºÙ¹½¤ï¤º, howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¶¯À©ºï½ü¤¹¤ë¥³¥Þ¥ó¥É
+    (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/36>))
+  * ¡Ö¤ä¤µ¤·¤¤ Emacs-Lisp ¹ÖºÂ¡×¤Î URL ¤ò½¤Àµ.
+    ¤¤¤Þ howm ¤¬¤¢¤ë¤Î¤Ï¤³¤ÎËܤΤª¤«¤²¤Ç¤¹.
+* [2003/09/17] v1.0.1
+  * °ìÍ÷¥â¡¼¥É¤Ç¡Ö!¡× ¢ª shell ¤Ç¥³¥Þ¥ó¥É¼Â¹Ô (¢ª((<¥á¥â¤òÆɤ⤦>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/501>))
+    * 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
+  * ¥á¥Ë¥å¡¼ (¢ª((<¥á¥â¤ò½ñ¤³¤¦>)))
+    * Á°¸å¤Î¥á¥â¤Î°ìÍ÷
+    * ÀâÌÀ¤òÊä­
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/494>))
+  * °ìÍ÷¥â¡¼¥É¤Ç¡ÖX¡× ¢ª Dired-X ¤òµ¯Æ°¤·¤Æ¥Õ¥¡¥¤¥ëÁàºî
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/496>))
+  * howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹
+    * fix: window ¤Î¾õÂÖ¤òÉü¸µ
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/497>))
+    * ¤É¤ó¤Ê¥â¡¼¥É¤Ç¤â C-c , Q ¤¬¸ú¤¯
+      ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/498>))
+* [2003/09/16] v0.9.8.3
+  * fix: ¥¿¥¤¥È¥ë°ìÍ÷¤Ç¥¨¥é¡¼
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/490>))
+    * pure elisp ÈǤΤȤ­
+    * ¥¿¥¤¥È¥ë¤¬°ì¤Ä¤â¤Ê¤«¤Ã¤¿¤È¤­
+  * menu.howm ¤ò°ìÍ÷¤Ë½Ð¤µ¤Ê¤¤ÊýË¡ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/491>))
+* [2003/09/16] v0.9.8.2
+  * ¥á¥Ë¥å¡¼¤ò¥Õ¥¡¥¤¥ë¤Ë¤·¤ÆÊÔ½¸¤ò¿ä¾© (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    * Æ±º­¤Î ja/menu.howm ¤ò ~/howm/ ¤Ë¥³¥Ô¡¼¤·¤Æ¤¯¤À¤µ¤¤
+  * ((<URL:TUTORIAL.ja.rd>))
+  * ¥Ç¥Õ¥©¥ë¥È¤ÎÊѹ¹ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    * grep »È¤ï¤Ê¤¤ (¥Ð¥°½Ð¤·´üÂÔ)
+    * ¥á¥Ë¥å¡¼¤Î¥­¥ã¥Ã¥·¥å¤Ï¥ª¥Õ
+    * ¥Õ¥¡¥¤¥ë¤ò³«¤¯ºÝ, °ìÍ÷¤ò»Ä¤¹
+  * ³Ú¤·¤¤Ï¢µÙ¤Ç¤·¤¿ :-)
+* [2003/09/16] v0.9.7.1
+  * Wiki É÷¥ê¥ó¥¯ [[¤Û¤²]] (¢ª((<¥á¥â¤ò½ñ¤³¤¦>)))
+  * ¡Ö<<¡×¾å¤Ç¥ê¥¿¡¼¥ó᤯¤È¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×¤Ø¤Î¥ê¥ó¥¯ (¢ª((<¥á¥â¤ò½ñ¤³¤¦>)))
+  * ¸Å¤¤¹¹¿·µ­Ï¿¤È°Ü¹ÔÎã¤ò°ÜÆ° (¢ª((<URL:OLD.rd>)))
+  * howm-ignore-comefrom-same ¤ò undocumented ¤Ë. ¤½¤Î¤¦¤ÁÇÑ»ß?
+  * fix: ÍËÆüɽ¼¨¤Ë¤â¸À¸ìÀßÄê¤òÈ¿±Ç
+* [2003/09/15] v0.9.6
+  * ¡Ön¡×¤È¡Öp¡×¤Ç°ì¹Ôñ°Ì¤Î¥¹¥¯¥í¡¼¥ë
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/485>))
+* [2003/09/15] v0.9.5
+  * ¥á¥Ë¥å¡¼¤Ë [Á´¾Ã] (howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹)
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/481>))
+* [2003/09/14] v0.9.4.2
+  * fix: ¥¿¥¤¥È¥ë°ìÍ÷¤¬Î¢¤Ë±£¤ì¤Æ¤·¤Þ¤Ã¤Æ¤¿
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/475>))
+  * fix: ¡Ö¥«¡¼¥½¥ë¤òÂбþ¥«¥é¥à¤Ø¡×¤ÎÈù½¤Àµ(¥Þ¥Ã¥Á¤·¤Ê¤±¤ì¤Ð¹ÔƬ¤Ø)
+* [2003/09/14] v0.9.4.1
+  * grep Ã¦µÑ¤Î»î¤ß (¢ª((<¥¤¥ó¥¹¥È¡¼¥ë>)))
+    * ¥á¥â¤¬ÂçÎ̤À¤È¤ä¤Ã¤Ñ¤ê¤Á¤ç¤Ã¤ÈÃÙ¤¤ ;_;
+  * fix: ¡ÖWrong type argument: window-configuration-p, nil¡×
+  * °ìÍ÷¥â¡¼¥É¤«¤é¥Õ¥¡¥¤¥ë¤ò³«¤¤¤¿¤È¤­, ¥«¡¼¥½¥ë¤òÂбþ¥«¥é¥à¤Ø:
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/472>))¤Ë¸þ¤±¤Æ
+* [2003/09/13] v0.9.3
+  * °ìÍ÷¥â¡¼¥É¤«¤éÈ´¤±¤ëºÝ, window ¤Î¾õÂÖ¤òÉü¸µ
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/450>))
+  * 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: ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/447>))
+    * 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
+  * ¥¿¥¤¥È¥ë¤Î°ìÍ÷ɽ¼¨ (¢ª((<¥«¥¹¥¿¥Þ¥¤¥º>)))
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/398>))
+  * °ìÍ÷¥â¡¼¥É¤ä¥á¥Ë¥å¡¼¥â¡¼¥É¤Ç¡Ö?¡×¤ò²¡¤¹¤È¥Ø¥ë¥×
+  * ¡Ö»²¹Í¡×¤Ë 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 ¤Ç¸ú¤¤¤Æ¤Ê¤«¤Ã¤¿
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1050963280/126>))
+  * 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://¡Ä ¤È ((<URL:¡Ä>)) ¤â»Ä¤·¤Æ¤Ï¤¢¤ë)
+  * ÍѸìÊѹ¹: ÌÀ¼¨¡¦°Å¼¨ ¢ª 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: </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 »²¾È
+  * 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://¡Ä¡×¤ÎÊѹ¹ (¤Þ¤·¤ÊÀßÄêÊ罸)
+    ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/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))
+
+* ¥á¥Ë¥å¡¼¤ò¹¹¿·¤¹¤ë¤¿¤Ó¤Ë, ¥«¥ì¥ó¥À¡¼¤Ø¤Î 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)
+
+* ((<RD|URL:http://www2.pos.to/~tosh/ruby/rdtool/ja/>))¤ò»È¤¦¾ì¹ç:
+  ((<"¹ÔƬ¤Î * ¤Ç¥¨¥ó¥È¥ê¤Î³«ÊĤ¬¤Ç¤­¤ë¤è¤¦¤Ë"|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/237-238n>))
+
+* ¤ª¤Þ¤±
+    (setq howm-congrats-format
+          '(
+            "%s¥­¥¿¨¬¨¬¨¬¨¬¨¬(¡¬¢Ï¡¬)¨¬¨¬¨¬¨¬¨¬!!!!"
+            "(¡¦¢Ï¡¦) %s!"
+            "¡Ê¡ë§¥¡ë)%s¡©"
+            "¡Ê¡¡¡­_¡µ`¡Ë¡ã¡¡%s"
+            ;; ¡Ä°Ê²¼Î¬¡Ä
+            ))
+
+* ¤â¤Ã¤È¤¤¤í¤¤¤í¤¤¤¸¤ë¤Ë¤Ï, *.el ËÁƬ¤ò»²¾È
+
+= ¸Å¤¤»²¹Í¥ê¥ó¥¯
+
+* ((<Wiki|URL:http://c2.com/cgi/wiki>)):
+  web ¤Çï¤Ç¤âÊÔ½¸¡Ü¤ª¼ê·Ú¥ê¥ó¥¯¡Ü¤ª¼ê·Ú¥Õ¥©¡¼¥Þ¥Ã¥È
+  * ((<WikiModeDiscussion|URL:http://www.emacswiki.org/cgi-bin/wiki.pl/WikiModeDiscussion>))
+    (EmacsWiki): Emacs ¤Ç¤Î Wiki
+  * ((<RWiki-mode|URL:http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=rwiki-mode>))
+    (RWiki): RWiki ¤ò Emacs ¤«¤é»È¤¦°Æ
+  * ((<QP-Wiki|URL:http://pitecan.com/UnixMagazine/>))
+    (Áý°æ½ÓÇ·¤µ¤ó): PDA ¤Ç Wiki
+  * ((<HashedWiki|URL:http://www.google.com/search?q=hashedwiki>))
+    (SHIMADA Keiki ¤µ¤ó): ¥Ñ¥é¥°¥é¥Õ»Ø¸þ Wiki
+  * ((<ishinao ¤µ¤ó¤Î³Æ¼ï¥Ä¡¼¥ë|URL:http://ishinao.net/>)):
+    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>))
+    (¿ÀºêÀµ±Ñ¤µ¤ó)
+* ¥á¥â¤È¤ê´Ä¶­
+  * Ê¬Îऻ¤º, »þ´Ö½ç¤ÈÁ´Ê¸¸¡º÷¤Ç´ÉÍý
+    * ((<Q-Pocket|URL:http://pitecan.com/UnixMagazine/>))
+      (Áý°æ½ÓÇ·¤µ¤ó):
+      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>))
+      (ÍìÀ¾°ì¼þ¤µ¤ó): ÄêÈÖ
+    * ((<WeBoX|URL:http://webox.sakura.ne.jp/software/webox/>))
+      (Ãæ¼Áï»Ë¤µ¤ó): ¤¹¤´¤¯¤¤¤¤¤é¤·¤¤
+  * ¤½¤Î¾¤Î Emacs Íѥġ¼¥ë
+    * ((<notes-mode|URL:http://www.isi.edu/~johnh/SOFTWARE/NOTES_MODE/>))
+      (John Heidemann ¤µ¤ó):
+      link ¤ÎÊØÍø¤µ¤òÃΤê¤Þ¤·¤¿
+      * ((<notes-mode ¤È memo-mode ¤ÎÈæ³ÓÏÀ|URL:http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Programs/others/compare-notes-and-memo-mode.html>))
+        (À¾Ëܹ§»Ö¤µ¤ó)
+    * ((<memoma|URL:http://web.archive.org/web/20040803170229/http://www.jaist.ac.jp/~tetsu/memoma/memoma.html>))
+      (¸¶ÅÄů¼£¤µ¤ó): MH ·Á¼° ¢ª ¥á¡¼¥ë¥ê¡¼¥À¤Ç¤âÆɤá¤ë
+    * ((<Um4|URL:http://www.d4.dion.ne.jp/~usuda/emacs/index.html>))
+      (±±ÅÄÂó»Ë¤µ¤ó): ¤¤¤í¤¤¤íÊݸ¥á¥Ë¥å¡¼
+    * rd-memo
+      (ÀÛºî. ³«È¯½ªÎ» ¢ª ((<tar.gz|URL:http://howm.sourceforge.jp/a/rd-memo.tar.gz>)))
+      * ((<¡Ö¥³¥ó¥Ô¥å¡¼¥¿´Ä¶­¤Ç¤Î¥á¥â¡×|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 ´ØÏ¢
+    * °Ü¿¢
+      * ((<howm-mode.vim|URL:http://sworddancer.funkyboy.jp/howm_vim/>))
+        (¼·Åç¸ù°ì¤µ¤ó)
+        ((<¡Ü¦Á|URL:http://www.google.com/search?q=vim+howm+%82%AD%82%D3%82%F1>)): vim ÈÇ
+      * ((<howm-wrap|URL:http://homepage3.nifty.com/~ko-ji/>))
+        (kimura ¤µ¤ó)¤È
+        ((<howm-helper|URL:http://www.geocities.co.jp/Milano-Cat/2067/howm-init.html>))
+        (deecay ¤µ¤ó): xyzzy ÈÇ
+      * ((<howm.mac|URL:http://mrm.seesaa.net/category/789739.html>))
+        (Mr.M ¤µ¤ó)
+        ((<¡Ü¦Á|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?HideMaru>)): ½¨´ÝÈÇ
+    * ÉâÄÀ¼° todo ¥ê¥¹¥È
+      * ((<wikilog|URL:http://web.archive.org/web/20040308005605/http://koten.hypermart.net/wikilog_rc01.l>))
+        (Gonza ¤µ¤ó): xyzzy ¥¨¥Ç¥£¥¿ÍѤÎ, Wiki + ChangeLog ¥á¥â
+        ¢ª ((<·Ð°Þ|URL:http://pc2.2ch.net/test/read.cgi/win/1053880433/n29-36>))
+      * ((<howm¼°TODO´ÉÍýWEB¥¢¥×¥ê|URL:http://web.archive.org/web/20060128122538/http://www.lyricfathom.com/pukiwiki/pukiwiki.php?howm%BC%B0TODO%B4%C9%CD%FDWEB%A5%A2%A5%D7%A5%EA>))
+        (°¾À¤ó): PHP ¤Ç¤Î¼ÂÁõ
+      * ((<wema|URL:http://wema.sourceforge.jp/>))
+        (¤Õ¤·¤Ï¤é¤«¤ó¤µ¤ó): ÉÕäµ¥Ù¡¼¥¹¤Î Wiki Åª¤Ê¤â¤Î.
+        ÉÕäµ¼«ÂΤ¬¾å²¼¤Ë°ÜÆ°. Ã¦Ë¹.
+      * ((<LesserWiki|URL:http://lesserwiki.org/>))
+        (yatsu¤µ¤ó): Ajax ¤Ê Wiki
+      * ((<Whem|URL:http://www.n314.com/whem/?action=ExecLogin&mail=guest>))
+        (Nishimura¤µ¤ó): WebÍÑ¥Þ¥ë¥Á¥æ¡¼¥¶¥á¥â¥Ä¡¼¥ë. goto/come-from ¥ê¥ó¥¯¤¢¤ê.
+* ¤ªµ¤¤Ë¤¤¤ê
+  * ((<memo-mode|URL:http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Programs/>))
+    (OSHIRO Naoki ¤µ¤ó): ²Õ¾ò½ñ¤­»Ù±ç. ¤Ù¤¿¤Ü¤ì.
+  * ((<get-date|URL:http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Programs/>))
+    (OSHIRO Naoki ¤µ¤ó): º£Æü¤ÎÆüÉÕ¤òÈ¿¼ÍŪ¤ËÆþÎÏ. ¤Ù¤¿¤Ü¤ì.
+  * ((<migemo|URL:http://migemo.namazu.org/>))
+    (¹âÎÓů¤µ¤ó): ¥í¡¼¥Þ»ú¤òÆþ¤ì¤ë¤À¤±¤ÇÆüËܸì¤â¸¡º÷. °¦ÍÑ.
+  * ((<rdtool|URL:http://www.google.com/search?q=rdtool>))
+    (Tosh¤µ¤ó): ¤³¤Î README ¤Ç»È¤Ã¤Æ¤ë¥É¥­¥å¥á¥ó¥È¥Õ¥©¡¼¥Þ¥Ã¥È. °¦ÍÑ.
+  * ((<elscreen|URL:http://www.morishima.net/~naoto/j/software/elscreen/>))
+    (Naoto Morishima¤µ¤ó): GNU screen ¤Î Emacs ÈÇ. °¦ÍÑ.
+
+=end
diff --git a/doc/README-j.html b/doc/README-j.html
new file mode 100644 (file)
index 0000000..890bcf1
--- /dev/null
@@ -0,0 +1,1805 @@
+<?xml version="1.0" ?>
+<!DOCTYPE html 
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>README.ja.rd</title>
+</head>
+<body>
+<h1><a name="label-0" id="label-0">howm (°ì¿Í¤ª¼ê·Ú Wiki ¤â¤É¤­)</a></h1><!-- RDLabel: "howm (°ì¿Í¤ª¼ê·Ú Wiki ¤â¤É¤­)" -->
+<p>$Id: README.ja.rd,v 1.337 2012-12-29 00:59:48 hira Exp $</p>
+<p>Emacs ¤ÇÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó¤È¤ë¤¿¤á¤Î´Ä¶­¤Ç¤¹.
+ʬÎൡǽ¤Ï¤¢¤¨¤Æ¤Ä¤±¤Þ¤»¤ó.
+¤«¤ï¤ê¤Ë, Á´Ê¸¸¡º÷¤È¥á¥â´Ö¥ê¥ó¥¯¤¬¼ê·Ú¤Ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿.
+¼«Í³½ñ¼°¤Ê¤Î¤Ç²þ½¡¤âÉÔÍ× :-)</p>
+<h2><a name="label-1" id="label-1">Ìܼ¡</a></h2><!-- RDLabel: "Ìܼ¡" -->
+<ul>
+<li><a href="#label-2">»È¤¤Êý</a> ¡Ä
+  <a href="#label-3">¥á¥â¤ò½ñ¤³¤¦</a>¡¿<a href="#label-4">¥á¥â¤òÆɤ⤦</a>¡¿<a href="#label-5">¥ê¥Þ¥¤¥ó¥À</a></li>
+<li><a href="#label-6">ƳÆþË¡</a> ¡Ä
+  <a href="#label-7">¥¤¥ó¥¹¥È¡¼¥ë</a>¡¿<a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>¡¿<a href="#label-12">³°Éô¥Ä¡¼¥ë</a></li>
+<li><a href="#label-13">¼ÂÁõ</a> ¡Ä
+  <a href="#label-14">¼ÂÁõ¤Ë¤Ä¤¤¤Æ</a>¡¿<a href="#label-15">Æ°¤­¤Þ¤»¤ó¤è?</a></li>
+<li><a href="#label-16">È÷¹Í</a> ¡Ä
+  <a href="#label-17">»²¹Í</a>¡¿<a href="#label-18">¹¹¿·µ­Ï¿</a>¡¿<a href="#label-19">¥¢¥É¥ì¥¹</a></li>
+</ul>
+<h2><a name="label-2" id="label-2">»È¤¤Êý</a></h2><!-- RDLabel: "»È¤¤Êý" -->
+<ul>
+<li>¤¤¤í¤¤¤í¤¢¤ê¤¹¤®¤Æ²¿¤¬²¿¤ä¤é
+  ¢ª Àè¤Ë<a href="TUTORIAL.ja.rd">¥Á¥å¡¼¥È¥ê¥¢¥ë</a>¤ò¤É¤¦¤¾</li>
+<li>¼«Í³ÅÙ¤¢¤ê¤¹¤®¤Æ¤É¤¦»È¤¨¤Ð¤¤¤¤¤ä¤é
+  ¢ª <a href="index-j.html#hint">¤³¤ó¤Ê¤Õ¤¦¤Ë»È¤¨¤Þ¤¹</a></li>
+</ul>
+<h3><a name="label-3" id="label-3">¥á¥â¤ò½ñ¤³¤¦</a></h3><!-- RDLabel: "¥á¥â¤ò½ñ¤³¤¦" -->
+<p>(howm-mode)</p>
+<ul>
+<li>¼ê½ç
+<ul>
+<li>C-c , , (M-x howm-menu) ¤Ç¥á¥Ë¥å¡¼¤ò½Ð¤·,
+    [¿·µ¬] ¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó ¢ª ¡Öº£Æü¤Î¥á¥â¡×¤ò³«¤¯
+<ul>
+<li>¤Þ¤¿¤Ï, Ä¾ÀÜ C-c , c (M-x howm-create)</li>
+</ul></li>
+<li><p>¤³¤ó¤Ê¥Æ¥ó¥×¥ì¡¼¥È¤¬É½¼¨¤µ¤ì¤ë</p>
+<pre>= ¢£ ¢«(¥¿¥¤¥È¥ëÍó)
+[2002-09-16 20:08] &gt;&gt;&gt; /home/hira/elisp/howm/howm-mode.el
+¢¬(ºîÀ®Æü &amp; ¤½¤ÎÁ°¤Ë¸«¤Æ¤¿¥Õ¥¡¥¤¥ë)</pre>
+<ul>
+<li>¸«¤Æ¤¿¥Õ¥¡¥¤¥ë¤¬ÉÔÍפʤé, undo (C-x u ¤À¤« C-_ ¤À¤«) ¤Ç¾Ã¤¹</li>
+<li>¥Æ¥ó¥×¥ì¡¼¥È¼«ÂΤ¬ÉÔÍפʤé, Â³¤±¤Æ¤â¤¦°ìÅÙ undo</li>
+</ul></li>
+<li>¹¥¤­¤Ê¤³¤È¤ò¹¥¤­¤Ê¤è¤¦¤Ë½ñ¤¯</li>
+<li>¤½¤ó¤À¤±.</li>
+</ul></li>
+<li>¥¿¥¤¥È¥ëÍó (1 ¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â)
+<ul>
+<li><p>¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤È, foo ¤È bar ¤¬¥¿¥¤¥È¥ë</p>
+<pre>= foo
+(¡Ä ¤Û¤²¤Û¤² ¡Ä)
+= bar
+(¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä)</pre>
+<ul>
+<li>Ï¢·ëɽ¼¨¤Ç¤Ï, (¡Ä ¤Û¤²¤Û¤² ¡Ä) ¤ä (¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä) ¤¬¤Ò¤È¤«¤¿¤Þ¤ê</li>
+</ul></li>
+<li><p>Àµ³Î¤Ê½ñ¼°¤Ï,</p>
+<pre>(¹ÔƬ)=(¶õÇò)(¥¿¥¤¥È¥ë)(¹ÔËö)</pre>
+<ul>
+<li>½ñ¼°¤ÏÊѹ¹²Ä (¢ª<a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>)</li>
+</ul></li>
+<li><p>¥¿¥¤¥È¥ë¤Ê¤·¤Ç, Ã±¤Ë¥á¥â¤Î¶èÀÚ¤ê¤È¤·¤Æ»È¤¦¤À¤±¤Ç¤â OK</p>
+<pre>(¡Ä ¤Û¤²¤Û¤² ¡Ä)
+= 
+(¡Ä ¤Õ¤¬¤Õ¤¬ ¡Ä)
+= 
+(¡Ä ¤Ø¤í¤Ø¤í ¡Ä)</pre></li>
+</ul></li>
+<li>¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤È¥ê¥ó¥¯
+<ul>
+<li><p>goto ¥ê¥ó¥¯: ¥Õ¥¡¥¤¥ë(¥Ç¥£¥ì¥¯¥È¥ê)̾ or ´Þ¤Þ¤ì¤ëʸ»úÎó</p>
+<pre>&gt;&gt;&gt; ~/.emacs
+&gt;&gt;&gt; /usr/src
+&gt;&gt;&gt; ¤Û¤²¤Û¤²</pre>
+<ul>
+<li>ËÜʸÃæ¤Ë¡Ö¤Û¤²¤Û¤²¡×¤È¤¤¤¦Ê¸»úÎó¤ò´Þ¤à¥á¥â¤Ø¤Î¥ê¥ó¥¯</li>
+</ul></li>
+<li><p>come-from ¥ê¥ó¥¯: Â¾¤Î¥á¥â¤Ç¡Ö¤Õ¤¬¤Õ¤¬¡×¤È¤¤¤¦Ê¸»úÎ󤬽ФƤ­¤¿¤é,
+    ¤¼¤ó¤Ö¤³¤Î¥á¥â¤Ø¤Î¥ê¥ó¥¯¤Ë</p>
+<pre>&lt;&lt;&lt; ¤Õ¤¬¤Õ¤¬</pre>
+<ul>
+<li>»²¹Í
+      <a href="http://catb.org/~esr/jargon/html/C/COME-FROM.html">Jargon: COME-FROM</a></li>
+</ul></li>
+<li><p>Wiki É÷¥ê¥ó¥¯: goto ¤ÈƱ¤¸. ¤¿¤À¤·¡Ö&lt;&lt;&lt; ¤Ø¤í¤Ø¤í¡×¤¬¤â¤·¤Ê¤±¤ì¤Ðºî¤ë.</p>
+<pre>[[¤Ø¤í¤Ø¤í]]</pre></li>
+</ul></li>
+<li>¥ê¥ó¥¯¤Ë¤Ï²¼Àþ¤¬°ú¤«¤ì¤ë. ²¼Àþ¤Ë¥«¡¼¥½¥ë»ý¤Ã¤Æ¤Ã¤Æ¥ê¥¿¡¼¥ó¥­¡¼!
+<ul>
+<li>³ºÅö¥Õ¥¡¥¤¥ë¤Î°ìÍ÷¤¬É½¼¨¤µ¤ì¤ë (¢ª<a href="#label-4">¥á¥â¤òÆɤ⤦</a>)
+<ul>
+<li><p>¤¿¤È¤¨¤Ð, ¡Ö&gt;&gt;&gt; emacs¡×¤Ê¤é¤³¤ó¤Ê°ìÍ÷</p>
+<pre>&lt;&lt;&lt; emacs             ¢« ¤º¤Ð¤ê¤Î come-from Àë¸À¤ò¤·¤¿¥á¥â
+&lt;&lt;&lt; emacs lisp        ¢« ¡Öemacs¡×¤ò´Þ¤à come-from ¤òÀë¸À¤·¤¿¥á¥â
+&lt;&lt;&lt; ¼«ºî emacs lisp
+grep, ruby, emacs ¤Î regexp ¤Î°ã¤¤ ¢« ËÜʸÃæ¤Ë¡Öemacs¡×¤ò´Þ¤à¥á¥â
+emacs ÍѸ¡º÷¥Ä¡¼¥ë?[2001-08-13]       (¿·¤·¤¤½ç)
+¡Ä</pre></li>
+<li>Æɤߤ¿¤¤¥á¥â¤Ë¥«¡¼¥½¥ë¤¢¤ï¤»¤Æ¥ê¥¿¡¼¥ó¥­¡¼!
+      ¢ª ¤½¤Î¥á¥â¤ò³«¤¯</li>
+</ul></li>
+<li>΢µ»
+<ul>
+<li>come-from ¥ê¥ó¥¯¤Î &lt;&lt;&lt; ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¡Ö´ØÏ¢¥­¡¼¥ï¡¼¥É¡×¤Ø¤Î¥ê¥ó¥¯
+<ul>
+<li>Îã
+<ul>
+<li>¡Ö¼«ºî¡×¡Ölisp¡×¤¬ come-from ¥­¡¼¥ï¡¼¥É¤Î¤È¤­</li>
+<li>¡Ö&lt;&lt;&lt; ¼«ºî¤Î lisp¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó
+          ¢ª ¡Ö¼«ºî¡×¡Ölisp¡×¤ò´Þ¤à¥­¡¼¥ï¡¼¥É¤¬¥Ò¥Ã¥È</li>
+</ul></li>
+</ul></li>
+<li>¥á¥âÃæ¤Ë¡Ö&lt;&lt;&lt; foo &lt;&lt;&lt; bar &lt;&lt;&lt; baz¡×¤È½ñ¤±¤Ð, ¡Öalias¡×
+<ul>
+<li>foo, bar, baz ¤Î¤É¤ì¤Ç¥ê¥¿¡¼¥ó¤òᤤ¤Æ¤â
+        ¡Öfoo ¤Þ¤¿¤Ï bar ¤Þ¤¿¤Ï baz¡×¤Î¸¡º÷¤Ë¤Ê¤ê¤Þ¤¹</li>
+<li>Tips: ¸ß¤¤¤Ë¤¿¤°¤ê¤¿¤¤¤±¤É alias ¤Çº®¤¼¤ë¤Î¤Ï·ù, ¤È¤¤¤¦¾ì¹ç¤Ë¤Ï¡Ä
+<ul>
+<li>¤É¤³¤«¤Ë¡Ö&lt;&lt;&lt; foo¡×</li>
+<li>Ê̤Τɤ³¤«¤Ë¡Öfoo &lt;&lt;&lt; bar¡×</li>
+<li>¤³¤¦¤¹¤ì¤Ð, foo¡¦bar ¤É¤Á¤é¤Ç¸¡º÷¤·¤Æ¤â¡Öfoo &lt;&lt;&lt; bar¡×¤¬¾å°Ì¤Ë</li>
+</ul></li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>¥ê¥ó¥¯¤Î¿¿Áê
+<ul>
+<li>¼Â¤Ïñ¤Ë, ¡Ögrep ¤Õ¤¬¤Õ¤¬¡×¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤À¤Ã¤¿¤ê</li>
+<li>come-from ¥ê¥ó¥¯¤Î¸ú²Ì
+<ul>
+<li>¤³¤Î¥­¡¼¥ï¡¼¥É¤¬½Ð¤Æ¤­¤¿¤é, ¼«Æ°Åª¤Ë¥ê¥ó¥¯(= ¸¡º÷)¤Ë¤·¤Æ¤¯¤ì</li>
+<li>¤½¤Î¥­¡¼¥ï¡¼¥É¤ò¸¡º÷¤·¤¿¤È¤­¤Ï, ÀèƬ¤Ëɽ¼¨¤·¤Æ¤¯¤ì</li>
+</ul></li>
+<li>come-from ¥ê¥ó¥¯¤Ï¡Ä
+<ul>
+<li>¤Ê¤¯¤Æ¤â¤è¤·</li>
+<li>1 ¤Ä¤Î¥á¥âÆâ¤Ë 2 ¸Ä 3 ¸Ä¤È¤¢¤Ã¤Æ¤â¤è¤·</li>
+<li>Ê̤Υá¥â¤ÈƱ¤¸¥­¡¼¥ï¡¼¥É¤¬¤«¤Ö¤Ã¤Æ¤â¤è¤·</li>
+<li><p>¥¿¥¤¥È¥ë¤È·ó¤Í¤ë¤Ê¤é,</p>
+<pre>= &lt;&lt;&lt; ¤Õ¤¬¤Õ¤¬</pre></li>
+</ul></li>
+<li>come-from, goto ¤È¤â, Âçʸ»ú¾®Ê¸»ú¤ò¶èÊÌ (¢ª<a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>)</li>
+<li>½ñ¼°¤ÏÊѹ¹²Ä (¢ª<a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>)</li>
+<li>°Ê²¼, come-from ¥ê¥ó¥¯¤Î¥­¡¼¥ï¡¼¥É¤òñ¤Ë¡Ö¥­¡¼¥ï¡¼¥É¡×¤Èɽµ­</li>
+</ul></li>
+<li>action-lock
+<ul>
+<li>¼öʸ¤Î¾å¤Ç¥ê¥¿¡¼¥ó¥­¡¼¤¿¤¿¤¯¤ÈËâˡȯư</li>
+<li>{ } ¤È½ñ¤¯¤È¡Ö¥È¥°¥ë¥¹¥¤¥Ã¥Á¡×.
+    ¤¿¤¿¤¯¤¿¤ó¤Ó¤Ë { } ¢ª {*} ¢ª {-} ¢ª { } ¢ª ¡Ä</li>
+<li>{_} ¤È½ñ¤¯¤È¡Ö̤½èÍý¡×.
+    ¤¿¤¿¤±¤Ð {_} ¢ª [2002-09-13 02:31]</li>
+<li>http://¡Ä ¢ª ¥Ö¥é¥¦¥¶µ¯Æ°
+<ul>
+<li><p>browse-url ¤ò»ÈÍÑ. É¬ÍפʤéŬÅö¤ËÀßÄê.</p>
+<pre>(setq browse-url-browser-function 'browse-url-mozilla)</pre></li>
+</ul></li>
+<li>file://¡Ä ¢ª ¥Õ¥¡¥¤¥ë¤ò³«¤¯
+<ul>
+<li>C-u RET ¤Ê¤éÁë¤òʬ³ä¤·¤Æ³«¤¯</li>
+</ul></li>
+<li>[2002-10-18] ¤Î¤è¤¦¤ÊÆüÉÕ·Á¼°¤Î¾å¤Ç¥ê¥¿¡¼¥ó ¢ª minibuffer ¤Ç¡Ä
+<ul>
+<li>¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¤½¤ÎÆüÉÕ¤ò¸¡º÷ (goto link)</li>
+<li>¡Ö+17¡× ¢ª 17 Æü¸å¤ÎÆüÉդ˽ñ¤­¤«¤¨</li>
+<li>¡Ö20030921¡× ¢ª [2003-09-21] ¤Ë½ñ¤­¤«¤¨
+<ul>
+<li>ǯ¤ä·î¤Ï¾Êά²Äǽ
+<ul>
+<li>¡Ö6¡× ¢ª [2002-10-06]</li>
+<li>¡Ö803¡× ¢ª [2002-08-03]</li>
+<li>¡Ö31103¡× ¢ª [2003-11-03]</li>
+</ul></li>
+</ul></li>
+<li>¡Ö~20031030¡× ¢ª ¤½¤Î¹Ô¤ÎÊ£À½¤ò [2003-10-30] Ê¬¤Þ¤ÇÁÞÆþ
+<ul>
+<li>ǯ¤ä·î¤Ï¾Êά²Äǽ (¾å¤ÈƱÍÍ)</li>
+<li>¡ÖEvery?¡×¤ËÂФ·¤Æ
+<ul>
+<li>¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ËèÆü</li>
+<li>3 ¢ª 3Æü¤´¤È</li>
+<li>w ¢ª Ëè½µ</li>
+<li>m ¢ª Ëè·î</li>
+<li>y ¢ª Ëèǯ</li>
+</ul></li>
+</ul></li>
+<li>¡Ö.¡× ¢ª º£Æü¤ÎÆüÉդ˽ñ¤­¤«¤¨</li>
+<li>¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤Î [Æü¢­] ¤ÇÆüÉÕ·Á¼°¤òÆþÎϤǤ­¤Þ¤¹</li>
+</ul></li>
+<li>¥ê¥ó¥¯¤â¤³¤Î¼öʸ¤Î°ì¼ï
+<ul>
+<li>¾¤Ë¤ª¤â¤·¤í¤¤¥¢¥¤¥Ç¥¢¤¢¤Ã¤¿¤é¶µ¤¨¤Æ¤¯¤À¤µ¤¤</li>
+</ul></li>
+</ul></li>
+<li>¥³¥Þ¥ó¥É (¡ú¤Ï howm-mode °Ê³°¤Ç¤â¾ï¤ËÍ­¸ú)
+<ul>
+<li>C-c , , ¢ª ¥á¥Ë¥å¡¼¤ò³«¤¯ ¡ú</li>
+<li>¥á¥Ë¥å¡¼
+<ul>
+<li>¥­¡¼
+<ul>
+<li>[space] ¤È [backspace] ¢ª ¥¹¥¯¥í¡¼¥ë</li>
+<li>TAB (M-TAB) ¢ª ¼¡(Á°)¤Î¹àÌܤØ</li>
+<li>[¡û¡û] ¤ä &gt; ¤Î¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼Â¹Ô (¥¸¥ã¥ó¥×)</li>
+<li>? ¢ª ¥Ø¥ë¥×</li>
+<li>q ¢ª Ã¦½Ð</li>
+</ul></li>
+<li>¥Ü¥¿¥ó [¡û¡û] (¥³¥Þ¥ó¥É)
+<ul>
+<li>ºîÀ®
+<ul>
+<li>[®µ­] (C-c , e) ¢ª ¤Ñ¤Ñ¤Ã¤È¥á¥â¤È¤ê (C-c C-c ¤ÇÊݸ) ¡ú</li>
+<li>[¿·µ¬] (C-c , c) ¢ª ¿·µ¬¥á¥âºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë) ¡ú</li>
+<li>[Ê£À½] (C-c , D) ¢ª ¸½¥á¥â¤òÊ£À½ (½»½êÏ¿¥Æ¥ó¥×¥ì¡¼¥È¤Ê¤É¤ÎÍÑÅÓ¤òÁÛÄê)</li>
+</ul></li>
+<li>°ìÍ÷
+<ul>
+<li>[°ìÍ÷] (C-c , a) ¢ª Á´¥á¥â¤Î°ìÍ÷ ¡ú</li>
+<li>[ºÇ¶á] (C-c , l) ¢ª ºÇ¶á¤Î¥á¥â¤ÎÏ¢·ëɽ¼¨ ¡ú
+<ul>
+<li>(C-u 20 C-c , l) ¢ª ºÇ¶á 20 Æüʬ¤Î°ìÍ÷</li>
+</ul></li>
+<li>[Á°¸å] (C-c , A) ¢ª Á°¸å¤Î¥á¥â (¸«¤Æ¤¿¥á¥â¤òÃæ¿´¤ËÁ´¥á¥â¤ÎÆüÉÕ½ç°ìÍ÷)
+<ul>
+<li>Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È</li>
+</ul></li>
+<li>[ÍúÎò] (C-c , h) ¢ª ¸¡º÷ÍúÎò ¡ú</li>
+<li>[ͽÄê] (C-c , y) ¢ª Í½Äêɽ: <a href="#label-5">¥ê¥Þ¥¤¥ó¥À</a>»²¾È ¡ú</li>
+<li>[Todo] (C-c , t) ¢ª todo °ìÍ÷: <a href="#label-5">¥ê¥Þ¥¤¥ó¥À</a>»²¾È ¡ú</li>
+<li>[Á´¥Ð] (C-c , b) ¢ª ¥Ð¥Ã¥Õ¥¡°ìÍ÷ ¡ú</li>
+<li>[mark] (C-c , x) ¢ª ¥Ð¥Ã¥Õ¥¡Æâ¤Î¥Þ¡¼¥¯°ÌÃÖ°ìÍ÷ ¡ú</li>
+</ul></li>
+<li>¸¡º÷
+<ul>
+<li>[Àµµ¬] (C-c , g) ¢ª Àµµ¬É½¸½¤Î¸¡º÷ ¡ú
+<ul>
+<li>´ðËÜŪ¤Ë¤ÏÂçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ʤ·
+<ul>
+<li>¡ÖWiki¡×¤Î¤è¤¦¤ËÌÀ¼¨Åª¤ËÂçʸ»ú¤ò»ØÄꤷ¤¿¤È¤­¤Ï¶èÊÌ</li>
+</ul></li>
+</ul></li>
+<li>[¸ÇÄê] (C-c , s) ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸ÇÄêʸ»úÎó¤Î¸¡º÷ ¡ú
+<ul>
+<li>C-u C-c , g ¤ä C-u C-c , m ¤Ç¤â</li>
+</ul></li>
+<li>[roma] (C-c , m) ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo) ¡ú</li>
+<li>[º£Æü] (C-c , .) ¢ª º£Æü¤Î¥á¥â ¡ú
+<ul>
+<li>(C-u 20 C-c , .) ¢ª 20 ÆüÁ°¤Î¥á¥â</li>
+</ul></li>
+<li>[ºòÆü] (C-c , :) ¢ª ºòÆü¤Î¥á¥â ¡ú
+<ul>
+<li>(C-u 20 C-c , :) ¢ª 20 ÆüÁ°¤Î¥á¥â</li>
+</ul></li>
+<li>[¥ÐÆâ] (C-c , o) ¢ª ¥Ð¥Ã¥Õ¥¡Æâ¤òÀµµ¬É½¸½¸¡º÷ ¡ú</li>
+</ul></li>
+<li>ÊÔ½¸: Âоݥե¡¥¤¥ë¤ò(ÊÔ½¸¥â¡¼¥É¤Ç)³«¤¤¤¿¾õÂÖ¤«¤é¥á¥Ë¥å¡¼¤ò¸Æ¤Ö¤³¤È
+<ul>
+<li>[¹¹¿·] (C-c , r) ¢ª ²¼Àþ¤ò°ú¤­¤Ê¤ª¤¹</li>
+<li>[¸°¢­] (C-c , i) ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤ÆŽ¤ê¤Ä¤± ¡ú
+<ul>
+<li>Tips: M-v ¤Ç¸õÊä°ìÍ÷¤Ë°Ü¤Ã¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú</li>
+</ul></li>
+<li>[Æü¢­] (C-c , d) ¢ª º£Æü¤ÎÆüÉÕ [yyyy-mm-dd] ¤òŽ¤ê¤Ä¤± ¡ú</li>
+<li>[»þ¢­] (C-c , T) ¢ª º£Æü¤ÎÆü»þ [yyyy-mm-dd HH:MM] ¤òŽ¤ê¤Ä¤± ¡ú</li>
+<li>[Âꢬ] (C-c , K) ¢ª ¸½¥á¥â¤Î¥¿¥¤¥È¥ë¤ò kill ring ¤Ø (C-y ¤ÇŽ¤ê¤Ä¤±) ¡ú
+<ul>
+<li>¥¿¥¤¥È¥ë¤¬¤ß¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ï¥Õ¥¡¥¤¥ë̾</li>
+</ul></li>
+<li>[̾¢¬] (C-u C-c , K) ¢ª ¥Õ¥¡¥¤¥ë̾¤ò kill ring ¤Ø ¡ú</li>
+</ul></li>
+<li>ÆÃÊÌ
+<ul>
+<li>[menu ¹¹¿·] (R) ¢ª ¥á¥Ë¥å¡¼¤ÎͽÄêɽ¤Ê¤É¤ò¹¹¿·</li>
+<li>[menu ÊÔ½¸] ¢ª ¥á¥Ë¥å¡¼¤òÊÔ½¸</li>
+<li>[Á´¾Ã] (C-c , Q) ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯) ¡ú</li>
+<li>[¿ìÊâ] (C-c , w) ¢ª ¥é¥ó¥À¥à¤Ë¥ê¥ó¥¯¤ò¤¿¤É¤Ã¤Æ¼«Æ°±ÜÍ÷. C-g ¤ÇÄä»ß. ¡ú</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>¤½¤Î¾
+<ul>
+<li>[return] ¢ª ¥ê¥ó¥¯¾å¤Ê¤é³ºÅö¥Õ¥¡¥¤¥ë¤ò³«¤¯. ¤µ¤â¤Ê¤¯¤Ð²þ¹Ô.</li>
+<li>°ÜÆ°
+<ul>
+<li>C-c , n ¢ª ¼¡¤Î¥ê¥ó¥¯¤Ø</li>
+<li>C-c , p ¢ª Á°¤Î¥ê¥ó¥¯¤Ø</li>
+<li>°ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¡Ä
+<ul>
+<li>C-c , N ¢ª ¼¡¤Î¥á¥â¤Ø</li>
+<li>C-c , P ¢ª Á°¤Î¥á¥â¤Ø</li>
+<li>C-c , H ¢ª ºÇ½é¤Î¥á¥â¤Ø</li>
+<li>C-c , L ¢ª ºÇ¸å¤Î¥á¥â¤Ø</li>
+</ul></li>
+</ul></li>
+<li>¿·µ¬¥á¥â
+<ul>
+<li>C-c , C ¢ª ¤¤¤Þ³«¤¤¤Æ¤ë¥Õ¥¡¥¤¥ë¤ËÄɲÃ
+<ul>
+<li>¥á¥Ë¥å¡¼¤Ë [ÄɲÃ] ¤È½ñ¤¯¤È, ¤³¤ÎÆ°ºî¤Î¥Ü¥¿¥ó.
+          ±Ñ¸ì¥á¥Ë¥å¡¼¤Ê¤é [Add].</li>
+</ul></li>
+<li>C-c , I ¢ª ¥Õ¥¡¥¤¥ë̾¤ò¼êÆ°¤Ç (Èó¿ä¾©)
+<ul>
+<li>C-u C-c , I ¤Ê¤é, ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë</li>
+</ul></li>
+</ul></li>
+<li>narrow (1 ¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­)
+<ul>
+<li>M-x howm-narrow-to-memo ¢ª Á°¸å¤Î¥á¥â¤ò±£¤¹. Ì᤹¤Ë¤Ï M-x widen</li>
+<li>M-x howm-toggle-narrow ¢ª ¡Ö±£¤¹¡×¡Ö¸«¤»¤ë¡×¤ò¥È¥°¥ë</li>
+</ul></li>
+<li>C-c , SPC ¢ª howm ¤Ê¥Ð¥Ã¥Õ¥¡¤È howm ¤Ç¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤È¤òÀÚ¤êÂؤ¨ ¡ú</li>
+<li>M-x howm-show-buffer-as-howm ¢ª ¸½¥Ð¥Ã¥Õ¥¡¤Î¥³¥Ô¡¼¤ò howm-mode ¤Çɽ¼¨ ¡ú
+<ul>
+<li>¼ûÍ×ÉÔÌÀ¤Ê¤Î¤ÇÍͻҸ«[2003-09-29]</li>
+</ul></li>
+</ul></li>
+</ul></li>
+</ul>
+<h3><a name="label-4" id="label-4">¥á¥â¤òÆɤ⤦</a></h3><!-- RDLabel: "¥á¥â¤òÆɤ⤦" -->
+<p>(°ìÍ÷¥â¡¼¥É)</p>
+<ul>
+<li>¥³¥Þ¥ó¥É(ºÆ·Ç)
+<ul>
+<li>C-c , , (M-x howm-menu) ¢ª ¥á¥Ë¥å¡¼</li>
+<li>C-c , a (M-x howm-list-all) ¢ª Á´¥á¥â°ìÍ÷</li>
+<li>C-c , g (M-x howm-list-grep) ¢ª Á´¥á¥â¸¡º÷ (Àµµ¬É½¸½)</li>
+<li>C-c , s (M-x howm-list-grep-fixed) ¢ª Á´¥á¥â¸¡º÷ (¸ÇÄꥭ¡¼¥ï¡¼¥É)</li>
+</ul></li>
+<li>¸¡º÷¤ä¥ê¥ó¥¯¥¸¥ã¥ó¥×¤ò¤¹¤ë¤È, °ìÍ÷¥â¡¼¥É
+<ul>
+<li>¥Ç¥Õ¥©¥ë¥È¤Ï°ìÍ÷ɽ¼¨
+<ul>
+<li>°ìÍ÷¥Ð¥Ã¥Õ¥¡ + ÆâÍƥХåե¡</li>
+<li>¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤ÎÆâÍƤ¬É½¼¨¤µ¤ì¤ë</li>
+</ul></li>
+<li>Ï¢·ëɽ¼¨¤â¤Ç¤­¤ë
+<ul>
+<li>@ ¤ÇÏ¢·ëɽ¼¨. ¤â¤¦°ìÅÙ @ ¤Ç°ìÍ÷ɽ¼¨¤ËÌá¤ë.</li>
+<li>¥Ò¥Ã¥È¤·¤¿¥á¥â¤ÎÆâÍƤò¤¼¤ó¤Ö¤Ä¤Ê¤²¤Æɽ¼¨
+<ul>
+<li>ÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó½ñ¤¯ ¢ª ¤Ä¤Ê¤²¤ÆÆɤà</li>
+</ul></li>
+<li>[tab] ¤È [alt]-[tab] ¤Ç¼¡/Á°¤Î¥á¥â¤Ø</li>
+<li>Tips: ¥á¥â¤òõ¤¹¤È¤­, ¸¡º÷¤Ç¤¢¤ëÄøÅÙ¤·¤Ü¤ê¤³¤ó¤À¤é,
+      Ï¢·ëɽ¼¨¤·¤Æ migemo ¸¡º÷¤¹¤ë¤È³Ú</li>
+</ul></li>
+<li>°ìÍ÷ɽ¼¨¤Ç
+<ul>
+<li>0 ¢ª Ï¢·ëɽ¼¨¤Î¥È¥°¥ë (@ ¤ÈƱ¤¸)</li>
+<li>1 ¢ª ÆâÍƥХåե¡¤ò¾Ã¤¹</li>
+<li>2 ¢ª ÆâÍƥХåե¡¤ò½Ð¤¹</li>
+<li>v ¢ª ÆâÍƥХåե¡¤ò¥È¥°¥ë</li>
+<li>TAB, M-TAB ¢ª ¼¡¡¦Á°¤Î¥Õ¥¡¥¤¥ë¤Ø</li>
+<li>T ¢ª ¥¿¥¤¥È¥ëɽ¼¨¤ò¥È¥°¥ë</li>
+</ul></li>
+<li>¤É¤Á¤é¤Îɽ¼¨¤Ç¤â
+<ul>
+<li>n ¤È p ¢ª ¾å²¼</li>
+<li>[space] ¤È [backspace] ¢ª ¥¹¥¯¥í¡¼¥ë</li>
+<li>j ¤È k ¢ª °ì¹Ô¥¹¥¯¥í¡¼¥ë</li>
+<li>[return] ¢ª ¥«¡¼¥½¥ë°ÌÃ֤Υá¥â¤ò³«¤¯
+<ul>
+<li>C-u ¤·¤Æ [return] ¢ª ¥á¥â¤ò³«¤¤¤Æ°ìÍ÷¤ò¾Ã¤¹</li>
+</ul></li>
+<li>X ¢ª Dired-X ¤òµ¯Æ° (²þ̾¡¦ºï½ü¤Ê¤É¤Î¥Õ¥¡¥¤¥ëÁàºî)
+<ul>
+<li><p>Dired-X ¤Î»È¤¤Êý¤Ï, info dired-x Åù¤ò»²¾È</p>
+<pre>v ¢ª Ãæ¿È¤ò¸«¤ë (q ¢ª Ìá¤ë)
+d ¢ª ¡Ö¾Ã¤¹¤¾¡×¥Þ¡¼¥¯
+x ¢ª ¥Þ¡¼¥¯¤·¤¿¥Õ¥¡¥¤¥ë¤¿¤Á¤òËÜÅö¤Ë¾Ã¤¹</pre></li>
+</ul></li>
+<li>? ¢ª ¥Ø¥ë¥×</li>
+<li>q ¢ª Ã¦½Ð</li>
+</ul></li>
+</ul></li>
+<li>¥½¡¼¥È
+<ul>
+<li>S ¢ª ²¿¤Ç¥½¡¼¥È¤¹¤ë¤«Ê¹¤¤¤Æ¤¯¤ë (Êä´°ÆþÎÏ)
+<ul>
+<li>name: ¥Õ¥¡¥¤¥ë̾</li>
+<li>name-match: »ØÄꤷ¤¿¥Õ¥¡¥¤¥ë̾¤ò¾å°Ì¤Ë°Ü¤¹</li>
+<li>date: ºîÀ®Æü</li>
+<li>mtime: ¹¹¿·»þ¹ï</li>
+<li>summary: °ì¹Ôɽ¼¨¤Îʸ»úÎó</li>
+<li>summary-match: »ØÄꤷ¤¿Àµµ¬É½¸½¤ò°ì¹Ôɽ¼¨¤«¤é¸¡º÷¤·¤Æ, ¾å°Ì¤Ë°Ü¤¹</li>
+<li>summary-match-string: Æ±¾å + ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó½ç¤Ë¥½¡¼¥È</li>
+<li>random: ¥é¥ó¥À¥à¥·¥ã¥Ã¥Õ¥ë</li>
+<li>reminder: ¥ê¥Þ¥¤¥ó¥À½ç</li>
+<li>numerical-name: ¥Õ¥¡¥¤¥ë̾ (¿ô»ú½ç. ¥á¡¼¥ë¤Î¥½¡¼¥È¤òÁÛÄê)</li>
+<li>reverse: ¸½É½¼¨¤ÎµÕ½ç</li>
+</ul></li>
+<li>C-u S ¤Ê¤é¥Ç¥Õ¥©¥ë¥È¤ÎµÕ½ç</li>
+<li>R ¢ª reverse</li>
+</ul></li>
+<li>¹Ê¤ê¤³¤ß (and ¸¡º÷)
+<ul>
+<li>f ¢ª ²¿¤Ç¹Ê¤ê¤³¤à¤«Ê¹¤¤¤Æ¤¯¤ë (Êä´°ÆþÎÏ)
+<ul>
+<li>name: ¥Õ¥¡¥¤¥ë̾</li>
+<li>date: ºîÀ®Æü</li>
+<li>mtime: ¹¹¿·»þ¹ï</li>
+<li>summary: °ì¹Ôɽ¼¨¤Îʸ»úÎó</li>
+<li>contents: ÆâÍÆ</li>
+<li>reminder: ¥ê¥Þ¥¤¥ó¥À¤ÎÆüÉÕÈÏ°Ï</li>
+<li>Region: Îΰè</li>
+<li>Around: ¥«¡¼¥½¥ë°ÌÃ֤μþÊÕ
+<ul>
+<li>C-u 7 f ¢ª Around ¤Ê¤é, Á°¸å 7 ¤Ä</li>
+</ul></li>
+<li>uniq: Æ±¤¸¥Õ¥¡¥¤¥ëÃæ¤Ç²¿²Õ½ê¥Ò¥Ã¥È¤·¤Æ¤â, ºÇ½é¤Î°ì²Õ½ê¤À¤±É½¼¨</li>
+</ul></li>
+<li>C-u f ¤Ê¤é, ¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤ò¼è¤ê½ü¤¯</li>
+<li>G ¢ª contents</li>
+<li>u ¢ª uniq</li>
+</ul></li>
+<li>howm-mode ¤È¶¦ÄÌ
+<ul>
+<li>l ¢ª Á´¥á¥â¤Î°ìÍ÷</li>
+<li>g ¢ª ¸¡º÷ (grep)
+<ul>
+<li>C-u g ¢ª ¥­¡¼¥ï¡¼¥É¤òÊä´°ÆþÎϤ·¤Æ¸¡º÷</li>
+</ul></li>
+<li>m ¢ª ¥í¡¼¥Þ»ú¸¡º÷ (migemo)
+<ul>
+<li>C-u m ¢ª C-u g ¤ÈƱ¤¸</li>
+</ul></li>
+<li>c ¢ª ¿·µ¬¥Õ¥¡¥¤¥ëºîÀ® (¸½¥ê¡¼¥¸¥ç¥ó¤¬¥¿¥¤¥È¥ë)</li>
+<li>Q ¢ª howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¾Ã¤¹ (̤Êݸ¤Ï½ü¤¯)</li>
+</ul></li>
+<li>¤½¤Î¾
+<ul>
+<li>°ìÍ÷ɽ¼¨¤Ç !  ¢ª shell ¤Ç¥³¥Þ¥ó¥É¼Â¹Ô
+<ul>
+<li>¥á¥â¤ò¼ê¤Ã¼è¤êÁ᤯¼Î¤Æ¤¿¤±¤ì¤Ð, ¤³¤ì¤Ç mv ¤Ê¤ê rm ¤Ê¤ê¤·¤Æ¤¯¤À¤µ¤¤</li>
+<li>2 ²óÌܤ«¤é¤Ï¾®¸­¤·¤¤µóÆ°¤ò¤·¤Þ¤¹ :-)</li>
+</ul></li>
+<li>&gt;&gt;&gt; hoge.png ¤Ê¤é³°Éô viewer ¤Ç²èÁü¤ò³«¤¯
+<ul>
+<li>ÀßÄê¤Ï<a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>»²¾È</li>
+</ul></li>
+</ul></li>
+</ul>
+<h3><a name="label-5" id="label-5">¥ê¥Þ¥¤¥ó¥À</a></h3><!-- RDLabel: "¥ê¥Þ¥¤¥ó¥À" -->
+<p>(ͽÄêɽ¡¦todo)</p>
+<ul>
+<li>µ¡Ç½
+<ul>
+<li><p>¥á¥âÃæ¤Ë</p>
+<pre>[2002-10-20]+ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦</pre>
+<p>¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤ª¤¯¤È, °ìÍ÷¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹</p>
+<ul>
+<li>C-c , y ¢ª Í½Äêɽ
+<ul>
+<li>. ¢ª º£Æü¤Ø</li>
+</ul></li>
+<li>C-c , t ¢ª todo °ìÍ÷
+<ul>
+<li>°ìÍ÷Ãæ¤Î¾å²¼¤É¤Î°ÌÃÖ¤Ëɽ¼¨¤µ¤ì¤ë¤«¤Ï, ÆüÉդȼïÎष¤À¤¤</li>
+</ul></li>
+</ul></li>
+<li>¡ÖºÇ¶á¤ÎͽÄê¡×¤È¡Ötodo ËÁƬ¡×¤Ï¥á¥Ë¥å¡¼¤Ë¤âɽ¼¨¤µ¤ì¤Þ¤¹
+    (¤³¤È¤¢¤ë¤´¤È¤Ë¤Á¤é¤Ã¤È¸«¤¨¤ë¤Î¤¬½ÅÍפ«¤È)
+<ul>
+<li>¥á¥Ë¥å¡¼¤Ç¤Ï, ¹ÔƬ¤Î¡Ö&gt;¡×¾å¤Ç RET ¤ò᤯¤È¥á¥â¤ËÈô¤Ó¤Þ¤¹
+      (¤½¤ì°Ê³°¤Î°ÌÃ֤Ǥâ, ²¼Àþ¤¬¤Ê¤¤½ê¤Ê¤éƱÍÍ)</li>
+</ul></li>
+<li>¥«¥ì¥ó¥À¡¼¥½¥Õ¥È plan ¤Ø¤Î export ¤â²Äǽ (¢ª<a href="#label-12">³°Éô¥Ä¡¼¥ë</a>)</li>
+</ul></li>
+<li>½ñ¼°
+<ul>
+<li><p>³Ð½ñ (-)</p>
+<pre>[2002-10-20]- ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦</pre>
+<ul>
+<li>»ØÄêÆü¤ËÉ⤭¤¢¤¬¤ê, °Ê¸å¤Ï½ù¡¹¤ËÄÀ¤à</li>
+<li>»ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú</li>
+<li><p>ÄÀ¤à¤Î¤òÃÙ¤¯¤¹¤ë¤Ë¤Ï, Í±Í½Æü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 1 Æü)</p>
+<pre>[2002-10-20]-14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦ ¢ª 14 Æü´Ö¤°¤é¤¤¤Ïµ¤¤Ë¤«¤±¤è¤¦</pre></li>
+</ul></li>
+<li><p>todo (+)</p>
+<pre>[2002-10-20]+ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤦¤Ù¤·</pre>
+<ul>
+<li>»ØÄêÆü¤«¤é, ½ù¡¹¤ËÉ⤭¤¢¤¬¤Ã¤Æ¤¯¤ë</li>
+<li>»ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú</li>
+<li><p>É⤭¤¢¤¬¤ë®¤µ¤Ï, Í±Í½Æü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 7 Æü)</p>
+<pre>[2002-10-20]+14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤦¤Ù¤· ¢ª 14 Æü´Ö¤°¤é¤¤¤Î¤¦¤Á¤Ë</pre></li>
+</ul></li>
+<li><p>¡ºÀÚ (!)</p>
+<pre>[2002-10-20]! ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± ¡ºÀÚ</pre>
+<ul>
+<li>»ØÄêÆü¤¬¶á¤Å¤¯¤È, É⤭¤¢¤¬¤Ã¤Æ¤¯¤ë</li>
+<li>»ØÄêÆü°Ê¹ß¤Ï, °ìÈÖ¾å¤ËÉ⤭¤Ã¤Ñ¤Ê¤·</li>
+<li><p>²¿ÆüÁ°¤«¤éÉ⤭¤Ï¤¸¤á¤ë¤«¤Ï, Í±Í½Æü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 7 Æü)</p>
+<pre>[2002-10-20]!14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± ¡ºÀÚ ¢ª 14 ÆüÁ°¤°¤é¤¤¤«¤é¤Ü¤Á¤Ü¤Á</pre></li>
+<li>ͽÄêɽ(¸å½Ò)¤Ë¤âɽ¼¨</li>
+</ul></li>
+<li><p>ÊÝα (~)</p>
+<pre>[2002-10-20]~ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦¤«</pre>
+<ul>
+<li>»ØÄêÆü¤«¤é, É⤭ÄÀ¤ß¤ò¤¯¤ê¤«¤¨¤¹</li>
+<li>»ØÄêÆü¤Þ¤Ç¤ÏÄì¤ËÀøÉú</li>
+<li><p>²¿Æü¼þ´ü¤ÇÉ⤭ÄÀ¤ß¤¹¤ë¤«¤Ï, Í±Í½Æü¿ô¤Ç»ØÄê(¥Ç¥Õ¥©¥ë¥È 30 Æü)</p>
+<pre>[2002-10-20]!14 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ± Ç㤪¤¦¤« ¢ª 14 Æü¼þ´ü</pre></li>
+</ul></li>
+<li><p>ͽÄê (@)</p>
+<pre>[2002-10-20]@ ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±</pre>
+<ul>
+<li>todo °ìÍ÷¤Ç¤Ï¤Ê¤¯, Í½Äêɽ¤Ëɽ¼¨</li>
+</ul></li>
+<li><p>ºÑ (.)</p>
+<pre>[2002-10-20]. ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±</pre>
+<ul>
+<li>¾ï¤ËÄì</li>
+</ul></li>
+</ul></li>
+<li>action-lock
+<ul>
+<li><p>Îã</p>
+<pre>[2002-10-20]+9 ¤Û¤²¤Û¤²</pre>
+<p>¤Î¡Ö+9¡×¤Ë¥«¡¼¥½¥ëÃÖ¤¤¤Æ¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È, ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ë¥á¥Ë¥å¡¼¤¬½Ð¤Æ¡Ä</p>
+<ul>
+<li><p>¤½¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó ¢ª ¡ÖºÑ¡×</p>
+<pre>[2002-10-20]. [2002-10-20]:+9 ¤Û¤²¤Û¤²</pre></li>
+<li><p>x ¤òÆþÎÏ ¢ª ¡Öcancel¡×</p>
+<pre>[2002-10-20]. cancel [2002-10-20]:+9 ¤Û¤²¤Û¤²</pre></li>
+<li><p>- ¤òÆþÎÏ ¢ª ¼ïÎà¤ò³Ð½ñ¤ËÊѹ¹</p>
+<pre>[2002-10-20]-9 ¤Û¤²¤Û¤²</pre></li>
+<li><p>14 ¤òÆþÎÏ ¢ª Í±Í½Æü¿ô¤ò 14 Æü¤ËÊѹ¹</p>
+<pre>[2002-10-20]+14 ¤Û¤²¤Û¤²</pre></li>
+</ul></li>
+<li>¥á¥Ë¥å¡¼¡¦Í½Äêɽ¡¦todo °ìÍ÷¤«¤é¤âľÀÜᤱ¤Þ¤¹</li>
+</ul></li>
+<li>Tips (»ä¤Î»È¤¤Êý)
+<ul>
+<li>¡Ötodo¡×¤ä¡Ö¡ºÀڡפÏËÜÅö¤ËɬÍפʤâ¤Î¤À¤±
+<ul>
+<li>¤½¤ì°Ê³°¤Ï¡Ö³Ð½ñ¡×¤ÇÄÀ¤à¤Ë¤Þ¤«¤»¤ë (¤É¤¦¤»Á´Éô¤Ï¤Ç¤­¤Þ¤»¤ó :p)</li>
+<li><p>¸å¤í¤á¤¿¤±¤ì¤Ð, Í±Í½Æü¿ô¤ÎŤ¤¡Ö³Ð½ñ¡×¤Ë</p>
+<pre>[2002-11-10]-10 ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±</pre></li>
+</ul></li>
+<li><p>¶ÛµÞ¤Ç¤Ï¤Ê¤¤¤¬½ÅÍפʤ³¤È</p>
+<pre>[2002-11-10]-999 ¡ü¥Ï¥¤¥¦¥§¥¤ÏÇÀ±</pre></li>
+<li><p>ÌÜΩ¤¿¤»¤¿¤¤¤³¤È</p>
+<pre>[2002-11-10]! ¡ú¡ú¥Ï¥¤¥¦¥§¥¤ÏÇÀ±</pre></li>
+</ul></li>
+</ul>
+<h2><a name="label-6" id="label-6">ƳÆþË¡</a></h2><!-- RDLabel: "ƳÆþË¡" -->
+<h3><a name="label-7" id="label-7">¥¤¥ó¥¹¥È¡¼¥ë</a></h3><!-- RDLabel: "¥¤¥ó¥¹¥È¡¼¥ë" -->
+<h4><a name="label-8" id="label-8">¼«Æ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç</a></h4><!-- RDLabel: "¼«Æ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç" -->
+<ul>
+<li>¥¤¥ó¥¹¥È¡¼¥ë
+<ul>
+<li>./configure ¤·¤Æ make ¤·¤Æ, root ¤Ë¤Ê¤Ã¤Æ make install
+<ul>
+<li>*.el, *.elc ¤Ï /usr/share/emacs/site-lisp/howm/ ¤Ë</li>
+<li>doc/, ext/ ¤Ï /usr/local/share/howm/ ¤Ë</li>
+</ul></li>
+<li><p>xemacs ¤Î¾ì¹ç</p>
+<pre>./configure --with-xemacs</pre>
+<ul>
+<li>*.el, *.elc ¤Ï /usr/lib/xemacs/site-lisp/howm/ ¤Ë</li>
+</ul></li>
+<li><p>¥¤¥ó¥¹¥È¡¼¥ëÀè¤ÎÊѹ¹Îã</p>
+<pre>./configure --with-howmdir=$HOME/elisp --prefix=$HOME</pre>
+<ul>
+<li>*.el, *.elc ¤Ï ~/elisp/ ¤Ë</li>
+<li>doc/, ext/ ¤Ï ~/share/howm/ ¤Ë</li>
+</ul></li>
+<li>¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤Ï ./configure --help ¤ò»²¾È</li>
+</ul></li>
+<li>ÀßÄê
+<ul>
+<li>~/.emacs (.emacs.el ¤«¤â)¤ËÄɲÃ
+<ul>
+<li><p>case 1: emacs µ¯Æ°»þ¤ËÆɤ߹þ¤à</p>
+<pre>(setq howm-menu-lang 'ja)
+(require 'howm)</pre></li>
+<li><p>case 2: ¤Ï¤¸¤á¤Æ C-c , , ¤·¤¿»þ¤ËÆɤ߹þ¤à</p>
+<pre>(setq howm-menu-lang 'ja)
+(global-set-key "\C-c,," 'howm-menu)
+(autoload 'howm-menu "howm" "Hitori Otegaru Wiki Modoki" t)</pre></li>
+<li><p>¤¤¤º¤ì¤â, ¤â¤·¡ÖCannot open load file¡×¤È¤«¥¨¥é¡¼¤¬½Ð¤ë¤Ê¤é,
+      ¾åµ­¤ÎÁ°¤Ë¤³¤ì¤òÄɲÃ</p>
+<pre>(add-to-list 'load-path "/usr/share/emacs/site-lisp/howm/")</pre></li>
+</ul></li>
+<li>~/howm/ ¤ÎºîÀ®¤ä¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Î¥³¥Ô¡¼¤ÏÉÔÍפǤ¹
+    (¥á¥Ë¥å¡¼µ¯Æ°»þ¤Ë¼«Æ°ºîÀ®)</li>
+</ul></li>
+</ul>
+<h4><a name="label-9" id="label-9">¼êÆ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç</a></h4><!-- RDLabel: "¼êÆ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç" -->
+<ul>
+<li>*.el ¤òŬÅö¤Ê¾ì½ê¤ËÃÖ¤¯ (Îã: ~/elisp/howm)
+<ul>
+<li>~/.emacs (.emacs.el ¤«¤â)¤Ë
+<ul>
+<li><p>ÃÖ¤­¾ì¤Ë±þ¤¸¤Æ, ¢­¤Î¤è¤¦¤Ëµ­½Ò</p>
+<pre>(add-to-list 'load-path "~/elisp/howm/")</pre></li>
+<li>¤µ¤é¤Ë, <a href="#label-8">¼«Æ°¥¤¥ó¥¹¥È¡¼¥ë¤Î¾ì¹ç</a>¤ÈƱÍͤε­½Ò¤òÄɲÃ</li>
+</ul></li>
+<li><p>¤ª¹¥¤ß¤Ç, ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë</p>
+<pre>cd ~/elisp/howm
+\emacs -batch -q --no-site-file --eval '(progn (add-to-list (quote load-path) ".") (byte-recompile-directory "." 0))'</pre></li>
+</ul></li>
+</ul>
+<h4><a name="label-10" id="label-10">¥¤¥ó¥¹¥È¡¼¥ë¤ÎÊä­</a></h4><!-- RDLabel: "¥¤¥ó¥¹¥È¡¼¥ë¤ÎÊä­" -->
+<ul>
+<li><p>¤ª¹¥¤ß¤Ç, ~/.emacs ¤ËÀßÄê¤òÄɲà(¢ª<a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>)</p>
+<pre>;; ÀßÄêÎã
+(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) ; &lt;&lt;&lt; ¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤
+(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 »þ´Ö¥­¥ã¥Ã¥·¥å</pre></li>
+<li>¤Ê¤ª, ¥­¡¼¥ï¡¼¥É°ìÍ÷¤Ï ~/.howm-keys ¤Ëµ­Ï¿¤µ¤ì¤ë
+<ul>
+<li>Ëü°ì²õ¤ì¤Æ¤â, ºÆ¹½ÃۤϴÊñ. Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤˱þ¤¸¤Æ¡Ä
+<ul>
+<li><p>¶èÊ̤¹¤ë¾ì¹ç</p>
+<pre>find ~/howm -name '*.txt' -print | xargs ruby -ne '$_ =~ /&lt;&lt;&lt;\s+(.+)$/ and puts $1.split(/\s*&lt;&lt;&lt;\s*/).join "\t"' | sort -u &gt; ~/.howm-keys</pre></li>
+<li><p>¶èÊ̤·¤Ê¤¤¾ì¹ç</p>
+<pre>find ~/howm -name '*.txt' -print | xargs ruby -ne '$_ =~ /&lt;&lt;&lt;\s+(.+)$/ and puts $1.downcase.split(/\s*&lt;&lt;&lt;\s*/).join "\t"' | sort -u &gt; ~/.howm-keys</pre></li>
+</ul></li>
+</ul></li>
+<li>Ãí°Õ
+<ul>
+<li>GNU Emacs °Ê³°¤Î¾ì¹ç:
+    »ä¤Ï¤è¤¯¤ï¤«¤é¤Ê¤¤¤Î¤Ç, ¸¡º÷¤·¤Æ¤¯¤À¤µ¤¤
+<ul>
+<li>meadow:
+      <a href="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&amp;node=meadowmemo%20edition">ÀßÄêºÑ¤ß Meadow</a>
+      ¤Ê¤éºÇ½é¤«¤é»È¤¨¤Þ¤¹
+<ul>
+<li>cygwin + grep »ÈÍѤΤȤ­¤Ï,
+        ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤È¥³¥Þ¥ó¥É¤ò¥É¥é¥¤¥Ö¥ì¥¿¡¼¤«¤é»ØÄꤹ¤ë.
+<ul>
+<li><p>~/.emacs(.emacs.el ¤«¤â) ¤Ç¢­¤Î¤è¤¦¤Ë</p>
+<pre>(setq howm-directory "c:/cygwin/home/howm/")</pre></li>
+<li>cygwin ¤«¤é¸«¤¿ / ¤È emacs ¤«¤é¸«¤¿ / ¤¬¿©¤¤°ã¤¦¤È¤«¤¤¤¦ÏÃ.</li>
+</ul></li>
+</ul></li>
+<li>xemacs:
+<ul>
+<li><p>font-lock ¤Î¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë¤È®¤¯¤Ê¤ë¤½¤¦.
+        thx &gt; <a href="http://eron.info/k/diary/">³Þ¸¶¤µ¤ó</a></p>
+<pre>(setq font-lock-verbose nil)</pre></li>
+</ul></li>
+<li>Linux Zaurus:
+      <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus">Wiki</a>
+      ¤ò»²¾È¤¯¤À¤µ¤¤.
+      thx &gt; <a href="http://www.bookshelf.jp/2ch/unix/1063800495.html">100</a></li>
+</ul></li>
+<li>SKK ¤ò»È¤¦¾ì¹ç
+<ul>
+<li><p>.emacs ¤Ë°Ê²¼¤ò½ñ¤¤¤Æ¤ª¤«¤Ê¤¤¤È, Dired-X ¤Ë C-x C-j ¤òÃ¥¤ï¤ì¤Þ¤¹</p>
+<pre>(setq dired-bind-jump nil)</pre></li>
+</ul></li>
+<li>viper-mode ¤ò»È¤¦¾ì¹ç
+<ul>
+<li>viper-mode ¤è¤êÀè¤Ë howm-mode ¤ò¥í¡¼¥É¤·¤Æ¤ª¤¯
+<ul>
+<li>post-command-hook ¤Ë°­¤µ¤¹¤ë??</li>
+</ul></li>
+</ul></li>
+<li>¥³¥ó¥½¡¼¥ë (emacs -nw) ¤Î¾ì¹ç
+<ul>
+<li><p>²¼Àþ¤¬É½¼¨¤µ¤ì¤Ê¤¤Ã¼Ëö¤Ê¤é</p>
+<pre>(set-face-foreground 'action-lock-face "blue") ;; ²¼Àþ¤Î¤«¤ï¤ê¤Ë¿§¤Ä¤±</pre></li>
+</ul></li>
+<li><a href="http://www.ruby-lang.org/ja/man/html/RD.html">RD</a>¤ò»È¤¦¾ì¹ç
+<ul>
+<li>&lt;&lt;&lt; ¤¬ RD ¤Î include ¤È¤«¤Ö¤ë</li>
+<li>ÂкöÎã
+<ul>
+<li>include ¤Ï»È¤ï¤Ê¤¤. ¹Ô¤Î¤Ï¤¸¤á¤Ë &lt;&lt;&lt; ¤ò½ñ¤«¤Ê¤¤¤è¤¦Ãí°Õ¤¹¤ë.</li>
+<li>include ¤Ï»È¤ï¤Ê¤¤. rd2 ¤ò¤«¤±¤ëÁ°¤Ë howm2 -type=rd ¤òÄ̤¹.</li>
+<li><p>¥ê¥ó¥¯µ­¹æ¤òÊѹ¹¤¹¤ë</p>
+<pre>;; Îã: .emacs (howm ¥í¡¼¥É¤è¤êÁ°)¤Ë
+(setq howm-ref-header "==&gt;") ; goto ¥ê¥ó¥¯
+(setq howm-keyword-header "&lt;==") ; come-from ¥ê¥ó¥¯</pre></li>
+<li><a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool">¢ª howm wiki ¤Î¡ÖÊ»Íѥġ¼¥ë¡×</a>¤â»²¾È</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>µìÈǤ«¤é¤Î°Ü¹Ô (ɬ¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!) ¢ª <a href="OLD.rd">&lt;URL:OLD.rd&gt;</a>
+<ul>
+<li>¿·¤¿¤Ë make install ¤·¤Æ¤â, ¸Ä¿Í¤Î¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¹¹¿·¤Ï¤·¤Þ¤»¤ó.
+    É¬Íפʤé, ¥á¥Ë¥å¡¼¤ò¼«Ê¬¤ÇÊÔ½¸¤¹¤ë¤«,
+    ja/0000-00-00-000000.txt ¤ò¼«Ê¬¤Ç¥³¥Ô¡¼¤¹¤ë¤«¤·¤Æ¤¯¤À¤µ¤¤.</li>
+</ul></li>
+</ul>
+<h3><a name="label-11" id="label-11">¥«¥¹¥¿¥Þ¥¤¥º</a></h3><!-- RDLabel: "¥«¥¹¥¿¥Þ¥¤¥º" -->
+<p>´ðËÜŪ¤Ë¤Ï M-x customize ¢ª [Applications] ¢ª [Howm] ¤Ç.
+¤Ô¤ó¤È¤³¤Ê¤¤¹àÌܤâ, [Show] ¤Ç¤¢¤ê¤¬¤Á¤Ê´ûÄêÃͤ«¤éÁªÂò²Äǽ.</p>
+<p>¤½¤³¤Ë¤Ê¤¤ÀßÄê¤Ë¤Ä¤¤¤Æ¤Ï, ~/.emacs (~/.emacs.el ¤«¤â)¤Ø, °Ê²¼¤Î¤è¤¦¤ËľÀܽñ¤¯.
+(¤â¤Ã¤ÈÌÖÍåŪ¤À¤¬¸Å¤¤²òÀâ¤Ï, <a href="OLD.rd">&lt;URL:OLD.rd&gt;</a>¤ò»²¾È)</p>
+<ul>
+<li>¿§
+<ul>
+<li><p>howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê</p>
+<pre>;; ¡Ö¤Û¤²¡×¤È¡Ö[¤Õ¤¬]¡×¤ËÃ忧
+;; ¡¦ÀßÄêË¡¤Î¾ÜºÙ¤Ï, ÊÑ¿ô font-lock-keywords ¤Î¥Ø¥ë¥×¤ò»²¾È
+;; ¡¦face ¤Î°ìÍ÷¤Ï M-x list-faces-display
+(setq howm-user-font-lock-keywords
+  '(
+    ("¤Û¤²" . (0 'highlight prepend))
+    ("\\[¤Õ¤¬\\]" . (0 'font-lock-doc-face prepend))
+    ))</pre>
+<ul>
+<li>todo ¤äͽÄê¤Î¿§¤ï¤±¤Ë¤Ç¤â»È¤Ã¤Æ¤Ï¤¤¤«¤¬¤«¤È.</li>
+</ul></li>
+<li><p>ÆâÍƥХåե¡¤Ë rd-mode ¤Ê¿§¤ò¤Ä¤±¤ë</p>
+<pre>;; rd-mode.el ¤¬Æɤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤È¤¤¤¦Á°Äó¤Ç
+(setq howm-view-contents-font-lock-keywords rd-font-lock-keywords)</pre></li>
+</ul></li>
+<li>ÊØÍø¥­¡¼
+<ul>
+<li><p>¡Ö¥«¥¿¥«¥Ê¡×¤Ç¥á¥Ë¥å¡¼, ¡ÖCtrl-¥«¥¿¥«¥Ê¡×¤Ç¿·µ¬¥á¥â</p>
+<pre>(define-key global-map [katakana] 'howm-menu)
+(define-key global-map [(control katakana)] 'howm-create)</pre></li>
+<li><p>[tab]([alt]-[tab])¤Ç¼¡(Á°)¤Î¥ê¥ó¥¯¤Ë°ÜÆ°</p>
+<pre>(define-key howm-mode-map [tab] 'action-lock-goto-next-link)
+(define-key howm-mode-map [(meta tab)] 'action-lock-goto-previous-link)</pre>
+<ul>
+<li>ËÜÍè¤Î tab ¤Ï C-i ¤Ç</li>
+</ul></li>
+</ul></li>
+<li>Êݸ¾ì½ê
+<ul>
+<li><p>¥á¥âÃÖ¤­¾ì/ǯ/ǯ·îÆü-»þʬÉÃ.txt ¤Ë</p>
+<pre>(setq howm-file-name-format "%Y/%Y%m%d-%H%M%S.txt")</pre>
+<ul>
+<li>¥Õ¥¡¥¤¥ë̾¼«ÂΤËǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤Ê¤¤¤È, filter-by-date ¤¬µ¡Ç½¤·¤Ê¤¤</li>
+</ul></li>
+<li><p>1 Æü 1 ¥Õ¥¡¥¤¥ë (¥á¥âÃÖ¤­¾ì/ǯ/·î/ǯ_·î_Æü.txt ¤Ë)</p>
+<pre>(setq howm-file-name-format "%Y/%m/%Y_%m_%d.txt")</pre>
+<ul>
+<li>ÉÔ´°Á´¤ÊÅÀ¤¬¤¢¤ê¤Þ¤¹. ²æËý¤Ç¤­¤ë¿Í¤À¤±¤É¤¦¤¾
+<ul>
+<li>¥á¥âñ°Ì¤Ç¤¢¤ë¤Ù¤­½èÍý¤Î°ìÉô¤¬¥Õ¥¡¥¤¥ëñ°Ì¤Ë
+        (¥¿¥¤¥È¥ëɽ¼¨, ¹¹¿·½ç°ìÍ÷, ÆâÍƤǤιʤꤳ¤ß, uniq)</li>
+</ul></li>
+</ul></li>
+<li><p>¥­¡¼¥ï¡¼¥É°ìÍ÷¤ò ~/howm/.howm-keys ¤ËÃÖ¤¯</p>
+<pre>(setq howm-keyword-file "~/howm/.howm-keys") ;; ¥Ç¥Õ¥©¥ë¥È¤Ï ~/.howm-keys</pre>
+<ul>
+<li>¤³¤¦¤·¤Æ¤ª¤±¤Ð, °ã¤¦¥Þ¥·¥ó¤Ç¤â ~/howm/ °Ê²¼¤Î¥³¥Ô¡¼¤À¤±¤ÇºÑ¤à.</li>
+<li>¤¹¤Ç¤Ë½ñ¤¤¤¿¥á¥â¤¬¤¢¤ë¤Ê¤é, mv ~/.howm-keys ~/howm/ ¤ò¤·¤Æ¤ª¤¯¤«,
+      ºÆ¹½ÃÛ¤¹¤ë(¢ª<a href="#label-7">¥¤¥ó¥¹¥È¡¼¥ë</a>).</li>
+<li>¥Ç¥á¥ê¥Ã¥È: ¸¡º÷¤¬ÃÙ¤¯¤Ê¤ë? (Âδ¶¤Ç¤­¤ë¤Û¤É¤«¤Ï, ¤ä¤Ã¤Æ¤ß¤Ê¤¤¤ÈÉÔÌÀ)</li>
+</ul></li>
+</ul></li>
+<li>°ìÍ÷
+<ul>
+<li><p>°ìÍ÷¤Ç¡Ö!¡×¤·¤¿¤È¤­¤Î½é´ü¥³¥Þ¥ó¥É¤òÊѹ¹</p>
+<pre>(setq howm-view-summary-shell-last-file "_FILE_")
+(setq howm-view-summary-shell-hist
+  '("mv _FILE_ ~/gomi" "touch _FILE_" "ls -l _FILE_"))</pre>
+<ul>
+<li>½é´ü¥³¥Þ¥ó¥É¤Ï¡Ömv ¥Õ¥¡¥¤¥ë̾ ~/gomi¡×</li>
+<li>M-p ²¡¤·¤Æ¤¤¤¯¤È, ¡Ötouch ¥Õ¥¡¥¤¥ë̾¡×¤ä¡Öls -l ¥Õ¥¡¥¤¥ë̾¡×</li>
+</ul></li>
+<li><p>°ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¿§¤Ä¤±Îã</p>
+<pre>(setq howm-view-summary-font-lock-keywords '(("^2003" . 'highlight)))</pre></li>
+</ul></li>
+<li>¥á¥Ë¥å¡¼
+<ul>
+<li>¥á¥Ë¥å¡¼¤ÎÊѹ¹
+<ul>
+<li>¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ [menu ÊÔ½¸] ¾å¤Ç¥ê¥¿¡¼¥ó ¢ª ¼«Í³¤ËÊÔ½¸</li>
+<li>¤è¤¯³«¤¯¥á¥â¤Ø¤Î goto ¥ê¥ó¥¯¤Ê¤É¤ò½ñ¤¤¤Æ¤ª¤±¤ÐÊØÍø¤«¤È</li>
+</ul></li>
+<li>¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤Ë¡Ö%recent¡×¤ä¡Ö%random¡×¤È½ñ¤¯¤È,
+    ¡ÖºÇ¶á¤Î¥á¥â¡×¤ä¡Ö¥é¥ó¥À¥à¤ËÁª¤ó¤À¥á¥â¡×¤Î¥¿¥¤¥È¥ë°ìÍ÷
+<ul>
+<li><p>¥«¥¹¥¿¥Þ¥¤¥º</p>
+<pre>(setq howm-menu-recent-num 20)  ;; É½¼¨¤¹¤ë¸Ä¿ô</pre></li>
+</ul></li>
+<li>¥á¥Ë¥å¡¼Ãæ¤ËÊÑ¿ô¤ä´Ø¿ô¤ÎÃͤòɽ¼¨
+<ul>
+<li>¥á¥Ë¥å¡¼Ãæ¤Ë¤³¤¦½ñ¤¯¤È¡Ä
+<ul>
+<li>%here%foo     ¢ª foo ¤ÎÃͤòɽ¼¨</li>
+<li>%here%(foo 3) ¢ª (foo '3) ¤Î·ë²Ì¤òɽ¼¨
+<ul>
+<li>Îã: %here%(howm-menu-search "¤Û¤²") ¢ª ¡Ö¤Û¤²¡×¤Î¸¡º÷·ë²Ì¤òËä¤á¹þ¤ß</li>
+<li><p>¤¿¤À¤·, ÅÐÏ¿¤·¤¿´Ø¿ô¤·¤«»È¤¨¤Þ¤»¤ó (¤ª¤Ã¤«¤Ê¤¤¤«¤é)</p>
+<pre>(setq howm-menu-allow
+      (append '(foo bar) howm-menu-allow)) ;; foo ¤È bar ¤òµö²Ä</pre></li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li><p>¥á¥Ë¥å¡¼¤ò¥á¥â°·¤¤¤·¤Ê¤¤ (¥á¥â°ìÍ÷¡¦¸¡º÷¤ÎÂоݳ°¤Ë)</p>
+<pre>;; mv ~/howm/0000-00-00-000000.txt ~/hoge/fuga/menu.txt ¤·¤È¤¤¤Æ¡Ä
+(setq howm-menu-file "~/hoge/fuga/menu.txt")</pre></li>
+<li><p>%reminder ¤Î»ÅÀÚ¤êÎã</p>
+<pre>(setq howm-menu-reminder-separators
+      '(
+        (-1  . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬º£Æü¢­¢¬Ä¶²á¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
+        (0   . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬Í½Äꢭ¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
+        (3   . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬¤â¤Ã¤ÈÀ袭¢¬3Æü¸å¤Þ¤Ç¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
+        (nil . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬todo¢­¨¬¨¬¨¬¨¬¨¬¨¬¨¬") ;ͽÄê¤Ètodo¤Î¶­
+        ))</pre></li>
+</ul></li>
+<li>¤â¤Ã¤È·Ú¤¯ (cf. <a href="http://pitecan.com/fugo.html">ÉÙ¹ëŪ¥×¥í¥°¥é¥ß¥ó¥°</a>)
+<ul>
+<li>¾å½Ò¤Î M-x customize ¤Ç [Howm Efficiency] ¤ò»²¾È</li>
+<li>ÆäË, Ëܵ¤¤Ç»È¤¦¤Ë¤Ï howm-view-use-grep ¤ÎÀßÄê¤ò¤ª¤¹¤¹¤á¤·¤Þ¤¹
+<ul>
+<li><p>grep »ÈÍÑ»þ¤Î coding system »ØÄê</p>
+<pre>(setq howm-process-coding-system 'euc-japan-unix) ;; Æɤ߽ñ¤­¶¦ÄÌ
+(setq howm-process-coding-system '(utf-8-unix . sjis-unix)) ;; (ÆÉ.½ñ)</pre></li>
+</ul></li>
+<li><p>Tips: gc-cons-threshold ¤ÎÃͤòÁý¤ä¤¹¤È®¤¯¤Ê¤ë¾ì¹ç¤¬¤¢¤ë.
+    ref &gt; <a href="http://www.bookshelf.jp/2ch/unix/1077881095.html">220,234-236</a></p>
+<pre>(setq gc-cons-threshold (* 4000 10000))</pre></li>
+<li>Tips: grep-2.5 ¤Ç¤Ï, ´Ä¶­ÊÑ¿ô LANG ¤ò C ¤Ë¤·¤Æ¤ª¤¯¤È,
+    ¥Þ¥ë¥Á¥Ð¥¤¥ÈÂбþ¤¬¥ª¥Õ¤Ë¤Ê¤Ã¤Æ®¤¯¤Ê¤ë
+    <a href="http://search.luky.org/vine-users.5/msg06363.html">ref</a></li>
+</ul></li>
+<li>¸¡º÷
+<ul>
+<li>Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲÃ
+<ul>
+<li><p>Á´Ê¸¸¡º÷¤Î¤È¤­, ¥á¥â¤Ë²Ã¤¨¤Æ»ØÄê¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤âºÆµ¢Åª¤Ëõ¤¹</p>
+<pre>(setq howm-search-path '("~/Mail" "~/News"))
+(setq howm-search-other-dir t) ;; ²¼µ­¤Î¥È¥°¥ë¤Î½é´üÃÍ (t ¤« nil)</pre></li>
+<li>M-x howm-toggle-search-other-dir ¤Ç,
+      ¾åµ­¥Ç¥£¥ì¥¯¥È¥ê¤ò¸¡º÷Âоݤˤ¹¤ë¤«¤·¤Ê¤¤¤«¥È¥°¥ë
+<ul>
+<li>¥­¡¼¥Ð¥¤¥ó¥É¤·¤¿¤±¤ì¤Ð³Æ¼«¤Ç (¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ÌϺ÷Ãæ¤Ë¤Ä¤­¡Ä)</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>̤Êݸ¤À¤í¤¦¤È°ÑºÙ¹½¤ï¤º, howm-mode ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¤¹¤Ù¤Æ¶¯À©ºï½ü¤¹¤ë¥³¥Þ¥ó¥É
+  (¤ª¤¹¤¹¤á¤·¤Þ¤»¤ó. »È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤.)
+<ul>
+<li>C-u C-c , Q</li>
+<li>¥á¥Ë¥å¡¼¤Ë½ñ¤¯¤Ê¤é [¶¯À©Á´¾Ã]</li>
+<li><p>ʪÁû¤Ê¤Î¤Ç, ¢­¤ò½ñ¤¤¤È¤«¤Ê¤¤¤È̵¸ú</p>
+<pre>(setq howm-kill-all-enable-force t)</pre></li>
+</ul></li>
+<li>¥Æ¥ó¥×¥ì¡¼¥È¤ÎÊѹ¹Îã
+<ul>
+<li><p>¤³¤ó¤Ê¤Õ¤¦¤Ë</p>
+<pre>Subject: ¥¿¥¤¥È¥ë¥Ð¡¼¤Ë»þ·×¤òɽ¼¨ ¢«Ä¾Á°¤Î¥ê¡¼¥¸¥ç¥ó¤ÎÆâÍÆ
+Date: Thu, 12 Sep 2002 15:45:59 +0900
+In-Reply-To: &lt;/home/hira/sawfish/rich-title/rich-title.jl&gt; ¢«Ä¾Á°¥Õ¥¡¥¤¥ë
+
+¢£ ¢« ¥«¡¼¥½¥ë</pre>
+<ul>
+<li><p>~/.emacs ¤Ë</p>
+<pre>(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: &lt;%s&gt;\n")</pre></li>
+</ul></li>
+<li><p>¥Æ¥ó¥×¥ì¡¼¥È¤òÊ£¿ô»ØÄê</p>
+<pre>;; C-u 2 C-c , c ¢ª 2 ÈÖÌܤΥƥó¥×¥ì¡¼¥È¤Ç¿·µ¬¥á¥â
+;; ¥á¥Ë¥å¡¼¤«¤é C-u 2 c ¤Ç¤âƱÍÍ
+(setq howm-template
+      '("= %title%cursor\n%date %file\n\n" "%date: %title%cursor"))</pre>
+<ul>
+<li>¤Ä¤¤¤Ç¤Ë, howm-template ¤ÎÃͤ¬´Ø¿ô¤Ê¤é
+      ¡Öuniversal-argument ¤ÈľÁ°¤Î¥Ð¥Ã¥Õ¥¡¤ò°ú¿ô¤Ë¤·¤Æ¤½¤¤¤Ä¤ò¸Æ¤Ö¡×
+      ¤Ã¤Æ¤¤¤¦¤Î¤â»Å¹þ¤ß¤Þ¤·¤¿</li>
+</ul></li>
+</ul></li>
+<li>½ñ¼°¤ÎÊѹ¹Îã (howm-*.el ¤Î load ¤è¤êÁ°¤Ë)
+<ul>
+<li><p>¥¿¥¤¥È¥ë(¥á¥â¶èÀÚ¤ê) @@@ ¡Ä</p>
+<pre>(setq howm-view-title-header "@@@")</pre></li>
+<li><p>goto ¥ê¥ó¥¯ ==&gt;¡Ä, come-from ¥ê¥ó¥¯ &lt;==¡Ä</p>
+<pre>(setq howm-ref-header "==&gt;")
+(setq howm-keyword-header "&lt;==")</pre></li>
+<li><p>goto ¥ê¥ó¥¯ ((¡ã¡Ä¡ä)), come-from ¥ê¥ó¥¯ ((¡§¡Ä¡§))</p>
+<pre>;; ¡ã¡ä¡§¤ÏȾ³Ñ¤Ëľ¤·¤Æ¤¯¤À¤µ¤¤
+(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 »²¾È</pre>
+<ul>
+<li>Ãí: come-from ¥­¡¼¥ï¡¼¥É¤Î alias ¤Ç¤Ï,
+      ¼¡¤Î¤É¤Á¤é¤«¤·¤«ÁÛÄꤷ¤Æ¤¤¤Þ¤»¤ó.
+<ul>
+<li>¡Ö¡Ä¤«¤é¸å¡×·¿: &lt;&lt;&lt; foo &lt;&lt;&lt; bar &lt;&lt;&lt; baz</li>
+<li>¡Ö¡Ä¤«¤é¡Ä¤Þ¤Ç¡×·¿: ((¡§foo¡§)) ((¡§bar¡§)) ((¡§baz¡§))</li>
+</ul></li>
+</ul></li>
+<li>wiki É÷¥ê¥ó¥¯ [[hoge]] ¤Î²¼Àþ¤ò¡Ö]]¡×¤À¤±¤Ë
+<ul>
+<li><p>¡Ö&lt;&lt;&lt; hoge¡×¤ÎºîÀ®¸å¤Ï, ¡Öhoge¡×¤Ë¤â²¼Àþ</p>
+<pre>(setq howm-wiki-regexp "\\[\\[\\([^]\r\n]+\\)\\(\\]\\]\\)")
+(setq howm-wiki-regexp-hilit-pos 2)
+(setq howm-wiki-regexp-pos 1)</pre></li>
+</ul></li>
+</ul></li>
+<li>¤³¤Þ¤´¤Þ
+<ul>
+<li><p>ÆüÉÕÆþÎÏ(C-c , d ¤Þ¤¿¤Ï [Æü¢­])¤Çǯ¤ä·î¤òά¤·¤¿¤é, ¡Ö̤Íè¡×¤È²ò¼á</p>
+<pre>(setq howm-insert-date-future t)</pre>
+<ul>
+<li>¿·µ¬ÆþÎÏ»þ¤Î¤ß¤Ç¤¹. ¡Ö[2003-12-27]¡×¾å¤Ç RET ¤·¤¿¤È¤­¤ÎÆ°ºî¤Ï½¾Íè¤É¤ª¤ê.</li>
+</ul></li>
+<li><p>¡Öhttp://¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, URL ¤ò kill-ring ¤Ø</p>
+<pre>(setq action-lock-no-browser t)</pre></li>
+</ul></li>
+<li>ͽÄêɽ¡¦todo °ìÍ÷
+<ul>
+<li><p>¥ê¥Þ¥¤¥ó¥Àµ­¹æ(!+-~@.)¤«¤é RET °ìȯ¤Ç¡ÖºÑ¡×¤Ë</p>
+<pre>(setq howm-action-lock-reminder-done-default "")</pre>
+<ul>
+<li>¤³¤Î¾ì¹ç, C-u RET ¤Ç½¾Íè¤ÎÆ°ºî (¥­¥ã¥ó¥»¥ë, µ­¹æÊѹ¹, ¡Ä)</li>
+</ul></li>
+<li><p>ͽÄêɽ¡¦todo °ìÍ÷¤«¤é¥ê¥Þ¥¤¥ó¥Àµ­¹æ¾å¤ÇľÀÜ RET ¤·¤¿¤È¤­,
+    Ã¡¤«¤ìÀè¥Ð¥Ã¥Õ¥¡¤ò¼«Æ° save</p>
+<pre>(setq howm-action-lock-forward-save-buffer t)</pre>
+<ul>
+<li>¡Ö¼«Æ° save¡×¤ËÄñ¹³¤Ê¤¤Êý¤À¤±¤É¤¦¤¾</li>
+<li>¼êÆ°¤Ç C-x s (̤Êݸ¥Ð¥Ã¥Õ¥¡¤¿¤Á¤ò save)¤Ê¤ê¤¹¤ëÊý¤¬ÀµÆ»¤«¤È</li>
+</ul></li>
+<li><p>ÊÝα¤ÎÉâÄÀÈÏ°Ï</p>
+<pre>(setq howm-todo-priority-defer-init -14)  ;; ½é´üÃÍ = ²¼¸Â
+(setq howm-todo-priority-defer-peak 0) ;; ¾å¸Â</pre></li>
+<li>!+-~. ¤Î½ÜÅ٤Υ«¥¹¥¿¥Þ¥¤¥º
+<ul>
+<li><p>Îã: ¥á¥Ë¥å¡¼¤Ç, ¡ÖÀøÉúÃæ¤ÏÈóɽ¼¨¡×¡ÖºÑ¤Ïɽ¼¨¡×</p>
+<pre>(setq howm-menu-todo-priority -50000)
+(setq howm-todo-priority-done-bottom -44444)</pre></li>
+<li>howm-todo-priority-normal-bottom Åù. ¥½¡¼¥¹(howm-reminder.el)»²¾È.</li>
+</ul></li>
+<li><p>todo °ìÍ÷(M-x howm-list-todo)¤Î»ÅÀÚ¤êÎã</p>
+<pre>(setq howm-todo-separators
+      '(
+        (0  . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬¢¬Ä¶²á¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
+        (nil . "¨¬¨¬¨¬¨¬¨¬¨¬¨¬ÀøÉúÃ梭¨¬¨¬¨¬¨¬¨¬¨¬¨¬")
+        ))</pre>
+<ul>
+<li>Ï¢·ëɽ¼¨¤ä¥½¡¼¥È¤ò¤¹¤ë¾ì¹ç¤Ë¤Ï¤¸¤ã¤Þ¤«¤â¡Ä</li>
+</ul></li>
+</ul></li>
+<li>action-lock
+<ul>
+<li><p>{ } (¥È¥°¥ë¥¹¥¤¥Ã¥Á)¤ÎÊѹ¹</p>
+<pre>;; howm ¤Î load Á°¤Ë
+(setq action-lock-switch-default '("{ }" "{*}" "{-}")) ;; ²¿¸Ä¤Ç¤â</pre></li>
+<li><p>{_} (̤½èÍý)¤ÎÊѹ¹</p>
+<pre>(setq howm-dtime-format "[%a %b %d %H:%M:%S %Y]") ;; {_}
+(setq howm-template-date-format "[%Y-%m-%d %H:%M]") ;; ¥Æ¥ó¥×¥ì¡¼¥È</pre></li>
+<li><p>¡Öfile://¡Ä¡×¤ä¡Öhttp://¡Ä¡×¤ÎÊѹ¹ (¤Þ¤·¤ÊÀßÄêÊ罸)
+    thx &gt; <a href="http://www.bookshelf.jp/2ch/unix/1063800495.html">945</a></p>
+<pre>;; howm (Àµ³Î¤Ë¤Ï action-lock.el) ¤Î¥í¡¼¥É¤è¤êÁ°¤Ë.
+;; ¡¦file://¡Ä
+(setq action-lock-open-regexp
+      "\\&lt;file://\\(localhost\\)?\\([-!@#$%^&amp;*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&amp;*()_+|=:~/?a-zA-Z0-9]+\\)\\&gt;")
+(setq action-lock-open-regexp-pos 2) ;; 2 ¸ÄÌܤΡÖ\\(¡Ä\\)¡×¤¬¥Õ¥¡¥¤¥ë̾
+;; ¡¦http://¡Ä
+(setq action-lock-browse-regexp
+      "\\&lt;\\([htp]\\{3,5\\}s?\\|ftp\\)://\\([-!@#$%^&amp;*()_+|=:~/?a-zA-Z0-9.,;]*[-!@#$%^&amp;*()_+|=:~/?a-zA-Z0-9]+\\)\\&gt;"
+(setq action-lock-browse-regexp-pos 0) ;; ¥Þ¥Ã¥Á¤·¤¿Á´ÂΤ¬ URL</pre></li>
+<li><p>action-lock ÄɲÃÎã:
+    ¡ÖMessage-ID: ¡Ä¡×¤Ç¥ê¥¿¡¼¥ó²¡¤·¤¿¤é, ³ºÅö¥á¡¼¥ë¤ò namazu ¤Ç¸¡º÷</p>
+<pre>;; 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))</pre></li>
+</ul></li>
+<li><a href="http://www.ruby-lang.org/ja/man/html/RD.html">RD</a>¤ò»È¤¦¾ì¹ç:
+  ¹ÔƬ¤Î * ¤Ç¥¨¥ó¥È¥ê¤Î³«ÊĤ¬¤Ç¤­¤ë¤è¤¦¤Ë
+  ¢ª <a href="http://www.bookshelf.jp/2ch/unix/1063800495.html">237-238</a></li>
+<li><p>¤ª¤Þ¤±</p>
+<pre>(setq howm-congrats-format
+      '(
+        "(¡­¡¦¦Ø¡¦¡®) %s"
+        "(¡®¡¦¦Ø¡¦¡­) %s"
+        ;; ¡Ä°Ê²¼Î¬¡Ä
+        ))
+(setq howm-congrats-command '("play" "~/sound/fanfare.wav"))</pre></li>
+<li>¤â¤Ã¤È¤¤¤í¤¤¤í¤¤¤¸¤ë¤Ë¤Ï, *.el ËÁƬ¤ò»²¾È</li>
+</ul>
+<h3><a name="label-12" id="label-12">³°Éô¥Ä¡¼¥ë</a></h3><!-- RDLabel: "³°Éô¥Ä¡¼¥ë" -->
+<p>(Ʊº­¥Ä¡¼¥ë¤Ï ext/ ¤Ë)</p>
+<ul>
+<li>HTML ¤Ø¤ÎÊÑ´¹: howm2 (Ʊº­. Í× ruby)
+<ul>
+<li>Îã
+<ul>
+<li><p>¥á¥â¥Ç¥£¥ì¥¯¥È¥ê ~/howm/ ¤òÊÑ´¹¤·¤Æ ~/converted/ ¤ËÅǤ¯</p>
+<pre>./howm2 ~/howm/ ~/converted/</pre></li>
+<li><p>&lt;&lt;&lt; ¤ÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë</p>
+<pre>./howm2 -i ~/howm/ ~/converted/</pre></li>
+<li><p>¥ê¥ó¥¯½ñ¼°¤Î»ØÄê</p>
+<pre>./howm2 -comefrom='&lt;&lt;&lt;' -goto='&gt;&gt;&gt;' ~/howm/ ~/converted/</pre></li>
+<li><p>¡Ö¤Û¤²¡×¤ò´Þ¤à¥Õ¥¡¥¤¥ë¤À¤± HTML ²½</p>
+<pre>grep -rl '¤Û¤²' ~/howm/ | howm2 -list ~/converted/</pre></li>
+</ul></li>
+<li>²¿¤â¹©Éפ·¤Æ¤Ê¤¤¤Î¤Ç, ·ãÃÙ¤«¤Ä¥á¥â¥ê¤É¤«¿©¤¤</li>
+<li>alias ¤Î¡ÖºÆµ¢Åª¤Ê¡×Ÿ³«¤Ï̤¥µ¥Ý¡¼¥È</li>
+</ul></li>
+<li>¥«¥ì¥ó¥À¡¼ &amp; todo °ìÍ÷: hcal.rb (Ʊº­. Í× ruby)
+<ul>
+<li><p>¥«¥ì¥ó¥À¡¼(ͽÄꡦ¡ºÀÚ¡¦ºÑ¤ß¤Î°ìÍ÷)¤ò½ÐÎÏ</p>
+<pre>hcal.rb -schedule_mark='¡û' -deadline_mark='¡ü' -done_mark='¡¿' ~/howm/*/*/*.txt</pre>
+<ul>
+<li><p>¤³¤ó¤Ê´¶¤¸¤Ç¤º¤é¤º¤é</p>
+<pre>----------------&lt;6&gt;---------------- 2003
+01 Sun 
+02 Mon ¡üÅÄÃæÀèÀ¸¤ËÏ¢Íí ¡ûB4Îع֠¾®ÎÓ ¡û¹©³Ø´ðÁü¸³ 12:40 &lt;&lt;&lt;&lt;##&gt;&gt;&gt;&gt;
+¡Ä</pre></li>
+<li>¡ü¤Ï¡ºÀÚ(@[2003-06-02]!), ¡û¤ÏͽÄê(@[2003-06-02]@), ¡¿¤ÏºÑ(@[2003-06-02].)</li>
+<li>&lt;&lt;&lt;&lt;# ¤Ï¡Öº£Æü¡×, #&gt;&gt;&gt;&gt; ¤Ï¡ÖËèǯ¤ÎƱ·îƱÆü¡×
+<ul>
+<li><p>¤³¤ó¤Ê´¶¤¸¤Ç alias ¤·¤È¤¯¤ÈÊØÍø</p>
+<pre>alias hcal="hcal.rb -schedule_mark='¡û' -deadline_mark='¡ü' -done_mark='¡¿' ~/howm/*/*/*.txt | less '+/&lt;&lt;&lt;&lt;#'"</pre></li>
+</ul></li>
+</ul></li>
+<li>¡Ö½ÜÅÙ½ç todo °ìÍ÷¡×¤ò½ÐÎÏ
+    (howm ¤ò»È¤¦¤Ê¤éÉÔÍ×. ChangeLog ÇɤʿͤؤΤª¤Þ¤±¤Ç¤¹)
+<ul>
+<li><p>¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç</p>
+<pre>hcal.rb -l memo.txt</pre></li>
+<li><p>emacs ¤«¤é M-x grep ¤·¤Æ</p>
+<pre>Run grep (like this): hcal.rb -l ~/memo/*.txt</pre></li>
+</ul></li>
+</ul></li>
+<li>²Õ¾ò½ñ¤­»Ù±ç:
+<ul>
+<li><a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?OrgMode">org-mode ¤È¤ÎÊ»ÍÑ</a></li>
+</ul></li>
+<li>´Ê°×¾®¸¯¤¤Ä¢
+<ul>
+<li><p>¥­¡¼¥ï¡¼¥É¤ò·è¤á¤Æ, Æüµ­Ãæ¤Ë½ñ¤¤¤Æ¤ª¤¯</p>
+<pre>$¿©Èñ$ 500±ß ¥é¡¼¥á¥ó</pre></li>
+<li>¡Ö&lt;&lt;&lt; $¿©Èñ$¡×¤Ê¤ê¡Ö&gt;&gt;&gt; $¿©Èñ$¡×¤Ê¤ê¤Ç°ìÍ÷¤òɽ¼¨.
+    ¹Ê¤ê¹þ¤ß¡¦¥½¡¼¥È¤·¤ÆÈÏ°Ï»ØÄê.</li>
+<li>M-x yen-region ¤Ç, ¡Ö¢þ¢þ±ß¡×¤ò¹ç·×
+    ¢ª <a href="http://howm.sourceforge.jp/a/yen.el">yen.el</a></li>
+</ul></li>
+<li><a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool">¢ª howm wiki ¤Î¡ÖÊ»Íѥġ¼¥ë¡×</a>¤â»²¾È</li>
+</ul>
+<h2><a name="label-13" id="label-13">¼ÂÁõ</a></h2><!-- RDLabel: "¼ÂÁõ" -->
+<h3><a name="label-14" id="label-14">¼ÂÁõ¤Ë¤Ä¤¤¤Æ</a></h3><!-- RDLabel: "¼ÂÁõ¤Ë¤Ä¤¤¤Æ" -->
+<ul>
+<li>¥Õ¥¡¥¤¥ë³«¤¯¤¿¤ó¤Ó¤Ë¥¹¥­¥ã¥ó¤Ã¤Æ¤¤¤¦°Â°×¼ÂÁõ
+<ul>
+<li>~/.howm-keys ¤Ë¥­¡¼¥ï¡¼¥É¤Î°ìÍ÷</li>
+<li>¥Õ¥¡¥¤¥ë¤ò³«¤¯¤È¤­¤Ï¡Ä
+<ul>
+<li>.howm-keys ¤Î³Æ¥­¡¼¥ï¡¼¥É¤Ë¤Ä¤¤¤Æ, ½Ð¸½¤Î̵ͭ¤ò¸¡º÷</li>
+<li>½Ð¸½¥­¡¼¥ï¡¼¥É¤ò or ¤Ç¤Ä¤Ê¤¤¤ÀÀµµ¬É½¸½¤òºîÀ®</li>
+<li>¤½¤ÎÀµµ¬É½¸½¤ò font-lock ¤È action-lock ¤ËÀßÄê</li>
+</ul></li>
+<li>¥Õ¥¡¥¤¥ëÊݸ»þ¤ËÆâÍƤò¥¹¥­¥ã¥ó¤·¤Æ, ~/.howm-keys ¤ò¹¹¿·</li>
+</ul></li>
+<li>¸¡º÷
+<ul>
+<li>¥á¥â¥Ç¥£¥ì¥¯¥È¥ê ~/howm/ °Ê²¼¤òºÆµ¢Åª¤ËÁ´¸¡º÷.
+    ¥Õ¥¡¥¤¥ë̾¤â³ÈÄ¥»Ò¤â ~/howm/ °Ê²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¹½À®¤â, ¤É¤¦¤Ç¤â¤è¤¤.
+<ul>
+<li>¥Õ¥¡¥¤¥ë̾¤ÎÀ©Ìó¤Ï, 
+<ul>
+<li>¥Õ¥¡¥¤¥ë̾¤Ëǯ·îÆü¤¬Æþ¤Ã¤Æ¤¤¤ë (filter-by-date ¤Î¤¿¤á)</li>
+<li>string&lt;= ¤Ç¥½¡¼¥È¤·¤¿¤éÆü»þ½ç¤Ë¤Ê¤ë</li>
+</ul></li>
+</ul></li>
+<li>¸ß´¹¤Ê¸¡º÷´Ø¿ô¤òÆóËÜÍÑ°Õ. ¹¥¤­¤ÊÊý¤ò»È¤¨¤ë.
+<ul>
+<li>real-grep (grep ¤ò¸Æ¤Ö)</li>
+<li>fake-grep (elisp ¤Î¤ß)</li>
+</ul></li>
+</ul></li>
+<li>¥Õ¥¡¥¤¥ë¹½À®
+<ul>
+<li>howm ËÜÂΤȤÏÆÈΩ
+<ul>
+<li>bcomp.el
+<ul>
+<li>make »þ¤Ë»È¤¦¤À¤±</li>
+<li>navi2ch-cvs-0.0.20031209 ¤«¤é¼ÚÍÑ</li>
+</ul></li>
+<li>cheat-font-lock.el
+<ul>
+<li>font-lock-keywords ¤ò¸å¤«¤éÊѹ¹¤¹¤ë¤¿¤á¤Î´Ø¿ô</li>
+<li>font-lock.el ¤ÎÆâÉô¼ÂÁõ¤Ë°Í¸</li>
+</ul></li>
+<li>action-lock.el
+<ul>
+<li>action-lock-mode (minor-mode)
+<ul>
+<li>¼öʸ(Àµµ¬É½¸½)¤ÈËâË¡(´Ø¿ô)¤ÎÁȤòÅÐÏ¿</li>
+<li>¥ê¥¿¡¼¥ó¥­¡¼Ã¡¤¤¤¿¤é
+<ul>
+<li>¼öʸ¤Î¾å ¢ª ËâË¡¤¬È¯Æ°</li>
+<li>¤½¤ì°Ê³° ¢ª ËÜÍè¤Î¥ê¥¿¡¼¥ó¥­¡¼</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>riffle.el
+<ul>
+<li>riffle-{summary|contents}-mode
+<ul>
+<li>°ìÍ÷¡¦ÆâÍƤΤѤé¤Ñ¤éɽ¼¨, ÆâÍƤÎÏ¢·ëɽ¼¨</li>
+<li>°ìÍ÷¤Ç¤Ï, post-command-hook ¤Ç°ÜÆ°¸¡½Ð ¢ª ÆâÍÆɽ¼¨¤ò¹¹¿·</li>
+<li>¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ëÊÑ¿ô riffle-item-list ¤Ë¹àÌܤòÊÝ»ý</li>
+</ul></li>
+<li>gfunc.el ¤ò»ÈÍÑ</li>
+</ul></li>
+<li>gfunc.el
+<ul>
+<li>°Âľ generic function</li>
+</ul></li>
+<li>illusion.el
+<ul>
+<li>illusion-mode (minor-mode)</li>
+<li>¤Õ¤Ä¤¦¤Î¡Ö¥Õ¥¡¥¤¥ë¡×¤Ç¤Ê¤¤Âоݤò, ³«¤¤¤ÆÊÔ½¸¤·¤ÆÊݸ</li>
+<li>º£¤Î¤È¤³¤í³èÍѤµ¤ì¤Æ¤¤¤Ê¤¤</li>
+</ul></li>
+<li>honest-report.el
+<ul>
+<li>¥Ð¥°¥ì¥Ý¡¼¥È¤ÎÀ¸À®</li>
+</ul></li>
+</ul></li>
+<li>howm ËÜÂÎ
+<ul>
+<li>¼çÌò
+<ul>
+<li>howm-backend.el
+<ul>
+<li>¥Ð¥Ã¥¯¥¨¥ó¥É¤ÎʬΥ</li>
+<li>Ãê¾Ý²½
+<ul>
+<li>¥Ç¥£¥ì¥¯¥È¥ê ¢ª folder</li>
+<li>¥Õ¥¡¥¤¥ë ¢ª page</li>
+<li>¥Þ¥Ã¥Á²Õ½ê ¢ª item</li>
+</ul></li>
+</ul></li>
+<li>howm-view.el
+<ul>
+<li>howm-view-{summary|contents}-mode (major-mode)
+<ul>
+<li>riffle-{summary|contents}-mode ¤«¤éÇÉÀ¸</li>
+<li>¸¡º÷¤Î¼Â¹Ô</li>
+</ul></li>
+</ul></li>
+<li>howm-mode.el (howm-mode-mode.el ¤«¤é²þ̾[2004-07-14])
+<ul>
+<li>howm-mode (minor-mode)
+<ul>
+<li>¾å½Ò¤Î¥¹¥­¥ã¥ó¤Ê¤É</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>ÏÆÌò
+<ul>
+<li>howm-date.el
+<ul>
+<li>ÆüÉÕÆþÎϤλٱç</li>
+</ul></li>
+<li>howm-reminder.el
+<ul>
+<li>ÉâÄÀ¼° todo</li>
+</ul></li>
+<li>howm-menu.el
+<ul>
+<li>howm-menu-mode (major-mode)</li>
+</ul></li>
+</ul></li>
+<li>ÀßÄê
+<ul>
+<li>howm-version.el
+<ul>
+<li>Äê¿ô howm-version ¤òÀßÄꤹ¤ë¤À¤±</li>
+</ul></li>
+<li>howm-vars.el
+<ul>
+<li>defvar, defcustom, Åù</li>
+</ul></li>
+<li>howm-lang-*.el
+<ul>
+<li>¸À¸ì°Í¸¤ÎÊÑ¿ô</li>
+</ul></li>
+<li>howm-menu-*.el
+<ul>
+<li>½é´ü¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòʸ»úÎóÄê¿ô¤È¤·¤ÆÄêµÁ</li>
+</ul></li>
+<li>howm-mkmenu.el
+<ul>
+<li>howm-menu-*.el ¤ò ja/0000-00-00-000000.txt Åù¤«¤éÀ¸À®¤¹¤ë¥¹¥¯¥ê¥×¥È</li>
+<li>ºî¼Ô°Ê³°¤Ï»È¤¦É¬Íפʤ¤¤Ï¤º</li>
+</ul></li>
+</ul></li>
+<li>Ȭ
+<ul>
+<li>howm-cl.el
+<ul>
+<li>cl ¥Ñ¥Ã¥±¡¼¥¸¤Ø¤Î°Í¸¤ò¤Þ¤È¤á¤¿¤À¤±</li>
+</ul></li>
+<li>howm-common.el
+<ul>
+<li>howm-*.el ¤Ç require</li>
+<li>ÆäË, ¥Õ¥¡¥¤¥ë¤Þ¤¿¤¤¤Ç»È¤¦¥Þ¥¯¥í¤Ï¤³¤³¤Ø (¢è byte-compile Âкö)</li>
+</ul></li>
+<li>howm-misc.el
+<ul>
+<li>Ȭ</li>
+</ul></li>
+<li>howm.el (howm-mode.el ¤«¤é²þ̾[2004-07-14])
+<ul>
+<li>¥á¥¤¥ó¥Õ¥¡¥¤¥ë. require ¤¹¤ë¤À¤±.</li>
+</ul></li>
+</ul></li>
+</ul></li>
+</ul></li>
+</ul>
+<h3><a name="label-15" id="label-15">Æ°¤­¤Þ¤»¤ó¤è?</a></h3><!-- RDLabel: "Æ°¤­¤Þ¤»¤ó¤è?" -->
+<p>(¥Ð¥°¤Î»ØŦ¤ò¤¯¤À¤µ¤ëÊý¤Ø)</p>
+<ul>
+<li>°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¤¤¤¿¤À¤¯¤È, Ä´ºº¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹
+<ul>
+<li><p>¤Ç¤­¤ë¤À¤± make test ¤ò¤ª´ê¤¤¤·¤Þ¤¹</p>
+<pre>cd howm-¡û.¡û.¡û
+make test</pre></li>
+<li>win ¤Ê¤é, test.bat ¤ò¤ª´ê¤¤¤·¤Þ¤¹
+<ul>
+<li>test.bat Ãæ¤Î¡ÖHOWM_EMACS=¡Ä¡×¤ò´Ä¶­¤Ë¤¢¤ï¤»¤Æ½¤Àµ</li>
+<li>test.bat ¤ò¼Â¹Ô</li>
+</ul></li>
+<li>¤É¤Á¤é¤â, emacs ¤¬Î©¤Á¤¢¤¬¤ê, ¼ÁÌäɼ¤¬É½¼¨¤µ¤ì¤Þ¤¹</li>
+<li><a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportFAQ">¤Ê¤ó¤Ç¤ï¤¶¤ï¤¶? ¢ª ¥Ð¥°¥ì¥Ý¡¼¥ÈFAQ</a></li>
+</ul></li>
+<li>Êä­: ¥¬¥¤¥·¥å¥Ä¾åÅù
+<ul>
+<li>¡Ö»ÅÍͤ«¡×¡Ö´ûÃΤΥХ°¤«¡×¤Î¥Á¥§¥Ã¥¯¤Ã¤Æ, ¤ª¤Ã¤¯¤¦¤Ç¤¹¤è¤Í¤¨.</li>
+<li>howm ¤Ë´Ø¤·¤Æ¤Ï, ¤³¤Î¥Á¥§¥Ã¥¯¤ÏÉÔÍפǤ¹.
+    ¤½¤ì¤è¤ê¤â, µ¤·Ú¤Ë¤É¤ó¤É¤ó»ØŦ¤·¤Æ¤¤¤¿¤À¤¯Êý¤¬¤¢¤ê¤¬¤¿¤¤¤Ç¤¹.</li>
+<li>¤¼¤Ò, ºî¼Ô¤ÎÌܤ¬ÆϤ¯¤È¤³¤í(2ch ¤« howm wiki)¤Ë¤¿¤ì¹þ¤ó¤Ç¤¯¤À¤µ¤¤.</li>
+<li>cf.
+    <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportFAQ">¥Ð¥°¥ì¥Ý¡¼¥ÈFAQ</a>,
+    <a href="http://web.archive.org/web/20041018232953/http://nnri.dip.jp/~yf/cgi-bin/yaswiki.cgi?name=%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9%A4%CF%B2%BC%C4%AE%B5%A4%BC%C1">YASWiki:¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ï²¼Ä®µ¤¼Á</a></li>
+</ul></li>
+<li>ºî¼Ô³Ð½ñ
+<ul>
+<li>¥Ç¥Ð¥Ã¥°ÍÑÊÑ¿ô howm-call-process-last-command</li>
+<li>C-u M-x howm-bug-report ¤Ç´ØÏ¢ÊÑ¿ô¤Î°ìÍ÷</li>
+<li>M-x howm-elp ¤Ç, ¥×¥í¥Õ¥¡¥¤¥é elp ¤Î½àÈ÷</li>
+</ul></li>
+</ul>
+<h2><a name="label-16" id="label-16">È÷¹Í</a></h2><!-- RDLabel: "È÷¹Í" -->
+<h3><a name="label-17" id="label-17">»²¹Í</a></h3><!-- RDLabel: "»²¹Í" -->
+<p><a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?IdeaSource">¸µ¥Í¥¿</a>»²¾È.
+ÆäË, Q-pocket¡¦HashedWiki¡¦ChangeLog ¥á¥â¤«¤é¤¤¤Ã¤Ñ¤¤¤Þ¤Í¤·¤Æ¤Þ¤¹. ´¶¼Õ.</p>
+<ul>
+<li>¹­À¥ÍºÆóÃø¡Ö¤ä¤µ¤·¤¤ Emacs-Lisp ¹ÖºÂ¡×(¥«¥Ã¥È¥·¥¹¥Æ¥à, 1999)
+  ISBN 4-906391-70-2
+  ¢ª 
+  <a href="http://www.gentei.org/~yuuji/elisp/">¥ª¥ó¥é¥¤¥óÈÇ (¾¶?)</a>
+<ul>
+<li>elisp ¤Ï¤¸¤á¤ë¤Ê¤é°µÅÝŪ¤Ë¤ª¤¹¤¹¤á</li>
+<li>6.4 ¾ÏËöÌäÂê¤Î¡Ö¥µ¥¯¥µ¥¯ dired¡×¤ò»²¹Í¤Ë¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿</li>
+</ul></li>
+</ul>
+<h3><a name="label-18" id="label-18">¹¹¿·µ­Ï¿</a></h3><!-- RDLabel: "¹¹¿·µ­Ï¿" -->
+<p>thx &gt; patch¡¦²þÎÉ°Æ¡¦»ØŦ¤ò¤¯¤À¤µ¤Ã¤¿³§ÍÍ</p>
+<ul>
+<li>¥Æ¥¹¥ÈÈÇ
+<ul>
+<li>[2016-01-01]
+<ul>
+<li>¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð¤ò²óÈò
+<ul>
+<li>cl ¤ò¤ä¤á¤Æ cl-lib ¤ò»È¤¦</li>
+<li>howm-ime-fix (howm-1.1.1 °ÊÁ°¤Î canna, egg, yc, anthy ¸ÄÊÌÂкö) ¤òÇÑ»ß</li>
+<li>¤½¤Î¾¤³¤Þ¤´¤Þ</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>¥ê¥ê¡¼¥¹ÈÇ howm-1.4.3 [2015-12-31]
+<ul>
+<li>emacs 25.1.50.1 (2015-12-27 »þÅÀ¤Î git Àèü = de88375) ¤Çµ¯Æ°¤ò³Îǧ</li>
+<li>howm-1.4.3rc1 ¤ÈƱ¤¸ÆâÍƤǤ¹</li>
+<li>fix
+<ul>
+<li>git Àèü emacs ¤Ç¤Î¥¨¥é¡¼ (void-function ed)</li>
+<li>C-c , A (howm-list-around) ¤Ç howm-list-title ¤ÎÀßÄ꤬¸ú¤¤¤Æ¤¤¤Ê¤«¤Ã¤¿
+      <a href="http://peace.2ch.net/test/read.cgi/unix/1397477663/39">thx</a></li>
+<li><a href="http://howm.osdn.jp/cgi-bin/hiki/hiki.cgi?Recentf">howm-recentf</a>¤Ê¤É¤Ç̵Â̤˥ê¥â¡¼¥È¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¥ï¡¼¥É¤òʹ¤¤¤Æ¤³¤Ê¤¤¤è¤¦¤Ë.
+      thx &gt; ¸ñ¹¾±Ñ䤵¤ó (hide at koie.org)</li>
+<li>¥É¥­¥å¥á¥ó¥È¤Î¥Õ¥¡¥¤¥ë¥â¡¼¥É¤ÎÄûÀµ</li>
+</ul></li>
+</ul></li>
+<li>¥ê¥ê¡¼¥¹ÈÇ howm-1.4.2 [2013-12-31]
+<ul>
+<li>Note
+<ul>
+<li>emacs 24.3 ¤ËÂбþ. 2013-12-25 »þÅÀ¤Î trunk (24.3.50.1) ¤Ç¤âµ¯Æ°¤ò³Îǧ.</li>
+<li>howm-test130321 ¤ä howm-1.4.2rc1 ¤ÈƱ¤¸ÆâÍƤǤ¹</li>
+</ul></li>
+<li>²þÎÉ
+<ul>
+<li>C-c , a (howm-list-all) ¤ò¹â®²½
+      <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste">thx</a></li>
+</ul></li>
+<li>fix
+<ul>
+<li>emacs 24.3.1 ¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤»¤º¤Ë¼Â¹Ô¤·¤¿¤È¤­¤Î¥¨¥é¡¼
+      "Can't detect type of ..."
+      <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste">thx</a></li>
+<li>¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯²¼¤Ç¿·µ¬¥á¥â¤¬ howm-mode ¤Ë¤Ê¤é¤Ê¤¤¥Ð¥°
+      <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste">thx</a></li>
+<li>¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð</li>
+</ul></li>
+</ul></li>
+<li>¥ê¥ê¡¼¥¹ÈÇ howm-1.4.1 [2012-12-27]
+<ul>
+<li>~/.howm-keys ¤¬Ìµ¤«¤Ã¤¿¤é, Á´¥á¥â¤ò¥¹¥­¥ã¥ó¤·¤ÆºÆÀ¸À®
+    <a href="http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000099.html">thx</a>
+    &gt; Albert-san (areiner at tph.tuwien.ac.at)</li>
+<li>fix: *.txt ¤È *.howm ¤¬º®ºß¤·¤Æ¤â°ìÍ÷¥â¡¼¥É¤Îɽ¼¨¤¬¤º¤ì¤Ê¤¤¤è¤¦¤Ë
+    <a href="http://toro.2ch.net/test/read.cgi/unix/1141892764/940">thx</a></li>
+</ul></li>
+<li>¥ê¥ê¡¼¥¹ÈÇ howm-1.4.0 [2012-08-16]
+<ul>
+<li>Note
+<ul>
+<li><em>Èó¸ß´¹Êѹ¹</em>¤ËÃí°Õ!
+<ul>
+<li><p>1.3.* ¤É¤ª¤ê¤ÎµóÆ°¤ò˾¤à¤Ê¤é¢­</p>
+<pre>(setq howm-compatible-to-ver1dot3 t) ;; (require 'howm) ¤è¤êÁ°¤Ë!</pre></li>
+<li>¸ÄÊ̤ËÀßÄꤷ¤¿¤±¤ì¤Ð, M-x customize-group RET howm-compatibility RET</li>
+</ul></li>
+<li>Ť¤¤³¤È±£¤·µ¡Ç½¤À¤Ã¤¿¤â¤Î¤ò¸ø¼°µ¡Ç½¤Ë¤·¤Þ¤·¤¿.</li>
+<li>emacs-24 Âбþ</li>
+<li>howm-1.4.0rc2 ¤ÈƱÆâÍƤǤ¹.</li>
+</ul></li>
+<li>Êѹ¹
+<ul>
+<li>howm-file-name-format ¤Î¥Ç¥Õ¥©¥ë¥È¤ò *.howm ¤«¤é *.txt ¤ËÊѹ¹
+<ul>
+<li>³ÈÄ¥»Ò¤Î¤»¤¤¤Ç¾¥Ä¡¼¥ë¤È¤ÎÏ¢·È¤Ëº¤¤Ã¤Æ¤¤¤ë¤é¤·¤¤»öÎã¤ò¸«¤«¤±¤ë¤Î¤Ç</li>
+</ul></li>
+<li>°ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Î¤È¤­¤â, ¹Ê¤ê¹þ¤ßÅù¤ò¥Õ¥¡¥¤¥ëñ°Ì¤¸¤ã¤Ê¤¯¥á¥âñ°Ì¤Ë.
+      ¤¿¤À¤·, date ¤Ç¤Î¹Ê¤ê¹þ¤ß¤Ï¥Õ¥¡¥¤¥ëñ°Ì¤Î¤Þ¤Þ.</li>
+<li>¥¿¥¤¥È¥ë¤¬¶õ¤Î¤È¤­¤ÏËÜʸ¤Î°ì¹ÔÌܤò¥¿¥¤¥È¥ë¤Ë.</li>
+</ul></li>
+<li>¤³¤Þ¤´¤Þ²þÎÉ
+<ul>
+<li><p>¥á¥Ë¥å¡¼¤Ë°Ê²¼¤ò½ñ¤±¤Ð, ¥¿¥¤¥à¥¹¥¿¥ó¥×½ç¤Ç¤Ê¤¯¥Õ¥¡¥¤¥ë̾½ç¤Î¾å°Ì¤òɽ¼¨.
+      <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/890">thx</a></p>
+<pre>%here%(howm-menu-recent identity)</pre></li>
+<li><p>¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ¤â¥Ó¥å¡¼¥¢¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë.
+      <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/891">thx</a></p>
+<pre>;; ¡Öfile://¡Ä/¡×¤ä¡Ö&gt;&gt;&gt; ¡Ä/¡×¤Ï open ¥³¥Þ¥ó¥É(mac ÍÑ)¤Ç³«¤¯
+(setq howm-view-external-viewer-assoc '(("/$" . "open %s")))</pre></li>
+<li>ÊÑ¿ô howm-normalizer ¤Î¤¢¤ê¤¬¤Á¤ÊÀßÄê¥ß¥¹¤ò»¡¤¹¤ë¤è¤¦¤Ë
+      <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/865-870n">thx</a></li>
+<li>¥É¥­¥å¥á¥ó¥È¤Î¸Å¤¤²Õ½ê¤ò¼êľ¤·</li>
+<li>rast ¤Þ¤ï¤ê¤Î»îºî¤òºï½ü</li>
+</ul></li>
+<li>±£¤·µ¡Ç½¤Î¸ø¼°²½
+<ul>
+<li>¥³¥Þ¥ó¥É
+<ul>
+<li>C-c , e (howm-remember)
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/24-25n">thx</a>
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/61">thx</a>
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/72-75n">thx</a>
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/92-93n">thx</a>
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/99">thx</a></li>
+<li>C-c , b (howm-list-buffers)</li>
+<li>C-c , x (howm-list-mark-ring)</li>
+<li>C-c , o (howm-occur)</li>
+</ul></li>
+<li>¥ê¥Þ¥¤¥ó¥À
+<ul>
+<li>¥á¥Ë¥å¡¼¤Ë¡Ö%reminder¡×¤È½ñ¤¯¤È, Í½Äê¤È todo ¤ÎÅý¹ç°ìÍ÷
+<ul>
+<li>ͽÄê¡Ö@¡×¤Ï,
+          howm-menu-schedule-days-before ÆüÁ°¤«¤é
+          howm-menu-schedule-days Æü¸å¤Þ¤Ç¤òÀèƬ¤Ëɽ¼¨
+<ul>
+<li>[2004-12-03]@5 ¤Ê¤É¤È½ñ¤¯¤È, ¡Ö5 Æü´Ö¡×¤Î°Õ
+            (ÅöÆü¤â´Þ¤à¤Î¤Ç¡Ö12·î3Æü¤«¤é12·î7Æü¤Þ¤Ç¡×).
+            °ìÍ÷¤«¤é¾Ã¤¨¤ë¤Î¤¬¤½¤ì¤À¤±Í±Í½¤µ¤ì¤ë.
+            <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/516">thx</a></li>
+</ul></li>
+<li>¡ºÀÚ¡Ö!¡×¤â, ¡ºÀÚÆü¤¬¤½¤ÎÈϰϤޤǤʤé°ì½ï¤Ëɽ¼¨</li>
+<li>¤½¤ì¤è¤ê²¼¤Ï½¾Íè¤É¤ª¤ê</li>
+<li>½¾Íè¤Î %schedule + %todo ¤È¤¯¤é¤Ù¤ë¤È, ¥¹¥­¥ã¥ó¤¬°ì²ó¤Ç¤¹¤à¤Ö¤ó¸úΨŪ</li>
+</ul></li>
+<li>[2005-05-15 21:37]@ ¤Î¤è¤¦¤Ê½ñ¼°¤ÎͽÄê¤Ï, »þ¹ï½ç¤Ë¥½¡¼¥È
+        <a href="http://pc.2ch.net/test/read.cgi/unix/1063800495/141">thx</a>
+        <a href="http://pc.2ch.net/test/read.cgi/unix/1063800495/148">thx</a>
+        <a href="http://pc.2ch.net/test/read.cgi/unix/1063800495/597">thx</a>
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/683">thx</a></li>
+<li><p>¥á¥Ë¥å¡¼¤«¤é¥ê¥Þ¥¤¥ó¥À¤òľá¤­¤·¤¿¤È¤­¤Ë,
+        Âбþ¥Ð¥Ã¥Õ¥¡¤Î¹Ô¿ô¤¬Â¿¾¯¤º¤ì¤Æ¤¤¤Æ¤âµö¤¹.
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/519">thx</a></p>
+<pre>(setq howm-action-lock-forward-fuzziness 5) ;; ²¿¹Ô¤Þ¤Ç¤º¤ì¤Æ¤âµö¤¹¤«</pre></li>
+</ul></li>
+<li><a href="#label-11">¥«¥¹¥¿¥Þ¥¤¥º</a>
+<ul>
+<li>¾åµ­ %reminder ¤ä todo list Ãæ¤Î»ÅÀÚ¤ê</li>
+<li>grep »ÈÍÑ»þ¤Î coding system »ØÄê
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/784">thx</a></li>
+<li>howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/42">thx</a>
+        <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Idea">thx</a>
+        &gt; taku ¤µ¤ó</li>
+<li>todo ¤òºÑ¤Þ¤»¤¿¤È¤­¤Ë»ØÄꥳ¥Þ¥ó¥É¤ò¼Â¹Ô (howm-congrats-command)</li>
+</ul></li>
+</ul></li>
+<li>fix: 2012-01-21 °Ê¹ß¤Î emacs-24 ¤Ç¥¨¥é¡¼ (void-variable inhibit-first-line-modes-regexps)
+    <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste">thx</a>
+    thx &gt; º´¡¹ÌÚ ´² ¤µ¤ó (sasaki at fcc.ad.jp)</li>
+</ul></li>
+<li>±£¤·µ¡Ç½ (experimental)
+<ul>
+<li>1.1.1.* °ÊÁ°¤«¤é
+<ul>
+<li>¥½¡¼¥¹¥³¡¼¥É¤ÎÆɤ߽ñ¤­¤â howm ¤Ç
+<ul>
+<li><a href="http://www.tamacom.com/global-j.html">GNU global</a>
+        (<a href="http://www.tamacom.com/tour/lang/ruby/S/21.html">Îã</a>)
+        ¤â¤É¤­¤Î on the fly ÈǤᤶ¤·¤Æ</li>
+<li>¤Þ¤À³«È¯Ãæ. Ì£¸«¤¹¤ë¤Ë¤Ï¡Ä
+<ul>
+<li>ÊÑ¿ô howm-configuration-for-major-mode ¤òÀßÄê
+<ul>
+<li>major-mode ¤Ë±þ¤¸¤Æ, come-from ¥ê¥ó¥¯Åù¤Î½ñ¼°¤òÊѤ¨¤ë</li>
+<li>howm-misc.el ¤Î¥³¥á¥ó¥È»²¾È</li>
+</ul></li>
+<li>M-x howm-open-directory-independently ¤·¤Æ ~/elisp/howm ¤Ê¤É¤ÈÆþÎÏ</li>
+</ul></li>
+<li>ÀµÂΤϷë¶É grep ¤Ê¤ó¤À¤«¤é, ¤¢¤Þ¤ê¸­¤¤Æ°ºî¤ò´üÂÔ¤·¤Æ¤Ï¤¤¤±¤Ê¤¤
+<ul>
+<li>elisp, tex ¤Ç¤ÏÊØÍø¤À¤±¤É, ruby ¤¸¤ã»È¤¤¤â¤Î¤Ë¤Ê¤é¤º.
+<ul>
+<li>¢è elisp ¤Î´Ø¿ô̾¤ä tex ¤Î¥é¥Ù¥ë¤ÏÂç°èŪ¤Ë°ì°Õ. ruby ¤ÏÈÝ.</li>
+</ul></li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>1.2
+<ul>
+<li><p>°ìÍ÷»þ¤ÎÆâÍƥХåե¡¤Ë¥Õ¥¡¥¤¥ëÁ´ÂΤòɽ¼¨¤µ¤»¤ë</p>
+<pre>(setq howm-view-preview-narrow nil)</pre>
+<ul>
+<li>Ï¢·ë»þ¤Ï½¾Íè¤É¤ª¤ê(¥á¥â¶èÀÚ¤ê¤ÎÈϰϤΤß)</li>
+<li>howm-configuration-for-major-mode °Ê³°¤Ç»È¤¦¾ìÌ̤Ï, ¤Þ¤¢¤Ê¤¤¤Ç¤·¤ç¤¦</li>
+</ul></li>
+<li>¥ê¥Þ¥¤¥ó¥À
+<ul>
+<li><p>¥ê¥Þ¥¤¥ó¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/296">thx</a></p>
+<pre>;; ¿·¤·¤¤·¿¤Î¥ê¥Þ¥¤¥ó¥À¡Ö*¡×¤òÄêµÁ¤¹¤ëÎã:
+;; ¡Ö[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)</pre>
+<ul>
+<li>»²¹Í: ´û¸¤Î½ÜÅٴؿô¤Î¥°¥é¥Õ¤¬
+          <a href="http://howm.sourceforge.jp/uu/#label:11">UNIX USER »ï¤Îµ­»ö</a>
+          ¤Ë½Ð¤Æ¤Þ¤¹</li>
+<li>¥Ð¥°
+<ul>
+<li>°ìÉô¤Îµ­¹æ¤Ï¤³¤±¤½¤¦ (Àµµ¬É½¸½ [¡Ä] Æâ¤ÇÆÃÊ̤ʰÕÌ£¤ò»ý¤Äµ­¹æ¤Ï¡ß)</li>
+<li>¡Ö[2004-07-11]- ¤Û¤²¡×¤«¤é¡Ö-¡×¾å¤Ç RET ¤·¤Æ¡Ö*¡×¤òÆþÎϤ¹¤ë¤È¥¨¥é¡¼</li>
+</ul></li>
+<li>¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. ¤³¤ó¤Ê¤ó¤Ç¤¤¤¤¤ó¤Ç¤·¤ç¤¦¤«?</li>
+</ul></li>
+</ul></li>
+<li>ÆüÉÕ·Á¼°
+<ul>
+<li><p>ÆüÉÕ¾å¤Ç RET¡ß2 ¤·¤Æ¤«¤é¡Ä</p>
+<pre>-, + ¢ª Á°Æü, ÍâÆü
+(, ) ¢ª Á°Æü, ÍâÆü
+{, } ¢ª Á°·î, Íâ·î
+[, ] ¢ª Á°Ç¯, Íâǯ</pre>
+<ul>
+<li>C-u 20 - ¢ª 20ÆüÁ°</li>
+<li><p>¥Ò¥Ã¥È¤·¤Ê¤«¤Ã¤¿¤é¤½¤ÎÀè¤ÎÆüÉÕ¤ò½ç¤Ëõ¤¹</p>
+<pre>(setq howm-date-forward-ymd-limit 90)  ;; 90ÆüÀè¤Ç give up</pre></li>
+<li>¤â¤Ã¤È¤Þ¤·¤Ê¥­¡¼ÀßÄê¤Ê¤¤¤«¤Í¤¨</li>
+</ul></li>
+<li><p>ÆüÉÕÆþÎÏ¡ÖC-c , d¡×¤·¤¿¤È¤­¤ÎÆ°ºî¤ò¤µ¤é¤Ë¾®¸­¤·¤¯</p>
+<pre>(setq howm-insert-date-pass-through t)</pre>
+<ul>
+<li>ÆüÉÕ¥³¥Þ¥ó¥É¤Ë¤Ä¤¤¤Æ¤Ï¸µ¤ÈƱÍÍ</li>
+<li>ÆüÉÕ¥³¥Þ¥ó¥É¤¸¤ã¤Ê¤¤¤È¤­¤Ï, ¤¿¤À¤Á¤ËÈ´¤±¤ë.
+          C-c , d hoge ¤È¤« C-c , d C-a ¤È¤«»î¤»¤Ð¤ï¤«¤ê¤Þ¤¹.</li>
+<li>¤·¤Þ¤Ã¤¿. ¡Ö[2004-05-21]+¡×¤È¤«ÆþÎϤ·¤è¤¦¤È¤¹¤ë¤È¤È¤Þ¤É¤¦.
+          ¡Ö+ RET¡×¤Ç¡Ö+¤òÁÞÆþ¡×¤Ë¤Ï¤·¤Æ¤ß¤¿¤±¤É¡Ä</li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>1.2.1
+<ul>
+<li>Major
+<ul>
+<li>howm2 ¤Îºî¤êľ¤·? (ext/howmkara)
+<ul>
+<li>ɬÍפˤ»¤Þ¤é¤ì¤Æ¤Ç¤Ã¤Á¤¢¤². Ì¾Á°¤â¤Æ¤­¤È¤¦.
+<ul>
+<li>ɬÍפÏËþ¤¿¤µ¤ì¤¿¤«¤é, ¤Þ¤¿ÊüÃÖ¤«¤â. Ã¯¤«¤É¤¦¤Ë¤«¤·¤Æ¤¯¤ì¤ì¤Ð¡Ä</li>
+</ul></li>
+<li>µ¡Ç½¤ÏÂಽ. ¥½¡¼¥¹¤ÏÁ°¤è¤ê¤Ï¤Þ¤·.
+<ul>
+<li>magic string ¤¬¤Á¤é¤Ð¤Ã¤Æ¤ë¤Î¤Ï¤±¤·¤«¤é¤ó¤±¤É¡Ä</li>
+</ul></li>
+<li>°ì¥á¥â°ì¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤¹¤ë ext/hsplit.rb ¤â½ñ¤¤¤¿¤±¤É,
+          ¤³¤ì¤Ï¤µ¤é¤Ë¼êÈ´¤­</li>
+</ul></li>
+</ul></li>
+<li>Minor
+<ul>
+<li>hcal.rb ¤Î¡Ö[2004-09-02]?¡×Âбþ(¼«Ê¬ÀìÍѤ½¤Î¤Ð¤·¤Î¤®)
+        <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?TangledToDo">ref</a></li>
+<li>M-x howm-return-to-list ¢ª °ìÍ÷ɽ¼¨¤ËÌá¤ë
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/377">thx</a>
+<ul>
+<li>¤È¤êµÞ¤®Ä¶»¨¤Ç¤Ã¤Á¤¢¤². È¿¶Á¤Ë±þ¤¸¤Æ¤Þ¤¿¹Í¤¨¤è¤¦.</li>
+<li><p>°ìÍ÷ɽ¼¨¤Ë¤¤¤Á¤¤¤ÁÌá¤ë¤³¤È¤Ê¤¯, °ìÍ÷¤Î¼¡¹àÌܤòľÀܳ«¤¯:</p>
+<pre>(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)))</pre></li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>1.2.2
+<ul>
+<li>Æüì¥Õ¥©¥ë¥À
+<ul>
+<li>namazu folder »îºî
+<ul>
+<li>¥³¡¼¥É»¨¤¹¤®</li>
+<li>+from: ¤Ê¤É¤Ë̤Âбþ</li>
+<li>ľÀܸ¡º÷¤¹¤ë¤Ë¤Ï M-x howm-search-namazu</li>
+</ul></li>
+<li>rot13 folder/page »îºî
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/580">thx</a>
+<ul>
+<li>¤³¤ì¼«ÂΤϤªÍ·¤Ó¤À¤±¤É, ¡Ö¤Õ¤Ä¤¦¤Ç¤Ê¤¤¥Ú¡¼¥¸¡×¤ÎÎý½¬¤È¤·¤Æ</li>
+<li>rot13:xxx ¥Ð¥Ã¥Õ¥¡¤Ï, C-c C-c ¤Ç¡Örot13 ¤·¤ÆÊݸ¡×
+<ul>
+<li>rot13 ¤Ê¥Õ¥¡¥¤¥ë¤ò³«¤¯¤Ë¤Ï, M-x yarot13-find-file</li>
+</ul></li>
+</ul></li>
+<li><p>howm-search-path ¤Ë, Ä̾ï¤Î¡Ö¥Ç¥£¥ì¥¯¥È¥ê¡×°Ê³°¤â½ñ¤±¤ë</p>
+<pre>;; 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 ¤Ê¤é½é´ü¾õÂ֤ϡÖ̵¸ú¡×</pre></li>
+</ul></li>
+<li>[2004-12-13]_3 ¤ÎͱͽÆü¿ô¡Ö3¡×¤Î°ÕÌ£¤ò 1 ¤º¤é¤·¤¿
+<ul>
+<li>¤¤¤Þ¤Þ¤Ç¤Ï, ¾Êά¤È 0 ¤È 1 ¤¬Æ±¤¸°ÕÌ£¤Ë¤Ê¤Ã¤Æ¤¤¤¿</li>
+<li>¤¤¤º¤ìµ¤¤¬¸þ¤¤¤¿¤é, ¤â¤Ã¤È¤Þ¤¸¤á¤Ë¼ÂÁõ¤·¤Ê¤ª¤¹¤«¤â
+        <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/522">thx</a></li>
+</ul></li>
+<li>ext/hcal.rb ¤Ë iCalendar ½ÐÎϤòÄɲÃ, ¡Ä¤ÎºÇÄã¸Â¤Î¤È¤Ã¤«¤«¤ê¤À¤±</li>
+</ul></li>
+<li>1.3.1
+<ul>
+<li>¿·¤·¤¤¡Ö¥Ð¥°¤Î»ØŦ¤Î¼ê½ç¡×°Æ
+<ul>
+<li>make test ¤Ç emacs ¤òµ¯Æ°</li>
+<li>¥Ð¥°¤òȯ¾É¤µ¤»¤ë
+<ul>
+<li>ȯ¾É¤·¤Ê¤±¤ì¤Ð, ¼«Ê¬¤Î .emacs ¤«¤é´ØÏ¢¤·¤½¤¦¤Ê¤È¤³¤í¤ò
+          sample/dot.emacs ¤Ø¥³¥Ô¡¼¤·¤Æ, ¤â¤¦°ìÅÙ make test</li>
+</ul></li>
+<li>ȯ¾É¤·¤¿¤é¤¹¤«¤µ¤º M-x howm-bug-shot
+<ul>
+<li>¥Ð¡¼¥¸¥ç¥ó¤ä¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È¤Ê¤É¤¬É½¼¨¤µ¤ì¤Þ¤¹</li>
+</ul></li>
+<li>¥³¥á¥ó¥È¤ò²Ã¤¨¤Æ 2ch ¤ËŽ¤ë</li>
+</ul></li>
+</ul></li>
+<li>1.3.3
+<ul>
+<li><p>¿·µ¬¥á¥âºîÀ®¤ò¤¹¤Ù¤Æ howm-remember ¤Ë¤¹¤ë¤Ë¤Ï¡Ä</p>
+<pre>;; 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] ½¤Àµ</pre>
+<ul>
+<li>¥á¥Ë¥å¡¼¾å¤Ç c ¤ò²¡¤·¤¿¤È¤­, ¡Ö¥á¥Ë¥å¡¼¤ÎÁ°¤Ëɽ¼¨¤·¤Æ¤¤¤¿¥Ð¥Ã¥Õ¥¡¡×
+        ¤ò½Ð¤¹Êý¤¬¹¥¤ß¤Ê¤é, ¡Öcurrent¡×¤ò¡Öprevious¡×¤Èľ¤·¤Æ¤¯¤À¤µ¤¤</li>
+</ul></li>
+<li>¥«¥Æ¥´¥êÊ̤Πtodo list
+      <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/885">thx</a>
+      <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/890">thx</a>
+      <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/909">thx</a>
+      <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/919">thx</a>
+<ul>
+<li>¡ÖʬÎà¡×¤ÎÍ×˾¤Ï¤Ä¤Ã¤Ñ¤Í¤Æ¤­¤¿¤ó¤À¤±¤É, º£Æü¤Ïµ¤¤Þ¤°¤ì¤Ëµ¤¤¬¸þ¤¤¤¿¤Î¤Ç
+        ¤ª»î¤·. Àµ¼°µ¡Ç½¤Ë¤·¤Æ¤¤¤¯¤«¤É¤¦¤«¤Ï̤Äê.</li>
+<li><p>¥á¥Ë¥å¡¼¤Ë¤³¤¦½ñ¤¯¤È, ¡Öfoo¡×¡Öbar¡×¡Öbaz¡×¤ò´Þ¤à todo ¤ò
+        Ê¬Îष¤Æɽ¼¨</p>
+<pre>%here%(howm-menu-categorized-reminder ("foo" "bar" "baz"))</pre>
+<ul>
+<li>¤Á¤Ê¤ß¤Ë, %here% ¤Ç¤Ï¥¯¥ª¡¼¥È¤ÏÉÔÍפǤ¹</li>
+</ul></li>
+<li><p>¤µ¤é¤Ë, ³Æ¹Ô¤Î¡Öfoo¡×¡Öbar¡×¡Öbaz¡×¤ò¾Ã¤·¤¿¤±¤ì¤Ð</p>
+<pre>%here%(howm-menu-categorized-reminder ("foo" "bar" "baz") nil t)</pre></li>
+<li><p>¡Ömisc.¡×¤òÈóɽ¼¨¤Ë¤·¤¿¤±¤ì¤Ð</p>
+<pre>%here%(howm-menu-categorized-reminder ("foo" "bar" "baz") nil nil t)</pre></li>
+</ul></li>
+<li><p>°ìÍ÷¥Ð¥Ã¥Õ¥¡¤Î¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨.
+      ¤Á¤Ê¤ß¤Ë½¾Íè¤Î¤Ï, ¡Ö¥Þ¥Ã¥ÁÆâÍƤΤ«¤ï¤ê¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨¡×.
+      <a href="http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000025.html">thx</a> &gt; Highfly ¤µ¤ó</p>
+<pre>(setq howm-view-list-title-type 2) ;; ¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨
+(setq howm-view-summary-format "") ;; ¥Õ¥¡¥¤¥ë̾¤ò¾Ã¤·¤¿¤±¤ì¤Ð</pre></li>
+<li>C-c , M ¤Ç¡Ö¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Æ¥á¥â¤ò³«¤¯¡×
+      <a href="http://lists.sourceforge.jp/mailman/archives/howm-eng/2005/000010.html">thx</a> &gt; Eduardo Ochs ¤µ¤ó</li>
+</ul></li>
+<li>1.3.7
+<ul>
+<li><p>°ìÍ÷»þ¤Ë¥¦¥£¥ó¥É¥¦Ê¬³ä¤ò²õ¤µ¤Ê¤¤ÀßÄê.
+      <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/507">thx</a></p>
+<pre>(setq riffle-keep-window t)
+(setq riffle-window-initializer nil)</pre>
+<ul>
+<li>ÆâÍƥХåե¡¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó.</li>
+<li>¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. º£¸åÊѹ¹¤Î²ÄǽÀ­¤¢¤ê.</li>
+</ul></li>
+<li>M-x howm-list-active-todo ¤Ç, ¸½ºßÍ­¸ú¤Ê(¡áÀøÉúÃæ¤Ç¤Ê¤¤) todo ¤Î¤ß¤ò°ìÍ÷.
+      <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/129-131n">thx</a>
+<ul>
+<li>¤Ä¤¤¤Ç¤Ë, M-x howm-list-sleeping-todo ¤Ç, ÀøÉúÃæ¤Î todo ¤Î¤ß¤ò°ìÍ÷.</li>
+<li>¤È¤ê¤¢¤¨¤º´Ø¿ô¤À¤±»îºî. ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î°Æ¤¬¤¢¤ì¤Ð¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤.</li>
+<li>¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤«¤éÀøÉúÃæ todo ¤ò¾Ã¤¹¤Ë¤Ï,
+        M-x customize-variable RET howm-menu-todo-priority RET ¤Ç
+        ¡ÖHide sleeping reminders¡×¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤.</li>
+</ul></li>
+<li><p>¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë¤¹¤ë.
+      <a href="http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000020.html">thx</a> &gt; Mielke-san (peter at exegenix.com),
+      <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool">thx</a></p>
+<pre>;; emacs ¾å¤Ç¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë.
+;; (¥Õ¥¡¥¤¥ë̾¼«ÂΤÏÊѹ¹¤·¤Ê¤¤)
+(add-hook 'howm-mode-hook 'howm-mode-set-buffer-name)
+(add-hook 'after-save-hook 'howm-mode-set-buffer-name)</pre>
+<ul>
+<li><p>¥¿¥¤¥È¥ë¡Ö¤Û¤²¡×¤Î¥á¥â¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò¡Ö=¤Û¤²¡×¤Ë
+        <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/333">thx</a></p>
+<pre>;; ¥¿¥¤¥È¥ë¤¬ AAA ¤Ê¤é¥Ð¥Ã¥Õ¥¡Ì¾¤ò =AAA ¤Ë.
+;; ²¼¤Î howm-mode-set-buffer-name ¤òÀßÄꤷ¤¿¾å¤Ç¡Ä
+(setq howm-buffer-name-format "=%s")</pre></li>
+<li>ËÜÅö¤Ï howm ¤ÈÆÈΩ¤·¤¿¥Ä¡¼¥ë¤Ë¤¹¤ëÊý¤¬¤¤¤¤¤±¤É,
+        ¤ª¤Ã¤¯¤¦¤Ê¤Î¤Ç¤Ò¤È¤Þ¤º.</li>
+</ul></li>
+</ul></li>
+<li>1.3.8
+<ul>
+<li>M-x howm-extend-deadlines ¤Ç,
+      »ØÄêÆü¤ò²á¤®¤¿¡ºÀÚ(!)¤ò¤¹¤Ù¤Æ°ìÄêÆü¿ô¸å¤Ø±ä´ü.
+      <a href="http://hibari.2ch.net/test/read.cgi/unix/1141892764/671">thx</a>
+<ul>
+<li>»ÅÍͤ⥤¥ó¥¿¥Õ¥§¡¼¥¹¤â¤Þ¤À᤭Âæ.</li>
+<li>¥á¥â¤ò¾¡¼ê¤Ë½ñ¤­¤«¤¨¤ë´í¸±¤ÊÁàºî¤Ê¤Î¤Ç, ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!</li>
+</ul></li>
+</ul></li>
+<li>1.3.9
+<ul>
+<li>¥á¥Ë¥å¡¼¤Ë¡Ö%here%(howm-menu-search "[ÃÇ]ÊÒŪ" full t)¡×¤È½ñ¤±¤Ð,
+      ¡ÖÃÇÊÒŪ¡×¤ò´Þ¤à¥á¥â¤ÎÆâÍÆÁ´ÂΤò¥á¥Ë¥å¡¼¤ËËä¤á¹þ¤ß.
+      <a href="http://sourceforge.jp/projects/howm/lists/archive/eng/2010/000097.html">thx</a>
+      &gt; Morgan Veyret ¤µ¤ó (morgan.veyret at gmail.com).
+<ul>
+<li>ñ¤Ë "ÃÇÊÒŪ" ¤È¤·¤Ê¤¤¤Î¤Ï, ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¼«¿È¤¬¥Ò¥Ã¥È¤¹¤ë¤Î¤òÈò¤±¤ë¾®ºÙ¹©</li>
+</ul></li>
+</ul></li>
+<li>1.4.2
+<ul>
+<li><p>°ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ç¡Ö¥Õ¥¡¥¤¥ë | ¥Þ¥Ã¥Á¹Ô¡×¤Î¤«¤ï¤ê¤Ë¤³¤ó¤Êɽ¼¨¤Ë.
+      ¤³¤Î¤È¤­¥¿¥¤¥È¥ëÀèƬ¤Î¡Ö=¡×¤Ïɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë.
+      (experimental)
+      <a href="http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000107.html">thx</a>
+      <a href="http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000111.html">thx</a>
+      &gt; Albert-san (areiner at tph.tuwien.ac.at)</p>
+<pre>¥¿¥¤¥È¥ë A|
+|¥Þ¥Ã¥Á¹Ô A1
+|¥Þ¥Ã¥Á¹Ô A2
+¥¿¥¤¥È¥ë B|
+|¥Þ¥Ã¥Á¹Ô B1
+|¥Þ¥Ã¥Á¹Ô B2</pre>
+<ul>
+<li><p>ÀßÄê</p>
+<pre>(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?</pre></li>
+<li>¤µ¤é¤Ë, M-x customize-variable RET howm-list-title RET ¤âÀßÄê¤ò</li>
+<li>À©¸Â: °ì¥Õ¥¡¥¤¥ëÊ£¿ô¥á¥â¤Ç C-c , a (howm-list-all) ¤·¤¿¤È¤­¤Ï
+        Âбþ¤¹¤ë¥¿¥¤¥È¥ë¹Ô¤ËÈô¤ó¤Ç¤¯¤ì¤Ê¤¤
+<ul>
+<li>¤½¤â¤½¤â¹Ô»Ø¸þ¤Çºî¤Ã¤Æ¤¤¤¿¤Î¤Ç¼ÂÁõ¤¬ÌµÍýÌðÍý</li>
+<li>¤­¤Á¤ó¤Èľ¤¹¤Î¤Ï¤á¤ó¤É¤¦. ¶¯¤¤¼ûÍפ¬¤Ê¤±¤ì¤Ð¡Ä</li>
+</ul></li>
+</ul></li>
+</ul></li>
+</ul></li>
+<li>¡ÄÍúÎòÈ´¿è¡Ä (<a href="OLD.rd">&lt;URL:OLD.rd&gt;</a> »²¾È)
+<ul>
+<li>[2010-12-30] 1.3.9 Èù½¤Àµ</li>
+<li>[2009-12-31] 1.3.8 ²á¤®¤¿¡ºÀÚ¤ËÃ忧</li>
+<li>[2008-12-31] 1.3.7 ÆâÉô¥³¡¼¥ÉÀ°Íý (ÉûºîÍѤòʬΥ).
+    howm-list-normalizer ¤«¤é howm-normalizer ¤Ø.</li>
+<li>[2008-05-31] 1.3.6 Ã忧¤ÎÉÔ¶ñ¹ç½¤Àµ</li>
+<li>[2007-12-09] 1.3.5 ²Æ»þ´Ö¤ÎÉÔ¶ñ¹ç½¤Àµ</li>
+<li>[2006-12-16] 1.3.4 ¥»¥­¥å¥ê¥Æ¥£½¤Àµ</li>
+<li>[2005-08-02] 1.3.0 alias. M-x customize. ¥¿¥¤¥È¥ëɽ¼¨.</li>
+<li>[2005-05-02] 1.2.2 ¥Ð¥Ã¥¯¥¨¥ó¥ÉÀÚ¤êÎ¥¤·. gfunc.el</li>
+<li>[2004-08-24] 1.2 ÊÝα¡Ö~¡×¤Î¸ø¼°²½. howm.el, riffle.el</li>
+<li>[2004-05-06] 1.1.2 make test</li>
+<li>[2004-02-27] <a href="http://pc8.2ch.net/test/read.cgi/unix/1077881095/">2ch howm ¥¹¥ì 2</a></li>
+<li>[2004-02-21] 1.1.1 ¡Ö±£¤·µ¡Ç½¡×À©ÅÙ¤òƳÆþ</li>
+<li>[2004-01-25] <a href="http://howm.sourceforge.jp/">sf.jp</a> ¤Ø°ÜÆ°</li>
+<li>[2005-01-08] <a href="http://www.unixuser.jp/magazine/2004/200402.html">UNIX USER 2004.2</a></li>
+<li>[2003-12-27] <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi">howm wiki</a></li>
+<li>[2003-11-22] 1.1 ¥Ç¥Õ¥©¥ë¥È¤ÎÊѹ¹
+    (¥ê¥ó¥¯¡¦ÆüÉÕ¡¦¥ê¥Þ¥¤¥ó¥À¤Î½ñ¼°, °ì¥á¥â°ì¥Õ¥¡¥¤¥ë, ¥á¥Ë¥å¡¼¤â¥á¥â¤Î°ì¼ï)</li>
+<li>[2003-10-27] 1.0.4.2 ½Å¤¯¤Ê¤ë¥Ð¥°¤ò½¤Àµ. ¤è¤¯¤³¤ó¤Ê¤Î¤ÇÆ°¤¤¤Æ¤¿¤Ê¤¢¡Ä</li>
+<li>[2003-10-02] 1.0.4 ³°Éô viewer, ¥á¥Ë¥å¡¼¤Î²á¾ê¶¯²½</li>
+<li>[2003-09-23] ¡Ö¥Æ¥¹¥ÈÈǡפòƳÆþ</li>
+<li>[2003-09-18] 1.0.2 HTML ²½¥¹¥¯¥ê¥×¥È howm2</li>
+<li>[2003-09-17] <a href="http://pc.2ch.net/test/read.cgi/unix/1063800495/">2ch howm ¥¹¥ì</a></li>
+<li>[2003-09-17] 1.0 ¥á¥â¥Ç¥£¥ì¥¯¥È¥ê¤ò³¬Áز½</li>
+<li>[2003-09-16] 0.9.7.1 Wiki É÷¥ê¥ó¥¯ [[¤Û¤²]]</li>
+<li>[2003-09-14] 0.9.4.1 grep Ã¦µÑ</li>
+<li>[2003-09-09] 0.9 ruby Ã¦µÑ</li>
+<li>[2003-08-31] 0.8.5 ¥¿¥¤¥È¥ë°ìÍ÷</li>
+<li>[2003-06-03] 0.8.4 °Âľ¥«¥ì¥ó¥À¡¼ hcal.rb</li>
+<li>[2002-11-03] 0.8 ¥á¥Ë¥å¡¼, ½ÜÅÙ½ç todo @[2003/09/20]+</li>
+<li>[2002-09-17] 0.7 1 Æü 1 ¥Õ¥¡¥¤¥ë, come-from ¥ê¥ó¥¯ &lt;&lt;</li>
+<li>[2002-09-14] 0.6 ¥ê¥ó¥¯ÇÑ»ß(¤¹¤Ù¤Æ¤Ï¡Ö¸¡º÷¡×)</li>
+<li>[2002-06-10] <a href="http://www1.neweb.ne.jp/wa/yamdas/column/technique/clonelist.html">ÆüËÜȯ¤Î wiki ¥¯¥í¡¼¥ó¥ê¥¹¥È</a></li>
+<li>[2002-05-29] 0.1 ¸ø³«</li>
+</ul></li>
+</ul>
+<h3><a name="label-19" id="label-19">¥¢¥É¥ì¥¹</a></h3><!-- RDLabel: "¥¢¥É¥ì¥¹" -->
+<ul>
+<li>ºÇ¿·ÈÇ: <a href="http://howm.sourceforge.jp/">&lt;URL:http://howm.sourceforge.jp/&gt;</a></li>
+<li>Ï¢ÍíÀè: email ¥¢¥É¥ì¥¹¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ëËÁƬ¤ò»²¾È¤¯¤À¤µ¤¤</li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/README.html b/doc/README.html
new file mode 100644 (file)
index 0000000..7cb4e43
--- /dev/null
@@ -0,0 +1,241 @@
+<?xml version="1.0" ?>
+<!DOCTYPE html 
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>README.rd</title>
+</head>
+<body>
+<h1><a name="label-0" id="label-0">howm tutorial</a></h1><!-- RDLabel: "howm tutorial" -->
+<h2><a name="label-1" id="label-1">First day</a></h2><!-- RDLabel: "First day" -->
+<h3><a name="label-2" id="label-2">Write a note.</a></h3><!-- RDLabel: "Write a note." -->
+<ul>
+<li><p>Type Ctrl-C , , to open the menu.</p>
+<pre>[New] Search([String] [Regexp]) [Dup] [&lt;Title] [&lt;Name] [Date&gt;] [Key&gt;] [Update]
+[All] [Recent] [Schedule] [Todo] [Update Menu]</pre></li>
+<li><p>Confirm the cursor is on [New], and type [return] there to open new note.</p>
+<pre>= 
+[2002-09-16 20:08] &gt;&gt;&gt; /home/hira/elisp/howm/howm-mode.el</pre></li>
+<li><p>Write anything.</p>
+<pre>= First note
+[2002-09-16 20:08] &gt;&gt;&gt; /home/hira/elisp/howm/howm-mode.el
+foo
+bar
+baz</pre></li>
+</ul>
+<h2><a name="label-3" id="label-3">Second day</a></h2><!-- RDLabel: "Second day" -->
+<h3><a name="label-4" id="label-4">Write today's note.</a></h3><!-- RDLabel: "Write today's note." -->
+<ul>
+<li>Type Ctrl-C , , and type [return] on [New]. Then, write freely.</li>
+</ul>
+<h3><a name="label-5" id="label-5">Read notes.</a></h3><!-- RDLabel: "Read notes." -->
+<ul>
+<li><p>Type Ctrl-C , , to open the menu.</p>
+<pre>[New] Search([String] [Regexp]) [Dup] [&lt;Title] [&lt;Name] [Date&gt;] [Key&gt;] [Update]
+[All] [Recent] [Schedule] [Todo] [Update Menu]</pre></li>
+<li>Move the cursor to [All] and type [return] there to browse all notes.</li>
+<li>Move the cursor up and down to view each note.</li>
+<li>Type [space] and [backspace] to scroll the note.</li>
+<li>Type [return] to open the note.</li>
+</ul>
+<h3><a name="label-6" id="label-6">Concatenate notes.</a></h3><!-- RDLabel: "Concatenate notes." -->
+<ul>
+<li>Type Ctrl-C , , to open the menu.</li>
+<li>Move the cursor to [All] and type [return].</li>
+<li>Type @ to concatenate all notes.</li>
+<li>Type [space] and [backspace] to scroll the notes.</li>
+<li>Type @ to toggle summary-view and concatenated-view.</li>
+<li>Type [return] to open the note.</li>
+</ul>
+<h3><a name="label-7" id="label-7">Search a word in notes.</a></h3><!-- RDLabel: "Search a word in notes." -->
+<ul>
+<li>Type Ctrl-C , , to open the menu.</li>
+<li><p>Move the cursor to [String] and type [return] there to search for a string.</p>
+<pre>Keyword:</pre></li>
+<li><p>Input a string.</p>
+<pre>Keyword: foo</pre></li>
+<li>Type [return] to browse matched notes.</li>
+</ul>
+<h3><a name="label-8" id="label-8">Search a phrase in notes.</a></h3><!-- RDLabel: "Search a phrase in notes." -->
+<ul>
+<li>Type Ctrl-C , , to open the menu.</li>
+<li>Move the cursor to [String] and type [return].</li>
+<li><p>Input a string. Type Ctrl-q and [space] to input a whitespace.</p>
+<pre>Keyword: hoge fuga</pre></li>
+<li>Type [return] to browse matched notes.</li>
+</ul>
+<h2><a name="label-9" id="label-9">Third day</a></h2><!-- RDLabel: "Third day" -->
+<h3><a name="label-10" id="label-10">Try goto link.</a></h3><!-- RDLabel: "Try goto link." -->
+<ul>
+<li>Ctrl-C , , and [return] on [New] to open new note.</li>
+<li><p>Write '&gt;&gt;&gt; foo'.</p>
+<pre>= 
+[2002-09-17 20:15]
+&gt;&gt;&gt; foo</pre></li>
+<li>A line is drawn under it.
+  Move the cursor on it and type [return] to search for 'foo' in all notes.</li>
+</ul>
+<h3><a name="label-11" id="label-11">Try come-from link.</a></h3><!-- RDLabel: "Try come-from link." -->
+<ul>
+<li><p>Write '&lt;&lt;&lt; hoge' in today's note.</p>
+<pre>= 
+[2002-09-17 20:15]
+&gt;&gt;&gt; foo
+&lt;&lt;&lt; hoge</pre></li>
+<li>Move the cursor on '&lt;&lt;&lt;' and type [return] to search for 'hoge' in all notes.</li>
+<li>Select the first day's note and type [return] to open it.</li>
+<li>A line is drawn under 'hoge'.
+  Move the cursor on it and type [return] to search for 'hoge' in all notes.</li>
+<li>Remember that '&lt;&lt;&lt; hoge' is always shown first when you search for 'hoge'.
+  Others are sorted by their modification time.</li>
+</ul>
+<h3><a name="label-12" id="label-12">Search come-from keyword with completion.</a></h3><!-- RDLabel: "Search come-from keyword with completion." -->
+<ul>
+<li><p>Ctrl-C , , and [return] on [String] to search for a keyword.</p>
+<pre>Keyword:</pre></li>
+<li><p>Type 'ho' and type [space] to complete come-from keyword 'hoge'.</p>
+<pre>Keyword: hoge</pre></li>
+<li>Type [return] to search for 'hoge'.</li>
+</ul>
+<h2><a name="label-13" id="label-13">Fourth day</a></h2><!-- RDLabel: "Fourth day" -->
+<h3><a name="label-14" id="label-14">Sort notes.</a></h3><!-- RDLabel: "Sort notes." -->
+<ul>
+<li>Ctrl-C , , and [return] on [All] to browse all notes.</li>
+<li><p>Type S to sort notes.</p>
+<pre>Sort by:</pre></li>
+<li>Type [space] to show available criteria.</li>
+<li><p>Type 'da' and type [space] to complete 'date'.</p>
+<pre>Sort by: date</pre></li>
+<li>Type [return] to execute it.</li>
+</ul>
+<h3><a name="label-15" id="label-15">Filter notes.</a></h3><!-- RDLabel: "Filter notes." -->
+<ul>
+<li>Ctrl-C , , and [return] on [All] to browse all notes.</li>
+<li><p>Type f to filter notes.</p>
+<pre>Filter by:</pre></li>
+<li>Type [space] to show available criteria.</li>
+<li><p>Type 'co' and type [space] to complete 'contents'.</p>
+<pre>Filter by: contents</pre></li>
+<li><p>Type [return] and input 'foo'.</p>
+<pre>Search in result (grep): foo</pre></li>
+<li>Type [return] to execute it.</li>
+</ul>
+<h3><a name="label-16" id="label-16">Read help.</a></h3><!-- RDLabel: "Read help." -->
+<ul>
+<li>Ctrl-C , , and [return] on [All] to browse all notes.</li>
+<li>Type ? and read the help message.</li>
+</ul>
+<h3><a name="label-17" id="label-17">Use shortcut.</a></h3><!-- RDLabel: "Use shortcut." -->
+<ul>
+<li>Type Ctrl-C , c to create new note.</li>
+</ul>
+<h2><a name="label-18" id="label-18">Fifth day</a></h2><!-- RDLabel: "Fifth day" -->
+<h3><a name="label-19" id="label-19">Input todo.</a></h3><!-- RDLabel: "Input todo." -->
+<ul>
+<li>Type Ctrl-C , c to create new note.</li>
+<li><p>Write as follows.</p>
+<pre>[2003-09-10]- foo
+[2003-09-10]+ bar
+[2003-09-10]! baz
+[2003-09-10]~ qux</pre></li>
+</ul>
+<h3><a name="label-20" id="label-20">Browse todo.</a></h3><!-- RDLabel: "Browse todo." -->
+<ul>
+<li>Ctrl-C , , and [return] on [Todo] to browse all todo.</li>
+<li>Move cursor and type [return] to open the note.</li>
+<li>Type Ctrl-C , , to show the head of todo under the menu.</li>
+<li><p>Items are sorted by a magic criterion.</p>
+<pre>- sink after the date (reminder)
++ float after the date (todo)
+! float until the date (deadline)
+~ sink and float periodically after the date (defer)</pre></li>
+</ul>
+<h3><a name="label-21" id="label-21">Finish todo.</a></h3><!-- RDLabel: "Finish todo." -->
+<ul>
+<li>Ctrl-C , , and [return] on [Todo] to browse all todo.</li>
+<li><p>Move cursor and type [return] to open the note.</p>
+<pre>[2003-09-10]- foo</pre></li>
+<li><p>Move cursor on - and type [return] to show todo-menu.</p>
+<pre>RET (done), x (cancel), symbol (type), num(laziness): </pre></li>
+<li><p>Type [return] to finish this todo.</p>
+<pre>[2003-09-10]. [2003-09-10]:- foo</pre></li>
+</ul>
+<h3><a name="label-22" id="label-22">Input schedule.</a></h3><!-- RDLabel: "Input schedule." -->
+<ul>
+<li>Type Ctrl-C , c to create new note.</li>
+<li><p>Write as follows.</p>
+<pre>[2003-09-10]@ hoge</pre></li>
+</ul>
+<h3><a name="label-23" id="label-23">Browse schedule.</a></h3><!-- RDLabel: "Browse schedule." -->
+<ul>
+<li>Ctrl-C , , and [return] on [Schedule] to browse all schedule.</li>
+<li>Type [space] and [backspace] to scroll the list.</li>
+<li>Type . to jump to today.</li>
+<li>Type Ctrl-C , , to show the head of schedule under the menu.</li>
+<li>Type [return] on &gt; at the beginning of line to open the corresponding note.</li>
+</ul>
+<h3><a name="label-24" id="label-24">Input recurring tasks.</a></h3><!-- RDLabel: "Input recurring tasks." -->
+<ul>
+<li><p>move cursor to '2003-09-10' on the below form in the opened note.</p>
+<pre>[2003-09-10]@ hoge</pre></li>
+<li><p>Type [return] to show date-menu.</p>
+<pre>[Wed] RET(goto), +num(shift), yymmdd(set), ~yymmdd(repeat), .(today): </pre></li>
+<li><p>Input ~031231 [return] and then type m [return] to the below question.</p>
+<pre>Every? [RET(all), num(days) w(week), m(month), y(year)] </pre></li>
+<li><p>And monthly tasks are added automatically until 2003-12-31.</p>
+<pre>[2003-09-10]@ hoge
+[2003-10-10]@ hoge
+[2003-11-10]@ hoge
+[2003-12-10]@ hoge</pre></li>
+<li>You can use '~1231' instead of '~031231' to input same-year items.</li>
+</ul>
+<h2><a name="label-25" id="label-25">Sixth day</a></h2><!-- RDLabel: "Sixth day" -->
+<h3><a name="label-26" id="label-26">Try action-lock { }.</a></h3><!-- RDLabel: "Try action-lock { }." -->
+<ul>
+<li>Type Ctrl-C , c to create new note.</li>
+<li><p>Write { }.</p>
+<pre>{ }</pre></li>
+<li><p>Move cursor on { } and type [return].</p>
+<pre>{*}</pre></li>
+<li><p>Type [return] again.</p>
+<pre>{-}</pre></li>
+</ul>
+<h3><a name="label-27" id="label-27">Try action-lock {_}.</a></h3><!-- RDLabel: "Try action-lock {_}." -->
+<ul>
+<li>Type Ctrl-C , c to create new note.</li>
+<li><p>Write {_}.</p>
+<pre>{_}</pre></li>
+<li><p>Move cursor on {_} and type [return].</p>
+<pre>[2003-09-10 04:12]</pre></li>
+</ul>
+<h3><a name="label-28" id="label-28">Try aliases.</a></h3><!-- RDLabel: "Try aliases." -->
+<ul>
+<li><p>Write '&lt;&lt;&lt; hoge &lt;&lt;&lt; fuga &lt;&lt;&lt; piyo' in a note.</p>
+<pre>= 
+[2002-09-17 20:15]
+&lt;&lt;&lt; hoge &lt;&lt;&lt; fuga &lt;&lt;&lt; piyo</pre></li>
+<li>Write 'hoge' in another note.</li>
+<li>Write 'fuga' in yet another note.</li>
+<li>Put cursor on 'fuga' and type [return].
+  You will see all 'hoge', 'fuga', and 'piyo' are found together.</li>
+</ul>
+<h2><a name="label-29" id="label-29">Seventh day</a></h2><!-- RDLabel: "Seventh day" -->
+<h3><a name="label-30" id="label-30">Try customization.</a></h3><!-- RDLabel: "Try customization." -->
+<ul>
+<li>Type Ctrl-C , , to show the menu.</li>
+<li>Move cursor on [Preference] and type [return].</li>
+<li>Watch customization items and modify them if you like.</li>
+</ul>
+<h3><a name="label-31" id="label-31">Try editing menu.</a></h3><!-- RDLabel: "Try editing menu." -->
+<ul>
+<li>Type Ctrl-C , , to show the menu.</li>
+<li>Move cursor on [Edit Menu] and type [return].</li>
+<li>Delete the line '%random', and type Ctrl-C , , to observe its effect.</li>
+<li>Again try [Edit Menu] and write '%random' to restore it.</li>
+<li>Type Ctrl-C , , and move cursor to '%Editing Menu%' at the bottom.</li>
+<li>Type [return] and read documentation of menu syntax.</li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/README.ja.rd b/doc/README.ja.rd
new file mode 100644 (file)
index 0000000..df65329
--- /dev/null
@@ -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:
+      ((<Wiki|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus>))
+      ¤ò»²¾È¤¯¤À¤µ¤¤.
+      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|URL:http://www.ruby-lang.org/ja/man/html/RD.html>))¤ò»È¤¦¾ì¹ç
+    * <<< ¤¬ 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>))¤â»²¾È
+
+* µìÈǤ«¤é¤Î°Ü¹Ô (ɬ¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!) ¢ª ((<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. ((<ÉÙ¹ëŪ¥×¥í¥°¥é¥ß¥ó¥°|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 ¤Ë¤·¤Æ¤ª¤¯¤È,
+    ¥Þ¥ë¥Á¥Ð¥¤¥ÈÂбþ¤¬¥ª¥Õ¤Ë¤Ê¤Ã¤Æ®¤¯¤Ê¤ë
+    ((<ref|URL:http://search.luky.org/vine-users.5/msg06363.html>))
+
+* ¸¡º÷
+  * Âоݥǥ£¥ì¥¯¥È¥ê¤ÎÄɲÃ
+    * Á´Ê¸¸¡º÷¤Î¤È¤­, ¥á¥â¤Ë²Ã¤¨¤Æ»ØÄê¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤âºÆµ¢Åª¤Ëõ¤¹
+        (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|URL:http://www.bookshelf.jp/2ch/unix/1063800495.html>))
+      ;; 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|URL:http://www.ruby-lang.org/ja/man/html/RD.html>))¤ò»È¤¦¾ì¹ç:
+  ¹ÔƬ¤Î * ¤Ç¥¨¥ó¥È¥ê¤Î³«ÊĤ¬¤Ç¤­¤ë¤è¤¦¤Ë
+  ¢ª ((<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
+
+* ²Õ¾ò½ñ¤­»Ù±ç:
+  * ((<org-mode ¤È¤ÎÊ»ÍÑ|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?OrgMode>))
+
+* ´Ê°×¾®¸¯¤¤Ä¢
+  * ¥­¡¼¥ï¡¼¥É¤ò·è¤á¤Æ, Æüµ­Ãæ¤Ë½ñ¤¤¤Æ¤ª¤¯
+      $¿©Èñ$ 500±ß ¥é¡¼¥á¥ó
+  * ¡Ö<<< $¿©Èñ$¡×¤Ê¤ê¡Ö>>> $¿©Èñ$¡×¤Ê¤ê¤Ç°ìÍ÷¤òɽ¼¨.
+    ¹Ê¤ê¹þ¤ß¡¦¥½¡¼¥È¤·¤ÆÈÏ°Ï»ØÄê.
+  * M-x yen-region ¤Ç, ¡Ö¢þ¢þ±ß¡×¤ò¹ç·×
+    ¢ª ((<yen.el|URL:http://howm.sourceforge.jp/a/yen.el>))
+
+* ((<¢ª 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>)),
+    ((<YASWiki:¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ï²¼Ä®µ¤¼Á|URL:http://web.archive.org/web/20041018232953/http://nnri.dip.jp/~yf/cgi-bin/yaswiki.cgi?name=%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9%A4%CF%B2%BC%C4%AE%B5%A4%BC%C1>))
+
+* ºî¼Ô³Ð½ñ
+  * ¥Ç¥Ð¥Ã¥°ÍÑÊÑ¿ô 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|URL:http://peace.2ch.net/test/read.cgi/unix/1397477663/39>))
+    * ((<howm-recentf|URL:http://howm.osdn.jp/cgi-bin/hiki/hiki.cgi?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|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+  * fix
+    * emacs 24.3.1 ¤Ç¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤»¤º¤Ë¼Â¹Ô¤·¤¿¤È¤­¤Î¥¨¥é¡¼
+      "Can't detect type of ..."
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+    * ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯²¼¤Ç¿·µ¬¥á¥â¤¬ howm-mode ¤Ë¤Ê¤é¤Ê¤¤¥Ð¥°
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+    * ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð
+
+* ¥ê¥ê¡¼¥¹ÈÇ howm-1.4.1 [2012-12-27]
+  * ~/.howm-keys ¤¬Ìµ¤«¤Ã¤¿¤é, Á´¥á¥â¤ò¥¹¥­¥ã¥ó¤·¤ÆºÆÀ¸À®
+    ((<thx|URL:http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000099.html>))
+    > Albert-san (areiner at tph.tuwien.ac.at)
+  * fix: *.txt ¤È *.howm ¤¬º®ºß¤·¤Æ¤â°ìÍ÷¥â¡¼¥É¤Îɽ¼¨¤¬¤º¤ì¤Ê¤¤¤è¤¦¤Ë
+    ((<thx|URL:http://toro.2ch.net/test/read.cgi/unix/1141892764/940>))
+
+* ¥ê¥ê¡¼¥¹ÈÇ 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|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/890>))
+        %here%(howm-menu-recent identity)
+    * ¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ¤â¥Ó¥å¡¼¥¢¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/891>))
+        ;; ¡Öfile://¡Ä/¡×¤ä¡Ö>>> ¡Ä/¡×¤Ï open ¥³¥Þ¥ó¥É(mac ÍÑ)¤Ç³«¤¯
+        (setq howm-view-external-viewer-assoc '(("/$" . "open %s")))
+    * ÊÑ¿ô howm-normalizer ¤Î¤¢¤ê¤¬¤Á¤ÊÀßÄê¥ß¥¹¤ò»¡¤¹¤ë¤è¤¦¤Ë
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/865-870n>))
+    * ¥É¥­¥å¥á¥ó¥È¤Î¸Å¤¤²Õ½ê¤ò¼êľ¤·
+    * rast ¤Þ¤ï¤ê¤Î»îºî¤òºï½ü
+  * ±£¤·µ¡Ç½¤Î¸ø¼°²½
+    * ¥³¥Þ¥ó¥É
+      * C-c , e (howm-remember)
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/24-25n>))
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/61>))
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/72-75n>))
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/92-93n>))
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/99>))
+      * 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|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/516>))
+        * ¡ºÀÚ¡Ö!¡×¤â, ¡ºÀÚÆü¤¬¤½¤ÎÈϰϤޤǤʤé°ì½ï¤Ëɽ¼¨
+        * ¤½¤ì¤è¤ê²¼¤Ï½¾Íè¤É¤ª¤ê
+        * ½¾Íè¤Î %schedule + %todo ¤È¤¯¤é¤Ù¤ë¤È, ¥¹¥­¥ã¥ó¤¬°ì²ó¤Ç¤¹¤à¤Ö¤ó¸úΨŪ
+      * [2005-05-15 21:37]@ ¤Î¤è¤¦¤Ê½ñ¼°¤ÎͽÄê¤Ï, »þ¹ï½ç¤Ë¥½¡¼¥È
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/141>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/148>))
+        ((<thx|URL:http://pc.2ch.net/test/read.cgi/unix/1063800495/597>))
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/683>))
+      * ¥á¥Ë¥å¡¼¤«¤é¥ê¥Þ¥¤¥ó¥À¤òľá¤­¤·¤¿¤È¤­¤Ë,
+        Âбþ¥Ð¥Ã¥Õ¥¡¤Î¹Ô¿ô¤¬Â¿¾¯¤º¤ì¤Æ¤¤¤Æ¤âµö¤¹.
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/519>))
+          (setq howm-action-lock-forward-fuzziness 5) ;; ²¿¹Ô¤Þ¤Ç¤º¤ì¤Æ¤âµö¤¹¤«
+    * ((<¥«¥¹¥¿¥Þ¥¤¥º>))
+      * ¾åµ­ %reminder ¤ä todo list Ãæ¤Î»ÅÀÚ¤ê
+      * grep »ÈÍÑ»þ¤Î coding system »ØÄê
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/784>))
+      * howm ´ØÏ¢¤ÎÁ´¥Ð¥Ã¥Õ¥¡¤Ë¶¦Ä̤ο§ÀßÄê
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/42>))
+        ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Idea>))
+        > taku ¤µ¤ó
+      * todo ¤òºÑ¤Þ¤»¤¿¤È¤­¤Ë»ØÄꥳ¥Þ¥ó¥É¤ò¼Â¹Ô (howm-congrats-command)
+  * fix: 2012-01-21 °Ê¹ß¤Î emacs-24 ¤Ç¥¨¥é¡¼ (void-variable inhibit-first-line-modes-regexps)
+    ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?BugReportPaste>))
+    thx > º´¡¹ÌÚ ´² ¤µ¤ó (sasaki at fcc.ad.jp)
+
+* ±£¤·µ¡Ç½ (experimental)
+  * 1.1.1.* °ÊÁ°¤«¤é
+    * ¥½¡¼¥¹¥³¡¼¥É¤ÎÆɤ߽ñ¤­¤â howm ¤Ç
+      * ((<GNU global|URL:http://www.tamacom.com/global-j.html>))
+        (((<Îã|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 °Ê³°¤Ç»È¤¦¾ìÌ̤Ï, ¤Þ¤¢¤Ê¤¤¤Ç¤·¤ç¤¦
+    * ¥ê¥Þ¥¤¥ó¥À
+      * ¥ê¥Þ¥¤¥ó¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/296>))
+          ;; ¿·¤·¤¤·¿¤Î¥ê¥Þ¥¤¥ó¥À¡Ö*¡×¤òÄêµÁ¤¹¤ëÎã:
+          ;; ¡Ö[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 »ï¤Îµ­»ö|URL:http://howm.sourceforge.jp/uu/#label:11>))
+          ¤Ë½Ð¤Æ¤Þ¤¹
+        * ¥Ð¥°
+          * °ìÉô¤Îµ­¹æ¤Ï¤³¤±¤½¤¦ (Àµµ¬É½¸½ [¡Ä] Æâ¤ÇÆÃÊ̤ʰÕÌ£¤ò»ý¤Äµ­¹æ¤Ï¡ß)
+          * ¡Ö[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|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?TangledToDo>))
+      * M-x howm-return-to-list ¢ª °ìÍ÷ɽ¼¨¤ËÌá¤ë
+        ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/377>))
+        * ¤È¤êµÞ¤®Ä¶»¨¤Ç¤Ã¤Á¤¢¤². È¿¶Á¤Ë±þ¤¸¤Æ¤Þ¤¿¹Í¤¨¤è¤¦.
+        * °ìÍ÷ɽ¼¨¤Ë¤¤¤Á¤¤¤ÁÌá¤ë¤³¤È¤Ê¤¯, °ìÍ÷¤Î¼¡¹àÌܤòľÀܳ«¤¯:
+            (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|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/580>))
+        * ¤³¤ì¼«ÂΤϤªÍ·¤Ó¤À¤±¤É, ¡Ö¤Õ¤Ä¤¦¤Ç¤Ê¤¤¥Ú¡¼¥¸¡×¤ÎÎý½¬¤È¤·¤Æ
+        * 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|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/522>))
+    * 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|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/885>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/890>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/909>))
+      ((<thx|URL:http://pc8.2ch.net/test/read.cgi/unix/1077881095/919>))
+      * ¡ÖʬÎà¡×¤ÎÍ×˾¤Ï¤Ä¤Ã¤Ñ¤Í¤Æ¤­¤¿¤ó¤À¤±¤É, º£Æü¤Ïµ¤¤Þ¤°¤ì¤Ëµ¤¤¬¸þ¤¤¤¿¤Î¤Ç
+        ¤ª»î¤·. Àµ¼°µ¡Ç½¤Ë¤·¤Æ¤¤¤¯¤«¤É¤¦¤«¤Ï̤Äê.
+      * ¥á¥Ë¥å¡¼¤Ë¤³¤¦½ñ¤¯¤È, ¡Ö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|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000025.html>)) > Highfly ¤µ¤ó
+        (setq howm-view-list-title-type 2) ;; ¥Þ¥Ã¥ÁÆâÍƤκ¸¤Ë¥¿¥¤¥È¥ë¤òɽ¼¨
+        (setq howm-view-summary-format "") ;; ¥Õ¥¡¥¤¥ë̾¤ò¾Ã¤·¤¿¤±¤ì¤Ð
+    * C-c , M ¤Ç¡Ö¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Æ¥á¥â¤ò³«¤¯¡×
+      ((<thx|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2005/000010.html>)) > Eduardo Ochs ¤µ¤ó
+  * 1.3.7
+    * °ìÍ÷»þ¤Ë¥¦¥£¥ó¥É¥¦Ê¬³ä¤ò²õ¤µ¤Ê¤¤ÀßÄê.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/507>))
+        (setq riffle-keep-window t)
+        (setq riffle-window-initializer nil)
+      * ÆâÍƥХåե¡¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó.
+      * ¤È¤ê¤¢¤¨¤ºÃ¡¤­Âæ. º£¸åÊѹ¹¤Î²ÄǽÀ­¤¢¤ê.
+    * M-x howm-list-active-todo ¤Ç, ¸½ºßÍ­¸ú¤Ê(¡áÀøÉúÃæ¤Ç¤Ê¤¤) todo ¤Î¤ß¤ò°ìÍ÷.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/129-131n>))
+      * ¤Ä¤¤¤Ç¤Ë, M-x howm-list-sleeping-todo ¤Ç, ÀøÉúÃæ¤Î todo ¤Î¤ß¤ò°ìÍ÷.
+      * ¤È¤ê¤¢¤¨¤º´Ø¿ô¤À¤±»îºî. ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î°Æ¤¬¤¢¤ì¤Ð¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤.
+      * ¤Á¤Ê¤ß¤Ë, ¥á¥Ë¥å¡¼¤«¤éÀøÉúÃæ todo ¤ò¾Ã¤¹¤Ë¤Ï,
+        M-x customize-variable RET howm-menu-todo-priority RET ¤Ç
+        ¡ÖHide sleeping reminders¡×¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤.
+    * ¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë¤¹¤ë.
+      ((<thx|URL:http://lists.sourceforge.jp/mailman/archives/howm-eng/2006/000020.html>)) > Mielke-san (peter at exegenix.com),
+      ((<thx|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ExternalTool>))
+        ;; emacs ¾å¤Ç¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò, ¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤Ê¤¯¥¿¥¤¥È¥ë¤Ë.
+        ;; (¥Õ¥¡¥¤¥ë̾¼«ÂΤÏÊѹ¹¤·¤Ê¤¤)
+        (add-hook 'howm-mode-hook 'howm-mode-set-buffer-name)
+        (add-hook 'after-save-hook 'howm-mode-set-buffer-name)
+      * ¥¿¥¤¥È¥ë¡Ö¤Û¤²¡×¤Î¥á¥â¤Î¥Ð¥Ã¥Õ¥¡Ì¾¤ò¡Ö=¤Û¤²¡×¤Ë
+        ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/333>))
+          ;; ¥¿¥¤¥È¥ë¤¬ AAA ¤Ê¤é¥Ð¥Ã¥Õ¥¡Ì¾¤ò =AAA ¤Ë.
+          ;; ²¼¤Î howm-mode-set-buffer-name ¤òÀßÄꤷ¤¿¾å¤Ç¡Ä
+          (setq howm-buffer-name-format "=%s")
+      * ËÜÅö¤Ï howm ¤ÈÆÈΩ¤·¤¿¥Ä¡¼¥ë¤Ë¤¹¤ëÊý¤¬¤¤¤¤¤±¤É,
+        ¤ª¤Ã¤¯¤¦¤Ê¤Î¤Ç¤Ò¤È¤Þ¤º.
+  * 1.3.8
+    * M-x howm-extend-deadlines ¤Ç,
+      »ØÄêÆü¤ò²á¤®¤¿¡ºÀÚ(!)¤ò¤¹¤Ù¤Æ°ìÄêÆü¿ô¸å¤Ø±ä´ü.
+      ((<thx|URL:http://hibari.2ch.net/test/read.cgi/unix/1141892764/671>))
+      * »ÅÍͤ⥤¥ó¥¿¥Õ¥§¡¼¥¹¤â¤Þ¤À᤭Âæ.
+      * ¥á¥â¤ò¾¡¼ê¤Ë½ñ¤­¤«¤¨¤ë´í¸±¤ÊÁàºî¤Ê¤Î¤Ç, ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¤È¤Ã¤Æ¤«¤é!
+  * 1.3.9
+    * ¥á¥Ë¥å¡¼¤Ë¡Ö%here%(howm-menu-search "[ÃÇ]ÊÒŪ" full t)¡×¤È½ñ¤±¤Ð,
+      ¡ÖÃÇÊÒŪ¡×¤ò´Þ¤à¥á¥â¤ÎÆâÍÆÁ´ÂΤò¥á¥Ë¥å¡¼¤ËËä¤á¹þ¤ß.
+      ((<thx|URL:http://sourceforge.jp/projects/howm/lists/archive/eng/2010/000097.html>))
+      > Morgan Veyret ¤µ¤ó (morgan.veyret at gmail.com).
+      * Ã±¤Ë "ÃÇÊÒŪ" ¤È¤·¤Ê¤¤¤Î¤Ï, ¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¼«¿È¤¬¥Ò¥Ã¥È¤¹¤ë¤Î¤òÈò¤±¤ë¾®ºÙ¹©
+  * 1.4.2
+    * °ìÍ÷¥Ð¥Ã¥Õ¥¡¤Ç¡Ö¥Õ¥¡¥¤¥ë | ¥Þ¥Ã¥Á¹Ô¡×¤Î¤«¤ï¤ê¤Ë¤³¤ó¤Êɽ¼¨¤Ë.
+      ¤³¤Î¤È¤­¥¿¥¤¥È¥ëÀèƬ¤Î¡Ö=¡×¤Ïɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë.
+      (experimental)
+      ((<thx|URL:http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000107.html>))
+      ((<thx|URL:http://sourceforge.jp/projects/howm/lists/archive/eng/2012/000111.html>))
+      > 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"|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] ((<howm wiki|URL:http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi>))
+  * [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 ¸ø³«
+
+=== ¥¢¥É¥ì¥¹
+
+* ºÇ¿·ÈÇ: ((<URL:http://howm.sourceforge.jp/>))
+* Ï¢ÍíÀè: email ¥¢¥É¥ì¥¹¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ëËÁƬ¤ò»²¾È¤¯¤À¤µ¤¤
+
+=end
diff --git a/doc/README.rd b/doc/README.rd
new file mode 100644 (file)
index 0000000..1662a54
--- /dev/null
@@ -0,0 +1,246 @@
+=begin
+
+= 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.
+
+=end
diff --git a/doc/TUTORIAL.ja.rd b/doc/TUTORIAL.ja.rd
new file mode 100644 (file)
index 0000000..be23a72
--- /dev/null
@@ -0,0 +1,189 @@
+=begin
+
+= Tutorial
+
+¤³¤ì¤òÆɤà¤è¤ê¤â, ¢­¤ÎÊý¤¬¤ï¤«¤ê¤ä¤¹¤¯¤Æ¤ª¤¹¤¹¤á¤Ç¤¹
+
+* ((<"Meadow/Emacs memo ¤Ç¤Î¾Ò²ð"|URL:http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=howm>))
+* ((<UNIX USER »ï¤Îµ­»ö|URL:http://howm.sourceforge.jp/uu/>))
+
+== ¥á¥â¤ò½ñ¤¯
+
+¡Ö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 (file)
index 0000000..b908e89
Binary files /dev/null and b/doc/cat.png differ
diff --git a/doc/come.png b/doc/come.png
new file mode 100644 (file)
index 0000000..9775a85
Binary files /dev/null and b/doc/come.png differ
diff --git a/doc/go.png b/doc/go.png
new file mode 100644 (file)
index 0000000..363f294
Binary files /dev/null and b/doc/go.png differ
diff --git a/doc/index-j.html b/doc/index-j.html
new file mode 100644 (file)
index 0000000..1496c10
--- /dev/null
@@ -0,0 +1,287 @@
+<html> <head>
+<title>howm: Hitori Otegaru Wiki Modoki</title>
+</head>
+
+<body>
+
+<a href="index.html">English</a>
+<hr>
+
+<h1><a href="http://howm.sourceforge.jp/index-j.html">howm: °ì¿Í¤ª¼ê·Ú Wiki ¤â¤É¤­</a></h1>
+
+<p>
+Emacs ¤ÇÃÇÊÒŪ¤Ê¥á¥â¤ò¤É¤ó¤É¤ó¤È¤ë¤¿¤á¤Î´Ä¶­¤Ç¤¹.
+ʬÎൡǽ¤Ï¤¢¤¨¤Æ¤Ä¤±¤Þ¤»¤ó.
+¤«¤ï¤ê¤Ë, Á´Ê¸¸¡º÷¤È¥á¥â´Ö¥ê¥ó¥¯¤¬¼ê·Ú¤Ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿.
+¼«Í³½ñ¼°¤Ê¤Î¤Ç²þ½¡¤âÉÔÍ× :-)
+</p>
+
+<ul>
+ <li> ¥À¥¦¥ó¥í¡¼¥É:
+      <a href="http://howm.sourceforge.jp/a/howm-1.4.3.tar.gz">1.4.3</a>
+      (<a href="README-j.html#label-18">¹¹¿·µ­Ï¿</a>)
+      [2015-12-31]
+ <li> »È¤¤Êý:
+      <a href="http://howm.sourceforge.jp/uu/">UNIX USER »ï¤Îµ­»ö</a>
+      /
+      <a href="TUTORIAL.ja.rd">¥Á¥å¡¼¥È¥ê¥¢¥ë</a>
+      /
+      <a href="README-j.html">¾ÜºÙ</a>
+      /
+      ¢ª ¤¤¤í¤¤¤í(<a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi">howm wiki</a>)
+      <ul>
+       <li> ¢ª
+            <a href="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=howm">Meadow memo ¤Ç¤Î¾Ò²ð</a>
+      </ul>
+ <li> (
+      <a href="README-j.html#label-15">¥Ð¥°¤Î»ØŦ¤ò¤¯¤À¤µ¤ëÊý¤Ø</a>
+      /
+      <a href="CL-HOWM.ja.rd">ChangeLog Memo ¤È howm</a>
+      )
+      <hr>
+<!--
+ <li> ¥ê¥ê¡¼¥¹Í½ÄêÈÇ
+      <a href="http://howm.sourceforge.jp/a/howm-1.4.3rc1.tar.gz">1.4.3rc1</a>
+      (<a href="README-test-j.html#label-18">¹¹¿·µ­Ï¿</a>)
+      : git Àèü emacs ¤ËÂбþ [2015-12-27]
+-->
+ <li> <a href="http://howm.sourceforge.jp/a/howm-test.tar.gz">¥Æ¥¹¥ÈÈÇ</a>
+      (<a href="README-test-j.html#label-18">¹¹¿·µ­Ï¿</a>)
+      : ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë»þ¤Î·Ù¹ð¤ò²óÈò [2016-01-01]
+ <li> µìÈÇ:
+      <a href="http://howm.sourceforge.jp/a/howm-1.3.9.2.tar.gz">1.3.9.2</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.3.2.tar.gz">1.3.2</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.2.4.tar.gz">1.2.4</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.2.1.tar.gz">1.2.1</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.1.2.1.tar.gz">1.1.2.1</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.1.1.3.tar.gz">1.1.1.3</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.1.0.4.tar.gz">1.1.0.4</a>
+      /
+      <a href="http://howm.sourceforge.jp/a/howm-1.0.4.2.tar.gz">1.0.4.2</a>
+ <li>°Ü¿¢
+      <ul>
+       <li> vim:
+            <a href="http://sites.google.com/site/fudist/Home/qfixhowm">¢ª QFixHowm</a>
+            (fuenor ¤µ¤ó)
+            ¡¿
+            <a
+            href="http://web.archive.org/web/20100826042656/http://sworddancer.funkyboy.jp/howm_vim/">howm-mode.vim</a>
+            (¼·Å礵¤ó)
+       <li> xyzzy:
+            <a href="http://homepage3.nifty.com/~ko-ji/">¢ª howm-wrap</a>
+            (kimura ¤µ¤ó)
+            ¡¿
+            <a href="http://www.geocities.co.jp/Milano-Cat/2067/howm-init.html">howm-helper</a>
+            (deecay ¤µ¤ó)
+       <li> ½¨´Ý:
+            <a href="http://mrm.seesaa.net/category/789739.html">¢ª howm.mac</a>
+            (Mr.M ¤µ¤ó)
+       <li> Android:
+            <a href="http://homepage1.nifty.com/ray-mizuki/software/howmm_jp.html">¢ª howmm</a>
+            (³¤·îÎèÆ󤵤ó)
+      </ul>
+</ul>
+</p>
+
+<hr>
+
+<h2>¤³¤ó¤ÊÊ·°Ïµ¤</h2>
+
+<a href="screen-shot.png"><img alt="screen shot" src="s-screen-shot.png">
+¥á¥â´Ö¥ê¥ó¥¯ (Wiki É÷)</a><br>
+<a href="search.png"><img alt="screen shot" src="s-search.png">
+Á´Ê¸¸¡º÷ (°ìÍ÷ɽ¼¨ + ÆâÍÆɽ¼¨)</a><br>
+<a href="cat.png"><img alt="screen shot" src="s-cat.png">
+Ï¢·ëɽ¼¨ (¸¡º÷¤µ¤ì¤¿¥á¥â¤ÎÆâÍƤò¤Ä¤Ê¤²¤Æ)</a><br>
+<!--
+<a href="source.png"><img alt="screen shot" src="s-source.png">
+¤ª¤Þ¤±: ¥½¡¼¥¹¥³¡¼¥É¤Ë¤â (ÄêµÁ¡¦»ÈÍѲսê°ìÍ÷¤Ø¤Î¥ê¥ó¥¯)
+¡Ä³«È¯Ãæ</a><br>
+-->
+<br>
+
+<h3>¼¡¤Î¤è¤¦¤Ë½ñ¤¯¤À¤±¤Ç¥ê¥ó¥¯</h3>
+<ul>
+ <li> goto ¥ê¥ó¥¯: ¥Õ¥¡¥¤¥ë̾ or ´Þ¤Þ¤ì¤ëʸ»úÎó
+      <pre>
+      &gt;&gt;&gt; ~/BabyloniaWave.txt
+      &gt;&gt;&gt; ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±
+      </pre>
+ <li> come-from ¥ê¥ó¥¯
+      <ul>
+       <li> ¥Õ¥¡¥¤¥ë A ¤Ë
+            <pre>
+       &lt;&lt;&lt; ·ë¾½À±ÃÄ
+            </pre>
+            ¤È½ñ¤¤¤Æ¤ª¤¯¤È¡Ä
+       <li> Â¾¤Î¥Õ¥¡¥¤¥ëÃæ¤Î¡Ö·ë¾½À±ÃġפȤ¤¤¦Ê¸»úÎó¤Ï¤¹¤Ù¤Æ A ¤Ø¤Î¥ê¥ó¥¯¤Ë
+      </ul>
+ <li> Wiki É÷¥ê¥ó¥¯: goto ¤ÈƱ¤¸. ¤¿¤À¤·, Âбþ¤¹¤ë come-from ¤¬¤Ê¤±¤ì¤Ðºî¤ë
+      <pre>
+      [[·ë¾½À±ÃÄ]]
+      </pre>
+</ul>
+<img src="go.png" alt="goto link">
+<img src="come.png" alt="come-from link">
+
+<h3>Á´Ê¸¸¡º÷¤ò¥Õ¥ë³èÍÑ</h3>
+<ul>
+ <li> ¾å¤Îʸ»úÎó¥ê¥ó¥¯¤â, ¼Â¤ÏÁ´Ê¸¸¡º÷¤Î¥·¥ç¡¼¥È¥«¥Ã¥È
+ <li> ¥Ò¥Ã¥È¤·¤¿¥Õ¥¡¥¤¥ë¤òÁ´Éô¤Ä¤Ê¤²¤Æɽ¼¨¤¹¤ëµ¡Ç½
+      (¢ª ÃÇÊÒŪ¥á¥â¤ò¤Ð¤ó¤Ð¤ó¤È¤Ã¤Æ OK)
+</ul>
+
+<h3>²þ½¡ÉÔÍ×. ´·¤ì¤¿¥¹¥¿¥¤¥ë¤ËÁȤ߹ç¤ï¤»¤Æ.</h3>
+<ul>
+ <li> ¤Ù¤¿¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¼«Í³½ñ¼°
+ <li> ¥Þ¥¤¥Ê¡¼¥â¡¼¥É¤Ç¼ÂÁõ ¢ª Â¾¤Î¥â¡¼¥É¤ÈÊ»ÍѲÄ
+ <li> ¥ê¥ó¥¯½ñ¼°¤âÊѹ¹²Ä
+<!--  <li> Îã: <a href="CL-HOWM.ja.rd">ChangeLog Memo ¾å¤Ç howm ¤ò»È¤¦</a> -->
+</ul>
+
+<h3>HTML ¤Ø¤ÎÊÑ´¹¤¬²Äǽ</h3>
+<ul>
+ <li> ¾­Íè¤ä¤á¤Æ¤â, ¥á¥â¤Ï¤à¤À¤Ë¤Ê¤ê¤Þ¤»¤ó
+</ul>
+
+<hr>
+
+<h2>ͽÄêɽ¡¦todo</h2>
+
+<a href="menu.png"><img alt="screen shot" src="s-menu.png">
+¡Ö½ÜÅÙ¡×½ç (¡â½ÅÍ×½ç, ÆüÉÕ½ç)</a>
+
+<h3>¥«¥ì¥ó¥À¡¼¤Ø¤Îžµ­¤Ê¤ó¤ÆÉÔÊØ</h3>
+<ul>
+  <li> ¼¡¤Î·Á¼°¤Ç¥á¥âÃæ¤Ë½ñ¤±¤Ð, ¼«Æ°Ãê½Ð
+<pre>
+      [2002-10-22]@ ¤Û¤²¤Û¤²
+</pre>
+  <li> °ìÍ÷¤«¤é¥á¥â¤Ø°ìȯ¥¸¥ã¥ó¥×
+  <li> ¥«¥ì¥ó¥À¡¼¥½¥Õ¥È¤Ø¤Î export ¤â
+</ul>
+<img src="todo.png" alt="todo list">
+<h3>¸«¤è¤¦¤È¤·¤Ê¤¤¤È¸«¤¨¤Ê¤¤¤ó¤¸¤ã¸«¤Ê¤¤</h3>
+<ul>
+  <li> ¥á¥Ë¥å¡¼¤ËͽÄêɽ¡¦todo ¤òɽ¼¨ ¢ª ¤³¤È¤¢¤ë¤´¤È¤ËÌܤË
+  <li> ¡ÖʬÎà¡×¤Ï¤·¤Ê¤¤
+</ul>
+<h3>todo ¥ê¥¹¥È¤Ê¤ó¤Æ¤¹¤°¤¢¤Õ¤ì¤ë</h3>
+·ï¿ô¤Õ¤¨¤ë ¢ª ¡Ö½ÅÍספ·¤«¸«¤Ê¤¤ ¢ª ¤Á¤ç¤Ã¤È¤·¤¿¤Î¤â¡Ö½ÅÍספÇÅÐÏ¿
+¢ª ¥¤¥ó¥Õ¥ì ¢ª ÇËþ
+<ul>
+  <li> ¡Ö½ÅÍ×Å١פÏÇÑ»ß
+  <li> ¤«¤ï¤ê¤Ë¡ÖÉâÄÀÊý¼°¡×¤Çɽ¼¨½ç¤ò¹©É×
+       <ul>
+    <li> ³Ð½ñ: ½ù¡¹¤ËÄÀ¤à (¤É¤¦¤»Á´Éô¤Ï¤Ç¤­¤Þ¤»¤ó :p)
+    <li> todo: ½ù¡¹¤ËÉ⤫¤Ö
+    <li> ¡ºÀÚ: »ØÄêÆü¤¬¶á¤Å¤¯¤ÈÉ⤫¤Ö
+       </ul>
+</ul>
+<img src="updown.png" alt="magic sorting">
+
+<hr>
+
+<h2><a name="hint">¤³¤ó¤Ê¤Õ¤¦¤Ë»È¤¨¤Þ¤¹</a></h2>
+
+<h3>Æüµ­¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+  <li> ¤¤¤Ä¤Ç¤â C-c , c ¤Ç¿·µ¬¥á¥â
+  <li> ½ñ¤¤¤¿¥á¥â¤òÆüÉÕ½ç°ìÍ÷¤Çį¤á¤ë
+</ul>
+
+<h3>ChangeLog ¥á¥â¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+  <li> C-c , c ¢ª ¥á¥â¤ò³«¤­, Æü»þ¤ä¸«¤Æ¤¿¥Õ¥¡¥¤¥ë̾¤ò¼«Æ°ÁÞÆþ
+  <li> ¥á¥â¥Õ¥¡¥¤¥ë¤Î̾Á°¤ä½ñ¤¯¾ì½ê¤Ç̤¦¤³¤È¤Ê¤·.
+    Ï¢·ëɽ¼¨¤Ç¼Â¼ÁŪ¤Ë¡Ö¥Ý¥±¥Ã¥È°ì¤Ä»þ´Ö½çÇÛÃÖ¡×.
+  <li> clgrep ÁêÅö¤Î¡Ö¸¡º÷ ¢ª ¥Ò¥Ã¥È¤·¤¿¥á¥â¤òÆüÉս祽¡¼¥È ¢ª Ï¢·ëɽ¼¨¡×
+</ul>
+
+<h3>¥ê¥ó¥¯¤Ä¤­¥Æ¥­¥¹¥È¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+  <li> ¡Ö&gt;&gt;&gt; ~/BabyloniaWave.txt¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¡ß2
+       ¢ª BabyloniaWave.txt ¤ò³«¤¯
+  <li> ¡Ö&gt;&gt;&gt; ~/BabyloniaWave.png¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¡ß2
+       ¢ª ²èÁü viewer ¤òµ¯Æ°
+  <li> ¡Ö&gt;&gt;&gt; ¥Ï¥¤¥¦¥§¥¤ÏÇÀ±¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó
+       ¢ª ¡Ö¥Ï¥¤¥¦¥§¥¤ÏÇÀ±¡×¤ò¸¡º÷
+  <li> ÆäË, ¡Ö¸¦µæ¥á¥â¤Ë¤Ïɬ¤º {S} ¤È½ñ¤¯¡×¤Î¤è¤¦¤Êµ­¹æ¤ò·è¤á¤Æ¤ª¤±¤Ð,
+       ¡Ö¸¦µæ¥á¥â°ìÍ÷ &gt;&gt;&gt; {S}¡×¤Î¤è¤¦¤Ê¥·¥ç¡¼¥È¥«¥Ã¥È¤¬¤Ç¤­¤ë
+</ul>
+
+<h3>Wiki ¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+ <li> ¡Ö[[·ë¾½À±ÃÄ]]¡×¤Î¾å¤Ç¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È, WikiName ¡Ö·ë¾½À±ÃġפΥڡ¼¥¸¤òºîÀ®
+ <li> Â¾¤Î¥Ú¡¼¥¸¤Î¡Ö·ë¾½À±Ãġפˤϲ¼Àþ¤¬¤Ä¤¯.
+      ¥ê¥¿¡¼¥ó 2 ²ó¤¿¤¿¤¯¤È¾å¤Î¥Ú¡¼¥¸¤Ø¥¸¥ã¥ó¥×.
+</ul>
+
+<!--
+<h3>³¬ÁØʬÎà(¥Ä¥ê¡¼¥á¥â)¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+  <li> ¡ÖWiki ¤Îµ¤Ê¬¤Ç¡×¤ò³¬ÁØŪ¤Ë¸ÂÄꤷ¤Æ»È¤¦¤À¤±?
+</ul>
+-->
+
+<h3>¤³¤Å¤«¤¤Ä¢¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+    <li> ¤³¤Å¤«¤¤µ­¹æ(Îã: $$$)¤ò·è¤á¤Æ, ¤É¤³¤«¤Ë¡Ö&lt;&lt;&lt; $$$¡×¤È½ñ¤¤¤Æ¤ª¤¯
+    <li> ¤³¤Å¤«¤¤¤ò»È¤Ã¤¿¤é, Æüµ­Ãæ¤Ë¡Ö$$$ 651±ß ¥Ð¥Ó¥í¥Ë¥¢¥¦¥§¡¼¥Ö¡×¤Î¤è¤¦¤Ë½ñ¤¯
+      (Æüµ­¤ËËä¤á¹þ¤à¤Î¤¬¥ß¥½)
+    <li> ¡Ö$$$¡×¤Ë¤Ï²¼Àþ¤¬¤Ä¤¯. ¥ê¥¿¡¼¥ó 1 ²ó¤¿¤¿¤¯¤È¤³¤Å¤«¤¤°ìÍ÷¤¬½Ð¤ë.
+    <li> ÆüÉÕÈϰϤäÀµµ¬É½¸½¤Ç¹Ê¤ê¤³¤ß
+    <li> °ìÍ÷¾å¤Ç¥ê¥¿¡¼¥ó¤¿¤¿¤¯¤È³ºÅöÆüµ­¤Ø¥¸¥ã¥ó¥×
+</ul>
+
+<h3>¥Æ¡¼¥ÞÊ̷Ǽ¨ÈĤε¤Ê¬¤Ç</h3>
+<ul>
+  <li> ¥Æ¡¼¥Þ¤´¤È¤Ë, ¡Ö&lt;&lt;&lt; ¥Æ¡¼¥Þ̾¡×¤È½ñ¤¤¤¿¥á¥â¤òºî¤Ã¤Æ¤ª¤¯
+  <li> ¥Æ¡¼¥Þ¡Ö·ë¾½À±ÃġפηǼ¨ÈĤËÅê¹Æ¤¹¤ë¤Ë¤Ï,
+    ¥á¥â¤ò½ñ¤­, ¤É¤³¤«¤Ë¡Ö·ë¾½À±ÃġפȽñ¤¤¤Æ¤ª¤¯
+  <li> ¡Ö·ë¾½À±Ãġפˤϲ¼Àþ¤¬¤Ä¤¯. ¥ê¥¿¡¼¥ó 1 ²ó¤¿¤¿¤¯¤È°ìÍ÷¤¬½Ð¤ë¤Î¤Ç,
+    @ ¤ÇÏ¢·ëɽ¼¨ ¢ª ¿·¤·¤¤½ç¤ÇÅê¹Æ¤¬Ê¤Ö
+</ul>
+
+<h3>¡Ö»ñÎÁ(¥¹¥È¥Ã¥¯·¿¥á¥â) + ¥³¥á¥ó¥È(¥Õ¥í¡¼·¿¥á¥â)¡×¤Îµ¤Ê¬¤Ç</h3>
+<ul>
+  <li> »ñÎÁ¤ò½ñ¤­, ¤É¤³¤«¤Ë¡Ö&lt;&lt;&lt; »ñÎÁ̾¡×¤È½ñ¤¤¤Æ¤ª¤¯
+  <li> »ñÎÁ¡Ö·ë¾½À±Ãġפ˥³¥á¥ó¥È¤¹¤ë¤Ë¤Ï,
+    ¥á¥â¤ò½ñ¤­, ¤É¤³¤«¤Ë¡Ö·ë¾½À±ÃġפȽñ¤¤¤Æ¤ª¤¯
+  <li> °ìÍ÷ ¢ª Ï¢·ëɽ¼¨¤Ç, ÀèƬ¤Ë»ñÎÁ, ¸å¤Ë¿·¤·¤¤½ç¤Ç¥³¥á¥ó¥È¤¬Ê¤Ö
+</ul>
+
+<!--
+<ul>
+ <li> Emacs ¾å¤Ç, Wiki É÷¤Î¥­¡¼¥ï¡¼¥É¥ê¥ó¥¯¤¬¤Ç¤­¤Þ¤¹
+      <ul>
+       <li> Â¾¤Î¥Õ¥¡¥¤¥ë¤ÎÂê̾¤Ë°ìÃפ·¤¿¸ÀÍդˤϲ¼Àþ
+       <li> ²¼Àþ¤Î¾å¤Ç [return] ¢ª Âбþ¥Õ¥¡¥¤¥ë¤Ë¥¸¥ã¥ó¥×
+      </ul>
+ <li> Ä㵡ǽ¤¬Çä¤ê¤Ç¤¹
+      <dl>
+       <dt> ¥Õ¥©¡¼¥Þ¥Ã¥Èµ¡Ç½¤Ê¤·
+       <dd> rd-mode ¤Ê¤ê¤Ê¤ó¤Ê¤ê, ¤ª¹¥¤ß¤Î´Ä¶­¤ÈÁȤ߹ç¤ï¤»¤Æ<br>
+            (minor-mode ¤È¤·¤Æ¼ÂÁõ)
+       <dt> WikiName ¤Ê¤·
+       <dd> ¡Ö¥ê¥¹¥È¡×¤È¤¤¤¦Âê̾¤¬¤¢¤ì¤Ð, ¡Ö¥¢¥ê¥¹¥È¥Æ¥ì¥¹¡×¤Ç¤â¥ê¥ó¥¯¤Ë<br>
+            (ͽÄê³°¥ê¥ó¥¯¤â¤Þ¤¿³Ú¤·)
+       <dt> ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ê¤·
+       <dd> ¥Ç¥£¥ì¥¯¥È¥ê¤òËè²ó¥¹¥­¥ã¥ó<br>
+            (µ¤·Ú¤ËƳÆþ, µ¤·Ú¤ËÇÑ»ß)
+      </dl>
+</ul>
+-->
+
+<hr>
+$Id: index-j.html,v 1.279 2012-12-29 08:57:18 hira Exp $<br>
+email ¥¢¥É¥ì¥¹¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ëËÁƬ¤ò»²¾È¤¯¤À¤µ¤¤
+<!-- ºî¼Ô¢¡IsNd58WHgU -->
+<a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=913" width="96" height="31" border="0" alt="SourceForge.jp"></a>
+</body> </html>
diff --git a/doc/index.html b/doc/index.html
new file mode 100644 (file)
index 0000000..bb7f50f
--- /dev/null
@@ -0,0 +1,308 @@
+<html> <head>
+<title>howm: note-taking tool on Emacs</title>
+</head>
+
+<body>
+
+<a href="index-j.html">Japanese</a>
+<hr>
+
+<h1><a href="http://howm.sourceforge.jp/">howm: Write fragmentarily and read collectively.</a></h1>
+
+<ul>
+<li> Download
+     <a href="http://howm.sourceforge.jp/a/howm-1.4.3.tar.gz">howm-1.4.3.tar.gz</a>
+<li> <a href="README.html">Tutorial</a>
+<li> <a href="http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?e.FrontPage">Wiki, BBS, mailing list</a>
+</ul>
+
+<hr>
+
+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.
+
+<p>
+<a href="screen-shot.png"><img alt="screen shot" src="s-screen-shot.png"></a>
+<a href="search.png"><img alt="screen shot" src="s-search.png"></a>
+<a href="cat.png"><img alt="screen shot" src="s-cat.png"></a>
+<a href="menu.png"><img alt="screen shot" src="s-menu.png"></a>
+<br>
+(<a href="http://howm.sourceforge.jp/a/rich-title/">Title bar? See rich-title.</a>)
+</p>
+
+<hr>
+
+<h2>Hyperlinks</h2>
+
+<ul>
+<li>goto link: file name or keyword
+<pre>
+      &gt;&gt;&gt; ~/BabyloniaWave.txt
+      &gt;&gt;&gt; highway planet
+</pre>
+<li> come-from link:
+    If you write
+<pre>
+      &lt;&lt;&lt; crystal star cluster
+</pre>
+    in file A,
+    all strings 'crystal star cluster' in other files are automatically linked to A.
+</ul>
+<img src="go.png" alt="goto link">
+<img src="come.png" alt="come-from link">
+
+<h2>Full-text search</h2>
+
+<ul>
+<li>Everything is based on full-text search (grep);
+    the above 'links' are shortcuts to grep.
+<li>Write fragmentarily and read collectively;
+    you can concatenate all matched notes into a single buffer.
+</ul>
+
+<h2>No conversion</h2>
+You can keep your favorite style. :-)
+<ul>
+<li>text file and free format
+<li>implemented as a minor mode; can be combined with other modes.
+</ul>
+
+<h2>Todo list with magic sorting</h2>
+<ul>
+<li>Reminder: sinks slowly.
+<li>Todo: floats slowly.
+<li>Deadline: floats rapidly when the date is approaching.
+</ul>
+
+<hr>
+
+<h2>Install</h2>
+
+<ul>
+ <li> './configure', 'make', and 'make install'.
+      Files are installed to /usr/share/emacs/site-lisp/howm/
+      and /usr/local/share/howm/.
+ <li> Write below in your .emacs.
+      <pre>
+        (require 'howm)
+      </pre>
+ <li> If you see 'cannot open load file' error, put this before
+      the above description.
+      <pre>
+        (add-to-list 'load-path "/usr/share/emacs/site-lisp/howm/")
+      </pre>
+ <li> (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.
+      <pre>
+        (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*
+      </pre>
+</ul>
+
+<h2>Update from old version</h2>
+
+<h3>1.4.2 to 1.4.3</h3>
+
+<p>
+fix for emacs-25, etc.
+</p>
+
+<h3>1.4.1 to 1.4.2</h3>
+
+<p>
+fix for emacs-24.3, etc.
+</p>
+
+<h3>1.4.0 to 1.4.1</h3>
+
+<p>
+small bug fix, etc.
+</p>
+
+<h3>1.3.9.2 to 1.4.0</h3>
+
+<p>
+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.
+</p>
+
+<p>
+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.
+</p>
+
+<h3>1.3.9.1 to 1.3.9.2</h3>
+
+<p>
+small bug fix.
+</p>
+
+<h3>1.3.9 to 1.3.9.1</h3>
+
+<p>
+bug fix for emacs-24.0.50.
+</p>
+
+<h3>1.3.8 to 1.3.9</h3>
+
+<p>
+small bug fix, etc.
+</p>
+
+<h3>1.3.7 to 1.3.8</h3>
+
+<p>
+highlight late deadlines.
+small bug fix, etc.
+</p>
+
+<h3>1.3.6 to 1.3.7</h3>
+
+<p>
+Maintenance release (internal cleaning).
+The variable howm-list-normalizer is obsolete now.
+Use howm-normalizer instead:
+<ul>
+ <li>(Case 0) What is howm-list-normalizer? I don't know it at all.
+      --- You need to do nothing. :-)
+ <li>(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.
+ <li>(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).
+ <li>(Case 3) I've written (setq howm-list-normalizer ...my_original_elisp...).
+      --- Modify it correspondingly with the below change.
+      <ul>
+       <li>Old (howm-list-normalizer):
+            Specify a function that sorts and REDISPLAYS CURRENT items.
+       <li>New (howm-normalizer):
+            Specify a function that RETURNS the sorted list of items
+            for the GIVEN items.
+      </ul>
+      Or, Ask me in
+      <a href="http://lists.sourceforge.jp/mailman/archives/howm-eng/">
+      howm-eng ML</a>.
+</ul>
+</p>
+
+<h3>1.3.5 to 1.3.6</h3>
+
+<p>
+Maintenance release.
+Font-lock problem was fixed for CVS-head emacs.
+</p>
+
+<h3>1.3.4 to 1.3.5</h3>
+
+<p>
+Maintenance release.
+Today's schedule didn't appear on menu on the last day of DST.
+(cf. <a href="http://howm.sourceforge.jp/a/howm-1.3.4_DST.patch">patch for 1.3.4</a>)
+</p>
+
+<h3>1.3.3 to 1.3.4</h3>
+
+<p>
+Maintenance release (security fix).
+All symbols are marked as risky-local-variable.
+</p>
+
+<h3>1.3.2 to 1.3.3</h3>
+
+<p>
+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.
+</p>
+
+<h3>1.3.1 to 1.3.2</h3>
+
+<p>
+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.
+<ul>
+ <li> M-x customize-variable RET howm-list-title RET
+ <li> Remove check mark on howm-action-lock-date-search.
+ <li> [Save for Future Sessions]
+</ul>
+</p>
+
+<h3>1.3.0 to 1.3.1</h3>
+
+<p>
+Maintenance release.
+A few bugs (locale, xemacs) are fixed.
+</p>
+
+<h3>1.2.* to 1.3.0</h3>
+
+<!--
+If you have already used howm-1.2.*, you may want to add these codes
+into .emacs for backward compatibility.
+<pre>
+;; no title in summary buffer
+(setq howm-list-title nil)
+;; no search history
+(setq howm-history-limit 0)
+(setq howm-history-unique nil)
+;; not 'grep -E/-F' but '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)
+;; misc.
+(setq howm-template-receive-buffer nil)
+(setq howm-view-summary-keep-cursor nil)
+</pre>
+-->
+
+<p>
+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.
+</p>
+
+<p>
+Among several new features in howm-1.3.0,
+the most useful one will be 'aliases'.
+See <a href="README.rd">README</a> for details.
+</p>
+
+<h2>Customization</h2>
+
+For customization, try 'M-x customize-group RET howm RET'.
+
+<hr>
+
+<h2>Contact</h2>
+
+My email address is written at the beginning of source files.
+
+<hr>
+$Id: index.html,v 1.47 2012-12-27 03:23:31 hira Exp $
+<a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=913" width="96" height="31" border="0" alt="SourceForge.jp"></a> 
+</body> </html>
diff --git a/doc/menu.png b/doc/menu.png
new file mode 100644 (file)
index 0000000..ff9be6b
Binary files /dev/null and b/doc/menu.png differ
diff --git a/doc/s-cat.png b/doc/s-cat.png
new file mode 100644 (file)
index 0000000..3f965ff
Binary files /dev/null and b/doc/s-cat.png differ
diff --git a/doc/s-menu.png b/doc/s-menu.png
new file mode 100644 (file)
index 0000000..a6740eb
Binary files /dev/null and b/doc/s-menu.png differ
diff --git a/doc/s-screen-shot.png b/doc/s-screen-shot.png
new file mode 100644 (file)
index 0000000..739f07c
Binary files /dev/null and b/doc/s-screen-shot.png differ
diff --git a/doc/s-search.png b/doc/s-search.png
new file mode 100644 (file)
index 0000000..8c739b2
Binary files /dev/null and b/doc/s-search.png differ
diff --git a/doc/s-source.png b/doc/s-source.png
new file mode 100644 (file)
index 0000000..22cbd5a
Binary files /dev/null and b/doc/s-source.png differ
diff --git a/doc/screen-shot.png b/doc/screen-shot.png
new file mode 100644 (file)
index 0000000..6d327d4
Binary files /dev/null and b/doc/screen-shot.png differ
diff --git a/doc/search.png b/doc/search.png
new file mode 100644 (file)
index 0000000..cd2b399
Binary files /dev/null and b/doc/search.png differ
diff --git a/doc/source.png b/doc/source.png
new file mode 100644 (file)
index 0000000..2a0c66b
Binary files /dev/null and b/doc/source.png differ
diff --git a/doc/todo.png b/doc/todo.png
new file mode 100644 (file)
index 0000000..2578ebc
Binary files /dev/null and b/doc/todo.png differ
diff --git a/doc/updown.png b/doc/updown.png
new file mode 100644 (file)
index 0000000..98e197f
Binary files /dev/null and b/doc/updown.png differ
diff --git a/elisp-comp b/elisp-comp
new file mode 100755 (executable)
index 0000000..2d1eb65
--- /dev/null
@@ -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 <pinard@iro.umontreal.ca>, 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 <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+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 <bug-automake@gnu.org>.
+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 (file)
index 0000000..1811da6
--- /dev/null
@@ -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"[<Title] [<Name] %"d"[Date>] %"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 (file)
index 0000000..9675a3d
--- /dev/null
@@ -0,0 +1,20 @@
+2011-01-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.txt: support new commands.
+
+2010-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.txt: use %reminder instead of %schedule and %todo.
+
+2005-12-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * Makefile.am: no need to install 0000-00-00-000000.howm.
+
+2005-05-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.howm: added [Preference], %recent, %random
+
+2005-05-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.howm: bind R = [Update Menu]
+
diff --git a/en/Makefile.am b/en/Makefile.am
new file mode 100644 (file)
index 0000000..c37714d
--- /dev/null
@@ -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 (file)
index 0000000..a9b2ccc
--- /dev/null
@@ -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 (file)
index 0000000..5c6d357
--- /dev/null
@@ -0,0 +1,44 @@
+2010-12-29  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * tag2plan: removed (not maintained)
+
+2008-02-12  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * howmkara
+       (String::offsets): avoid warning.
+       (Book::search): escape $ in regexp.
+
+2005-09-15  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * hcal.rb (ical_item): don't use Date
+
+2005-07-18  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * hcal.rb
+       (ical): fix.
+       iCalendar PRODID was merely copied from output of vPim
+       without consideration.
+       (usage): update URL
+
+2005-05-20  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * howm2: support aliases of come-from keywords
+
+2005-05-15  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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 (file)
index 0000000..e6e83c4
--- /dev/null
@@ -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 (file)
index 0000000..3fd53ae
--- /dev/null
@@ -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 (executable)
index 0000000..fd9805d
--- /dev/null
@@ -0,0 +1,280 @@
+#!/usr/bin/ruby -sKe
+# -*- Ruby -*-
+
+# require 'jcode'
+require 'iconv'
+require 'date'
+
+def usage
+  name = File::basename $0
+  print <<EOU
+#{name}: Í½Äê¤ä todo ¤Î°ìÍ÷¤ò½ÐÎÏ
+(Îã)
+  #{name} *.memo  ¢ª ¥«¥ì¥ó¥À¡¼(ͽÄꡦ¡ºÀÚ¡¦ºÑ¤ß¤Î°ìÍ÷)¤ò½ÐÎÏ
+  #{name} -l *.memo  ¢ª ½ÜÅÙ½ç¤Î todo °ìÍ÷¤ò½ÐÎÏ
+  #{name} -i *.memo  ¢ª iCalendar ·Á¼°¤Ç½ÐÎÏ (ºîÀ®Ãæ)
+  #{name} -h ¤Þ¤¿¤Ï #{name} -help  ¢ª ¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò½ÐÎÏ
+(¹àÌܤνñ¼°)
+  http://howm.sourceforge.jp/ »²¾È
+EOU
+end
+
+############################################
+# const
+
+$schedule_types ||= '[@!.]'
+$type_alias = {'' => '-'}
+$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 (executable)
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 <<EOU
+#{name}: howm ¥á¥â¤ò¥Õ¥©¡¼¥Þ¥Ã¥È
+¡¦¤ä¤Ð¤¤Ê¸»ú¤ò¥¨¥¹¥±¡¼¥×
+¡¦¥­¡¼¥ï¡¼¥É¤ò¥ê¥ó¥¯¤ËÊÑ´¹
+¡¦¥Ø¥Ã¥À¤È¥Õ¥Ã¥¿¤ò¤Ä¤±¤ë
+(Îã)
+  #{name} ~/howm/ ~/converted/
+  #{name} -type=rd ~/howm/ ~/converted/
+  ls ~/howm/*/*/*7-*.txt | #{name} -list ~/converted/
+  grep -rl '¤Û¤²' ~/howm/ | #{name} -list ~/converted/
+(¥ª¥×¥·¥ç¥óÎã)
+  -type=rd ¤Þ¤¿¤Ï -t=rd ¢ª ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¼ïÎà¤ò»ØÄê
+    html   ¡Ä ¥Ç¥Õ¥©¥ë¥È
+    rd     ¡Ä see http://www2.pos.to/~tosh/ruby/rdtool/ja/
+    rdbody ¡Ä rd ¤Î =begin ¤È =end ¤¬¤Ê¤¤¤â¤Î¤òÆþÎÏ. ¤³¤ì¤é¤òÊä¤Ã¤ÆÀ¸À®.
+  -list                     ¢ª ¥á¥â¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤òɸ½àÆþÎϤ«¤éÆɤà
+  -exclude='^[.]|CVS'       ¢ª Âоݳ°¤Î¥Õ¥¡¥¤¥ë¤òÀµµ¬É½¸½¤Ç»ØÄê
+  -r                        ¢ª ¥á¥â°ìÍ÷¤ò¿·¤·¤¤½ç¤Ëʤ٤ë
+  -i                        ¢ª <<< ¤ÇÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤
+  -title='Index'            ¢ª index ¥Ú¡¼¥¸¤ÎÂê̾
+  -silent ¤Þ¤¿¤Ï -s         ¢ª ¿ÊĽɽ¼¨¤ò¤·¤Ê¤¤
+  -goto='>>>'               ¢ª goto link ¤Î½ñ¼°
+  -comefrom='<<<'           ¢ª come-from link ¤Î½ñ¼°
+  -no_alias                 ¢ª come-from ¥­¡¼¥ï¡¼¥É¤Î alias ¤ò̵»ë
+  -help ¤Þ¤¿¤Ï -h           ¢ª ¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨
+  (-debug                   ¢ª ¥Ç¥Ð¥Ã¥°ÍѽÐÎÏ)
+EOU
+end
+
+argv_len = $list ? 1 : 2
+if ($help || $h || ARGV.length != argv_len)
+  usage
+  exit 0
+end
+
+#####################################
+
+$type ||= $t || 'html'
+$exclude ||= "^[.\#]|CVS|~$"
+$silent ||= $s
+$title ||= 'Index'
+#$r_text_width = 40
+$progress = '.'
+$goto = '>>>'
+$comefrom = '<<<'
+$url_regexp = %r!((http|file)://\S+)!
+
+def come_go_match(str)
+  case str
+  when /#$comefrom|#$goto/
+    s = str
+    r = []
+    while s =~ /((#$comefrom|#$goto) *(.+?)) *($|(#$comefrom|#$goto).*)/
+      raw = $1
+      type = ($2 == $comefrom) ? :comefrom : :goto
+      key = $3
+      s = $4
+      r.push [type, key, raw]
+    end
+    return r
+  else
+    return false
+  end
+end
+
+def title_match(str)
+  if str =~ /^= +(.+)$/
+    return $1
+  else
+    return false
+  end
+end
+
+#####################################
+
+def empty(); lambda{|*dummy| ""}; end
+def constant(str); lambda{|*dummy| str}; end
+def appender(str); lambda{|x| x + str}; end
+def no_change(); lambda{|*x| x[0]}; end
+
+$formatter = Hash::new
+
+$formatter['html'] = {
+  :escaper => lambda{|str| CGI::escapeHTML str},
+  :unescaper => lambda{|str| CGI::unescapeHTML str},
+  # body page
+  :namer => appender('.b.html'),
+  :header => lambda{|file|
+    %!<HTML><TITLE>#{file}</TITLE><BODY><H1>#{file}</A></H1><HR><PRE>\n!
+  },
+  :come_tag => lambda{|a|
+    # Fix me.
+    %!<A NAME="#{a[:occur][0][:anch]}"></A><A HREF="#{a[:rpath]}\##{a[:anch_n]}" NAME="#{a[:anch]}">#{a[:orig]}</A>!
+  },
+  :come_jump => lambda{|a|
+    %!<A HREF="#{a[:path]}\##{a[:anch]}">#{a[:orig]}</A>!
+  },
+  :come_anchor => lambda{|a|
+    %!<A NAME="#{a[:occur][0][:anch]}"></A>!
+  },
+  :go_tag => lambda{|a|
+    %!<A NAME="#{a[:occur][0][:anch]}"></A><A HREF="#{a[:rpath]}\##{a[:anch]}" NAME="#{a[:anch]}">#{a[:orig]}</A>!
+  },
+  :go_anchor => lambda{|a|
+    %!<A NAME="#{a[:occur][0][:anch]}"></A>!
+#     %!<A NAME="#{a[:occur][0][:anch]}">#{a[:key]}</A>!
+  },
+  :url => lambda{|a|
+    %!<A HREF="#{a[:url]}">#{CGI::unescapeHTML a[:url]}</A>!
+  },
+  :footer => lambda{|file|
+    %!</PRE><HR><A HREF="#{to_index file}">index</A></BODY></HTML>\n!
+  },
+  # reference page
+  :ref_namer => appender('.r.html'),
+  :ref_header => lambda{|file|
+    "<HTML><TITLE>#{file}</TITLE><BODY><H1>References: #{file}</H1>\n"
+  },
+  :ref_itemer => lambda{|a|
+    go = a[:goto_file]
+    url = go ? "file://#{a[:goto_file]}" : "#{a[:path]}\##{a[:anch]}"
+    ocs = a[:occur]
+    %!<A HREF="#{url}" NAME="#{a[:anch]}"><H2>#{a[:key]} (#{ocs.length})</H2></A>\n<OL>\n! +
+    ocs.map{|oc|
+      %!<LI><A HREF="#{oc[:path]}\##{oc[:anch]}">#{oc[:file]}</A> #{oc[:text]}\n!
+    }.join +
+    "</OL>\n"
+  },
+  :ref_footer => constant("</BODY></HTML>\n"),
+  # index page
+  :index_namer => constant('index.html'),
+  :index_header => constant("<HTML><TITLE>#{$title}</TITLE><BODY><H1>#{$title}</H1>\n"),
+  :index_keyworder => lambda{|as|
+    "<H2>Keywords (#{as.length})</H2>\n" +
+    as.map{|a| %!<A HREF="#{a[:dest]}\##{a[:anch]}">#{a[:key]}</A>!}.join(" /\n") +
+    "\n"
+  },
+  :index_filer => lambda{|as|
+    "<H2>Files (#{as.length})</H2>\n<OL>\n" +
+    as.map{|a| %!<LI><A HREF="#{a[:dest]}">#{a[:file]}</A>: #{a[:title]}\n!}.join +
+    "</OL>\n"
+  },
+  :index_footer => constant("</BODY></HTML>\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 (executable)
index 0000000..96ebc92
--- /dev/null
@@ -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 <<EOU
+#{name}: howm ¥á¥â¤ò HTML ²½
+¡¦¤ä¤Ð¤¤Ê¸»ú¤ò¥¨¥¹¥±¡¼¥×
+¡¦¥­¡¼¥ï¡¼¥É¤ò¥ê¥ó¥¯¤ËÊÑ´¹
+¡¦¥Ø¥Ã¥À¤È¥Õ¥Ã¥¿¤ò¤Ä¤±¤ë
+(Îã)
+  #{name} ~/howm/ ~/converted/
+  ls ~/howm/*/*/*7-*.txt | #{name} -list ~/converted/
+  grep -rl '¤Û¤²' ~/howm/ | #{name} -list ~/converted/
+(¥ª¥×¥·¥ç¥óÎã)
+  -list                     ¢ª ¥á¥â¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤òɸ½àÆþÎϤ«¤éÆɤà
+  -exclude='^[.]|CVS'       ¢ª Âоݳ°¤Î¥Õ¥¡¥¤¥ë¤òÀµµ¬É½¸½¤Ç»ØÄê
+  -home='index.html'        ¢ª ¡ÖHome¡×¤Î¥ê¥ó¥¯Àè
+  -silent ¤Þ¤¿¤Ï -s         ¢ª ¿ÊĽɽ¼¨¤ò¤·¤Ê¤¤
+  -help ¤Þ¤¿¤Ï -h           ¢ª ¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨
+  (-debug                   ¢ª ¥Ç¥Ð¥Ã¥°ÍѽÐÎÏ)
+EOU
+end
+
+argv_len = $list ? 1 : 2
+if ($help || $h || ARGV.length != argv_len)
+  usage
+  exit 0
+end
+
+#############################################################
+
+$exclude ||= "^[.\#]|CVS|~$"
+$silent ||= $s
+$summary_length ||= 70
+$come_from ||= "<<< *(.+)$"
+$come_from_pos ||= 1
+
+#############################################################
+
+def notice(str)
+  STDERR.print str if !$silent
+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 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 split_base(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
+
+class HashList < Hash
+  def cons(key, val)
+    self[key] ||= Array::new
+    self[key].push val
+  end
+end
+
+# class Array
+#   def flatten
+#     ret = []
+#     self.each{|x| ret += x}
+#     ret
+#   end
+# end
+
+class String
+  def offsets(pattern)
+    a = Array::new
+    pos = 0
+    # necessary for use of last_match. sigh...
+    pattern = Regexp::new(Regexp::quote(pattern)) if pattern.is_a? String
+    while (i = index pattern, pos)
+      a.push Regexp.last_match.offset(0)
+      pos = i + 1
+    end
+    return a
+  end
+end
+
+module Bundle
+  def expand_readlines(f)
+    open(File::expand_path(f, base_dir), 'r'){|io| io.readlines.join}
+#     open(File::expand_path(f, base_dir), 'r'){|io| io.read}  # for ruby-1.7?
+  end
+  def first_line(f)
+    open(File::expand_path(f, base_dir), 'r'){|io| io.gets.chop}
+  end
+  def link_tag(f)  # Clean me. ²¿ÅÙ¤â¸Æ¤Ö¤Î¤Ï¤«¤Ã¤³°­¤¤.
+    fline = first_line f
+    [:link, f + '.b', f + ': ' + fline[0, $summary_length]]
+  end
+end
+
+#############################################################
+
+class Formatter
+  attr_accessor :home
+  def initialize(home = nil)
+    @home = home
+  end
+  def newpage
+    @result = ''
+  end
+  def put(*com)
+    com.each{|c| put_one c}
+  end
+  def put_one(command)
+    type = command.shift
+    case type
+    when :pre
+      items = command.shift
+      @result += "<pre>\n"
+      put *items
+      @result += "</pre>\n"
+    when :as_is
+      @result += CGI::escapeHTML(command.shift)
+    when :link
+      link, str = command
+      url = link.is_a?(String) ? link + '.html' : link[1]
+      @result += %!<a href="#{url}">#{CGI::escapeHTML str}</a>!
+    when :list
+      items = command.shift
+      @result += "<ol>\n"
+      items.each{|i| @result += ' <li>'; put_one i; @result += "\n"}
+      @result += "</ol>\n"
+    end
+  end
+  def wrapped_result(title)
+    etitle = CGI::escapeHTML title
+    <<_EOS_
+<html>
+<head><title>#{etitle}</title></head>
+<body>
+<h1>#{etitle}</h1>
+<hr>
+#{@result}
+<hr>
+<a href="#{@home}">Home</a>
+<a href="book.h.html">Files</a>
+<a href="index.h.html">Keywords</a>
+</body>
+</html>
+_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 (executable)
index 0000000..cd583da
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/ruby -s
+# -*- coding: euc-jp -*-
+# -*- Ruby -*-
+
+def usage
+  name = File::basename $0
+  print <<EOU
+#{name}: howm ¥á¥â¤ò, °ì¥á¥â°ì¥Õ¥¡¥¤¥ë¤Ëʬ³ä (¼êÈ´¤­»ÅÍÍ)
+(Îã)
+  #{name} 2004_10_10.txt
+  ¢ª 2004_10_10.txt.aa, 2004_10_10.txt.ab, ¡Ä ¤¬¤Ç¤­¤ë
+(¥ª¥×¥·¥ç¥óÎã)
+  -prefix=hoge.     ¢ª hoge.aa, hoge.ab, ¡Ä ¤¬¤Ç¤­¤ë
+  -help ¤Þ¤¿¤Ï -h   ¢ª ¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨
+EOU
+end
+
+#####################################
+
+if ($help || $h || ARGV.length == 0)
+  usage
+  exit 0
+end
+
+$prefix ||= ARGV[0] + '.'
+ext = 'aa'
+
+ARGF.readlines.join.split(/^= /).each_with_index{|x, i|
+  next if x.empty?
+  x = '= ' + x if i > 0
+  open($prefix + ext, 'w'){|io| io.print x}
+  ext.succ!
+}
diff --git a/gfunc.el b/gfunc.el
new file mode 100644 (file)
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 <khi@users.sourceforge.jp>
+;;; $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 (file)
index 0000000..e3d7536
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;; $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 (file)
index 0000000..69d285c
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 "<marks>" 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 "<namazu>"
+                       (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 (file)
index 0000000..b842dda
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 #<magic-event Expose> 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 (file)
index 0000000..f7fb5f3
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (file)
index 0000000..1fbc87a
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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)
+    ("[<Title]" howm-keyword-to-kill-ring)
+    ("[<Name]" (lambda () (howm-keyword-to-kill-ring t)))
+    ("[Key>]" 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 (file)
index 0000000..63f53c9
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 '("\e$BF|\e(B" "\e$B7n\e(B" "\e$B2P\e(B" "\e$B?e\e(B" "\e$BLZ\e(B" "\e$B6b\e(B" "\e$BEZ\e(B"))
+
+(defvar howm-menu-command-table-ja
+  `(
+    ("[\e$BB.5-\e(B]" howm-remember previous)
+    ("[\e$B?75,\e(B]" (lambda () (howm-create ,howm-menu-action-arg)))
+    ("[\e$BDI2C\e(B]" (lambda () (howm-create-here ,howm-menu-action-arg)))
+    ("[\e$BJ#@=\e(B]" howm-dup)
+    ("[\e$B99?7\e(B]" howm-initialize-buffer previous)
+    ("[\e$B@55,\e(B]" howm-list-grep)
+    ("[\e$B8GDj\e(B]" howm-list-grep-fixed)
+    ("[roma]" howm-list-migemo)
+    ("[\e$B:#F|\e(B]" howm-find-today)
+    ("[\e$B:rF|\e(B]" howm-find-yesterday)
+    ("[\e$B0lMw\e(B]" howm-list-all)
+    ("[\e$B:G6a\e(B]" howm-list-recent)
+    ("[\e$BA08e\e(B]" howm-list-around)
+    ("[\e$BM=Dj\e(B]" howm-list-schedule)
+    ("[\e$B%PFb\e(B]" (lambda () (call-interactively 'howm-occur)) previous)
+    ("[\e$BA4%P\e(B]" (lambda () (howm-list-buffers ,howm-menu-action-arg)))
+    ("[mark]" howm-list-mark-ring previous)
+    ("[\e$BMzNr\e(B]" howm-history)
+    ("[\e$BBj",\e(B]" howm-keyword-to-kill-ring)
+    ("[\e$BL>",\e(B]" (lambda () (howm-keyword-to-kill-ring t)))
+    ("[\e$B80"-\e(B]" howm-insert-keyword previous)
+    ("[\e$BF|"-\e(B]" howm-insert-date previous)
+    ("[\e$B;~"-\e(B]" howm-insert-dtime previous)
+    ("[Todo]" howm-list-todo)
+    ("[\e$BA4>C\e(B]" howm-kill-all)
+    ("[\e$B6/@)A4>C\e(B]" (lambda () (interactive) (howm-kill-all t)))
+    ("[menu \e$BJT=8\e(B]" howm-menu-edit current)
+    ("[menu \e$B99?7\e(B]" howm-menu-refresh current)
+    ("[\e$B@_Dj\e(B]" (lambda () (customize-group 'howm)))
+    ("[\e$B?lJb\e(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 (file)
index 0000000..ff4bd69
--- /dev/null
@@ -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\"[<Title] [<Name] %\"d\"[Date>] %\"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 (file)
index 0000000..74aae32
--- /dev/null
@@ -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\"[\e$BB.5-\e(B] %\"c\"[\e$B?75,\e(B] %\"D\"[\e$BJ#@=\e(B] \e$B8!:w\e(B(%\"s\"[\e$B8GDj\e(B] %\"g\"[\e$B@55,\e(B] %\"m\"[roma] %\"o\"[\e$B%PFb\e(B]) %\":\"[\e$B:rF|\e(B] %\".\"[\e$B:#F|\e(B]
+ %\"a\"[\e$B0lMw\e(B] %\"l\"[\e$B:G6a\e(B] %\"A\"[\e$BA08e\e(B] %\"h\"[\e$BMzNr\e(B] %\"y\"[\e$BM=Dj\e(B] %\"t\"[Todo] %\"b\"[\e$BA4%P\e(B] %\"x\"[mark] %\"w\"[\e$B?lJb\e(B] [\e$B@_Dj\e(B]
+ %\"K\"[\e$BBj",\e(B] [\e$BL>",\e(B] %\"d\"[\e$BF|"-\e(B] %\"T\"[\e$B;~"-\e(B] %\"i\"[\e$B80"-\e(B] %\"r\"[\e$B99?7\e(B] %\"R\"[menu \e$B99?7\e(B] [menu \e$BJT=8\e(B] [\e$BA4>C\e(B]
+-------------------------------------
+[\e$BM=Dj!&\e(BTodo] \e$B!D\e(B \e$BM=Dj\e(B@, \e$B!:@Z\e(B! \e$B$r\e(B %sdays \e$BF|@h$^$GI=<(\e(B.
+\e$B!:@Z\e(B!, todo+, \e$B3P=q\e(B-, \e$BJ]N1\e(B~ \e$B$r>e0L\e(B %tnum \e$B8D$^$GI=<(\e(B.
+%reminder
+-------------------------------------
+\e$B:G6a$N%a%b\e(B
+%recent
+-------------------------------------
+\e$B%i%s%@%`%;%l%/%H\e(B (\e$BITMW$J$i\e(B[menu \e$BJT=8\e(B]\e$B$G3:Ev2U=j$r:o=|$7$F$/$@$5$$\e(B)
+%random
+-------------------------------------
+
+\e$BM=Dj!&\e(Btodo \e$B$N=q<0\e(B (\e$B<B:]$OH>3Q$G\e(B)
+[2002-10-21]\e$B!w\e(B1  \e$BM=Dj\e(B (\e$BM=DjI=$KI=<(!#$b$7!w\e(B3\e$B$J$i\e(B3\e$BF|4V$NM=Dj!"$D$^$j\e(B23\e$BF|$^$G$N0UL#\e(B)
+[2002-10-21]\e$B!\\e(B7  todo \e$B;XDjF|$K$J$C$F$+$i\e(B7\e$BF|4V$+$1$F=y!9$KIb$+$SB3$1$k\e(B
+[2002-10-21]\e$B!*\e(B7  \e$B!:@Z\e(B \e$B;XDjF|$N\e(B7\e$BF|A0$+$i=y!9$KIb$+$S!";XDjF|0J9_Ib$-$C$Q$J$7\e(B
+[2002-10-21]\e$B!]\e(B1  \e$B3P=q\e(B \e$B;XDjF|$KIb$+$S>e$,$j!"0J9_\e(B1\e$BF|$+$1$FC10LNL$@$1=y!9$KD@$`\e(B
+[2002-10-21]\e$B!A\e(B30 \e$BJ]N1\e(B \e$B;XDjF|$KIb$+$S>e$,$j!"0J9_\e(B30\e$BF|<~4|$GIb$-D@$_$r$/$j$+$($9\e(B
+[2002-10-21]\e$B!%\e(B   \e$B:Q$_\e(B \e$B>o$KDl\e(B
+(\e$B5-9f$N8e$N?t;z$O%G%U%)%k%HCM\e(B)
+
+\e$B3P$(J}\e(B
+\e$B!&M=Dj$O$=$NF|$K7k$SIU$1$i$l$F$k$+$i\e(B@(at)
+\e$B!&3P=q$OD@$s$G$$$/$+$i\e(B-
+\e$B!&\e(Btodo\e$B$OIb$+$S>e$,$C$F$/$k$+$i\e(B+
+\e$B!&!:@Z$O$=$NF|$KCm0U$7$J$1$l$P$J$i$J$$$+$i\e(B!
+\e$B!&J]N1$OGHBG$D$+$i\e(B~
+\e$B!&:Q$_$O=*$o$j$@$+$i\e(B.
+
+-------------------------------------
+
+[\e$B!{!{\e(B]\e$B$O2?\e(B?                    >>> %\e$B%\%?%s$N@bL@\e(B%
+\e$B$3$N%a%K%e!<<+BN$rJT=8$G$-$^$9\e(B >>> %\e$B%a%K%e!<$NJT=8$K$D$$$F\e(B%
+\e$B%a%b$,A}$($F$-$?$i!D\e(B           >>> %\e$B9bB.2=$K$D$$$F\e(B%
+
+
+= <<< %\e$B%\%?%s$N@bL@\e(B%
+
+\e$B"!\e(B \e$B:n@.\e(B
+
+[\e$B?75,\e(B] \e$B"*\e(B \e$B?75,%a%b:n@.\e(B (\e$B8=%j!<%8%g%s$,%?%$%H%k\e(B)
+[\e$BJ#@=\e(B] \e$B"*\e(B \e$B8=%a%b$rJ#@=\e(B (\e$B=;=jO?%F%s%W%l!<%H$J$I$NMQES$rA[Dj\e(B)
+
+\e$B"!\e(B \e$B0lMw\e(B
+
+[\e$B0lMw\e(B] \e$B"*\e(B \e$BA4%a%b$N0lMw\e(B
+[\e$B:G6a\e(B] \e$B"*\e(B \e$B:G6a$N%a%b$NO"7kI=<(\e(B
+[\e$BA08e\e(B] \e$B"*\e(B \e$BA08e$N%a%b\e(B (\e$B8+$F$?%a%b$rCf?4$KA4%a%b$NF|IU=g0lMw\e(B)
+* \e$BBP>]%U%!%$%k$r\e(B(\e$BJT=8%b!<%I$G\e(B)\e$B3+$$$?>uBV$+$i%a%K%e!<$r8F$V$3$H\e(B
+[\e$BMzNr\e(B] \e$B"*\e(B \e$B8!:wMzNr\e(B
+[\e$BM=Dj\e(B] \e$B"*\e(B \e$BM=DjI=\e(B
+[todo] \e$B"*\e(B todo \e$B0lMw\e(B
+
+\e$B"!\e(B \e$B8!:w\e(B
+
+[\e$B@55,\e(B] \e$B"*\e(B \e$B@55,I=8=$N8!:w\e(B
+* \e$B4pK\E*$K$OBgJ8;z>.J8;z$N6hJL$J$7\e(B
+  * \e$B!V\e(BWiki\e$B!W$N$h$&$KL@<(E*$KBgJ8;z$r;XDj$7$?$H$-$O6hJL\e(B
+[\e$B8GDj\e(B] \e$B"*\e(B \e$B%-!<%o!<%I$rJd40F~NO$7$F8GDjJ8;zNs$N8!:w\e(B
+[roma] \e$B"*\e(B \e$B%m!<%^;z8!:w\e(B (migemo)
+[\e$B:#F|\e(B] \e$B"*\e(B \e$B:#F|$N%a%b\e(B
+[\e$B:rF|\e(B] \e$B"*\e(B \e$B:rF|$N%a%b\e(B
+
+\e$B"!\e(B \e$BJT=8\e(B: \e$BBP>]%U%!%$%k$r\e(B(\e$BJT=8%b!<%I$G\e(B)\e$B3+$$$?>uBV$+$i%a%K%e!<$r8F$V$3$H\e(B
+
+[\e$B99?7\e(B] \e$B"*\e(B \e$B2<@~$r0z$-$J$*$9\e(B
+[\e$B80"-\e(B] \e$B"*\e(B \e$B%-!<%o!<%I$rJd40F~NO$7$FE=$j$D$1\e(B
+* Tips: M-v \e$B$G8uJd0lMw$K0\$C$F\e(B migemo \e$B8!:w$9$k$H3Z\e(B
+
+[\e$BF|"-\e(B] \e$B"*\e(B \e$B:#F|$NF|IU\e(B [yyyy-mm-dd] \e$B$rE=$j$D$1\e(B
+[\e$B;~"-\e(B] \e$B"*\e(B \e$B:#F|$NF|;~\e(B [yyyy-mm-dd HH:MM] \e$B$rE=$j$D$1\e(B
+[\e$BBj",\e(B] \e$B"*\e(B \e$B8=%a%b$N%?%$%H%k$r\e(B kill ring \e$B$X\e(B (C-y \e$B$GE=$j$D$1\e(B)
+* \e$B%?%$%H%k$,$_$D$+$i$J$+$C$?$H$-$O%U%!%$%kL>\e(B
+[\e$BL>",\e(B] \e$B"*\e(B \e$B%U%!%$%kL>$r\e(B kill ring \e$B$X\e(B
+
+\e$B"!\e(B \e$BFCJL\e(B
+
+[menu \e$B99?7\e(B] \e$B"*\e(B \e$B%a%K%e!<$NM=DjI=$J$I$r99?7\e(B
+[menu \e$BJT=8\e(B] \e$B"*\e(B \e$B%a%K%e!<$rJT=8\e(B
+[\e$BA4>C\e(B] \e$B"*\e(B howm-mode \e$B$J%P%C%U%!$r$9$Y$F>C$9\e(B (\e$BL$J]B8$O=|$/\e(B)
+[\e$B?lJb\e(B] \e$B"*\e(B \e$B%i%s%@%`$K%j%s%/$r$?$I$C$F<+F01\Mw\e(B. C-g \e$B$GDd;_\e(B.
+
+= <<< %\e$B9bB.2=$K$D$$$F\e(B%
+
+\e$B%a%b$,A}$($F8!:w$,CY$/$J$C$F$-$?$i\e(B, \e$B9bB.2=$N$?$a$N%*%W%7%g%s@_Dj$r\e(B
+\e$B8!F$$7$F$/$@$5$$\e(B.
+
+\e$B:G$b8z2L$,Bg$-$$$N$O\e(B, \e$B8!:w$K\e(B grep \e$B%3%^%s%I$r;H$&$3$H$G$9\e(B.
+Unix \e$B7O$NI8=`E*$J4D6-$J$i\e(B, \e$B$?$$$F$$LdBj$J$/;H$($k$G$7$g$&\e(B.
+\e$B$=$l0J30$N4D6-$G$O\e(B, \e$B2?$i$+$N=`Hw$,I,MW$K$J$k$+$b$7$l$^$;$s\e(B.
+
+\e$B3F4D6-$G6qBNE*$K$I$&$9$l$P$h$$$+$O!D>pJs$r$*BT$A$7$F$$$^$9\e(B.
+\e$B!&\e(Bhttp://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Windows
+\e$B!&\e(Bhttp://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?LinuxZaurus
+
+grep \e$B$N;HMQ$r@_Dj$9$k$K$O\e(B,
+  M-x customize-variable howm-view-use-grep
+\e$B$HF~NO$9$k$+\e(B, \e$B=i4|2=%U%!%$%k\e(B(.emacs \e$BEy\e(B)\e$B$KD>@\\e(B
+  (setq howm-view-use-grep t)
+\e$B$H=q$/$+\e(B, \e$B$"$k$$$O:#$3$N2hLL$G!V\e(B%\"!\e$B!W$r2!$7$F$/$@$5$$\e(B.\" %| %eval%(customize-variable 'howm-view-use-grep) %|
+
+\e$B$=$NB>$N%*%W%7%g%s$K$D$$$F$O\e(B,
+[\e$B@_Dj\e(B] \e$B$+$i!V\e(BHowm Efficiency\e$B!W$N9`L\$r;2>H$/$@$5$$\e(B.
+
+
+= <<< %\e$B%a%K%e!<$NJT=8$K$D$$$F\e(B%
+[menu \e$BJT=8\e(B] \e$B$G$3$N%a%K%e!<$rJT=8\e(B
+[menu \e$B99?7\e(B] \e$B$G$3$N%a%K%e!<$r99?7\e(B
+--------------------------------------------------------
+
+\e$B%a%K%e!<$N=q$-J}\e(B
+([menu \e$BJT=8\e(B] \e$B>e$G%j%?!<%s$rC!$-\e(B, \e$B85%U%!%$%k$rFI$s$G$/$@$5$$\e(B)
+
+\e$B"!\e(B \e$B4pK\\e(B
+\e$B8+$l$P$o$+$k$G$7$g$&$,\e(B,
+\e$B!&\e(B[\e$B!{!{\e(B] \e$B$H=q$$$?=j$,%\%?%s\e(B
+\e$B!&!s\e(Breminder \e$B$H\e(B(\e$BH>3Q$G\e(B)\e$B=q$$$?=j$,M=DjI=$H\e(B todo list
+\e$B!&!s\e(Brecent \e$B$H\e(B(\e$BH>3Q$G\e(B)\e$B=q$$$?=j$,\e(B, \e$B:G6a$N%a%b0lMw\e(B
+\e$B!&!s\e(Brandom \e$B$H\e(B(\e$BH>3Q$G\e(B)\e$B=q$$$?=j$,\e(B, \e$B%i%s%@%`$J%a%b0lMw\e(B
+\e$B$K$J$j$^$9\e(B.
+\e$B$I$3$K=q$$$F$b5!G=$7$^$9$+$i\e(B, \e$BJB$Y$+$($k$J$j$J$s$J$j\e(B, \e$B$*9%$-$K$I$&$>\e(B.
+\e$B$h$/;H$&%U%!%$%k$d\e(B goto link \e$B$b=q$$$F$*$1$PJXMx$+$b\e(B.
+(\e$BNc\e(B) file:///etc/services   >>> wiki
+
+\e$B"!\e(B \e$B%7%g!<%H%+%C%H\e(B
+%\"hoge\"[\e$B0lMw\e(B]
+\e$B",$3$&=q$$$F$*$/$H\e(B, \e$B!V\e(Bhoge[\e$B0lMw\e(B]\e$B!W$HI=<($5$l\e(B, \e$B%-!<\e(B h \e$B$G0lMw$r5/F0\e(B
+(\e$B@53N$K$O\e(B, (1) \e$BJD$8!V\e(B\"\e$B!W$X0\F0\e(B (2) \e$B<!$N2<@~$^$G?J$`\e(B (3) action-lock \e$BH/F0\e(B)
+%\"fuga%\" \e$B"+\e(B \e$B$3$s$J$U$&$K:G8e$K\e(B % \e$B$r$D$1$k$H\e(B, \e$B%-!<\e(B f \e$B$G$=$3$K%+!<%=%k0\F0\e(B
+
+\e$B"!\e(B lisper \e$B8~$1\e(B
+
+\e$B!&I=<(\e(B
+%here%howm-congrats-count  \e$B"+\e(B \e$BJQ?t\e(B howm-congrats-count \e$B$NCM$rKd$a9~$_\e(B
+%here%(howm-menu-search \"\e$B8!:w\e(B\")
+\e$B",\e(B(\e$B!D\e(B) \e$B$N7k2L\e(B(\e$B!V8!:w!W$N8!:w7k2L\e(B)\e$B$rKd$a9~$_\e(B
+\e$B"(\e(B \e$B$?$@$7\e(B, \e$B;H$&4X?t$OEPO?$,I,MW\e(B (\e$B$*$C$+$J$$$+$i\e(B)
+(setq howm-menu-allow (append '(foo bar) howm-menu-allow)) ;; foo \e$B$H\e(B bar \e$B$r5v2D\e(B
+
+\e$B!&F0:n\e(B
+S \e$B<0$r\e(B eval: %eval%(message (buffer-name))
+\e$B4X?t$r\e(B call-interactively: %call%find-file
+\e$B"(\e(B \e$B$$$:$l$b\e(B, \e$B%a%K%e!<$r8F$VA0$N%P%C%U%!$GI>2A$5$l$^$9\e(B
+
+\e$B"!\e(B \e$BIT2D;k\e(B
+\e$B!V!s\e(B|\e$B!W$H\e(B(\e$BH>3Q$G\e(B)\e$B=q$/$H\e(B, \e$B2D;k!&IT2D;k$r%H%0%k\e(B.
+\e$B$3$s$J$U$&$K\e(B \e$B"*\e(B \e$B8+$($k\e(B%|\e$B8+$($J$$\e(B%|\e$B2D;k\e(B%|\e$BIT2D;k!D9TKv$^$G\e(B
+(\e$B9TKv$,IT2D;k$@$H\e(B, \e$B2~9T$b>C$($^$9\e(B)
+
+\e$B"!\e(B \e$BJ#?t%a%K%e!<\e(B
+\e$B!V\e(B%\e$B!{!{\e(B%\e$B!W$X$N%j%s%/$O\e(B, \e$B!V!c!c!c\e(B %\e$B!{!{\e(B%\e$B!W$r%a%K%e!<%b!<%I$G3+$-$^$9\e(B: >>> %menu%
+\e$B?75,%a%K%e!<$rDI2C$7$?$$$H$-$O\e(B [[%menu%]] \e$B$NJ}$,JXMx$G$7$g$&\e(B (\e$B<+F0@8@.$9$k$N$G\e(B)
+\e$B;XDj%U%!%$%k$r%a%K%e!<%b!<%I$G3+$/\e(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 (file)
index 0000000..941d595
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (file)
index 0000000..97d7112
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (file)
index 0000000..466adaf
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 <this file>
+
+(defvar howm-mkmenu-rules
+  '(
+    ;; (<var> <src> [<src-coding> <dest-coding>]) ==> <var>.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 (file)
index 0000000..82e5815
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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, <n>-th one is used when you type C-u <n> M-x howm-create.
+If it is a function, it is called to get template string with the argument <n>.")
+(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 <http://pc8.2ch.net/test/read.cgi/unix/1077881095/823>.
+;; 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 (file)
index 0000000..32e975c
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (file)
index 0000000..08749f9
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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.
+<priority of done reminder> = <this value> + <days from specified date>"
+  :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 (file)
index 0000000..09d8a7c
--- /dev/null
@@ -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 (file)
index 0000000..d6ba815
--- /dev/null
@@ -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 (file)
index 0000000..2d94829
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (file)
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 <khi@users.sourceforge.jp>
+;;; $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 (file)
index 0000000..3b8bdc7
--- /dev/null
@@ -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 <khi@users.sourceforge.jp>
+;;; $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 (executable)
index 0000000..4fbbae7
--- /dev/null
@@ -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 (file)
index 0000000..79fa0d5
--- /dev/null
@@ -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 (file)
index 0000000..e8b616f
--- /dev/null
@@ -0,0 +1,26 @@
+2011-01-01  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.txt: support new commands.
+
+2010-12-31  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.txt: use %reminder instead of %schedule and %todo.
+
+2005-12-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * Makefile.am (EXTRA_DIST): no need to install 0000-00-00-000000.howm.
+
+2005-11-19  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.howm: add "about acceleration".
+       thx > window16 san
+       http://d.hatena.ne.jp/window16/20051118
+
+2005-05-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.howm: added [Preference], %recent, %random
+
+2005-05-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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 (file)
index 0000000..c37714d
--- /dev/null
@@ -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 (file)
index 0000000..fbd182d
--- /dev/null
@@ -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 (executable)
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 <pinard@iro.umontreal.ca>, 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 <bug-automake@gnu.org>."
+    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 (executable)
index 0000000..ef7e16f
--- /dev/null
@@ -0,0 +1,161 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2006-05-11.19
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+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 <bug-automake@gnu.org>."
+
+# 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 (file)
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 <khi@users.sourceforge.jp>
+;;; $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 <this 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 (file)
index 0000000..f1b010c
--- /dev/null
@@ -0,0 +1,33 @@
+2008-05-14  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * dot.emacs: set inhibit-startup-message
+
+2006-11-21  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * dot.emacs: set howm-history-file
+       thx > http://pc8.2ch.net/test/read.cgi/unix/1141892764/193-194n
+
+2005-12-09  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 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  <khi@users.sourceforge.jp>
+
+       * dot.emacs: howm-history-limit is set to be nil.
+       Otherwise, my private ~/.howm-history is shrunk.
+
+2005-05-11  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.howm: added [Preference], %recent, %random
+
+2005-05-06  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * 0000-00-00-000000.howm: bind R = [Update Menu]
+
+2005-02-25  HIRAOKA Kazuyuki  <khi@users.sourceforge.jp>
+
+       * bug-report.txt: slightly modified expressions
+
diff --git a/sample/Makefile.am b/sample/Makefile.am
new file mode 100644 (file)
index 0000000..bb1cb25
--- /dev/null
@@ -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 (file)
index 0000000..27df011
--- /dev/null
@@ -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 (file)
index 0000000..9d04319
--- /dev/null
@@ -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 (file)
index 0000000..b5e9b46
--- /dev/null
@@ -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 (file)
index 0000000..bf9f820
--- /dev/null
@@ -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 (file)
index 0000000..089f66b
--- /dev/null
@@ -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 (file)
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