mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-12-06 04:31:30 +00:00
Implementation for an Issue #832
This commit is contained in:
@@ -15,12 +15,39 @@ from lib.core.data import logger
|
||||
from lib.core.data import paths
|
||||
from lib.core.enums import AUTOCOMPLETE_TYPE
|
||||
from lib.core.enums import OS
|
||||
from lib.core.settings import MAX_HISTORY_LENGTH
|
||||
|
||||
def readlineAvailable():
|
||||
"""
|
||||
Check if the readline is available. By default
|
||||
it is not in Python default installation on Windows
|
||||
"""
|
||||
|
||||
return readline._readline is not None
|
||||
|
||||
def clearHistory():
|
||||
if not readlineAvailable():
|
||||
return
|
||||
|
||||
readline.clear_history()
|
||||
|
||||
def saveHistory():
|
||||
if not readlineAvailable():
|
||||
return
|
||||
|
||||
historyPath = os.path.expanduser(paths.SQLMAP_SHELL_HISTORY)
|
||||
try:
|
||||
os.remove(historyPath)
|
||||
except:
|
||||
pass
|
||||
|
||||
readline.set_history_length(MAX_HISTORY_LENGTH)
|
||||
readline.write_history_file(historyPath)
|
||||
|
||||
def loadHistory():
|
||||
if not readlineAvailable():
|
||||
return
|
||||
|
||||
historyPath = os.path.expanduser(paths.SQLMAP_SHELL_HISTORY)
|
||||
|
||||
if os.path.exists(historyPath):
|
||||
@@ -47,15 +74,13 @@ class CompleterNG(rlcompleter.Completer):
|
||||
matches.append(word)
|
||||
|
||||
return matches
|
||||
|
||||
def autoCompletion(completion=None):
|
||||
# First of all we check if the readline is available, by default
|
||||
# it is not in Python default installation on Windows
|
||||
if not readline._readline:
|
||||
|
||||
def autoCompletion(completion=None, os=None, commands=None):
|
||||
if not readlineAvailable():
|
||||
return
|
||||
|
||||
if completion == AUTOCOMPLETE_TYPE.OS:
|
||||
if Backend.isOs(OS.WINDOWS):
|
||||
if os == OS.WINDOWS:
|
||||
# Reference: http://en.wikipedia.org/wiki/List_of_DOS_commands
|
||||
completer = CompleterNG({
|
||||
"copy": None, "del": None, "dir": None,
|
||||
@@ -76,5 +101,11 @@ def autoCompletion(completion=None):
|
||||
readline.set_completer(completer.complete)
|
||||
readline.parse_and_bind("tab: complete")
|
||||
|
||||
elif commands:
|
||||
completer = CompleterNG(dict(((_, None) for _ in commands)))
|
||||
readline.set_completer_delims(' ')
|
||||
readline.set_completer(completer.complete)
|
||||
readline.parse_and_bind("tab: complete")
|
||||
|
||||
loadHistory()
|
||||
atexit.register(saveHistory)
|
||||
|
||||
Reference in New Issue
Block a user