[NEW_FEATURE] Add new possibility to launch the auto-typing text from command line:
-qnQuoterName -qfQuoteFileNameFullPath -qtQuoteText git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1328 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
00f664188f
commit
b09a7c17f3
@ -45,22 +45,65 @@ void printStr(const TCHAR *str2print)
|
||||
|
||||
std::string getFileContent(const TCHAR *file2read)
|
||||
{
|
||||
const size_t blockSize = 256;
|
||||
const size_t blockSize = 1024;
|
||||
char data[blockSize];
|
||||
std::string wholeFileContent = "";
|
||||
FILE *fp = generic_fopen(file2read, TEXT("rb"));
|
||||
|
||||
_fseeki64 (fp , 0 , SEEK_END);
|
||||
unsigned __int64 fileSize =_ftelli64(fp);
|
||||
rewind(fp);
|
||||
size_t lenFile = 0;
|
||||
do {
|
||||
lenFile = fread(data, 1, blockSize - 1, fp);
|
||||
if (lenFile <= 0) break;
|
||||
|
||||
if (lenFile >= blockSize - 1)
|
||||
data[blockSize - 1] = '\0';
|
||||
else
|
||||
data[lenFile - 1] = '\0';
|
||||
|
||||
wholeFileContent += data;
|
||||
|
||||
} while (lenFile > 0);
|
||||
|
||||
size_t lenFile = fread(data, 1, blockSize, fp);
|
||||
fclose(fp);
|
||||
if (lenFile <= 0) return "";
|
||||
if (fileSize >= blockSize)
|
||||
data[blockSize-1] = '\0';
|
||||
return wholeFileContent;
|
||||
}
|
||||
|
||||
|
||||
char getDriveLetter()
|
||||
{
|
||||
char drive = '\0';
|
||||
TCHAR current[MAX_PATH];
|
||||
|
||||
::GetCurrentDirectory(MAX_PATH, current);
|
||||
int driveNbr = ::PathGetDriveNumber(current);
|
||||
if (driveNbr != -1)
|
||||
drive = 'A' + char(driveNbr);
|
||||
|
||||
return drive;
|
||||
}
|
||||
|
||||
generic_string relativeFilePathToFullFilePath(const TCHAR *relativeFilePath)
|
||||
{
|
||||
generic_string fullFilePathName = TEXT("");
|
||||
TCHAR fullFileName[MAX_PATH];
|
||||
BOOL isRelative = ::PathIsRelative(relativeFilePath);
|
||||
|
||||
if (isRelative)
|
||||
{
|
||||
::GetFullPathName(relativeFilePath, MAX_PATH, fullFileName, NULL);
|
||||
fullFilePathName += fullFileName;
|
||||
}
|
||||
else
|
||||
data[fileSize] = '\0';
|
||||
return data;
|
||||
{
|
||||
if ((relativeFilePath[0] == '\\' && relativeFilePath[1] != '\\') || relativeFilePath[0] == '/')
|
||||
{
|
||||
fullFilePathName += getDriveLetter();
|
||||
fullFilePathName += ':';
|
||||
}
|
||||
fullFilePathName += relativeFilePath;
|
||||
}
|
||||
|
||||
return fullFilePathName;
|
||||
}
|
||||
|
||||
void writeFileContent(const TCHAR *file2write, const char *content2write)
|
||||
|
@ -109,6 +109,7 @@ bool isInList(const TCHAR *token, const TCHAR *list);
|
||||
generic_string BuildMenuFileName(int filenameLen, unsigned int pos, const generic_string &filename);
|
||||
|
||||
std::string getFileContent(const TCHAR *file2read);
|
||||
generic_string relativeFilePathToFullFilePath(const TCHAR *relativeFilePath);
|
||||
void writeFileContent(const TCHAR *file2write, const char *content2write);
|
||||
|
||||
class WcharMbcsConvertor {
|
||||
|
@ -5994,6 +5994,7 @@ void Notepad_plus::showAllQuotes() const
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
void Notepad_plus::showQuoteFromIndex(int index) const
|
||||
{
|
||||
if (index < 0 || index >= nbQuote) return;
|
||||
@ -6008,6 +6009,27 @@ void Notepad_plus::showQuoteFromIndex(int index) const
|
||||
HANDLE hThread = ::CreateThread(NULL, 0, threadTextPlayer, ¶ms, 0, NULL);
|
||||
::CloseHandle(hThread);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void Notepad_plus::showQuoteFromIndex(int index) const
|
||||
{
|
||||
if (index < 0 || index >= nbQuote) return;
|
||||
showQuote(quotes[index]._quote, quotes[index]._quoter, index < 20);
|
||||
}
|
||||
|
||||
void Notepad_plus::showQuote(const char *quote, const char *quoter, bool doTrolling) const
|
||||
|
||||
{
|
||||
static TextPlayerParams params;
|
||||
params._nppHandle = Notepad_plus::_pPublicInterface->getHSelf();
|
||||
params._text2display = quote;
|
||||
params._quoter = quoter;
|
||||
params._pCurrentView = _pEditView;
|
||||
params._shouldBeTrolling = doTrolling;
|
||||
HANDLE hThread = ::CreateThread(NULL, 0, threadTextPlayer, ¶ms, 0, NULL);
|
||||
::CloseHandle(hThread);
|
||||
}
|
||||
|
||||
void Notepad_plus::launchDocumentBackupTask()
|
||||
{
|
||||
|
@ -308,6 +308,7 @@ public:
|
||||
void launchDocumentBackupTask();
|
||||
int getQuoteIndexFrom(const char *quoter) const;
|
||||
void showQuoteFromIndex(int index) const;
|
||||
void showQuote(const char *quote, const char *quoter, bool doTrolling) const;
|
||||
|
||||
private:
|
||||
Notepad_plus_Window *_pPublicInterface;
|
||||
|
@ -217,10 +217,29 @@ void Notepad_plus_Window::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLin
|
||||
{
|
||||
char dest[MAX_PATH];
|
||||
wcstombs(dest, (cmdLineParams->_easterEggName).c_str(), sizeof(dest));
|
||||
int iQuote = _notepad_plus_plus_core.getQuoteIndexFrom(dest);
|
||||
if (iQuote != -1)
|
||||
|
||||
|
||||
//::MessageBoxA(NULL, destStr.c_str(), "", MB_OK);
|
||||
if (cmdLineParams->_quoteType == 0) // Easter Egg Name
|
||||
{
|
||||
_notepad_plus_plus_core.showQuoteFromIndex(iQuote);
|
||||
int iQuote = _notepad_plus_plus_core.getQuoteIndexFrom(dest);
|
||||
if (iQuote != -1)
|
||||
{
|
||||
_notepad_plus_plus_core.showQuoteFromIndex(iQuote);
|
||||
}
|
||||
}
|
||||
else if (cmdLineParams->_quoteType == 1) // command line quote
|
||||
{
|
||||
_userQuote = dest;
|
||||
_notepad_plus_plus_core.showQuote(_userQuote.c_str(), "Anonymous #999", false);
|
||||
}
|
||||
else if (cmdLineParams->_quoteType == 2) // content drom file
|
||||
{
|
||||
std::string destStr = dest;
|
||||
generic_string fileName(destStr.begin(), destStr.end());
|
||||
_userQuote = getFileContent(fileName.c_str());
|
||||
if (_userQuote != "")
|
||||
_notepad_plus_plus_core.showQuote(_userQuote.c_str(), "Anonymous #999", false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,6 +98,7 @@ private:
|
||||
static const TCHAR _className[32];
|
||||
bool _isPrelaunch;
|
||||
bool _disablePluginsManager;
|
||||
string _userQuote; // keep the availability of this string for thread using
|
||||
};
|
||||
|
||||
#endif //NOTEPAD_PLUS_WINDOW_H
|
||||
|
@ -203,9 +203,11 @@ struct CmdLineParams {
|
||||
LangType _langType;
|
||||
generic_string _localizationPath;
|
||||
generic_string _easterEggName;
|
||||
unsigned char _quoteType;
|
||||
|
||||
CmdLineParams() : _isNoPlugin(false), _isReadOnly(false), _isNoSession(false), _isNoTab(false),_showLoadingTime(false),\
|
||||
_isPreLaunch(false), _line2go(-1), _column2go(-1), _langType(L_EXTERNAL), _isPointXValid(false), _isPointYValid(false),\
|
||||
_localizationPath(TEXT("")), _easterEggName(TEXT(""))
|
||||
_localizationPath(TEXT("")), _easterEggName(TEXT("")), _quoteType(0)
|
||||
{
|
||||
_point.x = 0;
|
||||
_point.y = 0;
|
||||
|
@ -35,17 +35,6 @@
|
||||
|
||||
typedef std::vector<const TCHAR*> ParamVector;
|
||||
|
||||
char getDriveLetter(){
|
||||
char drive = '\0';
|
||||
TCHAR current[MAX_PATH];
|
||||
|
||||
::GetCurrentDirectory(MAX_PATH, current);
|
||||
int driveNbr = ::PathGetDriveNumber(current);
|
||||
if (driveNbr != -1)
|
||||
drive = 'A' + char(driveNbr);
|
||||
|
||||
return drive;
|
||||
}
|
||||
|
||||
bool checkSingleFile(const TCHAR * commandLine) {
|
||||
TCHAR fullpath[MAX_PATH];
|
||||
@ -134,7 +123,8 @@ bool isInList(const TCHAR *token2Find, ParamVector & params) {
|
||||
return false;
|
||||
};
|
||||
|
||||
bool getParamVal(TCHAR c, ParamVector & params, generic_string & value) {
|
||||
bool getParamVal(TCHAR c, ParamVector & params, generic_string & value)
|
||||
{
|
||||
value = TEXT("");
|
||||
int nrItems = params.size();
|
||||
|
||||
@ -150,6 +140,26 @@ bool getParamVal(TCHAR c, ParamVector & params, generic_string & value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool getParamValFromString(const TCHAR *str, ParamVector & params, generic_string & value)
|
||||
{
|
||||
value = TEXT("");
|
||||
int nrItems = params.size();
|
||||
|
||||
for (int i = 0; i < nrItems; ++i)
|
||||
{
|
||||
const TCHAR * token = params.at(i);
|
||||
generic_string tokenStr = token;
|
||||
int pos = tokenStr.find(str);
|
||||
if (pos != -1 && pos == 0)
|
||||
{
|
||||
value = (token + lstrlen(str));
|
||||
params.erase(params.begin() + i);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
LangType getLangTypeFromParam(ParamVector & params)
|
||||
{
|
||||
generic_string langStr;
|
||||
@ -177,11 +187,36 @@ int getNumberFromParam(char paramName, ParamVector & params, bool & isParamePres
|
||||
return generic_atoi(numStr.c_str());
|
||||
};
|
||||
|
||||
generic_string getEasterEggNameFromParam(ParamVector & params)
|
||||
generic_string getEasterEggNameFromParam(ParamVector & params, unsigned char & type)
|
||||
{
|
||||
generic_string EasterEggName;
|
||||
if (!getParamVal('e', params, EasterEggName))
|
||||
return TEXT("");
|
||||
if (!getParamValFromString(TEXT("-qn"), params, EasterEggName)) // get internal easter egg
|
||||
{
|
||||
if (!getParamValFromString(TEXT("-qt"), params, EasterEggName)) // get user quote from cmdline argument
|
||||
{
|
||||
if (!getParamValFromString(TEXT("-qf"), params, EasterEggName)) // get user quote from a content of file
|
||||
return TEXT("");
|
||||
else
|
||||
{
|
||||
EasterEggName = relativeFilePathToFullFilePath(EasterEggName.c_str());
|
||||
type = 2; // quote content in file
|
||||
}
|
||||
}
|
||||
else
|
||||
type = 1; // commandline quote
|
||||
}
|
||||
else
|
||||
type = 0; // easter egg
|
||||
|
||||
generic_string percentTwentyStr = TEXT("%20");
|
||||
generic_string spaceStr = TEXT(" ");
|
||||
size_t start_pos = 0;
|
||||
while ((start_pos = EasterEggName.find(percentTwentyStr, start_pos)) != std::string::npos)
|
||||
{
|
||||
EasterEggName.replace(start_pos, percentTwentyStr.length(), spaceStr);
|
||||
start_pos += spaceStr.length(); // Handles case where 'to' is a substring of 'from'
|
||||
}
|
||||
|
||||
return EasterEggName;
|
||||
}
|
||||
|
||||
@ -233,7 +268,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
||||
cmdLineParams._column2go = getNumberFromParam('c', params, isParamePresent);
|
||||
cmdLineParams._point.x = getNumberFromParam('x', params, cmdLineParams._isPointXValid);
|
||||
cmdLineParams._point.y = getNumberFromParam('y', params, cmdLineParams._isPointYValid);
|
||||
cmdLineParams._easterEggName = getEasterEggNameFromParam(params);
|
||||
cmdLineParams._easterEggName = getEasterEggNameFromParam(params, cmdLineParams._quoteType);
|
||||
|
||||
|
||||
if (showHelp)
|
||||
{
|
||||
@ -270,7 +306,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
||||
// tell the running instance the FULL path to the new files to load
|
||||
size_t nrFilesToOpen = params.size();
|
||||
const TCHAR * currentFile;
|
||||
TCHAR fullFileName[MAX_PATH];
|
||||
|
||||
for(size_t i = 0; i < nrFilesToOpen; ++i)
|
||||
{
|
||||
@ -278,22 +313,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
||||
if (currentFile[0])
|
||||
{
|
||||
//check if relative or full path. Relative paths dont have a colon for driveletter
|
||||
BOOL isRelative = ::PathIsRelative(currentFile);
|
||||
|
||||
quotFileName += TEXT("\"");
|
||||
if (isRelative)
|
||||
{
|
||||
::GetFullPathName(currentFile, MAX_PATH, fullFileName, NULL);
|
||||
quotFileName += fullFileName;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((currentFile[0] == '\\' && currentFile[1] != '\\') || currentFile[0] == '/')
|
||||
{
|
||||
quotFileName += getDriveLetter();
|
||||
quotFileName += ':';
|
||||
}
|
||||
quotFileName += currentFile;
|
||||
}
|
||||
quotFileName += relativeFilePathToFullFilePath(currentFile);
|
||||
quotFileName += TEXT("\" ");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user