Giter VIP home page Giter VIP logo

cyphejor's Introduction

Cyphejor

License GPL 3 MELPA CI

This package shortens major mode names by using a set of user-defined rules.

Installation

The package is available via MELPA, so you can just type M-x package-install RET cyphejor RET.

If you would like to install the package manually, download or clone it and put on Emacs' load-path. Then you can require it in your init file like this:

(require 'cyphejor)

Usage

First, you need to set the value of the variable cyphejor-rules. This variable contains rules that are used to generate new names for major modes from their symbol names, that is, values of the major-mode variable.

cyphejor-rules should be a list. Every element of the list should have the following form:

(string replacement &rest parameters)

where string is a word in the major mode's symbol name, replacement is a string to be used instead of that word, parameters is a list that may contain the following keywords:

  • :prefix—put the component at the beginning of the resulting string
  • :postfix—put the component at the end of resulting string

The following keywords influence the algorithm in general:

  • :downcase—replace words that are not matched explicitly with their first letter downcased

  • :upcase—replace words that are not matched explicitly with their first letter upcased

If nothing is specified, a word will be used unchanged, separated from other words with spaces if necessary.

Example of a setup:

(setq
 cyphejor-rules
 '(:upcase
   ("bookmark"    "")
   ("buffer"      "β")
   ("diff"        "Δ")
   ("dired"       "δ")
   ("emacs"       "ε")
   ("inferior"    "i" :prefix)
   ("interaction" "i" :prefix)
   ("interactive" "i" :prefix)
   ("lisp"        "λ" :postfix)
   ("menu"        "" :postfix)
   ("mode"        "")
   ("package"     "")
   ("python"      "π")
   ("shell"       "sh" :postfix)
   ("text"        "ξ")
   ("wdired"      "↯δ")))

cyphejor-mode can be enabled like this:

(cyphejor-mode 1)

Customization

You can access the customization interface via M-x customize-group cyphejor RET.

License

Copyright © 2015–present Mark Karpov

Distributed under GNU GPL, version 3.

cyphejor's People

Contributors

aloisjanicek avatar dependabot[bot] avatar eigengrau avatar mrkkrp avatar syohex avatar taquangtrung avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cyphejor's Issues

upcase-replace doesn't work correctly

I've noticed that no matter what this downcases the major-modes. Then if you have just :upcase it works correctly but :upcase-replace does nothing.

Really I just want the original names for the major-modes that I don't have set and most of those have the first letter capitalized. No matter what I try they are always lowercase whether I remove this tag or set it to other settings.

For example, this in user.el,

(setq
 cyphejor-rules
 '(:upcase-replace
   ("bookmark"    "→")
   ("buffer"      "β")
   ("diff"        "Δ")
   ("dired"       "𝔒")
   ("emacs"       "∃")
   ("fundamental" "Ⓕ")
   ("inferior"    "i" :prefix)
   ("interaction" "i" :prefix)
   ("interactive" "i" :prefix)
   ("lisp"        "λ" :postfix)
   ("menu"        "▤" :postfix)
   ("mode"        "")
   ("package"     "↓")
   ("python"      "π")
   ("org"      "𝜭")
   ("shell"       "sh" :postfix)
   ("text"        "ξ")
   ("wdired"      "𝓦𝔒")))

The symbol `+` in `c++-mode` is stripped

Hi,

I notice that Cyphejor strips the + symbol, hence c++-mode is converted to c mode.

This is due to the code at this line:

(let ((words (split-string (downcase old-name) "[[:punct:]]" t))

Currently, I change the regexp "[[:punct:]]" to the regexp [\b\\-] to split words by only the word boundary and the - symbols to avoid + from being removed.

(let ((words      (split-string (downcase old-name) "[\b\\-]+" t))
  ...

Could you advise if this is a suitable fix?

I can also create a PR if this is needed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.