[Gambas-user] Get the default file manager
System64 Development
64xcode at gmail.com
Sun Feb 18 12:51:06 CET 2024
play whit this if you want, maybe this code shows Caja.
' Gambas class file
Public Sub Form_Open()
Dim o As Collection
Dim sMessage As String
'o = DeskApps("FileManager")
o = DeskApps()
If o.Count > 0 Then
If o.Count > 1 Then
sMessage = Subst(("You have &1 file managers in your desktop"),
CStr(o.Count)) & gb.NewLine & o.Keys.Join("\n")
Else
sMessage = Subst(("You have &1 file manager in your desktop"),
CStr(o.Count)) & gb.NewLine & o.Keys.Join("\n")
Endif
sMessage &= gb.NewLine & ("Your default file manager application
is:") & gb.NewLine & DesktopFile.FromMime("inode/directory")[0].ProgramName
Message.Info(sMessage)
'If
DesktopFile.FromMime("inode/directory")[0].Categories.Exist("FileManager")
Then
' DesktopFile.FromMime("inode/directory")[0].Run(User.Home)
'Endif
Endif
End
'' This function list all the .desktop applications in the directory
/usr/share/applications with the asociated relevant data in a
collection. Is possible provide a text filter for the categories section.
Public Function DeskApps(Optional sFilter As String) As Collection
Dim a As String[]
Dim aTags As String[] = ["Name", "Comment", "GenericName",
"Keywords", "Exec", "Icon", "Terminal", "Type", "Categories", "MimeType"]
Dim q As Integer
Dim s As String
Dim sEntry As String
Dim oTmp As New Collection
Dim oData As New Collection
Dim l As String
Dim sTag As String
Dim sVal As String
Dim k As String
'a = ScanFiles("/usr/share/applications", ["desktop"], 1)
a = ScanFiles("/usr/share/applications", [], 1)
a.Sort(gb.Ascent)
For Each s In a
sEntry = File.Load(s)
q = 0
oTmp.Clear
For Each k In aTags
For Each l In Split(sEntry, "\n")
If InStr(l, "=") > 0 Then
sTag = Split(l, "=")[0]
sVal = Split(l, "=")[1]
If Not oTmp.Exist(sTag) Then
If k = sTag Then
oTmp[sTag] = sVal
Inc q
If q > aTags.Count + 1 Then
Break
Endif
Endif
Endif
Endif
Next
Next
'If sFilter <> "" Then
'If oTmp.Exist("Categories") Then
' If InStr(Lower(oTmp["Categories"]), Lower(sFilter)) > 0 Then
' oData[s] = oTmp.Copy()
' Endif
'Endif
'Else
oData[s] = oTmp.Copy()
'Endif
Next
Return oData
End
'' <b>RAD Extension.</b><br>
'' Return a files list nested in a directory using a find command
Static Public Function ScanFiles(sPath As String, ext As String[],
Optional maxdepth As Integer, Optional sFilter As String) As String[]
Dim out As New String[]
Dim t As String
Dim ex As String
Dim sTmp As String
Dim aOut As New String[]
If maxdepth = Null Or maxdepth < 1 Then
maxdepth = 1
Endif
If Exist(sPath) Then
Select ext.Count
Case 0
Shell "find '" & sPath & "' -maxdepth " & CStr(maxdepth) & "
-type f -printf '%p\n' 2>&1" To t
Case 1
Shell "find '" & sPath & "' -maxdepth " & CStr(maxdepth) & "
-type f -name '*.'" & ext[0] & " -printf '%p\n' 2>&1" To t
Case Else
ex = "\\( -name \"*."
ex &= ext.Join("\" -o -name \"*.")
ex &= "\" \\)"
Shell "find '" & sPath & "' -maxdepth " & CStr(maxdepth) & "
-type f " & ex & " -printf '%p\n' 2>&1" To t
End Select
out = Split(t, "\n")
If out.Count > 0 Then
If out[out.Max] = "" Then
out.Remove(out.Max, 1)
Endif
Endif
Endif
If sFilter <> "" Then
For Each sTmp In out
If InStr(sTmp, sFilter) > 0 Then
aOut.Add(sTmp)
Endif
Next
Else
aOut = out.Copy()
Endif
Return aOut
End
More information about the User
mailing list