Hello @monu-kashyap, @Michael-vincent, @alan-kilborn, and All,
Here is an other solution which uses a batch file and the DOS command set /a
Open a new N++ tab ( Ctrl + N )
Run the menu command Encoding > Convert to ANSI
Select all the batch file contents, below, and copy them in this new empty file
Save it, in the system folder C:\Windows\System32, as cal.bat
@echo OFF REM *************************************************************** REM * BATCH file "Cal.bat" for MULTIPLE calculations in ONE go * REM * * REM * Type 'cal' WITHOUT parameter or 'cal /?' for EXPLANATIONS * REM *************************************************************** REM ************************************************************************ REM * The TITLE of the DOS windows is changed as "MULTIPLE calculations" * REM ************************************************************************ title MULTIPLES calculations REM *************************************************************************** REM * color <HEX Background><HEX Foreground> sets the COLORS of the CONSOLE * REM * * REM * 0 = Black 8 = Grey * REM * 1 = Dark Blue 9 = Blue * REM * 2 = Forest Green A = Lime * REM * 3 = Dark Cyan B = Cyan * REM * 4 = Dark Red C = Red * REM * 5 = Purple D = Magenta * REM * 6 = Olive E = Yellow * REM * 7 = Light Grey F = White * REM * * REM * You may DELETE this command ( DEFAULT values of CONSOLE are '07' ) * REM *************************************************************************** color 70 REM ************************************************************************** REM * IF call WITHOUT any PARAMETER, JUMP to label "Help" for EXPLANATIONS * REM * * REM * DON'T write "%1"=="" as the PARAMETER may contain DOUBLE quotes * REM * DON'T write !%1==! as, if PARAMETER = /?, it DOESN't work, too * REM ************************************************************************** if %1!==! goto Help REM ************************************************************************ REM * IF PARAMETER = '/?', JUMP to label "Help" for EXPLANATIONS * REM * * REM * DON'T write "%1"=="/?" as the PARAMETER may contain DOUBLE quotes * REM * DON'T write !%1==!/? as, if PARAMETER = /?, it DOESN't work, too * REM ************************************************************************ if %1!==/?! goto Help echo. REM ************************************************************* REM * The DECLARED variables are LOCAL during BATCH execution * REM ************************************************************* setlocal :Deb REM *********************************************************************************** REM * The CURRENT operation in %1 is EVALUATED and RESULT is STORED in VARIABLE %r% * REM *********************************************************************************** SET /a r=%1 REM ********************************************************************************** REM * The CURRENT operation %1 and its RESULT are displayed, with 10 LEADING Spaces * REM ********************************************************************************** echo. && echo %1 = %r% REM *********************************************************** REM * The NEXT typed PARAMETER becomes the FIRST one ( %1 ) * REM *********************************************************** shift REM ********************************************************************* REM * LOOP to the :Deb LABEL for a NEXT calculation if %1 is DEFINED * REM * JUMP to the END of the BATCH, if NO MORE calculation * REM * * REM * DON'T write "%1"=="" as the PARAMETER may contain DOUBLE quotes * REM * DON'T write this SYNTAX !%1==!? as well * REM ********************************************************************* if NOT %1!==! goto Deb echo. && goto :EOF :Help REM *************** REM * HELP menu * REM *************** cls echo. echo. echo ******************************************************************************* echo * BATCH file : CAL.BAT * echo * * echo * SYNTAX : cal[ Op_1[ Op_2[ Op_3[...[ Op_N]]]]] where Op_N = ONE or SEVERAL * echo * ~~~~~~ of the 18 OPERATIONS, below, by DECREASING order of PRIORITY : * echo * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * echo * * echo * () PARENTHESES Grouping * echo * * echo * a DECIMAL value of the DECIMAL number a = a * echo * 0a DECIMAL value of the OCTAL number a = a * echo * 0xa DECIMAL value of the HEXADECIMAL number a = a * echo * * echo * -a OPPOSITE number of number a * echo * ~a Bitwise COMPLEMENT of number a = -a - 1 * echo * !a LOGICAL NEGATION of number a = 0 if a ^<^> 0 * echo * = 1 if a = 0 * echo * * echo * a*b MULTIPLICATION of a by b = a*b * echo * a/b INTEGER QUOTIENT of the DIVISION of a by b = INT (a/b) * echo * a%%b REMAINDER of the DIVISION of a by b = a MOD b * echo * * echo * a+b ADDITION of a to b = a+b * echo * a-b SUBTRACTION of b from a = a-b * echo * * echo * "a<<b" LEFT Shift of b POSITIONS of a = a * 2^^b * echo * "a>>b" RIGHT Shift of b POSITIONS of a = a / 2^^b * echo * * echo * "a&b" Bitwise AND between a and b * echo * "a^b" Bitwise EXCLUSIVE OR between a and b * echo * "a|b" Bitwise OR between a and b * echo * * echo * "var=a" ASSIGNATION of var to a var = a * echo * "varOp=a" ASSIGNATION of (var BINARY Op. a) to a var = var Op. a * echo * ( Ex : x*=7 means x = x * 7 ) * echo * * echo * * echo * a, b, r = INTEGER, in range [-2,147,483,648 +2,147,483,647], with NOTATION * echo * * echo * - DECIMAL : the DIGITS of a NUMBER belong to INTERVAL [0-9] * echo * - HEXADECIMAL : the DIGITS of a NUMBER belong to INTERVAL [0-9] or [A-F] * echo * - OCTAL : the DIGITS of a NUMBER belong to INTERVAL [0-7] * echo * * echo * * echo * NOTES : - The VARIABLE r is the RESULT of the LAST calculation PERFORMED * echo * ~~~~~ ~~~~ * echo * ==) cal a r*r*r...*r ( b TIMES the VARIABLE r ) = a POWER b * echo * * echo * - If an EXPRESSION contains some SPACES, surround it with "......" * echo * * echo * Ex : * echo * * echo * cal "-9 +3" 011*9 "17|22" "12<<5-1" "v=r*=4" (0xba+v)/6 "17&22" "17^22" * echo * * echo ******************************************************************************* Now, in your active shortcuts.xml file, add the line, below, before the end of the </UserDefinedCommands> ••• </UserDefinedCommands> node <Command name="Multiple Calculations" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /c cal.bat $(CURRENT_WORD) && pause>NUL</Command>Close and re-start Notepad++
Make a normal selection of that example line "-9 +3" 011*9 "17|22" "12<<5-1" "v=r*=4" (0xba+v)/6 "17&22" "17^22"
Execute the menu command Run > Multiple calculations
Et voilà !!
Notes :
Once the results read and, possibly copied in the clipboard, just hit any key to close the MULTIPLE calculations window
If you don’t like the color of the DOS console, just change the parameters of the color command or delete it, in the batch file !
To copy the results to the clipboard :
Click anywhere, in that DOS window, with the right mouse button and choose the Select option
Now, by clicking and moving around the pointer you should define a rectangular block, in the same way as a rectangular N++ selection
Hit the Enter key to copy the contents of this block in the clipboard
Paste these contents anywhere, in Notepad++ !
Any selection must contain an even number of double quotes, if any. For instance, the selection 3+4 "5 - 9" 3*5 is correct, where as the selection of 3+4 "5 - 9 3*5 or 3+4 "5 - 9 are incorrect !
Note that a single shift, logical bitwise and assignation operation, as well as any expression containing space chars, needs to be surrounded with double quotes
Remark that the variable r always contains the result of the last performed operation !
Just test it. I hope you’ll like it !
Best Regards,
guy038
P.S. :
I finally don’t think that the conversion to ANSI is needed, as no character of this batch file is over \x{007f}, anyway !