[PYTHON] Version Migemo de la commande: find ,: mfind

La partie de base est: trouver tel quel.

Naturellement, vous avez besoin de la commande cmigemo et de son dictionnaire (Je pense que ça va entrer si vous mettez cmigemo)

Au début, j'ai essayé d'utiliser PyMigemo, mais je ne peux pas l'installer avec Python3, et je ne connais pas Python, donc cela semble difficile. Je lance secrètement la commande cmigemo avec popen et je l'utilise.

Dans rc.conf

rc.conf


map f console mfind 

Ce sera pratique de le faire. (N'oubliez pas de mettre un blanc à la fin de la ligne!)

commands.py


# Copyright (C) 2012 anekos
# Copyright (C) 2009, 2010, 2011 Roman Zimbelmann <[email protected]>
# This configuration file is licensed under the same terms as ranger.
#
# ranger - http://ranger.nongnu.org/

class mfind(Command):
  """
:mfind <EXPR{2,}>

Migemized find.
"""

  tab = Command._tab_directory_content
  last_rexpr = None
  migemo = None

  def get_instance (self):
    if not self.migemo:
      from subprocess import Popen, PIPE
      self.migemo = Popen(["cmigemo", "-q", "-d", "/usr/share/migemo/utf-8/migemo-dict"], stdout=PIPE, stdin=PIPE)
    return self.migemo

  def get_rexpr (self, expr):
    if not expr or len(expr) <= 1:
      return None

    m = self.get_instance()
    m.stdin.write(bytearray(expr + "\n", "UTF-8"))

    migemo_result = str(m.stdout.readline(), "UTF-8").rstrip()
    try:
      import re
      return re.compile(migemo_result, re.L | re.U | re.I)
    except:
      return None

  def execute (self):
    if self.quick():
      self.fm.move(right=1)
      self.fm.block_input(0.5)
    else:
      self.fm.cd(self.rest(1))

    # for n/N (search_next)
    if self.last_rexpr:
      self.fm.thistab.last_search = self.last_rexpr
      self.fm.search_method = 'search'

  def quick(self):
    cwd = self.fm.thisdir
    arg = self.rest(1)
    if not arg:
      return False

    if arg == '.':
      return False
    if arg == '..':
      return True

    rexpr = self.get_rexpr(arg)
    self.last_rexpr = rexpr

    if not rexpr:
      return False

    count = 0
    deq = deque(cwd.files)
    deq.rotate(-cwd.pointer)
    i = 0
    for fsobj in deq:
      from re import search
      if search(rexpr, fsobj.basename):
        count += 1
        if count == 1:
          cwd.move(to=(cwd.pointer + i) % len(cwd.files))
          self.fm.thisfile = cwd.pointed_obj
      if count > 1:
        return False
      i += 1

    return count == 1

Recommended Posts

Version Migemo de la commande: find ,: mfind
Aligner la version de chromedriver_binary
Ouvrez la version Chrome de LINE à partir de la ligne de commande [Linux]
Découvrez la version de la langue que vous utilisez
Tester la version du module argparse
Trouvez la définition de la valeur de errno
Élever la version de pyenv elle-même
pyenv-changer la version python de virtualenv
Trouvez l'aire de l'ensemble somme des rectangles qui se chevauchent
Comment vérifier la version de Django
À propos de l'environnement virtuel de Python version 3.7
[Python] Essayez pydash de la version Python de lodash
Notez l'achèvement d'une commande chronophage
Trouvez le coefficient du polypole le moins carré
Essai du parseur d'emacs-org orgparse pour python
Comment trouver la zone du diagramme de Boronoi
Trouver la main de "Millijan" par l'optimisation des combinaisons
L'histoire de la création du Mel Icon Generator version 2
Utilisez la dernière version de PyCharm sur Ubuntu
Écrire une note sur la version python de python virtualenv
Découvrez la fraction de la valeur saisie en python
Essayez Progate Free Edition [Python I]
L'histoire de la mauvaise lecture de la ligne d'échange de la commande supérieure
Trouvez la solution de l'équation d'ordre n avec python
Découvrez le jour par date / heure
Trier les fichiers mis à jour dans la période spécifiée par la commande find par ordre de taille
Trouver la fonction de distribution cumulative par tri (version Python)
Scraping de l'historique d'utilisation du cycle de la communauté Version PhantomJS
Afficher progressivement la sortie de la commande exécutée par le sous-processus.
Installez la dernière version de CMake sur Ubuntu 18.04.4 LTS
Projecet Euler 12 Trouvez le nombre de fractions sans diviser.
L'histoire de l'arrêt du service de production avec la commande hostname
Calculer la somme des valeurs uniques par tabulation croisée des pandas
Connaissez l'emplacement du fichier de définition de classe Python.
Supprimons maintenant l'ambiguïté du trait d'union (-) de la commande su! !!
J'ai suivi la mise en place de la commande du (première moitié)
Découvrez l'emplacement des packages installés avec pip
Utilisons la version Python du module API Confluence.
[Django] Changer l'adresse IP par défaut de la commande runserver
Gérez le numéro de version du package de requirements.txt avec pip-tools
La dernière version de Pillow 7.0.0 tuera la transformation de pytorch.
Vérifiez le type et la version de la distribution Linux
Comprendre les attributs des fichiers Linux (commande ls -l)
Le début de cif2cell
mémorandum de commande vi
Obtenez la version GNOME
Le sens de soi
Installation d'OpenMDAO (version 1.7.1)
Commande de confirmation de version CentOS
le zen de Python
L'histoire de sys.path.append ()
À propos de la commande de service
Installez la commande pip
Rechercher, localiser le résumé de la commande
La vengeance des types: la vengeance des types
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)
Notes sur la version de CUDA, cuDNN où tensorflow-gpu fonctionnait
J'ai essayé de trouver l'entropie de l'image avec python