Der grundlegende Teil ist: Finden, wie es ist.
Natürlich benötigen Sie den Befehl cmigemo und sein Wörterbuch (Ich denke, es wird kommen, wenn Sie cmigemo setzen)
Zuerst habe ich versucht, PyMigemo zu verwenden, aber ich kann es nicht mit Python3 installieren, und es scheint schwierig für mich zu sein, der Python nicht kennt. Ich starte heimlich den Befehl cmigemo mit popen und benutze ihn.
In rc.conf
rc.conf
map f console mfind
Es wird bequem sein, es zu tun. (Vergessen Sie nicht, am Ende der Zeile ein Leerzeichen zu setzen!)
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