]> code.delx.au - gnu-emacs-elpa/commitdiff
Add 'packages/nameless/' from commit 'c1dd76b972ab978884d5c1b2add43e83cc23134e'
authorArtur Malabarba <bruce.connor.am@gmail.com>
Thu, 3 Sep 2015 10:54:18 +0000 (11:54 +0100)
committerArtur Malabarba <bruce.connor.am@gmail.com>
Thu, 3 Sep 2015 10:54:18 +0000 (11:54 +0100)
git-subtree-dir: packages/nameless
git-subtree-mainline: 4de23529e28c8c1ba5b970bda87463f3923ad362
git-subtree-split: c1dd76b972ab978884d5c1b2add43e83cc23134e

1  2 
packages/nameless/LICENSE
packages/nameless/README.org
packages/nameless/example-nameless-off.png
packages/nameless/example-nameless-on.png
packages/nameless/nameless.el

index 0000000000000000000000000000000000000000,8cdb8451d9b90c1d4000c6f22eb86471a4568be6..8cdb8451d9b90c1d4000c6f22eb86471a4568be6
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,340 +1,340 @@@
+                     GNU GENERAL PUBLIC LICENSE
+                        Version 2, June 1991
+  Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
+  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  Everyone is permitted to copy and distribute verbatim copies
+  of this license document, but changing it is not allowed.
+                             Preamble
+   The licenses for most software are designed to take away your
+ freedom to share and change it.  By contrast, the GNU General Public
+ License is intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users.  This
+ General Public License applies to most of the Free Software
+ Foundation's software and to any other program whose authors commit to
+ using it.  (Some other Free Software Foundation software is covered by
+ the GNU Lesser General Public License instead.)  You can apply it to
+ your programs, too.
+   When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ this service if you wish), that you receive source code or can get it
+ if you want it, that you can change the software or use pieces of it
+ in new free programs; and that you know you can do these things.
+   To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the rights.
+ These restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.
+   For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights that
+ you have.  You must make sure that they, too, receive or can get the
+ source code.  And you must show them these terms so they know their
+ rights.
+   We protect your rights with two steps: (1) copyright the software, and
+ (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.
+   Also, for each author's protection and ours, we want to make certain
+ that everyone understands that there is no warranty for this free
+ software.  If the software is modified by someone else and passed on, we
+ want its recipients to know that what they have is not the original, so
+ that any problems introduced by others will not reflect on the original
+ authors' reputations.
+   Finally, any free program is threatened constantly by software
+ patents.  We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making the
+ program proprietary.  To prevent this, we have made it clear that any
+ patent must be licensed for everyone's free use or not licensed at all.
+   The precise terms and conditions for copying, distribution and
+ modification follow.
+                     GNU GENERAL PUBLIC LICENSE
+    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+   0. This License applies to any program or other work which contains
+ a notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License.  The "Program", below,
+ refers to any such program or work, and a "work based on the Program"
+ means either the Program or any derivative work under copyright law:
+ that is to say, a work containing the Program or a portion of it,
+ either verbatim or with modifications and/or translated into another
+ language.  (Hereinafter, translation is included without limitation in
+ the term "modification".)  Each licensee is addressed as "you".
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope.  The act of
+ running the Program is not restricted, and the output from the Program
+ is covered only if its contents constitute a work based on the
+ Program (independent of having been made by running the Program).
+ Whether that is true depends on what the Program does.
+   1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any warranty;
+ and give any other recipients of the Program a copy of this License
+ along with the Program.
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+   2. You may modify your copy or copies of the Program or any portion
+ of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+     a) You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+     b) You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+     c) If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+ These requirements apply to the modified work as a whole.  If
+ identifiable sections of that work are not derived from the Program,
+ and can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works.  But when you
+ distribute the same sections as part of a whole which is a work based
+ on the Program, the distribution of the whole must be on the terms of
+ this License, whose permissions for other licensees extend to the
+ entire whole, and thus to each and every part regardless of who wrote it.
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Program.
+ In addition, mere aggregation of another work not based on the Program
+ with the Program (or with a work based on the Program) on a volume of
+ a storage or distribution medium does not bring the other work under
+ the scope of this License.
+   3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the following:
+     a) Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+     b) Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+     c) Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+ The source code for a work means the preferred form of the work for
+ making modifications to it.  For an executable work, complete source
+ code means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to
+ control compilation and installation of the executable.  However, as a
+ special exception, the source code distributed need not include
+ anything that is normally distributed (in either source or binary
+ form) with the major components (compiler, kernel, and so on) of the
+ operating system on which the executable runs, unless that component
+ itself accompanies the executable.
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+   4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License.  Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this License.
+ However, parties who have received copies, or rights, from you under
+ this License will not have their licenses terminated so long as such
+ parties remain in full compliance.
+   5. You are not required to accept this License, since you have not
+ signed it.  However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works.  These actions are
+ prohibited by law if you do not accept this License.  Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and
+ all its terms and conditions for copying, distributing or modifying
+ the Program or works based on it.
+   6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions.  You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties to
+ this License.
+   7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License.  If you cannot
+ distribute so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you
+ may not distribute the Program at all.  For example, if a patent
+ license would not permit royalty-free redistribution of the Program by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Program.
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply and the section as a whole is intended to apply in other
+ circumstances.
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is
+ implemented by public license practices.  Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is willing
+ to distribute software through any other system and a licensee cannot
+ impose that choice.
+ This section is intended to make thoroughly clear what is believed to
+ be a consequence of the rest of this License.
+   8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License
+ may add an explicit geographical distribution limitation excluding
+ those countries, so that distribution is permitted only in or among
+ countries not thus excluded.  In such case, this License incorporates
+ the limitation as if written in the body of this License.
+   9. The Free Software Foundation may publish revised and/or new versions
+ of the General Public License from time to time.  Such new versions will
+ be similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns.
+ Each version is given a distinguishing version number.  If the Program
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and conditions
+ either of that version or of any later version published by the Free
+ Software Foundation.  If the Program does not specify a version number of
+ this License, you may choose any version ever published by the Free Software
+ Foundation.
+   10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the author
+ to ask for permission.  For software which is copyrighted by the Free
+ Software Foundation, write to the Free Software Foundation; we sometimes
+ make exceptions for this.  Our decision will be guided by the two goals
+ of preserving the free status of all derivatives of our free software and
+ of promoting the sharing and reuse of software generally.
+                             NO WARRANTY
+   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+ REPAIR OR CORRECTION.
+   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+                      END OF TERMS AND CONDITIONS
+             How to Apply These Terms to Your New Programs
+   If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these terms.
+   To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ convey the exclusion of warranty; and each file should have at least
+ the "copyright" line and a pointer to where the full notice is found.
+     {description}
+     Copyright (C) {year}  {fullname}
+     This program is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation; either version 2 of the License, or
+     (at your option) any later version.
+     This program is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+     GNU General Public License for more details.
+     You should have received a copy of the GNU General Public License along
+     with this program; if not, write to the Free Software Foundation, Inc.,
+     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ Also add information on how to contact you by electronic and paper mail.
+ If the program is interactive, make it output a short notice like this
+ when it starts in an interactive mode:
+     Gnomovision version 69, Copyright (C) year name of author
+     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+     This is free software, and you are welcome to redistribute it
+     under certain conditions; type `show c' for details.
+ The hypothetical commands `show w' and `show c' should show the appropriate
+ parts of the General Public License.  Of course, the commands you use may
+ be called something other than `show w' and `show c'; they could even be
+ mouse-clicks or menu items--whatever suits your program.
+ You should also get your employer (if you work as a programmer) or your
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary.  Here is a sample; alter the names:
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+   `Gnomovision' (which makes passes at compilers) written by James Hacker.
+   {signature of Ty Coon}, 1 April 1989
+   Ty Coon, President of Vice
+ This General Public License does not permit incorporating your program into
+ proprietary programs.  If your program is a subroutine library, you may
+ consider it more useful to permit linking proprietary applications with the
+ library.  If this is what you want to do, use the GNU Lesser General
+ Public License instead of this License.
index 0000000000000000000000000000000000000000,6644e15c895c35a16e87ce8a8b26f016d6b1d393..6644e15c895c35a16e87ce8a8b26f016d6b1d393
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,36 +1,36 @@@
+ #+OPTIONS: toc:nil num:nil
+ * Nameless
+ Hide package namespace in your emacs-lisp code.
+ Simply put, turn on this minor mode, and you’ll see this
+ [[file:example-nameless-on.png]]\\
+ instead of this
+ [[file:example-nameless-off.png]]
+ ** Usage
+ To use this package add the following configuration to your Emacs init file.
+ #+BEGIN_SRC emacs-lisp
+ (add-hook 'emacs-lisp-mode-hook #'nameless-mode)
+ #+END_SRC
+ You can configure a string to use instead of ~:~ by setting the
+ ~nameless-prefix~, and the name of the face used is ~nameless-face~.
+ You can even just hide the prefix completely by setting this variable
+ to an empty string.
+ While the mode is active, the =_= key inserts the package namespace if
+ appropriate.
+ * Configuration
+ Nameless can also be used to “import” other packages as aliases. For
+ instance, in the default behaviour, functions in the ~font-lock~
+ package (e.g., ~font-lock-add-keywords~) will be displayed with the
+ ~fl:~ prefix (e.g., ~fl:add-keywords~).
+ You can configure your own aliases globally with
+ ~nameless-global-aliases~, and on a file-local basis with
+ ~nameless-aliases~.
index 0000000000000000000000000000000000000000,a4bbcda1ee7c5b978ada298e013581221ecd23bb..a4bbcda1ee7c5b978ada298e013581221ecd23bb
mode 000000,100644..100644
Binary files differ
index 0000000000000000000000000000000000000000,e79cc3a3a891e868d614162adb2cea03fe8e99e6..e79cc3a3a891e868d614162adb2cea03fe8e99e6
mode 000000,100644..100644
Binary files differ
index 0000000000000000000000000000000000000000,2ebdb8a9f46da0436420345138f95bc114b8c711..2ebdb8a9f46da0436420345138f95bc114b8c711
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,213 +1,213 @@@
+ ;;; nameless.el --- Hide package namespace in your emacs-lisp code  -*- lexical-binding: t; -*-
+ ;; Copyright (C) 2015 Free Software Foundation, Inc.
+ ;; Author: Artur Malabarba <emacs@endlessparentheses.com>
+ ;; Keywords: convenience, lisp
+ ;; Version: 0.2
+ ;; Package-Requires: ((emacs "24.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:
+ ;; Usage
+ ;; ─────
+ ;;
+ ;;   To use this package add the following configuration to your Emacs init
+ ;;   file.
+ ;;
+ ;;   ┌────
+ ;;   │ (add-hook 'emacs-lisp-mode-hook #'nameless-mode)
+ ;;   └────
+ ;;
+ ;;   You can configure a string to use instead of `:' by setting the
+ ;;   `nameless-prefix', and the name of the face used is `nameless-face'.
+ ;;
+ ;;   While the mode is active, the `_' key inserts the package
+ ;;   namespace if appropriate.
+ ;;; Code:
+ (require 'lisp-mnt)
+ (defgroup nameless nil
+   "Customization group for nameless."
+   :group 'emacs)
+ (defcustom nameless-prefix ":"
+   "Prefix displayed instead of package namespace."
+   :type 'string)
+ (defcustom nameless-global-aliases '(("fl" . "font-lock"))
+   "Alist from aliases to namespaces.
+ This alist is used everywhere.  It is designed for namespaces you
+ use commonly.  To apply aliases specific to a file, set the
+ `nameless-aliases' variable with `add-file-local-variable'.
+ Each element of this list should have the form (ALIAS . NAMESPACE),
+ both strings.  For example, if you set this variable to
+           ((\"fl\" . \"font-lock\"))
+ then expressions like `(font-lock-add-keywords nil kwds)' will
+ displayed as `(fl/add-keywords nil kwds)' instead.
+ Furthermore typing `fl' followed by `\\[nameless-insert-name]' will
+ automatically insert `font-lock-'."
+   :type '(alist string string))
+ (defvar nameless-aliases nil
+   "Alist from namespaces to aliases.
+ Samse syntax as `nameless-global-aliases', but designed to be
+ used as a file-local variable.")
+ (defface nameless-face
+   '((t :inherit font-lock-type-face))
+   "Face used on `nameless-prefix'")
+ (defcustom nameless-affect-indentation-and-filling 'outside-strings
+   "If non-nil, code is indented and filled according to what you see.
+ If nil, code is indented and filled according to its actual content.
+ If the value is `outside-strings', behave like nil inside strings
+ and behave like t otherwise.
+ After changing this variable, you must reenable `nameless-mode'
+ for it to take effect."
+   :type '(choice (const :tag "Always affect indentation" t)
+                  (const :tag "Don't affect indentation" nil)
+                  (const :tag "Only outside strings" 'outside-strings)))
\f
+ ;;; Font-locking
+ (defun nameless--make-composition (s)
+   "Return a list that composes S if passed to `compose-region'."
+   (cdr (apply #'append (mapcar (lambda (x) (list '(Br . Bl) x)) s))))
+ (defvar nameless-mode)
+ (defun nameless--compose-as (display)
+   "Compose the matched region and return a face spec."
+   (when nameless-mode
+     (let ((compose (and nameless-affect-indentation-and-filling
+                         (or (not (eq nameless-affect-indentation-and-filling 'outside-strings))
+                             (not (nth 3 (syntax-ppss))))))
+           (dis (concat display nameless-prefix)))
+       (when compose
+         (compose-region (match-beginning 1)
+                         (match-end 1)
+                         (nameless--make-composition dis)))
+       `(face nameless-face ,@(unless compose (list 'display dis))))))
+ (defvar-local nameless--font-lock-keywords nil)
+ (defun nameless--ensure ()
+   (save-excursion
+     (font-lock-fontify-region (point-min) (point-max))))
+ (defun nameless--remove-keywords ()
+   "Remove font-lock keywords set by `nameless--add-keywords'."
+   (font-lock-remove-keywords nil nameless--font-lock-keywords)
+   (setq nameless--font-lock-keywords nil)
+   (nameless--ensure))
+ (defun nameless--add-keywords (&rest r)
+   "Add font-lock keywords displaying REGEXP as DISPLAY.
+ \(fn (regexp . display) [(regexp . display) ...])"
+   (setq-local font-lock-extra-managed-props
+               `(composition display ,@font-lock-extra-managed-props))
+   (let ((kws (mapcar (lambda (x) `(,(nameless--name-regexp (cdr x)) 1 (nameless--compose-as ,(car x)) prepend)) r)))
+     (setq nameless--font-lock-keywords kws)
+     (font-lock-add-keywords nil kws t))
+   (nameless--ensure))
\f
+ ;;; Name and regexp
+ (defvar-local nameless-current-name nil)
+ (defun nameless--in-arglist-p ()
+   "Is point inside an arglist?"
+   (save-excursion
+     (ignore-errors
+       (backward-up-list)
+       (or (progn (forward-sexp -1)
+                  (looking-at-p "[a-z-]lambda\\_>"))
+           (progn (forward-sexp -1)
+                  (looking-at-p "\\(cl-\\)?def\\(un\\|macro\\|inline\\)\\*?\\_>"))))))
+ (defun nameless-insert-name (&optional noerror)
+   "Insert `nameless-current-name' or the alias at point.
+ If point is immediately after an alias configured in
+ `nameless-aliases' or `nameless-global-aliases', replace it with
+ the full name for that alias.
+ Otherwise, insert `nameless-current-name'.
+ If NOERROR is nil, signal an error if the alias at point is not
+ configured, or if `nameless-current-name' is nil."
+   (interactive)
+   (if (string-match (rx (or (syntax symbol)
+                             (syntax word)))
+                     (string (char-before)))
+       (let* ((r (point))
+              (l (save-excursion
+                   (forward-sexp -1)
+                   (skip-chars-forward "^[:alnum:]")
+                   (point)))
+              (alias (buffer-substring l r))
+              (full-name (when alias
+                           (cdr (or (assoc alias nameless-aliases)
+                                    (assoc alias nameless-global-aliases))))))
+         (if full-name
+             (progn (delete-region l r)
+                    (insert full-name "-"))
+           (unless noerror
+             (user-error "No name for alias `%s', see `nameless-aliases'" alias))))
+     (if nameless-current-name
+         (insert nameless-current-name "-")
+       (unless noerror
+         (user-error "No name for current buffer, see `nameless-current-name'")))))
+ (defun nameless-insert-name-or-self-insert (&optional self-insert)
+   "Insert the name of current package, with a hyphen."
+   (interactive "P")
+   (if (or self-insert
+           (not nameless-current-name)
+           (eq (char-before) ?\\)
+           (nameless--in-arglist-p))
+       (call-interactively #'self-insert-command)
+     (or (nameless-insert-name 'noerror)
+         (call-interactively #'self-insert-command))))
+ (defun nameless--name-regexp (name)
+   "Return a regexp of the current name."
+   (concat "\\_<@?\\(" (regexp-quote name) "-\\)\\(\\s_\\|\\sw\\)"))
\f
+ ;;; Minor mode
+ ;;;###autoload
+ (define-minor-mode nameless-mode
+   nil nil " :" '(("_" . nameless-insert-name-or-self-insert))
+   (if nameless-mode
+       (if (or nameless-current-name
+               (ignore-errors (string-match "\\.el\\'" (lm-get-package-name))))
+           (progn
+             (unless nameless-current-name
+               (setq nameless-current-name (replace-regexp-in-string "\\.[^.]*\\'" "" (lm-get-package-name))))
+             (apply #'nameless--add-keywords
+                    `((nil . ,nameless-current-name)
+                      ,@nameless-global-aliases
+                      ,@nameless-aliases)))
+         (nameless-mode -1))
+     (setq nameless-current-name nil)
+     (nameless--remove-keywords)))
+ (provide 'nameless)
+ ;;; nameless.el ends here