zzz-to-char-0.1.3/ 0000755 0001750 0001750 00000000000 13423113474 013537 5 ustar dogsleg dogsleg zzz-to-char-0.1.3/README.md 0000644 0001750 0001750 00000002535 13423113474 015023 0 ustar dogsleg dogsleg # Zzz to Char
[](http://www.gnu.org/licenses/gpl-3.0.txt)
[](https://melpa.org/#/zzz-to-char)
[](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 the 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`.
## 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: M-x package-install RET
zzz-to-char RET.
## 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–2019 Mark Karpov
Distributed under GNU GPL, version 3.
zzz-to-char-0.1.3/.travis.yml 0000644 0001750 0001750 00000001007 13423113474 015646 0 ustar dogsleg dogsleg language: c
env:
matrix:
- EVM_EMACS=emacs-24.5-travis
- EVM_EMACS=emacs-25.3-travis
before_install:
- git clone https://github.com/rejeep/evm.git $HOME/.evm
- export PATH=$HOME/.evm/bin:$PATH
- evm config path /tmp
- evm install $EVM_EMACS --use --skip
install:
- curl -fsSkL https://raw.github.com/cask/cask/master/go | python
- export PATH=/home/travis/.cask/bin:$PATH
- cask install
script:
- cask build 2>&1 >/dev/null | grep "Error" | wc -l | grep "0"
notifications:
email: false
zzz-to-char-0.1.3/zzz-to-char.el 0000644 0001750 0001750 00000006530 13423113474 016255 0 ustar dogsleg dogsleg ;;; zzz-to-char.el --- Fancy version of `zap-to-char' command -*- lexical-binding: t; -*-
;;
;; Copyright © 2015–2019 Mark Karpov
;;
;; Author: Mark Karpov
;; URL: https://github.com/mrkkrp/zzz-to-char
;; Version: 0.1.3
;; 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 .
;;; 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'.
;;; 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 point 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 an 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
(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
zzz-to-char-0.1.3/Cask 0000644 0001750 0001750 00000000175 13423113474 014346 0 ustar dogsleg dogsleg ;; -*- mode: emacs-lisp -*-
(source gnu)
(source melpa)
(package-file "zzz-to-char.el")
(development
(depends-on "avy"))