update elpy
authorJoerg Jaspert <joerg@debian.org>
Fri, 30 May 2014 11:08:37 +0000 (13:08 +0200)
committerJoerg Jaspert <joerg@debian.org>
Fri, 30 May 2014 11:08:37 +0000 (13:08 +0200)
20 files changed:
.emacs.d/config/emacs.org
.emacs.d/elisp/elpy/LICENSE [new file with mode: 0644]
.emacs.d/elisp/elpy/README [new file with mode: 0644]
.emacs.d/elisp/elpy/elpy-autoloads.el
.emacs.d/elisp/elpy/elpy-pkg.el
.emacs.d/elisp/elpy/elpy.el
.emacs.d/elisp/find-file-in-project/find-file-in-project-autoloads.el [deleted file]
.emacs.d/elisp/find-file-in-project/find-file-in-project.el [deleted file]
.emacs.d/elisp/fuzzy/fuzzy-autoloads.el [deleted file]
.emacs.d/elisp/fuzzy/fuzzy.el [deleted file]
.emacs.d/elisp/idomenu/idomenu-autoloads.el [deleted file]
.emacs.d/elisp/idomenu/idomenu.el [deleted file]
.emacs.d/elisp/iedit/iedit-autoloads.el [deleted file]
.emacs.d/elisp/iedit/iedit-lib.el [deleted file]
.emacs.d/elisp/iedit/iedit-rect.el [deleted file]
.emacs.d/elisp/iedit/iedit.el [deleted file]
.emacs.d/elisp/nose/nose-autoloads.el [deleted file]
.emacs.d/elisp/nose/nose.el [deleted file]
.emacs.d/elisp/pyvenv/pyvenv-autoloads.el [deleted file]
.emacs.d/elisp/pyvenv/pyvenv.el [deleted file]

index 71f3a9f..2ccd0ca 100644 (file)
@@ -103,8 +103,8 @@ one variable and go over that in a loop.
 (defvar jj-elisp-subdirs '(local gnus icicle org/contrib tiny mo-git-blame cedet
                            cedet/eieio ecb jdee/lisp sunrise multiple-cursors
                            auto-complete yasnippet magit mmm emms/lisp
-                           elpy find-file-in-project fuzzy idomenu nose
-                           popup pyvenv git-rebase-mode git-commit-mode)
+                           elpy find-file-in-project fuzzy idomenu
+                           popup git-rebase-mode git-commit-mode)
   "List of subdirectories in jj-elisp-dir to add to load-path")
 
 (let (dirval)
@@ -3371,58 +3371,98 @@ up here to be used.
 Use elpy for the emacs python fun, but dont let it initialize all the
 various variables. Elpy author may like them, but I'm not him...
 #+BEGIN_SRC emacs-lisp :tangle yes
-(safe-load (concat jj-elisp-dir "/elpy/elpy-autoloads.el"))
-(defalias 'elpy-initialize-variables 'jj-init-elpy)
-(defun jj-init-elpy ()
-  "Initialize elpy in a way i like"
-  ;; Local variables in `python-mode'. This is not removed when Elpy
-  ;; is disabled, which can cause some confusion.
-  (add-hook 'python-mode-hook 'elpy-initialize-local-variables)
-
-  ;; `flymake-no-changes-timeout': The original value of 0.5 is too
-  ;; short for Python code, as that will result in the current line to
-  ;; be highlighted most of the time, and that's annoying. This value
-  ;; might be on the long side, but at least it does not, in general,
-  ;; interfere with normal interaction.
-  (setq flymake-no-changes-timeout 60)
-
-  ;; `flymake-start-syntax-check-on-newline': This should be nil for
-  ;; Python, as;; most lines with a colon at the end will mean the next
-  ;; line is always highlighted as error, which is not helpful and
-  ;; mostly annoying.
-  (setq flymake-start-syntax-check-on-newline nil)
-
-  ;; `ac-auto-show-menu': Short timeout because the menu is great.
-  (setq ac-auto-show-menu 0.4)
-
-  ;; `ac-quick-help-delay': I'd like to show the menu right with the
-  ;; completions, but this value should be greater than
-  ;; `ac-auto-show-menu' to show help for the first entry as well.
-  (setq ac-quick-help-delay 0.5)
-
-  ;; `yas-trigger-key': TAB, as is the default, conflicts with the
-  ;; autocompletion. We also need to tell yasnippet about the new
-  ;; binding. This is a bad interface to set the trigger key. Stop
-  ;; doing this.
-  (let ((old (when (boundp 'yas-trigger-key)
-               yas-trigger-key)))
-    (setq yas-trigger-key "C-c C-i")
-    (when (fboundp 'yas--trigger-key-reload)
-      (yas--trigger-key-reload old)))
-
-  ;; yas-snippet-dirs can be a string for a single directory. Make
-  ;; sure it's a list in that case so we can add our own entry.
-  (when (not (listp yas-snippet-dirs))
-    (setq yas-snippet-dirs (list yas-snippet-dirs)))
-  (add-to-list 'yas-snippet-dirs
-               (concat (file-name-directory (locate-library "elpy"))
-                       "snippets/")
-               t)
-
-  ;; Now load yasnippets.
-  (yas-reload-all))
-(elpy-enable)
-(elpy-use-ipython)
+(use-package elpy
+  :defer t
+  :mode ("\.py" . elpy-mode)
+  :init
+  (progn
+    (safe-load (concat jj-elisp-dir "/elpy/elpy-autoloads.el"))
+    )
+  :config
+  (progn
+
+    (use-package nose
+      :ensure nose
+      :commands (nosetests-all nosetests-module nosetests-one
+                               nosetests-failed nosetests-pdb-all
+                               nosetests-pdb-module nosetests-pdb-one)
+      )
+
+    (use-package pyvenv
+      :ensure pyvenv
+      :commands (pyvenv-activate pyvenv-deactivate pyvenv-mode pyvenv-restart-python)
+      )
+
+    (use-package idomenu
+      :ensure idomenu
+      :commands (idomenu)
+      :defer t)
+
+    (use-package highlight-indentation
+      :ensure t
+      :commands (highlight-indentation-mode))
+
+    (use-package find-file-in-project
+      :ensure t
+      :commands (find-file-in-project ffip-project-files ffip ))
+
+    (use-package fuzzy
+      :ensure t)
+
+    ;; Local variables in `python-mode'. This is not removed when Elpy
+    ;; is disabled, which can cause some confusion.
+    (add-hook 'python-mode-hook 'elpy-initialize-local-variables)
+
+    ;; Flymake support using flake8, including warning faces.
+    (when (and (executable-find "flake8")
+               (not (executable-find python-check-command)))
+      (setq python-check-command "flake8"))
+
+    ;; `flymake-no-changes-timeout': The original value of 0.5 is too
+    ;; short for Python code, as that will result in the current line to
+    ;; be highlighted most of the time, and that's annoying. This value
+    ;; might be on the long side, but at least it does not, in general,
+    ;; interfere with normal interaction.
+    (setq flymake-no-changes-timeout 60)
+
+    ;; `flymake-start-syntax-check-on-newline': This should be nil for
+    ;; Python, as;; most lines with a colon at the end will mean the next
+    ;; line is always highlighted as error, which is not helpful and
+    ;; mostly annoying.
+    (setq flymake-start-syntax-check-on-newline nil)
+
+    ;; `ac-auto-show-menu': Short timeout because the menu is great.
+    (setq ac-auto-show-menu 0.4)
+
+    ;; `ac-quick-help-delay': I'd like to show the menu right with the
+    ;; completions, but this value should be greater than
+    ;; `ac-auto-show-menu' to show help for the first entry as well.
+    (setq ac-quick-help-delay 0.5)
+
+    ;; `yas-trigger-key': TAB, as is the default, conflicts with the
+    ;; autocompletion. We also need to tell yasnippet about the new
+    ;; binding. This is a bad interface to set the trigger key. Stop
+    ;; doing this.
+    (let ((old (when (boundp 'yas-trigger-key)
+                 yas-trigger-key)))
+      (setq yas-trigger-key "C-c C-i")
+      (when (fboundp 'yas--trigger-key-reload)
+        (yas--trigger-key-reload old)))
+
+    ;; yas-snippet-dirs can be a string for a single directory. Make
+    ;; sure it's a list in that case so we can add our own entry.
+    (when (not (listp yas-snippet-dirs))
+      (setq yas-snippet-dirs (list yas-snippet-dirs)))
+    (add-to-list 'yas-snippet-dirs
+                 (concat (file-name-directory (locate-library "elpy"))
+                         "snippets/")
+                 t)
+
+    ;; Now load yasnippets.
+    (yas-reload-all)
+    (elpy-enable t)
+    (elpy-use-ipython)))
+
 #+END_SRC
 
 Below is old setup
diff --git a/.emacs.d/elisp/elpy/LICENSE b/.emacs.d/elisp/elpy/LICENSE
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/.emacs.d/elisp/elpy/README b/.emacs.d/elisp/elpy/README
new file mode 100644 (file)
index 0000000..550f9c7
--- /dev/null
@@ -0,0 +1,57 @@
+=======================================
+Elpy, the Emacs Lisp Python Environment
+=======================================
+
+Elpy is an Emacs package to bring powerful Python editing to Emacs. It
+combines a number of other packages, both written in Emacs Lisp as
+well as Python.
+
+.. image:: https://secure.travis-ci.org/jorgenschaefer/elpy.png
+   :alt: Build Status
+   :target: http://travis-ci.org/jorgenschaefer/elpy
+   :width: 77px
+   :height: 19px
+
+Documentation
+=============
+
+You can find the documentation `on the wiki`__.
+
+.. __: https://github.com/jorgenschaefer/elpy/wiki
+
+Quick Installation
+==================
+
+You can also read the `detailed installation instructions`__.
+
+.. __: https://github.com/jorgenschaefer/elpy/wiki/Installation
+
+First, install the required Python packages:::
+
+  pip install elpy rope
+
+(Note: If you are installing the development version of elpy, do not
+install the elpy Python package, but simply put the repository in your
+``PYTHONPATH``.)
+
+Evaluate this in your ``*scratch*`` buffer:
+
+.. code-block:: lisp
+
+  (require 'package)
+  (add-to-list 'package-archives
+               '("elpy" . "http://jorgenschaefer.github.io/packages/"))
+
+
+Then run ``M-x package-refresh-contents`` to load the contents of the
+new repository, and ``M-x package-install RET elpy RET`` to install
+elpy.
+
+Finally, add the following to your ``.emacs``:
+
+.. code-block:: lisp
+
+  (package-initialize)
+  (elpy-enable)
+
+Done.
index 09e11c7..f9d4d77 100644 (file)
@@ -3,7 +3,7 @@
 ;;; Code:
 (add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
 \f
-;;;### (autoloads nil "elpy" "elpy.el" (21286 773 805959 383000))
+;;;### (autoloads nil "elpy" "elpy.el" (21379 40866 309854 780000))
 ;;; Generated autoloads from elpy.el
 
 (autoload 'elpy-enable "elpy" "\
@@ -38,8 +38,8 @@ more structured list.
 
 ;;;***
 \f
-;;;### (autoloads nil nil ("elpy-pkg.el" "elpy-refactor.el") (21286
-;;;;;;  774 115841 43000))
+;;;### (autoloads nil nil ("elpy-pkg.el" "elpy-refactor.el") (21379
+;;;;;;  40866 448170 825000))
 
 ;;;***
 \f
index 0a574d3..e35c9bf 100644 (file)
@@ -1 +1 @@
-(define-package "elpy" "20140213.1028" "Emacs Python Development Environment" '((auto-complete "1.4") (find-file-in-project "3.2") (fuzzy "0.1") (highlight-indentation "0.5.0") (idomenu "0.1") (iedit "0.97") (nose "0.1.1") (pyvenv "1.0") (yasnippet "0.8.0")))
+(define-package "elpy" "1.4.1" "Emacs Python Development Environment" '((auto-complete "1.4") (find-file-in-project "3.2") (fuzzy "0.1") (highlight-indentation "0.5.0") (idomenu "0.1") (iedit "0.97") (nose "0.1.1") (pyvenv "1.1") (yasnippet "0.8.0")))
index bee2463..c4cd807 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Author: Jorgen Schaefer <contact@jorgenschaefer.de>
 ;; URL: https://github.com/jorgenschaefer/elpy
-;; Version: 1.3.0
+;; Version: 1.4.1
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License
 
 ;;; Code:
 
+;; Bad hack. nose.el from MELPA uses defvar-local, which breaks with
+;; older Emacsen. Of course, users use MELPA, so elpy gets blamed.
+(when (not (fboundp 'defvar-local))
+  (defmacro defvar-local (var val &optional docstring)
+    "Compatibility declaration, backported from Emacs 24.4."
+    (list 'progn (list 'defvar var val docstring)
+          (list 'make-variable-buffer-local (list 'quote var)))))
+
 (require 'auto-complete-config)
 (require 'elpy-refactor)
 (require 'etags)
@@ -60,7 +68,9 @@
   :prefix "elpy-"
   :group 'languages)
 
-(defcustom elpy-rpc-python-command "python"
+(defcustom elpy-rpc-python-command (if (eq window-system 'w32)
+                                       "pythonw"
+                                     "python")
   "The command to be used for the RPC backend."
   :type 'string
   :group 'elpy)
@@ -111,7 +121,7 @@ These are prepended to `grep-find-ignored-directories'."
   "Hook run when `elpy-mode' is enabled."
   :group 'elpy)
 
-(defconst elpy-version "1.3.0"
+(defconst elpy-version "1.4.1"
   "The version of the Elpy lisp code.")
 
 (defun elpy-version ()
@@ -326,8 +336,8 @@ using (defalias 'elpy-initialize-variables 'identity)"
   (add-hook 'python-mode-hook 'elpy-initialize-local-variables)
 
   ;; Flymake support using flake8, including warning faces.
-  (when (or (executable-find "flake8")
-            (not (executable-find python-check-command)))
+  (when (and (executable-find "flake8")
+             (not (executable-find python-check-command)))
     (setq python-check-command "flake8"))
 
   ;; `flymake-no-changes-timeout': The original value of 0.5 is too
@@ -432,12 +442,17 @@ You can set the variable `elpy-project-root' in, for example,
 
 If there is no __init__.py in the current directory, return the
 current directory."
-  (if (file-exists-p (format "%s/__init__.py" default-directory))
-      (locate-dominating-file default-directory
-                              (lambda (dir)
-                                (not (file-exists-p
-                                      (format "%s/__init__.py" dir)))))
-    default-directory))
+  (cond
+   ((and (functionp 'projectile-project-root)
+         (projectile-project-root))
+    (projectile-project-root))
+   ((file-exists-p (format "%s/__init__.py" default-directory))
+    (locate-dominating-file default-directory
+                            (lambda (dir)
+                              (not (file-exists-p
+                                    (format "%s/__init__.py" dir))))))
+   (t
+    default-directory)))
 
 (defun elpy-set-project-root (new-root)
   "Set the Elpy project root to NEW-ROOT."
@@ -529,9 +544,10 @@ time. Honestly."
 If there is an active region, send that. Otherwise, send the
 whole buffer.
 
-Without prefix argument, this will escape the Python idiom of
-if __name__ == '__main__' to be false to avoid accidental
-execution of code. With prefix argument, this code is executed."
+In Emacs 24.3 and later, without prefix argument, this will
+escape the Python idiom of if __name__ == '__main__' to be false
+to avoid accidental execution of code. With prefix argument, this
+code is executed."
   (interactive "P")
   ;; Ensure process exists
   (elpy-shell-get-or-create-process)
@@ -1520,10 +1536,11 @@ This uses `elpy--ac-cache'."
 ;;; Backwards compatibility
 
 ;; Functions for Emacs 24 before 24.3
-(when (not (fboundp 'python-shell-send-region))
-  (defalias 'python-shell-send-region 'python-send-region))
+(when (not (fboundp 'python-shell-send-string))
+  (defalias 'python-shell-send-string 'python-send-string))
 (when (not (fboundp 'python-shell-send-buffer))
-  (defalias 'python-shell-send-buffer 'python-send-buffer))
+  (defun python-shell-send-buffer (&optional arg)
+    (python-send-buffer)))
 (when (not (fboundp 'python-info-current-defun))
   (defalias 'python-info-current-defun 'python-current-defun))
 (when (not (fboundp 'python-nav-end-of-statement))
diff --git a/.emacs.d/elisp/find-file-in-project/find-file-in-project-autoloads.el b/.emacs.d/elisp/find-file-in-project/find-file-in-project-autoloads.el
deleted file mode 100644 (file)
index 909e7f7..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;;; find-file-in-project-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
-\f
-;;;### (autoloads nil "find-file-in-project" "find-file-in-project.el"
-;;;;;;  (21286 764 641967 550000))
-;;; Generated autoloads from find-file-in-project.el
-
-(autoload 'find-file-in-project "find-file-in-project" "\
-Prompt with a completing list of all files in the project to find one.
-
-The project's scope is defined as the first directory containing
-an `.emacs-project' file.  You can override this by locally
-setting the variable `ffip-project-root'.
-
-\(fn)" t nil)
-
-(defalias 'ffip 'find-file-in-project)
-
-(put 'ffip-patterns 'safe-local-variable 'listp)
-
-(put 'ffip-find-options 'safe-local-variable 'stringp)
-
-(put 'ffip-project-file 'safe-local-variable 'stringp)
-
-(put 'ffip-project-root 'safe-local-variable 'stringp)
-
-(put 'ffip-project-root-function 'safe-local-variable 'functionp)
-
-(put 'ffip-limit 'safe-local-variable 'integerp)
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; find-file-in-project-autoloads.el ends here
diff --git a/.emacs.d/elisp/find-file-in-project/find-file-in-project.el b/.emacs.d/elisp/find-file-in-project/find-file-in-project.el
deleted file mode 100644 (file)
index 9f7101e..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-;;; find-file-in-project.el --- Find files in a project quickly.
-
-;; Copyright (C) 2006-2009, 2011-2012
-;;   Phil Hagelberg, Doug Alcorn, and Will Farrington
-
-;; Author: Phil Hagelberg, Doug Alcorn, and Will Farrington
-;; URL: http://www.emacswiki.org/cgi-bin/wiki/FindFileInProject
-;; Git: git://github.com/technomancy/find-file-in-project.git
-;; Version: 20140221.557
-;; X-Original-Version: 3.2
-;; Created: 2008-03-18
-;; Keywords: project, convenience
-;; EmacsWiki: FindFileInProject
-
-;; This file is NOT part of GNU Emacs.
-
-;;; License:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-
-;; This library provides a couple methods for quickly finding any file
-;; in a given project.  It depends on GNU find.
-
-;; A project is found by searching up the directory tree until a file
-;; is found that matches `ffip-project-file'.  (".git" by default.)
-;; You can set `ffip-project-root-function' to provide an alternate
-;; function to search for the project root.  By default, it looks only
-;; for files whose names match `ffip-patterns',
-
-;; If you have so many files that it becomes unwieldy, you can set
-;; `ffip-find-options' to a string which will be passed to the `find'
-;; invocation in order to exclude irrelevant subdirectories.  For
-;; instance, in a Ruby on Rails project, you may be interested in all
-;; .rb files that don't exist in the "vendor" directory.  In that case
-;; you could set `ffip-find-options' to "-not -regex \".*vendor.*\"".
-
-;; All these variables may be overridden on a per-directory basis in
-;; your .dir-locals.el.  See (info "(Emacs) Directory Variables") for
-;; details.
-
-;; Recommended binding: (global-set-key (kbd "C-x f") 'find-file-in-project)
-
-;;; TODO:
-
-;; Add compatibility with BSD find (PDI; I can't virtualize OS X)
-
-;;; Code:
-
-(require 'cl)
-
-(defvar ffip-project-file ".git"
-  "The file that should be used to define a project root.
-
-May be set using .dir-locals.el. Checks each entry if set to a list.")
-
-(defvar ffip-patterns
-  '("*.html" "*.org" "*.txt" "*.md" "*.el" "*.clj" "*.py" "*.rb" "*.js" "*.pl"
-    "*.sh" "*.erl" "*.hs" "*.ml")
-  "List of patterns to look for with `find-file-in-project'.")
-
-(defvar ffip-prune-patterns
-  '(".git")
-  "List of directory patterns to not decend into when listing files in `find-file-in-project'.")
-
-(defvar ffip-find-options ""
-  "Extra options to pass to `find' when using `find-file-in-project'.
-
-Use this to exclude portions of your project: \"-not -regex \\\".*svn.*\\\"\".")
-
-(defvar ffip-project-root nil
-  "If non-nil, overrides the project root directory location.")
-
-(defvar ffip-project-root-function nil
-  "If non-nil, this function is called to determine the project root.
-
-This overrides variable `ffip-project-root' when set.")
-
-(defvar ffip-limit 512
-  "Limit results to this many files.")
-
-(defvar ffip-full-paths nil
-  "If non-nil, show fully project-relative paths.")
-
-(defun ffip-project-root ()
-  "Return the root of the project."
-  (let ((project-root (or ffip-project-root
-                          (if (functionp ffip-project-root-function)
-                              (funcall ffip-project-root-function)
-                            (if (listp ffip-project-file)
-                                (some (apply-partially 'locate-dominating-file
-                                                       default-directory)
-                                      ffip-project-file)
-                              (locate-dominating-file default-directory
-                                                      ffip-project-file))))))
-    (or project-root
-        (progn (message "No project was defined for the current file.")
-               nil))))
-
-(defun ffip-uniqueify (file-cons)
-  "Set the car of FILE-CONS to include the directory name plus the file name."
-  (setcar file-cons
-          (concat (cadr (reverse (split-string (cdr file-cons) "/"))) "/"
-                  (car file-cons))))
-
-(defun ffip-join-patterns ()
-  "Turn `ffip-patterns' into a string that `find' can use."
-  (mapconcat (lambda (pat) (format "-name \"%s\"" pat))
-             ffip-patterns " -or "))
-
-(defun ffip-prune-patterns ()
-  "Turn `ffip-prune-patterns' into a string that `find' can use."
-  (mapconcat (lambda (pat) (format "-name \"%s\"" pat))
-             ffip-prune-patterns " -or "))
-
-
-(defun ffip-project-files ()
-  "Return an alist of all filenames in the project and their path.
-
-Files with duplicate filenames are suffixed with the name of the
-directory they are found in so that they are unique."
-  (let ((file-alist nil)
-        (root (expand-file-name (or ffip-project-root (ffip-project-root)
-                                    (error "No project root found")))))
-    (mapcar (lambda (file)
-              (if ffip-full-paths
-                  (cons (substring (expand-file-name file) (length root))
-                        (expand-file-name file))
-                (let ((file-cons (cons (file-name-nondirectory file)
-                                       (expand-file-name file))))
-                  (when (assoc (car file-cons) file-alist)
-                    (ffip-uniqueify (assoc (car file-cons) file-alist))
-                    (ffip-uniqueify file-cons))
-                  (add-to-list 'file-alist file-cons)
-                  file-cons)))
-            (split-string (shell-command-to-string
-                           (format "find %s -type d -a \\( %s \\) -prune -o -type f \\( %s \\) -print %s | head -n %s"
-                                   root (ffip-prune-patterns) (ffip-join-patterns)
-                                   ffip-find-options ffip-limit))))))
-
-;;;###autoload
-(defun find-file-in-project ()
-  "Prompt with a completing list of all files in the project to find one.
-
-The project's scope is defined as the first directory containing
-an `.emacs-project' file.  You can override this by locally
-setting the variable `ffip-project-root'."
-  (interactive)
-  (let* ((project-files (ffip-project-files))
-         (files (mapcar 'car project-files))
-         (file (if (and (boundp 'ido-mode) ido-mode)
-                   (ido-completing-read "Find file in project: " files)
-                 (completing-read "Find file in project: " files))))
-    (find-file (cdr (assoc file project-files)))))
-
-;;;###autoload
-(defalias 'ffip 'find-file-in-project)
-
-;; safe locals
-;;;###autoload
-(progn
-  (put 'ffip-patterns 'safe-local-variable 'listp)
-  (put 'ffip-find-options 'safe-local-variable 'stringp)
-  (put 'ffip-project-file 'safe-local-variable 'stringp)
-  (put 'ffip-project-root 'safe-local-variable 'stringp)
-  (put 'ffip-project-root-function 'safe-local-variable 'functionp)
-  (put 'ffip-limit 'safe-local-variable 'integerp))
-
-(provide 'find-file-in-project)
-;;; find-file-in-project.el ends here
diff --git a/.emacs.d/elisp/fuzzy/fuzzy-autoloads.el b/.emacs.d/elisp/fuzzy/fuzzy-autoloads.el
deleted file mode 100644 (file)
index 9daac5d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;;; fuzzy-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
-\f
-;;;### (autoloads nil nil ("fuzzy.el") (21286 763 720564 283000))
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; fuzzy-autoloads.el ends here
diff --git a/.emacs.d/elisp/fuzzy/fuzzy.el b/.emacs.d/elisp/fuzzy/fuzzy.el
deleted file mode 100644 (file)
index 5821f2e..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-;;; fuzzy.el --- Fuzzy Matching
-
-;; Copyright (C) 2010, 2011, 2012  Tomohiro Matsuyama
-
-;; Author: Tomohiro Matsuyama <tomo@cx4a.org>
-;; Keywords: convenience
-;; Version: 20131025.2343
-;; X-Original-Version: 0.2
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; 
-
-;;; Code:
-
-(require 'cl)
-(require 'regexp-opt)
-
-(defgroup fuzzy nil
-  "Fuzzy Matching"
-  :group 'convenience
-  :prefix "fuzzy-")
-
-\f
-
-;;; Utilities
-
-(defun fuzzy-current-time-float ()
-  (let ((time (current-time)))
-    (+ (* (float (first time))
-          (lsh 2 16))
-       (float (second time))
-       (/ (float (third time))
-          1000000))))
-
-(defmacro* fuzzy-with-stopwatch ((&optional (elapsed-name 'elapsed)) &body body)
-  (declare (indent 1))
-  (let ((start (gensym "START")))
-    `(let ((,start (fuzzy-current-time-float)))
-       (flet ((,elapsed-name () (- (fuzzy-current-time-float) ,start)))
-         ,@body))))
-
-(defun* fuzzy-add-to-list-as-sorted (list-var value &key (test '<) (key 'identity))
-  (let ((list (symbol-value list-var)))
-    (if (or (null list)
-            (funcall test
-                     (funcall key value)
-                     (funcall key (car list))))
-        (set list-var (cons value list))
-      (while (and list
-                  (cdr list)
-                  (funcall test
-                           (funcall key (cadr list))
-                           (funcall key value)))
-        (setq list (cdr list)))
-      (setcdr list (cons value (cdr list))))))
-
-(defmacro* fuzzy-with-timeout ((timeout &optional timeout-result (tick-name 'tick)) &body body)
-  (declare (indent 1))
-  (let ((elapsed (gensym "ELAPSED")))
-    `(catch 'timeout
-       (fuzzy-with-stopwatch (,elapsed)
-         (flet ((,tick-name ()
-                  (when (and ,timeout (< ,timeout (,elapsed)))
-                    (throw 'timeout ,timeout-result))))
-           ,@body)))))
-
-(defun fuzzy-count-matches-in-string (regexp string &optional start end)
-  (setq start (or start 0)
-        end   (or end (length string)))
-  (loop for start = start then (1+ matched)
-        for matched = (let ((case-fold-search nil))
-                        (string-match regexp string start))
-        while (and matched (< (1+ matched) end))
-        count matched))
-
-\f
-
-;;; Jaro-Winkler Distance
-
-(defun fuzzy-jaro-winkler-distance (s1 s2)
-  "Compute Jaro-Winkler distance. See
-http://en.wikipedia.org/wiki/Jaro-Winkler_distance."
-  (let* ((l1 (length s1))
-         (l2 (length s2))
-         (r (max 1 (1- (/ (max l1 l2) 2))))
-         (m 0)
-         (tr 0)
-         (p 0)
-         cs1 cs2)
-    (loop with seen = (make-vector l2 nil)
-          for i below l1
-          for c1 = (aref s1 i) do
-          (loop for j from (max 0 (- i r)) below (min l2 (+ i r))
-                for c2 = (aref s2 j)
-                if (and (char-equal c1 c2)
-                        (null (aref seen j))) do
-                  (push c1 cs1)
-                  (aset seen j c2)
-                  (incf m)
-                and return nil)
-          finally
-          (setq cs1 (nreverse cs1)
-                cs2 (loop for i below l2
-                          for c = (aref seen i)
-                          if c collect c)))
-    (loop for c1 in cs1
-          for c2 in cs2
-          if (not (char-equal c1 c2))
-          do (incf tr))
-    (loop for i below (min m 5)
-          for c1 across s1
-          for c2 across s2
-          while (char-equal c1 c2)
-          do (incf p))
-    (if (eq m 0)
-        0.0
-      (setq m (float m))
-      (let* ((dj (/ (+ (/ m l1) (/ m l2) (/ (- m (/ tr 2)) m)) 3))
-             (dw (+ dj (* p 0.1 (- 1 dj)))))
-        dw))))
-
-;; Make sure byte-compiled.
-(eval-when (eval)
-  (byte-compile 'fuzzy-jaro-winkler-distance))
-
-(defalias 'fuzzy-jaro-winkler-score 'fuzzy-jaro-winkler-distance)
-
-\f
-
-;;; Fuzzy Matching
-
-(defcustom fuzzy-match-score-function 'fuzzy-jaro-winkler-score
-  "Score function for fuzzy matching."
-  :type 'function
-  :group 'fuzzy)
-
-(defcustom fuzzy-match-accept-error-rate 0.10
-  "Fuzzy matching error threshold."
-  :type 'number
-  :group 'fuzzy)
-
-(defcustom fuzzy-match-accept-length-difference 2
-  "Fuzzy matching length difference threshold."
-  :type 'number
-  :group 'fuzzy)
-
-(defvar fuzzy-match-score-cache
-  (make-hash-table :test 'equal :weakness t))
-
-(defun fuzzy-match-score (s1 s2 function)
-  (let ((cache-key (list function s1 s2)))
-    (or (gethash cache-key fuzzy-match-score-cache)
-        (puthash cache-key
-                 (funcall function s1 s2)
-                 fuzzy-match-score-cache))))
-
-(defun* fuzzy-match (s1 s2 &optional (function fuzzy-match-score-function))
-  "Return t if S1 and S2 are matched. FUNCTION is a function
-scoring between S1 and S2. The score must be between 0.0 and
-1.0."
-  (and (<= (abs (- (length s1) (length s2)))
-           fuzzy-match-accept-length-difference)
-       (>= (fuzzy-match-score s1 s2 function)
-           (- 1 fuzzy-match-accept-error-rate))))
-
-\f
-
-;;; Fuzzy Completion
-
-(defun fuzzy-all-completions (string collection)
-  "`all-completions' with fuzzy matching."
-  (loop with length = (length string)
-        for str in collection
-       for len = (min (length str) (+ length fuzzy-match-accept-length-difference))
-        if (fuzzy-match string (substring str 0 len))
-        collect str))
-
-\f
-
-;;; Fuzzy Search
-
-(defvar fuzzy-search-some-char-regexp
-  (format ".\\{0,%s\\}" fuzzy-match-accept-length-difference))
-
-(defun fuzzy-search-regexp-compile (string)
-  (flet ((opt (n)
-           (regexp-opt-charset
-            (append (substring string
-                               (max 0 (- n 1))
-                               (min (length string) (+ n 2)))
-                    nil))))
-    (concat
-     "\\("
-     (loop for i below (length string)
-           for c = (if (evenp i) (opt i) fuzzy-search-some-char-regexp)
-           concat c)
-     "\\|"
-     (loop for i below (length string)
-           for c = (if (oddp i) (opt i) fuzzy-search-some-char-regexp)
-           concat c)
-     "\\)")))
-
-(defun fuzzy-search-forward (string &optional bound noerror count)
-  (let ((regexp (fuzzy-search-regexp-compile string))
-        match-data)
-    (save-excursion
-      (while (and (null match-data)
-                  (re-search-forward regexp bound t))
-        (if (fuzzy-match string (match-string 1))
-            (setq match-data (match-data))
-          (goto-char (1+ (match-beginning 1))))))
-    (when match-data
-      (store-match-data match-data)
-      (goto-char (match-end 1)))))
-
-(defun fuzzy-search-backward (string &optional bound noerror count)
-  (let* ((regexp (fuzzy-search-regexp-compile string))
-         match-data begin end)
-    (save-excursion
-      (while (and (null match-data)
-                  (re-search-backward regexp bound t))
-        (setq begin (match-beginning 1)
-              end   (match-end 1))
-        (store-match-data nil)
-        (goto-char (max (point-min) (- begin (* (length string) 2))))
-        (while (re-search-forward regexp end t)
-          (if (fuzzy-match string (match-string 1))
-              (setq match-data (match-data))
-            (goto-char (1+ (match-beginning 1)))))
-        (unless match-data
-          (goto-char begin)))
-    (if match-data
-        (progn
-          (store-match-data match-data)
-          (goto-char (match-beginning 1)))
-      (store-match-data nil)))))
-
-\f
-
-;;; Fuzzy Incremental Search
-
-(defvar fuzzy-isearch nil)
-(defvar fuzzy-isearch-failed-count 0)
-(defvar fuzzy-isearch-enabled 'on-failed)
-(defvar fuzzy-isearch-original-search-fun nil)
-(defvar fuzzy-isearch-message-prefix
-  (concat (propertize "[FUZZY]" 'face 'bold) " "))
-
-(defun fuzzy-isearch-activate ()
-  (setq fuzzy-isearch t)
-  (setq fuzzy-isearch-failed-count 0))
-
-(defun fuzzy-isearch-deactivate ()
-  (setq fuzzy-isearch nil)
-  (setq fuzzy-isearch-failed-count 0))
-
-(defun fuzzy-isearch ()
-  (cond (isearch-word
-         (if isearch-forward 'word-search-forward 'word-search-backward))
-        (isearch-regexp
-         (if isearch-forward 're-search-forward 're-search-backward))
-        ((or fuzzy-isearch
-             (eq fuzzy-isearch-enabled 'always)
-             (and (eq fuzzy-isearch-enabled 'on-failed)
-                  (null isearch-success)
-                  isearch-wrapped
-                  (> (incf fuzzy-isearch-failed-count) 1)))
-         (unless fuzzy-isearch
-           (fuzzy-isearch-activate))
-         (if isearch-forward 'fuzzy-search-forward 'fuzzy-search-backward))
-        (t
-         (if isearch-forward 'search-forward 'search-backward))))
-
-(defun fuzzy-isearch-end-hook ()
-  (fuzzy-isearch-deactivate))
-
-(defun turn-on-fuzzy-isearch ()
-  (interactive)
-  (setq fuzzy-isearch-original-search-fun isearch-search-fun-function)
-  (setq isearch-search-fun-function 'fuzzy-isearch)
-  (add-hook 'isearch-mode-end-hook 'fuzzy-isearch-end-hook))
-
-(defun turn-off-fuzzy-isearch ()
-  (interactive)
-  (setq isearch-search-fun-function fuzzy-isearch-original-search-fun)
-  (remove-hook 'isearch-mode-end-hook 'fuzzy-isearch-end-hook))
-
-(defadvice isearch-message-prefix (after fuzzy-isearch-message-prefix activate)
-  (if fuzzy-isearch
-      (setq ad-return-value (concat fuzzy-isearch-message-prefix ad-return-value))
-    ad-return-value))
-
-\f
-
-;;; QuickSilver's Abbreviation Scoring
-
-(defun fuzzy-quicksilver-make-abbrev-regexp (abbrev)
-  (concat "^"
-          (loop for char across (downcase abbrev) concat
-                (format ".*?\\(%s\\)"
-                        (regexp-quote (string char))))))
-
-(defun fuzzy-quicksilver-abbrev-penalty (string skip-start skip-end)
-  (let ((skipped (- skip-end skip-start)))
-    (cond
-     ((zerop skipped) 0)
-     ((string-match "[ \\t\\r\\n_-]+$" (substring string skip-start skip-end))
-      (let ((seps (- (match-end 0) (match-beginning 0))))
-        (+ seps (* (- skipped seps) 0.15))))
-     ((let ((case-fold-search nil))
-        (eq (string-match "[[:upper:]]" string skip-end) skip-end))
-      (let ((ups (let ((case-fold-search nil))
-                   (fuzzy-count-matches-in-string
-                    "[[:upper:]]" string skip-start skip-end))))
-        (+ ups (* (- skipped ups) 0.15))))
-     (t skipped))))
-
-(defun fuzzy-quicksilver-abbrev-score-nocache (string abbrev)
-  (cond
-   ((zerop (length abbrev))             0.9)
-   ((< (length string) (length abbrev)) 0.0)
-   ((let ((regexp (fuzzy-quicksilver-make-abbrev-regexp abbrev))
-          (case-fold-search t))
-      (string-match regexp string))
-    (loop with groups = (cddr (match-data))
-          while groups
-          for prev    = 0 then end
-          for start   = (pop groups)
-          for end     = (pop groups)
-          for matched = (- end start)
-          for skipped = (- start prev)
-          for penalty = (fuzzy-quicksilver-abbrev-penalty string prev start)
-          sum (+ matched (- skipped penalty)) into point
-          finally return
-          (let* ((length (length string))
-                 (rest (- length end)))
-            (/ (+ point (* rest 0.9)) (float length)))))
-   (t 0.0)))
-
-;; Make sure byte-compiled.
-(eval-when (eval)
-  (byte-compile 'fuzzy-quicksilver-abbrev-score-nocache))
-
-(defvar fuzzy-quicksilver-abbrev-score-cache
-  (make-hash-table :test 'equal :weakness t))
-
-(defun fuzzy-quicksilver-abbrev-score (string abbrev)
-  (let ((cache-key (cons string abbrev)))
-    (or (gethash cache-key fuzzy-quicksilver-abbrev-score-cache)
-        (puthash cache-key
-                 (fuzzy-quicksilver-abbrev-score-nocache string abbrev)
-                 fuzzy-quicksilver-abbrev-score-cache))))
-
-(defun* fuzzy-quicksilver-realtime-abbrev-score (list
-                                                 abbrev
-                                                 &key
-                                                 limit
-                                                 timeout
-                                                 (quality 0.7)
-                                                 &aux new-list)
-  (fuzzy-with-timeout (timeout (nreverse new-list))
-    (loop with length = 0
-          for string in list
-          for score = (fuzzy-quicksilver-abbrev-score string abbrev)
-          if (>= score quality) do
-          (fuzzy-add-to-list-as-sorted
-           'new-list (cons string score)
-           :test '<
-           :key 'cdr)
-          (incf length)
-          if (and limit (> length limit)) do
-          (pop new-list)
-          (setq length limit)
-          do (tick)
-          finally return (nreverse new-list))))
-
-(provide 'fuzzy)
-;;; fuzzy.el ends here
diff --git a/.emacs.d/elisp/idomenu/idomenu-autoloads.el b/.emacs.d/elisp/idomenu/idomenu-autoloads.el
deleted file mode 100644 (file)
index 60734e6..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;;; idomenu-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
-\f
-;;;### (autoloads nil "idomenu" "idomenu.el" (21286 760 941970 832000))
-;;; Generated autoloads from idomenu.el
-
-(autoload 'idomenu "idomenu" "\
-Switch to a buffer-local tag from Imenu via Ido.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; idomenu-autoloads.el ends here
diff --git a/.emacs.d/elisp/idomenu/idomenu.el b/.emacs.d/elisp/idomenu/idomenu.el
deleted file mode 100644 (file)
index 380d115..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;;; idomenu.el --- imenu tag selection a la ido
-;;
-;; Copyright (C) 2010 Georg Brandl
-;;
-;; Author: Georg Brandl <georg@python.org>
-;; Version: 20111122.1048
-;; X-Original-Version: 0.1
-;;
-;; This file is NOT part of GNU Emacs.
-;;
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License
-;; as published by the Free Software Foundation; either version 2
-;; of the License, or (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; This package provides the `idomenu' command for selecting an imenu tag using
-;; ido completion.  The buffer needs to have support for imenu already enabled.
-;;
-;; Add something like the following to your .emacs:
-;;
-;; (autoload 'idomenu "idomenu" nil t)
-;;
-;;; Code:
-
-(require 'ido)
-(require 'imenu)
-
-(defun idomenu--guess-default (index-alist symbol)
-  "Guess a default choice from the given symbol."
-  (catch 'found
-    (let ((regex (concat "\\_<" (regexp-quote symbol) "\\_>")))
-      (dolist (item index-alist)
-        (if (string-match regex (car item)) (throw 'found (car item)))))))
-
-(defun idomenu--read (index-alist &optional prompt guess)
-  "Read a choice from an Imenu alist via Ido."
-  (let* ((symatpt (thing-at-point 'symbol))
-         (default (and guess symatpt (idomenu--guess-default index-alist symatpt)))
-         (names (mapcar 'car index-alist))
-         (name (ido-completing-read (or prompt "imenu ") names
-                                    nil t nil nil default))
-         (choice (assoc name index-alist)))
-    (if (imenu--subalist-p choice)
-        (idomenu--read (cdr choice) prompt nil)
-      choice)))
-
-(defun idomenu--trim (str)
-  "Trim leading and tailing whitespace from STR."
-  (let ((s (if (symbolp str) (symbol-name str) str)))
-    (replace-regexp-in-string "\\(^[[:space:]\n]*\\|[[:space:]\n]*$\\)" "" s)))
-
-(defun idomenu--trim-alist (index-alist)
-  "There must be a better way to apply a function to all cars of an alist"
-  (mapcar (lambda (pair) (cons (idomenu--trim (car pair)) (cdr pair)))
-         index-alist))
-
-;;;###autoload
-(defun idomenu ()
-  "Switch to a buffer-local tag from Imenu via Ido."
-  (interactive)
-  ;; ido initialization
-  (ido-init-completion-maps)
-  (add-hook 'minibuffer-setup-hook 'ido-minibuffer-setup)
-  (add-hook 'choose-completion-string-functions 'ido-choose-completion-string)
-  (add-hook 'kill-emacs-hook 'ido-kill-emacs-hook)
-  ;; set up ido completion list
-  (let ((index-alist (cdr (imenu--make-index-alist))))
-    (if (equal index-alist '(nil))
-        (message "No imenu tags in buffer")
-      (imenu (idomenu--read (idomenu--trim-alist index-alist) nil t)))))
-
-(provide 'idomenu)
-;;; idomenu.el ends here
diff --git a/.emacs.d/elisp/iedit/iedit-autoloads.el b/.emacs.d/elisp/iedit/iedit-autoloads.el
deleted file mode 100644 (file)
index 9f4b476..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-;;; iedit-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
-\f
-;;;### (autoloads nil "iedit" "iedit.el" (21286 759 545972 68000))
-;;; Generated autoloads from iedit.el
-
-(autoload 'iedit-mode "iedit" "\
-Toggle Iedit mode.
-This command behaves differently, depending on the mark, point,
-prefix argument and variable `iedit-transient-mark-sensitive'.
-
-If Iedit mode is off, turn Iedit mode on.
-
-When Iedit mode is turned on, all the occurrences of the current
-region in the buffer (possibly narrowed) or a region are
-highlighted.  If one occurrence is modified, the change are
-propagated to all other occurrences simultaneously.
-
-If region is not active, the current symbol (returns from
-`iedit-current-symbol') is used as the occurrence by default.
-The occurrences of the current symbol, but not include
-occurrences that are part of other symbols, are highlighted.  If
-you still want to match all the occurrences, even though they are
-parts of other symbols, you may have to mark the symbol first.
-
-In the above two situations, with digit prefix argument 0, only
-occurrences in current function are matched.  This is good for
-renaming refactoring in programming.
-
-You can also switch to Iedit mode from isearch mode directly. The
-current search string is used as occurrence.  All occurrences of
-the current search string are highlighted.
-
-With an universal prefix argument, the occurrence when Iedit mode
-is turned off last time in current buffer is used as occurrence.
-This is intended to recover last Iedit mode which is turned off.
-If region active, Iedit mode is limited within the current
-region.
-
-With repeated universal prefix argument, the occurrence when
-Iedit mode is turned off last time (might be in other buffer) is
-used as occurrence.  If region active, Iedit mode is limited
-within the current region.
-
-If Iedit mode is on and region is active, Iedit mode is
-restricted in the region, e.g. the occurrences outside of the
-region is excluded.
-
-If Iedit mode is on and region is active, with an universal
-prefix argument, Iedit mode is restricted outside of the region,
-e.g. the occurrences in the region is excluded.
-
-Turn off Iedit mode in other situations.
-
-Commands:
-\\{iedit-mode-keymap}
-Keymap used within overlays:
-\\{iedit-mode-occurrence-keymap}
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'iedit-mode-toggle-on-function "iedit" "\
-Toggle Iedit mode on current function.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "iedit-rect" "iedit-rect.el" (21286 759 653971
-;;;;;;  969000))
-;;; Generated autoloads from iedit-rect.el
-
-(autoload 'iedit-rectangle-mode "iedit-rect" "\
-Toggle Iedit-rect mode.
-
-When Iedit-rect mode is on, a rectangle is started with visible
-rectangle highlighting.  Rectangle editing support is based on
-Iedit mechanism.
-
-Commands:
-\\{iedit-rect-keymap}
-
-\(fn &optional BEG END)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil nil ("iedit-lib.el" "iedit-pkg.el") (21286
-;;;;;;  759 722795 195000))
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; iedit-autoloads.el ends here
diff --git a/.emacs.d/elisp/iedit/iedit-lib.el b/.emacs.d/elisp/iedit/iedit-lib.el
deleted file mode 100644 (file)
index ca4877d..0000000
+++ /dev/null
@@ -1,901 +0,0 @@
-;;; iedit-lib.el --- APIs for editing multiple regions in the same way
-;;; simultaneously.
-
-;; Copyright (C) 2010, 2011, 2012 Victor Ren
-
-;; Time-stamp: <2013-10-07 10:53:50 Victor Ren>
-;; Author: Victor Ren <victorhge@gmail.com>
-;; Keywords: occurrence region simultaneous rectangle refactoring
-;; Version: 0.97
-;; X-URL: http://www.emacswiki.org/emacs/Iedit
-;; Compatibility: GNU Emacs: 22.x, 23.x, 24.x
-
-;; This file is not part of GNU Emacs, but it is distributed under
-;; the same terms as GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This package is iedit APIs library that allow you to write your own minor mode.
-
-;;; todo:
-;; - Update comments for APIs
-;; - Add more easy access keys for whole occurrence
-;; - More APIs: extend occurrences,
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-
-(defgroup iedit nil
-  "Edit multiple regions in the same way simultaneously."
-  :prefix "iedit-"
-  :group 'replace
-  :group 'convenience)
-
-(defface iedit-occurrence
-  '((t :inherit highlight))
-  "*Face used for the occurrences' default values."
-  :group 'iedit)
-
-(defface iedit-read-only-occurrence
-  '((t :inherit region))
-  "*Face used for the read-only occurrences' default values."
-  :group 'iedit)
-
-(defcustom iedit-case-sensitive-default t
-  "If no-nil, matching is case sensitive."
-  :type 'boolean
-  :group 'iedit)
-
-(defcustom iedit-unmatched-lines-invisible-default nil
-  "If no-nil, hide lines that do not cover any occurrences by default."
-  :type 'boolean
-  :group 'iedit)
-
-(defcustom iedit-transient-mark-sensitive t
-  "If no-nil, Iedit mode is sensitive to the Transient Mark mode.
-It means Iedit works as expected only when regions are
-highlighted.  If you want to use iedit without Transient Mark
-mode, set it as nil."
-  :type 'boolean
-  :group 'iedit)
-
-(defcustom iedit-overlay-priority 200
-  "The priority of the overlay used to indicate matches."
-  :type 'integer
-  :group 'iedit)
-
-(defvar iedit-occurrences-overlays nil
-  "The occurrences slot contains a list of overlays used to
-indicate the position of each editable occurrence.  In addition, the
-occurrence overlay is used to provide a different face
-configurable via `iedit-occurrence'.")
-
-(defvar iedit-read-only-occurrences-overlays nil
-  "The occurrences slot contains a list of overlays used to
-indicate the position of each read-only occurrence.  In addition, the
-occurrence overlay is used to provide a different face
-configurable via `iedit-ready-only-occurrence'.")
-
-(defvar iedit-case-sensitive iedit-case-sensitive-default
-  "This is buffer local variable.
-If no-nil, matching is case sensitive.")
-
-(defvar iedit-unmatched-lines-invisible nil
-  "This is buffer local variable which indicates whether
-unmatched lines are hided.")
-
-(defvar iedit-forward-success t
-  "This is buffer local variable which indicates the moving
-forward or backward successful")
-
-(defvar iedit-before-modification-string ""
-  "This is buffer local variable which is the buffer substring
-that is going to be changed.")
-
-(defvar iedit-before-modification-undo-list nil
-  "This is buffer local variable which is the buffer undo list before modification.")
-
-;; `iedit-occurrence-update-hook' gets called twice when change==0 and
-;; occurrence is zero-width (beg==end) -- for front and back insertion.
-(defvar iedit-skip-modification-once t
-  "Variable used to skip first modification hook run when
-insertion against a zero-width occurrence.")
-
-(defvar iedit-aborting nil
-  "This is buffer local variable which indicates Iedit mode is aborting.")
-
-(defvar iedit-aborting-hook nil
-  "Functions to call before iedit-abort.  Normally it should be mode exit function.")
-
-(defvar iedit-post-undo-hook-installed nil
-  "This is buffer local variable which indicated if
-`iedit-post-undo-hook' is installed in `post-command-hook'.")
-
-(defvar iedit-buffering nil
-  "This is buffer local variable which indicates iedit-mode is
-buffering, which means the modification to the current occurrence
-is not applied to other occurrences when it is true.")
-
-(defvar iedit-occurrence-context-lines 1
-  "The number of lines before or after the occurrence.")
-
-(make-variable-buffer-local 'iedit-occurrences-overlays)
-(make-variable-buffer-local 'iedit-read-only-occurrences-overlays)
-(make-variable-buffer-local 'iedit-unmatched-lines-invisible)
-(make-local-variable 'iedit-case-sensitive)
-(make-variable-buffer-local 'iedit-forward-success)
-(make-variable-buffer-local 'iedit-before-modification-string)
-(make-variable-buffer-local 'iedit-before-modification-undo-list)
-(make-variable-buffer-local 'iedit-skip-modification-once)
-(make-variable-buffer-local 'iedit-aborting)
-(make-variable-buffer-local 'iedit-buffering)
-(make-variable-buffer-local 'iedit-post-undo-hook-installed)
-(make-variable-buffer-local 'iedit-occurrence-context-lines)
-
-(defconst iedit-occurrence-overlay-name 'iedit-occurrence-overlay-name)
-(defconst iedit-invisible-overlay-name 'iedit-invisible-overlay-name)
-
-;;; Define Iedit mode map
-(defvar iedit-lib-keymap
-  (let ((map (make-sparse-keymap)))
-    ;; Default key bindings
-    (define-key map (kbd "TAB") 'iedit-next-occurrence)
-    (define-key map (kbd "<S-tab>") 'iedit-prev-occurrence)
-    (define-key map (kbd "<S-iso-lefttab>") 'iedit-prev-occurrence)
-    (define-key map (kbd "<backtab>") 'iedit-prev-occurrence)
-    (define-key map (kbd "C-'") 'iedit-toggle-unmatched-lines-visible)
-    map)
-  "Keymap used while Iedit mode is enabled.")
-
-(defvar iedit-occurrence-keymap-default
-  (let ((map (make-sparse-keymap)))
-;;  (set-keymap-parent map iedit-lib-keymap)
-    (define-key map (kbd "M-U") 'iedit-upcase-occurrences)
-    (define-key map (kbd "M-L") 'iedit-downcase-occurrences)
-    (define-key map (kbd "M-R") 'iedit-replace-occurrences)
-    (define-key map (kbd "M-SPC") 'iedit-blank-occurrences)
-    (define-key map (kbd "M-D") 'iedit-delete-occurrences)
-    (define-key map (kbd "M-N") 'iedit-number-occurrences)
-    (define-key map (kbd "M-B") 'iedit-toggle-buffering)
-    (define-key map (kbd "M-<") 'iedit-goto-first-occurrence)
-    (define-key map (kbd "M->") 'iedit-goto-last-occurrence)
-    (define-key map (kbd "C-?") 'iedit-help-for-occurrences)
-    map)
-  "Default keymap used within occurrence overlays.")
-
-(defvar iedit-occurrence-keymap 'iedit-occurrence-keymap-default
-  "Keymap used within occurrence overlays.
-It should be set before occurrence overlay is created.")
-(make-local-variable 'iedit-occurrence-keymap)
-
-(defun iedit-help-for-occurrences ()
-  "Display `iedit-occurrence-keymap-default'"
-  (interactive)
-  (message (concat (substitute-command-keys "\\[iedit-upcase-occurrences]") "/"
-                   (substitute-command-keys "\\[iedit-downcase-occurrences]") ":up/downcase "
-                   (substitute-command-keys "\\[iedit-replace-occurrences]") ":replace "
-                   (substitute-command-keys "\\[iedit-blank-occurrences]") ":blank "
-                   (substitute-command-keys "\\[iedit-delete-occurrences]") ":delete "
-                   (substitute-command-keys "\\[iedit-number-occurrences]") ":number "
-                   (substitute-command-keys "\\[iedit-toggle-buffering]") ":buffering "
-                   (substitute-command-keys "\\[iedit-goto-first-occurrence]") "/"
-                   (substitute-command-keys "\\[iedit-goto-last-occurrence]") ":first/last "
-                   )))
-
-(defun iedit-make-occurrences-overlays (occurrence-regexp beg end)
-  "Create occurrence overlays for `occurrence-regexp' in a region.
-Return the number of occurrences."
-  (setq iedit-aborting nil)
-  (setq iedit-occurrences-overlays nil)
-  (setq iedit-read-only-occurrences-overlays nil)
-  ;; Find and record each occurrence's markers and add the overlay to the occurrences
-  (let ((counter 0)
-        (case-fold-search (not iedit-case-sensitive)))
-    (save-excursion
-      (save-window-excursion
-        (goto-char end)
-        ;; todo: figure out why re-search-forward is slow without "recenter"
-        (recenter)
-        (goto-char beg)
-        (while (re-search-forward occurrence-regexp end t)
-          (let ((beginning (match-beginning 0))
-                (ending (match-end 0)))
-            (if (text-property-not-all beginning ending 'read-only nil)
-                (push (iedit-make-read-only-occurrence-overlay beginning ending)
-                      iedit-read-only-occurrences-overlays)
-              (push (iedit-make-occurrence-overlay beginning ending)
-                    iedit-occurrences-overlays))
-            (setq counter (1+ counter))))
-        (when (/= 0 counter)
-          (if iedit-unmatched-lines-invisible
-              (iedit-hide-unmatched-lines iedit-occurrence-context-lines))))
-      counter)))
-
-(defun iedit-add-next-occurrence-overlay (occurrence-exp &optional point)
-  "Create next occurrence overlay for `occurrence-exp'."
-  (iedit-add-occurrence-overlay occurrence-exp point t))
-
-(defun iedit-add-previous-occurrence-overlay (occurrence-exp &optional point)
-  "Create previous occurrence overlay for `occurrence-exp'."
-  (iedit-add-occurrence-overlay occurrence-exp point nil))
-
-(defun iedit-add-occurrence-overlay (occurrence-exp point forward)
-  "Create next or previous occurrence overlay for `occurrence-exp'."
-  (or point
-      (setq point (point)))
-  (let ((case-fold-search (not iedit-case-sensitive)))
-    (save-excursion
-      (goto-char point)
-      (if (not (if forward
-                   (re-search-forward occurrence-exp nil t)
-                 (re-search-backward occurrence-exp nil t)))
-          (message "No match")
-        (if (or (iedit-find-overlay-at-point (match-beginning 0) 'iedit-occurrence-overlay-name)
-                (iedit-find-overlay-at-point (match-end 0) 'iedit-occurrence-overlay-name))
-            (error "Conflict region"))
-        (push (iedit-make-occurrence-overlay (match-beginning 0)
-                                             (match-end 0))
-              iedit-occurrences-overlays)
-        (message "Add one match for \"%s\"" (iedit-printable occurrence-exp))
-        (if iedit-unmatched-lines-invisible
-            (iedit-hide-unmatched-lines iedit-occurrence-context-lines))))))
-
-(defun iedit-add-region-as-occurrence (beg end)
-  "Add region as an occurrence.
-The length of the region must the same as other occurrences if
-there are."
-  (or (= beg end)
-      (error "No region"))
-  (if (null iedit-occurrences-overlays)
-      (push
-       (iedit-make-occurrence-overlay beg end)
-       iedit-occurrences-overlays)
-    (or (= (- end beg) (iedit-occurrence-string-length))
-        (error "Wrong region"))
-    (if (or (iedit-find-overlay-at-point beg 'iedit-occurrence-overlay-name)
-            (iedit-find-overlay-at-point end 'iedit-occurrence-overlay-name))
-        (error "Conflict region"))
-    (push (iedit-make-occurrence-overlay beg end)
-          iedit-occurrences-overlays)
-    )) ;; todo test this function
-
-(defun iedit-cleanup ()
-  "Clean up occurrence overlay, invisible overlay and local variables."
-  (remove-overlays nil nil iedit-occurrence-overlay-name t)
-  (iedit-show-all)
-  (setq iedit-occurrences-overlays nil)
-  (setq iedit-read-only-occurrences-overlays nil)
-  (setq iedit-aborting nil)
-  (setq iedit-before-modification-string "")
-  (setq iedit-before-modification-undo-list nil))
-
-(defun iedit-make-occurrence-overlay (begin end)
-  "Create an overlay for an occurrence in Iedit mode.
-Add the properties for the overlay: a face used to display a
-occurrence's default value, and modification hooks to update
-occurrences if the user starts typing."
-  (let ((occurrence (make-overlay begin end (current-buffer) nil t)))
-    (overlay-put occurrence iedit-occurrence-overlay-name t)
-    (overlay-put occurrence 'face 'iedit-occurrence)
-    (overlay-put occurrence 'keymap iedit-occurrence-keymap)
-    (overlay-put occurrence 'insert-in-front-hooks '(iedit-occurrence-update-hook))
-    (overlay-put occurrence 'insert-behind-hooks '(iedit-occurrence-update-hook))
-    (overlay-put occurrence 'modification-hooks '(iedit-occurrence-update-hook))
-    (overlay-put occurrence 'priority iedit-overlay-priority)
-    occurrence))
-
-(defun iedit-make-read-only-occurrence-overlay (begin end)
-  "Create an overlay for an read-only occurrence in Iedit mode."
-  (let ((occurrence (make-overlay begin end (current-buffer) nil t)))
-    (overlay-put occurrence iedit-occurrence-overlay-name t)
-    (overlay-put occurrence 'face 'iedit-read-only-occurrence)
-    occurrence))
-
-(defun iedit-make-unmatched-lines-overlay (begin end)
-  "Create an overlay for lines between two occurrences in Iedit mode."
-  (let ((unmatched-lines-overlay (make-overlay begin end (current-buffer) nil t)))
-    (overlay-put unmatched-lines-overlay iedit-invisible-overlay-name t)
-    (overlay-put unmatched-lines-overlay 'invisible 'iedit-invisible-overlay-name)
-    ;;    (overlay-put unmatched-lines-overlay 'intangible t)
-    unmatched-lines-overlay))
-
-(defun iedit-post-undo-hook ()
-  "Check if it is time to abort iedit after undo command is executed.
-
-This is added to `post-command-hook' when undo command is executed
-in occurrences."
-  (if (iedit-same-length)
-      nil
-    (run-hooks 'iedit-aborting-hook))
-  (remove-hook 'post-command-hook 'iedit-post-undo-hook t)
-  (setq iedit-post-undo-hook-installed nil))
-
-(defun iedit-reset-aborting ()
-  "Turning Iedit mode off and reset `iedit-aborting'.
-
-This is added to `post-command-hook' when aborting Iedit mode is
-decided.  `iedit-aborting-hook' is postponed after the current
-command is executed for avoiding `iedit-occurrence-update-hook'
-is called for a removed overlay."
-  (run-hooks 'iedit-aborting-hook)
-  (remove-hook 'post-command-hook 'iedit-reset-aborting t)
-  (setq iedit-aborting nil))
-
-;; There are two ways to update all occurrences.  One is to redefine all key
-;; stroke map for overlay, the other is to figure out three basic modification
-;; in the modification hook.  This function chooses the latter.
-(defun iedit-occurrence-update-hook (occurrence after beg end &optional change)
-  "Update all occurrences.
-This modification hook is triggered when a user edits any
-occurrence and is responsible for updating all other
-occurrences. Refer to `modification-hooks' for more details.
-Current supported edits are insertion, yank, deletion and
-replacement.  If this modification is going out of the
-occurrence, it will abort Iedit mode."
-  (if undo-in-progress
-      ;; If the "undo" change make occurrences different, it is going to mess up
-      ;; occurrences.  So a check will be done after undo command is executed.
-      (when (not iedit-post-undo-hook-installed)
-        (add-hook 'post-command-hook 'iedit-post-undo-hook nil t)
-        (setq iedit-post-undo-hook-installed t))
-    (when (not iedit-aborting)
-    ;; before modification
-    (if (null after)
-        (if (or (< beg (overlay-start occurrence))
-                (> end (overlay-end occurrence)))
-            (progn (setq iedit-aborting t) ; abort iedit-mode
-                   (add-hook 'post-command-hook 'iedit-reset-aborting nil t))
-          (setq iedit-before-modification-string
-                (buffer-substring-no-properties beg end))
-          ;; Check if this is called twice before modification. When inserting
-          ;; into zero-width occurrence or between two conjoined occurrences,
-          ;; both insert-in-front-hooks and insert-behind-hooks will be
-          ;; called.  Two calls will make `iedit-skip-modification-once' true.
-          (setq iedit-skip-modification-once (not iedit-skip-modification-once)))
-      ;; after modification
-      (when (not iedit-buffering)
-        (if iedit-skip-modification-once
-            ;; Skip the first hook
-            (setq iedit-skip-modification-once nil)
-          (setq iedit-skip-modification-once t)
-          (when (or (eq 0 change) ;; insertion
-                    (eq beg end)  ;; deletion
-                    (not (string= iedit-before-modification-string
-                                  (buffer-substring-no-properties beg end))))
-            (iedit-update-occurrences  occurrence after beg end change))))))))
-
-(defun iedit-update-occurrences (occurrence after beg end &optional change)
-  ""
-  (let ((inhibit-modification-hooks t)
-        (offset (- beg (overlay-start occurrence)))
-        (value (buffer-substring-no-properties beg end)))
-    (save-excursion
-      ;; insertion or yank
-      (if (= 0 change)
-          (dolist (another-occurrence iedit-occurrences-overlays)
-            (let* ((beginning (+ (overlay-start another-occurrence) offset))
-                   (ending (+ beginning (- end beg))))
-              (when (not (eq another-occurrence occurrence))
-                (goto-char beginning)
-                (insert-and-inherit value)
-                ;; todo: reconsider this change Quick fix for
-                ;; multi-occur occur-edit-mode: multi-occur depend on
-                ;; after-change-functions to update original
-                ;; buffer. Since inhibit-modification-hooks is set to
-                ;; non-nil, after-change-functions hooks are not going
-                ;; to be called for the changes of other occurrences.
-                ;; So run the hook here.
-                (run-hook-with-args 'after-change-functions
-                                    beginning
-                                    ending
-                                    change))
-              (iedit-move-conjoined-overlays another-occurrence)))
-        ;; deletion
-        (dolist (another-occurrence (remove occurrence iedit-occurrences-overlays))
-          (let ((beginning (+ (overlay-start another-occurrence) offset)))
-            (delete-region beginning (+ beginning change))
-            (unless (eq beg end) ;; replacement
-              (goto-char beginning)
-              (insert-and-inherit value))
-            (run-hook-with-args 'after-change-functions
-                                beginning
-                                (+ beginning (- beg end))
-                                change)))))))
-
-(defun iedit-next-occurrence ()
-  "Move forward to the next occurrence in the `iedit'.
-If the point is already in the last occurrences, you are asked to type
-another `iedit-next-occurrence', it starts again from the
-beginning of the buffer."
-  (interactive)
-  (let ((pos (point))
-        (in-occurrence (get-char-property (point) 'iedit-occurrence-overlay-name)))
-    (when in-occurrence
-      (setq pos (next-single-char-property-change pos 'iedit-occurrence-overlay-name)))
-    (setq pos (next-single-char-property-change pos 'iedit-occurrence-overlay-name))
-    (if (/= pos (point-max))
-        (setq iedit-forward-success t)
-      (if (and iedit-forward-success in-occurrence)
-          (progn (message "This is the last occurrence.")
-                 (setq iedit-forward-success nil))
-        (progn
-          (if (get-char-property (point-min) 'iedit-occurrence-overlay-name)
-              (setq pos (point-min))
-            (setq pos (next-single-char-property-change
-                       (point-min)
-                       'iedit-occurrence-overlay-name)))
-          (setq iedit-forward-success t)
-          (message "Located the first occurrence."))))
-    (when iedit-forward-success
-      (goto-char pos))))
-
-(defun iedit-prev-occurrence ()
-  "Move backward to the previous occurrence in the `iedit'.
-If the point is already in the first occurrences, you are asked to type
-another `iedit-prev-occurrence', it starts again from the end of
-the buffer."
-  (interactive)
-  (let ((pos (point))
-        (in-occurrence (get-char-property (point) 'iedit-occurrence-overlay-name)))
-    (when in-occurrence
-      (setq pos (previous-single-char-property-change pos 'iedit-occurrence-overlay-name)))
-    (setq pos (previous-single-char-property-change pos 'iedit-occurrence-overlay-name))
-    ;; At the start of the first occurrence
-    (if (or (and (eq pos (point-min))
-                 (not (get-char-property (point-min) 'iedit-occurrence-overlay-name)))
-            (and (eq (point) (point-min))
-                 in-occurrence))
-        (if (and iedit-forward-success in-occurrence)
-            (progn (message "This is the first occurrence.")
-                   (setq iedit-forward-success nil))
-          (progn
-            (setq pos (previous-single-char-property-change (point-max) 'iedit-occurrence-overlay-name))
-            (if (not (get-char-property (- (point-max) 1) 'iedit-occurrence-overlay-name))
-                (setq pos (previous-single-char-property-change pos 'iedit-occurrence-overlay-name)))
-            (setq iedit-forward-success t)
-            (message "Located the last occurrence.")))
-      (setq iedit-forward-success t))
-    (when iedit-forward-success
-      (goto-char pos))))
-
-(defun iedit-goto-first-occurrence ()
-  "Move to the first occurrence."
-  (interactive)
-  (goto-char (iedit-first-occurrence))
-  (setq iedit-forward-success t)
-  (message "Located the first occurrence."))
-
-(defun iedit-first-occurrence ()
-  "return the position of the first occurrence."
-  (if (get-char-property (point-min) 'iedit-occurrence-overlay-name)
-      (point-min)
-    (next-single-char-property-change
-     (point-min) 'iedit-occurrence-overlay-name)))
-
-(defun iedit-goto-last-occurrence ()
-  "Move to the last occurrence."
-  (interactive)
-  (goto-char (iedit-last-occurrence))
-  (setq iedit-forward-success t)
-  (message "Located the last occurrence."))
-
-(defun iedit-last-occurrence ()
-  "return the position of the last occurrence."
-  (let ((pos (previous-single-char-property-change (point-max) 'iedit-occurrence-overlay-name)))
-    (if (not (get-char-property (- (point-max) 1) 'iedit-occurrence-overlay-name))
-        (setq pos (previous-single-char-property-change pos 'iedit-occurrence-overlay-name)))
-    pos))
-
-(defun iedit-toggle-unmatched-lines-visible (&optional arg)
-  "Toggle whether to display unmatched lines.
-A prefix ARG specifies how many lines before and after the
-occurrences are not hided; negative is treated the same as zero.
-
-If no prefix argument, the prefix argument last time or default
-value of `iedit-occurrence-context-lines' is used for this time."
-  (interactive "P")
-  (if (null arg)
-      ;; toggle visible
-      (progn (setq iedit-unmatched-lines-invisible (not iedit-unmatched-lines-invisible))
-             (if iedit-unmatched-lines-invisible
-                 (iedit-hide-unmatched-lines iedit-occurrence-context-lines)
-               (iedit-show-all)))
-    ;; reset invisible lines
-    (setq arg (prefix-numeric-value arg))
-    (if (< arg 0)
-        (setq arg 0))
-    (unless (and iedit-unmatched-lines-invisible
-                 (= arg iedit-occurrence-context-lines))
-      (when iedit-unmatched-lines-invisible
-        (remove-overlays nil nil iedit-invisible-overlay-name t))
-      (setq iedit-occurrence-context-lines arg)
-      (setq iedit-unmatched-lines-invisible t)
-      (iedit-hide-unmatched-lines iedit-occurrence-context-lines))))
-
-(defun iedit-show-all()
-  "Show hided lines."
-  (setq line-move-ignore-invisible nil)
-  (remove-from-invisibility-spec '(iedit-invisible-overlay-name . t))
-  (remove-overlays nil nil iedit-invisible-overlay-name t))
-
-(defun iedit-hide-unmatched-lines (context-lines)
-  "Hide unmatched lines using invisible overlay."
-  (let ((prev-occurrence-end 1)
-        (unmatched-lines nil))
-    (save-excursion
-      (goto-char (iedit-first-occurrence))
-      (while (/= (point) (point-max))
-        ;; Now at the beginning of an occurrence
-        (let ((current-start (point)))
-          (forward-line (- context-lines))
-          (let ((line-beginning (line-beginning-position)))
-            (if (> line-beginning prev-occurrence-end)
-                (push  (list prev-occurrence-end (1- line-beginning)) unmatched-lines)))
-          ;; goto the end of the occurrence
-          (goto-char (next-single-char-property-change current-start 'iedit-occurrence-overlay-name)))
-        (let ((current-end (point)))
-          (forward-line context-lines)
-          (setq prev-occurrence-end (1+ (line-end-position)))
-          ;; goto the beginning of next occurrence
-          (goto-char (next-single-char-property-change current-end 'iedit-occurrence-overlay-name))))
-      (if (< prev-occurrence-end (point-max))
-          (push (list prev-occurrence-end (point-max)) unmatched-lines))
-      (when unmatched-lines
-        (set (make-local-variable 'line-move-ignore-invisible) t)
-        (add-to-invisibility-spec '(iedit-invisible-overlay-name . t))
-        (dolist (unmatch unmatched-lines)
-          (iedit-make-unmatched-lines-overlay (car unmatch) (cadr unmatch)))))
-    unmatched-lines))
-
-;;;; functions for overlay keymap
-(defun iedit-apply-on-occurrences (function &rest args)
-  "Call function for each occurrence."
-  (let ((inhibit-modification-hooks t))
-      (save-excursion
-        (dolist (occurrence iedit-occurrences-overlays)
-          (apply function (overlay-start occurrence) (overlay-end occurrence) args)))))
-
-(defun iedit-upcase-occurrences ()
-  "Covert occurrences to upper case."
-  (interactive "*")
-  (iedit-barf-if-buffering)
-  (iedit-apply-on-occurrences 'upcase-region))
-
-(defun iedit-downcase-occurrences()
-  "Covert occurrences to lower case."
-  (interactive "*")
-  (iedit-barf-if-buffering)
-  (iedit-apply-on-occurrences 'downcase-region))
-
-(defun iedit-replace-occurrences(to-string)
-  "Replace occurrences with STRING.
-This function preserves case."
-  (interactive "*sReplace with: ")
-  (iedit-barf-if-buffering)
-  (let* ((ov (iedit-find-current-occurrence-overlay))
-         (offset (- (point) (overlay-start ov)))
-         (from-string (downcase (buffer-substring-no-properties
-                                 (overlay-start ov)
-                                 (overlay-end ov)))))
-    (iedit-apply-on-occurrences
-     (lambda (beg end from-string to-string)
-       (goto-char beg)
-       (search-forward from-string end)
-       (replace-match to-string nil))
-     from-string to-string)
-    (goto-char (+ (overlay-start ov) offset))))
-
-(defun iedit-blank-occurrences()
-  "Replace occurrences with blank spaces."
-  (interactive "*")
-  (iedit-barf-if-buffering)
-  (let* ((ov (car iedit-occurrences-overlays))
-         (offset (- (point) (overlay-start ov)))
-         (count (- (overlay-end ov) (overlay-start ov))))
-    (iedit-apply-on-occurrences
-     (lambda (beg end )
-       (delete-region beg end)
-       (goto-char beg)
-       (insert-and-inherit (make-string count 32))))
-    (goto-char (+ (overlay-start ov) offset))))
-
-(defun iedit-delete-occurrences()
-  "Delete occurrences."
-  (interactive "*")
-  (iedit-barf-if-buffering)
-  (iedit-apply-on-occurrences 'delete-region))
-
-;; todo: add cancel buffering function
-(defun iedit-toggle-buffering ()
-  "Toggle buffering.
-This is intended to improve iedit's response time.  If the number
-of occurrences are huge, it might be slow to update all the
-occurrences for each key stoke.  When buffering is on,
-modification is only applied to the current occurrence and will
-be applied to other occurrences when buffering is off."
-  (interactive "*")
-  (if iedit-buffering
-      (iedit-stop-buffering)
-    (iedit-start-buffering))
-  (message (concat "Modification Buffering "
-                   (if iedit-buffering
-                       "started."
-                     "stopped."))))
-
-(defun iedit-start-buffering ()
-  "Start buffering."
-  (setq iedit-buffering t)
-  (setq iedit-before-modification-string (iedit-current-occurrence-string))
-  (setq iedit-before-modification-undo-list buffer-undo-list)
-  (message "Start buffering editing..."))
-
-(defun iedit-stop-buffering ()
-  "Stop buffering and apply the modification to other occurrences.
-If current point is not at any occurrence, the buffered
-modification is not going to be applied to other occurrences."
-  (let ((ov (iedit-find-current-occurrence-overlay)))
-    (when ov
-      (let* ((beg (overlay-start ov))
-             (end (overlay-end ov))
-             (modified-string (buffer-substring-no-properties beg end))
-             (offset (- (point) beg)) ;; delete-region moves cursor
-             (inhibit-modification-hooks t))
-        (when (not (string= iedit-before-modification-string modified-string))
-          (save-excursion
-            ;; Rollback the current modification and buffer-undo-list. This is
-            ;; to avoid the inconsistency if user undoes modifications
-            (delete-region beg end)
-            (goto-char beg)
-            (insert-and-inherit iedit-before-modification-string)
-            (setq buffer-undo-list iedit-before-modification-undo-list)
-            (dolist (occurrence iedit-occurrences-overlays) ; todo:extract as a function
-              (let ((beginning (overlay-start occurrence))
-                    (ending (overlay-end occurrence)))
-                (delete-region beginning ending)
-                (unless (eq beg end) ;; replacement
-                  (goto-char beginning)
-                  (insert-and-inherit modified-string))
-                (iedit-move-conjoined-overlays occurrence))))
-          (goto-char (+ (overlay-start ov) offset))))))
-  (setq iedit-buffering nil)
-  (message "Buffered modification applied.")
-  (setq iedit-before-modification-undo-list nil))
-
-(defun iedit-move-conjoined-overlays (occurrence)
-  "This function keeps overlays conjoined after modification.
-After modification, conjoined overlays may be overlapped."
-  (let ((beginning (overlay-start occurrence))
-        (ending (overlay-end occurrence)))
-    (unless (= beginning (point-min))
-      (let ((previous-overlay (iedit-find-overlay-at-point
-                               (1- beginning)
-                               'iedit-occurrence-overlay-name)))
-        (if previous-overlay ; two conjoined occurrences
-            (move-overlay previous-overlay
-                          (overlay-start previous-overlay)
-                          beginning))))
-    (unless (= ending (point-max))
-      (let ((next-overlay (iedit-find-overlay-at-point
-                           ending
-                           'iedit-occurrence-overlay-name)))
-        (if next-overlay ; two conjoined occurrences
-            (move-overlay next-overlay ending (overlay-end next-overlay)))))))
-
-(defvar iedit-number-line-counter 1
-  "Occurrence number for 'iedit-number-occurrences.")
-
-(defun iedit-default-occurrence-number-format (start-at)
-  (concat "%"
-          (int-to-string
-           (length (int-to-string
-                    (1- (+ (length iedit-occurrences-overlays) start-at)))))
-          "d "))
-
-(defun iedit-number-occurrences (start-at &optional format-string)
-  "Insert numbers in front of the occurrences.
-START-AT, if non-nil, should be a number from which to begin
-counting.  FORMAT, if non-nil, should be a format string to pass
-to `format-string' along with the line count.  When called
-interactively with a prefix argument, prompt for START-AT and
-FORMAT."
-  (interactive
-   (if current-prefix-arg
-       (let* ((start-at (read-number "Number to count from: " 1)))
-         (list start-at
-               (read-string "Format string: "
-                            (iedit-default-occurrence-number-format
-                             start-at))))
-     (list 1 nil)))
-  (iedit-barf-if-buffering)
-  (unless format-string
-    (setq format-string (iedit-default-occurrence-number-format start-at)))
-  (let ((iedit-number-occurrence-counter start-at)
-        (inhibit-modification-hooks t))
-    (save-excursion
-      (goto-char (iedit-first-occurrence))
-      (while (/= (point) (point-max))
-        (insert (format format-string iedit-number-occurrence-counter))
-        (iedit-move-conjoined-overlays (iedit-find-current-occurrence-overlay))
-        (setq iedit-number-occurrence-counter
-              (1+ iedit-number-occurrence-counter))
-        (goto-char (next-single-char-property-change (point) 'iedit-occurrence-overlay-name))
-        (goto-char (next-single-char-property-change (point) 'iedit-occurrence-overlay-name))))))
-
-
-;;; help functions
-(defun iedit-find-current-occurrence-overlay ()
-  "Return the current occurrence overlay  at point or point - 1.
-This function is supposed to be called in overlay keymap."
-  (or (iedit-find-overlay-at-point (point) 'iedit-occurrence-overlay-name)
-      (iedit-find-overlay-at-point (1- (point)) 'iedit-occurrence-overlay-name)))
-
-(defun iedit-find-overlay-at-point (point property)
-  "Return the overlay with PROPERTY at POINT."
-  (let ((overlays (overlays-at point))
-        found)
-    (while (and overlays (not found))
-      (let ((overlay (car overlays)))
-        (if (overlay-get overlay property)
-            (setq found overlay)
-          (setq overlays (cdr overlays)))))
-    found))
-
-(defun iedit-same-column ()
-  "Return t if all occurrences are at the same column."
-  (save-excursion
-    (let ((column (progn (goto-char (overlay-start (car iedit-occurrences-overlays)))
-                         (current-column)))
-          (overlays (cdr  iedit-occurrences-overlays))
-          (same t))
-      (while (and overlays same)
-        (let ((overlay (car overlays)))
-          (if (/= (progn (goto-char (overlay-start overlay))
-                         (current-column))
-                  column)
-              (setq same nil)
-            (setq overlays (cdr overlays)))))
-      same)))
-
-(defun iedit-same-length ()
-  "Return t if all occurrences are the same length."
-  (save-excursion
-    (let ((length (iedit-occurrence-string-length))
-          (overlays (cdr iedit-occurrences-overlays))
-          (same t))
-      (while (and overlays same)
-        (let ((ov (car overlays)))
-          (if (/= (- (overlay-end ov) (overlay-start ov))
-                  length)
-              (setq same nil)
-            (setq overlays (cdr overlays)))))
-      same)))
-
-;; This function might be called out of any occurrence
-(defun iedit-current-occurrence-string ()
-  "Return current occurrence string.
-Return nil if occurrence string is empty string."
-  (let ((ov (or (iedit-find-current-occurrence-overlay)
-                 (car iedit-occurrences-overlays))))
-    (if ov
-        (let ((beg (overlay-start ov))
-              (end (overlay-end ov)))
-          (if (/=  beg end)
-              (buffer-substring-no-properties beg end)
-            nil))
-      nil)))
-
-(defun iedit-occurrence-string-length ()
-  "Return the length of current occurrence string."
-  (let ((ov (car iedit-occurrences-overlays)))
-    (- (overlay-end ov) (overlay-start ov))))
-
-(defun iedit-find-overlay (beg end property &optional exclusive)
-  "Return a overlay with property in region, or out of the region if EXCLUSIVE is not nil."
-  (if exclusive
-      (or (iedit-find-overlay-in-region (point-min) beg property)
-          (iedit-find-overlay-in-region end (point-max) property))
-    (iedit-find-overlay-in-region beg end property)))
-
-(defun iedit-find-overlay-in-region (beg end property)
-  "Return a overlay with property in region."
-  (let ((overlays (overlays-in beg end))
-        found)
-    (while (and overlays (not found))
-      (let ((overlay (car overlays)))
-        (if (and (overlay-get overlay property)
-                 (>= (overlay-start overlay) beg)
-                 (<= (overlay-end overlay) end))
-            (setq found overlay)
-          (setq overlays (cdr overlays)))))
-    found))
-
-(defun iedit-cleanup-occurrences-overlays (beg end &optional inclusive)
-  "Remove deleted overlays from list `iedit-occurrences-overlays'."
-  (if inclusive
-      (remove-overlays beg end iedit-occurrence-overlay-name t)
-    (remove-overlays (point-min) beg iedit-occurrence-overlay-name t)
-    (remove-overlays end (point-max) iedit-occurrence-overlay-name t))
-  (let (overlays)
-    (dolist (overlay iedit-occurrences-overlays)
-      (if (overlay-buffer overlay)
-          (push overlay overlays)))
-    (setq iedit-occurrences-overlays overlays)))
-
-(defun iedit-printable (string)
-  "Return a omitted substring that is not longer than 50.
-STRING is already `regexp-quote'ed"
-  (let ((first-newline-index (string-match "$" string))
-        (length (length string)))
-    (if (and first-newline-index
-             (/= first-newline-index length))
-        (if (< first-newline-index 50)
-            (concat (substring string 0 first-newline-index) "...")
-          (concat (substring string 0 50) "..."))
-      (if (> length 50)
-          (concat (substring string 0 50) "...")
-        string))))
-
-(defun iedit-char-at-bol (&optional N)
-  "Get char position of the beginning of the current line. If `N'
-is given, move forward (or backward) that many lines (using
-`forward-line') and get the char position at the beginning of
-that line."
-  (save-excursion
-    (forward-line (if N N 0))
-    (point)))
-
-(defun iedit-char-at-eol (&optional N)
-  "Get char position of the end of the current line. If `N' is
-given, move forward (or backward) that many lines (using
-`forward-line') and get the char position at the end of that
-line."
-  (save-excursion
-    (forward-line (if N N 0))
-    (end-of-line)
-    (point)))
-
-(defun iedit-region-active ()
-  "Return t if region is active and not empty.
-If variable `iedit-transient-mark-sensitive' is t, active region
-means `transient-mark-mode' is on and mark is active. Otherwise,
-it just means mark is active."
-  (and (if iedit-transient-mark-sensitive
-           transient-mark-mode
-         t)
-       mark-active (not (equal (mark) (point)))))
-
-(defun iedit-barf-if-lib-active()
-  "Signal error if Iedit lib is active."
-  (or (and (null iedit-occurrences-overlays)
-           (null iedit-read-only-occurrences-overlays))
-      (error "Iedit lib is active")))
-
-(defun iedit-barf-if-buffering()
-  "Signal error if Iedit lib is buffering."
-  (or  (null iedit-buffering)
-      (error "Iedit is buffering")))
-
-(provide 'iedit-lib)
-
-;;; iedit-lib.el ends here
-
-;;  LocalWords:  iedit el MERCHANTABILITY kbd isearch todo ert Lindberg Tassilo
-;;  LocalWords:  eval rect defgroup defcustom boolean defvar assq alist nconc
-;;  LocalWords:  substring cadr keymap defconst purecopy bkm defun princ prev
-;;  LocalWords:  iso lefttab backtab upcase downcase concat setq autoload arg
-;;  LocalWords:  refactoring propertize cond goto nreverse progn rotatef eq elp
-;;  LocalWords:  dolist pos unmatch args ov sReplace iedit's cdr quote'ed
diff --git a/.emacs.d/elisp/iedit/iedit-rect.el b/.emacs.d/elisp/iedit/iedit-rect.el
deleted file mode 100644 (file)
index 112902b..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-;;; iedit-rect.el --- visible rectangle editing support based on Iedit.
-
-;; Copyright (C) 2010, 2011, 2012 Victor Ren
-
-;; Time-stamp: <2013-10-21 16:15:25 Victor Ren>
-;; Author: Victor Ren <victorhge@gmail.com>
-;; Keywords: occurrence region simultaneous rectangle refactoring
-;; Version: 0.97
-;; X-URL: http://www.emacswiki.org/emacs/Iedit
-;; Compatibility: GNU Emacs: 22.x, 23.x, 24.x
-
-;; This file is not part of GNU Emacs, but it is distributed under
-;; the same terms as GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This package also provides rectangle support with *visible rectangle*
-;; highlighting, which is similar with cua-mode rectangle support. But it is
-;; lighter weight and uses iedit mechanisms.
-
-;; The code was developed and fully tested on Gnu Emacs 24.0.93, partially
-;; tested on Gnu Emacs 22. If you have any compatible problem, please let me
-;; know.
-
-;;; todo:
-;; - Add restrict function back
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-(require 'rect) ;; kill-rectangle
-(require 'iedit-lib)
-
-(defvar iedit-rectangle-mode nil) ;; Name of the minor mode
-
-(make-variable-buffer-local 'iedit-rectangle-mode)
-(or (assq 'iedit-rectangle-mode minor-mode-alist)
-    (nconc minor-mode-alist
-           (list '(iedit-rectangle-mode iedit-rectangle-mode))))
-
-
-;;; Default key bindings:
-(define-key ctl-x-r-map [return] 'iedit-rectangle-mode)
-
-(defvar iedit-rectangle nil
-  "This buffer local variable which is the rectangle geometry if
-current mode is iedit-rect. Otherwise it is nil.
-\(car iedit-rectangle) is the top-left corner and
-\(cadr iedit-rectangle) is the bottom-right corner" )
-
-(make-variable-buffer-local 'iedit-rectangle)
-
-;;; Define Iedit rect mode map
-(defvar iedit-rect-keymap
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map iedit-occurrence-keymap-default)
-    (define-key map (kbd "M-K") 'iedit-kill-rectangle)
-    map)
-  "Keymap used within overlays in Iedit-rect mode.")
-
-(or (assq 'iedit-rectangle-mode minor-mode-map-alist)
-    (setq minor-mode-map-alist
-          (cons (cons 'iedit-rectangle-mode iedit-lib-keymap) minor-mode-map-alist)))
-
-
-;; Avoid to restore Iedit-rect mode when restoring desktop
-(add-to-list 'desktop-minor-mode-handlers
-             '(iedit-rectangle-mode . nil))
-
-;;;###autoload
-(defun iedit-rectangle-mode (&optional beg end)
-  "Toggle Iedit-rect mode.
-
-When Iedit-rect mode is on, a rectangle is started with visible
-rectangle highlighting.  Rectangle editing support is based on
-Iedit mechanism.
-
-Commands:
-\\{iedit-rect-keymap}"
-  (interactive (when (iedit-region-active)
-                 (list (region-beginning)
-                       (region-end))))
-
-  ;; enforce skip modification once, errors may happen to cause this to be
-  ;; unset.
-  (setq iedit-skip-modification-once t)
-  (if iedit-rectangle-mode
-      (iedit-rectangle-done)
-    (iedit-barf-if-lib-active)
-    (if (and beg end)
-        (progn (setq mark-active nil)
-               (run-hooks 'deactivate-mark-hook)
-               (iedit-rectangle-start beg end))
-      (error "no region available."))))
-
-(defun iedit-rectangle-start (beg end)
-  "Start Iedit mode for the region as a rectangle."
-  (barf-if-buffer-read-only)
-  (setq beg (copy-marker beg))
-  (setq end (copy-marker end t))
-  (setq iedit-occurrences-overlays nil)
-  (setq iedit-initial-string-local nil)
-  (setq iedit-occurrence-keymap iedit-rect-keymap)
-  (save-excursion
-    (let ((beg-col (progn (goto-char beg) (current-column)))
-          (end-col (progn (goto-char end) (current-column))))
-      (when (< end-col beg-col)
-        (rotatef beg-col end-col))
-      (goto-char beg)
-      (while
-          (progn
-            (push (iedit-make-occurrence-overlay
-                   (progn
-                     (move-to-column beg-col t)
-                     (point))
-                   (progn
-                     (move-to-column end-col t)
-                     (point)))
-                  iedit-occurrences-overlays)
-            (and (< (point) end) (forward-line 1))))))
-  (setq iedit-rectangle (list beg end))
-  (setq iedit-rectangle-mode
-        (propertize
-         (concat " Iedit-rect:"
-                 (number-to-string (length iedit-occurrences-overlays)))
-         'face
-         'font-lock-warning-face))
-  (force-mode-line-update)
-  (add-hook 'kbd-macro-termination-hook 'iedit-rectangle-done nil t)
-  (add-hook 'change-major-mode-hook 'iedit-rectangle-done nil t)
-  (add-hook 'iedit-aborting-hook 'iedit-rectangle-done nil t))
-
-(defun iedit-rectangle-done ()
-  "Exit Iedit mode.
-Save the current occurrence string locally and globally.  Save
-the initial string globally."
-  (when iedit-buffering
-      (iedit-stop-buffering))
-  (iedit-cleanup)
-  (setq iedit-rectangle-mode nil)
-  (force-mode-line-update)
-  (remove-hook 'kbd-macro-termination-hook 'iedit-rectangle-done t)
-  (remove-hook 'change-major-mode-hook 'iedit-rectangle-done t)
-  (remove-hook 'iedit-aborting-hook 'iedit-rectangle-done t))
-
-(defun iedit-kill-rectangle(&optional fill)
-  "Kill the rectangle.
-The behavior is the same as `kill-rectangle' in rect mode."
-  (interactive "*P")
-  (or (and iedit-rectangle (iedit-same-column))
-      (error "Not a rectangle"))
-  (let ((inhibit-modification-hooks t))
-    (kill-rectangle (marker-position (car iedit-rectangle))
-                    (marker-position (cadr iedit-rectangle)) fill)))
-
-(provide 'iedit-rect)
-
-;;; iedit-rect.el ends here
-
-;;  LocalWords:  iedit el MERCHANTABILITY kbd isearch todo ert Lindberg Tassilo
-;;  LocalWords:  eval rect defgroup defcustom boolean defvar assq alist nconc
-;;  LocalWords:  substring cadr keymap defconst purecopy bkm defun princ prev
-;;  LocalWords:  iso lefttab backtab upcase downcase concat setq autoload arg
-;;  LocalWords:  refactoring propertize cond goto nreverse progn rotatef eq elp
-;;  LocalWords:  dolist pos unmatch args ov sReplace iedit's cdr quote'ed
diff --git a/.emacs.d/elisp/iedit/iedit.el b/.emacs.d/elisp/iedit/iedit.el
deleted file mode 100644 (file)
index c71eee3..0000000
+++ /dev/null
@@ -1,633 +0,0 @@
-;;; iedit.el --- Edit multiple regions in the same way simultaneously.
-
-;; Copyright (C) 2010, 2011, 2012 Victor Ren
-
-;; Time-stamp: <2013-10-07 11:26:05 Victor Ren>
-;; Author: Victor Ren <victorhge@gmail.com>
-;; Keywords: occurrence region simultaneous refactoring
-;; Version: 0.97
-;; X-URL: http://www.emacswiki.org/emacs/Iedit
-;; Compatibility: GNU Emacs: 22.x, 23.x, 24.x
-
-;; This file is not part of GNU Emacs, but it is distributed under
-;; the same terms as GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This package is an Emacs minor mode and allows you to edit one occurrence of
-;; some text in a buffer (possibly narrowed) or region, and simultaneously have
-;; other occurrences edited in the same way.
-;;
-;; Normal scenario of iedit-mode is like:
-;;
-;; - Highlight certain contents - by press C-; (The default binding)
-;;   All occurrences of a symbol, string in the buffer or a region may be
-;;   highlighted corresponding to current mark, point and prefix argument.
-;;   Refer to the document of `iedit-mode' for details.
-;;
-;; - Edit one of the occurrences
-;;   The change is applied to other occurrences simultaneously.
-;;
-;; - Finish - by pressing C-; again
-;;
-;; You can also use Iedit mode as a quick way to temporarily show only the
-;; buffer lines that match the current text being edited.  This gives you the
-;; effect of a temporary `keep-lines' or `occur'.  To get this effect, hit C-'
-;; when in Iedit mode - it toggles hiding non-matching lines.
-;;
-;; Renaming refactoring is convenient in Iedit mode
-;;
-;; - The symbol under point is selected as occurrence by default and only
-;;   complete symbols are matched
-;; - With digit prefix argument 0, only symbols in current function are matched
-;; - Restricting symbols in current region can be done by pressing C-; again
-;; - Last renaming refactoring is remembered and can be applied to other buffers
-;;   later
-;;
-;; There are also some other facilities you may never think about.  Refer to the
-;; document of function `iedit-mode' (C-h f iedit-mode RET) for more details.
-
-;; The code was developed and fully tested on Gnu Emacs 24.0.93, partially
-;; tested on Gnu Emacs 22. If you have any compatible problem, please let me
-;; know.
-
-;;; todo:
-;; - Add more easy access keys for whole occurrence
-
-;;; Contributors
-;; Adam Lindberg <eproxus@gmail.com> added a case sensitivity option that can be toggled.
-
-;; Tassilo Horn <tassilo@member.fsf.org> added an option to match only complete
-;; words, not inside words
-
-;; Le Wang <l26wang@gmail.com> proposed to match only complete symbols,  not
-;; inside symbols, contributed rectangle support
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-(require 'iedit-lib)
-
-(defcustom iedit-current-symbol-default t
-  "If no-nil, use current symbol by default for the occurrence."
-  :type 'boolean
-  :group 'iedit)
-
-(defcustom iedit-only-at-symbol-boundaries t
-  "If no-nil, matches have to start and end at symbol boundaries.
-For example, when invoking command `iedit-mode' on the \"in\" in the
-  sentence \"The king in the castle...\", the \"king\" is not
-  edited."
-  :type 'boolean
-  :group 'iedit)
-
-(defcustom iedit-toggle-key-default (kbd "C-;")
-  "If no-nil, the key is inserted into global-map, isearch-mode-map, esc-map and help-map."
-  :type 'vector
-  :group 'iedit)
-
-(defvar iedit-mode-hook nil
-  "Function(s) to call after starting up an iedit.")
-
-(defvar iedit-mode-end-hook nil
-  "Function(s) to call after terminating an iedit.")
-
-(defvar iedit-mode nil) ;; Name of the minor mode
-
-(defvar iedit-only-complete-symbol-local nil
-  "This is buffer local variable which indicates the occurrence
-only matches complete symbol.")
-
-(defvar iedit-only-complete-symbol-global nil
-  "This is global variable which indicates the last global occurrence
-only matches complete symbol.")
-
-(defvar iedit-last-occurrence-local nil
-  "This is buffer local variable which is the occurrence when
-Iedit mode is turned off last time.")
-
-(defvar iedit-last-occurrence-global nil
-  "This is global variable which is the occurrence when
-Iedit mode is turned off last time.")
-
-(defvar iedit-last-initial-string-global nil
-  "This is a global variable which is the last initial occurrence string.")
-
-(defvar iedit-initial-string-local nil
-  "This is buffer local variable which is the initial string to start Iedit mode.")
-(defvar iedit-initial-region nil
-  "This is buffer local variable which is the initial region
-where Iedit mode is started from.")
-
-(defvar iedit-num-lines-to-expand-up 0
-  "This is a global variable indicating how many lines up from
-point should be included in the replacement region.")
-
-(defvar iedit-num-lines-to-expand-down 0
-  "This is a global variable indicating how many lines down from
-point should be included in the replacement region.")
-
-(defvar iedit-current-symbol '(lambda () (current-word t))
-  "This is a function which returns a string as occurrence candidate.
-This local buffer varialbe can be configured in some modes.
-An example of how to use this variable: todo")
-
-(make-variable-buffer-local 'iedit-mode)
-(make-variable-buffer-local 'iedit-only-complete-symbol-local)
-(make-variable-buffer-local 'iedit-last-occurrence-local)
-(make-variable-buffer-local 'iedit-initial-string-local)
-(make-variable-buffer-local 'iedit-initial-region)
-(make-variable-buffer-local 'iedit-current-symbol)
-
-(or (assq 'iedit-mode minor-mode-alist)
-    (nconc minor-mode-alist
-           (list '(iedit-mode iedit-mode))))
-
-;;; Define iedit help map.
-(eval-when-compile (require 'help-macro))
-
-(defvar iedit-help-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (char-to-string help-char) 'iedit-help-for-help)
-    (define-key map [help] 'iedit-help-for-help)
-    (define-key map [f1] 'iedit-help-for-help)
-    (define-key map "?" 'iedit-help-for-help)
-    (define-key map "b" 'iedit-describe-bindings)
-    (define-key map "k" 'iedit-describe-key)
-    (define-key map "m" 'iedit-describe-mode)
-    (define-key map "q" 'help-quit)
-    map)
-  "Keymap for characters following the Help key for Iedit mode.")
-
-(make-help-screen
- iedit-help-for-help-internal
- (purecopy "Type a help option: [bkm] or ?")
- "You have typed %THIS-KEY%, the help character.  Type a Help option:
-\(Type \\<help-map>\\[help-quit] to exit the Help command.)
-
-b           Display all Iedit key bindings.
-k KEYS      Display full documentation of Iedit key sequence.
-m           Display documentation of Iedit mode.
-
-You can't type here other help keys available in the global help map,
-but outside of this help window when you type them in Iedit mode,
-they exit Iedit mode before displaying global help."
- iedit-help-map)
-
-(defun iedit-help-for-help ()
-  "Display Iedit help menu."
-  (interactive)
-  (let (same-window-buffer-names same-window-regexps)
-    (iedit-help-for-help-internal)))
-
-(defun iedit-describe-bindings ()
-  "Show a list of all keys defined in Iedit mode, and their definitions.
-This is like `describe-bindings', but displays only Iedit keys."
-  (interactive)
-  (let (same-window-buffer-names
-        same-window-regexps
-        (keymap (substitute-command-keys "\\{iedit-mode-keymap}\\{iedit-mode-occurrence-keymap}")))
-    (with-help-window "*Help*"
-      (with-current-buffer standard-output
-        (princ "Iedit Mode Bindings: ")
-        (princ keymap)))))
-
-(defun iedit-describe-key ()
-  "Display documentation of the function invoked by Iedit mode key."
-  (interactive)
-  (let (same-window-buffer-names same-window-regexps)
-    (call-interactively 'describe-key)))
-
-(defun iedit-describe-mode ()
-  "Display documentation of Iedit mode."
-  (interactive)
-  (let (same-window-buffer-names same-window-regexps)
-    (describe-function 'iedit-mode)))
-
-;;; Default key bindings:
-(when iedit-toggle-key-default
-  (define-key global-map iedit-toggle-key-default 'iedit-mode)
-  (define-key isearch-mode-map iedit-toggle-key-default 'iedit-mode-from-isearch)
-  (define-key esc-map iedit-toggle-key-default 'iedit-execute-last-modification)
-  (define-key help-map iedit-toggle-key-default 'iedit-mode-toggle-on-function))
-
-;; Avoid to restore Iedit mode when restoring desktop
-(add-to-list 'desktop-minor-mode-handlers
-             '(iedit-mode . nil))
-
-;;; Define iedit help map.
-(eval-when-compile (require 'help-macro))
-
-(defvar iedit-mode-occurrence-keymap
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map iedit-occurrence-keymap-default)
-    (define-key map (kbd "M-H") 'iedit-restrict-function)
-    (define-key map (kbd "M-I") 'iedit-restrict-current-line)
-    (define-key map (kbd "M-{") 'iedit-expand-up-a-line)
-    (define-key map (kbd "M-}") 'iedit-expand-down-a-line)
-    (define-key map (kbd "M-G") 'iedit-apply-global-modification)
-    (define-key map (kbd "M-C") 'iedit-toggle-case-sensitive)
-    map)
-  "Keymap used within overlays in Iedit mode.")
-
-(defvar iedit-mode-keymap
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map iedit-lib-keymap)
-    (define-key map (char-to-string help-char) iedit-help-map)
-    (define-key map [help] iedit-help-map)
-    (define-key map [f1] iedit-help-map)
-    (define-key map (kbd "M-;") 'iedit-toggle-selection)
-    map)
-  "Keymap used while Iedit mode is enabled.")
-
-;;; Define Iedit mode map
-(or (assq 'iedit-mode minor-mode-map-alist)
-    (setq minor-mode-map-alist
-          (cons (cons 'iedit-mode iedit-mode-keymap) minor-mode-map-alist)))
-
-;; Avoid to restore Iedit mode when restoring desktop
-(add-to-list 'desktop-minor-mode-handlers
-             '(iedit-mode . nil))
-
-;;;###autoload
-(defun iedit-mode (&optional arg)
-  "Toggle Iedit mode.
-This command behaves differently, depending on the mark, point,
-prefix argument and variable `iedit-transient-mark-sensitive'.
-
-If Iedit mode is off, turn Iedit mode on.
-
-When Iedit mode is turned on, all the occurrences of the current
-region in the buffer (possibly narrowed) or a region are
-highlighted.  If one occurrence is modified, the change are
-propagated to all other occurrences simultaneously.
-
-If region is not active, the current symbol (returns from
-`iedit-current-symbol') is used as the occurrence by default.
-The occurrences of the current symbol, but not include
-occurrences that are part of other symbols, are highlighted.  If
-you still want to match all the occurrences, even though they are
-parts of other symbols, you may have to mark the symbol first.
-
-In the above two situations, with digit prefix argument 0, only
-occurrences in current function are matched.  This is good for
-renaming refactoring in programming.
-
-You can also switch to Iedit mode from isearch mode directly. The
-current search string is used as occurrence.  All occurrences of
-the current search string are highlighted.
-
-With an universal prefix argument, the occurrence when Iedit mode
-is turned off last time in current buffer is used as occurrence.
-This is intended to recover last Iedit mode which is turned off.
-If region active, Iedit mode is limited within the current
-region.
-
-With repeated universal prefix argument, the occurrence when
-Iedit mode is turned off last time (might be in other buffer) is
-used as occurrence.  If region active, Iedit mode is limited
-within the current region.
-
-If Iedit mode is on and region is active, Iedit mode is
-restricted in the region, e.g. the occurrences outside of the
-region is excluded.
-
-If Iedit mode is on and region is active, with an universal
-prefix argument, Iedit mode is restricted outside of the region,
-e.g. the occurrences in the region is excluded.
-
-Turn off Iedit mode in other situations.
-
-Commands:
-\\{iedit-mode-keymap}
-Keymap used within overlays:
-\\{iedit-mode-occurrence-keymap}"
-  (interactive "P")
-  (if iedit-mode
-      (progn
-        (iedit-mode-on-action arg)
-        (setq iedit-only-complete-symbol-global iedit-only-complete-symbol-local))
-    (iedit-barf-if-lib-active)
-    (let (occurrence
-          complete-symbol
-          (beg (if (eq major-mode 'occur-edit-mode) ; skip the first occurrence
-                   (next-single-char-property-change 1 'read-only)
-                 (point-min)))
-          (end (point-max)))
-      (cond ((and arg
-                  (= 4 (prefix-numeric-value arg))
-                  iedit-last-occurrence-local)
-             (setq occurrence iedit-last-occurrence-local)
-             (setq complete-symbol iedit-only-complete-symbol-local))
-            ((and arg
-                  (= 16 (prefix-numeric-value arg))
-                  iedit-last-initial-string-global)
-             (setq occurrence iedit-last-initial-string-global)
-             (setq complete-symbol iedit-only-complete-symbol-global))
-            ((iedit-region-active)
-             (setq occurrence  (buffer-substring-no-properties
-                                (mark) (point))))
-            ((and iedit-current-symbol-default
-                  (setq occurrence (funcall iedit-current-symbol)))
-             (when iedit-only-at-symbol-boundaries
-               (setq complete-symbol t)))
-            (t (error "No candidate of the occurrence, cannot enable Iedit mode")))
-      (when arg
-        (if (= 0 (prefix-numeric-value arg))
-            (save-excursion
-              (mark-defun)
-              (setq beg (region-beginning))
-              (setq end (region-end)))
-          (when (iedit-region-active)
-            (setq beg (region-beginning))
-            (setq end (region-end)))))
-      (setq iedit-only-complete-symbol-local complete-symbol)
-      (setq mark-active nil)
-      (run-hooks 'deactivate-mark-hook)
-      (setq iedit-initial-string-local occurrence)
-      (iedit-start (iedit-regexp-quote occurrence) beg end))))
-
-(defun iedit-mode-from-isearch (regexp)
-  "Start Iedit mode using last search string as the regexp."
-  (interactive
-   (let ((regexp (cond
-                  ((functionp isearch-word)
-                   (funcall isearch-word isearch-string))
-                  (isearch-word (word-search-regexp isearch-string))
-                  (isearch-regexp isearch-string)
-                  (t (regexp-quote isearch-string)))))
-     (list regexp)))
-  (or isearch-success
-      (error "No match" ))
-  (if (or isearch-regexp isearch-word)
-      nil
-    (setq iedit-initial-string-local isearch-string))
-  (let ((iedit-case-sensitive (not isearch-case-fold-search)))
-    (isearch-exit)
-    (setq mark-active nil)
-    (run-hooks 'deactivate-mark-hook)
-    (when iedit-mode
-      (iedit-cleanup))
-    (iedit-start regexp (point-min) (point-max))
-    ;; TODO: reconsider how to avoid the loop in iedit-same-length
-    (cond ((not iedit-occurrences-overlays)
-           (message "No matches found")
-           (iedit-done))
-          ((not (iedit-same-length))
-           (message "Matches are not the same length.")
-           (iedit-done)))))
-
-(defun iedit-start (occurrence-regexp beg end)
-  "Start Iedit mode for the `occurrence-regexp' in the current buffer."
-
-  ;; enforce skip modification once, errors may happen to cause this to be
-  ;; unset.
-  (setq iedit-skip-modification-once t)
-  (setq iedit-unmatched-lines-invisible iedit-unmatched-lines-invisible-default)
-  (setq iedit-initial-region (list beg end))
-  (message "%d matches for \"%s\""
-           (iedit-start2 occurrence-regexp beg end)
-           (iedit-printable occurrence-regexp))
-  (run-hooks 'iedit-mode-hook)
-  (add-hook 'kbd-macro-termination-hook 'iedit-done nil t)
-  (add-hook 'change-major-mode-hook 'iedit-done nil t)
-  (add-hook 'iedit-aborting-hook 'iedit-done nil t))
-
-(defun iedit-regexp-quote (exp)
-  "Return a regexp string."
-  (if iedit-only-complete-symbol-local
-      (concat "\\_<" (regexp-quote exp) "\\_>")
-    (regexp-quote exp)))
-
-(defun iedit-start2 (occurrence-regexp beg end)
-  "Refresh Iedit mode."
-  (setq iedit-occurrence-keymap iedit-mode-occurrence-keymap)
-  (let ((counter(iedit-make-occurrences-overlays occurrence-regexp beg end)))
-    (setq iedit-mode
-          (propertize
-           (concat " Iedit:" (number-to-string counter))
-           'face
-           'font-lock-warning-face))
-    (force-mode-line-update)
-    counter))
-
-(defun iedit-done ()
-  "Exit Iedit mode.
-Save the current occurrence string locally and globally.  Save
-the initial string globally."
-  (when iedit-buffering
-      (iedit-stop-buffering))
-  (setq iedit-last-occurrence-local (iedit-current-occurrence-string))
-  (setq iedit-last-occurrence-global iedit-last-occurrence-local)
-  (setq iedit-last-initial-string-global iedit-initial-string-local)
-  (if iedit-last-occurrence-local
-      (kill-new iedit-last-occurrence-local)) ; Make occurrence the latest kill in the kill ring.
-  (setq iedit-num-lines-to-expand-up 0)
-  (setq iedit-num-lines-to-expand-down 0)
-
-  (iedit-cleanup)
-
-  (setq iedit-initial-string-local nil)
-  (setq iedit-mode nil)
-  (force-mode-line-update)
-  (remove-hook 'kbd-macro-termination-hook 'iedit-done t)
-  (remove-hook 'change-major-mode-hook 'iedit-done t)
-  (remove-hook 'iedit-aborting-hook 'iedit-done t)
-  (run-hooks 'iedit-mode-end-hook))
-
-(defun iedit-mode-on-action (&optional arg)
-  "Turn off Iedit mode or restrict it in a region if region is active."
-  (if (iedit-region-active)
-      ;; Restrict iedit-mode
-      (let ((beg (region-beginning))
-            (end (region-end)))
-        (if (null (iedit-find-overlay beg end 'iedit-occurrence-overlay-name arg))
-            (iedit-done)
-          (iedit-restrict-region beg end arg)))
-    (iedit-done)))
-
-
-;;;###autoload
-(defun iedit-mode-toggle-on-function ()
-  "Toggle Iedit mode on current function."
-  (interactive)
-  (iedit-mode 0))
-
-(defun iedit-execute-last-modification (&optional arg)
-  "Apply last modification in Iedit mode to the current buffer or an active region."
-  (interactive "*P")
-  (or (and iedit-last-initial-string-global
-           (not (string= iedit-last-initial-string-global iedit-last-occurrence-global)))
-      (error "No modification available"))
-  (let ((occurrence-exp (regexp-quote iedit-last-initial-string-global))
-        (replacement  iedit-last-occurrence-global)
-        (case-fold-search (not iedit-case-sensitive))
-        beg end)
-    (when case-fold-search
-      (setq occurrence-exp (downcase occurrence-exp))
-      (setq replacement (downcase replacement)))
-    (if iedit-only-complete-symbol-global
-        (setq occurrence-exp (concat "\\_<"  occurrence-exp "\\_>")))
-    (when (iedit-region-active)
-      (setq beg (region-beginning))
-      (setq end (region-end)))
-    (perform-replace occurrence-exp replacement t t nil nil nil beg end)))
-
-(defun iedit-apply-global-modification ()
-  "Apply last global modification."
-  (interactive "*")
-  (if (and iedit-last-initial-string-global
-           (string= iedit-initial-string-local iedit-last-initial-string-global)
-           (not (string= iedit-last-initial-string-global iedit-last-occurrence-global)))
-      (iedit-replace-occurrences iedit-last-occurrence-global)
-    (message "No global modification available.")))
-
-(defun iedit-toggle-selection ()
-  "Select or deselect the occurrence under point."
-  (interactive)
-  (iedit-barf-if-buffering)
-  (let ((ov (iedit-find-current-occurrence-overlay)))
-    (if ov
-        (iedit-restrict-region (overlay-start ov) (overlay-end ov) t)
-      (let ((current-occurrence-string (iedit-current-occurrence-string)))
-        (when (not (null current-occurrence-string))
-          (save-excursion
-            (goto-char (if (> (point) (length current-occurrence-string))
-                           ( - (point) (length current-occurrence-string))
-                         (point-min)))
-            (iedit-add-next-occurrence-overlay
-             (iedit-regexp-quote current-occurrence-string)))
-          (setq iedit-mode (propertize
-                            (concat " Iedit:" (number-to-string
-                                               (length iedit-occurrences-overlays)))
-                            'face 'font-lock-warning-face))
-          (force-mode-line-update))))))
-
-(defun iedit-restrict-function(&optional arg)
-  "Restricting Iedit mode in current function."
-  (interactive "P")
-  (save-excursion
-    (mark-defun)
-    (iedit-restrict-region (region-beginning) (region-end) arg))
-  (message "Restricted in current function, %d matches."
-           (length iedit-occurrences-overlays)))
-
-(defun iedit-restrict-current-line ()
-  "Restrict Iedit mode to current line."
-  (interactive)
-  (iedit-restrict-region (iedit-char-at-bol) (iedit-char-at-eol))
-  (message "Restricted to current line, %d match%s."
-           (length iedit-occurrences-overlays)
-           (if (= 1 (length iedit-occurrences-overlays)) "" "es")))
-
-(defun iedit-expand-by-a-line (where amount)
-  "After restricting iedit to the current line with
-`iedit-restrict-current-line', this function expands the top or
-bottom of the search region upwards or downwards by `amount'
-lines. The region being acted upon is controlled with
-`where' ('top to act on the top, anything else for the
-bottom). With a prefix, collapses the top or bottom of the search
-region by `amount' lines."
-  (interactive "P")
-  ;; Since iedit-done resets iedit-num-lines-to-expand-{down,up}, we
-  ;; have to hang on to them in tmp variables
-  (let ((tmp-up iedit-num-lines-to-expand-up)
-        (tmp-down iedit-num-lines-to-expand-down)
-        ;; we want to call iedit-mode with a universal prefix arg
-        (current-prefix-arg '(4)))
-    (iedit-done)
-    (call-interactively 'iedit-mode)
-    (setq iedit-num-lines-to-expand-up tmp-up)
-    (setq iedit-num-lines-to-expand-down tmp-down)
-    (if (eq where 'top)
-        (setq iedit-num-lines-to-expand-up (max 0
-                                                (+ amount iedit-num-lines-to-expand-up)))
-      (setq iedit-num-lines-to-expand-down (max 0
-                                                (+ amount iedit-num-lines-to-expand-down))))
-    (iedit-restrict-region (iedit-char-at-bol (- iedit-num-lines-to-expand-up))
-                           (iedit-char-at-eol iedit-num-lines-to-expand-down))
-    (message "Now looking -%d/+%d lines around current line, %d match%s."
-             iedit-num-lines-to-expand-up
-             iedit-num-lines-to-expand-down
-             (length iedit-occurrences-overlays)
-             (if (= 1 (length iedit-occurrences-overlays)) "" "es"))))
-
-(defun iedit-expand-up-a-line (&optional arg)
-  "After restricting iedit to the current line with
-`iedit-restrict-current-line', this function expands the search
-region upwards by one line. With a prefix, bring the top of the
-region back down one line."
-  (interactive "P")
-  (iedit-expand-by-a-line 'top
-                          (if arg -1 1)))
-
-(defun iedit-expand-down-a-line (&optional arg)
-  "After restricting iedit to the current line with
-`iedit-restrict-current-line', this function expands the search
-region downwards by one line. With a prefix, bring the bottom of
-the region back up one line."
-  (interactive "P")
-  (iedit-expand-by-a-line 'bottom
-                          (if arg -1 1)))
-
-(defun iedit-restrict-region (beg end &optional inclusive)
-  "Restricting Iedit mode in a region."
-  (when iedit-buffering
-    (iedit-stop-buffering))
-  (setq iedit-last-occurrence-local (iedit-current-occurrence-string))
-  (setq mark-active nil)
-  (run-hooks 'deactivate-mark-hook)
-  (iedit-show-all)
-  (iedit-cleanup-occurrences-overlays beg end inclusive)
-  (if iedit-unmatched-lines-invisible
-      (iedit-hide-unmatched-lines iedit-occurrence-context-lines))
-  (setq iedit-mode (propertize
-                    (concat " Iedit:" (number-to-string
-                                       (length iedit-occurrences-overlays)))
-                    'face 'font-lock-warning-face))
-  (force-mode-line-update))
-
-(defun iedit-toggle-case-sensitive ()
-  "Toggle case-sensitive matching occurrences. "
-  (interactive)
-  (setq iedit-case-sensitive (not iedit-case-sensitive))
-  (if iedit-buffering
-      (iedit-stop-buffering))
-  (setq iedit-last-occurrence-local (iedit-current-occurrence-string))
-  (when iedit-last-occurrence-local
-    (remove-overlays nil nil iedit-occurrence-overlay-name t)
-    (iedit-show-all)
-    (let* ((occurrence-regexp (iedit-regexp-quote iedit-last-occurrence-local))
-           (begin (car iedit-initial-region))
-           (end (cadr iedit-initial-region))
-           (counter (iedit-start2 occurrence-regexp begin end)))
-      (message "iedit %s. %d matches for \"%s\""
-               (if iedit-case-sensitive
-                   "is case sensitive"
-                 "ignores case")
-               counter
-               (iedit-printable occurrence-regexp)))))
-
-(provide 'iedit)
-
-;;; iedit.el ends here
-
-;;  LocalWords:  iedit el MERCHANTABILITY kbd isearch todo ert Lindberg Tassilo
-;;  LocalWords:  eval defgroup defcustom boolean defvar assq alist nconc
-;;  LocalWords:  substring cadr keymap defconst purecopy bkm defun princ prev
-;;  LocalWords:  iso lefttab backtab upcase downcase concat setq autoload arg
-;;  LocalWords:  refactoring propertize cond goto nreverse progn rotatef eq elp
-;;  LocalWords:  dolist pos unmatch args ov sReplace iedit's cdr quote'ed
diff --git a/.emacs.d/elisp/nose/nose-autoloads.el b/.emacs.d/elisp/nose/nose-autoloads.el
deleted file mode 100644 (file)
index 7a809ba..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;;; nose-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
-\f
-;;;### (autoloads nil nil ("nose.el") (21286 757 628377 968000))
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; nose-autoloads.el ends here
diff --git a/.emacs.d/elisp/nose/nose.el b/.emacs.d/elisp/nose/nose.el
deleted file mode 100644 (file)
index 1894e9c..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-;;; nose.el --- Easy Python test running in Emacs
-
-;; Copyright (C) 2009 Jason Pellerin, Augie Fackler
-
-;; Licensed under the same terms as Emacs.
-
-;; Version: 20140228.650
-;; X-Original-Version: 0.1.1
-;; Keywords: nose python testing
-;; Created: 04 Apr 2009
-
-;; This file is NOT part of GNU Emacs.
-
-;; Licensed under the same terms as Emacs.
-
-;;; Commentary:
-;; This gives a bunch of functions that handle running nosetests on a
-;; particular buffer or part of a buffer.
-
-;;; Installation
-
-;; In your emacs config:
-;;
-;; (require 'nose)
-;; ; next line only for people with non-eco non-global test runners
-;; ; (add-to-list 'nose-project-names "my/crazy/runner")
-
-;; Note that if your global nose isn't called "nosetests", then you'll want to
-;; redefine nose-global-name to be the command that should be used.
-
-;; By default, the root of a project is found by looking for any of the files
-;; 'setup.py', '.hg' and '.git'. You can add files to check for to the file
-;; list:
-;;
-;; ; (add-to-list 'nose-project-root-files "something")
-
-;; or you can change the project root test to detect in some other way
-;; whether a directory is the project root:
-;;
-;; ; (setq nose-project-root-test (lambda (dirname) (equal dirname "foo")))
-
-;; If you want dots as output, rather than the verbose output:
-;; (defvar nose-use-verbose nil) ; default is t
-
-;; Probably also want some keybindings:
-;; (add-hook 'python-mode-hook
-;;           (lambda ()
-;;             (local-set-key "\C-ca" 'nosetests-all)
-;;             (local-set-key "\C-cm" 'nosetests-module)
-;;             (local-set-key "\C-c." 'nosetests-one)
-;;             (local-set-key "\C-cpa" 'nosetests-pdb-all)
-;;             (local-set-key "\C-cpm" 'nosetests-pdb-module)
-;;             (local-set-key "\C-cp." 'nosetests-pdb-one)))
-
-(require 'cl) ;; for "reduce"
-
-(defvar nose-project-names '("eco/bin/test"))
-(defvar nose-project-root-files '("setup.py" ".hg" ".git"))
-(defvar nose-project-root-test 'nose-project-root)
-(defvar nose-global-name "nosetests")
-(defvar nose-use-verbose t)
-
-(defun run-nose (&optional tests debug failed)
-  "run nosetests"
-  (let* ((nose (nose-find-test-runner))
-         (where (nose-find-project-root))
-         (args (concat (if debug "--pdb" "")
-                       " "
-                       (if failed "--failed" "")))
-         (tnames (if tests tests "")))
-    (if (not where)
-        (error
-         (format (concat "abort: nosemacs couldn't find a project root, "
-                         "looked for any of %S") nose-project-root-files)))
-    (funcall (if debug
-                 'pdb
-               '(lambda (command)
-                  (let ((compilation-error-regexp-alist
-                         '(("  File \"\\(.*\\)\", line \\([0-9]+\\), in test_" 1 2))))
-                    (compilation-start command
-                                       nil
-                                       (lambda (mode) (concat "*nosetests*"))))))
-             (format
-              (concat "%s "
-                      (if nose-use-verbose "-v " "")
-                      "%s -w %s -c %ssetup.cfg %s")
-              (nose-find-test-runner) args where where tnames)))
-  )
-
-(defun nosetests-all (&optional debug failed)
-  "run all tests"
-  (interactive)
-  (run-nose nil debug failed))
-
-(defun nosetests-failed (&optional debug)
-  (interactive)
-  (nosetests-all debug t))
-
-(defun nosetests-pdb-all ()
-  (interactive)
-  (nosetests-all t))
-
-(defun nosetests-module (&optional debug)
-  "run nosetests (via eggs/bin/test) on current buffer"
-  (interactive)
-  (run-nose buffer-file-name debug))
-
-(defun nosetests-pdb-module ()
-  (interactive)
-  (nosetests-module t))
-
-(defun nosetests-one (&optional debug)
-  "run nosetests (via eggs/bin/test) on testable thing
- at point in current buffer"
-  (interactive)
-  (run-nose (format "%s:%s" buffer-file-name (nose-py-testable)) debug))
-
-(defun nosetests-pdb-one ()
-  (interactive)
-  (nosetests-one t))
-
-(defun nose-find-test-runner ()
-  (message
-   (let ((result
-          (reduce '(lambda (x y) (or x y))
-        (mapcar 'nose-find-test-runner-names nose-project-names))))
-     (if result
-         result
-       nose-global-name))))
-
-(defun nose-find-test-runner-names (runner)
-  "find eggs/bin/test in a parent dir of current buffer's file"
-  (nose-find-test-runner-in-dir-named
-   (file-name-directory buffer-file-name) runner))
-
-(defun nose-find-test-runner-in-dir-named (dn runner)
-  (let ((fn (expand-file-name runner dn)))
-    (cond ((file-regular-p fn) fn)
-      ((equal dn "/") nil)
-      (t (nose-find-test-runner-in-dir-named
-          (file-name-directory (directory-file-name dn))
-          runner)))))
-
-(defun nose-py-testable ()
-  (let* ((inner-obj (inner-testable))
-         (outer (outer-testable))
-         ;; elisp can't return multiple values
-         (outer-def (car outer))
-         (outer-obj (cdr outer)))
-    (cond ((equal outer-def "def") outer-obj)
-          ((equal inner-obj outer-obj) outer-obj)
-          (t (format "%s.%s" outer-obj inner-obj)))))
-
-(defun inner-testable ()
-  (save-excursion
-    (re-search-backward
-     "^ \\{0,4\\}\\(class\\|def\\)[ \t]+\\([a-zA-Z0-9_]+\\)" nil t)
-    (buffer-substring-no-properties (match-beginning 2) (match-end 2))))
-
-(defun outer-testable ()
-  (save-excursion
-    (re-search-backward
-     "^\\(class\\|def\\)[ \t]+\\([a-zA-Z0-9_]+\\)" nil t)
-    (let ((result
-            (buffer-substring-no-properties (match-beginning 2) (match-end 2))))
-
-      (cons
-       (buffer-substring-no-properties (match-beginning 1) (match-end 1))
-       result))))
-
-(defun nose-find-project-root (&optional dirname)
-  (let ((dn
-         (if dirname
-             dirname
-           (file-name-directory buffer-file-name))))
-    (cond ((funcall nose-project-root-test dn) (expand-file-name dn))
-          ((equal (expand-file-name dn) "/") nil)
-        (t (nose-find-project-root
-             (file-name-directory (directory-file-name dn)))))))
-
-(defun nose-project-root (dirname)
-  (reduce '(lambda (x y) (or x y))
-          (mapcar (lambda (d) (member d (directory-files dirname)))
-                  nose-project-root-files)))
-
-(provide 'nose)
-
-;;; nose.el ends here
diff --git a/.emacs.d/elisp/pyvenv/pyvenv-autoloads.el b/.emacs.d/elisp/pyvenv/pyvenv-autoloads.el
deleted file mode 100644 (file)
index 707fa61..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-;;; pyvenv-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))
-\f
-;;;### (autoloads nil "pyvenv" "pyvenv.el" (21286 756 353974 890000))
-;;; Generated autoloads from pyvenv.el
-
-(autoload 'pyvenv-activate "pyvenv" "\
-Activate the virtual environment in DIRECTORY.
-
-\(fn DIRECTORY)" t nil)
-
-(autoload 'pyvenv-deactivate "pyvenv" "\
-Deactivate any current virtual environment.
-
-\(fn)" t nil)
-
-(autoload 'pyvenv-workon "pyvenv" "\
-Activate a virtual environment from $WORKON_HOME.
-
-\(fn NAME)" t nil)
-
-(defvar pyvenv-mode nil "\
-Non-nil if Pyvenv mode is enabled.
-See the command `pyvenv-mode' for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `pyvenv-mode'.")
-
-(custom-autoload 'pyvenv-mode "pyvenv" nil)
-
-(autoload 'pyvenv-mode "pyvenv" "\
-Global minor mode for pyvenv.
-
-Will show the current virtual env in the mode line, and respect a
-`pyvenv-workon' setting in files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'pyvenv-restart-python "pyvenv" "\
-Restart Python inferior processes.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; pyvenv-autoloads.el ends here
diff --git a/.emacs.d/elisp/pyvenv/pyvenv.el b/.emacs.d/elisp/pyvenv/pyvenv.el
deleted file mode 100644 (file)
index 70b2a0b..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-;;; pyvenv.el --- Python virtual environment interface -*- lexical-binding: t -*-
-
-;; Copyright (C) 2013  Jorgen Schaefer <contact@jorgenschaefer.de>
-
-;; Author: Jorgen Schaefer <contact@jorgenschaefer.de>
-;; URL: http://github.com/jorgenschaefer/pyvenv
-;; Version: 20140314.110
-;; X-Original-Version: 1.1
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License
-;; as published by the Free Software Foundation; either version 3
-;; of the License, or (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This is a simple global minor mode which will replicate the changes
-;; done by virtualenv activation inside Emacs.
-
-;; The main entry points are `pyvenv-activate', which queries the user
-;; for a virtual environment directory to activate, and
-;; `pyvenv-workon', which queries for a virtual environment in
-;; $WORKON_HOME (from virtualenvwrapper.sh).
-
-;; If you want your inferior Python processes to be restarted
-;; automatically when you switch your virtual environment, add
-;; `pyvenv-restart-python' to `pyvenv-post-activate-hooks'.
-
-;;; Code:
-
-(require 'json)
-
-;; API for other libraries or user customization.
-
-(defvar pyvenv-virtual-env nil
-  "The current virtual environment.
-
-Do not set this variable directly; use `pyvenv-activate' or
-`pyvenv-workon'.")
-
-(defvar pyvenv-virtual-env-name nil
-  "The name of the current virtual environment.
-
-This is usually the base name of `pyvenv-virtual-env'.")
-
-(defvar pyvenv-pre-activate-hooks nil
-  "Hooks run before a virtual environment is activated.
-
-`pyvenv-virtual-env' is already set.")
-
-(defvar pyvenv-post-activate-hooks nil
-  "Hooks run after a virtual environment is activated.
-
-`pyvenv-virtual-env' is set.")
-
-(defvar pyvenv-pre-deactivate-hooks nil
-  "Hooks run before a virtual environment is deactivated.
-
-`pyvenv-virtual-env' is set.")
-
-(defvar pyvenv-post-deactivate-hooks nil
-  "Hooks run after a virtual environment is deactivated.
-
-`pyvenv-virtual-env' is still set.")
-
-(defvar pyvenv-workon nil
-  "A variable requesting a specific virtualenv.
-
-This is meant to be set in file- or directory-local variables.
-
-When `pyvenv-mode' is enabled, pyvenv will switch to this
-virtualenv. If a virtualenv is already enabled, it will ask first.")
-(put 'pyvenv-workon 'safe-local-variable #'stringp)
-
-(defgroup pyvenv nil
-  "Python Virtual Environment Interface."
-  :prefix "pyvenv-"
-  :group 'languages)
-
-(defcustom pyvenv-mode-line-indicator '(pyvenv-virtual-env-name
-                                        ("[" pyvenv-virtual-env-name "] "))
-  "How `pyvenv-mode' will indicate the current environment in the mode line."
-  :group 'pyvenv)
-
-;; Internal code.
-
-(defvar pyvenv-old-process-environment nil
-  "The old process environment before the last activate.")
-
-(defvar pyvenv-old-exec-path nil
-  "The old exec path before the last activate.")
-
-;;;###autoload
-(defun pyvenv-activate (directory)
-  "Activate the virtual environment in DIRECTORY."
-  (interactive "DActivate venv: ")
-  (setq directory (expand-file-name directory))
-  (pyvenv-deactivate)
-  (setq pyvenv-virtual-env directory
-        pyvenv-virtual-env-name (file-name-base directory))
-  ;; Preserve variables from being overwritten.
-  (let ((old-exec-path exec-path)
-        (old-process-environment process-environment))
-    (unwind-protect
-        (pyvenv-run-virtualenvwrapper-hook "pre_activate" pyvenv-virtual-env)
-      (setq exec-path old-exec-path
-            process-environment old-process-environment)))
-  (run-hooks 'pyvenv-pre-activate-hooks)
-  (setq pyvenv-old-exec-path exec-path
-        pyvenv-old-process-environment process-environment
-        ;; For some reason, Emacs adds some directories to `exec-path'
-        ;; but not to `process-environment'?
-        exec-path (cons (format "%s/bin" directory)
-                        exec-path)
-        process-environment (append
-                             (list
-                              (format "VIRTUAL_ENV=%s" directory)
-                              (format "PATH=%s" (mapconcat (lambda (x)
-                                                             (or x "."))
-                                                           exec-path
-                                                           ":"))
-                              ;; No "=" means to unset
-                              "PYTHONHOME")
-                             process-environment)
-        )
-  (pyvenv-run-virtualenvwrapper-hook "post_activate")
-  (run-hooks 'pyvenv-post-activate-hooks))
-
-;;;###autoload
-(defun pyvenv-deactivate ()
-  "Deactivate any current virtual environment."
-  (interactive)
-  (when pyvenv-virtual-env
-    (pyvenv-run-virtualenvwrapper-hook "pre_deactivate")
-    (run-hooks 'pyvenv-pre-deactivate-hooks))
-  (when pyvenv-old-process-environment
-    (setq process-environment pyvenv-old-process-environment
-          pyvenv-old-process-environment nil))
-  (when pyvenv-old-exec-path
-    (setq exec-path pyvenv-old-exec-path
-          pyvenv-old-exec-path nil))
-  (when pyvenv-virtual-env
-    ;; Make sure this does not change `exec-path', as $PATH is
-    ;; different
-    (let ((old-exec-path exec-path)
-          (old-process-environment process-environment))
-      (unwind-protect
-          (pyvenv-run-virtualenvwrapper-hook "post_deactivate"
-                                             pyvenv-virtual-env)
-        (setq exec-path old-exec-path
-              process-environment old-process-environment)))
-    (run-hooks 'pyvenv-post-deactivate-hooks))
-  (setq pyvenv-virtual-env nil
-        pyvenv-virtual-env-name nil))
-
-(defvar pyvenv-workon-history nil
-  "Prompt history for `pyvenv-workon'.")
-
-;;;###autoload
-(defun pyvenv-workon (name)
-  "Activate a virtual environment from $WORKON_HOME."
-  (interactive
-   (list
-    (completing-read "Work on: " (pyvenv-virtualenv-list)
-                     nil t nil 'pyvenv-workon-history nil nil)))
-  (when (not (or (equal name "")
-                 ;; Some completion frameworks can return nil for the
-                 ;; default, see
-                 ;; https://github.com/jorgenschaefer/elpy/issues/144
-                 (equal name nil)))
-    (pyvenv-activate (format "%s/%s"
-                             (or (getenv "WORKON_HOME")
-                                 "~/.virtualenvs")
-                             name))))
-
-(defun pyvenv-virtualenv-list ()
-  "Prompt the user for a name in $WORKON_HOME."
-  (let ((workon-home (or (getenv "WORKON_HOME")
-                         "~/.virtualenvs"))
-        (result nil))
-    (when (not (file-directory-p workon-home))
-      (error "Can't find a workon home directory, set $WORKON_HOME"))
-    (dolist (name (directory-files workon-home))
-      (when (file-exists-p (format "%s/%s/bin/activate"
-                                   workon-home name))
-        (setq result (cons name result))))
-    (sort result (lambda (a b)
-                   (string-lessp (downcase a)
-                                 (downcase b))))))
-
-;;;###autoload
-(define-minor-mode pyvenv-mode
-  "Global minor mode for pyvenv.
-
-Will show the current virtual env in the mode line, and respect a
-`pyvenv-workon' setting in files."
-  :global t
-  (cond
-   (pyvenv-mode
-    (add-to-list 'mode-line-misc-info pyvenv-mode-line-indicator)
-    (add-hook 'hack-local-variables-hook #'pyvenv-set-file-virtualenv))
-   ((not pyvenv-mode)
-    (setq mode-line-misc-info (delete pyvenv-mode-line-indicator
-                                      mode-line-misc-info))
-    (remove-hook 'hack-local-variables-hook #'pyvenv-set-file-virtualenv))))
-
-(defun pyvenv-set-file-virtualenv ()
-  "If `pyvenv-workon' is set, switch to that virtual env."
-  (cond
-   ((and pyvenv-workon (not pyvenv-virtual-env))
-    (pyvenv-workon pyvenv-workon))
-   ((and pyvenv-workon (not (equal pyvenv-workon pyvenv-virtual-env-name)))
-    (when (y-or-n-p (format "Switch to virtual env %s (currently %s)? "
-                            pyvenv-workon pyvenv-virtual-env))
-      (pyvenv-workon pyvenv-workon)))))
-
-(defvar pyvenv-virtualenvwrapper-python
-  (or (getenv "VIRTUALENVWRAPPER_PYTHON")
-      (executable-find "python"))
-  "The python process which has access to the virtualenvwrapper module.
-
-This should be $VIRTUALENVWRAPPER_PYTHON outside of Emacs, but
-virtualenvwrapper.sh does not export that variable, so we do not
-usually see it.")
-
-(defun pyvenv-run-virtualenvwrapper-hook (hook &rest args)
-  "Run a virtualenvwrapper hook, and update the environment.
-
-This will run a virtualenvwrapper hook and update the local
-environment accordingly.
-
-CAREFUL! This will modify your `process-environment' and
-`exec-path'."
-  (when (getenv "VIRTUALENVWRAPPER_LOG_DIR")
-    (with-temp-buffer
-      (let ((tmpfile (make-temp-file "pyvenv-virtualenvwrapper-")))
-        (unwind-protect
-            (progn
-              (apply #'call-process
-                     pyvenv-virtualenvwrapper-python
-                     nil t nil
-                     "-c"
-                     "from virtualenvwrapper.hook_loader import main; main()"
-                     "--script" tmpfile
-                     (if (getenv "HOOK_VERBOSE_OPTION")
-                         (cons (getenv "HOOK_VERBOSE_OPTION")
-                               (cons hook args))
-                       (cons hook args)))
-              (call-process-shell-command
-               (format ". '%s' ; echo ; echo =-=-= ; python -c \"import os, json ; print json.dumps(dict(os.environ))\""
-                       tmpfile)
-               nil t nil))
-          (delete-file tmpfile)))
-      (goto-char (point-min))
-      (when (re-search-forward "\n=-=-=\n" nil t)
-        (let ((output (buffer-substring (point-min)
-                                        (match-beginning 0))))
-          (when (> (length output) 0)
-            (with-help-window "*Virtualenvwrapper Hook Output*"
-              (with-current-buffer "*Virtualenvwrapper Hook Output*"
-                (let ((inhibit-read-only t))
-                  (erase-buffer)
-                  (insert
-                   (format
-                    "Output from the virtualenvwrapper hook %s:\n\n"
-                    hook)
-                   output))))))
-        (dolist (binding (json-read))
-          (let ((env (format "%s=%s" (car binding) (cdr binding))))
-            (when (not (member env process-environment))
-              (setq process-environment (cons env process-environment))))
-          (when (eq (car binding) 'PATH)
-            (setq exec-path (split-string (cdr binding) ":"))))))))
-
-;;;###autoload
-(defun pyvenv-restart-python ()
-  "Restart Python inferior processes."
-  (interactive)
-  (dolist (buf (buffer-list))
-    (with-current-buffer buf
-      (when (and (eq major-mode 'inferior-python-mode)
-                 (get-buffer-process buf))
-        (let ((cmd (combine-and-quote-strings (process-command
-                                               (get-buffer-process buf))))
-              (dedicated (if (string-match "\\[.*\\]$" (buffer-name buf))
-                             t
-                           nil))
-              (show nil))
-          (delete-process (get-buffer-process buf))
-          (goto-char (point-max))
-          (insert "\n\n"
-                  "###\n"
-                  (format "### Restarting in virtual env %s (%s)\n"
-                          pyvenv-virtual-env-name pyvenv-virtual-env)
-                  "###\n"
-                  "\n\n")
-          (run-python cmd dedicated show)
-          (goto-char (point-max)))))))
-
-;;; Compatibility
-
-(when (not (fboundp 'file-name-base))
-  ;; Emacs 24.3
-  (defun file-name-base (&optional filename)
-    "Return the base name of the FILENAME: no directory, no extension.
-FILENAME defaults to `buffer-file-name'."
-    (file-name-sans-extension
-     (file-name-nondirectory (or filename (buffer-file-name)))))
-  )
-
-(provide 'pyvenv)
-;;; pyvenv.el ends here