• Login
Community
  • Login

How to get file paths from all open tabs

Scheduled Pinned Locked Moved General Discussion
7 Posts 5 Posters 3.2k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A
    Alan Kilborn
    last edited by Jul 6, 2021, 5:57 PM

    I needed to get the filepaths from all of my open tabs into a text file. I was stumped for a second and thought I must have a script to do this somewhere – a quick search turned up nothing.

    Then I thought of a relatively new feature of N++ that could help: The ability to copy pathnames from the Search results window.

    Here’s how I did it:

    • if Search results panel is open, right click in it, choose Clear all from the popup menu
    • run a Find All in All Opened Documents search, with following setup: Find what = \z, Search mode = Regular expression
    • right click in the Search results panel, choose Copy Pathname(s) from the popup menu
    • paste the pathnames wherever desired

    Here’s what it looks like to do it (red dot = right click point):

    3f3baa98-4c0e-45ec-b43d-8ff0ef34718c-image.png

    and the result in the clipboard (after selecting the command in yellow) was:

    new 1
    new 3
    

    Of course, if these had been real, saved files in the file system, we’d see pathnames here instead of new 1 and new 3.

    M 1 Reply Last reply Jul 7, 2021, 2:50 PM Reply Quote 4
    • M
      Michael Vincent @Alan Kilborn
      last edited by Jul 7, 2021, 2:50 PM

      @Alan-Kilborn

      In a “Perfect World ” everyone would use a scripting language like NppExec to do this sort of thing, “But It’s Alright ” if not. I had a “Couple Days Off ” with the holiday so while I wasn’t “Workin’ for a Livin’ ”, I poured my “Heart and Soul ” into this script:

      ::buffers
      IF "$(ARGC)">"1" THEN
          IF "$(ARGV[1])"~="--gui" THEN
              NPP_MENUCOMMAND Window\Window...
          ELSE IF "$(ARGV[1])"~="--id" THEN
              NPP_SENDMSG NPPM_GETCURRENTBUFFERID 0 0
              ECHO $(MSG_RESULT)
          ELSE IF "$(ARGV[1])"~="help" THEN
              GOTO USAGE
          ENDIF
      ENDIF
      
      NPP_SENDMSG NPPM_GETNBOPENFILES 0 0
      SET LOCAL BUFFERS = $(MSG_RESULT)
      SET LOCAL START = 1
      
      :LOOP
      SET LOCAL LINE = 0
      IF "$(#$(START))"=="$(FULL_CURRENT_PATH)" THEN
          SET LOCAL LINE ~ $(CURRENT_LINE) + 1
      ENDIF
      IF "$(ARGC)">"1" THEN
          SET LOCAL TEST ~ strfind "$(#$(START))" "$(ARGV[1])"
          IF "$(TEST)"!="-1" THEN
              ECHO $(#$(START)):$(LINE):
          ENDIF
      ELSE
          ECHO $(#$(START)):$(LINE):
      ENDIF
      IF "$(START)"=="$(BUFFERS)" GOTO END
      SET LOCAL START ~ $(START) + 1
      GOTO LOOP
      
      :USAGE
      ECHO Usage:
      ECHO   \$(ARGV[0]) [F]   = list filename for all current buffers, in clickable list, matching optional filter F
      ECHO   \$(ARGV[0]) --id  = current buffer ID
      ECHO   \$(ARGV[0]) --gui = open 'Window\Window...' menu item
      
      :END
      

      Cheers.

      1 Reply Last reply Reply Quote 4
      • M
        mere-human
        last edited by mere-human Jul 7, 2021, 8:03 PM Jul 7, 2021, 8:03 PM

        I have another idea. We could make the text from Window > Windows copyable.
        It already supports multi-select. The only thing missing is Ctrl+C and put a list of of file paths to clipboard.50b9d3ad-dc4d-4782-a022-78ded4f49ea8-image.png
        What do you think?

        A A 2 Replies Last reply Jul 7, 2021, 11:31 PM Reply Quote 5
        • A
          astrosofista @mere-human
          last edited by Jul 7, 2021, 11:31 PM

          @mere-human said in How to get file paths from all open tabs:

          What do you think?

          I think it would be useful, of course it would, so much so that last year I made an AutoHotkey script to get some information like that. From that script I extracted the following:

          F4::
          WinMenuSelectItem,A,,12&,Windows...
          WinActivate ahk_exe notepad++.exe ahk_class Notepad++
          if WinExist("Windows") {
          	ControlGet, FilesVar, List,, SysListView321, A
          	Sleep, 300                      ; needed if there are many files open
          	WinClose
          } else {
          	MsgBox, Failed!
          	return
          }
          
          Output := ""
          Template := "{2}\{1}`n"
          
          For _, files in StrSplit(FilesVar, "`n") {
          	ArrFiles := StrSplit(files, "`t")
          	Output .= (ArrFiles[2] = "") ? ArrFiles[1] "`n" : Format(Template, ArrFiles*)
          }
          
          MsgBox, % Clipboard := Output
          return
          
          /* Output:
          
          new 1*
          new 2
          D:\Applications\npp.7.9.5.portable.x64\change.log
          D:\Applications\npp.7.9.5.portable.x64\readme.txt
          D:\Applications\npp.7.9.5.portable.x64\license.txt
           */
          

          BR

          1 Reply Last reply Reply Quote 3
          • T
            TroshinDV
            last edited by Jul 8, 2021, 9:44 AM

            Using jN plugin …

            // trdm  2021-07-08 12:30:21 
            function test1() {
            	//debugger;
            	var vText = '';
            	var vFiles = Editor.currentView.files;
            	for(var i = 0; i<vFiles.length; i++) {
            		if(vText.length == 0) {
            			vText = vFiles[i];
                    } else 
            			vText = vText + '\r\n'+ vFiles[i];
                }
            	alert(vText);
            	var vFso = new ActiveXObject("Scripting.FileSystemObject");
            	var vTxt = vFso.CreateTextFile("c:\\testfile.txt",true);
            	vTxt.Write(vText);
            	vTxt.Close();
            }
            
            
            1 Reply Last reply Reply Quote 1
            • M
              mere-human
              last edited by Jul 8, 2021, 6:57 PM

              https://github.com/notepad-plus-plus/notepad-plus-plus/issues/10123

              1 Reply Last reply Reply Quote 2
              • A
                Alan Kilborn @mere-human
                last edited by Jul 15, 2021, 10:51 AM

                @mere-human said in How to get file paths from all open tabs:

                I have another idea. We could make the text from Window > Windows copyable.
                It already supports multi-select. The only thing missing is Ctrl+C and put a list of of file paths to clipboard.

                Or how about making it even more explicit and having an additional button in the UI: Copy Pathnames. It could operate on all if nothing is selected, or only what is selected.

                The Ctrl+c idea as the only way of doing it is fine, but someone will come along and want just the “name” part of the files to be copied. Thus I’d suggest a dedicated UI element for paths and second UI button Copy Names.

                1 Reply Last reply Reply Quote 2
                6 out of 7
                • First post
                  6/7
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors