Skip to content

elijahr/lk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lk - A programmer's search tool, parallel and fast

Notes

  • Written in Python
  • Inspired by ack
  • Parallelism: searches directories in parallel using Python's multiprocessing library
  • Makes searching from Python programs easy via 'import lk'

Examples

Search for the word 'class' in the current working directory

$ lk class
/home/elijah/Development/lk/lk.py:
10: class NullDevice():
54: class SearchManager(object):
85: class ColorWriter:
122: class DirectoryResult(object):
145: class LineResult(object):

Search for the regex "line_.*" in /home/elijah/Development/lk/

$ lk "line_.*" /home/elijah/Development/lk/
/home/elijah/Development/lk/lk.py:
129:         self._line_results = {}
134:         line_number = file_contents.count('\n', 0, match_start) + 1
139:         line_result = LineResult(line_number, left_offset,
142:         if not file_name in self._line_results:
143:             self._line_results[file_name] = []
144:         self._line_results[file_name].append(line_result)
146:     def get_line_results(self):
147:         return self._line_results.items()
150:     def __init__(self, line_number, left_offset, left_of_group,
152:         self.line_number = line_number
160:     for file_name, line_results in directory_result.get_line_results():
164:         for line_result in line_results:
165:             writer.write('%s: ' % (line_result.line_number))
166:             writer.write(line_result.left_of_group)
167:             writer.write_blue(line_result.group)
168:             writer.write(line_result.right_of_group+'\n')

Installation

$ sudo easy_install lk

or

$ sudo pip install lk

Bleeding Edge Installation

If you want to use the latest and greatest version of lk:

$ git clone git://github.com/elijahr/lk.git
$ cd lk
$ sudo chmod +x lk.py
$ sudo ln -s `pwd`/lk.py /usr/local/bin/lk

Then whenever you feel like updating to the latest, just do this:

$ cd lk && git pull

Usage

usage: lk [-h] [--ignore-case] [--no-unicode] [--no-multiline] [--dot-all]
          [--follow-links] [--hidden] [--binary] [--no-colors] [--stats]
          [--num-processes NUMBER_PROCESSES] [--exclude PATH_PATTERN]
          [--open-with COMMAND]
          PATTERN [DIRECTORY]

A programmer's search tool, parallel and fast

positional arguments:
  PATTERN               a python re regular expression
  DIRECTORY             a directory to search in (default cwd)

optional arguments:
  -h, --help            show this help message and exit
  --ignore-case, -i     ignore case when searching
  --no-unicode, -u      unicode-unfriendly searching
  --no-multiline, -l    don't search over multiple lines
  --dot-all, -a         dot in pattern matches newline
  --follow-links, -s    follow symlinks
  --hidden, -n          search hidden files and directories
  --binary, -b          search binary files
  --no-colors, -c       don't print ANSI colors
  --stats, -t           print statistics
  --num-processes NUMBER_PROCESSES, -p NUMBER_PROCESSES
                        number of child processes to concurrently search with
  --exclude PATH_PATTERN, -x PATH_PATTERN
                        exclude paths matching PATH_PATTERN
  --open-with COMMAND, -o COMMAND
                        run each COMMAND where COMMAND is a string with a
                        placeholder, %s, for the absolute path of the matched
                        file

Issues?

Please report any encountered bugs at http://github.com/elijahr/lk/issues

About

a programmer's search tool, parallel and fast.

Resources

License

Stars

Watchers

Forks

Packages

No packages published