Page 1 of 1
Unable to preview/open a file including spaces in filename
Posted: Wed Jul 03, 2024 10:07 am
by flashbob
.. I want to open a file (e.g. pdf) in current directory. Works fine on windows, but not on MAC because of the space in filename. Any idea how to fix it ?
Code: Select all
Enumeration FormGadget
#Btn
EndEnumeration
Define event
OpenWindow(0, 50, 50, 200, 70, "Open file", #PB_Window_SystemMenu)
ButtonGadget(#Btn, 25, 25, 120, 25, "open pdf")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn
; RunProgram("open","Test1.pdf","") ; ok
RunProgram("open","Test 1.pdf","") ; file with space not working
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
Re: Unable to preview/open a file including spaces in filename
Posted: Wed Jul 03, 2024 10:17 am
by Lord
Try enclosing parameter in quotes:
Code: Select all
RunProgram("open", #DQUOTE$+"Test 1.pdf"+#DQUOTE$, "")
Re: Unable to preview/open a file including spaces in filename
Posted: Wed Jul 03, 2024 10:56 am
by flashbob
... perfect, that's how it works. Thx a lot!
Re: Unable to preview/open a file including spaces in filename
Posted: Thu Jul 04, 2024 11:23 am
by Piero
flashbob wrote: Wed Jul 03, 2024 10:56 am
that's how it works.
Code: Select all
Procedure simpleShell(ShellCommand$)
Protected shell
shell = RunProgram("/bin/zsh","","", #PB_Program_Open|#PB_Program_Write)
If shell
WriteProgramStringN(shell,ShellCommand$)
WriteProgramData(shell,#PB_Program_Eof,0)
While ProgramRunning(shell) : Delay(10) : Wend ; Wait until program quits (optional)
CloseProgram(shell)
EndIf
EndProcedure
Procedure.s QuoteString(str$) ; useful to quote FILE/FOLDER PATHS
ProcedureReturn "'" + ReplaceString(str$, "'", "'\''") + "'"
EndProcedure
simpleShell("open " + QuoteString(~"Test \" ' 1.pdf"))
Re: Unable to preview/open a file including spaces in filename
Posted: Thu Aug 22, 2024 8:54 pm
by Bmld756
Hello,
That right for RunProgram, but for no problem with the space with SetCurrentDirectory or OpenFile.
Re: Unable to preview/open a file including spaces in filename
Posted: Fri Aug 23, 2024 5:59 pm
by Wolfram
Code: Select all
Enumeration FormGadget
#Btn
EndEnumeration
Define event
OpenWindow(0, 50, 50, 200, 70, "Open file", #PB_Window_SystemMenu)
ButtonGadget(#Btn, 25, 25, 120, 25, "open pdf")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn
filePath$ = "/Users/yourName/Desktop/S P A C E/Test 1.pdf"
If SetCurrentDirectory( GetPathPart(#DQUOTE$ + filePath$ +#DQUOTE$) )
Debug GetCurrentDirectory() ; /Users/yourName/Desktop/S P A C E/
Else
Debug "Error open path"
EndIf
RunProgram("open", #DQUOTE$ + filePath$ +#DQUOTE$,"") ; file with space working here
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
Re: Unable to preview/open a file including spaces in filename
Posted: Fri Aug 23, 2024 6:09 pm
by AZJIO
Wolfram wrote: Fri Aug 23, 2024 5:59 pm
Code: Select all
GetPathPart(#DQUOTE$ + filePath$ +#DQUOTE$)
This is not correct, the #DQUOTE$ constant is superfluous here. The path must not contain quotes; they are not allowed in names.
Although it did not give an error and returned the correct result.
The RunProgram function is different, there is a parameter enumeration string, not a path, so there quotes are interpreted correctly as highlighting an object so that it is not separated by a space.
SetCurrentDirectory() sets the current path, so you don't have to use the full path to the file. If you use the full path to the file, then SetCurrentDirectory() does not give you any benefits.
Linux is case sensitive in folder and file names, so it is important not to make mistakes in these little things.
For Linux you need to use "xdg-open". I suggested adding an example to the documentation. You also need to install this "xdg-utils" package
Code: Select all
RunProgram("xdg-open", #DQUOTE$ + filePath$ +#DQUOTE$, GetPathPart(tmp$))
Re: Unable to preview/open a file including spaces in filename
Posted: Sat Aug 24, 2024 12:30 am
by Piero
AZJIO wrote: Fri Aug 23, 2024 6:09 pmThe path must not contain quotes; they are not allowed in names.
Huh?
You know I'm
your Fan AZJIO, but we are talking about Mac OS, and it also seems you didn't really read my post above (~"Test \" ' 1.pdf")
See?
GET A MAC! I cannot conceive you without a Mac!!!
Re: Unable to preview/open a file including spaces in filename
Posted: Sat Aug 24, 2024 1:47 am
by Piero
Wolfram wrote: Fri Aug 23, 2024 5:59 pm
Code: Select all
RunProgram("open", #DQUOTE$ + filePath$ +#DQUOTE$,"") ; file with space not working
The above works here…
Anyway, I'm getting tired about repeating it:
the problem is that on Mac the runprogram PARAMETER is interpreted 'too literally'
when needed, you cannot "quote/escape/fix" it!!!
using a workaround (e.g., the simpleShell Procedure posted above, named simple because it doesn't return anything)
you can enjoy the power of a "shell" (Terminal.app uses the zsh shell) and pipe commands' output to other commands, do regexps,
and much, much, much more!
…the "open" command is NOTHING………
…but try typing "man open" on Terminal…