Commit 5c306a50 authored by Lev Lamberov's avatar Lev Lamberov

New upstream version 0.1.1

parents
*-autoloads.el
*.elc
*~
env:
matrix:
- EMACS=emacs24
- EMACS=emacs-snapshot
matrix:
allow_failures:
- env: EMACS=emacs-snapshot
before_install:
- git submodule --quiet update --init --recursive
install:
- if [ "$EMACS" = 'emacs24' ]; then
sudo add-apt-repository -y ppa:cassou/emacs &&
sudo apt-get -qq update &&
sudo apt-get -qq -f install &&
sudo apt-get -qq install emacs24 emacs24-el;
fi
- if [ "$EMACS" = 'emacs-snapshot' ]; then
sudo add-apt-repository -y ppa:ubuntu-elisp/ppa &&
sudo apt-get -qq update &&
sudo apt-get -qq -f install &&
sudo apt-get -qq install emacs-snapshot &&
sudo apt-get -qq install emacs-snapshot-el;
fi
- curl -fsSkL https://raw.github.com/cask/cask/master/go | python
- export PATH="/home/travis/.cask/bin:$PATH"
- cask install
script:
- cask build
notifications:
email: false
(source gnu)
(source melpa)
(package-file "zzz-to-char.el")
(development
(depends-on "avy"))
# Zzz to Char
[![License GPL 3](https://img.shields.io/badge/license-GPL_3-green.svg)](http://www.gnu.org/licenses/gpl-3.0.txt)
[![MELPA](http://melpa.org/packages/zzz-to-char-badge.svg)](http://melpa.org/#/zzz-to-char)
[![Build Status](https://travis-ci.org/mrkkrp/zzz-to-char.svg?branch=master)](https://travis-ci.org/mrkkrp/zzz-to-char)
This package provides two new commands: `zzz-to-char` and `zzz-up-to-char`
which work like built-ins `zap-to-char` and `zap-up-to-char`, but allow you
quickly select exact character you want to “zzz” to.
The commands are minimalistic and often work like built-in ones when there
is only one occurrence of target character (except they automatically work
in backward direction too). You can also specify how many characters to scan
from each side of point, see `zzz-to-char-reach`.
This package uses avy as backend.
## Installation
Download this package and place it somewhere, so Emacs can see it. Then put
`(require 'zzz-to-char)` into your configuration file. Done!
To install the package via MELPA, execute: <kbd>M-x package-install RET
zzz-to-char RET</kbd>.
## Usage
Just bind `zzz-to-char` or `zzz-up-to-char` (depends on your taste, the
latter doesn't include target char into killed text):
```emacs-lisp
(global-set-key (kbd "M-z") #'zzz-to-char)
```
## License
Copyright © 2015–2016 Mark Karpov
Distributed under GNU GPL, version 3.
;;; zzz-to-char.el --- Fancy version of `zap-to-char' command -*- lexical-binding: t; -*-
;;
;; Copyright © 2015–2016 Mark Karpov <markkarpov@openmailbox.org>
;;
;; Author: Mark Karpov <markkarpov@openmailbox.org>
;; URL: https://github.com/mrkkrp/zzz-to-char
;; Version: 0.1.1
;; Package-Requires: ((emacs "24.4") (cl-lib "0.5")(avy "0.3.0"))
;; Keywords: convenience
;;
;; 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 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 package provides two new commands: `zzz-to-char' and
;; `zzz-up-to-char' which work like built-ins `zap-to-char' and
;; `zap-up-to-char', but allow you quickly select exact character you want
;; to “zzz” to.
;;
;; The commands are minimalistic and often work like built-in ones when
;; there is only one occurrence of target character (except they
;; automatically work in backward direction too). You can also specify how
;; many characters to scan from each side of point, see `zzz-to-char-reach'.
;;
;; This package uses avy as backend.
;;; Code:
(require 'avy)
(require 'cl-lib)
(defgroup zzz-to-char nil
"Fancy version of `zap-to-char' command."
:group 'convenience
:tag "Zzz to Char"
:prefix "zzz-to-char-"
:link '(url-link :tag "GitHub" "https://github.com/mrkkrp/zzz-to-char"))
(defcustom zzz-to-char-reach 80
"Number of characters to scan on each side of the point."
:tag "How many characters to scan"
:type 'integer)
(defun zzz-to-char--base (char n-shift)
"Kill text between the pont and character CHAR.
Boundary of text to kill that doesn't coincide with point
position can be shifted with help of N-SHIFT argument.
This is internal function, see also `zzz-to-char' and
`zzz-up-to-char'."
(let ((p (point))
(avy-all-windows nil))
(avy-with zzz-to-char
(avy--generic-jump
(if (= 13 char)
"\n"
(regexp-quote (string char)))
nil
avy-style
(max (- p zzz-to-char-reach)
(point-min))
(min (+ p zzz-to-char-reach)
(point-max))))
(let ((n (point)))
(when (/= n p)
(cl-destructuring-bind (beg . end)
(if (> n p)
(cons p (- (1+ n) n-shift))
(cons (+ n n-shift) p))
(goto-char end)
(kill-region beg end))))))
;;;###autoload
(defun zzz-to-char (char)
"Kill text between the point and the character CHAR.
This command is similar to `zap-to-char', it kills target
character too."
(interactive (list (read-char "Zzz to: " t)))
(zzz-to-char--base char 0))
;;;###autoload
(defun zzz-up-to-char (char)
"Kill text between the point and the character CHAR.
This command is similar to `zap-up-to-char', it doesn't kill
target character."
(interactive (list (read-char "Zzz up to: " t)))
(zzz-to-char--base char 1))
(provide 'zzz-to-char)
;;; zzz-to-char.el ends here
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment