Editing Workspace Files (*.tws) directly
Moderators: AmigoJack, bbadmin, helios, Bob Hansen, MudGuard
-
- Posts: 2
- Joined: Thu Dec 11, 2003 2:48 am
Editing Workspace Files (*.tws) directly
Hello all and thanks for reading...
I have a bunch of workspaces set up for my staging environment and was wondering if I could edit the workspace file directly and create workspaces for my production environment.
For example:
I have workspace D:\STG1.tws with files:
M:\something1\somethingElse1.txt
M:\something2\somethingElse1.txt
M:\something3\somethingElse1.txt
...
could I somehow copy and edit D:\STG1.tws to a D:\PROD1.tws and contain the files:
N:\something1\somethingElse1.txt
N:\something2\somethingElse1.txt
N:\something3\somethingElse1.txt
...
Can that be done?
Thanks for your help in advance.
GenieMajik
I have a bunch of workspaces set up for my staging environment and was wondering if I could edit the workspace file directly and create workspaces for my production environment.
For example:
I have workspace D:\STG1.tws with files:
M:\something1\somethingElse1.txt
M:\something2\somethingElse1.txt
M:\something3\somethingElse1.txt
...
could I somehow copy and edit D:\STG1.tws to a D:\PROD1.tws and contain the files:
N:\something1\somethingElse1.txt
N:\something2\somethingElse1.txt
N:\something3\somethingElse1.txt
...
Can that be done?
Thanks for your help in advance.
GenieMajik
-
- Posts: 2
- Joined: Thu Dec 11, 2003 2:48 am
Got it Nevermind
I read through the forums for a solution but I couldn't find one directly but it was the first time I learned that the files in a workspace are relative to the workspace tws file
So...
I could open up an existing workspace, save it as a new workspace on the same drive as the files it contains and then move that new tws file to another drive. (if that makes sense).
Sorry for the crazy post
But thanks anyway
So...
I could open up an existing workspace, save it as a new workspace on the same drive as the files it contains and then move that new tws file to another drive. (if that makes sense).
Sorry for the crazy post
But thanks anyway
Since TWS files have special meaning to TextPad, you can't use TextPad to edit them. You must use another text editor.
I saved two documents on my desktop plus a third in a subfolder, and I saved a workspace for them. I opened the worksapce file in Notepad:It seems you could change the names as long as you have the same number of files.
I saved two documents on my desktop plus a third in a subfolder, and I saved a workspace for them. I opened the worksapce file in Notepad:
Code: Select all
ÿÿ TextPad txt ECOD
Document1.txt TIDE , , �Ù 0 VIEW VIEW VIEWð¥ZECOD
Document2.txt TIDE B B ÷à 0 VIEW VIEW VIEWð¥ZECODMyFolder\anotherFile.txt TIDE X X
ö 0 VIEW VIEW VIEWð¥Z
Not true.Since TWS files have special meaning to TextPad, you can't use TextPad to edit them. You must use another text editor.
Open Textpad.
File - Open, choose your tws file, switch File Format to "Text" and click "Open".
Up comes the content of the tws file in Textpad (lots of unreadable characters...)
- mishofsydenham
- Posts: 3
- Joined: Mon Feb 02, 2004 12:19 am
Enhancement
Does anyone know if this functionality--the ability to edit workspaces directly--has been entered as an enhancement request?
Thanks.
Thanks.
Grace and Peace,
Joel
Joel
I have the exact same issue.
I need to move a subfolder. In it, are 30 files in a TextPad Workspace. I don't want to have to reopen each one manually after I move the folder.
I'd like to be able to open the tws file, do a search and replace, and then find all my files in the new location.
I live and die by multiple (60 plus) workspaces which contain 30-50 files each, so this is very very important to my way of working.
I've tried bringing in the tws file in Notepad++ and replacing but it really messes up the tws file and I lose all my file references. Not good.
Someone, please find an answer to this. It's hard to believe this has been a request for so long without a resolution.
I need to move a subfolder. In it, are 30 files in a TextPad Workspace. I don't want to have to reopen each one manually after I move the folder.
I'd like to be able to open the tws file, do a search and replace, and then find all my files in the new location.
I live and die by multiple (60 plus) workspaces which contain 30-50 files each, so this is very very important to my way of working.
I've tried bringing in the tws file in Notepad++ and replacing but it really messes up the tws file and I lose all my file references. Not good.
Someone, please find an answer to this. It's hard to believe this has been a request for so long without a resolution.
-
- Posts: 2461
- Joined: Sun Mar 02, 2003 9:22 pm
This is not a perfect solution, but it's what I do.
If you use the command line and have Perl you can use something like the following script, which lists all the files in all the workspaces given as parameters (wildcards accepted).
Thanks to lotus298 (see http://forums.textpad.com/viewtopic.php?t=8561) for some ideas in this.
If you redirect the output to a file, you can open it and edit the paths. You can then open each document quickly if you assign a keyboard shortcut (I use Ctrl+Shift+G) to the FileGoTo command:
Configure | Preferences | Keyboard:
Categories: File
Commands: FileGoTo
If you use the command line and have Perl you can use something like the following script, which lists all the files in all the workspaces given as parameters (wildcards accepted).
Code: Select all
use warnings ;
use strict ;
my @twsNames = map { glob $_ } ( @ARGV ? @ARGV : ( '*.tws' ) ) ;
for my $twsName ( @twsNames )
{
if ( -f $twsName && $twsName =~ /\.tws$/ )
{
print "\n$twsName\n" ;
if ( open TWS, $twsName )
{
local $/ = undef ;
my $tws = <TWS> ;
close TWS ;
my @docNames = $tws =~ /[EB]COD..(.+?)\x00/gs ;
for my $docName ( sort @docNames )
{
print "$docName\n" ;
}
}
else
{
warn "Can't open $twsName.\n" ;
}
}
elsif ( -f $twsName )
{
print "\n$twsName is not a workspace file.\n" ;
}
else
{
print "\n$twsName doesn't exist.\n" ;
}
}
If you redirect the output to a file, you can open it and edit the paths. You can then open each document quickly if you assign a keyboard shortcut (I use Ctrl+Shift+G) to the FileGoTo command:
Configure | Preferences | Keyboard:
Categories: File
Commands: FileGoTo
@mike777
A)
b) Quick Open File (<Ctrl>+<Shift>+O, no menu entry for that !!) is very nice if the files are not in 1 single directory but in subdirectories on the same path ! You can use wildcards => see online help
c) if the filenames are always the same you could use also a filelist (textfile with name beginning with '@' =>search @ in the online help)
B)
not sure whether it is the same task or something different
As - as mentioned in the 2nd post of this thread - paths in *.tws are relative it works like that for me:
\myCurrProject
\mySubDir1
\mySubDir2
proj.tws .. containing files of \mySubDir*
when I copy
\myCurrProject to
\myCurrProjectBACKUP
and open
\myCurrProjectBACKUP\proj.tws
all the files in \mySubDir* are opened in \myCurrProjectBACKUP instead of \myCurrProject
A)
a) drag & drop from explorer to textpad is fine for opening many files in the same directoryIn it, are 30 files in a TextPad Workspace. I don't want to have to reopen each one manually ..
b) Quick Open File (<Ctrl>+<Shift>+O, no menu entry for that !!) is very nice if the files are not in 1 single directory but in subdirectories on the same path ! You can use wildcards => see online help
c) if the filenames are always the same you could use also a filelist (textfile with name beginning with '@' =>search @ in the online help)
B)
not sure whether it is the same task or something different
As - as mentioned in the 2nd post of this thread - paths in *.tws are relative it works like that for me:
\myCurrProject
\mySubDir1
\mySubDir2
proj.tws .. containing files of \mySubDir*
when I copy
\myCurrProject to
\myCurrProjectBACKUP
and open
\myCurrProjectBACKUP\proj.tws
all the files in \mySubDir* are opened in \myCurrProjectBACKUP instead of \myCurrProject
-
- Posts: 2461
- Joined: Sun Mar 02, 2003 9:22 pm
You can use an @-file, as suggested by woho in point (A)(c), in conjunction with something similar to my script. above. You'll need to remove this line:
Here's a fairly minimal version, without error checking:
which you can write even more minimally, like this
if you like that sort of thing.
On woho's point (B): a file in a workspace is stored with a relative path only if it's in or below the directory containing the workspace.
Code: Select all
print "\n$twsName\n" ;
Code: Select all
my $twsName = $ARGV[ 0 ] ;
open TWS, $twsName ;
my $tws = do { local $/ ; <TWS> } ;
close TWS ;
my @docNames = $tws =~ /[EB]COD..(.+?)\x00/gs ;
print +( join "\n", sort @docNames ), "\n" ;
Code: Select all
print +( join "\n", sort do { open TWS, $ARGV[0] ; local $/ ; <TWS> } =~ /[EB]COD..(.+?)\x00/gs ), "\n" ;
On woho's point (B): a file in a workspace is stored with a relative path only if it's in or below the directory containing the workspace.
Editing Workspace Files (*.tws) directly (in R)
I use TWS all the time with my Sweave/R and routinely have 10-15 files open.
It would be very handy to be able to automatically read the TWS (I'll point to it) from R so I can add documentation on the files used in a project.
A simple scan() really messed up system, changing the character coding.
I am able to use
twsFile <- "/people/ccs3/morlan/research/bcp/bcp.tws"
if ( exists("con") ) close(con)
# con <- file(twsFile,"rb",encoding="UCS-2LE")
con <- file(twsFile,"rb")
str <- NULL
for ( ii in 1:1000 )
{
tried <- try(newC <- readChar(con,1))
if ( class(tried)!="try-error" ) str <- c(str,newC)
}
to load the tws one character at a time, but am not able to filter it very well. Has anyone written an R-function that might already do this?
I'll be writing one anyway, but if it is already out there that would be nice.
It would be very handy to be able to automatically read the TWS (I'll point to it) from R so I can add documentation on the files used in a project.
A simple scan() really messed up system, changing the character coding.
I am able to use
twsFile <- "/people/ccs3/morlan/research/bcp/bcp.tws"
if ( exists("con") ) close(con)
# con <- file(twsFile,"rb",encoding="UCS-2LE")
con <- file(twsFile,"rb")
str <- NULL
for ( ii in 1:1000 )
{
tried <- try(newC <- readChar(con,1))
if ( class(tried)!="try-error" ) str <- c(str,newC)
}
to load the tws one character at a time, but am not able to filter it very well. Has anyone written an R-function that might already do this?
I'll be writing one anyway, but if it is already out there that would be nice.
The Price of Freedom is eternal vigilance.
Eternal Vigilance is now on sale at WMart for $260B
Eternal Vigilance is now on sale at WMart for $260B
R function to scan TWS files
The following function reads in a TWS and attempts to parse it for the file names. It returns an unnamed list. It is easy to modify it, as written it expects file names to only contain letters and numbers and : to mark Windows drive letters.
Code: Select all
scan.twsFile <- function(twsFile="/people/ccs3/morlan/research/bcp/bcp.tws",type="latex")
{# PURPOSE: To read in a TextPad TWS file and produce a list of files
# USE: lst <- scan.twsFile(twsFile="<fullpath to twsfile>")
if ( exists("con") ) close(con)
con <- file(twsFile,"rb")
str <- NULL
fileSize <- file.info(twsFile)$size
for ( ii in 1:fileSize )
{
tried <- try(newC <- readChar(con,1),silent=TRUE)
if ( class(tried)!="try-error" ) str <- c(str,newC)
}
c0 <- str %in% c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
":", "\\",".")
str <- str[c0]
str <- gsub("\\\\","/",str)
str <- paste(str,collapse="")
###
# hope the markers don't change
###
keyStr0 <- "EC"
keyStr1 <- "OD"
c0 <- regexpr(keyStr0,str)
editFiles <- NULL
while (c0[1]>0)
{
str <- substring(str,c0[1]+nchar(keyStr0))
c0 <- regexpr(keyStr1,str)
str <- substring(str,c0[1]+nchar(keyStr1))
keyStr0 <- "TIDEVIEW"
keyStr1 <- "VIEWECOD"
c1 <- regexpr(keyStr0,str)
editFiles <- c(editFiles,substring(str,1,c1-1))
str <- substring(str,c1)
c0 <- regexpr(keyStr0,str)
}
editFiles <- editFiles[editFiles!=""]
c0 <- substring(editFiles,1,1)=="."
editFiles[c0] <- substring(editFiles[c0],2)
return(invisible(editFiles))
# END FUNCTION scan.twsFile() as found in source(paste(RCommon,"LatexTools/latex.twsFiles.R",sep=""))
}# END FUNCTION scan.twsFile()
The Price of Freedom is eternal vigilance.
Eternal Vigilance is now on sale at WMart for $260B
Eternal Vigilance is now on sale at WMart for $260B