shellnotes/util/notegrep/m/m.py
2021-08-21 20:43:07 +03:00

80 lines
2.7 KiB
Python

#!/usr/bin/env python3
#shellnotes - m.py
#(C) Dimitris Marakomihelakis
#Released under the "All rights reserved" category. See the RIGHTS.txt file
#in /docs/github/ for its full text.
import sys
import os.path
from os import path
from os import listdir
import subprocess
from subprocess import check_output
import re
class Multi():
def __init__(self, patterns, files):
self.patterns = patterns
self.files = files
def check_empty(self):
if "" in self.patterns: raise IndexError #asks for direct input
def remove_duplicates(self):
self.patterns, self.files = list(dict.fromkeys(self.patterns)), list(dict.fromkeys(self.files))
def remove_dots(self):
if len(self.files) >= 2:
if '.' in self.files: self.files.remove('.')
def remove_spaces(self):
self.patterns, self.files = [elem.strip(' ') for elem in self.patterns], [elem.strip(' ') for elem in self.files]
#def split_extras(self): #not using this for now
# if len(sys.argv) == 4:
# if "-i" in sys.argv[-1] or "--ignore" in sys.argv[-1]:
# re.sub(r'\s(--\ignore+|-\i)', '', sys.sys.argv[-1]) #remove everything from sys.argv[-1], except "-i" or "--ignore", if it exists.
def print_matches(self):
if self.files == ["."]:
notes = os.path.expanduser('~') + '/Notes'
self.files = [file for file in listdir(notes)]
for file in self.files:
try:
if file == "": return 0
print("\n"+file if path.exists('Notes/'+file) else f"\n{file} (not found):", flush=True)
print("=" * len(file) if path.exists('Notes/'+file) else "-", flush=True)
with open('Notes/'+file, 'r') as f:
text = f.read()
for pattern in self.patterns:
if re.search(pattern, text):
out = os.system(f"""echo -n "'\033[1;35;40m{pattern}\033[0;37;0m'": && grep -n --color=always {pattern} Notes/{file}""")
except FileNotFoundError: pass
def main():
try:
newMulti = Multi(sys.argv[1].split(','), sys.argv[2].split(','))
newMulti.check_empty()
newMulti.remove_spaces()
newMulti.remove_duplicates()
newMulti.remove_dots()
newMulti.print_matches()
except IndexError:
patterns = input("Enter patterns, separated by a comma: ")
files = input("Enter files, separated by a comma: ")
newMulti = Multi(patterns.split(','), files.split(','))
newMulti.remove_spaces()
newMulti.remove_duplicates()
newMulti.remove_dots()
newMulti.print_matches()
if __name__ == "__main__":
main()