Made the code dealing with "device:" and "remote:" file names generally available in FileSystemUtilities. eric7

Wed, 06 Dec 2023 14:23:36 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 06 Dec 2023 14:23:36 +0100
branch
eric7
changeset 10388
a34ce7f42e8b
parent 10387
8cf53170e290
child 10389
b432544fe075

Made the code dealing with "device:" and "remote:" file names generally available in FileSystemUtilities.

src/eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.QScintilla.Editor.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.SystemUtilities.FileSystemUtilities.html file | annotate | diff | comparison | revisions
src/eric7/MicroPython/MicroPythonFileManagerWidget.py file | annotate | diff | comparison | revisions
src/eric7/QScintilla/Editor.py file | annotate | diff | comparison | revisions
src/eric7/SystemUtilities/FileSystemUtilities.py file | annotate | diff | comparison | revisions
src/eric7/ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
--- a/src/eric7/APIs/Python3/eric7.api	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/APIs/Python3/eric7.api	Wed Dec 06 14:23:36 2023 +0100
@@ -8588,15 +8588,12 @@
 eric7.QScintilla.Editor.Editor.insertDocstring?4()
 eric7.QScintilla.Editor.Editor.isClone?4(editor)
 eric7.QScintilla.Editor.Editor.isCythonFile?4()
-eric7.QScintilla.Editor.Editor.isDeviceFile?4()
 eric7.QScintilla.Editor.Editor.isJavascriptFile?4()
 eric7.QScintilla.Editor.Editor.isLastEditPositionAvailable?4()
-eric7.QScintilla.Editor.Editor.isLocalFile?4()
 eric7.QScintilla.Editor.Editor.isMicroPythonFile?4()
 eric7.QScintilla.Editor.Editor.isProjectFile?4()
 eric7.QScintilla.Editor.Editor.isPy3File?4()
 eric7.QScintilla.Editor.Editor.isPyFile?4()
-eric7.QScintilla.Editor.Editor.isRemoteFile?4()
 eric7.QScintilla.Editor.Editor.isRubyFile?4()
 eric7.QScintilla.Editor.Editor.isSpellCheckRegion?4(pos)
 eric7.QScintilla.Editor.Editor.joinLines?4()
@@ -9816,9 +9813,12 @@
 eric7.SystemUtilities.DesktopUtilities.isKdeDesktop?4()
 eric7.SystemUtilities.DesktopUtilities.isWaylandSession?4()
 eric7.SystemUtilities.DesktopUtilities.sessionType?4()
+eric7.SystemUtilities.FileSystemUtilities._DeviceFileMarker?8
+eric7.SystemUtilities.FileSystemUtilities._RemoteFileMarker?8
 eric7.SystemUtilities.FileSystemUtilities.absolutePath?4(path, start)
 eric7.SystemUtilities.FileSystemUtilities.absoluteUniversalPath?4(path, start)
 eric7.SystemUtilities.FileSystemUtilities.compactPath?4(path, width, measure=len)
+eric7.SystemUtilities.FileSystemUtilities.deviceFileName?4(fileName)
 eric7.SystemUtilities.FileSystemUtilities.direntries?4(path, filesonly=False, pattern=None, followsymlinks=True, checkStop=None, ignore=None, )
 eric7.SystemUtilities.FileSystemUtilities.findVolume?4(volumeName, findAll=False)
 eric7.SystemUtilities.FileSystemUtilities.fromNativeSeparators?4(path)
@@ -9828,15 +9828,20 @@
 eric7.SystemUtilities.FileSystemUtilities.getUserMounts?4()
 eric7.SystemUtilities.FileSystemUtilities.getVolumeName?4(diskName)
 eric7.SystemUtilities.FileSystemUtilities.getWindowsExecutablePath?4(file)
+eric7.SystemUtilities.FileSystemUtilities.isDeviceFileName?4(fileName)
 eric7.SystemUtilities.FileSystemUtilities.isDrive?4(path)
 eric7.SystemUtilities.FileSystemUtilities.isExecutable?4(exe)
+eric7.SystemUtilities.FileSystemUtilities.isPlainFileName?4(fileName)
+eric7.SystemUtilities.FileSystemUtilities.isRemoteFileName?4(fileName)
 eric7.SystemUtilities.FileSystemUtilities.isinpath?4(file)
 eric7.SystemUtilities.FileSystemUtilities.joinext?4(prefix, ext)
 eric7.SystemUtilities.FileSystemUtilities.normabsjoinpath?4(a, *p)
 eric7.SystemUtilities.FileSystemUtilities.normcaseabspath?4(path)
 eric7.SystemUtilities.FileSystemUtilities.normcasepath?4(path)
 eric7.SystemUtilities.FileSystemUtilities.normjoinpath?4(a, *p)
+eric7.SystemUtilities.FileSystemUtilities.plainFileName?4(fileName)
 eric7.SystemUtilities.FileSystemUtilities.relativeUniversalPath?4(path, start)
+eric7.SystemUtilities.FileSystemUtilities.remoteFileName?4(fileName)
 eric7.SystemUtilities.FileSystemUtilities.samefilepath?4(f1, f2)
 eric7.SystemUtilities.FileSystemUtilities.samepath?4(f1, f2)
 eric7.SystemUtilities.FileSystemUtilities.splitPath?4(name)
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/Documentation/Help/source.qhp	Wed Dec 06 14:23:36 2023 +0100
@@ -4859,15 +4859,12 @@
       <keyword name="Editor.insertDocstring" id="Editor.insertDocstring" ref="eric7.QScintilla.Editor.html#Editor.insertDocstring" />
       <keyword name="Editor.isClone" id="Editor.isClone" ref="eric7.QScintilla.Editor.html#Editor.isClone" />
       <keyword name="Editor.isCythonFile" id="Editor.isCythonFile" ref="eric7.QScintilla.Editor.html#Editor.isCythonFile" />
-      <keyword name="Editor.isDeviceFile" id="Editor.isDeviceFile" ref="eric7.QScintilla.Editor.html#Editor.isDeviceFile" />
       <keyword name="Editor.isJavascriptFile" id="Editor.isJavascriptFile" ref="eric7.QScintilla.Editor.html#Editor.isJavascriptFile" />
       <keyword name="Editor.isLastEditPositionAvailable" id="Editor.isLastEditPositionAvailable" ref="eric7.QScintilla.Editor.html#Editor.isLastEditPositionAvailable" />
-      <keyword name="Editor.isLocalFile" id="Editor.isLocalFile" ref="eric7.QScintilla.Editor.html#Editor.isLocalFile" />
       <keyword name="Editor.isMicroPythonFile" id="Editor.isMicroPythonFile" ref="eric7.QScintilla.Editor.html#Editor.isMicroPythonFile" />
       <keyword name="Editor.isProjectFile" id="Editor.isProjectFile" ref="eric7.QScintilla.Editor.html#Editor.isProjectFile" />
       <keyword name="Editor.isPy3File" id="Editor.isPy3File" ref="eric7.QScintilla.Editor.html#Editor.isPy3File" />
       <keyword name="Editor.isPyFile" id="Editor.isPyFile" ref="eric7.QScintilla.Editor.html#Editor.isPyFile" />
-      <keyword name="Editor.isRemoteFile" id="Editor.isRemoteFile" ref="eric7.QScintilla.Editor.html#Editor.isRemoteFile" />
       <keyword name="Editor.isRubyFile" id="Editor.isRubyFile" ref="eric7.QScintilla.Editor.html#Editor.isRubyFile" />
       <keyword name="Editor.isSpellCheckRegion" id="Editor.isSpellCheckRegion" ref="eric7.QScintilla.Editor.html#Editor.isSpellCheckRegion" />
       <keyword name="Editor.joinLines" id="Editor.joinLines" ref="eric7.QScintilla.Editor.html#Editor.joinLines" />
@@ -19868,6 +19865,7 @@
       <keyword name="deepgetattr" id="deepgetattr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#deepgetattr" />
       <keyword name="desktopName" id="desktopName" ref="eric7.SystemUtilities.DesktopUtilities.html#desktopName" />
       <keyword name="determinePythonVersion" id="determinePythonVersion" ref="eric7.SystemUtilities.PythonUtilities.html#determinePythonVersion" />
+      <keyword name="deviceFileName" id="deviceFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#deviceFileName" />
       <keyword name="direntries" id="direntries" ref="eric7.SystemUtilities.FileSystemUtilities.html#direntries" />
       <keyword name="displayString" id="displayString" ref="eric7.Plugins.PluginVcsGit.html#displayString" />
       <keyword name="displayString" id="displayString" ref="eric7.Plugins.PluginVcsMercurial.html#displayString" />
@@ -20270,6 +20268,7 @@
       <keyword name="isCondaAvailable" id="isCondaAvailable" ref="eric7.CondaInterface.__init__.html#isCondaAvailable" />
       <keyword name="isConfigured" id="isConfigured" ref="eric7.Preferences.__init__.html#isConfigured" />
       <keyword name="isCupsAvailable" id="isCupsAvailable" ref="eric7.WebBrowser.WebBrowserView.html#isCupsAvailable" />
+      <keyword name="isDeviceFileName" id="isDeviceFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#isDeviceFileName" />
       <keyword name="isDrive" id="isDrive" ref="eric7.SystemUtilities.FileSystemUtilities.html#isDrive" />
       <keyword name="isEllipsis" id="isEllipsis" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isEllipsis" />
       <keyword name="isExecutable" id="isExecutable" ref="eric7.DebugClients.Python.DebugUtilities.html#isExecutable" />
@@ -20282,7 +20281,9 @@
       <keyword name="isMacPlatform" id="isMacPlatform" ref="eric7.SystemUtilities.OSUtilities.html#isMacPlatform" />
       <keyword name="isNameConstant" id="isNameConstant" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNameConstant" />
       <keyword name="isNumber" id="isNumber" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNumber" />
+      <keyword name="isPlainFileName" id="isPlainFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#isPlainFileName" />
       <keyword name="isPythonProgram" id="isPythonProgram" ref="eric7.DebugClients.Python.DebugUtilities.html#isPythonProgram" />
+      <keyword name="isRemoteFileName" id="isRemoteFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#isRemoteFileName" />
       <keyword name="isString" id="isString" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isString" />
       <keyword name="isSupportedType" id="isSupportedType" ref="eric7.Utilities.ClassBrowsers.__init__.html#isSupportedType" />
       <keyword name="isTextFile" id="isTextFile" ref="eric7.Utilities.MimeTypes.html#isTextFile" />
@@ -20405,6 +20406,7 @@
       <keyword name="pixmapFromByteArray" id="pixmapFromByteArray" ref="eric7.WebBrowser.Tools.WebBrowserTools.html#pixmapFromByteArray" />
       <keyword name="pixmapToByteArray" id="pixmapToByteArray" ref="eric7.WebBrowser.Tools.WebBrowserTools.html#pixmapToByteArray" />
       <keyword name="pixmapToDataUrl" id="pixmapToDataUrl" ref="eric7.WebBrowser.Tools.WebBrowserTools.html#pixmapToDataUrl" />
+      <keyword name="plainFileName" id="plainFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#plainFileName" />
       <keyword name="prepareDocumentationViewerHtmlDocWarningDocument" id="prepareDocumentationViewerHtmlDocWarningDocument" ref="eric7.UI.CodeDocumentationViewerTemplate.html#prepareDocumentationViewerHtmlDocWarningDocument" />
       <keyword name="prepareDocumentationViewerHtmlDocument" id="prepareDocumentationViewerHtmlDocument" ref="eric7.UI.CodeDocumentationViewerTemplate.html#prepareDocumentationViewerHtmlDocument" />
       <keyword name="prepareDocumentationViewerHtmlWarningDocument" id="prepareDocumentationViewerHtmlWarningDocument" ref="eric7.UI.CodeDocumentationViewerTemplate.html#prepareDocumentationViewerHtmlWarningDocument" />
@@ -20468,6 +20470,7 @@
       <keyword name="register_check" id="register_check" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#register_check" />
       <keyword name="rehashPassword" id="rehashPassword" ref="eric7.Utilities.crypto.py3PBKDF2.html#rehashPassword" />
       <keyword name="relativeUniversalPath" id="relativeUniversalPath" ref="eric7.SystemUtilities.FileSystemUtilities.html#relativeUniversalPath" />
+      <keyword name="remoteFileName" id="remoteFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#remoteFileName" />
       <keyword name="removeMarkers" id="removeMarkers" ref="eric7.UI.CompareDialog.html#removeMarkers" />
       <keyword name="removeProjectBrowsers" id="removeProjectBrowsers" ref="eric7.Preferences.__init__.html#removeProjectBrowsers" />
       <keyword name="removeQuotesFromArgs" id="removeQuotesFromArgs" ref="eric7.DebugClients.Python.DebugUtilities.html#removeQuotesFromArgs" />
--- a/src/eric7/Documentation/Source/eric7.QScintilla.Editor.html	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/Documentation/Source/eric7.QScintilla.Editor.html	Wed Dec 06 14:23:36 2023 +0100
@@ -1439,10 +1439,6 @@
 <td>Public method to return a flag indicating a Cython file.</td>
 </tr>
 <tr>
-<td><a href="#Editor.isDeviceFile">isDeviceFile</a></td>
-<td>Public method to check, if the editor contains a MCU device file.</td>
-</tr>
-<tr>
 <td><a href="#Editor.isJavascriptFile">isJavascriptFile</a></td>
 <td>Public method to return a flag indicating a Javascript file.</td>
 </tr>
@@ -1451,10 +1447,6 @@
 <td>Public method to check, if a last edit position is available.</td>
 </tr>
 <tr>
-<td><a href="#Editor.isLocalFile">isLocalFile</a></td>
-<td>Public method to check, if the editor contains a local file.</td>
-</tr>
-<tr>
 <td><a href="#Editor.isMicroPythonFile">isMicroPythonFile</a></td>
 <td>Public method to return a flag indicating a MicroPython file.</td>
 </tr>
@@ -1471,10 +1463,6 @@
 <td>Public method to return a flag indicating a Python (2 or 3) file.</td>
 </tr>
 <tr>
-<td><a href="#Editor.isRemoteFile">isRemoteFile</a></td>
-<td>Public method to check, if the editor contains a remote file.</td>
-</tr>
-<tr>
 <td><a href="#Editor.isRubyFile">isRubyFile</a></td>
 <td>Public method to return a flag indicating a Ruby file.</td>
 </tr>
@@ -6155,25 +6143,6 @@
 bool
 </dd>
 </dl>
-<a NAME="Editor.isDeviceFile" ID="Editor.isDeviceFile"></a>
-<h4>Editor.isDeviceFile</h4>
-<b>isDeviceFile</b>(<i></i>)
-
-<p>
-        Public method to check, if the editor contains a MCU device file.
-</p>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a MCU device file
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="Editor.isJavascriptFile" ID="Editor.isJavascriptFile"></a>
 <h4>Editor.isJavascriptFile</h4>
 <b>isJavascriptFile</b>(<i></i>)
@@ -6200,25 +6169,6 @@
 flag indicating availability (boolean)
 </dd>
 </dl>
-<a NAME="Editor.isLocalFile" ID="Editor.isLocalFile"></a>
-<h4>Editor.isLocalFile</h4>
-<b>isLocalFile</b>(<i></i>)
-
-<p>
-        Public method to check, if the editor contains a local file.
-</p>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a local file
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="Editor.isMicroPythonFile" ID="Editor.isMicroPythonFile"></a>
 <h4>Editor.isMicroPythonFile</h4>
 <b>isMicroPythonFile</b>(<i></i>)
@@ -6284,25 +6234,6 @@
 flag indicating a Python3 file (boolean)
 </dd>
 </dl>
-<a NAME="Editor.isRemoteFile" ID="Editor.isRemoteFile"></a>
-<h4>Editor.isRemoteFile</h4>
-<b>isRemoteFile</b>(<i></i>)
-
-<p>
-        Public method to check, if the editor contains a remote file.
-</p>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a remote file
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="Editor.isRubyFile" ID="Editor.isRubyFile"></a>
 <h4>Editor.isRubyFile</h4>
 <b>isRubyFile</b>(<i></i>)
--- a/src/eric7/Documentation/Source/eric7.SystemUtilities.FileSystemUtilities.html	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/Documentation/Source/eric7.SystemUtilities.FileSystemUtilities.html	Wed Dec 06 14:23:36 2023 +0100
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>None</td></tr>
+<tr><td>_DeviceFileMarker</td></tr><tr><td>_RemoteFileMarker</td></tr>
 </table>
 <h3>Classes</h3>
 
@@ -38,6 +38,10 @@
 <td>Function to return a compacted path fitting inside the given width.</td>
 </tr>
 <tr>
+<td><a href="#deviceFileName">deviceFileName</a></td>
+<td>Function to create a device (MicroPython) file name given a plain file name.</td>
+</tr>
+<tr>
 <td><a href="#direntries">direntries</a></td>
 <td>Function returning a list of all files and directories.</td>
 </tr>
@@ -74,6 +78,10 @@
 <td>Function to build the full path of an executable file from the environment on Windows platforms.</td>
 </tr>
 <tr>
+<td><a href="#isDeviceFileName">isDeviceFileName</a></td>
+<td>Function to check, if the given file name is a device file name.</td>
+</tr>
+<tr>
 <td><a href="#isDrive">isDrive</a></td>
 <td>Function to check, if a path is a Windows drive.</td>
 </tr>
@@ -82,6 +90,14 @@
 <td>Function to check, if a file is executable.</td>
 </tr>
 <tr>
+<td><a href="#isPlainFileName">isPlainFileName</a></td>
+<td>Function to check, if the given file name is a plain (i.e.</td>
+</tr>
+<tr>
+<td><a href="#isRemoteFileName">isRemoteFileName</a></td>
+<td>Function to check, if the given file name is a remote file name.</td>
+</tr>
+<tr>
 <td><a href="#isinpath">isinpath</a></td>
 <td>Function to check for an executable file.</td>
 </tr>
@@ -106,10 +122,18 @@
 <td>Function returning a normalized path of the joined parts passed into it.</td>
 </tr>
 <tr>
+<td><a href="#plainFileName">plainFileName</a></td>
+<td>Function to create a plain file name given a device or remote file name.</td>
+</tr>
+<tr>
 <td><a href="#relativeUniversalPath">relativeUniversalPath</a></td>
 <td>Function to convert a file path to a path relative to a start path with universal separators.</td>
 </tr>
 <tr>
+<td><a href="#remoteFileName">remoteFileName</a></td>
+<td>Function to create a remote file name given a plain file name.</td>
+</tr>
+<tr>
 <td><a href="#samefilepath">samefilepath</a></td>
 <td>Function to compare two paths.</td>
 </tr>
@@ -220,6 +244,35 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="deviceFileName" ID="deviceFileName"></a>
+<h2>deviceFileName</h2>
+<b>deviceFileName</b>(<i>fileName</i>)
+
+<p>
+    Function to create a device (MicroPython) file name given a plain file name.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+plain file name
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+device file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="direntries" ID="direntries"></a>
 <h2>direntries</h2>
 <b>direntries</b>(<i>path, filesonly=False, pattern=None, followsymlinks=True, checkStop=None, ignore=None, </i>)
@@ -487,6 +540,35 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="isDeviceFileName" ID="isDeviceFileName"></a>
+<h2>isDeviceFileName</h2>
+<b>isDeviceFileName</b>(<i>fileName</i>)
+
+<p>
+    Function to check, if the given file name is a device file name.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+file name to be checked
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a device file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="isDrive" ID="isDrive"></a>
 <h2>isDrive</h2>
 <b>isDrive</b>(<i>path</i>)
@@ -539,6 +621,64 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="isPlainFileName" ID="isPlainFileName"></a>
+<h2>isPlainFileName</h2>
+<b>isPlainFileName</b>(<i>fileName</i>)
+
+<p>
+    Function to check, if the given file name is a plain (i.e. local) file name.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+file name to be checked
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a local file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="isRemoteFileName" ID="isRemoteFileName"></a>
+<h2>isRemoteFileName</h2>
+<b>isRemoteFileName</b>(<i>fileName</i>)
+
+<p>
+    Function to check, if the given file name is a remote file name.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+file name to be checked
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a remote file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="isinpath" ID="isinpath"></a>
 <h2>isinpath</h2>
 <b>isinpath</b>(<i>file</i>)
@@ -697,6 +837,35 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="plainFileName" ID="plainFileName"></a>
+<h2>plainFileName</h2>
+<b>plainFileName</b>(<i>fileName</i>)
+
+<p>
+    Function to create a plain file name given a device or remote file name.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+device or remote file name
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+plain file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="relativeUniversalPath" ID="relativeUniversalPath"></a>
 <h2>relativeUniversalPath</h2>
 <b>relativeUniversalPath</b>(<i>path, start</i>)
@@ -726,6 +895,35 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="remoteFileName" ID="remoteFileName"></a>
+<h2>remoteFileName</h2>
+<b>remoteFileName</b>(<i>fileName</i>)
+
+<p>
+    Function to create a remote file name given a plain file name.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+plain file name
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+remote file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="samefilepath" ID="samefilepath"></a>
 <h2>samefilepath</h2>
 <b>samefilepath</b>(<i>f1, f2</i>)
--- a/src/eric7/MicroPython/MicroPythonFileManagerWidget.py	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/MicroPython/MicroPythonFileManagerWidget.py	Wed Dec 06 14:23:36 2023 +0100
@@ -27,6 +27,7 @@
 from eric7.EricWidgets.EricApplication import ericApp
 from eric7.EricWidgets.EricFileSaveConfirmDialog import confirmOverwrite
 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
+from eric7.SystemUtilities import FileSystemUtilities
 from eric7.UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog
 
 from .MicroPythonFileSystemUtilities import (
@@ -175,7 +176,7 @@
         dirname = ""
         vm = ericApp().getObject("ViewManager")
         aw = vm.activeWindow()
-        if aw and aw.isLocalFile():
+        if aw and FileSystemUtilities.isPlainFileName(aw.getFileName()):
             dirname = os.path.dirname(aw.getFileName())
         if not dirname:
             dirname = (
@@ -410,7 +411,7 @@
                 try:
                     text = data.decode(encoding="utf-8")
                     ericApp().getObject("ViewManager").newEditorWithText(
-                        text, fileName="device:{0}".format(name)
+                        text, fileName=FileSystemUtilities.deviceFileName(name)
                     )
                 except UnicodeDecodeError:
                     EricMessageBox.warning(
@@ -732,7 +733,7 @@
                     data = self.__fileManager.getData(name)
                     text = data.decode(encoding="utf-8")
                     ericApp().getObject("ViewManager").newEditorWithText(
-                        text, "Python3", "device:{0}".format(name)
+                        text, "Python3", FileSystemUtilities.deviceFileName(name)
                     )
 
     @pyqtSlot()
@@ -769,7 +770,9 @@
 
         if not saveAs:
             # check editor and selected file names for an implicit 'save as'
-            editorFileName = os.path.basename(aw.getFileName().replace("device:", ""))
+            editorFileName = os.path.basename(
+                FileSystemUtilities.plainFileName(aw.getFileName())
+            )
             if editorFileName != filename:
                 saveAs = True
 
@@ -807,7 +810,7 @@
             dirname = filename.rsplit("/", 1)[0]
             self.__fileManager.makedirs(dirname)
             self.__fileManager.putData(filename, text.encode("utf-8"))
-            aw.setFileName("device:" + filename)
+            aw.setFileName(FileSystemUtilities.deviceFileName(filename))
 
         aw.setModified(False)
         aw.resetOnlineChangeTraceInfo()
--- a/src/eric7/QScintilla/Editor.py	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/QScintilla/Editor.py	Wed Dec 06 14:23:36 2023 +0100
@@ -51,7 +51,7 @@
 from eric7.EricWidgets import EricFileDialog, EricMessageBox
 from eric7.EricWidgets.EricApplication import ericApp
 from eric7.Globals import recentNameBreakpointConditions
-from eric7.SystemUtilities import OSUtilities, PythonUtilities
+from eric7.SystemUtilities import FileSystemUtilities, OSUtilities, PythonUtilities
 from eric7.UI import PythonDisViewer
 from eric7.Utilities import MouseUtilities
 
@@ -418,7 +418,10 @@
                 if not Utilities.MimeTypes.isTextFile(self.fileName):
                     raise OSError()
 
-                if self.isLocalFile() and pathlib.Path(self.fileName).exists():
+                if (
+                    FileSystemUtilities.isPlainFileName(self.fileName)
+                    and pathlib.Path(self.fileName).exists()
+                ):
                     fileSizeKB = pathlib.Path(self.fileName).stat().st_size // 1024
                     if fileSizeKB > Preferences.getEditor("RejectFilesize"):
                         EricMessageBox.warning(
@@ -645,33 +648,6 @@
         else:
             self.__fileNameExtension = ""
 
-    def isLocalFile(self):
-        """
-        Public method to check, if the editor contains a local file.
-
-        @return flag indicating a local file
-        @rtype bool
-        """
-        return not self.fileName.startswith(("device:", "remote:"))
-
-    def isDeviceFile(self):
-        """
-        Public method to check, if the editor contains a MCU device file.
-
-        @return flag indicating a MCU device file
-        @rtype bool
-        """
-        return self.fileName.startswith("device:")
-
-    def isRemoteFile(self):
-        """
-        Public method to check, if the editor contains a remote file.
-
-        @return flag indicating a remote file
-        @rtype bool
-        """
-        return self.fileName.startswith("remote:")
-
     def __registerImages(self):
         """
         Private method to register images for autocompletion lists.
@@ -3350,7 +3326,9 @@
                 self,
                 self.tr("File Modified"),
                 self.tr("<p>The file <b>{0}</b> has unsaved changes.</p>").format(fn),
-                self.saveFile if not self.isRemoteFile() else None,
+                self.saveFile
+                if not FileSystemUtilities.isRemoteFileName(self.fileName)
+                else None,
             )
             if res:
                 self.vm.setEditorName(self, self.fileName)
@@ -3634,11 +3612,13 @@
         @param path directory to save the file in (string)
         @return flag indicating success (boolean)
         """
-        if not saveas and (not self.isModified() or self.isRemoteFile()):
+        if not saveas and (
+            not self.isModified() or FileSystemUtilities.isRemoteFileName(self.fileName)
+        ):
             # do nothing if text wasn't changed or is a remote file
             return False
 
-        if self.isDeviceFile():
+        if FileSystemUtilities.isDeviceFileName(self.fileName):
             return self.__saveDeviceFile(saveas=saveas)
 
         newName = None
@@ -3748,8 +3728,10 @@
             fn = fn.replace("\\", "/")
             if "/" in fn:
                 dn = fn.rsplit("/", 1)[0]
-                filemanager.makedirs(dn.replace("device:", ""))
-            success = filemanager.writeFile(fn.replace("device:", ""), self.text())
+                filemanager.makedirs(FileSystemUtilities.plainFileName(dn))
+            success = filemanager.writeFile(
+                FileSystemUtilities.plainFileName(fn), self.text()
+            )
             if success:
                 self.setFileName(fn)
                 self.setModified(False)
@@ -7978,7 +7960,9 @@
         @param bForce True to force change, False to only update and emit
                 signal if there was an attribute change.
         """
-        if self.fileName == "" or not self.isLocalFile():
+        if self.fileName == "" or not FileSystemUtilities.isPlainFileName(
+            self.fileName
+        ):
             return
 
         readOnly = self.checkReadOnly()
@@ -8000,7 +7984,8 @@
         @rtype bool
         """
         return (
-            self.isLocalFile() and not os.access(self.fileName, os.W_OK)
+            FileSystemUtilities.isPlainFileName(self.fileName)
+            and not os.access(self.fileName, os.W_OK)
         ) or self.isReadOnly()
 
     @pyqtSlot()
@@ -9455,7 +9440,7 @@
         """
         editorConfig = {}
 
-        if fileName and self.isLocalFile():
+        if fileName and FileSystemUtilities.isPlainFileName(self.fileName):
             try:
                 editorConfig = editorconfig.get_properties(fileName)
             except editorconfig.EditorConfigError:
--- a/src/eric7/SystemUtilities/FileSystemUtilities.py	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/SystemUtilities/FileSystemUtilities.py	Wed Dec 06 14:23:36 2023 +0100
@@ -664,3 +664,86 @@
                 break
 
     return mountedPaths
+
+
+################################################################################
+## Functions below handle (MicroPython) device and remote file names.
+################################################################################
+
+
+_DeviceFileMarker = "device:"
+
+
+def deviceFileName(fileName):
+    """
+    Function to create a device (MicroPython) file name given a plain file name.
+
+    @param fileName plain file name
+    @type str
+    @return device file name
+    @rtype str
+    """
+    return f"{_DeviceFileMarker}{fileName}"
+
+
+def isDeviceFileName(fileName):
+    """
+    Function to check, if the given file name is a device file name.
+
+    @param fileName file name to be checked
+    @type str
+    @return flag indicating a device file name
+    @rtype bool
+    """
+    return fileName.startswith(_DeviceFileMarker)
+
+
+_RemoteFileMarker = "remote:"
+
+
+def remoteFileName(fileName):
+    """
+    Function to create a remote file name given a plain file name.
+
+    @param fileName plain file name
+    @type str
+    @return remote file name
+    @rtype str
+    """
+    return f"{_RemoteFileMarker}{fileName}"
+
+
+def isRemoteFileName(fileName):
+    """
+    Function to check, if the given file name is a remote file name.
+
+    @param fileName file name to be checked
+    @type str
+    @return flag indicating a remote file name
+    @rtype bool
+    """
+    return fileName.startswith(_RemoteFileMarker)
+
+
+def isPlainFileName(fileName):
+    """
+    Function to check, if the given file name is a plain (i.e. local) file name.
+
+    @param fileName file name to be checked
+    @type str
+    @return flag indicating a local file name
+    @rtype bool
+    """
+    return not fileName.startswith((_DeviceFileMarker, _RemoteFileMarker))
+
+
+def plainFileName(fileName):
+    """
+    Function to create a plain file name given a device or remote file name.
+
+    @param fileName device or remote file name
+    @type str
+    @return plain file name
+    @rtype str
+    """
+    return fileName.replace(_DeviceFileMarker, "").replace(_RemoteFileMarker, "")
--- a/src/eric7/ViewManager/ViewManager.py	Wed Dec 06 14:20:35 2023 +0100
+++ b/src/eric7/ViewManager/ViewManager.py	Wed Dec 06 14:23:36 2023 +0100
@@ -5391,7 +5391,9 @@
                         "ViewManager",
                         """<p>The file <b>{0}</b> has unsaved changes.</p>""",
                     ).format(fn),
-                    editor.saveFile if not editor.isRemoteFile() else None,
+                    editor.saveFile
+                    if not FileSystemUtilities.isRemoteFileName(editor.getFileName())
+                    else None,
                 )
             if res:
                 self.setEditorName(editor, editor.getFileName())
@@ -7492,7 +7494,10 @@
             (boolean)
         """
         if editor is not None:
-            self.saveAct.setEnabled(editor.isModified() and not editor.isRemoteFile())
+            self.saveAct.setEnabled(
+                editor.isModified()
+                and not FileSystemUtilities.isRemoteFileName(editor.getFileName())
+            )
             self.revertAct.setEnabled(editor.isModified())
 
             self.undoAct.setEnabled(editor.isUndoAvailable())

eric ide

mercurial