On 22 Feb 2012, at 00:28, jochen laubrock wrote: > in R.app (GUI), dragging a folder into the Console used to expand the full > path to the folder as far as I remember. Now the behavior seems to have > changed. In many cases, the full path is still expanded (somewhat; the tilde > abbreviation "~" is used for a users home directory). However, if the > selection in the Finder is a file or directory below R's current working > directory, only a relative path is inserted into the command window. This can > be puzzling. > > What is the motivation for this change? In my opinion, the old behavior was > more consistent, and also more useful because it could be used to obtain the > full path to a file. I would also prefer if the behavior were consistent > between the GUI and command line R (in which dragging always leads to full > path expansion).
Hi Jochen,
sorry, it was my fault. I had the wrong default in mind while implementing a
feature.
I've just fixed it. Now, dragging file(s) with the extension other than *.R or
*.Rdata will insert the full path. If you hold down the ALT key ⌥ while
dragging the relative path(s) to the current set working directory and R script
file path resp. will be inserted.
Dragging *.R files will insert a "source(...)" and dragging *.Rdata files will
insert a "load(...)" snippet template. This can be controlled by holding down
the ALT key ⌥ or CMD key ⌘ or both.
The "source(...)" template is using the new introduced so-called snippet system
(a kind of programmable macro or template system [if you know the editor
"TextMate" then you will know it ;) ]).
It will insert e.g. "source('~/foo.R', chdir=TRUE)" whereby ", chdir=TRUE" is
highlight to firstly let the user decide whether it should be used or not. If
not simply press DEL key ⌫ and press TAB key ⇥ to go to the end of the inserted
template. If the user want to change the value of the parameter 'chdir' simply
press the TAB key ⇤ to highlight the next snippet 'TRUE' and press e.g. 'F'.
Pressing the keys SHIFT+TAB ⇧⇥ will highlight ", chdir=TRUE" again. Thus one
can navigate through the defined snippets by using the keys TAB ⇥ (next; unless
invoked from the last defined snippet) and SHIFT+TAB ⇧⇥ (prev). Pressing TAB ⇥
from the last defined snippet the cursor will be placed after the entire
inserted text template.
In addition the user can define its own dragging template which should be
inserted according to a file extension (incl. *.R, *.Rdata to overwrite the
default template).
Here a short example:
If you save a file to:
~/Library/Application Support/R/DragActions/tab/command.sh
with following content:
# get the file name
VARNAME=${R_DRAGGED_RELATIVE_FILE_PATH##*/}
# remove extension
VARNAME=${VARNAME%%.*}
# print template
echo -en "\${$R_CURRENT_SNIPPET_INDEX:$VARNAME} <- read.table(file =
\"$R_DRAGGED_RELATIVE_FILE_PATH\", sep =
\"\${$(($R_CURRENT_SNIPPET_INDEX+1)):\\\t}\", header =
\${$(($R_CURRENT_SNIPPET_INDEX+2)):TRUE}, stringsAsFactors =
\${$(($R_CURRENT_SNIPPET_INDEX+3)):FALSE})"
then if you drag e.g. the files ~/data/d1.tab and ~/data/d2.tab the following
will be inserted:
d1 <- read.table(file = "~/data/d1.tab", sep = "\t", header = TRUE,
stringsAsFactors = FALSE)
d2 <- read.table(file = "~/data/d2.tab", sep = "\t", header = TRUE,
stringsAsFactors = FALSE)
whereby d1/d2 and the values for the parameters sep, header, stringAsFactor are
defined as snippets.
<<inline: RDragTemplateExample.png>>
The content of the file "command.sh" will be interpreted as a BASH script or if
you write the "magic header" like #!/usr/bin/perl as Perl script etc., i.e. one
can use any scripting language here. Furthermore R.app will pass shell
variables to that script like R_DRAGGED_RELATIVE_FILE_PATH and others on
run-time. The output of that script will be then inserted to the dragged
destination. This system makes editing in R.app very powerful.
Documentation and support for other user-defined "normal" text templates like
to insert the "foo <- function(x) {}" if you type "fun⇥" will follow soon.
Many thanks for the hint!
Kind regards,
--Hans_______________________________________________ R-SIG-Mac mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-mac
