How to get text and/or scintilla handle for background file?

  • I fear I may have a pretty difficult problem.

    I’m writing a plugin and I need to get the text of all files when notepad++ open and track their changes. The problem is that when a file is opened it is not the “current Scintilla” when the NPPN_FILEOPENED notification is sent (unless it was the first file opened when you start NPP). Replace across documents also causes problems, background files are obviously not the current Scintilla (in fact, calling NPPM_GETCURRENTSCINTILLA during a multi-document replace seems to return -1 for all documents, even the one currently in view).

    I’ve done a lot of digging around the Scintilla documentation and the NPP source code. I see that Scintilla has a notion of a Document, if I had one of these I could create a new Scintilla (using NPPM_CREATESCINTILLAHANDLE) referencing the background document use that to get the text. NPP does this in some of it’s functions that manipulate files in the background, including the function to load a file. NPP itself has a notion of a Buffer, which contains a reference to the backing Document. During the NPPN_FILEOPENED I can get the Buffer ID for the background document (I also use this to get the filename), but I don’t see anyway to go from a Buffer ID to a Document from the context of a plugin.

    In short, what I need is a way to get the text, or preferably a Scintilla handle, for a background file. Does anyone know how to tackle this problem?

  • @Derek-Brown

    If I understand correctly then you are looking for something like this.

  • It looks like that only gets the filenames? Unless I am missing something. I want to get the actual data in the files, preferably in the form of a Scintilla handle.

  • @Derek-Brown

    It does a bit more, but yes, you do not get the contents of the file.
    But if you have the file name, you can read the content, and once the buffer is activated,
    which is indicated by the buffer ID, you can compare the current text with the text you read initially.
    Or am I missing something?

  • I’m not sure I follow you. Are you suggesting to use the filename to read the file directly (using Windows APIs or something)? That won’t always work: If session backups are enabled you can have an unsaved new file backed up. When you restart NPP it’s filename will be something like “new 1”, not an actual file on disk (I’m sure the backup file exists somewhere, but the filename does not point you to it). Likewise, if an existing file is unsaved then the contents that are opened when you restart NPP will be different from the contents on disk at the given filename.

    And sure you could compare what you loaded from disk with the contents of the buffer when it becomes active, but then I may as well just wait until the buffer is active to read anything at all. And I could write my plugin this way, but it would be much better and simpler if I could track the state of all buffers whether they were active or not.

  • @Derek-Brown

    Afaik, there is no direct way to read the loaded buffers.
    Sorry for the confusion, but I thought this was clear and you are looking for an alternative.

  • I’m hoping that someone might know a clever workaround or hack, or that I might have missed something.

  • Hack? It’s easy to implement in the source code.

  • This post is deleted!

  • @KnIfER

    A HTML previewer plugin requires such feature

    The existing Preview HTML plugin works just fine as is, because expecting that the user saves ancilliary files (like a CSS file accompanying an HTML file) is not an onerus expectation of the user.

    It’s easy to implement in the source code.

    Like other regulars on this forum, I am amazed at how often phrases like that are bandied about. If you have the skills to implement such a fix easily, then implement it and provide a Pull Request to get it incorporated; if you have the skills but are unwilling to do the work, then it is your own fault the codebase isn’t updated; if you don’t have the skills, then you are not actually in a position to judge how easy or difficult the task might be.

    Besides, you have been here long enough to know (or at least long enough to have had opportunity to learn) that if you have a feature request, this forum is not the place to make it official. You can discuss topics here, and we’re happy to answer if we know such a feature already exists or suggest workarounds if they don’t; and it’s a great place for finding out if others think your feature request is a good idea or not; but in the end, if no one has put in an official feature request, as explained in one of this forum’s FAQs, then it’s just discussion and not an official request.

  • This post is deleted!

  • @PeterJones

    You words are so long and I can bearly understand all of them. XD

    Anyway , when I am saying something is easy to achieve, I probably have already achieved such goals or at least some working prototypes, that’s my style.

    Here is a short video of what it shall look like —— the two “chained updating” demo. In the example, when the shader source file is modified, the web-based shadertory preview updates immediately.

    Please, don’t let the imagination limit you.

  • @KnIfER said in How to get text and/or scintilla handle for background file?:

    You words are so long and I can bearly understand all of them.

    Oh, boy. LOL

    Here is a short video of what it shall look like

    Why does anyone care about this?

    @KnIfER I’ve read a good number of your postings here, as well as on github, and I’m left with, well, a general feeling of confusion about what you are trying to communicate, in pretty much all of your postings.

    At least @PeterJones writes with a style and length to make his information understandable.

  • This post is deleted!

  • This post is deleted!

  • @Alan-Kilborn
    You are being off-topic for your comments. just leave and dont reply if you don’t like @Derek Brown’s ideas about NotepadPlusplus and scintilla .

    Well , I styled my text this time, if you say.

  • @KnIfER

    Yep, you continue to make zero sense, as far as I can see; anyone else make any sense out of what this person is saying?
    It’s a shame because you probably have some good ideas to share.

  • Some alien person:

    Why does anyone care about this ( the video )?

    This guy has never understood the subject of this article. The video accurately demostrates the possibility of “getting text and/or scintilla handle for background file”.

  • This post is deleted!

  • @Alan-Kilborn Yep, you continue to reply your none-constructive words; anyone else make any sense out of what this persn and it’s crap?

Log in to reply