[PYTHON] Pensez aux interfaces sélectives sur la ligne de commande

introduction

L'interface sélective ici est un outil de type Anything dans Emacs. Il sera plus facile de comprendre ce point en regardant l'image.

Ces outils ont une variété d'applications.

L'interface sélective vous permet de sélectionner le résultat de sortie en vous connectant à un tuyau. Et celui sélectionné sera finalement sorti.

Vous pouvez utiliser cette sortie pour médier divers outils et obtenir des valeurs.

percol

Un outil d'interface sélective écrit en python.

https://github.com/mooz/percol

Installation de percol

python


$ sudo pip install percol

Ou

python


$ git clone https://github.com/mooz/percol

$ cd !$:t

$ sudo python setup.py install

Utilisation de base du percol

python


$ ls | percol

Correspond à une chaîne spécifique depuis le début.

python


$ ls ~ | percol --query="s"

Personnalisez le côté gauche de l'invite.

python


$ ls | percol --right-prompt=prompt1

reliure de clé percol

Avec percol, vous pouvez également définir des raccourcis clavier en créant un fichier de paramètres.

python


$ mkdir ~/.percol.d

$ vim ~/.percol.d/rc.py

python:~/.percol.d/rc.py


# https://gist.github.com/mitukiii/4234173
import sys, commands
from percol.command import SelectorCommand
from percol.key import SPECIAL_KEYS
from percol.finder import FinderMultiQueryMigemo, FinderMultiQueryRegex

## prompt
# Case Insensitive /Invite selon la méthode de correspondance
def dynamic_prompt():
    prompt = ur""
    if percol.model.finder.__class__ == FinderMultiQueryMigemo:
        prompt += "[Migemo]"
    elif percol.model.finder.__class__ == FinderMultiQueryRegex:
        prompt += "[Regexp]"
    else:
        prompt += "[String]"
    if percol.model.finder.case_insensitive:
        prompt += "[a]"
    else:
        prompt += "[A]"
    prompt += "> %q"
    return prompt

percol.view.__class__.PROMPT = property(lambda self: dynamic_prompt())

## migemo
#Changer le chemin du dictionnaire sur Mac et Ubuntu
if sys.platform == "darwin":
    FinderMultiQueryMigemo.dictionary_path = "/usr/local/Cellar/cmigemo/20110227/share/migemo/utf-8/migemo-dict"
else:
    FinderMultiQueryMigemo.dictionary_path = "/usr/local/share/migemo/utf-8/migemo-dict"

## kill
#Partagez kill (yank) avec le presse-papiers sur Mac
if sys.platform == "darwin":
    def copy_end_of_line_as_kill(self):
        commands.getoutput("echo " + self.model.query[self.model.caret:] + " | pbcopy")
        self.model.query  = self.model.query[:self.model.caret]

    def paste_as_yank(self):
        self.model.insert_string(commands.getoutput("pbpaste"))

    SelectorCommand.kill_end_of_line = copy_end_of_line_as_kill
    SelectorCommand.yank = paste_as_yank

## keymap
#Faire fonctionner la suppression (retour arrière) sur Mac
SPECIAL_KEYS.update({
    127: '<backspace>'
})
percol.import_keymap({
    "C-a" : lambda percol: percol.command.beginning_of_line(),
    "C-e" : lambda percol: percol.command.end_of_line(),
    "C-b" : lambda percol: percol.command.backward_char(),
    "C-f" : lambda percol: percol.command.forward_char(),
    "C-d" : lambda percol: percol.command.delete_forward_char(),
    "C-h" : lambda percol: percol.command.delete_backward_char(),
    "C-k" : lambda percol: percol.command.kill_end_of_line(),
    "C-y" : lambda percol: percol.command.yank(),
    "C-n" : lambda percol: percol.command.select_next(),
    "C-p" : lambda percol: percol.command.select_previous(),
    "C-v" : lambda percol: percol.command.select_next_page(),
    "M-v" : lambda percol: percol.command.select_previous_page(),
    "M-<" : lambda percol: percol.command.select_top(),
    "M->" : lambda percol: percol.command.select_bottom(),
    "C-m" : lambda percol: percol.finish(),
    "C-j" : lambda percol: percol.finish(),
    "C-g" : lambda percol: percol.cancel(),
    "M-c" : lambda percol: percol.command.toggle_case_sensitive(),
    "M-m" : lambda percol: percol.command.toggle_finder(FinderMultiQueryMigemo),
    "M-r" : lambda percol: percol.command.toggle_finder(FinderMultiQueryRegex)
})

référence: Super pratique si vous mettez du percol et le combinez avec zsh

J'ai essayé la version terminale de quelque chose comme percol au lieu de zaw

Utilisation appliquée du percol

Sélectionnez plusieurs lignes avec percol

Si vous voulez sélectionner plusieurs lignes, utilisez percol.command.toggle_mark_and_next (). Par défaut, il semble être réglé sur «C-S».

python


$ ps ax | percol | awk '{ print $1 }' | xargs kill

Dans mon cas, j'écris le fichier de configuration suivant. Marque multi-lignes et annulation de marque.

python:~/.percol.d/rc.py


    "C-n" : lambda percol: percol.command.toggle_mark_and_next(),
    "C-p" : lambda percol: percol.command.unmark_all(),

Vous pouvez également définir le délimiteur avec la commande suivante.

python


$ ls | percol | tr '\n' ';'

zsh achèvement du percol

Lors du clonage depuis GitHub, il semble qu'il soit préparé depuis le début.

https://github.com/mooz/percol/blob/master/tools/zsh/_percol

python


$ curl -o ~/.zsh/functions/_percol https://raw.githubusercontent.com/mooz/percol/master/tools/zsh/_percol

$ exec $SHELL

cd avec percol

Si cdr est créé, il semble que vous puissiez facilement vous déplacer par la méthode suivante.

~/.zshrc


# http://piyopiyoducky.net/blog/2013/08/17/cdr-with-percol/
### search a destination from cdr list
function percol-get-destination-from-cdr() {
    cdr -l | \
        sed -e 's/^[[:digit:]]*[[:blank:]]*//' | \
        percol --match-method migemo --query "$LBUFFER"
}

### search a destination from cdr list and cd the destination
function percol-cdr() {
    local destination="$(percol-get-destination-from-cdr)"
    if [ -n "$destination" ]; then
        BUFFER="cd $destination"
        zle accept-line
    else
        zle reset-prompt
    fi
}
zle -N percol-cdr
bindkey '^xb' percol-cdr

Autre que cela, cliquez ici.

~/.zshrc


# https://github.com/shibayu36/config-file/blob/master/.zsh/percol-sources/cdr.zsh
function percol-cdr () {
    local selected_dir=$(cdr -l | awk '{ print $2 }' | percol)
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N percol-cdr
bindkey '^@' percol-cdr

référence:

J'ai écrit un gars qui a enregistré des CD dans le répertoire où je suis allé récemment avec percol

Déplacer vers Anything-like dans le répertoire que vous avez récemment déplacé avec Zsh cdr et percol-PiyoPiyoDucky

Migrer du saut automatique vers le saut de répertoire basé sur percol | Web Scratch

percol et ghq

Rend votre structure de répertoires plus facile à utiliser.

python


$ go get github.com/motemen/ghq

Les détails sont présentés dans les articles suivants.

ghq + percol + docc | SOTA

Gestion unifiée et efficace des dépôts locaux à l'aide de ghq --delirious pensées

Le fichier de complétion zsh de la commande ghq a été modifié, je vais donc vous expliquer le processus --Qiita

percol et git

Percol est également très utile pour rendre la commande git plus facile à utiliser.

Les détails sont présentés dans les articles suivants.

git-issue + git-flow + percol

Paramètres qui facilitent le travail en branchant les tickets redmine à l'aide de percol et git-issue | Technology-Gym

Utilisez percol pour copier la valeur de hachage de git commit dans le clip - Qiita

Git - Compléter automatiquement la demande d'extraction et vérifier --Qiita

peco

Un outil d'interface sélective écrit en «golang» basé sur «percol».

https://github.com/lestrrat/peco

Le fichier de réglage peut être édité comme suit.

golang:~/.peco/config.json


{
    "Keymap": {
        "C-p": "peco.SelectPrevious",
        "C-n": "peco.SelectNext",
        "C-c": "peco.Cancel"
    }
}

Les détails sont présentés dans les articles suivants.

Commande "peco" qui rend l'invite de commande Windows 10 fois plus pratique

Introduction de peco à utiliser pour zsh history-Goodbye Internet

Recommended Posts

Pensez aux interfaces sélectives sur la ligne de commande
Continuez à recevoir RSS sur la ligne de commande
Vous recherchez commandlinefu sur la ligne de commande
Développement Arduino en ligne de commande: vim + platformio
À propos de la commande de service
Mise en évidence de la syntaxe sur la ligne de commande à l'aide de Pygments
Convertir XLSX en CSV sur la ligne de commande
Exécutez Route53 sur la ligne de commande à l'aide de l'AWS-CLI.
Réfléchissez à la programmation de Python sur votre iPad
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Pensez grossièrement à la fonction de perte
Module standard Python utilisable en ligne de commande
Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande
Pensez grossièrement à la méthode de descente de gradient
Recherchez le nom du réseau Wi-Fi (SSID) de votre Mac sur la ligne de commande
Introduction de l'environnement d'interface de ligne de commande SoftLayer
Mémo de correspondance lorsque la touche de direction ne peut pas être utilisée dans la ligne de commande python
Notes fréquemment utilisées (personnellement) pour la commande tar
Mes réflexions sur le modèle d'application de ligne de commande python2.6
[Python] Pensez sérieusement à la méthode gagnante M-1.
À propos du test
Comment passer des arguments lors de l'appel d'un script python depuis Blender sur la ligne de commande
À propos de l'interface Go
À propos de la file d'attente
Comment créer un article à partir de la ligne de commande
Trier en Python. Pensons ensuite à l'algorithme.
Pensez à la nouvelle génération de Rack et WSGI
Exécuter une commande sur le serveur Web et afficher le résultat
Notes diverses sur le déploiement de l'application django sur Heroku
Multiplier PDF par OCR en ligne de commande sous Linux (Ubuntu)
(Rappelez-vous rapidement) Comment utiliser la ligne de commande LINUX