Notepad++ ; Total Commander - konfiguracja
+ 20.02.2025 +19.05.2025
Fragmenty konfiguracji Notepad++ i Total Commander
Notepad++
- “%AppData%\Notepad++\shortcuts.xml”:
<UserDefinedCommands>
<Command name="Transl. Google PL to EN" Ctrl="no" Alt="no" Shift="no" Key="0">https://translate.google.com/?sl=pl&tl=en&text=$(CURRENT_WORD)</Command>
<Command name="Transl. Bing PL to EN" Ctrl="no" Alt="no" Shift="no" Key="0">https://www.bing.com/translator/?from=pl&to=en&text=$(CURRENT_WORD)</Command>
<Command name="Transl. DeepL PL to EN" Ctrl="no" Alt="no" Shift="no" Key="0">https://www.deepl.com/translator#pl/en/$(CURRENT_WORD)</Command>
ESLint NppExec
npp_console 1
eslint.cmd --fix-dry-run "$(CURRENT_DIRECTORY)\$(FILE_NAME)"
NppExec \ Console Output Filters \ HighLight:
[x] %LINE%:%CHAR%
(jakiś kolor)
Zob. też
TotalCommander
Od wersji TC 10.00 w menu startowym można dodawać tekst do każdego elementu listy %S, %R, %P%S, %T%R. Wyrażenie musi być wtedy w cudzysłowach, np. “%P%S.bak”. Od wersji 11.50 jest to rozszerzone do kolejnych dopisków, np. “beforename%Sbeforeext%Eafterext”. Wygląda na to, że teraz podając “%P%S” czy “%S” itp. uzyskuje się elementy listy WSZYSTKIE otoczone cudzysłowami (a nie tylko te zawierające spacje). Czyli nie ma problemu z plikiem, którego nazwa zawiera nawiasy otoczonym nawiasami jakiegoś polecenia, np. (…“a(b).txt”… ).
Zresztą teraz nawet w liście %S (bez cudzysłowów) także taki plik występuje jako “a(b).txt”, tj. otoczony cudzysłowami.
TC menu Start. Uwaga numeracja musi być ciągła. Można albo dopisać coś na końcu sekcji, albo wstawić trochę pustych poleceń i potem je zamienić w pliku. Tutaj numeracja specjalnie od 001, żeby łatwiej było zamieniać.
-
wincmd.ini sekcja
[user]
(zwykle na końcu pliku)
W poniższych wyrażeniach było poprzednio in (%S)
. Teraz zamieniłem to na in ("%S")
, ale testy dopiero trwają…
menu001=-__FileDate
menu002=For selection - synchronization of dates as in the 2nd panel
cmd002=cmd
param002=/k for %%G in ("%S") do py "%%FileDate%%\examples\copyFileDate.py" "%T%%~G" %%G
menu003=Date synchronization *.* (recurs.) as in the 2nd panel
cmd003=cmd
param003=/k py "%%FileDate%%\examples\copyAllDatesFromDir_recursive.py" "%T:~0,-1" "%P:~0,-1"
menu004=For selection - dates from names
cmd004=cmd
param004=/k for %%G in ("%S") do py "%%FileDate%%\examples\setDateFromName.py" %%G
menu005=Dates from names - *.* (recurs.)
cmd005=cmd
param005=/k py "%%FileDate%%\examples\setDatesFromNames_recursive.py" "%P:~0,-1"
menu006=For selection - dates from metadata
cmd006=cmd
param006=/k for %%G in ("%S") do py "%%FileDate%%\examples\setDateFromMetadata.py" %%G
menu007=Dates from metadata *.* (recurs.)
cmd007=cmd
param007=/k py "%%FileDate%%\examples\setDatesFromMetadata_recursive.py" "%P:~0,-1"
menu008=Date of folders on dates below it *.* (recurs.)
cmd008=cmd
param008=/k py "%%FileDate%%\examples\setFolderDates_recursive.py" "%P:~0,-1"
menu009=Date of folders on dates below it *.* (recurs.); remove empty
cmd009=cmd
param009=/k py "%%FileDate%%\examples\setFolderDates_recursive.py" "%P:~0,-1" -e
menu010=For selection - date from file in the 2nd panel
cmd010=cmd
param010=/k for %%G in ("%S") do py "%%FileDate%%\examples\copyFileDate.py" %T%M %%G
menu011=robocopy (rekurs.) - copy OLDER dates from the 2nd panel
cmd011=cmd
param011=/k robocopy /e /xn /timfix /copy:t /dcopy:t "%T." "%P."
menu012=--
.
- Konwersja plików (i pakowanie)
Konwersja wideo do h264:
menu001=-__ffmpeg
menu002=ffmpeg: zaznaczenie --> x264
cmd002=cmd
param002=/k for %%G in ("%S") do ( ffmpeg.exe -i %%G -c:v libx264 -crf 23 -preset slow -map_metadata 0 %%G.mp4 )
menu003=ffmpeg: zaznaczenie --> x264 i zachowaj datę
cmd003=cmd
param003=/k for %%G in ("%S") do ( ffmpeg.exe -i %%G -c:v libx264 -crf 23 -preset slow -map_metadata 0 %%G.mp4 && py "%%FileDate%%\examples\copyFileDate.py" %%G %%G.mp4 )
Można też potem zbiorczo ustawić daty plików z metadanych (zob. wyżej).
W przypadku, gdy metadane pliku nie zawierają daty, to data pliku się nie zmieni.
Gdy -crf 20
- wyższa jakość (i większe pliki).
Gdy jesteśmy pewni, że strumień audio jest zgodny z kontenerem MP4 to można go kopiować: -c:a copy
. W układzie jak teraz strumień audio jest konwertowany.
Na razie podczas konwersji w tych warunkach można uzyskać zwykle znacznie mniejszy plik wynikowy. Ale można też uzyskać większy (niestety). Może jeszcze dodawać pożądany bitrate, np. -b:v 5M
?
Zmniejszanie plików JPG (z transferem metadanych EXIF i daty pliku):
ffmpeg
nieźle zmniejsza rozmiar JPG. Aby przenieść metadane do nowego pliku trzeba chyba użyć ExifTool
.
Przykład dla plików *.jpg
w wybranym folderze, gdy wynik jest w folderze “mniejsze”
for %%F in (*.jpg) do (
ffmpeg.exe -i "%%F" -q:v 10 "mniejsze/%%F"
ExifTool.exe -overwrite_original -tagsfromfile "%%F" -exif "mniejsze/%%F"
py "%%FileDate%%\examples\copyFileDate.py" "%%F" "mniejsze/%%F" )
)
Choć zdania na temat jakości konwersji JPG za pomocą FFMPEG są podzielione. Zob. też Hurtowe zmniejszanie dużych obrazów *.jpg z użyciem IrfanCiew.
Instalacja ExifTool
jest trochę nietypowa:
-
Po wypakowaniu “exiftool-13.29…zip” z https://exiftool.org/
-
kopiuj “ExifTool(-k).exe” oraz folder “exiftool_files" do miejsca, które występuje w ścieżce w PATH.
-
Skopiuj “ExifTool(-k).exe” na “ExifTool.exe”
Tu rozbudowany skrypt mp4.cmd
do przetwarzania wszystkich plików wideo w folderze: …
@echo off
chcp 65001 >nul
:: Przetwarza przez FFPEG filmy folderze podanym jako parametr na x264 .MP4
:: Sprawdza, czy plik przetworzony jest mniejszy niż 3/4 źródłowego.
:: Jeśli tak to podmienia go. Plik przetworzony ma maskę: *.???.mp4
:: Pliki większe (źródłowe albo przetworzone) są na koniec w folderze "_big$".
:: Pomija już opracowane foldery, w których jest ".\_big$"
:: i nie przetwarza wewnątrz "_big$" ani "_tmp$"
echo:
echo ---"%~dp1"---
set "_dN=%~nx1"
echo --------"%_dN%"
if "%_dN%" EQU "_big$" ( goto :eof )
if "%_dN%" EQU "_tmp$" ( goto :eof )
pushd %1
if exist .\_big$ ( goto :end )
echo konwersja w: ++++"%cd%"
set "crf=23"
mkdir _tmp$
mkdir _big$
for %%G in (*.*) do ( call :subroutine "%%~G" "_tmp$\%%~G.mp4" )
rd _tmp$
GOTO :end
:: W rozmiarze są wycinane 3 cyfry od końca, żeby zadziało set/a dla plików większych od 2GB.
:subroutine
set "_s1_=%~z1"
set "_s1=%_s1_:~0,-3%"
echo %1 (%_s1% k) --^> %2
echo:
ffmpeg.exe -i %1 -v quiet -stats -c:v libx264 -crf %crf% -preset slow -map_metadata 0 %2
if errorlevel 1 ( EXIT /B )
:: To jeśli chcemy, żeby data była jak źródłowego
py "%FileDate%\examples\copyFileDate.py" %1 %2
set "_s2_=%~z2"
set "_s2=%_s2_:~0,-3%"
echo %_s1% #kB# %_s2%
set /a "_s34=%_s1%*3/4"
echo %_s34% ?^>=? %_s2%
if %_s34% GEQ %_s2% (
echo move %1 _big$
move %1 _big$
move %2 .
) else (
echo move %2 _big$
move %2 _big$
)
EXIT /B
:end
popd
Tu nakładka mp4_r.cmd
która wywołuje powyższy skrypt rekurencyjnie we wszystkich podfolderach: …
@echo off
chcp 65001 >nul
powercfg /change standby-timeout-ac 0
pushd %cd%
FOR /D /R %%G in (*.*) DO (
call f:\Tools\bin\mp4.cmd "%%G"
)
popd
:: gdy są do przetworzenia filmy także w głównym folderze:
call f:\Tools\bin\mp4.cmd "%cd%"
powercfg /change standby-timeout-ac 20
echo:
echo =================== KONIEC ===================
timeout /t 10
.
.
menu001=-__pandoc
menu002=plik -> (pl).docx
cmd002=cmd
param002=/k pandoc %N -o %N.docx --verbose -V lang=pl
menu003=plik -> (+MD.img).md
cmd003=cmd
param003=/k pandoc %N -o %N.md --verbose -t gfm --extract-media=./MD.img/ --lua-filter %%AppData%%/pandoc/img_style_width.lua
menu004=plik - > 1_...MD
cmd004=cmd
param004=/k pandoc %N -o 1_%N.md --verbose -t gfm --lua-filter %%AppData%%/pandoc/img_style_width.lua
menu005=plik -> HTML
cmd005=cmd
param005=/k pandoc -i %N -o %N.html --standalone -H %%appdata%%/pandoc/markdown-v.head.html -M lang=pl
menu006=plik -> 1_...HTML
cmd006=cmd
param006=/k pandoc -i %N -o 1_%N.html --embed-resources -H %%appdata%%/pandoc/markdown-v.head.html -M lang=pl
menu007=--
Wypakuj plik
markdown-v.head.html.zip
do foldera %appdata%\pandoc\
Jest to styl skopiowany z wtyczki “Markdown Viewer” dla Edge, który będzie wklejany do nagłówka HTML.
Uwaga: w paczkach md-it.cmd.zip
i markdown-v.head.html.zip
przed 2025-02-20 był błąd wielkości czcionki dla h3
- było 1.4px
, a powinno być 1.4em
.
W tym pliku ZIP zawarty jest też img_style_width.lua
…
%AppData%/pandoc/img_style_width.lua - zob. https://github.com/jgm/pandoc/issues/9032 :
-- pandoc --lua-filter for markdown size attributes as {style="width:... instead of {width="...
-- written by novice pandoc user - don't rely too much on it
if FORMAT:match 'markdown' then
function Image(el)
el.attributes.style = (el.attributes.style or '') ..
' width:' .. (el.attributes.width or 'auto') ..
'; height:' .. (el.attributes.height or 'auto') .. ';'
el.attributes.width = nil
el.attributes.height = nil
return el
end
end
.
Można używać tej biblioteki do uzyskania skrajnie prostego HTML z DOCX.
Z paczki mammothH.zip
wypakuj do foldera %appdata%\mmth\
plik
mammothH.py
…
Opcjonalny plik testowy mm_test.docx
można pominąć
import os
import shutil
import argparse
import mammoth # pip install mammoth
def cli_args():
parser = argparse.ArgumentParser(
usage='python mammothH.py FILE.DOCX',
description=f'''DOCX -> HTML (mammoth + HTML head)''',)
parser.add_argument('input_file')
parser.add_argument('-o', '--output',
help='or default FILE.docx_.HTML')
parser.add_argument('-i', '--img-dir', default='',
help='directory for image files or (default) images are included inline in HTML')
parser.add_argument('-l', '--lang', default='pl-PL', help='e.g.: "pl-PL" (default)')
parser.add_argument('-s', '--td_style', nargs='+', default=(':nth-child(1)','color: DarkMagenta;', ':nth-child(3n+4)','color: Blue;'),
help='td_sel1, style1, ... e.g.: --td_style ":nth-child(1)" "color: DarkMagenta;" ":nth-child(3n+4)" "color: Blue;"' )
return parser.parse_args()
def main ():
args=cli_args() ; print(f'{args=}') #$# py 3.8+
out_suffix='._.html' #to add if not --output
output_file = args.output or f'{args.input_file}{out_suffix}' ; print(f'{output_file=}') #$#
if not args.img_dir:
convert_image = None
else:
if not os.path.exists(args.img_dir):
os.makedirs(args.img_dir) ; print(f'os.makedirs {args.img_dir}') #$#
convert_image = mammoth.images.img_element(ImageWriter(args.img_dir))
tdSel_style = list(zip(args.td_style[::2], args.td_style[1::2])) if args.td_style else [] \
; print(f'{tdSel_style=}') #$#
messages = docx_to_html(args.input_file, output_file, args.lang, convert_image, tdSel_style)
print(f'{messages=}\n.')
def docx_to_html(input_file, output_file, lang='', convert_image=None, tdSel_style=[]):
with open(input_file, "rb") as docx_file:
result = mammoth.convert_to_html(docx_file, convert_image=convert_image)
html = (f'''<!DOCTYPE html><html><head><meta charset="utf-8"/>
<style>
body {{ font-family: "Segoe UI","Noto Sans",Helvetica,Arial,sans-serif; }}
{' '.join([f'td{selector}, th{selector} {{{style}}}' for (selector,style) in tdSel_style])}
table {{border-collapse: collapse; }}
th, td {{border: 1px solid grey; font-size: 0.85em; padding:2px;}}
td p {{margin: 0px;}}
</style>
<title>{output_file}</title>
</head><body{f' lang="{lang}"' if lang else ''}>
{result.value}
</body></html>
''')
with open(output_file, "w", encoding="utf-8") as f:
f.write(html)
return result.messages
class ImageWriter(object):
# Python___\Lib\site-packages\mammoth\cli.py
def __init__(self, output_dir):
self._output_dir = output_dir
self._image_number = 1
def __call__(self, element):
extension = element.content_type.partition("/")[2]
image_filename = f"{self._image_number}.{extension}"
img_path = os.path.join(self._output_dir, image_filename)
with open(img_path, "wb") as image_dest:
with element.open() as image_source:
shutil.copyfileobj(image_source, image_dest)
self._image_number += 1
return {"src": img_path}
if __name__ == "__main__":
main ()
Wiersz cmd: python mammothH.py FILE.DOCX
…
DOCX -> HTML (mammoth + HTML head)
usage: python mammothH.py FILE.DOCX
options:
-h, --help show this help message and exit
-o OUTPUT, --output OUTPUT
or default FILE.docx_.HTML
-i IMG_DIR, --img-dir IMG_DIR
directory for image files or (default) images are included inline in HTML
-l LANG, --lang LANG e.g.: "pl-PL" (default)
-s TD_STYLE [TD_STYLE ...], --td_style TD_STYLE [TD_STYLE ...]
e.g.: --td_style ":nth-child(1)" "color: DarkMagenta;" ":nth-child(3n+4)" "color: Blue;"
.
menu001=-__mammoth docx->html
menu002=docx -> html
cmd002=cmd
param002=/k py %%AppData%%/mmth/mammothH.py %N
menu003=docx -> html (+d.img)
cmd003=cmd
param003=/k py %%AppData%%/mmth/mammothH.py %N --img-dir d.img
menu004=--
.
.
menu001=-ExifDate
menu002=ExifDate z daty pliku (zaznaczenie)
cmd002=exiftool.exe
param002=-k -P "-DateTimeOriginal<FileModifyDate" -if "$exif:DateTimeOriginal" %S
menu003="ExifDate (TWORZONE!) z daty pliku (zaznaczenie) "
cmd003=exiftool.exe
param003=-k -P "-DateTimeOriginal<FileModifyDate" %S
menu004=ExifDate do daty pliku (zaznaczenie)
cmd004=exiftool.exe
param004=-k -P "-exif:DateTimeOriginal>FileModifyDate" -if "$exif:DateTimeOriginal" %S
menu005=--
.
.
- mklink
menu001=echo mklink /d (1 folder w drugim oknie)
cmd001=cmd
param001=/k echo "::copy&AdmRun:: cd %P && mklink /d %M %T%M ::"