Displaying Control character [SOH] as blank space or else in Notepad++

前端 未结 2 2085
北恋
北恋 2021-02-08 23:52

I am debugging/monitoring a log file containing extensively the control character [SOH]
This makes logs barely unreadable (well, to me, on NP++, but it has to be this way as

相关标签:
2条回答
  • 2021-02-09 00:10

    Introduction

    Notepad++ is using Scintilla for the editor component. Scintilla has a function SCI_SETCONTROLCHARSYMBOL(int symbol) where you can set the character that will be used for the control characters. From the Scintilla Docs they describe the functionality:

    SCI_SETCONTROLCHARSYMBOL(int symbol)

    SCI_GETCONTROLCHARSYMBOL

    By default, Scintilla displays control characters (characters with codes less than 32) in a rounded rectangle as ASCII mnemonics: "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US". These mnemonics come from the early days of signaling, though some are still used (LF = Line Feed, BS = Back Space, CR = Carriage Return, for example).

    You can choose to replace these mnemonics by a nominated symbol with an ASCII code in the range 32 to 255. If you set a symbol value less than 32, all control characters are displayed as mnemonics. The symbol you set is rendered in the font of the style set for the character. You can read back the current symbol with the SCI_GETCONTROLCHARSYMBOL message. The default symbol value is 0.

    There's probably a "right" way to do this, but I'm going to give you a very hack-y way of accomplishing this.

    Technique

    Edit the file %APPDATA%\Notepad++\shortcuts.xml using anything EXCEPT Notepad++.

    Add the following to the <Macros> section of the file to manually add a macro:

    <Macro name="RemoveControl" Ctrl="no" Alt="no" Shift="no" Key="0">
            <Action type="0" message="2388" wParam="32" lParam="0" sParam="" />
    </Macro>
    

    Note that you can set a shortcut with the Ctrl, Alt, Shift and Key attributes. The wParam will set the character which will be used instead of the spelled-out codes. In this case, code 32 is a Space in the ASCII standard. Message 2388 is the constant for the SCI_SETCONTROLCHARSYMBOL value.

    Save the file

    Use

    Now you can change the behavior of Notepad++ at runtime. To use this do the following

    Open Notepad++ Simply open the editor. If you open a file directly (ie. Edit with Notepad++ context menu) you will get weird behavior.

    Activate the macro from the menu (or your shortcut). If there's a way to automate running a macro on startup it would be nice to add it here

    Open your file. Nothing new here

    Notes

    1. The positions with the control character will still be inverted (white text on black background by default).
    2. If you activate the macro when you have a document open it will not take effect right away. You'll have to do something to force the window to redraw.
    3. A look at the Scintilla.h file may open up other options which could be similarly exploited.
    0 讨论(0)
  • 2021-02-09 00:17

    If you want to avoid these character in the future select Session Logging feature, as such in Putty, Log "printable output" only. This will take out all the unnecessary Scintilla characters.

    Regarding Putty (cached link below):

    4.2 The Logging panel

    The Logging configuration panel allows you to save log files of your PuTTY sessions, for debugging, analysis or future reference.

    The main option is a radio-button set that specifies whether PuTTY will log anything at all. The options are

    +"Logging turned off completely". This is the default option; in this mode PuTTY will not create a log file at all.

    +"Log printable output only". In this mode, a log file will be created and written to, but only printable text will be saved into it. The various terminal control codes that are typically sent down an interactive session alongside the printable text will be omitted. This might be a useful mode if you want to read a log file in a text editor and hope to be able to make sense of it.

    +"Log all session output". In this mode, everything sent by the server into your terminal session is logged. If you view the log file in a text editor, therefore, you may well find it full of strange control characters. This is a particularly useful mode if you are experiencing problems with PuTTY's terminal handling: you can record everything that went to the terminal, so that someone else can replay the session later in slow motion and watch to see what went wrong.

    +"Log SSH packet data". In this mode (which is only used by SSH connections), the SSH message packets sent over the encrypted connection are written to the log file. You might need this to debug a network-level problem, or more likely to send to the PuTTY authors as part of a bug report. BE WARNED that if you log in using a password, the password will appear in the log file, so be sure to edit it out before sending the log file to anyone else!

    LINK: http://webcache.googleusercontent.com/search?q=cache:L0M6HnWRvowJ:the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter4.html+&cd=1&hl=en&ct=clnk&gl=us

    0 讨论(0)
提交回复
热议问题