Update tiny tools
authorJoerg Jaspert <joerg.jaspert.sp@dlh.de>
Mon, 22 Jan 2018 17:26:07 +0000 (18:26 +0100)
committerJoerg Jaspert <joerg.jaspert.sp@dlh.de>
Mon, 22 Jan 2018 17:26:07 +0000 (18:26 +0100)
54 files changed:
.emacs.d/elisp/tiny/load-path.el
.emacs.d/elisp/tiny/tiny-admin-util.el
.emacs.d/elisp/tiny/tinyadvice.el
.emacs.d/elisp/tiny/tinybookmark.el
.emacs.d/elisp/tiny/tinybuffer.el
.emacs.d/elisp/tiny/tinycache.el
.emacs.d/elisp/tiny/tinycomment.el
.emacs.d/elisp/tiny/tinycompile.el
.emacs.d/elisp/tiny/tinycygwin.el
.emacs.d/elisp/tiny/tinydebian.el
.emacs.d/elisp/tiny/tinydiff.el
.emacs.d/elisp/tiny/tinydired.el
.emacs.d/elisp/tiny/tinyeat.el
.emacs.d/elisp/tiny/tinyef.el
.emacs.d/elisp/tiny/tinygnus.el
.emacs.d/elisp/tiny/tinyhotlist.el
.emacs.d/elisp/tiny/tinyigrep.el
.emacs.d/elisp/tiny/tinyindent.el
.emacs.d/elisp/tiny/tinyirc.el
.emacs.d/elisp/tiny/tinylib.el
.emacs.d/elisp/tiny/tinyliba.el
.emacs.d/elisp/tiny/tinylibb.el
.emacs.d/elisp/tiny/tinylibenv.el
.emacs.d/elisp/tiny/tinylibid.el
.emacs.d/elisp/tiny/tinylibm.el
.emacs.d/elisp/tiny/tinylibmail.el
.emacs.d/elisp/tiny/tinylibmenu.el
.emacs.d/elisp/tiny/tinylibo.el
.emacs.d/elisp/tiny/tinylibt.el
.emacs.d/elisp/tiny/tinylibw.el
.emacs.d/elisp/tiny/tinyliby.el
.emacs.d/elisp/tiny/tinylisp.el
.emacs.d/elisp/tiny/tinyload.el
.emacs.d/elisp/tiny/tinylock.el
.emacs.d/elisp/tiny/tinylpr.el
.emacs.d/elisp/tiny/tinymail.el
.emacs.d/elisp/tiny/tinymailbox.el
.emacs.d/elisp/tiny/tinymy.el
.emacs.d/elisp/tiny/tinynbr.el
.emacs.d/elisp/tiny/tinypad.el
.emacs.d/elisp/tiny/tinypage.el
.emacs.d/elisp/tiny/tinypair.el
.emacs.d/elisp/tiny/tinypath.el
.emacs.d/elisp/tiny/tinyperl.el
.emacs.d/elisp/tiny/tinyprocmail.el
.emacs.d/elisp/tiny/tinyreplace.el
.emacs.d/elisp/tiny/tinyscroll.el
.emacs.d/elisp/tiny/tinysearch.el
.emacs.d/elisp/tiny/tinytab.el
.emacs.d/elisp/tiny/tinytag.el
.emacs.d/elisp/tiny/tinytf.el
.emacs.d/elisp/tiny/tinyurl.el
.emacs.d/elisp/tiny/tinyvc.el
.emacs.d/elisp/tiny/tinyxreg.el

index 396bd9a..9555039 100644 (file)
@@ -5,7 +5,7 @@
 ;;
 ;;  File id
 ;;
-;;      Copyright (C) 1997-2012 Jari Aalto
+;;      Copyright (C) 1997-2016 Jari Aalto
 ;;
 ;;      This program is free software; you can redistribute it and/or
 ;;      modify it under the terms of the GNU General Public License as
@@ -34,7 +34,9 @@
 
 ;;; Code:
 
-(require 'cl)
+(eval-when-compile
+  (require 'cl))
+
 (setq debug-on-error nil) ;; Must be like this in batch byte compile
 
 (autoload 'ti::package-autoload-create-on-file            "tinylib")
index 04d4132..45a59e1 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tiny-admin-util.el --- Tiny Tools administrative utilities for maintainer
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    2001-2012 Jari Aalto
+;; Copyright (C)    2001-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -49,7 +51,7 @@
 ;;     Autoload files
 ;;
 ;;      If *loaddef* files were not included in the package or if they were
-;;      mistakenly deleted. Use following functions
+;;      mistakenly deleted. Use following functions:
 ;;
 ;;          tiny-setup-generate-loaddefs-dir
 ;;          tiny-setup-generate-loaddefs-recursive
@@ -69,7 +71,7 @@
 ;;
 ;;      To check how much time each file load would take, see function
 ;;      `tiny-setup-test-load-time-libraries'. Here are results as of
-;;      2001-03-18 running Win9x/512Meg/400Mhz, Emacs 20.7, non-compiled
+;;      2001-03-18 running Win9x/512M/400Mhz, Emacs 20.7, non-compiled
 ;;      files:
 ;;
 ;;          Timing tinyliba,  took     2.025000 secs (autoloads)
@@ -88,8 +90,8 @@
 ;;; Code:
 
 (eval-when-compile
-  (load "cl-seq")
-  (require 'cl))
+;;  (load "cl-seq")
+  (require 'cl-lib))
 
 (require 'tinylib)
 
@@ -135,16 +137,15 @@ Following variables are set during BODY:
 
 `dir'      Directrory name
 `dir-list' All directories under `dir'."
-  (`
-   (flet ((recurse
-           (dir)
-           (let* ((dir-list (tiny-setup-directory-list dir)))
-             (,@ body)
-             (when dir-list
-               (dolist (elt dir-list)
-                 (unless (string-match tiny-setup-:ignore-dir-regexp elt)
-                   (recurse elt)))))))
-     (recurse (, directory)))))
+  `(cl-flet ((recurse
+             (dir)
+             (let ((dir-list (tiny-setup-directory-list dir)))
+               (,@ body)
+               (when dir-list
+                 (dolist (elt dir-list)
+                   (unless (string-match tiny-setup-:ignore-dir-regexp elt)
+                     (recurse elt)))))))
+     (recurse (, directory))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -265,7 +266,6 @@ E.g. if you want to calculate days; you'd do
         (load pkg))
       (display-buffer "*Messages*"))))
 
-
 ;;; ----------------------------------------------------------------------
 ;;; FIXME: remove
 ;;; (tiny-setup-autoload-build-functions "~/elisp/tiny/lisp/tiny")
@@ -425,10 +425,10 @@ t or nil if file is to be compiled."
 Optional FUNCTION is passed one argument FILE, and it should return
 t or nil if file is to be compiled."
   (tiny-setup-directory-recursive-macro
-   root
-   (message "TinySetup: compiling directory %s" dir)
-   (tiny-setup-compile-directory
-    dir function)))
+      root
+    (message "TinySetup: compiling directory %s" dir)
+    (tiny-setup-compile-directory
+     dir function)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
index c656944..fc64fc6 100644 (file)
@@ -1,8 +1,10 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyadvice.el --- Collection of adviced functions
 
 ;; This file is not part of Emacs
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari aalto
@@ -518,13 +520,13 @@ Return:
                           ad-advised-functions )))
     ;; This makes the call to 'ti::' after this if, unefective
     (setq func-or-list nil)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         ;; more accurate: "No advice found..." but since we deal with
         ;; tinyadvice ones only the following is better.
         (message "\
 TinyAdvice: Sorry, the function is not advice controlled by TinyAdvice.")))
   (ti::advice-control
-   func-or-list tinyadvice-:advice-re disable (interactive-p)))
+   func-or-list tinyadvice-:advice-re disable (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -532,7 +534,7 @@ TinyAdvice: Sorry, the function is not advice controlled by TinyAdvice.")))
   "Acivate all TinyAdvice advices. Use extra argument to DISABLE all. VERB."
   (interactive "P")
   (or verb
-      (setq verb (interactive-p)))
+      (setq verb (called-interactively-p 'interactive)))
   (let* (
          (re    tinyadvice-:advice-re)
          (doit  t)
@@ -620,7 +622,7 @@ does not create new buffer, but jumps to existing *shell* buffer."
   (let* (name
          prev-name)
     (when (and
-           (interactive-p)
+           (called-interactively-p 'interactive)
            (comint-check-proc "*shell*")
            (setq
             name
@@ -856,7 +858,7 @@ names are allowed."
   "Offer completion."
   (interactive (list (tinyadvice-read-envvar "Get environment variable: " t)))
   ad-do-it
-  (if (and (interactive-p)
+  (if (and (called-interactively-p 'interactive)
            ad-return-value)
       (message "%s" ad-return-value)
     ad-return-value))
@@ -874,7 +876,7 @@ names are allowed."
               (format "Set %s to value: " var)
               (or (getenv var) ""))))))
   ad-do-it
-  (if (and (interactive-p) value)
+  (if (and (called-interactively-p 'interactive) value)
       (message "%s" value)
     value))
 
@@ -988,7 +990,7 @@ Confirm overwrite:
         (setq pass
               (ti::string-match-case tinyadvice-:write-file-no-confirm fn)))
 
-    (if (or (not (interactive-p))   ;only when user call it, do checks
+    (if (or (not (called-interactively-p 'interactive))   ;only when user call it, do checks
             (not (file-exists-p fn))
             pass
             (y-or-n-p (format "%s already exists; overwrite it? " fn)))
@@ -1006,7 +1008,7 @@ Confirm overwrite:
     (if (stringp fn)
         (setq pass
               (ti::string-match-case tinyadvice-:write-file-no-confirm fn)))
-    (if (or (not (interactive-p))
+    (if (or (not (called-interactively-p 'interactive))
             (not (file-exists-p fn))
             pass
             (y-or-n-p (format "%s already exists; overwrite it? " fn)))
@@ -1124,7 +1126,7 @@ Confirm overwrite:
 (defadvice occur  (before tinyadvice act)
   "Iinteractive change: ask if user want the occur to start from `point-min'.
 also Possibly unfold/un-outline the code."
-  (when (and (interactive-p)
+  (when (and (called-interactively-p 'interactive)
              (not (eq (point) (point-min)))
              (y-or-n-p "TinyAdvice: Start occur from point-min? "))
     (if (and (or (and (featurep 'folding)
@@ -1146,7 +1148,7 @@ also Possibly unfold/un-outline the code."
 (defadvice exchange-point-and-mark (around tinyadvice-pop-if-prefix dis)
   "If given prefix, call `set-mark-command' to pop previous mark positions."
   (if (and current-prefix-arg
-           (interactive-p))
+           (called-interactively-p 'interactive))
       (call-interactively 'set-mark-command))
   ad-do-it)
 
@@ -1228,7 +1230,7 @@ References:
    if non-nil, suggest `find-file' for non-existing buffers"
   (interactive "Bbuffer name: ")
   (let ((buffer-name (ad-get-arg 0)))
-    (if (or (not (interactive-p))       ;user didn't call us
+    (if (or (not (called-interactively-p 'interactive))       ;user didn't call us
             (get-buffer buffer-name))   ;it exists
         ad-do-it
       (cond
@@ -1269,7 +1271,7 @@ References:
 ;;;
 (defadvice list-buffers  (after tinyadvice dis)
   "Select buffer list after display."
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (select-window (get-buffer-window "*Buffer List*"))))
 
 ;;; ........................................................... &other ...
@@ -1280,14 +1282,13 @@ References:
  (function
   (lambda (x)
     (eval
-     (`
-      (defadvice (, x) (around tinyadvice-kill-buffer act)
+     `(defadvice (, x) (around tinyadvice-kill-buffer act)
         "Kill the buffer if there is no process."
         (condition-case error
             ad-do-it
           (error
            (if (equal error '(error "Current buffer has no process"))
-               (kill-buffer (current-buffer))))))))))
+               (kill-buffer (current-buffer)))))))))
  '(term-copy-old-input
    term-send-input
    term-send-raw-string))
index 5ddd79d..56cc987 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinybookmark.el --- Keep file in organized sections
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
             the file. Uses X-popup [imenu] for showing those book marks and
             moving between them.")
 
-(defvar tinybookmark--version-time "2010.1119.1452"
+(defvar tinybookmark--version-time "2016.1029.0704"
   "Last modified time.")
 
 ;;}}}
@@ -583,7 +585,7 @@ References:
 ;;;  - Well, I usually add book mark section to my elisp code and while
 ;;;    I did them by hand I added ';;; ' comment at the beginning of
 ;;;    line and fed 70  continuous characters with ESC 70 '-'after
-;;;    comment  --> totals 4 + 70 chars :-/
+;;;    comment this becomes total of 4 + 70 characters.
 ;;;
 ;;;  - The idea of this calculation is that when you hit separator,
 ;;;    like this: COMMENT-SPACE-70_CHAR_SEPARATOR, this will calculate
@@ -612,8 +614,8 @@ References:
      ((string-match "lisp" mode)
       74)
      (t
-      (if (string-match "[ \t]+" cs)  ;does it already have space "# "
-          (+ len (length cs)) ;no it does not "#", add room for it.
+      (if (string-match "[ \t]+" cs)  ;does it already have space "# "
+          (+ len (length cs))         ;; no it does not "#", add room for it.
         (1+ (+ len (length cs))))))))
 
 ;;; ----------------------------------------------------------------------
@@ -936,7 +938,7 @@ Return:
 ;;;###autoload
 (defun tinybookmark-keyboard-parse ()
   "Reparse book marks."
-  (tinybookmark-mouse-parse nil (interactive-p)))
+  (tinybookmark-mouse-parse nil (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -996,7 +998,7 @@ Optional ARG rebuilds cache."
                                   tinybookmark--cache nil 'match)))
        (list ans
              current-prefix-arg))))
-  (unless (interactive-p)
+  (unless (called-interactively-p 'interactive)
     (tinybookmark-cache-regenerate arg))
   (let* ((elt (assoc bookmark tinybookmark--cache)))
     (if (not elt)
index a66f98b..1fae330 100644 (file)
@@ -1,6 +1,8 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinybuffer.el --- Change buffers in current window.
 
-;; Copyright (C) 1996-2012 Jari Aalto
+;; Copyright (C) 1996-2016 Jari Aalto
 
 ;; Author:      Jari Aalto
 ;; Maintainer:  Jari Aalto
index 978e623..7c9c5c7 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -696,7 +696,7 @@ the cache is flushed with \\[tinycache-flush]."
   "Kill all cached files by stepping through all compilation buffers. VERB."
   (interactive)
   (let ((count  0)
-       (verb   (or verb (interactive-p))))
+       (verb   (or verb (called-interactively-p 'interactive))))
     (tinycache-map-over-buffers nil
                                 (when (buffer-live-p  (get-buffer BuffeR))
                                   (kill-buffer BuffeR)
index a5d6aca..b89327f 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinycomment.el --- Smart comment setting utility
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C) 1994-2012 Jari Aalto
+;; Copyright (C) 1994-2016 Jari Aalto
 ;; Keywords:     extensions
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
index 0353174..07117a0 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinycompile.el --- Compile buffer extras. Minor mode.
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -85,7 +87,7 @@
 
 ;;; ......................................................... &require ...
 
-(require 'tinyliba)
+(require 'tinylibm)
 
 (eval-when-compile
   (require 'cl)
@@ -162,6 +164,7 @@ Prefix key to access the minor mode is defined in
 \\{tinycompile--mode-prefix-map}"
 
    "TinyCompile"
+
    (progn
      (if (and tinycompile-mode verb
               (not (string-match "compil" (symbol-name major-mode))))
index 49948ee..3a68b84 100644 (file)
@@ -1,8 +1,10 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinycygwin.el --- Cygwin utilities (bug reports, administrative tasks).
 
 ;;{{{ Id
 
-;; Copyright (C)    2004-2012 Jari Aalto
+;; Copyright (C)    2004-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -685,13 +687,6 @@ environment."
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defun tinycygwin-insert-file (file)
-  "INsert FILE literally at point."
-  (tinycygwin-clean-system-with
-   (insert-file-contents-literally file)))
-
-;;; ----------------------------------------------------------------------
-;;;
 (defsubst tinycygwin-mail-attachment-tag (string)
   "Return attachment tag for STRING."
   (format "[ATTACHMENT: %s]"
@@ -1233,6 +1228,13 @@ References:
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(defun tinycygwin-insert-file (file)
+  "Insert FILE literally at point."
+  (tinycygwin-clean-system-with
+   (insert-file-contents-literally file)))
+
+;;; ----------------------------------------------------------------------
+;;;
 (defun tinycygwin-email-choice-list (&optional package)
   "Return list of Email choices for for user with `completing-read'."
   (let ((list
@@ -2686,7 +2688,7 @@ Notice that the values may be missing if no such fields were found."
          version
          release
          ret)
-    (flet ((push-ret (tag value function)
+    (cl-flet ((push-ret (tag value function)
                      (when (and value
                                 (setq value (funcall function value)))
                        (push (list tag value) ret))))
@@ -3579,7 +3581,7 @@ INFO is alist of package's attributes. FILE-LIST are files to attach."
           (tinycygwin-bug-report-ask-type))))))
   (tinycygwin-debug
    (message "TinyCygwin: mail-mail info %s" (prin1-to-string info)))
-  (let ((error (unless (interactive-p)
+  (let ((error (unless (called-interactively-p 'interactive)
                  (tinycygwin-smtp-setup-error))))
     (unless error
       (tinycygwin-debug
index 65cfa86..22bfdab 100644 (file)
@@ -1,8 +1,10 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinydebian.el --- Debian, Ubuntu, Emacs, GNU Bug Tracking Utilities
 
 ;;{{{ Id
 
-;; Copyright (C)    2001-2012 Jari Aalto
+;; Copyright (C)    2001-2016 Jari Aalto
 ;; Keywords:        extensionss
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 ;;
 ;;      o   Colorize /var/log files like messages, syslog etc.
 ;;      o   Access important Debian developer documents (FAQ, WNPP)
-;;      o   Query Debian WWW information: package page, PTS page,
+;;      o   Query Debian WWW information: package page, QA page,
 ;;          package bugs page
 ;;      o   System information: wnpp-alert(1) listing to show what
-;;          packages have problems and which as suspect for removal
-;;          (not maintained).
+;;          packages have problems and which as suspect for removal.
 ;;
 ;;      BTS utilities in Gnus *Summary* (and M-x mail, message-mode)
 ;;
 
 ;;{{{ setup: libraries
 
-(defconst tinydebian--version-time "2012.0419.1745"
+(defconst tinydebian--version-time "2016.1116.0405"
   "Last edited time.")
 
 (require 'tinylibm)
 (autoload 'mail-header-narrow-to-field   "mail-parse")
 
 (eval-and-compile
+  (require 'cl-lib)
   ;;  Forward declarations to quiet byte compiler.
   (defvar tinydebian--mail-mode-map)
   (defvar gnus-original-article-buffer)
@@ -527,21 +529,19 @@ fixed
     Currently, these are critical, grave and serious.")
 
 (defvar tinydebian--removal-keyword-list
-  '(
-    "abandoned upstream"                ; Upstream no longer developing it
+  '("abandoned upstream"                ; Upstream no longer developing it
     "buggy"
-    "dead upstream"                     ; No upstream at all an more
+    "dead upstream"                     ; No upstream at all any more
     "FTBFS"                             ; Fails to build from source
-    "non-free"                         ; License problem (DFSG)
+    "non-free"                          ; License problem (DFSG)
     "old"
     "orphaned (no maintainer)"
     "other alternatives"
     "rc-buggy"
     "requested by upstream"             ; Upstream has requested removal
     "transitional pkg"
-    "unredistributable"                        ; Incompatible Licenses (SSL + GPL...)
-    "unmaintained"
-    )
+    "unredistributable"                 ; Incompatible Licenses (SSL + GPL...)
+    "unmaintained")
   "*List of PAckage removal keywords.
 See http://wiki.debian.org/ftpmaster_Removals")
 
@@ -647,19 +647,20 @@ you are trying to report a bug in an existing package)
 1 p    ITP, `Intent To Package'. Please submit a package description
        along with copyright and URL in such a report.
 
-2 o    The package has been 'Orphaned'. It needs a new maintainer as soon as
-       possible.
+2 o    The package has been 'Orphaned'. It needs a new maintainer
+       as soon as possible.
 
-3 a    RFA, this is a `Request for Adoption'. Due to lack of time, resources,
-       interest or something similar, the current maintainer is asking for
-       someone else to maintain this package. He/she will maintain it in the
-       meantime, but perhaps not in the best possible way. In short: the
+3 a    RFA, this is a `Request for Adoption'. Due to lack of time,
+       resources, interest or something similar, the current
+       maintainer is asking for someone else to maintain this
+       package. He/she will maintain it in the meantime, but
+       perhaps not in the best possible way. In short: the
        package needs a new maintainer.
 
-4 n    RFP, this is a `Request For Package'. You have found an interesting piece of
-       software and would like someone else to maintain it for Debian. Please
-       submit a package description along with copyright and URL in such a
-       report.
+4 n    RFP, this is a `Request For Package'. You have found an
+       interesting piece of software and would like someone else
+       to maintain it for Debian. Please submit a package
+       description along with copyright and URL in such a report.
 
 q      Quit menu.
 ")
@@ -1046,6 +1047,7 @@ Mode description:
      ["Send BTS ITA: intent to adopt"      tinydebian-bts-mail-type-ita    t]
      ["Send BTS ITN: intent to NMU"        tinydebian-bts-mail-type-it-nmu t]
      ["Send BTS ITP: reponse to RFP"       tinydebian-bts-mail-type-itp    t]
+     ["Send BTS ITS: reponse to sponsor"   tinydebian-bts-mail-type-its    t]
      ["Send BTS RFA: request for adopt"    tinydebian-bts-mail-type-rfa    t]
      ["Send BTS RFH: request for help"     tinydebian-bts-mail-type-rfh    t]
      ["Send BTS RFP/ITP: request for packege" tinydebian-bts-mail-type-rfp    t]
@@ -1146,6 +1148,7 @@ Mode description:
      (define-key map  "-r" 'tinydebian-bts-mail-type-reply)
 ;;     (define-key map  "-R" 'tinydebian-bts-mail-type-remove)
      (define-key map  "-s" 'tinydebian-bts-mail-type-rfs)
+     (define-key map  "-S" 'tinydebian-bts-mail-type-its)
 
      (define-key map  "mi" 'tinydebian-bts-mail-message-info)
 
@@ -1197,8 +1200,8 @@ Mode description:
      (define-key map  "cn"  'tinydebian-bts-mail-ctrl-found)
      (define-key map  "cN"  'tinydebian-bts-mail-ctrl-notfound)
      (define-key map  "co"  'tinydebian-bts-mail-ctrl-reopen)
-     (define-key map  "cr"  'tinydebian-bts-mail-ctrl-reassign)
-     (define-key map  "cR"  'tinydebian-bts-mail-ctrl-retitle)
+     (define-key map  "cr"  'tinydebian-bts-mail-ctrl-retitle)
+     (define-key map  "cR"  'tinydebian-bts-mail-ctrl-reassign)
      (define-key map  "\C-r" 'tinydebian-bts-mail-ctrl-remove-package)
      (define-key map  "cs"  'tinydebian-bts-mail-ctrl-severity)
      (define-key map  "ct"  'tinydebian-bts-mail-ctrl-tags)
@@ -1287,7 +1290,7 @@ Run also `tinydebian-mail-mode-debian-default-keybindings' in all mail buffer.
 See variables:
    `tinydebian--install-buffer-file-name-regexp'
    `tinydebian--install-gnus-newsgroup-name-regexp'."
-  (flet ((search (regexp)
+  (cl-flet ((search (regexp)
                  (save-excursion
                    (goto-char (point-min))
                    (re-search-forward regexp nil t))))
@@ -1317,10 +1320,10 @@ See variables:
                      "\\|Closes +#[0-9][0-9][0-9][0-9][0-9][0-9]"))
             (setq doit t)))
           (cond
-          (uninstall
-           (turn-off-tinydebian-bts-mode))
-          (doit
-           (turn-on-tinydebian-bts-mode))))))))
+           (uninstall
+            (turn-off-tinydebian-bts-mode))
+           (doit
+            (turn-on-tinydebian-bts-mode))))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -1369,11 +1372,24 @@ See variables:
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(put 'tinydebian-with-url-page-type-macro 'edebug-form-spec '(body))
+(put 'tinydebian-with-url-page-type-macro 'lisp-indent-function 1)
+(defmacro tinydebian-with-url-page-type-macro (page-type &rest body)
+  "Retrieve PAGE-TYPE from `tinydebian--debian-url-page-alist' and run BODY.
+  Variable `page'is bound to the retrieved value.
+  Signal error if PAGE-TYPE is not found."
+  `(let ((page (assoc ,page-type tinydebian--debian-url-page-alist)))
+     (unless page
+       (error "TinyDebian: unknown page-typpe `%s'" ,page-type))
+     ,@body))
+
+;;; ----------------------------------------------------------------------
+;;;
 (put 'tinydebian-with-gnus-article-buffer 'lisp-indent-function 1)
 (put 'tinydebian-with-gnus-article-buffer 'edebug-form-spec '(body))
 (defmacro tinydebian-with-gnus-article-buffer (&optional nbr &rest body)
   "In article NBR, run BODY. Defaults to article at *Summary* buffer."
-  (let ((buffer (gensym "buffer-")))
+  (let ((buffer (cl-gensym "buffer-")))
     `(save-window-excursion
        (gnus-summary-select-article 'all nil 'pseudo ,nbr)
        (let ((,buffer (get-buffer gnus-original-article-buffer)))
@@ -1397,6 +1413,12 @@ See variables:
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(defsubst tinydebian-bug-nbr-search ()
+  "Call hook `tinydebian--find-bug-nbr-hook' until value returned."
+  (run-hook-with-args-until-success 'tinydebian--find-bug-nbr-hook))
+
+;;; ----------------------------------------------------------------------
+;;;
 (defsubst tinydebian-bug-nbr-at-current-point ()
   "Read bug number from current point."
   (or (tinydebian-bug-nbr-at-current-point-hash)
@@ -1408,9 +1430,9 @@ See variables:
   "Read bug number NNNNNN from STRING."
   (when (stringp string)
     (if (or (string-match
-            "\\(?:[^0-9]+\\|^\\)\\([0-9][0-9][0-9][0-9][0-9]\\)$"
-            string)
-           (string-match "#\\([0-9][0-9]+\\)" string))
+             "\\(?:[^0-9]+\\|^\\)\\([0-9][0-9][0-9][0-9][0-9]\\)$"
+             string)
+            (string-match "#\\([0-9][0-9]+\\)" string))
         (match-string 1 string))))
 
 ;;; ----------------------------------------------------------------------
@@ -1690,17 +1712,24 @@ String is anything that is attached to
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defsubst tinydebian-bts-bug-number-trim (str)
+(defsubst tinydebian-bts-bug-number-pure-p (string)
+  "Check that STRING looks like a pure number."
+  (and (stringp string)
+       (string-match "^[0-9][0-9]+$" string)))
+
+;;; ----------------------------------------------------------------------
+;;;
+(defsubst tinydebian-bts-bug-number-trim (string)
   "Remove whitespace and #-hash signs.
 An example: '   #12345   ' => 12345."
-  (if (stringp str)
+  (if (stringp string)
       (replace-regexp-in-string
        "^[ \t\r\n#]#+"
        ""
        (replace-regexp-in-string
         "[ \t\r\n]+$"
         ""
-        str))))
+        string))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -1732,28 +1761,71 @@ Return as '(bug) suitable for interactive"
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(defsubst tinydebian-read-line ()
+  "Return line."
+  (buffer-substring
+   (line-beginning-position)
+   (line-end-position)))
+
+;;; ----------------------------------------------------------------------
+;;;
+(defun tinydebian-read-thing-near-point-any ()
+  "Read word-like thing near point."
+  (let ((re "[ \t]*\\([a-zA-Z0-9@<][a-zA-Z0-9@.>+-]+\\)")
+        beg
+        str)
+    (save-excursion
+      (unless (and (member (char-before) '(?\ ?\r ?\n ?\t))
+                   (looking-at re))
+        (when (re-search-backward "\\(^\\|[ \t([]\\)[a-z0-9<][a-z0-9]" nil t)
+          (unless (eq (point) (line-beginning-position))
+            (forward-char 1))))
+      (when (looking-at re)
+        (setq str (match-string 1))
+        (replace-regexp-in-string "[<>]" "" str)))))
+
+;;; ----------------------------------------------------------------------
+;;;
+(defun tinydebian-read-thing-near-point-email ()
+  "Read email thing near point."
+  (let ((str (tinydebian-read-thing-near-point-any)))
+    (cond
+     ((and str
+           (string-match "@" str))
+      str)
+     (t
+      (setq str (tinydebian-read-line))
+      (if (string-match "[a-z.-]+@[a-z.-]+" str)
+          (match-string-no-properties 0 str))))))
+
+;;; ----------------------------------------------------------------------
+;;;
 (defun tinydebian-debian-bug-bts-type-p ()
-  "Check if buffer is for Emacs BTS."
-  (save-excursion
-    (goto-char (point-min))
-    (when (or (re-search-forward
-               "\\(http://bugs.debian[^<> \t\r\n]+\\)" nil t)
-              (re-search-forward
-               (format "[0-9]+@%s" tinydebian--debian-bts-email-address) nil t)
-              (re-search-forward
-               (concat
-                tinydebian--list-email-address
-                "\\|"
-                "debian\\.org\\>") nil t))
-      (let ((str (or (match-string 1)
-                     (match-string 0))))
-        (when (and str
-                   ;; Remove MIME from
-                   ;; http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D515275
-                   (string-match "\\(http.*=\\)3D\\(.+\\)" str))
-          (setq str (concat (match-string 1 str)
-                            (match-string 2 str))))
-        str))))
+  "Check if buffer is for Emacs BTS.
+Return string that was match to determine the type."
+  (let (str)
+    (save-excursion
+      (goto-char (point-min))
+      (cond
+       ((re-search-forward
+         "\\(http://bugs.debian[^<> \t\r\n]+\\)" nil t)
+        (setq str (match-string 1)))
+       ((re-search-forward
+         (format "[0-9]+@%s" tinydebian--debian-bts-email-address) nil t)
+        (setq str (match-string 0)))
+       ((re-search-forward
+         (concat
+          tinydebian--list-email-address
+          "\\|"
+          "debian\\.org\\>") nil t)
+        (setq str (match-string 0))))
+      (when (and str
+                 ;; Remove MIME from
+                 ;; http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D515275
+                 (string-match "\\(http.*=\\)3D\\(.+\\)" str))
+        (setq str (concat (match-string 1 str)
+                          (match-string 2 str))))
+      str)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -1867,10 +1939,10 @@ Judging from optional BUFFER."
      ((tinydebian-emacs-bug-type-p)
       (tinydebian-emacs-bts-email-control))
      ((and (numberp info)
-          (> bug 600000))              ; Debian bug number around 2011-2012
+           (> info 600000))              ; Debian bug number around 2011-2012
       (tinydebian-bts-email-control))
      ((and (numberp info)
-          (< bug 30000))               ; GNU Emacs until 2040
+           (< info 30000))               ; GNU Emacs until 2040
       (tinydebian-gnu-bts-email-control))
      (t
       (tinydebian-bts-email-control)))))
@@ -2315,7 +2387,7 @@ This function needs network connection."
 Return:
   '(bug-number email)"
   (let ((email (regexp-quote tinydebian--emacs-bts-email-address))
-       bug)
+        bug)
     (cond
      ((re-search-forward (format
                           "\\(\\([0-9]+\\)@%s\\>\\)"
@@ -2332,14 +2404,14 @@ Return:
       (list (match-string-no-properties 2)
             (match-string-no-properties 1)))
      ((and (re-search-forward (format
-                              "control@%s"
-                              email)
-                             nil t)
-          ;; To: control@debbugs.gnu.org
-          ;; Subject: Bug#7665 retitle
-          (setq bug (tinydebian-bug-nbr-any)))
+                               "control@%s"
+                               email)
+                              nil t)
+           ;; To: control@debbugs.gnu.org
+           ;; Subject: Bug#7665 retitle
+           (setq bug (tinydebian-bug-nbr-any)))
       (list bug
-           (tinydebian-emacs-bts-email-compose bug)))
+            (tinydebian-emacs-bts-email-compose bug)))
      ((save-excursion
         (re-search-forward (concat
                             email
@@ -2559,7 +2631,7 @@ Return:
      (t
       (goto-char (point-min))
       (if (re-search-forward
-          "https?://\\(?:forge\\|bugs\\).mysql.com[^<> \t\r\n]+" nil t)
+           "https?://\\(?:forge\\|bugs\\).mysql.com[^<> \t\r\n]+" nil t)
           (match-string-no-properties 0))))))
 
 ;;; ----------------------------------------------------------------------
@@ -2594,7 +2666,7 @@ Return:
   (let ((str (tinydebian-current-line-string)))
     (goto-char (point-min))
     (if (re-search-forward
-        ;;  View Issue:  <URL>
+         ;;  View Issue:  <URL>
          "*\\(https?://.*github.com/[^<> \t\r\n]+\\)" nil t)
         (match-string-no-properties 1))))
 
@@ -2700,39 +2772,41 @@ The last choice os Debian."
 (defun tinydebian-bug-bts-type-determine ()
   "Check what BTS type is in use.
 Return: '(BTS-TYPE-STRING [BUG NUMBER | URL])."
-  (tinydebian-with-bug-context
-    (let (data)
-      (cond
-       ((setq data (tinydebian-freecode-bug-type-p))
-        (list "freecode" data))
-       ((setq data (tinydebian-perl-cpan-bug-type-p))
-        (list "perl-cpan" data))
-       ((setq data (tinydebian-savannah-bug-type-bts-p))
-        (list "savannah" data))
-       ((setq data (tinydebian-bug-gnu-emacs-bts-buffer-p))
-        (list "emacs" data))
-       ((setq data (tinydebian-bug-gnu-bts-buffer-p))
-        (list "gnu" data))
-       ((setq data (tinydebian-sourceforge-bug-type-p))
-        (list "sourceforge" data))
-       ((setq data (tinydebian-gnome-bug-type-p))
-        (list "gnome" data))
-       ((setq data (tinydebian-kde-bug-type-p))
-        (list "kde" data))
-       ((setq data (tinydebian-sourceware-bug-type-p))
-        (list "sourceware" data))
-       ((setq data (tinydebian-mysql-bug-type-p))
-        (list "mysql" data))
-       ((setq data (tinydebian-mercurial-bug-type-p))
-        (list "mercurial" data))
-       ((setq data (tinydebian-trac-bug-type-p))
-        (list "trac" data))
-       ((setq data (tinydebian-github-bug-type-p))
-        (list "github" data))
-       ((setq data (tinydebian-launchpad-bug-type-p))
-        (list "launchpad" data))
-       ((setq data (tinydebian-debian-bug-bts-type-p))
-        (list "debian" data))))))
+  (save-excursion
+    (tinydebian-with-bug-context
+      (let ((bug (tinydebian-bug-nbr-search))
+            data)
+        (cond
+         ((setq data (tinydebian-freecode-bug-type-p))
+          (list "freecode" data))
+         ((setq data (tinydebian-perl-cpan-bug-type-p))
+          (list "perl-cpan" data))
+         ((setq data (tinydebian-savannah-bug-type-bts-p))
+          (list "savannah" data))
+         ((setq data (tinydebian-bug-gnu-emacs-bts-buffer-p))
+          (list "emacs" data))
+         ((setq data (tinydebian-bug-gnu-bts-buffer-p))
+          (list "gnu" data))
+         ((setq data (tinydebian-sourceforge-bug-type-p))
+          (list "sourceforge" data))
+         ((setq data (tinydebian-gnome-bug-type-p))
+          (list "gnome" data))
+         ((setq data (tinydebian-kde-bug-type-p))
+          (list "kde" data))
+         ((setq data (tinydebian-sourceware-bug-type-p))
+          (list "sourceware" data))
+         ((setq data (tinydebian-mysql-bug-type-p))
+          (list "mysql" data))
+         ((setq data (tinydebian-mercurial-bug-type-p))
+          (list "mercurial" data))
+         ((setq data (tinydebian-trac-bug-type-p))
+          (list "trac" data))
+         ((setq data (tinydebian-github-bug-type-p))
+          (list "github" data))
+         ((setq data (tinydebian-launchpad-bug-type-p))
+          (list "launchpad" data))
+         ((setq data (tinydebian-debian-bug-bts-type-p))
+          (list "debian" bug)))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -2804,10 +2878,10 @@ Bug#NNNN: O: package -- description."
   (when (stringp str)
     (or (and (string-match "#\\([0-9]+\\)" str) ;; Bug#NNNN Debian
              (match-string 1 str))
-       ;; http://.../bugreport.cgi?bug=521846
+        ;; http://.../bugreport.cgi?bug=521846
         (and (string-match "bug=\\([0-9]+\\)" str)
              (match-string 1 str))
-       ;; http://bugzilla.abisource.com/show_bug.cgi?id=12984
+        ;; http://bugzilla.abisource.com/show_bug.cgi?id=12984
         ;; (and (string-match "http://.*bugzilla.*=\\([0-9]+\\)" str)
         ;;    (match-string 1 str))
         ;; [Bug 192841] Ubuntu
@@ -2824,19 +2898,26 @@ Bug#NNNN: O: package -- description."
                                    tinydebian--debian-bts-email-address)
                            str)
              (match-string 1 str))
-        ;;   BTS message lines: "owner NNNNNN"
+        ;;   BTS message lines: NNNN@bugs.launchpad.net
         (and (string-match (concat "\\([0-9]+\\)\\(?:-[a-z]+\\)?@"
                                    ;; FIXME: Use variable
                                    "bugs.launchpad.net")
                            str)
              (match-string 1 str))
         ;;   BTS message lines: "owner NNNNNN"
-        (and (string-match (concat "\\<\\(?:owner\\|retitle\\|tags\\)[ \t]+"
-                                   "\\([0-9][0-9][0-9][0-9][0-9][0-9]\\)\\>")
-                           str)
+        (and (string-match
+              (concat
+               "\\<\\(?:owner\\|retitle\\|tags\\|forwarded\\)[ \t]+"
+               "\\([0-9][0-9][0-9][0-9][0-9][0-9]\\)\\>")
+              str)
+             (match-string 1 str))
+        (and (string-match          ;; long NUMBER
+              "^[ \t\r\n]*#?\\([0-9][0-9][0-9][0-9]+\\)\\(?:[ \t\r\n]\\|$\\)"
+              str)
              (match-string 1 str))
         (and (string-match          ;; long NUMBER
-              "^[ \t\r\n]*#?\\([0-9][0-9][0-9][0-9]+\\)\\(?:[ \t\r\n]\\|$\\)" str)
+              "\\(?:[ \t]\\|#?\\)\\([0-9][0-9][0-9][0-9]+\\)\\(?:[ \t\r\n]\\|$\\)"
+              str)
              (match-string 1 str)))))
 
 ;;; ----------------------------------------------------------------------
@@ -2855,15 +2936,30 @@ Bug#NNNN: O: package -- description."
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinydebian-bug-nbr-at-current-point-number ()
-  "Read at least 4 digit bug number from current point.
-The number must be surreounded by whitespace."
-  (when (looking-at "[0-9]+[ \t\r\n]")
-    (save-excursion
-      ;; Go to beginning
-      (skip-chars-backward "^ \t\r\n")
+  "Read at least 3 digit bug number from current point.
+The number must be surrounded by whitespace."
+  (save-excursion
+    (cond
+     ((and (looking-at "[0-9]+\\([ ,\t\t\n]\\|$\\)")
+           (progn
+             (skip-chars-backward "0-9" (line-beginning-position))
+             (looking-at "\\<\\([0-9][0-9][0-9]+\\)")))
+      (match-string-no-properties 1))
+     ((looking-at "\\<[0-9]+\\([ ,\t\t\n]\\|$\\)")
+      ;; Go to the beginning
+      (skip-chars-backward "^ \t" (line-beginning-position))
       ;; At least 3 digits
-      (when (looking-at "\\([0-9][0-9][0-9]+\\)[ \t\r\n]")
-        (current-word)))))
+      (when (looking-at "\\([0-9][0-9][0-9]+\\)")
+        (match-string-no-properties 0)))
+     ((looking-at "[ \t:]+\\([0-9]+\\)\\>")
+      (match-string-no-properties 1))
+     ((and (looking-at "[ \t]\\|$")
+           ;; NNNN -!-
+           (progn
+             (skip-chars-backward " \t" (line-beginning-position))
+             (skip-chars-backward "0-9" (line-beginning-position))
+             (looking-at "\\([0-9]+\\)")))
+      (match-string-no-properties 1)))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -2896,14 +2992,8 @@ The number must be surreounded by whitespace."
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defsubst tinydebian-bug-nbr-search ()
-  "Call hook `tinydebian--find-bug-nbr-hook' until value returned."
-  (run-hook-with-args-until-success 'tinydebian--find-bug-nbr-hook))
-
-;;; ----------------------------------------------------------------------
-;;;
-(defun tinydebian-bug-url-forward ()
-  "Find url that looks like BTS from current point forward.
+(defun tinydebian-bug-url-forward (&optional max)
+  "Find BTS url from current point forward until optional MAX point.
 In Gnus summary buffer, look inside original article."
   (let ((buffer (current-buffer)))
     (when (memq major-mode '(gnus-summary-mode))
@@ -2927,14 +3017,15 @@ In Gnus summary buffer, look inside original article."
                      "\\|rt\\.cpan\+.org[^ \t\r\n]+[0-9]"
                      "\\|freecode\\.net[^ \t\r\n]+[0-9][0-9][0-9]"
                      "\\)")
-           nil t)
+           max t)
           (let ((str (thing-at-point 'url)))
             ;; Clean MIME, bug=3D<number>
             (replace-regexp-in-string "bug=3D" "bug=" str)))
-         ((and (setq nbr (tinydebian-bug-nbr-search))
+         ((and (setq nbr (save-excursion
+                           (tinydebian-bug-nbr-search)))
                (progn
                  (goto-char (point-min))
-                 (re-search-forward "^From:.*@debian.org" nil  t)))
+                 (re-search-forward "^From:.*@debian.org" max t)))
           (tinydebian-bug-url-current-buffer nbr)))))))
 
 ;;; ----------------------------------------------------------------------
@@ -2958,7 +3049,7 @@ At current point, current line, headers of the mail message
         ;; !A [  40: Foo Bar ] <subject content>
         (tinydebian-bug-nbr-any-in-string
          (tinydebian-gnus-summary-mode-summary-line))
-       (tinydebian-bug-nbr-article-buffer)))
+        (tinydebian-bug-nbr-article-buffer)))
    (t
     (or (tinydebian-bug-nbr-at-current-point)
         (tinydebian-bug-nbr-current-line)
@@ -3091,13 +3182,13 @@ Return:
   (let ((email (regexp-quote tinydebian--gnu-bts-email-address)))
     (cond
      ((re-search-forward `,(concat
-                           "http://debbugs.gnu.org[^ \t\r\n]+"
-                           "bug=\\([0-9]+\\)")
-                           nil t)
+                            "http://debbugs.gnu.org[^ \t\r\n]+"
+                            "bug=\\([0-9]+\\)")
+                            nil t)
       ;; http://debbugs.gnu.org/cgi/bugreport.cgi?bug=NNNN
       (let ((bug (match-string-no-properties 1)))
-       (list bug
-             (format "%s@%s" bug tinydebian--gnu-bts-email-address))))
+        (list bug
+              (format "%s@%s" bug tinydebian--gnu-bts-email-address))))
      ((re-search-forward (format
                           "\\(\\([0-9]+\\)@%s\\>\\)"
                           email)
@@ -3400,13 +3491,28 @@ Return:
 ;;;
 (defsubst tinydebian-debian-parse-bts-bug-package ()
   "Parse buffer content of Debian BTS (HTTP result)."
-       ;; ;package=levee"></a></div>
-  (if (re-search-forward "package=\\([^<\"\t\r\n]+\\)\"" nil t)
-      (let ((pkg (tinydebian-decode-html (match-string-no-properties 1))))
+  ;; package=levee"></a></div>
+  ;; package=src%3Adesproxy;info=1;
+  (if (re-search-forward "package=\\([^<;\"\t\r\n]+\\)[^ \"\t\r\n]+\"" nil t)
+      (let* ((pkg (match-string-no-properties 1))
+             (package (tinydebian-decode-html pkg)))
         ;; src:<package>
-        (if (string-match ":\\(.+\\)" pkg)
-            (match-string 1 pkg)
-          pkg))))
+        (if (string-match ":\\(.+\\)" package)
+            (match-string 1 package)
+          package))))
+
+;;; ----------------------------------------------------------------------
+;;;
+(defsubst tinydebian-debian-parse-bts-bug-message ()
+  "Parse buffer content of Debian BTS (HTTP result)."
+  ;; <pre class="message"> ... </pre>
+  (let (point)
+    (when (re-search-forward "<pre +class=.message.>" nil t)
+      (setq point (point))
+      (when (re-search-forward "^ *</pre>" nil t)
+        (tinydebian-decode-html (buffer-substring-no-properties
+                                 point
+                                 (match-beginning 0)))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -3450,7 +3556,7 @@ Return '(email field-conent)."
 
 ;; ----------------------------------------------------------------------
 ;;;
-(defsubst tinydebian-debian-parse-bts-bug-info-raw ()
+(defun tinydebian-debian-parse-bts-bug-info-raw ()
   "Parse buffer content of Debian BTS (HTTP result).
 
 Return assoc list with keys:
@@ -3466,7 +3572,8 @@ Were:
     REPORTED    Reported by information
     SEVERITY    Bug severity
     SUBJECT     Bug subject
-    TAGS        List of tags"
+    TAGS        List of tags
+    MESSAGE     Bug report submitter's message"
     (let (list)
       (goto-char (point-min))
       ;; This must be done in order
@@ -3492,14 +3599,21 @@ Were:
         (push (cons field
                     (tinydebian-debian-parse-bts-bug-field field))
               list))
-      (push (cons "found"
-                  (tinydebian-debian-parse-bts-search-tag "Found in version +"))
+      (push (cons
+             "found"
+             (tinydebian-debian-parse-bts-search-tag "Found in version +"))
+            list)
+      (push (cons
+             "fixed"
+             (tinydebian-debian-parse-bts-search-tag "Fixed in version +"))
             list)
-      (push (cons "fixed"
-                  (tinydebian-debian-parse-bts-search-tag "Fixed in version +"))
+      (push (cons
+             "done"
+             (tinydebian-debian-parse-bts-bug-field "done"))
             list)
-      (push (cons "done"
-                    (tinydebian-debian-parse-bts-bug-field "done"))
+      (push (cons
+             "message"
+             (tinydebian-debian-parse-bts-bug-message))
             list)
       list))
 
@@ -3552,12 +3666,12 @@ Optionally from debbugs BTS which defaults to \"debian\"."
      (tinydebian-browse-url-http-get
       (cond
        ((or (null bts)
-           (string= "debian" bts))
-       (tinydebian-debian-bts-url-compose bug))
+            (string= "debian" bts))
+        (tinydebian-debian-bts-url-compose bug))
        ((string= "emacs" bts)
-       (tinydebian-gnu-bts-bug-url-compose bug))
+        (tinydebian-gnu-bts-bug-url-compose bug))
        (t
-       (error "Unknown debuuges BTS for http call '%s'" bts)))))
+        (error "Unknown debuuges BTS for http call '%s'" bts)))))
     (if (eq (point-min) (point-max))
         (error "TinyDebian: Failed to fetch Bug %s" bug))))
 
@@ -3663,7 +3777,7 @@ Optionally from debbugs BTS which defaults to \"debian\"."
       (if file
           (with-current-buffer (get-buffer tinydebian--buffer-www)
             (write-region (point-min) (point-max) file)
-            (if (interactive-p)
+            (if (called-interactively-p 'interactive)
                   (message "Wrote %s" file))
             file)
         tinydebian--buffer-www))))
@@ -3720,7 +3834,6 @@ Input notes:
       (or nbr
           (setq nbr guess-bug))
       (setq bts guess-bts)))
-
   (setq bts (completing-read
              "Select BTS (no input = debian): " ;; prompt
              '(("debian" . 1)                   ;; collection
@@ -3743,6 +3856,7 @@ Input notes:
              ))
   (if (string= bts "")
      (setq bts "debian"))
+  ;; Use cond so that other testa are easier to add later
   (cond
    ((or (string-match "google\\|freecode\\|debian\\|emacs" bts)
         (and (stringp project)
@@ -3781,7 +3895,11 @@ If parameters are passed, do not ask, just return URL."
   (let* ((prev (get 'tinydebian-bug-browse-url-by-bug 'file))
          (dir  (if prev
                    (file-name-directory prev)))
-         (url-str (tinydebian-bug-url-forward))
+         (url-str (or (tinydebian-bug-nbr-any)
+                     (save-excursion
+                       (tinydebian-bug-url-forward
+                        (min (+ (point) (* 2 70)) ;look about two line forward
+                             (point-max))))))
          (url (multiple-value-bind (bts data)
                   (save-excursion
                     (tinydebian-bug-bts-type-determine))
@@ -3799,7 +3917,7 @@ If parameters are passed, do not ask, just return URL."
                    (or (tinydebian-bug-ask-url-for-bts-and-number
                         bts
                         (if (and (numberp data)
-                                (> (string-to-number data)  1))
+                                 (> (string-to-number data)  1))
                             data
                           (tinydebian-bug-nbr-search)))
                        (error "TinyDebian: ERROR, No BTS information."))))))
@@ -3822,6 +3940,7 @@ In Gnus summary buffer, the Article buffer is consulted for bug."
 ;;; ----------------------------------------------------------------------
 ;;;
 (defsubst tinydebian-bug-buffer-name (bug)
+  "Return buffer name string for BUG number."
   (or bug
       (error "TinyDebian: BUG argument is empty"))
   (format tinydebian--buffer-bug-format bug))
@@ -3846,28 +3965,81 @@ In Gnus summary buffer, the Article buffer is consulted for bug."
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinydebian-bug-browse-url-by-package-name (package)
-  "Jump to PACKAGE description."
+  "Goto URL by PACKAGE name."
   (interactive
    (list
     (tinydebian-trim-blanks
      (read-string "Browse desription URL by package name: "
-                 (my-debian-bug-package-name-any)))))
+                  (or (my-debian-bug-package-name-any)
+                      (tinydebian-read-thing-near-point-any))))))
   (when (or (not (stringp package))
             (not (string-match "[a-z]" package)))
     (error "TinyDebian: Invalid package name `%s'." package))
   (tinydebian-browse-url-1
-   (tinydebian-packages-browse-url-compose package)
-   package))
+   (format "http://bugs.debian.org/cgi-bin/pkgreport.cgi?repeatmerged=no&src=%s" package)))
+
+
+
+(defvar tinydebian--bug-browse-url-by-email-history nil
+  "History for `tinydebian-bug-browse-url-by-email'.")
+
+;;; ----------------------------------------------------------------------
+;;;
+(defun tinydebian-qa-browse-url-by-package-name (package)
+  "Goto QA URL by PACKAGE name."
+  (interactive
+   (list
+    (tinydebian-trim-blanks
+     (read-string "Browse QA URL by package name: "
+                  (my-debian-bug-package-name-any)))))
+  (when (or (not (stringp package))
+            (not (string-match "[a-z]" package)))
+    (error "TinyDebian: Invalid package name `%s'." package))
+  (tinydebian-browse-url-1
+   (format "https://packages.qa.debian.org/%s" package)))
+
+;;; ----------------------------------------------------------------------
+;;;
+(defun tinydebian-qa-browse-url-by-email (email)
+  "Goto QA URL by email."
+  (interactive
+   (list
+    (tinydebian-trim-blanks
+     (read-string "Browse QA URL by email: "
+                  (tinydebian-read-thing-near-point-email)))))
+  (when (or (not (stringp email))
+            (not (string-match "@" email)))
+    (error "TinyDebian: Invalid email `%s'." email))
+  (tinydebian-browse-url-1
+   (format "https://qa.debian.org/developer.php?login=%s" email)))
+
+;;; ----------------------------------------------------------------------
+;;;
+(defun tinydebian-bug-browse-url-by-email (email)
+  "Goto bugs URL by EMAIL address.
+I.e. bugs by developer's EMAIL address."
+  (interactive
+   (list
+    (tinydebian-trim-blanks
+     (read-string "Browse bugs URL by developer email: "
+                  (tinydebian-read-thing-near-point-email)
+                  'tinydebian--bug-browse-url-by-email-history))))
+  (unless (and (stringp email)
+               (string-match "@.*\\.[a-z][a-z][a-z]?[a-z]?$" email))
+    (error "TinyDebian: Invalid email `%s'." email))
+  (tinydebian-browse-url-1
+   (format "http://bugs.debian.org/%s" email)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinydebian-bug-browse-url-by-package-bugs (package)
-  "Jump to PACKAGE description."
+  "Goto URL by PACKAGE bugs."
   (interactive
    (list
     (tinydebian-trim-blanks
      (read-string "Browse bugs URL by package name: "
-                 (my-debian-bug-package-name-any)))))
+                  (or (my-debian-bug-package-name-any)
+                      (tinydebian-read-thing-near-point-any))))))
   (when (or (not (stringp package))
             (not (string-match "[a-z]" package)))
     (error "TinyDebian: Invalid package name `%s'." package))
@@ -3938,9 +4110,9 @@ Mode description:
   (let* ((bin  "wnpp-alert")
          (path (executable-find bin)))
     (cond
-     ((not bin)
-      (message "TinyDebian: [ERROR] program `%s' is not installed."
-               bin))
+     ((not path)
+      ;; (message "TinyDebian: [ERROR] program `%s' is not installed." bin)
+      (tinydebian-browse-url-1 "http://www.debian.org/devel/wnpp/"))
      (t
       (tinydebian-with-buffer-macro
           tinydebian--buffer-wnpp-alert
@@ -4013,7 +4185,7 @@ Mode description:
     (dolist (elt (tinydebian-mail-address-list header))
       (unless (string-match re elt)
         (push elt list)))
-    (nreverse list)))                  ; preserve order
+    (nreverse list)))                   ; preserve order
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -4097,9 +4269,9 @@ Optional bug checks BUG-TYPE@ address."
       (setq field nil)
       (if (setq list (tinydebian-mail-header-not-matches header re))
           (setq field
-               (mapconcat 'concat
-                          (tinydebian-mail-header-not-matches header re)
-                          ", ")))
+                (mapconcat 'concat
+                           (tinydebian-mail-header-not-matches header re)
+                           ", ")))
       ;; We must not remove "To: field
       (if (and (null field)
                (string-match "To" header))
@@ -4220,7 +4392,7 @@ In interactive call, toggle quiet address on and off."
    bug
    "quiet"
    remove
-   (interactive-p)
+   (called-interactively-p 'interactive)
    (format "%s@\\|%s-\\(close\\|quiet\\)@" bug bug)))
 
 ;;; ----------------------------------------------------------------------
@@ -4233,7 +4405,7 @@ In interactive call, toggle quiet address on and off."
    bug
    "close"
    remove
-   (interactive-p)
+   (called-interactively-p 'interactive)
    (format "%s@\\|%s-\\(close\\|quiet\\)@" bug bug)))
 
 ;;; ----------------------------------------------------------------------
@@ -4249,8 +4421,8 @@ Optionally REMOVE. In interactive call, toggle TYPE of address on and off."
       (setq remove t)))
   (save-excursion
     (let ((email (if (and type bug)
-                    (tinydebian-bts-email-compose type bug)
-                  (tinydebian-bts-generic-email-control nil bug))))
+                     (tinydebian-bts-email-compose type bug)
+                   (tinydebian-bts-generic-email-control nil bug))))
       (cond
        (remove
         (tinydebian-mail-mode-debian-address-email-remove email))
@@ -4266,23 +4438,23 @@ In interactive call, toggle conrol address on and off."
   (interactive (tinydebian-mail-mode-debian-address-ask-args "Submitter bug"))
   ;; toggle
   (tinydebian-mail-mode-address-type-add
-   "submitter" bug remove (interactive-p)))
+   "submitter" bug remove (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinydebian-mail-mode-debian-address-bug-p (bug)
   "Return field name if BUG address exists."
   (let ((to  (mail-fetch-field "To"))
-       (cc  (mail-fetch-field "Cc"))
-       (bcc (mail-fetch-field "Bcc"))
-       (re  (format "%s@\\|%s-\\(close\\|quiet\\)@" bug bug))
+        (cc  (mail-fetch-field "Cc"))
+        (bcc (mail-fetch-field "Bcc"))
+        (re  (format "%s@\\|%s-\\(close\\|quiet\\)@" bug bug)))
     (cond
      ((string-match  re to)
       "To")
      ((string-match  re cc)
       "Cc")
      ((string-match  re bcc)
-      "Bcc")))))
+      "Bcc"))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -4292,22 +4464,25 @@ In inteactive call, if `current-prefix-arg' is non-nil, ASK bug
 number interactively."
   (interactive
    (let ((now (or (tinydebian-bug-nbr-at-current-point)
-                 (tinydebian-bug-nbr-current-line)))
-        bug)
+                  (tinydebian-bug-nbr-current-line)))
+         bug)
      (list
       (if current-prefix-arg
-         (read-string "Bug number: ")
-       (or now
-           (tinydebian-mail-mode-debian-address-ask-bug))))))
+          (read-string "Bug number: " now)
+        (or now
+            (tinydebian-mail-mode-debian-address-ask-bug))))))
   (let ((re (format "%s@\\|%s-\\(close\\|quiet\\)@" bug bug)))
     (when (tinydebian-mail-address-match-p re)
       (setq remove t))
     (if remove
-       (tinydebian-mail-header-send-remove-item-regexp re)
+        (tinydebian-mail-header-send-remove-item-regexp re)
       (tinydebian-mail-mode-debian-address-add-standard-bug
        bug
        (format re bug)))))
 
+(defvar tinydebian--mail-mode-debian-address-package-history nil
+  "History of names in `tinydebian-mail-mode-debian-address-package-toggle'")
+
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinydebian-mail-mode-debian-address-package-toggle
@@ -4320,11 +4495,18 @@ number interactively."
                             (string-match re (car address)))
                        (match-string 1 (car address)))))
      (list
-      (tinydebian-trim-blanks (read-string "package name: " pkg))
-      (if pkg
-          t
-        current-prefix-arg))))
+      (setq
+       pkg
+       (tinydebian-trim-blanks
+        (read-string
+         "package name: "
+         (or pkg
+             (and tinydebian--mail-mode-debian-address-package-history
+                  (caar tinydebian--mail-mode-debian-address-package-history)))
+         tinydebian--mail-mode-debian-address-package-history)))
+      current-prefix-arg)))
   ;; toggle
+  (tinydebian-string-p "Missing string argument: package")
   (let ((email (format "%s@packages.debian.org" package)))
     (cond
      (remove
@@ -4340,7 +4522,7 @@ In interactive call, toggle conrol address on and off."
   (interactive "P")
   ;; toggle
   (tinydebian-mail-mode-address-type-add
-   "control" nil remove (interactive-p)))
+   "control" nil remove (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -4350,7 +4532,7 @@ In interactive call, toggle conrol address on and off."
   (interactive (tinydebian-mail-mode-debian-address-ask-args "Submitter bug"))
   ;; toggle
   (tinydebian-mail-mode-address-type-add
-   "maintonly" bug remove (interactive-p)))
+   "maintonly" bug remove (called-interactively-p 'interactive)))
 
 
 (defvar tinydebian--bts-mail-ctrl-finalize-line-regexp
@@ -4680,6 +4862,9 @@ otgerwise run `tinydebian-bts-mail-ctrl-clone-new-mail'."
      'match)))
   (tinydebian-bts-mail-ctrl-command-add-macro "severity" bug severity))
 
+(defvar tinydebian--bts-mail-ctrl-command-tags-history nil
+  "History of tags used in `tinydebian-bts-mail-ctrl-command-tags'")
+
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinydebian-bts-mail-ctrl-command-tags (bug list)
@@ -4689,38 +4874,40 @@ otgerwise run `tinydebian-bts-mail-ctrl-clone-new-mail'."
      (list
       bug
       (tinydebian-bts-ctrl-tags-ask
-       (format  "BTS tag #%s [RET when done]: " bug)))))
+       (format  "BTS tag #%s [RET when done]: " bug)
+       'tinydebian--bts-mail-ctrl-command-tags-history))))
   (let ((bug-str (if (stringp bug)
-                    bug
-                  (number-to-string bug)))
-       line
-       saved
-       nbr
-       type
-       items
-       beg
-       end)
+                     bug
+                   (number-to-string bug)))
+        line
+        saved
+        nbr
+        type
+        items
+       str
+        beg
+        end)
     (tinydebian-bts-mail-ctrl-command-goto-body-start)
     (setq beg (point))
     (when (setq end (tinydebian-bts-mail-ctrl-finalize-position))
       (goto-char beg)
       ;; Check existing tags
       (while (re-search-forward
-             "^\\(tags[ \t]+\\([0-9]+\\)[ \t]+\\([+-]\\)[ \t]+\\([a-z].*\\)\\)"
-             end t)
-       (setq line (match-string-no-properties 1)
-             nbr  (match-string-no-properties 2)
-             type (match-string-no-properties 3)
-             str  (match-string-no-properties 4))
-       (if (not (string= bug-str nbr))
-           (push line saved)
-         (let ((items (split-string str))
-               (new list))
-           ;; Combine existing tags to user given LIST
-           (dolist (elt items)
-             (unless (member elt new)
-               (push elt new)))
-           (setq list new)))))
+              "^\\(tags[ \t]+\\([0-9]+\\)[ \t]+\\([+-]\\)[ \t]+\\([a-z].*\\)\\)"
+              end t)
+        (setq line (match-string-no-properties 1)
+              nbr  (match-string-no-properties 2)
+              type (match-string-no-properties 3)
+              str  (match-string-no-properties 4))
+        (if (not (string= bug-str nbr))
+            (push line saved)
+          (let ((items (split-string str))
+                (new list))
+            ;; Combine existing tags to user given LIST
+            (dolist (elt items)
+              (unless (member elt new)
+                (push elt new)))
+            (setq list new)))))
     (tinydebian-bts-mail-ctrl-command-add-macro
       "tags"
       bug
@@ -4762,11 +4949,10 @@ changes, the bug must be unarchived first."
 See `tinydebian-debian-parse-bts-bug-info-raw' for INFO structure.
 Optionally from debbugs BTS which defaults to \"debian\"."
   `(progn
-     (if (or (not (stringp ,bug))
-             (not (string-match "^[0-9][0-9]+$" ,bug)))
-         (error "Invalid bug number: %s" ,bug))
+     (unless (tinydebian-bts-bug-number-pure-p ,bug)
+       (error "Invalid bug number: %s" ,bug))
      (let ((info (tinydebian-debian-url-bug-info ,bug ,bts)))
-       (flet ((field (x)
+       (cl-flet ((field (x)
                      (cdr-safe
                       (assoc x info))))
          ,@body))))
@@ -4786,7 +4972,7 @@ Optionally from debbugs BTS which defaults to \"debian\"."
 (put 'tinydebian-debian-bug-info-message-all-macro 'edebug-form-spec '(body))
 (put 'tinydebian-debian-bug-info-message-all-macro 'lisp-indent-function 2)
 (defmacro tinydebian-debian-bug-info-message-all-macro (bug bts &rest body)
-  "Set `str' tor BUG information string and run BODY.
+  "Set `str' to BUG information string and run BODY.
 Optionally from debbugs BTS which defaults to \"debian\"."
   `(tinydebian-debian-bug-info-macro ,bug ,bts
      (let (str)
@@ -4813,24 +4999,24 @@ If BTS is nil, the consult BUFFER or `current-buffer' for BTS type."
     (let (subject)
       (cond
        ((or (not (stringp bts))
-           (string= "debian" bts)
-           (string= "emacs" bts))
-       (tinydebian-debian-bug-info-macro bug bts
-         (let ((fsub (field "subject"))
-               (fpkg (field "package"))
-               (pkg ""))
-           ;; Check '<package>: <message>' -- the standard bug report format
-           ;; Add one if it's not in bug report by default.
-           (unless (string-match fpkg fsub)
-             (setq pkg (format "%s: " fpkg)))
-           (setq subject
-                 (format "Re: Bug#%s: %s%s"
-                         bug
-                         pkg
-                         fsub)))))
+            (string= "debian" bts)
+            (string= "emacs" bts))
+        (tinydebian-debian-bug-info-macro bug bts
+          (let ((fsub (field "subject"))
+                (fpkg (field "package"))
+                (pkg ""))
+            ;; Check '<package>: <message>' -- the standard bug report format
+            ;; Add one if it's not in bug report by default.
+            (unless (string-match fpkg fsub)
+              (setq pkg (format "%s: " fpkg)))
+            (setq subject
+                  (format "Re: Bug#%s: %s%s"
+                          bug
+                          pkg
+                          fsub)))))
        (t
-       ;; FIXME: add support for more BTS
-       ))
+        ;; FIXME: add support for more BTS
+        ))
       subject)))
 
 ;;; ----------------------------------------------------------------------
@@ -4841,7 +5027,7 @@ If `inteactive-p' and `buffer-read-only', display infromation only.
 Optionally from debbugs BTS which defaults to \"debian\"."
   (interactive (list (tinydebian-bts-mail-ask-bug-number)))
   (tinydebian-debian-bug-info-message-all-macro bug bts
-    (if (and (interactive-p)
+    (if (and (called-interactively-p 'interactive)
              buffer-read-only)
         (message str)
       (tinydebian-move-point-to-free-place)
@@ -4849,10 +5035,25 @@ Optionally from debbugs BTS which defaults to \"debian\"."
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(defun tinydebian-debian-bug-info-message-content-insert (bug &optional bts)
+  "Insert BUG content message at current point.
+Optionally from debbugs BTS which defaults to \"debian\"."
+  (interactive (list (tinydebian-bts-mail-ask-bug-number)))
+  (if (and (called-interactively-p 'interactive)
+           buffer-read-only)
+      (message "TinyDebian: Cannot insert bug message. Buffer is read only.")
+    (tinydebian-debian-bug-info-macro bug bts
+      (let ((str (field "message")))
+        (if (tinydebian-string-p str)
+            (insert str)
+          (message "TinyDebian: Cound't read bug message to insert"))))))
+
+;;; ----------------------------------------------------------------------
+;;;
 (defun tinydebian-debian-bug-info-all-message (bug)
   "Display BUG information."
   (interactive (list (tinydebian-bts-mail-ask-bug-number)))
-  (tinydebian-debian-bug-info-message-all-macro bug
+  (tinydebian-debian-bug-info-message-all-macro bug nil
     (message str)))
 
 ;;; ----------------------------------------------------------------------
@@ -4864,7 +5065,7 @@ Optionally from BTS which defaults to \"debian\"."
   (interactive (list (tinydebian-bts-mail-ask-bug-number)))
   (tinydebian-debian-bug-info-macro bug bts
     (let ((subject (field "subject")))
-      (if (and (interactive-p)
+      (if (and (called-interactively-p 'interactive)
                buffer-read-only)
           (message subject)
         (tinydebian-move-point-to-free-place)
@@ -4944,37 +5145,42 @@ Mode description:
     "----"
 
     ["Address Bug"
-     tinydebian-mail-mode-debian-address-bug-toggle        t]
+     tinydebian-mail-mode-debian-address-bug-toggle         t]
     ["Address Control"
-     tinydebian-mail-mode-debian-address-control-toggle            t]
+     tinydebian-mail-mode-debian-address-control-toggle     t]
     ["Address Quiet"
-     tinydebian-mail-mode-debian-address-quiet-toggle      t]
+     tinydebian-mail-mode-debian-address-quiet-toggle       t]
     ["Address Close"
-     tinydebian-mail-mode-debian-address-close-toggle      t]
+     tinydebian-mail-mode-debian-address-close-toggle       t]
     ["Address Submitter"
      tinydebian-mail-mode-debian-address-submitter-toggle   t]
     ["Address Maintonly"
      tinydebian-mail-mode-debian-address-maintonly-toggle   t]
     ["Address Package maintainer"
-     tinydebian-mail-mode-debian-address-package-toggle            t]
+     tinydebian-mail-mode-debian-address-package-toggle     t]
 
     "----"
 
 ;;    ["Goto URL by bug number" tinydebian-bug-browse-url-by-bug          t]
     ["Goto URL by bug number"   tinydebian-bug-browse-url-main            t]
 
-    ["Goto URL by package bugs" tinydebian-bug-browse-url-by-package-bugs t]
-    ["Goto URL by package name" tinydebian-bug-browse-url-by-package-name t]
+    ["Goto URL by package (bugs)" tinydebian-bug-browse-url-by-package-bugs t]
+    ["Goto URL by package name"   tinydebian-bug-browse-url-by-package-name t]
+    ["Goto URL by email (bugs)"   tinydebian-bug-browse-url-by-email        t]
+    ["Goto QA URL by email"       tinydebian-qa-browse-url-by-email         t]
+    ["Goto QA URL by package"     tinydebian-qa-browse-url-by-pacage        t]
 
     "----"
 
     ["Info bug all insert"     tinydebian-debian-bug-info-all-insert     t]
+    ["Info bug msg insert" tinydebian-debian-bug-info-message-content-insert t]
     ["Info bug all message"    tinydebian-debian-bug-info-all-message    t]
     ["Info bug subject insert" tinydebian-debian-bug-info-subject-insert t])
 
    (progn
      (define-key map  "ia" 'tinydebian-debian-bug-info-all-insert)
      (define-key map  "iA" 'tinydebian-debian-bug-info-all-message)
+     (define-key map  "im" 'tinydebian-debian-bug-info-message-content-insert)
      (define-key map  "is" 'tinydebian-debian-bug-info-subject-insert)
      (define-key map  "iS" 'tinydebian-debian-bug-info-subject-message)
      (define-key map  "b"  'tinydebian-mail-mode-debian-address-bug-toggle)
@@ -4988,6 +5194,9 @@ Mode description:
      (define-key map  "ub"  'tinydebian-bug-browse-url-by-bug)
      (define-key map  "uB"  'tinydebian-bug-browse-url-by-package-bugs)
      (define-key map  "up"  'tinydebian-bug-browse-url-by-package-name)
+     (define-key map  "ue"  'tinydebian-bug-browse-url-by-package-email)
+     (define-key map  "Up"  'tinydebian-qa-browse-url-by-package-name)
+     (define-key map  "Ue"  'tinydebian-qa-browse-url-by-package-name)
 
      ;;  (C)ontrol commands
 ;;      (define-key map  "cf"  'tinydebian-bts-mail-ctrl-command-forward)  ;; FIXME
@@ -5017,19 +5226,6 @@ Mode description:
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(put 'tinydebian-with-url-page-type-macro 'edebug-form-spec '(body))
-(put 'tinydebian-with-url-page-type-macro 'lisp-indent-function 1)
-(defmacro tinydebian-with-url-page-type-macro (page-type &rest body)
-  "Retrieve PAGE-TYPE from `tinydebian--debian-url-page-alist' and run BODY.
-  Variable `page'is bound to the retrieved value.
-  Signal error if PAGE-TYPE is not found."
-  `(let ((page (assoc ,page-type tinydebian--debian-url-page-alist)))
-     (unless page
-       (error "TinyDebian: unknown page-typpe `%s'" ,page-type))
-     ,@body))
-
-;;; ----------------------------------------------------------------------
-;;;
 (defsubst tinydebian-url-page-compose (page-type)
   "Return URL location of PAGE-TYPE."
   (tinydebian-with-url-page-type-macro page-type (nth 1 page)))
@@ -5337,13 +5533,40 @@ Mode description:
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(put 'tinydebian-mail-setup 'edebug-form-spec '(body))
+(put 'tinydebian-mail-setup 'lisp-indent-function 0)
+(defmacro tinydebian-mail-setup (to subject &optional reply cc)
+  "Emacs compatibility for `mail-setup'."
+  (cond
+   ((string< emacs-version "24")
+    `(mail-setup
+      ,to
+      ,subject
+      (not 'in-reply-to)
+      (not 'cc)
+      (not 'replybuffer)
+      (not 'actions)))
+   (t                           ;Emacs 24 and later
+    ;; (mail-setup TO SUBJECT IN-REPLY-TO CC REPLYBUFFER ACTIONS
+    ;;  RETURN-ACTION)
+    `(mail-setup
+      ,to
+      ,subject
+      (not 'in-reply-to)
+      (not 'cc)
+      (not 'replybuffer)
+      (not 'actions)
+      (not 'return-action)))))
+
+;;; ----------------------------------------------------------------------
+;;;
 (put 'tinydebian-bts-mail-compose-macro 'edebug-form-spec '(body))
 (put 'tinydebian-bts-mail-compose-macro 'lisp-indent-function 5)
 (defmacro tinydebian-bts-mail-compose-macro
   (bug type package subject email &rest body)
   "Compose mail for BUG of TYPE to PACKAGE with SUBJECT EMAIL and run BODY."
-  (let ((name (gensym "name-"))
-        (buffer (gensym "buffer-")))
+  (let ((name (cl-gensym "name-"))
+        (buffer (cl-gensym "buffer-")))
     `(let ((,buffer (current-buffer))
            (,name (format "*Mail BTS %s*"
                           (cond
@@ -5359,30 +5582,11 @@ Mode description:
                                 ""))))))
        (pop-to-buffer (get-buffer-create ,name))
        (erase-buffer)
-       (cond
-       ((string< emacs-version "24")
-        (mail-setup
-         (if ,email
-             ,email
-           (tinydebian-bts-generic-email-control ,buffer))
-         ,subject
-          (not 'in-reply-to)
-          (not 'cc)
-          (not 'replybuffer)
-          (not 'actions)))
-        (t                             ;Emacs 24 and later
-         ;; (mail-setup TO SUBJECT IN-REPLY-TO CC REPLYBUFFER ACTIONS
-         ;;  RETURN-ACTION)
-         (mail-setup
-          (if ,email
-              ,email
-            (tinydebian-bts-generic-email-control ,buffer))
-          ,subject
-          (not 'in-reply-to)
-          (not 'cc)
-          (not 'replybuffer)
-          (not 'actions)
-          (not 'return-action))))
+       (tinydebian-mail-setup
+         (if ,email
+             ,email
+           (tinydebian-bts-generic-email-control ,buffer))
+         ,subject)
        (cond
         ((or (featurep 'message)
              (eq mail-user-agent 'message-user-agent))
@@ -5406,7 +5610,7 @@ Variables bound during macro (can all be nil):
   type-orig
   package        Value of PKG is sent as an argument to macro
   description"
-  (let ((subj (gensym "subject-")))
+  (let ((subj (cl-gensym "subject-")))
     `(multiple-value-bind (bugnbr type-orig package description)
          (or (tinydebian-bts-parse-string-current-line)
              (tinydebian-bts-parse-string-subject))
@@ -5432,6 +5636,52 @@ Variables bound during macro (can all be nil):
 
 ;;; ----------------------------------------------------------------------
 ;;;
+(defun tinydebian-bts-mail-type-its (bug &optional bts) ;; FIXME: NOT DONE
+  "Send an ITS request: Intent To Sponsor.
+Optionally from BTS which defaults to \"debian\"."
+  (interactive (list (tinydebian-bts-mail-ask-bug-number "ITS")))
+  (tinydebian-bts-mail-type-macro
+      "ITS"
+      (not 'pkg)
+      (not 'email)
+      (not 'subject)
+    (insert
+     (format "\
+retitle %s %s
+owner %s !
+thanks
+"
+             bug
+        (let (fsub
+              fpkg)
+          (unless package
+            (tinydebian-debian-bug-info-macro bug bts
+              (setq package (field "package"))))
+          (unless description
+            (tinydebian-debian-bug-info-macro bug bts
+              (let ((str (field "subject")))
+                (setq description
+                      (replace-regexp-in-string
+                       "^.*-- *\\|O: *"
+                       ""
+                       str))
+                ;; ITA: package -- Description
+                (when (string-match "wnpp" package)
+                  (if (string-match ": *\\([^ \t\r\n]+\\) *--" str)
+                      (setq package (match-string 1 str)))))))
+          (let ((string
+                 (format "ITA: %s -- %s"
+                         (or package "")
+                         (or description ""))))
+            string))
+        bug))
+    (when (re-search-backward "ITA:" nil t)
+      (let ((string (buffer-substring (point) (line-end-position))))
+        (tinydebian-mail-header-subject-set string)))
+    (goto-char (point-max))))
+
+;;; ----------------------------------------------------------------------
+;;;
 (defun tinydebian-bts-mail-type-ita (bug &optional bts)
   "Send an ITA request.
 Optionally from BTS which defaults to \"debian\"."
@@ -5491,7 +5741,7 @@ See documents:
   http://www.debian.org/doc/developers-reference/pkgs.html#nmu (Official)
   http://wiki.debian.org/NmuDep (Complementary)"
   (interactive (list (tinydebian-bts-mail-ask-bug-number "ITN")))
-  (tinydebian-debian-bug-info-macro bug bts
+  (tinydebian-debian-bug-info-macro bug "debian"
     (let ((str (field "subject")))
       ;;  package: <message string>
       (if (string-match "^[a-z][^:]+: *\\(.+\\)" str)
@@ -5540,18 +5790,17 @@ Optionally from BTS which defaults to \"debian\"."
   (interactive (list (tinydebian-bts-mail-ask-bug-number "Reply to bug")))
   (let ((subject) ;; (my-tinydebian-subject-any))
         tinydebian--bts-compose-type  ;; FIXME: should be use this instead of 'bts'
-       bts)
+        bts)
     (if (tinydebian-emacs-bug-type-p)
-       (setq bts "emacs"))
-
+        (setq bts "emacs"))
     ;; (unless (and (stringp bug)
-    ;;                  (stringp subject)
+    ;;           (stringp subject)
     ;;              (string-match (regexp-quote bug) subject))
     ;;   ;; User gave different bug number. Read subject from BTS.
     ;;   (setq subject
-    ;;             (tinydebian-bts-generic-bug-subject bug bts)))
+    ;;      (tinydebian-bts-generic-bug-subject bug bts)))
     (setq subject
-         (tinydebian-bts-generic-bug-subject bug bts))
+          (tinydebian-bts-generic-bug-subject bug bts))
     (tinydebian-bts-mail-compose-macro
      bug
      "reply"
@@ -5661,7 +5910,7 @@ Severity: wishlist
           (desc    (read-string
                     "One line description [required]: ")))
      (list name license bug desc)))
-  (flet ((replace (regexp str &optional point all)
+  (cl-flet ((replace (regexp str &optional point all)
                   (when (and (stringp str)
                              (not (string= "" str)))
                     (goto-char (or point
@@ -5720,7 +5969,7 @@ The default is to use RFP in Subject header."
            desc
            (if current-prefix-arg
                'itp))))
-  (flet ((replace (regexp str &optional point all)
+  (cl-flet ((replace (regexp str &optional point all)
                   (when (and (stringp str)
                              (not (string= "" str)))
                     (goto-char (or point
@@ -5732,23 +5981,23 @@ The default is to use RFP in Subject header."
                           (replace-match str 'literal nil nil 1))))))
     (let ((arg-pkg package)) ;; Due to macro which reserves var `package'.
       (tinydebian-bts-mail-type-macro "ITP"
-         arg-pkg (tinydebian-bts-email-submit) nil
-       (insert tinydebian--rfp-template)
-       (replace "\\(<package>.*\\)"    package nil 'all)
-       (replace "\\(<homepage:.*\\)"   homepage)
-       (replace "\\(<license:.*\\)"    license)
-       (replace "\\(<short desc>.*\\)" desc)
-       (mail-position-on-field "Subject")
-       (beginning-of-line)
-       (replace ": \\(.*\\)"
-                (format "%s: %s -- %s"
-                        (if itp
-                            "ITP"
-                          "RFP")
-                        package desc)
-                (point))
-       (goto-char (point-max))
-       (run-hooks 'tinydebian--rfp-hook)))))
+          arg-pkg (tinydebian-bts-email-submit) nil
+        (insert tinydebian--rfp-template)
+        (replace "\\(<package>.*\\)"    package nil 'all)
+        (replace "\\(<homepage:.*\\)"   homepage)
+        (replace "\\(<license:.*\\)"    license)
+        (replace "\\(<short desc>.*\\)" desc)
+        (mail-position-on-field "Subject")
+        (beginning-of-line)
+        (replace ": \\(.*\\)"
+                 (format "%s: %s -- %s"
+                         (if itp
+                             "ITP"
+                           "RFP")
+                         package desc)
+                 (point))
+        (goto-char (point-max))
+        (run-hooks 'tinydebian--rfp-hook)))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -5776,6 +6025,8 @@ thanks
 ;;;
 (defun tinydebian-bts-mail-ctrl-usertag (bug &optional email tag-string)
   "Compose BTS control message usertag to a BUG with TAG-STRING.
+See http://wiki.debian.org/bugs.debian.org/usertags
+
 Message format:
     user user@domain.tld
     usertags <#bug> [+-] <tagname>
@@ -5829,8 +6080,8 @@ thanks
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defun tinydebian-bts-ctrl-tags-ask (&optional message)
-  "Ask list of tags interactively with optional MESSAGE."
+(defun tinydebian-bts-ctrl-tags-ask (&optional message history)
+  "Ask list of tags interactively with optional MESSAGE and HISTORY."
   (let (tag
         list)
     (while (or (null tag)
@@ -5839,7 +6090,9 @@ thanks
                  "BTS tag [RET when done]: "
                  tinydebian--tags-list
                  nil
-                 'match))
+                 'match
+                 nil
+                 history))
       (unless (string= "" tag)
         (push tag list)))
     list))
@@ -5878,19 +6131,19 @@ thanks
       package-to
       nil                                  ;Email
       (format "Bug#%s reassign%s" bug (if package-to
-                                         (format " to package %s"
-                                                 package-to)
-                                       ""))
+                                          (format " to package %s"
+                                                  package-to)
+                                        ""))
     (insert
      (format "\
 reassign %s %s
 thanks
 "
-            bug
-            (if (and package-to
-                     (not (string= "" package-to)))
-                package-to
-              "<to-package>")))))
+             bug
+             (if (and package-to
+                      (not (string= "" package-to)))
+                 package-to
+               "<to-package>")))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -5960,8 +6213,8 @@ For removal request types, see
                   t
                   nil))
       (setq package
-           (tinydebian-trim-blanks
-            (read-string "Package name: " pkg)))
+            (tinydebian-trim-blanks
+             (read-string "Package name: " pkg)))
       (setq suite (completing-read
                    "Suite: "
                    '(("experimental" . 1)
@@ -5992,6 +6245,8 @@ For removal request types, see
 ;;;  7 ROP     Package removal - Request of Porter.
 ;;;  8 ROSRM   Package removal - Request of Stable Release Manager.
 ;;;  9 RoQA    Package removal - Requested by the QA team.
+;;;            ... actually by anyone if no rdeps, low popcom, no unloads
+;;;            ... in 5 years etc.
 ;;; 10 other   Not a package removal request, report other problems.
 ;;;
 (defun tinydebian-bts-mail-ctrl-remove-package
@@ -6073,8 +6328,8 @@ Optionally from BTS which defaults to \"debian\"."
    (let ((title (tinydebian-bts-mail-title-read))
          (bug (tinydebian-bts-mail-ask-bug-number)))
      (when (and bug
-               (or (null title)
-                   (not (string-match bug title))))
+                (or (null title)
+                    (not (string-match bug title))))
        (tinydebian-debian-bug-info-macro bug nil
          (setq title (field "subject"))))
      (list
@@ -6273,7 +6528,7 @@ Default owner is the value of 'From:', that is `user-mail-address'."
 ;;;
 (defun tinydebian-bts-mail-ctrl-bug-package-unsubscribe
   (package-name &optional email send)
-  "Compose PTS control message using PACKAGE for unsubscription.
+  "Compose BTS control message using PACKAGE for unsubscription.
 
 Cancel receiving bug report notifications for PACKAGE.
 
@@ -6310,7 +6565,7 @@ Return:
 ;;;
 (defun tinydebian-bts-mail-ctrl-bug-package-subscribe
   (package-name &optional email send)
-  "Compose PTS control message using PACKAGE for subscription.
+  "Compose BTS control message using PACKAGE for subscription.
 
 Subscribing to a package enables receiving all bug reports. This is
 useful for NMUers that upload fixes and want to follow if NMU causes
@@ -6672,7 +6927,7 @@ Returned list is
 ;;; Priority: extra
 ;;; Section: admin
 ;;; Installed-Size: 45
-;;; Maintainer: Nicolás Lichtmaier <nick@debian.org>
+;;; Maintainer: Nicolas Lichtmaier <nick@debian.org>
 ;;; Version: 0.35-10
 ;;; Depends: libc6 (>= 2.2.4-2), cron (>= 3.0pl1-42)
 ;;; Recommends: mail-transport-agent
@@ -6893,12 +7148,12 @@ ask with PROMPT."
   (let ((dpkg tinydebian--bin-dpkg))
     (or package
         (setq package
-             (tinydebian-trim-blanks
-              (read-string
-               (or prompt
-                   "[TinyDebian] Package name: ")
-               (not 'initial-input)
-               'tinydebian--package-info-history))))
+              (tinydebian-trim-blanks
+               (read-string
+                (or prompt
+                    "[TinyDebian] Package name: ")
+                (not 'initial-input)
+                'tinydebian--package-info-history))))
     (tinydebian-string-p package "No package name given")
     (or (and dpkg
              (tinydebian-package-status-main package)))))
@@ -6951,8 +7206,8 @@ Example:
               (setq ver (cdr-safe (assoc "Version" info2)))
               ;; cut first few characters
               (when (setq desc (or (cdr-safe (assoc "Description" info2))
-                                  (cdr-safe (assoc "Description-en1" info2))
-                                  (cdr-safe (assoc "Description-en" info2))))
+                                   (cdr-safe (assoc "Description-en1" info2))
+                                   (cdr-safe (assoc "Description-en" info2))))
                 (setq desc (ti::string-left desc 45)))
               (setq str
                     (concat
@@ -7115,8 +7370,8 @@ Return string. Something like:
              (relassoc (cdr-safe  (assoc 'release elt)))
              (release
               (if (or (null match)
-                     (and (stringp relassoc)
-                          (string-match match relassoc)))
+                      (and (stringp relassoc)
+                           (string-match match relassoc)))
                   (tinydebian-bug-system-info-apt-cache-policy-parse-release
                    elt "a"))))
         (when release
@@ -7265,7 +7520,7 @@ Locale: %s"
 ;;;###autoload
 (defun tinydebian-bug-report-debian-bts-mail (info)
   "Submit Debian bug report. INFO is alist of attributes for a package.
-An example ´reportbug(1)' looks like
+An example `reportbug(1)' looks like
 
 To: submit@bugs.debian.org
 Subject: autolog ....
@@ -7289,13 +7544,13 @@ ii  libc6                         2.2.5-3    GNU C Library: Shared libraries an"
    (list (tinydebian-package-info)))
   (let ((status  (or (cdr-safe (assoc "Status" info)) ""))
         (package (or (cdr-safe (assoc "Package" info)) ""))
-       tmp)
+        tmp)
     (cond
      ((null info)
       (message "TinyDebian: no INFO available to send a bug report."))
      ((string-match "not-installed" status)
       (message "TinyDebian: bug report skipped. pkg [%s] status is [%s]"
-              package status))
+               package status))
      ((setq tmp (assoc "E" info))
       (message "TinyDebian: bug report skipped. pkg [%s] error is [%s]"
                package (cdr tmp)))
@@ -7311,22 +7566,21 @@ ii  libc6                         2.2.5-3    GNU C Library: Shared libraries an"
           (pop-to-buffer (get-buffer-create name))
           (erase-buffer)
           (let ((subject
-                (read-string
-                 "[Debian BTS] bug Subject> "
-                 (if package
-                     (format "%s: " package))
-                 (not 'initial-input)
-                 'tinydebian--bug-report-debian-bts-mail-subject-history)))
-            (mail-setup
-             (tinydebian-bts-email-submit) subject nil nil nil nil)
-           (message-mode)
-           (tinydebian-bts-insert-headers)
-           (tinydebian-bug-report-mail-insert-details info)
-           (when (string-match "patch" subject)
-             (save-excursion
-               (goto-char (point-min))
-               (when (re-search-forward "^Severity.*\r?[\n]" nil t)
-                 (insert "tags: patch"))))))))))))
+                 (read-string
+                  "[Debian BTS] bug Subject> "
+                  (if package
+                      (format "%s: " package))
+                  (not 'initial-input)
+                  'tinydebian--bug-report-debian-bts-mail-subject-history)))
+            (tinydebian-mail-setup (tinydebian-bts-email-submit) subject)
+            (message-mode)
+            (tinydebian-bts-insert-headers)
+            (tinydebian-bug-report-mail-insert-details info)
+            (when (string-match "patch" subject)
+              (save-excursion
+                (goto-char (point-min))
+                (when (re-search-forward "^Severity.*\r?[\n]" nil t)
+                  (insert "tags: patch"))))))))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -7357,8 +7611,8 @@ ii  libc6                         2.2.5-3    GNU C Library: Shared libraries an"
         (erase-buffer)
         (let ((subject (read-string
                         (format "[GNU BTS %s] bug Subject: " package))))
-          (mail-setup
-            (tinydebian-gnu-bts-email-compose "submit") subject nil nil nil nil))
+          (tinydebian-mail-setup
+            (tinydebian-gnu-bts-email-compose "submit") subject))
         (message-mode)
         (ti::mail-text-start 'move)
         (cond
@@ -7389,8 +7643,8 @@ ii  libc6                         2.2.5-3    GNU C Library: Shared libraries an"
       (erase-buffer)
       (let ((subject (read-string
                       (format "[Launcpad BTS %s] bug Subject: " ""))))
-        (mail-setup
-         (tinydebian-launchpad-email-compose "new") subject nil nil nil nil))
+        (tinydebian-mail-setup
+          (tinydebian-launchpad-email-compose "new") subject))
       (message-mode)
       (ti::mail-text-start 'move)
       (insert "
index 2e63065..b0236ad 100644 (file)
@@ -1,8 +1,10 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinydiff.el --- Diff and patch minor mode. Browsing, patching.
 
 ;; This file is not part of Emacs
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 
 (require 'tinylibm)
 
+(eval-when-compile
+  (require 'cl-lib))
+
 (eval-and-compile
   (ti::package-require-view)
   (defvar diff-command)        ;; Byte compiler silencer
@@ -859,7 +864,6 @@ Eg. TAB that completes current filename."
   (setq tinydiff--minibuffer-map (copy-keymap minibuffer-local-map))
   ;;
   ;;  Here we define nice tab filename completion inside minibuffer
-  ;;  This may be superflous, but what the heck :-)
   ;;
   (define-key tinydiff--minibuffer-map "\t"
     'tinydiff-minibuffer--complete-filename)
@@ -1226,7 +1230,7 @@ Eg.
     (when (string-match re line)
       (setq args (match-string 1 line)
             list (split-string line)
-            copy (copy-list list))
+            copy (cl-copy-list list))
       (tinydiff-debug fid "ARGS" args "LIST" list)
       (setq args list)
       (while (setq elt (pop copy))
@@ -1237,7 +1241,7 @@ Eg.
           ;;   -- all-the-elements before
           ;;   -- and the rest
           (push (list i
-                      (copy-list prev-list)
+                      (cl-copy-list prev-list)
                       (nthcdr i list))
                 r-list)
           (tinydiff-debug fid "R-LIST>>" r-list))
@@ -1261,7 +1265,7 @@ Eg.
         (setq elt  (car r-list))
         (setq args (nth 2 elt))         ;Revision and rest of the args
         (setq args                      ;car-list to the beginning
-              (reverse (union (reverse (nth 1 elt)) args))))
+              (reverse (cl-union (reverse (nth 1 elt)) args))))
        ((eq (length r-list) 1)          ;Only one -r
         (setq elt (car r-list))
         (setq args (nth 2 elt))         ;Revision and rest of the args
@@ -1291,7 +1295,7 @@ Eg.
             (tinydiff-debug fid "2>CHANGED" tmp))))
         (push tmp args)                 ;--> '(-rN.N -rN.N FILE)
         (setq args                      ;car-list to the beginning
-              (reverse (union (reverse (nth 1 elt)) args)))))
+              (reverse (cl-union (reverse (nth 1 elt)) args)))))
       (setq args (ti::list-to-string args))
       (tinydiff-debug fid "args" args  )
       (delete-region (line-beginning-position) (line-end-position))
@@ -2042,7 +2046,7 @@ Input:
                 guess-path (concat guess-dir guess-file)))
       (unless fid ;; XEmacs byte compiler silencer
         (setq fid nil))
-      (setq verb (or arg verb (interactive-p)))
+      (setq verb (or arg verb (called-interactively-p 'interactive)))
       (tinydiff-debug fid "in:" arg beg end)
       (or orig-buffer
           (setq orig-buffer (current-buffer)))
@@ -2843,7 +2847,7 @@ Activate only if point underneath has 'mouse-property."
   (interactive)
   (let ((region (tinydiff-block-region))
        buffer-read-only)
-    (if (and (interactive-p)
+    (if (and (called-interactively-p 'interactive)
              (null region))
         (message "TinyDiff: can't determine diff block bounds.")
       (delete-region (car region) (cdr region)))))
@@ -2865,7 +2869,7 @@ References:
                       "")))
        (buffer  (current-buffer))
        file)
-    (if (and (interactive-p)
+    (if (and (called-interactively-p 'interactive)
              (null region))
         (message "TinyDiff: can't determine diff hunk bounds.")
       (setq file (tinydiff-file-to-patch))
index 6ffb3da..c289635 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinydired.el --- Dired enchancements. Backgroud Ange ftp support
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -2015,7 +2017,7 @@ If you have loaded dired-x and it contains variable
     (if (member file tinydired--file-store)
         (message "TinyDireds: %s already in storage." file)
       (push  file tinydired--file-store) file)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (tinydired-store-show))))
 
 ;;; ----------------------------------------------------------------------
@@ -2025,7 +2027,7 @@ If you have loaded dired-x and it contains variable
   (interactive)
   (let ((file (tinydired-get-filename)))
     (setq tinydired--file-store (delete file tinydired--file-store))
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "Tinydired: %s" (ti::list-to-string tinydired--file-store)))))
 
 ;;; ----------------------------------------------------------------------
@@ -2034,7 +2036,7 @@ If you have loaded dired-x and it contains variable
   "Clear variable holding files."
   (interactive)
   (setq tinydired--file-store nil)
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (message "Tinydired: Storage cleared.")))
 
 ;;; ----------------------------------------------------------------------
@@ -2043,7 +2045,7 @@ If you have loaded dired-x and it contains variable
   "Delete current filename from storage."
   (interactive)
   (let ((file   (tinydired-get-filename))
-       (verb   (interactive-p))
+       (verb   (called-interactively-p 'interactive))
        (store  tinydired--file-store)
        list)
     (if (null store)
@@ -2060,7 +2062,7 @@ If you have loaded dired-x and it contains variable
 (defun tinydired-store-delete-marked ()
   "Delete marked files from store."
   (interactive)
-  (tinydired-store-add-marked 'delete (interactive-p)))
+  (tinydired-store-add-marked 'delete (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
index 0233176..4ccbb49 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;; tinyeat.el --- Eat blocks of text at point, forward and backward
 
 ; This file is not part of Emacs
 
 ;;{{{ Documentation
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index 1657308..d0c94d0 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyef.el --- (E)lectric (f)ile minor mode. Easy C-x C-f filename composing
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -577,7 +579,7 @@ Current keymap:
         bolp
         hits)
     (if (or (null act)                  ;no action recognized
-            (and (interactive-p)
+            (and (called-interactively-p 'interactive)
                  (not (eq (selected-window) (minibuffer-window)))
                  (prog1 t
                    (setq tinyef-mode nil))))
index 5c47d25..5bd898f 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinygnus.el --- Gnus Plug-in. Additional functions. UBE fight etc.
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 (autoload 'gnus-set-mode-line                 "gnus-sum")
 (autoload 'nnfolder-group-pathname            "nnfolder")
 
-(eval-when-compile
-  (require 'advice))
+(require 'advice)
 
 (eval-and-compile
   ;;  Yes, this variable is purposively put to "tinypath" package.
   ;;  See that package for better explanation.
-  ;;
   (defconst tinypath--gnus-load-path
     (locate-library "gnus"))
   (message "tinygnus.el: Gnus path %s"
       (message "\
 tinymail.el: ** No bbdb.el along load-path. Please do not compile this file.
                 http://bbdb.sourceforge.net/")
+    ;; BBDB is available
     (autoload 'bbdb-search-simple        "bbdb")
     (autoload 'bbdb-canonicalize-address "bbdb")
     (autoload 'bbdb-record-net           "bbdb")
@@ -460,7 +461,7 @@ tinymail.el: ** No bbdb.el along load-path. Please do not compile this file.
   (defun tinygnus-check-gnus-installation-libraries ()
     "Verify that new enough Gnus version is installed to the Emacs."
     (let ((i 0))
-      (flet ((load-it
+      (cl-flet ((load-it
               (lib)
               (let* ((name   (if (stringp lib)
                                  lib
@@ -1256,8 +1257,8 @@ to the article buffer."
 You can refer to `file' when processing the files. Stop loop with
 command (return)."
   `(let ((files (tinygnus-read-files-from-dir ,dir)))
-     (when (or (not (interactive-p))
-               (and (interactive-p)
+     (when (or (not (called-interactively-p 'interactive))
+               (and (called-interactively-p 'interactive)
                     (y-or-n-p
                      (format
                       "Found %d files, Proceed " (length files)))))
@@ -1360,7 +1361,7 @@ See function `tinygnus-article-ube-send-to-postmasters'."
        (read
         (load file)
         (put 'tinygnus--nslookup-table 'pos (length tinygnus--nslookup-table))
-        (if (interactive-p)
+        (if (called-interactively-p 'interactive)
             "TinyGnus: nslookup loaded."))
        (t
         (ti::write-file-variable-state
@@ -1495,7 +1496,7 @@ confirmations."
      (run-hooks 'tinygnus--summary-ube-send-to-postmasters-hook)
      (setq kill-flag t)
      (incf  count))
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "TinyGnus: Mapped %d ube messgaes" count))))
 
 ;;; ----------------------------------------------------------------------
@@ -1720,6 +1721,7 @@ Return:
        done
        tmp-list
        addr-list
+       ns-err-list
        ip)
     (unless fid ;; No-op. XEmacs byte compiler silencer.
       (setq fid nil))
@@ -2323,7 +2325,7 @@ Input:
   (interactive)
   (let ((buffer (get-buffer-create tinygnus--output-buffer)))
     (ti::erase-buffer buffer)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "TinyGnus: %s cleared" tinygnus--output-buffer))))
 
 ;;}}}
@@ -2758,7 +2760,7 @@ Contact maintainer."))))
 
 ;;; ----------------------------------------------------------------------
 ;;; Note: if yo hit just "3 g"; GNUS will read all level up till 3,
-;;; so you would actually read levels 1,2,3  and not just 3 :-)
+;;; so you would actually read levels 1,2,3 and not just 3.
 ;;;
 (defun tinygnus-gnus-group-get-news-symbolic (elt)
   "Ask for symbolic name which represents level where to get news.
@@ -2813,7 +2815,7 @@ References:
 (put 'tinygnus-debug-gnus-macro 'edebug-form-spec '(body))
 (defmacro tinygnus-debug-gnus-macro (func &rest body)
   "Instantiate `pr' function to print debug information about FUNC."
-  `(flet ((pr (x y)
+  `(cl-flet ((pr (x y)
              (tinygnus-gnus-debug-insert-line x y ,func)))
      ,@body))
 
@@ -2904,14 +2906,14 @@ Possibly REPLCE existing entry."
             (message "TinyLisp: No files %s %s" group dir)
           (message "TinyGnus: Adding to `nnml-group-alist' %s" dir)
           (if replace
-              (aput 'nnml-group-alist group range))
+              (push (cons group dir) 'nnml-group-alist))
           (push (list group range) nnml-group-alist))))))
 
 ;;; 5.8.2
 (defadvice gnus-open-server (around tinygnus-debug dis)
   ;; (gnus-command-method)
   ;; "Open a connection to GNUS-COMMAND-METHOD."
-  (flet ((pr (x y)
+  (cl-flet ((pr (x y)
              (tinygnus-gnus-debug-insert-line x y 'gnus-open-server )))
     (pr '(CALL-ARGS gnus-command-method)
         (list gnus-command-method))
@@ -2947,7 +2949,7 @@ Possibly REPLCE existing entry."
 (defadvice gnus-summary-read-group-1 (around t-tinygnus-debug dis)
   "Output trace to tinygnus--debug-buffer"
   ;; (group show-all no-article kill-buffer no-display &optional select-articles)
-  (flet ((pr (x y)
+  (cl-flet ((pr (x y)
              (tinygnus-gnus-debug-insert-line x y 'gnus-summary-read-group-1 )))
     ;; Killed foreign groups can't be entered.
     (when (and (not (gnus-group-native-p group))
@@ -3113,7 +3115,7 @@ Possibly REPLCE existing entry."
   ;;  "Select newsgroup GROUP.
   ;;If READ-ALL is non-nil, all articles in the group are selected.
   ;; If SELECT-ARTICLES, only select those articles from GROUP."
-  (flet ((pr (x y)
+  (cl-flet ((pr (x y)
              (tinygnus-gnus-debug-insert-line x y 'gnus-select-newsgroup)))
     (pr '(CALL-ARGS group read-all select-articles)
         (list group read-all select-articles))
@@ -3576,7 +3578,7 @@ Possibly REPLCE existing entry."
          tmp1
          tmp2)
     ;;  make shorter function name
-    (flet ((pr (x y)
+    (cl-flet ((pr (x y)
                (tinygnus-gnus-debug-insert-line x y)))
       (with-current-buffer buffer
         (tinygnus-gnus-debug-on)
index b93e658..eca5700 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyhotlist.el --- Hot-list of important buffers, files(ange-ftp), dired
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C) 1995-2012 Jari Aalto
+;; Copyright (C) 1995-2016 Jari Aalto
 ;; Keywords:     tools
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
index 6cc39d0..9b7dbba 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyigrep.el --- Top level interface to igrep.el
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -40,7 +42,7 @@
 ;;     (require 'tinyigrep)
 ;;
 ;;      ** YOU NEED igrep.el before you can use this package
-;;      ** See <http://groups.google.com/groups?group=gnu.emacs.sources>
+;;      ** https://www.emacswiki.org/emacs/igrep.el
 ;;
 ;; Or prefer autoload: your emacs loads this package only when you need it.
 ;; Put your customizations to separate file emacs-rc-tinyigrep.el and add
 
 (require 'tinylibm)
 
-(eval-and-compile
-  ;; FIXME: Function `union' from cl package called at runtime
-  (autoload 'union "cl-seq"))
-
 (eval-when-compile
-  (require 'cl))
+  (require 'cl)
+  (autoload 'union "cl-union"))
 
 ;;  When tinyigrep.el is compiled, this strange error occurs:
 ;;  ** the function `igrep-read-args' is not known to be defined
     (error
      (error "\
   ** tinyigrep.el: Hm, no igrep.el along `load-path'.
-                   You can find it at <http://groups.google.com/groups?group=gnu.emacs.sources>
+                   http://www.emacswiki.org/emacs/download/igrep.el
                    %s"
             (prin1-to-string error))))
 
@@ -1545,9 +1544,8 @@ GREP is program to used for grepping. Default is `egrep'."
              (ti::compat-Info-directory-list)))))
     (message "TinyIgrep: Wait, initialising default databases...done")))
 
-
 ;;;### (autoload 'tinyigrep-debug-toggle "tinyigrep" t t)
-(eval-and-compile (ti::macrof-debug-standard "tinyigrep" ":-"))
+(eval-and-compile (ti::macrof-debug-standard "tinyigrep" "--"))
 
 ;;}}}
 ;;{{{ Install
@@ -1952,11 +1950,11 @@ References:
       (or (setq files
                 (let ((ans (read-from-minibuffer
                             "TinyIgrep file pattern(s): ")))
-                  (mapcar '(lambda (x)
-                             (format "%s%s"
-                                     (file-name-as-directory
-                                      default-directory)
-                                     x))
+                  (mapcar (lambda (x)
+                           (format "%s%s"
+                                   (file-name-as-directory
+                                    default-directory)
+                                   x))
                           (split-string ans))))
           (error "TinyIgrep: No files for `%s'" ans))
       (setq pattern
index 9056525..8e9d45e 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyindent.el --- Like indented-text-mode, but minor-mode.
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1994-2012 Jari Aalto
+;; Copyright (C)    1994-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index f1635f9..0acddec 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyirc.el --- IRC related utilities for Emacs
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    2003-2012 Jari Aalto
+;; Copyright (C)    2003-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -1235,7 +1237,7 @@ Mode description:
   (tinyirc-mode-map-activate)           ;turn on the map
   (setq  mode-name   tinyirc--mode-name)
   (setq  major-mode 'tinyirc-pastebot-mode) ;; for C-h m
-  (when (interactive-p)
+  (when (called-interactively-p 'interactive)
     (message
      (substitute-command-keys
       (concat
index 886377d..8fc708f 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinylib.el --- Library of general functions
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -403,8 +405,8 @@ If STRING is not stringp, then returns STRING as is."
 (defun ti::string-mangle (string)
   "Mangle STRING ie. make STRING unreadable.
 Same mangling is performed for the same STRING. Mangling can't be reversed."
-  (let* ((ch-list (coerce string 'list))
-         ;; (coerce list 'string) to get list of ints to string
+  (let* ((ch-list (cl-coerce string 'list))
+         ;; (cl-coerce list 'string) to get list of ints to string
          (abc "zaybxcwdveuftgshriqjpkolnm0918273645ZAYBXCWDVEUFTGSHRIQJPKOLNM")
          (len (length abc))
          (ret "")
@@ -1627,7 +1629,7 @@ Input
   ZERO-TREAT    If non-nil, consider version numbers starting with 0.NN
                 never than 2.1. In this case it is assumed
                 that zero based versions are latest development releases."
-  (flet ((version (str regexp)
+  (cl-flet ((version (str regexp)
                   (if (string-match regexp str)
                       (string-to-number (match-string 1 str))
                     0)))
@@ -1983,7 +1985,7 @@ Return:
          (elt    (assq syntax ti::var-syntax-info))
          ret)
     (or verb
-       (setq verb (interactive-p)))
+       (setq verb (called-interactively-p 'interactive)))
     (setq ret
           (concat
            (char-to-string syntax)
@@ -2365,8 +2367,7 @@ Return:
        end
        bol
        leading)
-    (save-excursion
-      (set-buffer (or data-buffer (current-buffer)))
+    (with-current-buffer (or data-buffer (current-buffer))
       (and (re-search-forward beg-re nil t)
            (setq bol (line-beginning-position))
            (setq beg (match-beginning 0))
@@ -3123,7 +3124,7 @@ Example:
                   ;; Maybe last line does not have newline?
                   (when (looking-at ".*\015$")
                     (end-of-line)
-                    (delete-backward-char 1)))
+                    (delete-char -1)))
               ;; ....................................... unix --> dos ...
               (end-of-line)
               (if (not (char-equal (preceding-char) ?\015))
@@ -3254,7 +3255,6 @@ Return:
         (forward-line 1)))))
 
 ;;; ----------------------------------------------------------------------
-;;; - There must be removing function too.. :-)
 ;;; #defalias (defalias 'remove-line-numbers 'ti::buffer-remove-line-numbers)
 ;;;
 (defsubst ti::buffer-remove-line-numbers (beg end &optional re level)
@@ -3847,7 +3847,7 @@ Return:
        point
        ret)
     (or verb
-       (setq verb (interactive-p)))
+       (setq verb (called-interactively-p 'interactive)))
     ;; ... ... ... ... ... ... ... ... ... ... ... ... . preliminaries ...
     (setq
      re   (cond
@@ -4301,14 +4301,13 @@ Key C-c h   replaces original C-h call
       (define-key key-translation-map "\177" "\C-h")
       (define-key key-translation-map "\C-h" "\177")
       (global-set-key BACKSPACE 'backward-delete-char)
-      (flet ((key-warning
-              (key def)
-              (message "tinylib: Warning, key already occupied: %s %s"
-                       key def)))
-        ;; (ti::define-key-if-free global-map
-        ;;   "\C-x\C-?" 'help-for-help 'key-warning)
-        (ti::define-key-if-free global-map
-                                "\C-ch"    'help-command  'key-warning)))))
+      (ti::define-key-if-free
+       global-map
+       "\C-ch"
+       'help-command
+       (lambda (key def)
+        (message "tinylib: Warning, key already occupied: %s %s"
+                 key def))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -4931,7 +4930,7 @@ Sort can optionally be NUMERIC, REVERSE or CASE sensitive.
 
 Return:
   sorted list."
-  (let ((clist (copy-list list)))      ;sort modifies it otw.
+  (let ((clist (cl-copy-list list)))      ;sort modifies it otw.
     (sort clist
           (function
            (lambda (l r &optional ret elt1 elt2)
@@ -5464,7 +5463,7 @@ Return:
           (setq curr-files (if (file-accessible-directory-p dir)
                                (directory-files dir nil ".\\.elc?$" t)))
           (and curr-files
-               (interactive-p)
+               (called-interactively-p 'interactive)
                (message "Checking %d files in %s..." (length curr-files) dir))
           (setq files-seen-this-dir nil)
           (while curr-files
@@ -5491,7 +5490,7 @@ Return:
             (setq curr-files (cdr curr-files)))) ;; if
         (setq path       (cdr path)
               true-names (cdr true-names)))
-      (if (interactive-p)
+      (if (called-interactively-p 'interactive)
           (let ((msg
                  (if out-buffer
                      (let ((n (/ (count-lines (point-min) (point-max)) 3)))
@@ -5745,13 +5744,13 @@ if MODE is non-nil, return empty string instead."
 ;;;
 (defsubst ti::file-path-to-unix (path)
   "Convert PATH to Unix forward slash format."
-  (replace-char-in-string ?/ ?\\  path))
+  (subst-char-in-string ?\\ ?/ path))
 
 ;;; ----------------------------------------------------------------------
 ;;;
 (defsubst ti::file-path-to-msdos (path)
   "Convert PATH to MS-DOS backward slash format."
-  (replace-char-in-string ?\\ ?/  path))
+  (subst-char-in-string ?/ ?\\ path))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -5765,10 +5764,10 @@ You need to call this function if you pass a absolute path to
 external processes. Emacs in the other hand can handle both \\ and /
 internally."
   (if (ti::emacs-type-win32-p)
-      (replace-char-in-string
-       ?\\ ?/  (concat (file-name-as-directory dir) (or file "")))
-    (replace-char-in-string
-     ?/ ?\\  (concat (file-name-as-directory dir) (or file "")))))
+      (ti::file-path-to-msdos (concat (file-name-as-directory dir)
+                                     (or file "")))
+    (ti::file-path-to-unix (concat (file-name-as-directory dir)
+                                  (or file "")))))
 
 ;;; ----------------------------------------------------------------------
 ;;; #defalias (defalias 'which 'ti::file-get-load-path)
@@ -6106,7 +6105,7 @@ Return:
         user
         host
         ret)
-    (setq verb      (or verb (interactive-p))
+    (setq verb      (or verb (called-interactively-p 'interactive))
           port      (or port 79)
           timeout   (or timeout 25))
     (if (not (string-match "^\\([^ \t]+\\)@\\([^[ \t]+\\)" email))
@@ -6139,7 +6138,7 @@ Return:
                 (ti::buffer-lf-to-crlf 'dos2unix)))))
       (when verb
         (message "Fingering %s ...done" email))
-      (if (interactive-p)
+      (if (called-interactively-p 'interactive)
           (pop-to-buffer buffer))
       (if connection
           buffer ret))))
@@ -6178,7 +6177,7 @@ Return:
   (let (connection
         host
         ret)
-    (setq verb      (or verb (interactive-p))
+    (setq verb      (or verb (called-interactively-p 'interactive))
           port      (or port 80)
           timeout   (or timeout 60))
     (if (not (string-match "^http://\\([^/]+\\)\\(/.*\\)" command))
@@ -6221,7 +6220,7 @@ Return:
           (ti::buffer-lf-to-crlf 'dos2unix))))
     (when verb
       (message "Http %s ...done" host))
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (pop-to-buffer buffer))
     (list buffer ret)))
 
@@ -6255,7 +6254,7 @@ Command will not return until the process has finished."
          (flist         (ti::list-join files))
          (cmd           (concat zcmd " " zip-file " " flist)))
     (call-process cmd nil shell-buffer)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (display-buffer shell-buffer))
     shell-buffer))
 
@@ -6596,7 +6595,7 @@ All advice classes ['any] are ena/disabled for REGEXP.
 
 Input:
 
-  SINGLE-OR-LIST        function of list of functions.
+  SINGLE-OR-LIST        one function or list of functions.
   REGEXP                advice name regexp. Should normally have ^ anchor
   DISABLE               flag, if non-nil then disable
   VERB                  enable verbose messages
@@ -6777,7 +6776,7 @@ Input:
               (setq buffer status)
               (setq status t)))))
           (when buffer
-            (when (and (interactive-p)
+            (when (and (called-interactively-p 'interactive)
                        (null status))
               (or
                (y-or-n-p (format "Buffer `%s' missing, continue? Are you sure? "
@@ -6919,7 +6918,7 @@ Input:
 ;;; ......................................................... &package ...
 ;;; - Here is some special functions. When you insert some example to
 ;;;   your package, you can convert functions and text directly to
-;;;   "poor man's shar" format :-)
+;;;   "poor man's shar" format.
 ;;; - With function ti::package-make-mode-magic, you just
 ;;;
 ;;;   1. Be in lisp mode
@@ -6954,7 +6953,7 @@ Return:
   (interactive "sLibrary: ")
   (let ((tmp  "*ti::pkg*")
        (file (locate-library lib))
-       (verb (interactive-p))
+       (verb (called-interactively-p 'interactive))
        ;;    There has to be " " after the ":" otherwise it's not
        ;;    rcs ident(1) compatible. Also before the last $ ,
        ;;    there must be space.
@@ -7082,7 +7081,7 @@ Return:
   (interactive "r")
   (let ((source (current-buffer))       ;source buf
        (m      major-mode)             ;we must use same mode
-       (verb   (interactive-p))
+       (verb   (called-interactively-p 'interactive))
        (reg    ?p))
     (with-temp-buffer
       (insert-buffer-substring source beg end)
@@ -7918,26 +7917,30 @@ If mouse is not supported, return nil."
     (let ( ;; (frame (car (mouse-position)))
           (x  (cadr (mouse-position)))
           (y  (cddr (mouse-position))))
-      ;;  window-list returns all windows starting from TOP. Count
-      ;;  Lines in every window and compare that to mouse-position
-      (let ((win (get-buffer-window (current-buffer)))
-            (count 0))
-        (save-window-excursion
-          (dolist (elt (window-list))
-            (when (eq elt win)
-              (return))
-            (select-window elt)
-            ;;  Modeline is not counted as +1
-            (setq count (+ count (window-height)))))
-        ;; (ti::d! count x y)
-        (list (1+ (- y count))
-              ;;  In Emacs 21.x there is a "fringe" that mouse-position
-              ;;  reports as X=0,
-              (if (eq x 0)
-                  ;; Consider "fringe" as column 0
-                  0
-                ;; Removed "fringe" count
-                (1- x)))))))
+      (if (not (and x y))              ;No info available
+         (list
+          (ti::current-line-number)
+          (current-column))
+       ;;  window-list returns all windows starting from TOP. Count
+       ;;  Lines in every window and compare that to mouse-position
+       (let ((win (get-buffer-window (current-buffer)))
+             (count 0))
+         (save-window-excursion
+           (dolist (elt (window-list))
+             (when (eq elt win)
+               (return))
+             (select-window elt)
+             ;;  Modeline is not counted as +1
+             (setq count (+ count (window-height)))))
+         ;; (ti::d! count x y)
+         (list (1+ (- y count))
+               ;;  In Emacs 21.x there is a "fringe" that mouse-position
+               ;;  reports as X=0,
+               (if (eq x 0)
+                   ;; Consider "fringe" as column 0
+                   0
+                 ;; Removed "fringe" count
+                 (1- x))))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -7956,9 +7959,10 @@ If mouse is not supported, return nil."
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defun ti::compat-mouse-call-original-function (minor-mode-symbol &optional event)
+(defun ti::compat-mouse-call-original-function
+  (minor-mode-symbol &optional event)
   "Return original function behind MINOR-MODE-SYMBOL with mouse EVENT.
-See. `ti::-xe-mouse-call-original'."
+See. `ti::xemacs--mouse-call-original'."
   (let (ret
        flyspell-p)
     (or event
@@ -7991,7 +7995,7 @@ See. `ti::-xe-mouse-call-original'."
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defvar ti::-xe-mouse-call-original nil "See ti::keymap-mouse-call-original.")
+(defvar ti::xemacs--mouse-call-original nil "See ti::keymap-mouse-call-original.")
 
 (defun ti::compat-mouse-call-original (minor-mode-symbol &optional event)
   "Execute original mouse function by turning of MINOR-MODE-SYMBOL.
@@ -8015,12 +8019,12 @@ Note:
 
 Sets global:
 
-  `ti::-xe-mouse-call-original'"
+  `ti::xemacs--mouse-call-original'"
   ;; Without the following test we could easily end up in a endless
   ;; loop in case we would call a function which would call us.
-  (if ti::-xe-mouse-call-original ;; We're looping already
+  (if ti::xemacs--mouse-call-original ;; We're looping already
       nil
-    (setq ti::-xe-mouse-call-original t)
+    (setq ti::xemacs--mouse-call-original t)
     (unwind-protect
         (let* ((orig-buf (current-buffer))
                (mouse-func (ti::compat-mouse-call-original-function
@@ -8052,7 +8056,7 @@ Sets global:
                                           'ti::orig-value)))))
       ;; .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..  unwind  ..
       ;; This is always executed, even if the above generates an error.
-      (setq ti::-xe-mouse-call-original nil))))
+      (setq ti::xemacs--mouse-call-original nil))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -8392,7 +8396,7 @@ Return:
        list
        item
        ret)
-    (flet ((get-elt (elt place)
+    (cl-flet ((get-elt (elt place)
                     (if (vectorp elt)
                         (aref elt place)
                       (nth place elt))))
@@ -9307,7 +9311,7 @@ DEBUG-VARIABLE DEBUG-BUFFER."
                      buffer
                      (y-or-n-p "Clear debug buffer?"))
             (ti::erase-buffer buffer))
-          (if (interactive-p)
+          (if (called-interactively-p 'interactive)
               (message "Debug is %s"
                        (if ,debug-variable
                            "on"
index feddd2b..c1bbcd9 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1998-2012 Jari Aalto
+;; Copyright (C)    1998-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -74,7 +74,7 @@
 
 (provide 'tinyliba)
 
-(defconst tinyliba-version-time "2010.1208.0809"
+(defconst tinyliba-version-time "2013.0613.1737"
   "Latest version number as last modified time.")
 
 (autoload 'with-timeout      "timer"        "" nil 'macro)
@@ -377,17 +377,6 @@ This function is run only once at tinynyliba.el load."
 
     ) ;; when-nil
 
-  ;; assoc.el 20.4
-
-  (autoload 'asort                                "assoc" "" nil)
-  (autoload 'aelement                             "assoc" "" nil)
-  (autoload 'aheadsym                             "assoc" "" nil)
-  (autoload 'anot-head-p                          "assoc" "" nil)
-  (autoload 'aput                                 "assoc" "" nil)
-  (autoload 'adelete                              "assoc" "" nil)
-  (autoload 'aget                                 "assoc" "" nil)
-  (autoload 'amake                                "assoc" "" nil)
-
   ;;}}}
   ;;{{{ Backward compatible lib: tinylibb.el
 
index ae2842b..7bc68f4 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1998-2012 Jari Aalto
+;; Copyright (C)    1998-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 (eval-and-compile
   (autoload 'ti::replace-match "tinylibm"))
 
-(defconst tinylibb-version-time "2012.0105.1852"
+(defconst tinylibb-version-time "2016.1029.0813"
   "Latest version number as last modified time.")
 
 ;;; ....................................................... &emulation ...
 
-(defun-maybe replace-char-in-string (ch1 ch2 string)
-  ;;  "Search CH1, change it with CH2 in STRING."
-  (nsubstitute ch1 ch2 string))
+(defun-maybe subst-char-in-string (old new string)
+  "Search OLD character with NEW in STRING. Changes STRING."
+  (cl-nsubstitute new old string))
 
 (defun-maybe bin-string-to-int (8bit-string)
   "Convert 8BIT-STRING  string to integer."
@@ -197,12 +197,14 @@ PAD says to padd hex string with leading zeroes."
                    (ti::string-value j)))))
 
 ;;; .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. higher Emacs . .
-;;:  Features found from new emacs only 20.xx
+;;:  Features found from Newer Emacs
 
 (defun-maybe byte-compiling-files-p ()
   "Return t if currently byte-compiling files."
   (string= (buffer-name) " *Compiler Input*"))
 
+(defmacro-maybe cl-flet (&rest args)
+  `(flet ,@args))
 
 (defmacro-maybe with-output-to-file (file &rest body)
   "Open FILE and run BODY.
@@ -270,7 +272,7 @@ count-lines function , but (count-char-in-region ?\\n)"
       (goto-char (min beg end))
       (while (search-forward char end  t)
         (incf  i)))
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "%d hits in region." i))
     i))
 
@@ -318,6 +320,10 @@ Default is to convert all tabs in STRING with spaces."
 
 ;;; ........................................................... &other ...
 
+(unless (fboundp 'called-interactively-p) ;23.2
+  (defmacro called-interactively-p (&rest args)
+    `(called-interactively-p 'interactive)))
+
 (unless (fboundp 'with-buffer-modified)
   ;;  Appeared in Emacs 21.2
   (put 'with-buffer-modified 'lisp-indent-function 0)
@@ -337,8 +343,8 @@ seen my `buffer-read-only'
    (set-text-properties 1 10 '(face highlight)))
 
 "
-    (let ((modified (gensym "modified-"))
-         (read-only (gensym "read-only-")))
+    (let ((modified (cl-gensym "modified-"))
+         (read-only (cl-gensym "read-only-")))
       `(let ((,modified (buffer-modified-p))
             (,read-only buffer-read-only))
         (unwind-protect
index 1d57c86..324626c 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    2003-2012 Jari Aalto
+;; Copyright (C)    2003-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index 3826531..33bb3c5 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; This file is not part of Emacs
 
-;; Copyright (C) 1995-2012 Jari Aalto
+;; Copyright (C) 1995-2016 Jari Aalto
 ;; Keywords:     extensions
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
index f3b16d7..cf91cdc 100644 (file)
@@ -2,7 +2,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -84,7 +84,7 @@
 
 (require 'tinylibb)                     ;Backward compatible functions
 
-(defconst tinylibm-version-time "2011.1231.1204"
+(defconst tinylibm-version-time "2016.1007.1500"
   "Latest version number.")
 
 ;;{{{ function tests
@@ -425,9 +425,9 @@ Purpose:
 
   The 'verb' is meant to be used in function when it decides if
   should print verbose messages. This is different that using
-  simple (interactive-p) test, because (interactive-p) is only set
+  simple (called-interactively-p 'interactive) test, because (called-interactively-p 'interactive) is only set
   if the function is really called interactively. For complete
-  description why (interactive-p) est alone is not always the solution
+  description why (called-interactively-p 'interactive) est alone is not always the solution
   refer to ftp://cs.uta.fi/pub/ssjaaa/ema-code.html under heading
   that discusses about 'funtion and displaying messages'
 
@@ -447,7 +447,7 @@ Example:
     ..code
     (if verb
         (message 2)))"
-  `(setq verb (or verb (interactive-p))))
+  `(setq verb (or verb (called-interactively-p 'interactive))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -1305,10 +1305,12 @@ Lines are counted from 1..x"
   (save-excursion
     (if point
         (goto-char point))
-    (buffer-substring
-     (if point (point)
-       (line-beginning-position))
-     (line-end-position))))
+    (let ((inhibit-field-text-motion t))
+      (buffer-substring
+       (if point
+          (point)
+        (line-beginning-position))
+       (line-end-position)))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -2676,7 +2678,7 @@ Following variables are set during BODY:
 
 `dir'      Directrory name
 `dir-list' All directories under `dir'."
-  `(flet ((recurse
+  `(cl-flet ((recurse
            (dir)
            (let ((dir-list (ti::directory-list dir)))
              ,@body
index 7dae606..3d7d92e 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinylibmail.el --- Library of mail related functions
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -3456,7 +3458,7 @@ See `ti::mail-whois-parse'."
   "Whois: Parse registrant from buffer. See `ti::mail-whois-parse'."
   (let ((point (point))
         ret)
-    (flet ((search (func)
+    (cl-flet ((search (func)
                    (goto-char point)
                    (funcall func)))
       (dolist (func '(ti::mail-whois-parse-registrant-1
@@ -5345,7 +5347,7 @@ Input:
 
 Return:
   '((ABBREV-STRING . EXPANDED-STRING) (A . E) ..)"
-  (let ((abbrev-expand-functions nil) ;; prevent recursion
+  (let ((abbrev-expand-function nil) ;; prevent recursion
        (mail-abbrev-aliases-need-to-be-resolved t)
        table
        exp-list
index ee339ce..0bbe26e 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; This file is not part of Emacs
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 (eval-when-compile
   (autoload 'ignore-errors "cl-macs" nil 'macro))
 
-(defconst tinylibmenu-version-time "2010.1208.0757"
+(defconst tinylibmenu-version-time "2013.0709.0609"
   "Latest version number.")
 
 (defvar ti::menu--load-hook nil
     ((?1 . (  (ti::menu-test1 1 2 3)))      ;this does not have FLAG
      (?2 . (t (ti::menu-test2)))            ;FLAG used.
      (?m . ti::menu--menu-mode)
-     (?u . ti::menu--menu-not-exist) ;this variable does not exist :-)
+     (?u . ti::menu--menu-not-exists) ;this variable does not exist.
      (?e . (t (progn
                 (message "menu item evaled. Pfx: '%s' "
                          (prin1-to-string ti::menu--prefix-arg))
index 8eb74de..f79c3c9 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index e21b860..d2f3450 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; This file is not part of Emacs
 
-;; Copyright (C)   1995-2012 Jari Aalto
+;; Copyright (C)   1995-2016 Jari Aalto
 ;; Keywords:       extensions
 ;; Author:         Jari Aalto
 ;; Maintainer:     Jari Aalto
 ;;               (beginning-of-line)
 ;;               (ti::text-looking-at ".*"))
 ;;                (end-of-line))))
-;;
 
 ;;; Change Log:
 
@@ -413,7 +412,7 @@ Input:
   See function `ti::text-clear-region-properties'"
   (interactive)
   (ti::text-clear-region-properties (point-min) (point-max) propl)
-  (when (interactive-p)
+  (when (called-interactively-p 'interactive)
     (redraw-display)
     (message "Properties cleared")))
 
@@ -557,10 +556,10 @@ Return:
 
  nil            No match
  nbr            start of match at LEVEL."
-  (let* ((func          (if direction
-                            're-search-backward
-                          're-search-forward))
-         (start-point   (point))
+  (let* ((func (if direction
+                  're-search-backward
+                're-search-forward))
+         (start-point (point))
          buffer-read-only
          max-level
          count
@@ -723,7 +722,7 @@ Preserve point.
 See `ti::text-re-search' for descriptions of FACE MODE and SAVE-UNDO."
   (interactive (list (ti::text-read-regexp)  current-prefix-arg))
   (save-excursion
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (setq save-undo t))
     (goto-char (point-min))
     (ti::text-re-search re nil level nil face mode save-undo)))
@@ -739,7 +738,7 @@ function should highlight. point is preserved during call.
 See `ti::text-re-search' for descriptions of FACE MODE SAVE-UNDO."
   (interactive (list (ti::text-read-regexp)  current-prefix-arg))
   (save-excursion
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (setq save-undo t))
     (ti::text-re-search re nil level nil face mode save-undo)))
 
@@ -754,7 +753,7 @@ function should highlight. point is preserved during call.
 See `ti::text-re-search' for descriptions of FACE MODE SAVE-UNDO."
   (interactive (list (ti::text-read-regexp)  current-prefix-arg))
   (save-excursion
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (setq save-undo t))
     (ti::text-re-search re 'back level nil face mode save-undo)))
 
index a3a1452..af61617 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; This file is not part of Emacs
 
-;; Copyright (C)    2010-2012 Jari Aalto
+;; Copyright (C)    2010-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index 6f2666e..50eda62 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyliby.el --- Library of functions related to Emacs s(y)stem
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -66,9 +68,6 @@
 
 (require 'tinylibm)
 
-(eval-and-compile
-  (autoload 'adelete "assoc"))
-
 (eval-when-compile
   (require 'advice))
 
@@ -76,7 +75,7 @@
 
 ;;{{{ setup: -- variables
 
-(defconst tinyliby-version-time "2010.1208.0809"
+(defconst tinyliby-version-time "2016.1029.0818"
   "Latest version number as last modified time.")
 
 (defvar ti::system--describe-symbols-history nil
@@ -311,10 +310,11 @@ INPUT:
 ;;;
 (defun ti::system-feature-kill (sym)
   "Kill feature SYM and its `load-history' information permanently."
-  (let ((name (symbol-name sym)))
+  (let ((name (symbol-name sym))
+       elt)
     ;;  Load history , dependencies remove
-    (if (assoc name load-history)
-        (setq load-history (adelete 'load-history name)))
+    (if (setq elt (assoc name load-history))
+        (setq load-history (delq elt 'load-history)))
     ;;  Kill the symbol from feature list
     (if (featurep sym)
         (setq features (delete sym features)))))
@@ -375,8 +375,8 @@ References:
           (ti::system-feature-kill var))
          ((eq kill-func 'fmakunbound)
           ;;  This is shooting with rocks, by calling advice,
-          ;;  but it's safest this way.
-          (ad-unadvise var)
+          ;;  but it is safest.
+          ;; (ad-unadvise var)
           (funcall kill-func var))
          (t
           (funcall kill-func var)))))))
@@ -477,7 +477,7 @@ Write results i temporary buffer or BUFFER."
      (when (string-match regexp (symbol-name function))
        (insert (format "%-34s %s\n" (symbol-name hook)
                        (symbol-name function))))))
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (pop-to-buffer buffer))
   buffer)
 
@@ -578,7 +578,7 @@ No '%s feature found, are you absolutely sure you have loaded the file? "
                                 "\\)[ \t]*\\([^ \t\n\f()]+\\)"))
          (func-re       (concat "defsubst\\|defmacro\\|defun"
                                 "\\|defadvice\\|deffoo\\|defvoo"))
-         (verb          (or verb (interactive-p)))
+         (verb          (or verb (called-interactively-p 'interactive)))
          (count         0)
          ok-flag
          doc
@@ -634,7 +634,7 @@ No '%s feature found, are you absolutely sure you have loaded the file? "
                 (setq doc
                       (format "%-40s%s\n%s\n\n"
                               sym-name
-                              (if (user-variable-p sym)
+                              (if (custom-variable-p sym)
                                   "Option: " "Variable: ")
                               (or (documentation-property
                                    sym 'variable-documentation)
@@ -831,7 +831,7 @@ References:
               ((and MV (boundp s))
                ;;             (ti::d! 'variable mode s MV MVO MVV)
                (cond
-                ((and MVO (user-variable-p s)) ;; option var
+                ((and MVO (custom-variable-p s)) ;; option var
                  (princ
                   (format "%-40s %-9s%s\n%s\n\n"
                           s
@@ -906,7 +906,7 @@ Return:
          vlist
          flist)
   (or verb
-      (setq verb (interactive-p)))
+      (setq verb (called-interactively-p 'interactive)))
     (setq list
           (ti::buffer-grep-lines
            (concat (or re "")
index e7798df..4a0b59a 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinylisp.el --- Emacs lisp programming help grab-bag
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 ;;
 ;;  Elp: Summary mode's sort capabilities
 ;;
-;;      When you call `$' ´E' `s' to show the elp result(s), the results
+;;      When you call `$' `E' `s' to show the elp result(s), the results
 ;;      buffer is put into `tinylisp-elp-summary-mode' where you can sort
 ;;      the columns with simple keystrokes. The sort keys correspond to the
 ;;      column names.
 (ti::package-require-view) ;; TinyLisp must be first in the minor-mode-list
 
 (eval-when-compile
+  (require 'elp)    ;; For elp-results-buffer
   (require 'advice) ;; For apropos.el
   ;; XEmacs 21.2 NT had a problem loading the edug.el. After
   ;; debug.el was loaded first, the edebug.el load succeeded.
   ;;  we're doing below. Emulation in handled in tinylibb.el
   (put 'frame-parameters 'byte-compile nil))
 
+
 (eval-and-compile
   (autoload 'tinypath-cache-match-fullpath  "tinypath")
-  (autoload 'remprop                        "cl-extra")
   (autoload 'edebug-eval-defun              "edebug" "" t)
+  (autoload 'eval-defun                     "edebug """ t) ;; alias
   (autoload 'generate-file-autoloads        "autoload")
+  (autoload 'ad-has-any-advice              "advice")
+  (autoload 'ad-is-active                   "advice")
+  (autoload 'elp-restore-all               "elp")
+  (autoload 'elp-reset-all                 "elp")
+  (autoload 'elp-restore-function          "elp")
+  (autoload 'elp-restore-list              "elp")
+  (autoload 'elp-set-master                "elp")
+  (defvar elp-all-instrumented-list)
   ;; Silence bytecompiler
   (defvar edebug-all-defs)
   (defvar folding-mode)
@@ -844,7 +856,7 @@ the minor mode in every Emac slisp buffer."
   :group 'TinyLisp)
 
 (defcustom tinylisp--with-current-buffer-hook '(turn-on-tinylisp-mode)
-  "*Hook run after ´tinylisp-with-current-buffer'."
+  "*Hook run after `tinylisp-with-current-buffer'."
   :type  'hook
   :group 'TinyLisp)
 
@@ -1888,14 +1900,14 @@ Following variables are set during BODY:
 
 `dir'      Directrory name
 `dir-list' All directories under `dir'."
-  `(flet ((recurse
-           (dir)
-           (let ((dir-list (tinylisp-directory-list dir)))
-             ,@body
-             (when dir-list
-               (dolist (elt dir-list)
-                 (unless (string-match tinylisp--ignore-dir-regexp elt)
-                   (recurse elt)))))))
+  `(cl-flet ((recurse
+             (dir)
+             (let ((dir-list (tinylisp-directory-list dir)))
+               ,@body
+               (when dir-list
+                 (dolist (elt dir-list)
+                   (unless (string-match tinylisp--ignore-dir-regexp elt)
+                     (recurse elt)))))))
      (recurse ,directory)))
 
 ;;; ----------------------------------------------------------------------
@@ -3533,7 +3545,7 @@ See `tinylisp-jump-to-definition'. VERB."
 (defun tinylisp-backward-user-option ()
   "See `tinylisp-forward-user-option'."
   (interactive)
-  (tinylisp-forward-user-option 'back (interactive-p)))
+  (tinylisp-forward-user-option 'back (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -3572,7 +3584,7 @@ See `tinylisp-jump-to-definition'. VERB."
              (or
               (and (not (string-match "defun" type))
                    (boundp sym)         ;Then check is easy
-                   (user-variable-p sym))
+                   (custom-variable-p sym))
               (and (string-match "defun" type)
                    (fboundp sym)
                    (commandp sym))))
@@ -4017,7 +4029,7 @@ Output line format:
 
   [!] If you see exclamation mark then it means that you have mixed
   defsubst and interactive function, which is very dangerous situation,
-  because when function is in-lined the (interactive-p) tests from functions
+  because when function is in-lined the (called-interactively-p 'interactive) tests from functions
   are in-lined too. Check that you really want to do in-lining for
   interactive functions.
 
@@ -4105,7 +4117,7 @@ to your M - x xxx-submit-bug-report function's variable list.
 the appearing list will wave defvar's first, then defconst.
 
 input:
-  SHOW-TYPE     if non-nil, then show `user-variable-p' and
+  SHOW-TYPE     if non-nil, then show `custom-variable-p' and
                 `defcustom' information too."
   (interactive "p")
   (let ((re     tinylisp--regexp-variable)
@@ -4139,7 +4151,7 @@ input:
                   str  ";; #symbol not found")
             (tinylisp-symbol-do-macro sym 'noerr
              (setq str "")
-             (if (user-variable-p sym)
+             (if (custom-variable-p sym)
                  (setq str "user variable"))
              (if (string= type "defcustom")
                  (setq str (concat str " defcustom")))
@@ -4196,7 +4208,7 @@ and function definitions."
     (unless feature-name
       (load file))
     (with-current-buffer (ti::system-get-file-documentation file verb)
-      (if (interactive-p)
+      (if (called-interactively-p 'interactive)
          (display-buffer (current-buffer)))
       (turn-on-tinylisp-mode))))
 
@@ -4268,7 +4280,7 @@ Return:
            (format "%s ..." (ti::string-left (prin1-to-string pkg) 80)))))
        (if verb
            (message "TinyLisp: lib info %d/%d %s" i max name))
-       (incf  i)x
+       (incf  i)
        (setq dep-list  nil
              pkg       nil)))
     (tinylisp-with-current-buffer buffer
@@ -4284,7 +4296,7 @@ Return:
 ;;; ----------------------------------------------------------------------
 ;;;
 (defun tinylisp-read-something ()
-  "Position point to over some words near point."
+  "Position point to over some word near point."
   (save-excursion
     (if (looking-at "[ \t\n]")          ;only spaces ahead?
         (ti::read-current-line)
@@ -4292,7 +4304,7 @@ Return:
       (unless (char-equal (following-char) ?\( )
         (re-search-backward "[( \t\n]" nil t)
         (skip-chars-forward " \t\n")))
-    (buffer-substring (point) (line-end-position))))
+    (buffer-substring-no-properties (point) (line-end-position))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -4421,7 +4433,7 @@ Return:
        file
        buffer)
     (when list
-      (when (interactive-p)
+      (when (called-interactively-p 'interactive)
         (setq file (car list))
         (if (> (length list) 1)
             (setq file
@@ -4995,7 +5007,7 @@ If VERB is non-nil, display verbose messages."
     (when (setq list (tinylisp-directory-file-list dir exclude))
       (tinylisp-autoload-generate-loaddefs-file-list
        list
-       (or verb (interactive-p))))))
+       (or verb (called-interactively-p 'interactive))))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -5409,9 +5421,27 @@ User can't see string echoed otherwise. Optionally RESTORE."
 (defun tinylisp-syntax-post-command ()
   "Show syntax information for current point."
   (when (tinylisp-post-command-run-p)
-    (message "[TinyLisp syntax info] %s: %s"
-             (char-to-string (following-char))
-             (ti::string-syntax-info (following-char)))))
+    (let ((ch (char-to-string (following-char)))
+         (face (get-text-property (point) 'face))
+         (face-info ""))
+      (when face
+       (let ((fg (face-foreground face))
+             (bg (face-background face)))
+         (setq face-info
+               (format " fg:%s bg:%s %s" fg bg (symbol-name face)))))
+      (cond
+       ((string= ch "\n")
+       (setq ch "LF"))
+       ((string= ch "\r")
+       (setq ch "CR"))
+       ((string= ch "\t")
+       (setq ch "TAB"))
+       ((string= ch " ")
+       (setq ch "SPC")))
+      (message "[TinyLisp syntax info] %s: %s%s"
+              ch
+              (ti::string-syntax-info (following-char))
+              face-info))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -5429,7 +5459,7 @@ User can't see string echoed otherwise. Optionally RESTORE."
       (add-hook 'post-command-hook 'tinylisp-syntax-post-command nil 'local)
       (tinylisp-post-command-config))
      (t
-      (remove-hook    'post-command-hook 'tinylisp-syntax-post-command)
+      (remove-hook 'post-command-hook 'tinylisp-syntax-post-command 'local)
       (tinylisp-post-command-config 'restore)))))
   (if verb
       (message
@@ -5566,7 +5596,7 @@ VERB                    verbose flag"
 (defun tinylisp-find-buffer-local-variables (&optional buffer)
   "Print buffer local variables to BUFFER."
   (interactive)
-  (flet ((my-sort2
+  (cl-flet ((my-sort2
           (list)
           (sort list
                 (function
@@ -5733,7 +5763,7 @@ Flags when viewing, editing echo-area:
        (save
         (put elt prop (symbol-value elt)))
        (kill
-        (remprop elt prop))
+        (cl-remprop elt prop))
        (restore
         (set elt (get elt prop)))
        (reset
index 33e5a58..9c695d6 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index 53f15e4..3c5c2fc 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -316,7 +316,7 @@ Input:
        "1 sec"
        (* tinylock--auto-lock-interval 60)
        'tinylock-process))))
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (message "Autolock process %s"
                (if uninstall
                    "deleted"
index 303cbc7..0a19fd5 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C) 1996-2012 Jari Aalto
+;; Copyright (C) 1996-2016 Jari Aalto
 ;; Keywords:     extensions
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
@@ -416,7 +416,7 @@ removes line numbers."
   "Return current settings."
   (interactive)
   (let ((stat (nth 1 lpr-switches)))
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message stat))
     stat))
 
index b0591f4..73e7661 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinymail.el --- Mail add-ons. Report incoming mail, passwd, BBDB complete.
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 ;;  Completion: Custom completion of any header
 ;;
 ;;      You can complete any field by setting variable
-;;      `tinymail--table-header-complete' For example to complete "Class" header,
-;;      you would set the variable like this. See variable documentation
-;;      for more information.
-;;
-;;          (require 'assoc)
-;;          (aput
-;;           'tinymail--table-header-complete
-;;           "Class"                ;; Add new header for use with TAB
-;;           (list
-;;            '("confidential"       ;; completion list
+;;      `tinymail--table-header-complete' For example to complete
+;;      "Class" header, you would set the variable like this. See
+;;      variable documentation for more information.
+;;
+;;          (require 'tinymail)
+;;          (push
+;;           '("Class" .             ;; Add new header for use with TAB
+;;             ("confidential"       ;; completion list
 ;;              "private"
 ;;              "for internal use only"
 ;;              "personal private"
-;;              "personal another")))
+;;              "personal another"))
+;;           'tinymail--table-header-complete)
 ;;          ;; end example
 ;;
 ;;  CC field tracking
@@ -1591,7 +1592,7 @@ Format: ((\"ALIAS\" . \"EXPANDED\") ..)")
   "Temporary buffer.")
 
 (defvar tinymail--password-alist nil
-  "Private. Password file in assoc form: '((LOGNAME . PASSWD-ENTRY)).")
+  "Private. Password file in assoc list form: '((LOGNAME . PASSWD-ENTRY)).")
 
 (defvar tinymail--password-completion-alist nil
   "Private. Completion table of login names.")
@@ -1779,58 +1780,50 @@ This function should be bound to SPACE key."
   ;;  Debian bug report header
   ;;  http://www.debian.org/Bugs/Reporting
   ;;  See http://www.debian.org/Bugs/Developer#severities
-  (aput 'tinymail--table-header-complete
-        "Severity"
-        (list
-         '("critical"    ;; Whole system break, serious data loss
-           "grave"       ;; unuseable, data loss, security hole
-           "serious" ;; violation of Debian policy, unsuitable for release.
-           "important" ;; major effect withour  completely unusable.
-           "normal"    ;; the default value, applicable to most bugs.
-           "minor"     ;; doesn't affect the package's usefulness
-           "wishlist"  ;; feature request
-           "fixed")))  ;; fixed but should not yet be closed.
+  (push '("Severity" .
+         ("critical"  ;; Whole system break, serious data loss
+          "grave"     ;; unuseable, data loss, security hole
+          "serious"   ;; violation of Debian policy, unsuitable for release.
+          "important" ;; major effect withour  completely unusable.
+          "normal"    ;; the default value, applicable to most bugs.
+          "minor"     ;; doesn't affect the package's usefulness
+          "wishlist"  ;; feature request
+          "fixed"))   ;; fixed but should not yet be closed.
+       'tinymail--table-header-complete)
   ;;  Debian bug report header
-  (aput 'tinymail--table-header-complete
-        "Tags"
-        (list
-         '("patch"       ;;
+  (push '("Tags" .
+         ("patch"       ;;
            "wontfix"     ;;  change will cause other, worse, problems
-           "moreinfo" ;;  more information must be provided by the submitter
+           "moreinfo"    ;;  more information must be provided by the submitter
            "unreproducible" ;; can't be reproduced on the maintainer's system
-           "fixed" ;;  bug is fixed or worked around, needs to be resolved
-           "security"                ;:  security problem in a package
-           "potato"                  ;;  potato release
-           "woody"                   ;;  woody distribution
-           "s1id"))) ;;  architecture that is currently unreleased
-  (aput 'tinymail--table-header-complete
-        "Followup-To"
-        (list
-         '(when (eq major-mode 'message-mode)
-            (call-interactively 'message-tab)
-            ;;   We must stop the other completion function from running
-            (setq tinymail--complete-key-return-value t)
-            nil)))
-  (aput 'tinymail--table-header-complete
-        "Gcc"
-        (list
-         '(if (not (featurep 'gnus))
-              (prog1 nil (message "TinyMail: Gcc completion needs Gnus..."))
-            (when (stringp string))
-            (all-completions
-             string
-             gnus-active-hashtb 'gnus-valid-move-group-p))))
-  (aput 'tinymail--table-header-complete
-        "Newsgroups"
-        (list
-         '(if (not (featurep 'gnus))
-              (prog1 nil
-                (message "TinyMail: Newsgroups completion needs Gnus..."))
-            (when (stringp string))
-            (all-completions
-             string
-             gnus-active-hashtb
-             (gnus-read-active-file-p))))))
+           "fixed"      ;;  bug is fixed or worked around, needs to be resolved
+           "security")) ;:  security problem in a package
+       'tinymail--table-header-complete)
+  (push '("Followup-To" .
+         (when (eq major-mode 'message-mode)
+           (call-interactively 'message-tab)
+           ;;   We must stop the other completion function from running
+           (setq tinymail--complete-key-return-value t)
+           nil))
+       'tinymail--table-header-complete)
+  (push '("Gcc"
+         '(if (not (featurep 'gnus))
+              (prog1 nil (message "TinyMail: Gcc completion needs Gnus..."))
+            (when (stringp string))
+            (all-completions
+             string
+             gnus-active-hashtb 'gnus-valid-move-group-p)))
+       'tinymail--table-header-complete)
+  (push '("Newsgroups" .
+         '(if (not (featurep 'gnus))
+              (prog1 nil
+                (message "TinyMail: Newsgroups completion needs Gnus..."))
+            (when (stringp string))
+            (all-completions
+             string
+             gnus-active-hashtb
+             (gnus-read-active-file-p))))
+       'tinymail--table-header-complete))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -1976,7 +1969,7 @@ You need to run this function if you change your ~/.mailrc."
   (interactive)
   (tinymail-debug "tinymail-update-mail-abbrevs")
   (when (and (fboundp 'build-mail-abbrevs) ;update abbrevs too
-             (or force (interactive-p)))
+             (or force (called-interactively-p 'interactive)))
     (ti::funcall 'build-mail-abbrevs))
   (setq tinymail--mail-aliases-alist (ti::mail-abbrev-get-alist)))
 
@@ -1993,7 +1986,7 @@ documentation in the tinymail.el or call \\[tinymail-version]."
       (error "TinyMail: Please set variable `user-mail-address'")
     (ti::mail-kill-field  "^to:" user-mail-address)
     (tinymail-field-to-off)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "Address changed to point to you. TinyMail signs off."))))
 
 ;;; ----------------------------------------------------------------------
@@ -2198,14 +2191,15 @@ Return:
   alias        = the alias definition
   expansion    = expanded alias"
   (let* ((abbrevs   (tinymail-mail-aliases))
-         abbrev-expand-functions ;; prevent recursion
+         abbrev-expand-function ;; prevent recursion
          exp-list
          hit)
     (dolist (elt list)
       (tinymail-debug "tinymail-resolve-abbrevs" elt)
       ;;  Returns (ABBR . ABBR-EXPANDED)
       (if (not (setq hit (assoc elt abbrevs)))
-          (message "TinyMail: Can't find abbrev '%s', is it in ~/.mailrc ?" elt)
+          (message "TinyMail: Can't find abbrev '%s', is it in ~/.mailrc ?"
+                  elt)
         (if (not (member hit exp-list))
             (push hit exp-list))))
     exp-list))
@@ -2300,7 +2294,7 @@ References:
   "Toggle `tinymail--password-mode'  on or off."
   (interactive "P")
   (ti::bool-toggle tinymail--password-mode mode)
-  (when (interactive-p)
+  (when (called-interactively-p 'interactive)
     (message "TinyMail: Password complete mode is now %s"
              (if tinymail--password-mode "on" "off"))))
 
index f5602a1..3cdab92 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinymailbox.el --- Berkeley style aka std. mailbox browsing minor mode
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -480,7 +482,7 @@ Ignore big mailboxes."
                  'turn-on-tinymailbox-mode-maybe
                  uninstall)
   (when (or verb
-            (interactive-p))
+            (called-interactively-p 'interactive))
     (message "TinyMailbox %s"
              (if uninstall
                  "uninstalled"
@@ -491,7 +493,7 @@ Ignore big mailboxes."
 ;;;###autoload
 (defun tinymailbox-uninstall ()
   "Uninstall mode."
-  (tinymailbox-install 'uninstall (interactive-p)))
+  (tinymailbox-install 'uninstall (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -734,9 +736,9 @@ Ignore big mailboxes."
              (goto-char Opoint)))
            (tinymailbox-header-show-or-hide)
            ,@body
-           (if (interactive-p)
+           (if (called-interactively-p 'interactive)
                (recenter 3))
-           (when (and (null stat) (interactive-p))
+           (when (and (null stat) (called-interactively-p 'interactive))
              (message ,msg))
            stat))))
   ) ;; eval-and-compile
@@ -791,7 +793,7 @@ Created function arguments: (&optional arg)"
         (message "TinyMailbox: body backward stop.")
       (setq stat (re-search-forward "^[ \t]*$" nil t)))
     (if (and stat
-             (interactive-p))
+             (called-interactively-p 'interactive))
         (recenter 3))
     ;;  If none found, return to original position
     (when (and (null stat)
@@ -855,7 +857,7 @@ Created function arguments: (&optional arg)"
    (tinymailbox-overlay 'show beg end)
    (sit-for 0.5)
    (tinymailbox-overlay 'hide beg end)
-   (if (interactive-p)
+   (if (called-interactively-p 'interactive)
        (message "TinyMailbox: Message copied as kill."))))
 
 ;;; ----------------------------------------------------------------------
@@ -873,7 +875,7 @@ Created function arguments: (&optional arg)"
    (setq beg (point))
    (copy-region-as-kill beg end)
    (tinymailbox-overlay 'show beg end))
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (message "TinyMailbox: Message body copied.")))
 
 ;;; ----------------------------------------------------------------------
@@ -923,7 +925,7 @@ Try Subject: or From:"
   (interactive "sTinyMailbox: run occur by regexp: ")
   (cond
    ((ti::nil-p regexp)
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "TinyMailbox: Occur cancelled. No REGEXP given.")))
    (t
     (save-excursion
@@ -955,11 +957,11 @@ Try Subject: or From:"
 (defsubst tinymailbox-mail-send-filter (list &optional regexp)
   "Remove all strings from LIST that match current user or REGEXP."
   (let ((user (tinymailbox-user-mail-address-regexp)))
-    (remove-if (lambda (x)
-                 (or (string-match user x)
-                     (and (stringp regexp)
-                          (string-match regexp x))))
-               list)))
+    (cl-remove-if (lambda (x)
+                   (or (string-match user x)
+                       (and (stringp regexp)
+                            (string-match regexp x))))
+                 list)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
index 5623a91..4ed38de 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinymy.el --- Collection of simple utilities
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -602,25 +604,23 @@ Example:
      `ti::buffer-shebang' reads the command interpreter from the first line.
 
     (add-hook 'tinymy-load-hook 'my-tinymy-compile-customisations)
-    (autoload 'aput \"assoc\")
 
     (defun my-tinymy-compile-customisations ()
-      (aput 'tinymy--compile-table
-            \"perl\"
-            '(if (string-match \"project\" buffer-file-name)
-               (concat (or (ti::buffer-shebang) \"perl\") \" -w  %s\")
-             \"perl -w %s\")))
+      (push '(\"perl\" .
+              (if (string-match \"project\" buffer-file-name)
+                 (concat (or (ti::buffer-shebang) \"perl\") \" -w  %s\")
+               \"perl -w %s\"))
+       'tinymy--compile-table))
 
   If you always want to use the shebang command interpreter, then you
   would simply write
 
    (add-hook 'tinymy-load-hook 'my-tinymy-compile-customisations)
-   (autoload 'aput \"assoc\")
 
-    (defun my-tinymy-compile-customisations ()
-      (aput 'tinymy--compile-table
-            \"perl\"
-            '(concat (or (ti::buffer-shebang) \"perl\") \" -w %s\")))
+   (defun my-tinymy-compile-customisations ()
+     (push '(\"perl\" .
+             (concat (or (ti::buffer-shebang) \"perl\") \" -w %s\"))
+           'tinymy--compile-table))
 
   After this package has been loaded. (Place customizations like this
   to `tinymy--load-hook'."
@@ -879,15 +879,16 @@ Important, If file is vc controlled:
     This function is ment for changing the
     buffer characteristics without changing the version control state.
 
-    Normally \\[toggle-read-only] would do CheckOut if the file was
-    read-only, but sometimes it is convenient to put buffer to read-only
-    state to prevent changing anything in there for a while."
+    Normally \\[read-only-mode] would do check out would
+    succeed if the file was read-only. Sometimes it is
+    convenient to put buffer to read-only state to prevent
+    changing anything in there for a while."
   (interactive)
   (let ((fid      "tinymy-buffer-read-only")
        (key-func (if (or (featurep 'vc)
                          (featurep 'vc-hooks))
                      'vc-toggle-read-only
-                   'toggle-read-only))
+                   'read-only-mode))
        state
        call
        turn-mode)
@@ -901,7 +902,7 @@ Important, If file is vc controlled:
     (ti::save-line-column-macro nil nil
       (cond
        ((memq major-mode '(dired-mode)) ;plain C-x C-q for these modes...
-        (toggle-read-only))
+        (read-only-mode))
        (t
         (cond
          ((and (eq key-func 'vc-toggle-read-only)
@@ -910,7 +911,7 @@ Important, If file is vc controlled:
 
           (if (y-or-n-p "Call vc? ")
               (call-interactively 'vc-toggle-read-only)
-            (toggle-read-only)))
+            (read-only-mode)))
          (t
           (call-interactively key-func)))
         (tinymy-debug fid "STATE after" buffer-read-only)
@@ -1346,7 +1347,6 @@ before writing."
                          (tinymy-package-save-to-file-buffer-beginning file)
                          (point))
               p2     (point-max))
-        ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ end ^^^
         (setq point (tinymy-package-save-to-file-buffer-ending p1))
         (cond
          (point
@@ -1356,7 +1356,6 @@ before writing."
           (tinymy-debug fid str)
           (message str)
           (sit-for 1)))
-        ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ existing file ^^^
         (when (file-exists-p file)
           (setq ans (read-from-minibuffer "overwrite?: " file))
           (cond
@@ -1371,14 +1370,13 @@ before writing."
                   (> p1 p2))
           (error "\
 TinyMy: [ERROR] Can't find region. Save manually (See M-x tinymy-version)."))
-        ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ saving ^^^
         (with-temp-buffer
           (insert-buffer-substring code-buffer p1 p2)
           (ti::pmin)
           (when (string-match "\\.\\(zip\\|gz\\)$" file)
             (ti::use-file-compression))
           (write-file file)             ;jka handles compressing
-          (not-modified)
+          (set-buffer-modified-p nil)
           (message (concat "TinyMy: Package saved to " file)))
         ;; Restore point
         (goto-char orig-point)))))
@@ -1428,7 +1426,7 @@ Ignores file whose `file-modes' can't be read, e.g. for ange-ftp files."
         (forward-char 1)                ;Leave newline
         (unless (eq (point) (point-max))
           (delete-region (point-max) (point))))))
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (message "TinyMy: Blanks trimmed"))
   nil)                                  ;Clean return code
 
@@ -1880,7 +1878,7 @@ the current point."
        (setq sum  (+ sum  rowval))
        (setq prod (* prod rowval)))
      START END 't)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "TinyMy: For %d rows, sum=%f, product=%f" rownum sum prod))
     (if insert
         (insert (format "%0.2f %0.2f" sum  prod)))))
@@ -2026,7 +2024,8 @@ Note:
                   ;;  - The ignore-errors is here in case this calls error,
                   ;;    which it does if the buffer size has changes, like
                   ;;    in live *Messages* buffer
-                  (ignore-errors (next-line (- lines 1))))
+                  (ignore-errors
+                   (forward-line (- lines 1))))
               (goto-char (ti::window-pmax-line-bol)))))))))))
 
 ;;}}}
@@ -2049,7 +2048,7 @@ List of  files can include shell regexps. The result is put into
      (list arg1)))
   (let* ((cmd         (concat tinymy--shar-command " "))
          (register    tinymy--register)
-         (verb        (interactive-p))
+         (verb        (called-interactively-p 'interactive))
          out)
     (if (ti::nil-p single-or-list)
         (error "Missing args")
@@ -2189,7 +2188,7 @@ to PostgreSQL."
                       (ti::directory-part-last
                        (file-name-directory file))))
            cmd)
-      (flet ((type-p (regexp1 regexp2)
+      (cl-flet ((type-p (regexp1 regexp2)
                      (or (ti::re-search-check regexp1)
                          (string-match regexp2 (or last "")))))
         (or (and (type-p "postgreSQL"
index 4994bb4..4458b80 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index bdd9623..1032def 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C) 1997-2012 Jari Aalto
+;; Copyright (C) 1997-2016 Jari Aalto
 ;; Keywords:     emulations
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
@@ -234,7 +234,7 @@ Mode description:
 ;;;
 (defadvice switch-to-buffer  (after tipad act)
   "Turn on `tinypad-mode' if if global Pad mode is non-nil."
-  (when (and (interactive-p)
+  (when (and (called-interactively-p 'interactive)
              (get 'tinypad-mode 'global)
              (null tinypad-mode))
     (setq tinypad-mode 1)))
index 8c18ebe..80e0b85 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index f8d6fa4..3c4a4ca 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C) 1995-2012 Jari Aalto
+;; Copyright (C) 1995-2016 Jari Aalto
 ;; Keywords:     extensions
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
@@ -718,7 +718,7 @@ Input:
  nil 'us 'usa    Use US pairing.
  other value     Use European pairing style."
   (interactive "P")
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (message "TinyPair: Selected %s pairing style "
                (if arg "European" "US" )))
   (cond
index d83c849..5b4ebea 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinypath.el --- Manage Emacs startup dynamically
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1999-2012 Jari Aalto
+;; Copyright (C)    1999-2016 Jari Aalto
 ;; Keywords:        extensions
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 (put 'gc-cons-threshold 'tinypath gc-cons-threshold)
 (setq gc-cons-threshold (* 1024 1024 10))
 
-;;  Why the provide is at the start of file?
-;;  Because XEmacs does not record `load-history' entry unless it sees
-;;  `provide' statement. There is a check for SELF LOCATION by looking at
-;;  the `load-history' in this package
+;;  XEmacs does not record `load-history' entry unless it sees
+;;  `provide' statement. There is a check for SELF LOCATION by looking
+;;  at the `load-history' in this package
 
-(provide   'tinypath)
+(provide 'tinypath)
 
 (eval-when-compile
-  (require 'cl))
+  (require 'cl)
+  (require 'advice))
 
 (eval-and-compile
 
     ;;  by some package
     (load "cl-macs"))
 
-  ;;  These variables must be here in order to Byte compiler to see them
-  ;;  before they are used.
-
-  (defcustom tinypath--verbose-info-messages nil
-    "*If non-nil, notify missing environment variables like USER.
-This variable is meant for Win32 environment, where Unix style
-USER and LOGNAME variables are not defined by default."
-    :type  'boolean
-    :group 'TinyPath)
-
-  (defvar tinypath--boot-ignore-directory-regexp
-    ;; #todo: /usr/share/emacs/21.3/lisp/obsolete
-    "\\(CVS\\|RCS\\|info\\|texi\\|\\.svn\\|\\.git\\|\\.bzr\\|\\.hg\\|\\.mtn\\|/MT\\)/?$"
-    "While searching lisp boot subdirs, ignore those that match this regexp.
-Popular version control directories are excluded by default.")
-
-  ;;  #todo: Mysterious byte compile bug:
-  ;;  Remove all cache files, compile tinypath, launch emacs.
+  ;;  FIXME: Mysterious byte compile bug:
+  ;;  Remove all cache files, compile tinypath, start Emacs.
   ;;  => Dies with a message of: "function member* not found".
 
   (unless (fboundp 'member*)
     (autoload 'member* "cl-seq"))
 
-  (defconst tinypath--xemacs-p
-    (or (boundp 'xemacs-logo)
-       (featurep 'xemacs)
-       (string-match "XEmacs" (emacs-version)))
-    "Non-nil if running XEmacs.")
-
-  ;;  Mostly for Win32 environment checks
-  (defvar tinypath--startup-no-messages t
-    "*If non-nil, do not display error message buffer at startup.
-You should set this to `nil' if you begin to use this package first
-time to see messages that may need attention. Alternatively, check
-message buffer.")
-
   (defvar font-lock-mode) ;; Byte compiler silencers
   (defvar lazy-lock-mode)
   (defvar dired-directory)
@@ -1351,8 +1324,6 @@ message buffer.")
   (autoload 'ti::macrof-version-bug-report  "tinylib" "" nil 'macro)
 
   (autoload 'pp                             "pp")
-  (autoload 'assq                           "assoc")
-  (autoload 'aput                           "assoc")
   (autoload 'executable-find                "executable")
 
   ;; Quiet byte compiler. These are checked with `boundp' in the code
@@ -1365,6 +1336,35 @@ message buffer.")
   ;; See find-file.el
   (defvar ff-search-directories)
 
+  ;;  These variables must be here in order for the Byte compiler to
+  ;;  see them before they are used.
+
+  (defcustom tinypath--verbose-info-messages nil
+    "*If non-nil, notify missing environment variables like USER.
+This variable is meant for Win32 environment, where Unix style
+USER and LOGNAME variables are not defined by default."
+    :type  'boolean
+    :group 'TinyPath)
+
+  (defvar tinypath--boot-ignore-directory-regexp
+    ;; FIXME: /usr/share/emacs/21.3/lisp/obsolete
+    "\\(CVS\\|RCS\\|info\\|texi\\|\\.svn\\|\\.git\\|\\.bzr\\|\\.hg\\|\\.mtn\\|/MT\\)/?$"
+    "While searching lisp boot subdirs, ignore those that match this regexp.
+Popular version control directories are excluded by default.")
+
+  (defconst tinypath--xemacs-p
+    (or (boundp 'xemacs-logo)
+       (featurep 'xemacs)
+       (string-match "XEmacs" (emacs-version)))
+    "Non-nil if running XEmacs.")
+
+  ;;  Mostly for Win32 environment checks
+  (defvar tinypath--startup-no-messages t
+    "*If non-nil, do not display error message buffer at startup.
+Set to non-nil for initial uses of this package first
+to see messages that may need attention. The messages can be recalled
+from the *Messages* buffer.")
+
   ;;  This is just forward declaration for byte compiler
   ;;  It it not sensible to lift `defcustom' definition apart from
   ;;  to the beginning of file due to macros and all which refer to it.
@@ -1372,9 +1372,6 @@ message buffer.")
   (defvar tinypath--verbose 3
     "*Verbosity level"))
 
-(eval-when-compile
-  (require 'advice))
-
 ;;}}}
 ;;{{{ Environment
 
@@ -1925,11 +1922,11 @@ ROOT can be a single directory or list of directories."
 ;;;
 (defun tinypath-default-load-path-root-user ()
   "Return user's Emacs Lisp path by guessing various directories."
-  (flet ((msg (m)
-             (message m)
-             (unless tinypath--startup-no-messages
-               (sit-for 2))
-             nil))
+  (cl-flet ((msg (msg)
+                (message msg)
+                (unless tinypath--startup-no-messages
+                  (sit-for 2))
+                nil))
     (if (null (getenv "HOME"))
        (msg "TinyPath: [ERROR] Environment variable HOME is not set.")
       (let (ret)
@@ -2031,17 +2028,17 @@ Input:
   VERB     Verbose messages.
   BUG      If set, and DIR not found, call `tinypath-message-bug'."
   (let (found)
-    (flet ((check-dir
-           (try dir)
-           (setq try (tinypath-expand-file-name
-                      (concat (file-name-as-directory try)
-                              dir)))
-           (if verb
-               (message "TinyPath: directory search ... %s" try))
-           (when (file-directory-p try)
-             (if verb
-                 (message "TinyPath: directory search ... found %s" try))
-             try)))
+    (cl-flet ((check-dir
+              (try dir)
+              (setq try (tinypath-expand-file-name
+                         (concat (file-name-as-directory try)
+                                 dir)))
+              (if verb
+                  (message "TinyPath: directory search ... %s" try))
+              (when (file-directory-p try)
+                (if verb
+                    (message "TinyPath: directory search ... found %s" try))
+                try)))
       (or dir
          (setq dir ""))
       (dolist (try list)
@@ -3351,10 +3348,10 @@ Input
   ZERO-TREAT    If non-nil, consider version numbers starting with 0.NN
                never than 2.1. In this case it is assumed
                that zero based versions are latest development releases."
-  (flet ((version (str regexp)
-                 (if (string-match regexp str)
-                     (string-to-number (match-string 1 str))
-                   0)))
+  (cl-flet ((version (str regexp)
+                    (if (string-match regexp str)
+                        (string-to-number (match-string 1 str))
+                      0)))
     (let* ((a1 (version a "^\\([0-9]+\\)"))
           (a2 (version a "^[0-9]+\\.\\([0-9]+\\)"))
           (a3 (version a "^[0-9]+\\.[0-9]+\\.\\([0-9]+\\)"))
@@ -3408,12 +3405,11 @@ Return:
        list
        item
        ret)
-    (flet ((get-elt (elt place)
-                   (if (vectorp elt)
-                       (aref elt place)
-                     (nth place elt))))
-      (dolist (timer '(
-                      ;; (("Mon Dec  9 10:01:47 1996-0" 10
+    (cl-flet ((get-elt (elt place)
+                      (if (vectorp elt)
+                          (aref elt place)
+                        (nth place elt))))
+      (dolist (timer '(;; (("Mon Dec  9 10:01:47 1996-0" 10
                       ;;     process nil))
                       (timer-idle-list . 5)
                       (timer-alist . 2)
@@ -3425,7 +3421,7 @@ Return:
          ;;  NOTE: this is different in Xemacs. It is not a vector
          ;; timer-[idle-]list Emacs 19.34
          ;;  NOTE: this is different in Xemacs. It is not a vector
-
+         ;;
          ;; ([nil 12971 57604 0 60 display-time-event-handler nil nil])
          ;; [nil 13971 14627 646194 60
          ;;      (lambda (f) (run-at-time ...))
@@ -4618,7 +4614,7 @@ Input:
 
 Return:
 
-  '(PATH  CACHE-ELEMENT)"
+  '(PATH CACHE-ELEMENT)"
   (when tinypath--cache
     (let* ((fid  "TinyPath: tinypath-cache-p-1-new-cache ")
           (regexp1  tinypath--ignore-file-regexp)
@@ -4638,29 +4634,29 @@ Return:
       (setq
        ret
        (catch 'done
-        (flet (                 ;; First function
-               (path-name (ELT) ;; ELT = '("FILE.EL" (POS . "PATH"))
-                          (when ELT
-                            (concat (cdr (nth 1 ELT)) (car ELT)  )))
-               ;; Second function
-               (throw-ignore
-                (ELT)
-                (cond
-                 ((and ELT
-                       (or (and (stringp regexp1)
-                                (string-match regexp1
-                                              (car ELT)))
-                           (and (stringp regexp2)
-                                (let (case-fold-search)
-                                  (string-match regexp2
-                                                (cdr (nth 1 ELT)))))))
-                  (tinypath-verbose-macro 10
-                    (message "%s`ignore-file-regexp' %s"
-                             fid
-                             (car ELT)))
-                  nil)
-                 (ELT
-                  (throw 'done (path-name ELT))))))
+        (cl-flet* (;; First function
+                   (path-name (ELT) ;; ELT = '("FILE.EL" (POS . "PATH/"))
+                              (when ELT
+                                (concat (cdr (nth 1 ELT)) (car ELT)  )))
+                   ;; Second function
+                   (throw-ignore
+                    (ELT)
+                    (cond
+                     ((and ELT
+                           (or (and (stringp regexp1)
+                                    (string-match regexp1
+                                                  (car ELT)))
+                               (and (stringp regexp2)
+                                    (let (case-fold-search)
+                                      (string-match regexp2
+                                                    (cdr (nth 1 ELT)))))))
+                      (tinypath-verbose-macro 10
+                        (message "%s`ignore-file-regexp' %s"
+                                 fid
+                                 (car ELT)))
+                      nil)
+                     (ELT
+                      (throw 'done (path-name ELT))))))
           (tinypath-verbose-macro 10
             (message (concat fid " ENTRY %s %s")
                      package
@@ -5251,7 +5247,7 @@ Return:
            (setq done t)
            (set-buffer-modified-p nil) ;; do not ask user  when killing buffer
            (setq buffer-file (buffer-file-name))))) ;; let*
-      (if (interactive-p)
+      (if (called-interactively-p 'interactive)
          (when done
            (message "TinyPath: [INFO] Edit and verify changes at %s" file))
        (when (and done buffer-file)
@@ -5302,21 +5298,21 @@ Return
   (interactive "fGive directory with info files: ")
   ;;  If user calls us, make sure new files are also noticed.
   ;;
-  (if (interactive-p)
+  (if (called-interactively-p 'interactive)
       (tinypath-info-initialize))
   (let ((list     (tinypath-info-files-in-directory dir))
        (dir-file (concat (file-name-as-directory dir) "dir"))
        cleanup
        done)
     (when (and (null list)
-              (interactive-p))
+              (called-interactively-p 'interactive))
       (message "Tinypath: No info file candidates in %s" dir))
     (when list                          ;info files in this directory?
       (setq done (tinypath-info-handler-DIR dir))
       (tinypath-info-directory-contents-update
        dir-file
-       (interactive-p)
-       (interactive-p)
+       (called-interactively-p 'interactive)
+       (called-interactively-p 'interactive)
        list)
       (tinypath-verbose-macro 2
        (message "TinyPath: [INFO] PUSH maybe => %s"
@@ -5351,7 +5347,7 @@ Return
       ;;  Kill all previous info files from Emacs, so that next info
       ;;  C-h i will force Emacs to regenerate found new entries.
       (when (or cleanup                 ;Added new directory
-               (interactive-p))
+               (called-interactively-p 'interactive))
        (tinypath-info-initialize)))
     done))
 
@@ -5407,7 +5403,7 @@ Return
          (when (tinypath-info-handler path)
            (setq done t)))))
     (when (and done
-              (interactive-p))
+              (called-interactively-p 'interactive))
       (tinypath-cache-file-save))
     (when done
       (tinypath-info-initialize))
@@ -5475,7 +5471,7 @@ E.g., if you want to calculate days; you'd do
          (message "TinyPath: load time %s %dsec" name diff)
        (tinypath-verbose-macro 9
          (message "TinyPath: load time %s %dsec" name diff)))
-      (aput 'tinypath--time-data name diff))))
+      (push (cons name diff) tinypath--time-data))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -5856,17 +5852,6 @@ LIST can contains single elements or lists:
 
 ;;; ----------------------------------------------------------------------
 ;;;
-(defun tinypath-load-path-remove-old (regexp)
-  "Remove all paths matching REGEXP from `load-path'"
-  (setq load-path
-       (remove-if
-        (function
-         (lambda (x)
-           (string-match regexp x)))
-        load-path)))
-
-;;; ----------------------------------------------------------------------
-;;;
 (defun tinypath-load-path-remove (regexp)
   "Remove any matching REGEXP from `load-path'.
 Return t if removed something."
@@ -5884,7 +5869,7 @@ Return t if removed something."
        (message "TinyPath: FATAL regexp %s cleaned whole load-path."
                 regexp)))
      (t
-      (setq load-path list)))
+      (setq load-path (nreverse list))))
     status))
 
 ;;; ----------------------------------------------------------------------
@@ -6146,7 +6131,7 @@ Input:
     (font-lock-mode 1)
     (make-local-variable 'font-lock-keywords)
     (set 'font-lock-keywords tinypath--report-mode-font-lock-keywords)
-    (font-lock-fontify-buffer)))
+    (font-lock-ensure)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -6536,11 +6521,11 @@ Warning:
     (cond
      (tinypath--cache-mode
       (tinypath-ti::advice-control list "tinypath")
-      (if (interactive-p)
+      (if (called-interactively-p 'interactive)
          (message "TinyPath: cache advice code ACTIVATED.")))
      (t
       (tinypath-ti::advice-control list "tinypath" 'disable)
-      (if (interactive-p)
+      (if (called-interactively-p 'interactive)
          (message "TinyPath: cache advice code DEACTIVATED."))))))
 
 ;;; ----------------------------------------------------------------------
@@ -6571,7 +6556,7 @@ otherwise turn mode off."
 ;;;}}}
 ;;;{{{ Advice code
 
-;; ############################   BEGIN FUNCTION -- advice instantiate
+;; ############################ BEGIN FUNCTION -- advice instantiate
 
 (defun tinypath-advice-instantiate ()
   "Instantiate all advices."
@@ -6594,10 +6579,10 @@ otherwise turn mode off."
   (when tinypath--xemacs-p
     (require 'efs))
 
-;;; ----------------------------------------------------------------------
-;;; (turn-on-tinypath-cache-mode)
-;;; (turn-off-tinypath-cache-mode)
-;;;
+  ;; ----------------------------------------------------------------------
+  ;; (turn-on-tinypath-cache-mode)
+  ;; (turn-off-tinypath-cache-mode)
+  ;;
   (defadvice autoload (around tinypath dis)
     "Use `tinypath--cache' for fast lookup of files."
     (let* ((file        (ad-get-arg 1))
@@ -6606,9 +6591,9 @@ otherwise turn mode off."
        (ad-set-arg 1 path))
       ad-do-it))
 
-;;; ----------------------------------------------------------------------
-;;; (load FILE &optional NOERROR NOMESSAGE NOSUFFIX MUST-SUFFIX)
-;;;
+  ;; ----------------------------------------------------------------------
+  ;; (load FILE &optional NOERROR NOMESSAGE NOSUFFIX MUST-SUFFIX)
+  ;;
   (defadvice load (around tinypath dis)
     "Use `tinypath--cache' for fast lookup of files."
     (let* ((file        (ad-get-arg 0))
@@ -6634,8 +6619,8 @@ otherwise turn mode off."
            (ad-set-arg 0 path))))
       ad-do-it))
 
-;;; ----------------------------------------------------------------------
-;;;
+  ;; ----------------------------------------------------------------------
+  ;;
   (defadvice load-library (around tinypath dis)
     "Use `tinypath--cache' for fast lookup of files."
     (let* ((file  (ad-get-arg 0))
@@ -6646,19 +6631,19 @@ otherwise turn mode off."
        (ad-set-arg 0 path))
       ad-do-it))
 
-;;; ----------------------------------------------------------------------
-;;; In Win32 XEmacs 21.2 beta; the this function calls `locate-file' which
-;;; for some reason breaks if given a absolute file name. The XEmacs
-;;; docs also say that `locate-file' uses hash table to speed up processing.
-;;; Hm.
-;;;
-;;; There is problem with functions that use (interactive-p) test, because
-;;; advice can't pass the information to the underlying function, so any
-;;; such test inside here won't work.
-;;;
-;;; 21.3.1:
-;;; (locate-library LIBRARY &optional NOSUFFIX PATH INTERACTIVE-CALL)
-;;;
+  ;; ----------------------------------------------------------------------
+  ;; In Win32 XEmacs 21.2 beta; the this function calls `locate-file' which
+  ;; for some reason breaks if given a absolute file name. The XEmacs
+  ;; docs also say that `locate-file' uses hash table to speed up processing.
+  ;; Hm.
+  ;;
+  ;; There is problem with functions that use (called-interactively-p 'interactive) test, because
+  ;; advice can't pass the information to the underlying function, so any
+  ;; such test inside here won't work.
+  ;;
+  ;; 21.3.1:
+  ;; (locate-library LIBRARY &optional NOSUFFIX PATH INTERACTIVE-CALL)
+  ;;
   (defadvice locate-library (around tinypath act)
     "Use `tinypath--cache' for fast lookup of files."
     (interactive
@@ -6699,14 +6684,14 @@ otherwise turn mode off."
        ad-do-it))
       ;; We must simulate in the advice, this interactive behavior, because
       ;; underlying function does not know it any more, due to advice.
-      (when (interactive-p)
+      (when (called-interactively-p 'interactive)
        (if path
            (message path)
          (message "locate-library: %s not found."
                   (or file "<no filename>"))))))
 
-;;; ----------------------------------------------------------------------
-;;;
+  ;; ----------------------------------------------------------------------
+  ;;
   (defadvice require (around tinypath dis)
     "Use `tinypath--cache' for fast lookup of files.
 Property (get 'require 'tinypath-load-list) contains list
@@ -6737,7 +6722,7 @@ of required packages: '((feature . path)."
          (ad-set-arg 1 path)))
       ad-do-it))
 
-  ) ;; ############################   END FUNCTION -- end advice instantiate
+  ) ;; ############################ END FUNCTION -- end advice instantiate
 
 ;;;}}}
 ;;;{{{ win32: Unix $HOME directory mounted to PC, like to H: disk
index f7b863e..887b3aa 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinyperl.el --- Grab-bag of Perl related utilities. Pod documentation
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C) 1998-2012 Jari Aalto
+;; Copyright (C) 1998-2016 Jari Aalto
 ;; Keywords:     extensions
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
 ;;
 ;;      (require 'tinyperl)
 ;;
-;;  Autoload, prefer this one, your emacs starts quicker. The additional
+;;  Autoload, prefer this one and your emacs starts quicker. The additional
 ;;  features are turned on only when `perl-mode' runs.
 ;;
 ;;      (autoload 'turn-on-tinyperl-mode  "tinyperl" "" t)
 ;;      (add-hook 'perl-mode-hook  'turn-on-tinyperl-mode)
 ;;      (add-hook 'cperl-mode-hook 'turn-on-tinyperl-mode)
 ;;
-;;  The package will keep the configuration information in a cache and
-;;  if for some reason the cache becomes invalid, the cache can be
-;;  rebuilt with command:
+;;      ;; optional
+;;      (add-hook 'write-file-functions 'tinyperl-version-stamp)
+;;
+;;  The package will keep the configuration information in a cache.
+;;  If for some reason the cache becomes invalid, the cache can be
+;;  rebuilt with command prefix arg like C-u to command:
 ;;
 ;;      C-u M-x tinyperl-install
 ;;
-;;  To completely uninstall package, call:
+;;  To completely uninstall package, use prefix-arg like C-u:
 ;;
 ;;      C-u M-x tinyperl-install-main
 
 
 ;;; Commentary:
 
+;;  Note
+;;
+;;      This package contains minor-mode to help access to Perl's inetrnal
+;;      POD documentation. Th minor mode also helps to write POD manually.
+;;
+;;      This is not Perl mode and has no effect on how you write or
+;;      indent the code.
+;;
 ;;  Preface, march 1998
 ;;
 ;;      Perl was quite new in 1994 and perl programs imported
 ;;      libraries using `require' command. Some time passed and the
 ;;      new Perl 5 was a complete rewrite. It introduced new Object
-;;      and reference technologies to language but lot of perl coders
+;;      and reference technologies to language but lot of Perl coders
 ;;      couldn't grasp the new ideas immediately. Many made the
 ;;      decision to move to perl 5 only after it was mature
 ;;      enough. The perl 5 coding was so much cleaner and simpler
 ;;      compared to perl 4.
 ;;
-;;      As a result some additional Emacs functions were needed the Perl
-;;      work going and this module more or less concentrates on helping to
-;;      document perl programs with POD or getting perl man pages via
-;;      `perldoc' interface. The other companion that you would already
-;;      know is the `cperl-mode' which is the best mode for coding the
-;;      perl language.
+;;      This package was born from the idea of helping to document
+;;      perl programs with POD or getting perl man pages via `perldoc'
+;;      interface.
 ;;
 ;;  Overview of features
 ;;
 ;;      is more close to the original one. With Cygwin, you can
 ;;      install and upgrade CPAN archives easily:
 ;;
-;;             perl -MCPAN -e shell
+;;              perl -MCPAN -e shell
 ;;
 ;;      Multiple Perl installations are _not_ _supported._ The one
 ;;      that comes in path first is used. Perl advances each time so
 ;;
 ;;      `tinyperl-mode' minor mode:
 ;;
-;;      o   Instant function help: See documentation of `shift', `pop'...
+;;      o   Function help: See documentation of `shift', `pop'...
 ;;      o   Lint for Perl is available if Perl::Critic has been installed.
 ;;      o   Show Perl manual pages in *pod* buffer
 ;;      o   Load library source code into Emacs, like Devel::DProf.pm
 ;;      o   Grep through all Perl manual pages (.pod)
 ;;      o   Follow POD manpage references to next pod page with TinyUrl
-;;      o   Colored pod pages with `font-lock'
-;;      o   Update `$VERSION' variable with YYYY.MMDD on save.
+;;      o   Colored POD pages with `font-lock'
+;;      o   Update `$VERSION' variable n Perl code with YYYY.MMDD on save.
 ;;
 ;;      Other minor modes:
 ;;
 ;;  Package startup
 ;;
 ;;      At package startup the perl binary's `tinyperl--perl-bin'
-;;      `@INC' content is cached. If you have modules somewhere else than
-;;      the standard `@INC', then add additional `-I' switches to the
-;;      `tinyperl--inc-path-switches' so that these additional paths are
-;;      cached too.
+;;      `@INC' content is cached. If you have modules somewhere else
+;;      than the standard `@INC', then add additional `-I' switches to
+;;      the `tinyperl--inc-path-switches' so that these additional
+;;      paths are cached too.
 ;;
-;;      In addition the Perl POD manual pages and paths are cached at startup.
-;;      This is derived from *Config.pm* variable $Config{privlib}.
+;;      In addition the Perl POD manual pages and paths are cached at
+;;      startup. This is derived from *Config.pm* variable
+;;      $Config{privlib}.
 ;;
 ;;      If you need to change any of the above settings in environment
-;;      during the session, reload package or call `tinyperl-install' to
-;;      update the changed values.
+;;      during the session, reload package or call `tinyperl-install'
+;;      to update the changed values.
 ;;
 ;;  Saving TinyPerl state (cache)
 ;;
 ;;      this by calling `tinyperl-install' with a force flag; use
 ;;      some prefix argument (e.g. `C-u').
 ;;
-;;      The cache information is expired periodically, so it should keep up
-;;      with the environment changes quite well. The default cache period
-;;      is 7 days, but this can be set via
+;;      The cache information is expired periodically, so it should
+;;      keep up with the environment changes quite well. The default
+;;      cache period is 7 days, but this can be set via
 ;;      `tinyperl--cache-file-days-old-max'.
 ;;
 ;;  Perl Minor Mode description
 ;;
 ;;      If the VERSION variable uses number format NNNN.NNNN, then it
 ;;      is assumed to contain ISO 8601 date YYYY.MMDD and this package
-;;      will update the `$VERSION' variable's date every time file is
+;;      can update the `$VERSION' variable's date every time file is
 ;;      saved (see `write-file-functions' and `tinyperl-version-stamp').
 ;;
 ;;  Submitting your perl script to CPAN
@@ -575,8 +586,8 @@ See `tinyperl-podchecker'."
 ;;{{ setup: public
 
 (defcustom tinyperl--verbose 1
-  "*If number, bigger than zero, dispaly informational messages.
-In error situations you can look old messages from *Messages* buffer."
+  "*If number, bigger than zero, display informational messages.
+See messages in *Messages* buffer."
   :type  '(integer :tag "Verbose level 0 ... 10")
   :group 'TinyPerl)
 
@@ -590,7 +601,7 @@ In error situations you can look old messages from *Messages* buffer."
   :type  'string
   :group 'TinyPerl)
 
-(defcustom tinyperl--lint-severity 1   ;Max
+(defcustom tinyperl--lint-severity 1    ;Max
   "*Default severity to run Perl::Critic with.
 As of 2010-04-15 perlcritic(1), this can be in range
 1 (brutal) .. 5 (gentle)."
@@ -917,10 +928,10 @@ See `tinyperl-pod-grep-faq-answer'")
 (defmacro tinyperl-directory-files (variable path &optional regexp)
   "Store to VARIABLE .pl and .pm files in PATH. Optionally match REGEXP."
   `(setq ,variable
-        (directory-files
-         ,path
-         nil
-         (or ,regexp "\\.pl\\|\\.pm"))))
+         (directory-files
+          ,path
+          nil
+          (or ,regexp "\\.pl\\|\\.pm"))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -949,9 +960,9 @@ when it matches REGEXP and set variable SYM to that value, effectively:
   (unless (string-match "\\.pm$" module)
     (setq module (concat module ".pm")))
   (let ((elt (assoc module tinyperl--inc-module-list))
-       (file (if (string-match ".*::\\(.*\\)" module)
-                 (match-string 1 module)
-               module)))
+        (file (if (string-match ".*::\\(.*\\)" module)
+                  (match-string 1 module)
+                module)))
     (when elt
       (concat (file-name-as-directory (cdr elt))
               file))))
@@ -975,7 +986,7 @@ when it matches REGEXP and set variable SYM to that value, effectively:
 ;;;
 (defun tinyperl-variable-convert (&optional dos-format)
   "Convert all path variables to Unix or DOS-FORMAT."
-  (flet ((convert (var)
+  (cl-flet ((convert (var)
                   (if dos-format
                       (ti::file-name-backward-slashes var)
                     (ti::file-name-forward-slashes var))))
@@ -1043,7 +1054,7 @@ Return:
   t      If some path needed fixing. This means that cache must be resaved."
   (interactive "P")
   (let (ok)
-    (flet ((exec-set
+    (cl-flet ((exec-set
             (sym bin &optional regexp) ;; Parameters
             (let ((value (symbol-value sym)))
               (when (or force
@@ -1070,8 +1081,8 @@ Check variable `exec-path'"
       (tinyperl-perl-examine tinyperl--perl-bin)
       ;;  Leave trace to Message buffer.
       (tinyperl-verbose-macro 2
-       (message "TinyPerl: [Perl version] => %s"
-                (or (tinyperl-perl-type-version-info) "")))
+        (message "TinyPerl: [Perl version] => %s"
+                 (or (tinyperl-perl-type-version-info) "")))
       ok)))
 
 ;;; ----------------------------------------------------------------------
@@ -1094,18 +1105,19 @@ References:
   `tinyperl--pod-path'
   `tinyperl--pod-list'"
   (interactive)
-  (flet ((set-maybe
-         (symbol eval-form)
-         (when (or (eq 'force check)
-                   (and check
-                        (symbol-value symbol)))
-           (tinyperl-verbose-macro 1
-             (message "TinyPerl: Wait, setting up var: %s" symbol))
-           (set symbol
-                (eval eval-form)))))
+  (cl-flet ((set-maybe
+             (symbol eval-form)
+             (when (or (eq 'force check)
+                       (and check
+                            (symbol-value symbol)))
+               (when verb
+                 (tinyperl-verbose-macro 1
+                   (message "TinyPerl: Wait, setting up var: %s" symbol)))
+               (set symbol
+                    (eval eval-form)))))
     (when verb
       (tinyperl-verbose-macro 1
-       (message "TinyPerl: Wait, setting up variables...")))
+        (message "TinyPerl: Wait, setting up variables...")))
     (unless (set-maybe
              'tinyperl--inc-path
              '(tinyperl-inc-path tinyperl--perl-bin))
@@ -1128,7 +1140,7 @@ tinyperl--perl-bin Unrecognized. Need Perl 5. [%s]"
       (error "TinyPerl: Setup failure tinyperl--pod-list"))
     (when verb
       (tinyperl-verbose-macro 1
-       (message "TinyPerl: Wait, setting up variables...Done.")))))
+        (message "TinyPerl: Wait, setting up variables...Done.")))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -1205,7 +1217,7 @@ Input:
 
   VERB      Allow verbose messaegs."
   (let (stat
-       ok)
+        ok)
     ;;  The FORCE Flag says that we should start all over, no
     ;;  matter how broken our setup is. In case the unfortunate
     ;;  accident of tinyperl--perl-bin being in format
@@ -1234,7 +1246,7 @@ Input:
       (tinyperl-save-state nil verb)
       (when verb
         (tinyperl-verbose-macro 1
-         (message "TinyPerl: Setting up variables...done"))))
+          (message "TinyPerl: Setting up variables...done"))))
     (put 'tinyperl-mode
          'podchecker
          (tinyperl-perl-module-exists-p "Pod::Checker.pm"))
@@ -1253,7 +1265,8 @@ Input:
   UNINSTALL   Uninstall, remove hooks etc.
   FORCE       Forced install. In case modules have installed from CPAN,
               this variable should be set to force rescan of @INC instead
-              of using cache."
+              of using cache.
+              See \\[tinyperl-install-force]."
   (interactive "P")
   (tinyperl-install-hooks uninstall)
   (unless uninstall
@@ -1294,7 +1307,7 @@ When LOAD: If `(tinyperl-cache-file-name)' does not exist. return nil."
         (load file)
         (when verb
           (tinyperl-verbose-macro 1
-           (message "TinyPerl: state restored [%s]" file)))
+            (message "TinyPerl: state restored [%s]" file)))
         t))
      (t
       (ti::write-file-variable-state
@@ -1309,7 +1322,7 @@ When LOAD: If `(tinyperl-cache-file-name)' does not exist. return nil."
          tinyperl--pod2text-bin))
       (when verb
         (tinyperl-verbose-macro 1
-         (message "TinyPerl: state saved [%s]" file)))
+          (message "TinyPerl: state saved [%s]" file)))
       t))))
 
 ;;; ----------------------------------------------------------------------
@@ -1369,9 +1382,9 @@ When LOAD: If `(tinyperl-cache-file-name)' does not exist. return nil."
   (ti::add-hooks 'tinyperl--pod-write-mode-define-keys-hook
                  'tinyperl-pod-write-mode-define-keys
                  remove)
-  (ti::add-hooks 'write-file-functions
-                 'tinyperl-version-stamp
-                 remove)
+  ;; (ti::add-hooks 'write-file-functions
+  ;;                'tinyperl-version-stamp
+  ;;                remove)
   (when verb
     (tinyperl-verbose-macro 2
       (message "TinyPerl: Hooks installed"))))
@@ -1770,10 +1783,10 @@ Mode description:
                                     (symbol-name x)))))
           (setq def
                 `(defun ,sym ()
-                  "Forward declaration wrapper. Will define real function."
-                  (interactive)
-                  (tinyperl-skeleton-initialize)
-                  (funcall (quote ,sym))))
+                   "Forward declaration wrapper. Will define real function."
+                   (interactive)
+                   (tinyperl-skeleton-initialize)
+                   (funcall (quote ,sym))))
           (eval def))))
      '(item
        script-manpage
@@ -2139,10 +2152,10 @@ Hee is one suggestion ofr Module.pm POD layout
 -->
 '(\"C:\\Program files\\this\" \"c:\\temp\")"
   (let (locations
-       beg
-       end
-       ret
-       str)
+        beg
+        end
+        ret
+        str)
     (with-temp-buffer
       (insert string)
       (ti::pmin)
@@ -2162,11 +2175,11 @@ Hee is one suggestion ofr Module.pm POD layout
 (defun tinyperl-inc-split (inc)
   "Split @INC in INC string, where entries are separated by spaces."
   (let ((fid "tinyperl-inc-split")
-       (perl-type (tinyperl-perl-type))
-       ;;  We can't just explode RESULT with Emacs function `split'
-       ;;  because in Win32 it may contain spaces
-       ;;  c:\Program files\activestate\perl\lib
-       list)
+        (perl-type (tinyperl-perl-type))
+        ;;  We can't just explode RESULT with Emacs function `split'
+        ;;  because in Win32 it may contain spaces
+        ;;  c:\Program files\activestate\perl\lib
+        list)
     (when inc
       (cond
        ((and (ti::win32-p)
@@ -2220,21 +2233,25 @@ If Emacs is win32 application, convert to DOS style paths."
   ;;
   ;;      PERL5LIB paths refer to cygwin, like /usr/share/site-perl/CPAN
   ;;
-  ;;  But this is not a path that GNU Emacs know, because it is pure
+  ;;  But this is not a path that GNU Emacs knows because it is a pure
   ;;  Windows application. The paths must be converted so that
   ;;
   ;;     CYGWIN-ROOT/path   or CYGWIN-MOUNT-POINT/path
   ;;
-  ;;  #todo: XEmacs is different game, it can be built as Cygwin native
-  ;;  #todo: How to check if running Cygwin or Win32 XEmacs ?
+  ;;  FIXME: XEmacs is different game, it can be built as Cygwin native
+  ;;  FIXME: How to check if running Cygwin or Win32 XEmacs ?
   (let ((perl-type (tinyperl-perl-type)))
     (cond
      ((and (ti::emacs-p)
-           ;;  #todo: if Emacs is built as native cygwin application,
+           ;;  FIXME: if Emacs is built as native cygwin application,
            ;;  this fails.
            (eq perl-type 'win32-cygwin))
       (let (new-list)
         (dolist (path list)
+          (setq path (subst-char-in-string ?\\ ?/ path))
+          ;; In Cygwin mount redirects /usr/lib => /lib and there is
+          ;; no physical /usr/lib directory
+          (setq path (replace-regexp-in-string "/usr/lib" "/lib" path))
           (cond
            ((and (string-match "^/" path)
                  ;;  Exclude Win32 UNC path formats: //SERVER/dir/dir
@@ -2311,6 +2328,8 @@ References:
     (if path5
         (setq list (append list path5)))
     (setq list (delete "." list))
+    (setq list (delete "./" list))
+    (setq list (delete ".\\" list))
     (tinyperl-debug fid "list [2]" list)
     ;;  Make sure Emacs can read the Paths -- Win32 specific support
     (setq list (tinypath-path-convert-to-emacs-host list))
@@ -2323,7 +2342,7 @@ References:
             ;;  Record to message, so that possible errors can be
             ;;  traced.
             (tinyperl-verbose-macro 3
-             (message "Tinyperl: invalid @INC dir %s. Ignored." x))))))
+              (message "Tinyperl: in @INC, non-existing dir %s" x))))))
     (tinyperl-debug fid "result [2]" result)
     (when (and result
                (null ret))
@@ -2392,10 +2411,12 @@ References:
 ;;;
 (defun tinyperl-build-pod-files ()
   "Build files under pod path."
+  ;; FIXME: Hm. /usr/ib/5.xx/pod directory doesn't much contain *.pod
+  ;; files.
   (let ((path  (or tinyperl--pod-path
-                  (error "TinyPerl: No tinyperl--pod-path")))
-       files
-       ret)
+                   (error "TinyPerl: No tinyperl--pod-path")))
+        files
+        ret)
     (setq files (ti::directory-files path "\\.pod"))
     (dolist (file files)
       (push (cons file (ti::file-name-forward-slashes path)) ret))
@@ -2412,14 +2433,14 @@ Return:
 
   '((package.pm . path) (package::package.pm . path) ..)"
   (let ((INC (or search-list
-                (error "TinyPerl: No SEARCH-LIST")))
-       files
-       dirs
-       dirs2
-       dirs3
-       package
-       ret)
-    (flet ((my-add
+                 (error "TinyPerl: No SEARCH-LIST")))
+        files
+        dirs
+        dirs2
+        dirs3
+        package
+        ret)
+    (cl-flet ((my-add
             (file pfx path)
             ;;  As long as the name of the .pl file is unique (not yet
             ;;  added), store without leading prefix directories.
@@ -2443,7 +2464,7 @@ Return:
       (dolist (path INC)
         (when verb
           (tinyperl-verbose-macro 2
-           (message "TinyPerl: Reading @INC path %s" path)))
+            (message "TinyPerl: Reading @INC path %s" path)))
         (tinyperl-directory-files files path)
         (dolist (file files)
           (push (cons file path) ret))
@@ -2512,23 +2533,23 @@ TinyPerl: Pod::Checker.pm is not known to this Perl version. @INC trouble?"))
         (run-hooks 'tinyperl--podchecker-after-hook)))
     (when t
       (let* (compilation-error-regexp-alist
-            ;;  `shell-quote-argument'  does not work here correctly.
-            ;;  This tackles bash.exe and  Win32 command-com
-            (quote (if (and (ti::win32-p)
-                            (string-match "cmd\\|command"
-                                          shell-file-name))
-                       "\""
-                     "'"))
-            (cmd (concat
-                  tinyperl--perl-bin
-                  " -MPod::Checker"
-                  " -e"
-                  " "
-                  quote
-                  "podchecker shift, undef, -warnings , q(on)"
-                  quote
-                  " "
-                  (expand-file-name file))))
+             ;;  `shell-quote-argument'  does not work here correctly.
+             ;;  This tackles bash.exe and  Win32 command-com
+             (quote (if (and (ti::win32-p)
+                             (string-match "cmd\\|command"
+                                           shell-file-name))
+                        "\""
+                      "'"))
+             (cmd (concat
+                   tinyperl--perl-bin
+                   " -MPod::Checker"
+                   " -e"
+                   " "
+                   quote
+                   "podchecker shift, undef, -warnings , q(on)"
+                   quote
+                   " "
+                   (expand-file-name file))))
         ;;  Keep the old values and add this regexp.
         ;;  2 = filename, 1 = line number
         ;; *** WARNING: 2 unescaped <> in paragraph at line 1994 in file xxx
@@ -2570,33 +2591,36 @@ TinyPerl: Pod::Checker.pm is not known to this Perl version. @INC trouble?"))
                             (ti::win32-cygwin-p))))
         (tinyperl-debug fid "file" file)
         ;; perl -MPod::Text -e "pod2text shift" -n groff /cygdrive/p/unix/cygwin/lib/perl5/5.8.0/pods/perlfunc.pod
-       (cond
-        ((not (string-match "-nt" (emacs-version))) ; Not NT Emacs
-         (call-process "pod2text"
-                       nil
-                       buffer
-                       nil
-                       file))
-
-       (t
-        ;; NOTE: Perl 5.x has bug in -MPod::Text
-        ;; FIXME Nothing we can do?
-        (call-process tinyperl--perl-bin
-                      nil
-                      buffer
-                      nil
-                      "-MPod::Text"
-                      "-e"
-                      "pod2text shift"
-                      ;;  Cygwin's groff(1) was changed to bash
-                      ;;  shell script which cannot be used
-                      ;;  from NTEmacs
+        (cond
+         ((not (memq system-type '(windows-nt)))
+          (unless (and (stringp tinyperl--pod2text-bin)
+                       (file-exists-p tinyperl--pod2text-bin))
+            (error "Please set or fix location of tinyperl--pod2text-bin"))
+          (call-process tinyperl--pod2text-bin
+                        nil
+                        buffer
+                        nil
+                        file))
+
+        (t
+         ;; NOTE: Perl 5.x has bug in -MPod::Text
+         ;; FIXME Nothing we can do?
+         (call-process tinyperl--perl-bin
+                       nil
+                       buffer
+                       nil
+                       "-MPod::Text"
+                       "-e"
+                       "pod2text shift"
+                       ;;  Cygwin's groff(1) was changed to bash
+                       ;;  shell script which cannot be used
+                       ;;  from NTEmacs
 ;;;#todo
 ;;;                      (if nt-cygwin
 ;;;                          "-n")
 ;;;                      (if nt-cygwin
 ;;;                          "groff")
-                      file)))
+                       file)))
         (when (eq (point) point)
           (message
            (concat "TinyPerl: pod2text was empty. "
@@ -2616,8 +2640,8 @@ TinyPerl: Pod::Checker.pm is not known to this Perl version. @INC trouble?"))
 (defun tinyperl-pod-manpage-to-file (pod)
   "Convert POD `perldoc.pod' or `perldoc' into absolute filename."
   (let ((elt (assoc (ti::string-verify-ends pod ".pod")
-                   (or tinyperl--pod-list
-                       (error "TinyPerl: No tinyperl--pod-list")))))
+                    (or tinyperl--pod-list
+                        (error "TinyPerl: No tinyperl--pod-list")))))
     (when elt
       (concat (cdr elt) (car elt)))))
 
@@ -2733,7 +2757,7 @@ returns non-nil."
     ;;  to take in effect.
     (turn-on-font-lock-mode)
     (setq font-lock-keywords tinyperl--pod-font-lock-keywords)
-    (font-lock-fontify-buffer)
+    (font-lock-ensure)
     nil))
 
 ;;; ----------------------------------------------------------------------
@@ -2821,14 +2845,14 @@ Call arguments are in ARG-LIST."
    (t
     (with-current-buffer buffer
       (let* ((perl-type (tinyperl-perl-type))
-            (cmd       (if (ti::win32-shell-p)
-                           ;;  Must not contain path name
-                           ;;  I don't know if the exact problem was due to
-                           ;;  SPACES in the path name.
-                           "perldoc"
-                         tinyperl--perldoc-bin))
-            (call-type (tinyperl-external-command-format cmd))
-            (args (ti::list-to-string arg-list)))
+             (cmd       (if (ti::win32-shell-p)
+                            ;;  Must not contain path name
+                            ;;  I don't know if the exact problem was due to
+                            ;;  SPACES in the path name.
+                            "perldoc"
+                          tinyperl--perldoc-bin))
+             (call-type (tinyperl-external-command-format cmd))
+             (args (ti::list-to-string arg-list)))
         ;;  Add "perl" to the front of command if it is "perldoc".
         ;;  This will work under Windows/Cygwin and Unix
         (if (listp call-type)
@@ -2870,18 +2894,18 @@ References:
     (read-string "Perldoc -f: "  (ti::buffer-read-word))
     current-prefix-arg))
   (let ((buffer (get-buffer-create tinyperl--perldoc-buffer))
-       (last   (get 'tinyperl-perldoc 'string))
-       (cmd    (format
-                "%s -f %s"
-                (if (ti::win32-shell-p)
-                    ;;  Must not contain path name
-                    ;;  I don't know if the exact problem was due to
-                    ;;  SPACES in the path name.
-                    "perldoc"
-                  tinyperl--perldoc-bin)
-                string))
-       run
-       win)
+        (last   (get 'tinyperl-perldoc 'string))
+        (cmd    (format
+                 "%s -f %s"
+                 (if (ti::win32-shell-p)
+                     ;;  Must not contain path name
+                     ;;  I don't know if the exact problem was due to
+                     ;;  SPACES in the path name.
+                     "perldoc"
+                   tinyperl--perldoc-bin)
+                 string))
+        run
+        win)
     (ti::verb)
     (when (or force
               (and buffer
@@ -2896,8 +2920,8 @@ References:
         (erase-buffer))
       (when verb
         (tinyperl-verbose-macro
-           2
-         (message "TinyPerl: Running %s" cmd)))
+            2
+          (message "TinyPerl: Running %s" cmd)))
       ;; Win32 call-process fails if the binary c:\prgram files\..
       ;; name contains spaces. This is special problems for perldoc.bat
       ;; Because it is in fact full of perl code and called again. See
@@ -2911,20 +2935,20 @@ References:
           (erase-buffer)
           (when verb
             (tinyperl-verbose-macro
-               2
-             (message "TinyPerl: No matches. Trying without -f ...")))
+                2
+              (message "TinyPerl: No matches. Trying without -f ...")))
           (tinyperl-perldoc-1 buffer (list string))
           (setq cmd (format "%s %s"
                             tinyperl--perldoc-bin
                             string))
           (when verb
             (tinyperl-verbose-macro
-               2
-             (message "TinyPerl: No matches. Trying without -f ...Done.")))))
+                2
+              (message "TinyPerl: No matches. Trying without -f ...Done.")))))
       (when verb
         (tinyperl-verbose-macro
-           2
-         (message "TinyPerl: Running %s. Done." cmd))))
+            2
+          (message "TinyPerl: Running %s. Done." cmd))))
     (cond
      ((setq win (or (get-buffer-window buffer t) ;In another frame
                     (get-buffer-window buffer)))
@@ -3008,23 +3032,23 @@ Input:
       ;;  In FEW cases the *.pm file does not contain the documentation,
       ;;  but there is separate *.pod file, E.g POSIX.pm => POSIX.pod
       (let (try)
-       (multiple-value-bind (name path)
-           (list (car module) (cdr module))
-         (dolist (elt (list
-                       (replace-regexp-in-string
-                        ".pm" ".pod" name)
-                       name))
-           (setq try
-                 (ti::file-make-path
-                  path
-                  ;;  Delete prefix, because (cdr path) will cnotain the
-                  ;;  full directory
-                  ;;
-                  ;;  Getopt::Long.pm --> Long.pm
-                  (replace-regexp-in-string
-                   ".*:" ""
-                   elt)))
-           (when (file-exists-p try)
+        (multiple-value-bind (name path)
+            (list (car module) (cdr module))
+          (dolist (elt (list
+                        (replace-regexp-in-string
+                         ".pm" ".pod" name)
+                        name))
+            (setq try
+                  (ti::file-make-path
+                   path
+                   ;;  Delete prefix, because (cdr path) will cnotain the
+                   ;;  full directory
+                   ;;
+                   ;;  Getopt::Long.pm --> Long.pm
+                   (replace-regexp-in-string
+                    ".*:" ""
+                    elt)))
+            (when (file-exists-p try)
             (setq file try)
             (return)))))
       (when (or (not file)
@@ -3145,14 +3169,14 @@ to the correct position."
   (unless (file-directory-p pod-path)
     (error "POD directory not found [%s]" pod-path))
   (let ((grep (tinyperl-grep-program))
-       ;;  Have to set this variable, because we can't
-       ;;  allow to pass full path to the grep. in Win32 Emacs would
-       ;;  send path in DOS style, but Cygwin does not accept those;
-       ;;  only unix style paths.
-       ;:
-       ;;  So, it's enough to Emacs to do an "cd" to directory.
-       ;;
-       (default-directory (file-name-directory pod-path)))
+        ;;  Have to set this variable, because we can't
+        ;;  allow to pass full path to the grep. in Win32 Emacs would
+        ;;  send path in DOS style, but Cygwin does not accept those;
+        ;;  only unix style paths.
+        ;:
+        ;;  So, it's enough to Emacs to do an "cd" to directory.
+        ;;
+        (default-directory (file-name-directory pod-path)))
     (setq pod-path "")
     (if (fboundp 'igrep)
         (ti::funcall 'igrep nil regexp "*.pod" pod-path)
@@ -3183,7 +3207,7 @@ Return:
 
 TOPIC-HEADING  does not end to cr/lf
 TEXT-DATA      ends to cr/lf"
-  (flet ((context-min (point lines)
+  (cl-flet ((context-min (point lines)
                       (goto-char point)
                       (forward-line (- lines))
                       (point))
@@ -3284,7 +3308,7 @@ Return:
       (let ((file (concat grep-dir grep-file)))
         (when verb
           (tinyperl-verbose-macro 2
-           (message "TinyPerl: reading faq context %s" file)))
+            (message "TinyPerl: reading faq context %s" file)))
         (setq buffer (find-file-noselect file)))
       (with-current-buffer buffer
         (ti::goto-line grep-line))
@@ -3313,8 +3337,8 @@ References:
         (multiple-value-bind (topic text) context-data
           (when verb
             (tinyperl-verbose-macro 2
-             (message "TinyPerl: processing data %s"
-                      (file-name-nondirectory file))))
+              (message "TinyPerl: processing data %s"
+                       (file-name-nondirectory file))))
           (insert
            (format "FILE: [%s]" (file-name-nondirectory file))
            (if line
@@ -3372,9 +3396,9 @@ been answered in FAQ'"
         (ti::pmin)))
     (if data
         (tinyperl-verbose-macro 1
-         (message "TinyPerl: FAQ done."))
+          (message "TinyPerl: FAQ done."))
       (tinyperl-verbose-macro 1
-       (message "TinyPerl: FAQ context processing failed [no data].")))))
+        (message "TinyPerl: FAQ context processing failed [no data].")))))
 
 ;;}}}
 ;;{{{ Misc
@@ -3429,15 +3453,15 @@ See also:
    http://perlcritic.tigris.org"
   (interactive "p")
   (let ((current (current-buffer))
-       (buffer  (get-buffer-create tinyperl--lint-buffer-name))
-       (file    (buffer-file-name))
-       (default-file tinyperl--lint-default-file-name))
+        (buffer  (get-buffer-create tinyperl--lint-buffer-name))
+        (file    (buffer-file-name))
+        (default-file tinyperl--lint-default-file-name))
     (or level
-       (setq level tinyperl--lint-severity))
+        (setq level tinyperl--lint-severity))
     (unless file
       (unless default-file
-       (error "No tinyperl--lint-buffer-name to save buffer %s"
-              (buffer-name)))
+        (error "No tinyperl--lint-buffer-name to save buffer %s"
+               (buffer-name)))
       (write-region (point-min) (point-max) default-file)
       (setq file default-file))
     (with-current-buffer buffer
@@ -3446,24 +3470,24 @@ See also:
       ;; On the other hand, now we get raw results and no ~/.perlcriticrc
       ;; is read.
       (let ((command
-            (format
-             (concat "print critique("
-                     tinyperl--lint-arguments
-                     ", shift)")
-             (number-to-string level))))
-       (call-process "perl"
-                     nil
-                     (current-buffer)
-                     nil
-                     "-MPerl::Critic=critique"
-                     "-e"
-                     command
-                     (expand-file-name file)))
+             (format
+              (concat "print critique("
+                      tinyperl--lint-arguments
+                      ", shift)")
+              (number-to-string level))))
+        (call-process "perl"
+                      nil
+                      (current-buffer)
+                      nil
+                      "-MPerl::Critic=critique"
+                      "-e"
+                      command
+                      (expand-file-name file)))
       (run-hooks 'tinyperl--lint-hook)
       (when (fboundp 'tinycompile-mode)
-       (tinycompile-mode 1)
-       (make-local-variable 'tinycompile--buffer-name)
-       (setq tinycompile--buffer-name current)))
+        (tinycompile-mode 1)
+        (make-local-variable 'tinycompile--buffer-name)
+        (setq tinycompile--buffer-name current)))
     (display-buffer buffer)))
 
 ;;; ----------------------------------------------------------------------
@@ -3477,8 +3501,8 @@ Input:
               try to guess verison number from a Perl variable in script.
               See function `tinyperl-version-stamp-re-search-forward'."
   (let (kill
-       buffer
-       ret)
+        buffer
+        ret)
     (setq buffer (or (and filename
                           (find-buffer-visiting filename))
                      (prog1
@@ -3486,20 +3510,20 @@ Input:
                        (setq kill t))))
     (with-current-buffer buffer
       (tinyperl-version-macro
-       (let* ((ver   (or (match-string 2)
-                         (and use-date
-                              (format-time-string
-                               "%Y.%m%d"
-                               (current-time)))))
-              (name1 (file-name-nondirectory
-                      (or filename
-                          (buffer-file-name)
-                          (error "TinyPerl: No `buffer-file-name'"))))
-              (name  (file-name-sans-extension name1))
-              (ext   (file-name-extension name1)))
-         (when (and (stringp ver)
-                    (string-match "^[0-9]+" ver))
-           (setq ret (format "%s-%s.%s" name ver ext))))))
+        (let* ((ver   (or (match-string 2)
+                          (and use-date
+                               (format-time-string
+                                "%Y.%m%d"
+                                (current-time)))))
+               (name1 (file-name-nondirectory
+                       (or filename
+                           (buffer-file-name)
+                           (error "TinyPerl: No `buffer-file-name'"))))
+               (name  (file-name-sans-extension name1))
+               (ext   (file-name-extension name1)))
+          (when (and (stringp ver)
+                     (string-match "^[0-9]+" ver))
+            (setq ret (format "%s-%s.%s" name ver ext))))))
     (if kill                            ;We loaded this from disk
         (kill-buffer buffer))
     ret))
@@ -3614,11 +3638,11 @@ Input:
                     (file-name-nondirectory buffer-file-name))
     current-prefix-arg))
   (let ((name (file-name-nondirectory file))
-       tmp
-       buffer
-       cmd-1
-       beg
-       end)
+        tmp
+        buffer
+        cmd-1
+        beg
+        end)
     (setq file (expand-file-name file))
     (unwind-protect
         (progn
@@ -3627,7 +3651,7 @@ Input:
             (unless (string-match "\\.pm$" name)
               ;;  SelfStubber expects Modules (.pm) files only
               (tinyperl-verbose-macro 2
-               (message "TinyPerl: %s must end to .pm, fixing..." file))
+                (message "TinyPerl: %s must end to .pm, fixing..." file))
               (setq name (concat name ".pm")))
 
             (setq tmp (ti::temp-file name 'tmp-dir))
@@ -3649,11 +3673,11 @@ Input:
                                            (file-name-directory file))))
 
           (tinyperl-verbose-macro 2
-           (message ;Record it to *Messages* buffer
-            (format
-             "%s -MDevel::SelfStubber -e %s"
-             tinyperl--perl-bin
-             cmd-1)))
+            (message ;Record it to *Messages* buffer
+             (format
+              "%s -MDevel::SelfStubber -e %s"
+              tinyperl--perl-bin
+              cmd-1)))
           ;; ........................................... find-position ...
           (and (setq beg (ti::re-search-check
                           "BEGIN:[ \t]+Devel::SelfStubber"))
@@ -3675,7 +3699,7 @@ Input:
                             cmd-1)
 
               (tinyperl-verbose-macro 1
-               (message "TinyPerl: stubs updated in buffer"))))
+                (message "TinyPerl: stubs updated in buffer"))))
            (t                           ;No previoous STUBS
             (call-process tinyperl--perl-bin
                           nil
index 55a31c9..bb46f11 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 ;; Created:         1997-09
 ;;      ;;  Procmail files usually end to suffix "*.rc", like pm-file.rc
 ;;      ;;  Some older procmail files start with "rc.*", like rc.file-name
 ;;
-;;      (autoload 'aput "assoc")
-;;      (aput 'auto-mode-alist
-;;            "\\.procmailrc\\|pm-.*\\.rc$\\|\\<rc\\.[a-z]"
-;;            'turn-on-tinyprocmail-mode)
+;;      (push '("\\.procmailrc\\|pm-.*\\.rc$\\|\\<rc\\.[a-z]" .
+;;              turn-on-tinyprocmail-mode)
+;;       'auto-mode-alist)
 ;;
 ;;  This source file includes sample procmail test file for Lint. You
 ;;  can unpack it if you have `gpg' and `tar' commands in your system.
 
 (require 'tinylibm)
 
-(defconst tinyprocmail--version-time "2010.1120.2052"
+(defconst tinyprocmail--version-time "2013.0613.1819"
   "*Version of last edit.")
 
 (eval-and-compile
@@ -868,7 +867,7 @@ Mode description
 \\{tinyprocmail-output--mode-prefix-map}"
    "tinyprocmail"
    (progn
-     (when (and (interactive-p)        ;On when user calls us directly
+     (when (and (called-interactively-p 'interactive)        ;On when user calls us directly
                 ;; Mode is Now turned on, check Lint buffer and confirm
                 tinyprocmail-output-mode
                 (null (ti::re-search-check (concat "^" (regexp-quote "*** "))))
@@ -962,7 +961,7 @@ must match `^:0'."
     (ti::assoc-replace-maybe-add
      'auto-mode-alist
      tinyprocmail--auto-mode-alist)
-    (if (interactive-p)
+    (if (called-interactively-p 'interactive)
         (message "TinyProcmail: uninstalled")))))
 
 ;;; ----------------------------------------------------------------------
index d7aab77..225f244 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
index 5524669..9580c3f 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C) 1996-2012 Jari Aalto
+;; Copyright (C) 1996-2016 Jari Aalto
 ;; Keywords:     extensions
 ;; Author:       Jari Aalto
 ;; Maintainer:   Jari Aalto
 
 ;;  Preface, May 1996
 ;;
-;;      I was in the middle of testing one of my new packages which didn't
-;;      quite work as I wanted, I was loading all the lisp files to see if
-;;      it breaks. I watched the *Message* buffer to fill with statements
+;;      I was in the middle of testing one of my new packages which
+;;      didn't quite work as I wanted. I was loading all kinds of
+;;      libraries to see if it breaks. I watched the *Message* buffer
+;;      to fill with statements like:
 ;;
 ;;          Loading abbrev...
 ;;          Loading abbrev...done
 ;;          loading rmail done...
 ;;          ...
 ;;
-;;      But suddendly the emacs died. It kicked me off to the shell and I
+;;      But suddendly the Emacs died. It kicked me off to the shell and I
 ;;      had no idea what package was the last one that got loaded.
 ;;
 ;;      You see, the *Message* buffer keeps growing, but you have to tap
-;;      the pgDown key to get to the end, all the time. Instead I decided
+;;      the PgDown key to get to the end, all the time. Instead I decided
 ;;      to pull out some lisp to do general auto-scrolling for any buffer,
 ;;      so that I can just sit back and watch the buffer move. No more
-;;      guessing in *Message* buffer what was the last message before Emacs
-;;      sunk :-)
+;;      guessing in *Message* buffer what was the last message before
+;;      Emacs went down.
 ;;
 ;;  Overview of features
 ;;
 ;;      o   Select buffer, and hit auto scroll on/off. You can scroll any
 ;;          buffer.
 ;;      o   All windows for the buffer are scrolled in all frames.
-;;          If frame is miimized and contains window to sroll, frame will
+;;          If frame is minized and contains window to sroll, frame will
 ;;          be maximized ("popped up")
 ;;      o   If buffer's point-max doesn't move, scroll is ignored.
-;;      o   Default scroll activated for: *Compilation* *Grep* and *Messages*
+;;      o   Default scroll is activate for: *Compilation* *Grep* and *Messages*
 ;;
 ;;  How to use this package
 ;;
-;;      The scroling here is based on timers, where the lowest interval can
-;;      be one 1 second. This means that you don't get smooth and
-;;      continuous scrolling, but regular update of the buffer, which may
-;;      in rare cases seem jerky. However, using timers is the only
-;;      possibility if we want to have general scroll utility for *any* buffer.
+;;      The scroling here is based on timers, where the lowest
+;;      interval can be one 1 second. This means that you don't get
+;;      smooth and continuous scrolling, but regular update of the
+;;      buffer, which may in rare cases seem jerky. However, using
+;;      timers is the only possibility if we want to have general
+;;      scroll utility for *any* buffer.
 ;;
 ;;      To enable/disable auto-scroll for current buffer, use these:
 ;;
-;;          M-x tinyscroll-control              ;to activate scroll
+;;          M-x tinyscroll-control      ;to activate scroll
 ;;          C-u M-x tinyscroll-control  ;to deactivate scroll
 ;;
 ;;  Lowest window of the same buffer always scrolls
 ;;
 ;;      It is an interesting problem, when you have SAME buffer in multiple
-;;      windows, to decide which window to scroll.  I didn't want to scroll
+;;      windows, to decide which window to scroll. I didn't want to scroll
 ;;      all windows, since otherwise I wouldn't have used two/or more
 ;;      windows for the same buffer.
 ;;
-;;      I decided that the lowest window for the buffer always scrolls. You
-;;      can't change that. This was a design decision and I won't support
-;;      scrolling middle/upper buffers. Just arrange your windows so that
-;;      the scrolling one goes to the bottom.
+;;      I decided that the lowest window for the buffer always
+;;      scrolls. This can't be configured due to the design decision.
+;;      Try to arrange your windows so that the scrolling one goes to
+;;      the bottom.
 
 ;;}}}
 
@@ -214,7 +216,9 @@ Format: '((buffer-name-string . max-point) (BN . POINT) ..)"
 ;;;
 (defsubst tinyscroll-remove-1 (buffer-name)
   "Remove BUFFER-NAME from scroll list."
-  (setq tinyscroll--list (adelete 'tinyscroll--list buffer-name)))
+  (let ((elt (assoc buffer-name tinyscroll--list)))
+    (when elt
+      (setq tinyscroll--list (delq elt tinyscroll--list)))))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -245,7 +249,7 @@ If buffer does not exist, do nothing and return nil."
 ;;; if easier to trap "t" error condition.
 ;;;
 (defun tinyscroll--list-add (buffer-name position &optional remove)
-  "Check is BUFFER-NAME name is in 'tisc:-list'.
+  "Check is BUFFER-NAME name is in 'tinyscroll--list'.
 
 Input:
 
@@ -339,7 +343,7 @@ Return:
  nil    no report"
   (interactive)
   (let ((str   (ti::list-to-string (mapcar 'car tinyscroll--list)))
-       (verb  (interactive-p))
+       (verb  (called-interactively-p 'interactive))
        ret)
     (if (and (string= str "")  verb)
         (message "TinyScroll: no entries in `tinyscroll--list'.")
index 5316efd..d3bb334 100644 (file)
@@ -1,15 +1,15 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinysearch.el --- Grab and search word under cursor
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1994-2012 Jari Aalto
+;; Copyright (C)    1994-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
-;;
-;; Look at the code with folding.el.
 
 ;; COPYRIGHT NOTICE
 ;;
 ;;
 ;; Visit <http://www.gnu.org/copyleft/gpl.html> for more information
 
-;;}}}
-;;{{{ Install
-
 ;;; Intallation:
-;; ....................................................... &t-install ...
+
 ;; Put this file on your Emacs-Lisp `load-path', add following into
 ;; ~/.emacs startup file.
 ;;
@@ -50,7 +47,6 @@
 ;;}}}
 ;;{{{ Documentation
 
-;; ..................................................... &t-commentary ...
 ;;; Commentary:
 
 ;;  Preface, 1994
 ;;      find word a boundary:
 ;;
 ;;          nonWordWORDnonWord
-;;         =======    =======
+;;          =======    =======
 ;;
 ;;      And as you can see, the if ':' belongs to word, it can't
 ;;      simultaneously belong to NonWord ! Summa summarum: Revert to
 ;;      Needless to say, that you can use put your own checking
 ;;      function in that variable to control the accurrances better.
 
-;;}}}
-
 ;;; Change Log:
 
 ;;; Code:
 
-;;{{{ setup: require
-
 (require 'tinylibm)
 
 (ti::package-defgroup-tiny TinySearch tinysearch-- extensions
   "search word under cursor: backward, forward.")
 
-;;}}}
-;;{{{ hooks
-
 ;;; ......................................................... &v-hooks ...
 
 (defcustom tinysearch--before-hook nil
-  "*Hook that is run at the BEG of search function.
+  "Hook that is run at the BEG of search function.
 You can set this to point to function that alters the value of
 `tinysearch--word-boundary-set' e.g. by looking at the file type."
   :type  'hook
   :group 'TinySearch)
 
 (defcustom tinysearch--final-hook nil
-  "*Hook that is _always_ run at the END of search function.
+  "Hook that is _always_ run at the END of search function.
 It doesn't care about word grabbings or search failures."
   :type  'hook
   :group 'TinySearch)
 
 (defcustom tinysearch--load-hook nil
-  "*Run when package has been loaded.
+  "Run when package has been loaded.
 A good candidate could be `tinysearch-install-default-keybindings'."
   :type  'hook
   :group 'TinySearch)
 
-;;}}}
-;;{{{ variables
-
 ;;; ....................................................... &v-private ...
 
 (defvar tinysearch--direction nil
@@ -205,7 +191,7 @@ Created and killed during program execution.")
 ;;; User configurable
 
 (defcustom tinysearch--word-boundary-set "-A-Za-z0-9_"
-  "*Character set to conform a single word."
+  "Character set to conform a single word."
   :type  'hook
   :group 'TinySearch)
 
@@ -219,12 +205,12 @@ to supply character set to `tinysearch-search-word-main'."
   :group 'TinySearch)
 
 (defcustom tinysearch--wrap-flag  nil
-  "*Non-nil means wrap buffer if there is no more match."
+  "Non-nil means wrap buffer if there is no more match."
   :type  'boolean
   :group 'TinySearch)
 
 (defcustom tinysearch--accept-word-function  'tinysearch-accept-word
-  "*Function run after the search for word has been successful.
+  "Function run after the search for word has been successful.
 If this variable contains non-existing function (like nil), the
 content of the variable is ignored.
 
@@ -243,14 +229,8 @@ Return values of function:
   :type  'function
   :group 'TinySearch)
 
-;;}}}
-
-;;; ########################################################### &Funcs ###
-
-;;{{{ 19.xx isearch add
+;;; ####################################################### &Functions ###
 
-;;; ----------------------------------------------------------------------
-;;;
 (defun tinysearch-add-to-isearch-search-ring (isearch-string)
   "Add search pattern to ISEARCH-STRING in Emacs.
 This code is directly taken from function `isearch-done' By Daniel LaLiberte."
@@ -272,16 +252,11 @@ This code is directly taken from function `isearch-done' By Daniel LaLiberte."
               (if (> (length search-ring) search-ring-max)
                   (setcdr (nthcdr (1- search-ring-max) search-ring) nil)))))))
 
-;;}}}
-;;{{{ main
-
-;;; ----------------------------------------------------------------------
-;;;
 (defun tinysearch-accept-word  (word)
   "Determine if we accept searched WORD."
   (let ((type (symbol-name major-mode))
-       (ret  t)                  ;default, accept search
-       space-word)
+        (ret  t)                  ;default, accept search
+        space-word)
     (cond
      ((string-match "^c-\\|^cc-\\|c[+]+" type)
       ;; Check C/C++ dependent variables, where rg. 'a' is
@@ -299,25 +274,23 @@ This code is directly taken from function `isearch-done' By Daniel LaLiberte."
           (setq ret nil))))
     ret))
 
-;;; ----------------------------------------------------------------------
-;;;
 (defun tinysearch-grab-word (&optional charset beg end )
   "Gets word under cursor limited by CHARSET string.
 Optional BEG and END gives maximum search limits.
 Default boundary is line limit."
   (let (re-word-boundary
-       re-word
-       ;;  Accept ':' and '-' , beasuse they are used in c++ and lisp
-       (charset (or charset "--A-Za-z0-9_"))
-       pb
-       pe
-       p
-       re
-       ret)
+        re-word
+        ;;  Accept ':' and '-' , beasuse they are used in c++ and lisp
+        (charset (or charset "--A-Za-z0-9_"))
+        pb
+        pe
+        p
+        re
+        ret)
     (or beg
-       (setq beg (line-beginning-position)))
+        (setq beg (line-beginning-position)))
     (or end
-       (setq end (line-end-position)))
+        (setq end (line-end-position)))
     (setq re-word-boundary  (concat  "[^" charset "]"))
     (setq re-word (concat  "[" charset "]")) ;considered single word
     ;; Note:  the first search goes backwards to find the start of the
@@ -348,10 +321,10 @@ Default boundary is line limit."
     ;;  easier to debug this way
     ret))
 
-;;; ----------------------------------------------------------------------
 ;;; - There is lot of re-search-backward/fwd commands and it is intentional,
-;;;   so that the code is totally emacs version independent. Newer emacs
-;;;   has nice functions that shrink this code to 10 lines :->
+;;;   so that the code is completely Emacs version independent.
+;;; - FIXME: Newer emacs has nice functions that could shrink this code
+;;    to 10 lines.
 ;;; - Never grab word function is already coded in tinylib.el
 ;;;
 (defun tinysearch-search-word-main (&optional backward set)
@@ -461,7 +434,7 @@ NOTE:
           (setq loop nil)))
         ;; .................................................... do hilit ...
         (if (and tinysearch--overlay found (null loop))
-            (ti::compat-overlay-move tinysearch--overlay  mb me nil 'highlight))
+            (ti::compat-overlay-move tinysearch--overlay mb me nil 'highlight))
         (when tinysearch--overlay       ;Hide overlay
           (sit-for 1)
           (ti::compat-overlay-move tinysearch--overlay 1 1))
@@ -471,12 +444,10 @@ NOTE:
     (if tinysearch--final-hook
         (run-hooks 'tinysearch--final-hook))))
 
-;;; ----------------------------------------------------------------------
-;;;
 (defun tinysearch-charset-control ()
   "Dynamic character set change according to mode."
   (let ((type (symbol-name major-mode))
-       set)
+        set)
     (cond
      ((string-match  "^c-\\|^cc-\\|c[+]+|perl|python|ruby" type)
       (setq set "A-Za-z0-9_"))
@@ -485,8 +456,6 @@ NOTE:
       (setq set "--A-Za-z0-9_")))
     set))
 
-;;; ----------------------------------------------------------------------
-;;;
 ;;;###autoload
 (defun tinysearch-search-word-forward ()
   "Search word at point forward."
@@ -496,8 +465,6 @@ NOTE:
    (if (functionp tinysearch--word-boundary-function)
        (funcall tinysearch--word-boundary-function))))
 
-;;; ----------------------------------------------------------------------
-;;;
 ;;;###autoload
 (defun tinysearch-search-word-backward ()
   "Search word at point backward."
@@ -507,35 +474,53 @@ NOTE:
    (if (functionp tinysearch--word-boundary-function)
        (funcall tinysearch--word-boundary-function))))
 
-;;; ----------------------------------------------------------------------
-;;;
+(defun tinysearch-function-ours-p (function)
+  "Check if FUNCTION if defined in the package."
+  (when (symbolp function)
+    (string-match "^tinysearch" (symbol-name function))))
+
 ;;;###autoload
-(defun tinysearch-install-default-keybindings (&optional uninstall)
-  "Install default keybindings
+(defun tinysearch-install-default-keybindings ()
+  "Install default keybindings. Not installed if key already occupied.
+Mouse       Kbd  Action
+---------   ---  --------------
 M-Mouse-1   M-s  search forward
 C-M-Mouse-1 M-r  reverse."
   (interactive)
-  (if (lookup-key global-map "\M-s")
-      (message "** Tinysearch: Can't bind. Key M-s already occupied.")
-    (global-set-key "\M-s" 'tinysearch-search-word-forward))
-  (if (lookup-key global-map "\M-s")
-      (message "** Tinysearch: Can't bind. Key M-r already occupied.")
-    (global-set-key "\M-r" 'tinysearch-search-word-backward))
-  ;;  For mouse (under windowed system)
-  (global-set-key [(meta control mouse-1)]
-                  'tinysearch-search-word-forward)
-  (global-set-key [(meta control shift mouse-1)]
-                  'tinysearch-search-word-backward))
-
-;;; ----------------------------------------------------------------------
-;;;
+  (let (key)
+    ;; In Emacs 23+ these are no longer available
+    (if (and (setq key (lookup-key global-map "\M-s"))
+             (not (tinysearch-function-ours-p key)))
+        (message "** Tinysearch: Can't bind. Key M-s already occupied: %s"
+                 key)
+      (global-set-key "\M-s" 'tinysearch-search-word-forward))
+    (if (and (setq key (lookup-key global-map "\M-s"))
+             (not (tinysearch-function-ours-p key)))
+        (message "** Tinysearch: Can't bind. Key M-r already occupied: %s"
+                 key)
+      (global-set-key "\M-r" 'tinysearch-search-word-backward))
+    ;;  For mouse (under windowed system)
+    (if (and (setq key (lookup-key global-map
+                                   [(meta control mouse-1)]))
+             (not (tinysearch-function-ours-p key)))
+        (message "** Tinysearch: Can't bind. M-C-mouse-1 already occupied: %s"
+                 key)
+      (global-set-key [(meta control mouse-1)]
+                      'tinysearch-search-word-forward))
+    (if (and (setq key (lookup-key global-map
+                                   [(meta control shift mouse-1)]))
+             (not (tinysearch-function-ours-p key)))
+        (message
+         "** Tinysearch: Can't bind. M-C-S-mouse-1 already occupied: %s"
+         key)
+      (global-set-key [(meta control shift mouse-1)]
+                      'tinysearch-search-word-backward))))
+
 ;;;###autoload
-(defun tinysearch-install (&optional arg)
-  "Call `tinysearch-install-default-keybindings' with ARG."
+(defun tinysearch-install ()
+  "Call `tinysearch-install-default-keybindings'"
   (interactive)
-  (tinysearch-install-default-keybindings arg))
-
-;;}}}
+  (tinysearch-install-default-keybindings))
 
 (provide   'tinysearch)
 (run-hooks 'tinysearch--load-hook)
index 7ac87fd..b51d135 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1995-2012 Jari Aalto
+;; Copyright (C)    1995-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -264,7 +264,8 @@ Mode description:
      (define-key   root-map "\t"         'tinytab-tab-key)
      (define-key   root-map "\e\t"       'tinytab-tab-del-key)
      (define-key   root-map "\C-c\t"     'tinytab-indent-region-dynamically)
-     (define-key   root-map "\C-c\C-m"   'tinytab-return-key-mode)
+     ;; message-mode uses This key prefix for PGP commands
+     ;; (define-key   root-map "\C-c\C-m"   'tinytab-return-key-mode)
      ;; ........................................................ X-keys ...
      ;;  Standard key
      (define-key root-map (kbd "<S-tab>")        'tinytab-tab-del-key)
@@ -522,9 +523,6 @@ This way you can partly mix e.g. C++ mode and this minor mode."
 ;;; - For a little more smarter TAB key to line up { } braces
 ;;;   in variaous programming modes I made this. It's simple,
 ;;;   but suffices for most common needs.
-;;; - I don't know how the C-mode or cc-mode does this, but, hey,
-;;;   this is one way :-)
-;;;
 ;;;
 (defun tinytab-tab-brace-control ()
   "When hitting TAB, line up {} braces, otherwise do nothing special.
@@ -673,7 +671,7 @@ If optional ARG is given, behave exactly like 'newline' function."
 (defun tinytab-change-tab-width ()
   "Toggle tab width according to `tinytab--width-table'."
   (interactive)
-  (let ((verb  (interactive-p))
+  (let ((verb  (called-interactively-p 'interactive))
        (val   (tinytab-width))
        (table tinytab--width-table)
        elt)
@@ -904,14 +902,14 @@ If region is active, indent all lines backward."
 ;;;###autoload
 (defun turn-on-tinytab-return-key-mode ()
   "Turn on auto indent after RET key."
-  (tinytab-return-key-mode 1 (interactive-p)))
+  (tinytab-return-key-mode 1 (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
 ;;;###autoload
 (defun turn-off-tinytab-return-key-mode ()
   "Turn on auto indent after RET key."
-  (tinytab-return-key-mode 1 (interactive-p)))
+  (tinytab-return-key-mode 1 (called-interactively-p 'interactive)))
 
 ;;; ----------------------------------------------------------------------
 ;;;
@@ -933,7 +931,7 @@ If region is active, indent all lines backward."
     ;;  C-m is exit-minibuffer.
     (if (string-match "minibuf" (buffer-name))
         (error "TinyTab: tinytab-return-key-mode not allowed in minibuffer."))
-    (setq verb (interactive-p))
+    (setq verb (called-interactively-p 'interactive))
     (cond
      ((or (null mode)
           (not (integerp mode)))
index 2fe6f4d..4367bcb 100644 (file)
@@ -4,7 +4,7 @@
 
 ;;{{{ Id
 
-;; Copyright (C)    1996-2012 Jari Aalto
+;; Copyright (C)    1996-2016 Jari Aalto
 ;; Keywords:        tools
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
@@ -650,7 +650,7 @@ TinyTag: `tinytag--database-dir' is not a directory. Please configure"))))
       ;; otherwise put it on post-command-hook.
       ;; The idle hook appeared in Emacs 19.30.
       (funcall cmd hook 'tinytag-post-command)))
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "TinyTag: Package %s" (if uninstall
                                          "deactivated"
                                        "activated")))))
index 944eac4..7df1fec 100644 (file)
@@ -1,10 +1,12 @@
+;; -*- enable-local-variables: :all;  -*-
+
 ;;; tinytf.el --- Document layout tool for (T)echnical text (F)ormat
 
 ;; This file is not part of Emacs
 
 ;;{{{ Id
 
-;; Copyright (C)    1997-2012 Jari Aalto
+;; Copyright (C)    1997-2016 Jari Aalto
 ;; Keywords:        wp
 ;; Author:          Jari Aalto
 ;; Maintainer:      Jari Aalto
 ;;      perl script and it gives you nicely formatted HTML page.
 ;;      Writing HTML home pages is different story, because you
 ;;      usually want to include some graphics, JavaScript, PHP or JSP
-;;      in the page. But aputting some text document available in HTML
+;;      in the page. But putting some text document available in HTML
 ;;      format is easily made possible with this package.
 ;;
 ;;      On the other hand, while you may not be interested in HTML, you
       (autoload 'htmlize-buffer "htmlize" "" t)
     (message "\
   ** tinytf.el: Hm, no htmlize.el found. [you can still use this package]
-  &nbs