Improve R pkg
diff --git a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClientGraphicActions.java b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClientGraphicActions.java
index 264b61a..2856de4 100644
--- a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClientGraphicActions.java
+++ b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClientGraphicActions.java
@@ -58,7 +58,7 @@
 	public void copy(final int devId, final String toDev, final String toDevFile, final String toDevArgs,
 			final ProgressMonitor m) throws StatusException {
 		final StringBuilder sb= new StringBuilder(64);
-		sb.append("rj.gd::.rj.copyGD(");
+		sb.append("rj:::gr.copyGraphic(");
 		sb.append("devNr=").append((devId + 1)).append("L,");
 		sb.append("device=").append(toDev).append(",");
 		if (toDevFile != null) {
diff --git a/core/org.eclipse.statet.rj.server.rpkg/.project b/core/org.eclipse.statet.rj.server.rpkg/.project
index a586ff3..e1acb51 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/.project
+++ b/core/org.eclipse.statet.rj.server.rpkg/.project
@@ -24,5 +24,8 @@
 	<natures>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.statet.ide.resourceProjects.Statet</nature>
+		<nature>org.eclipse.statet.r.resourceProjects.R</nature>
+		<nature>org.eclipse.statet.r.resourceProjects.RPkg</nature>
 	</natures>
 </projectDescription>
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/NAMESPACE b/core/org.eclipse.statet.rj.server.rpkg/pkg/NAMESPACE
index da8c282..2c17fda 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/NAMESPACE
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/NAMESPACE
@@ -1,8 +1,21 @@
+ #=============================================================================#
+ # Copyright (c) 2009, 2018 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================#
+
+
 export(.rj.config, .rj.tmp)
 export(.client.execCommand)
 export(.console.loadHistory, .console.saveHistory, .console.addtoHistory)
 export(statet.help, statet.help.start, .statet.initDebug, .statet.initHelp)
-S3method(print, "help_files_with_topic")
-export(print.help_files_with_topic)
 export(openInEditor, openPackageManager, statet.chooseFile, statet.showHistory)
 export(dbg.updateTracepoints)
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/console.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/console.R
index 7e951b0..9217d39 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/console.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/console.R
@@ -13,20 +13,20 @@
  #=============================================================================#
 
 
-.console.loadHistory <- function(filename = ".Rhistory") {
+.console.loadHistory <- function(filename= ".Rhistory") {
 	if (!is.character(filename) || length(filename) != 1) {
 		stop("Illegal argument: filename");
 	}
 	.client.execCommand("console/loadHistory", list(
-					filename = filename ), TRUE);
+					filename= filename ), TRUE);
 	return (invisible());
 }
-.console.saveHistory <- function(filename = ".Rhistory") {
+.console.saveHistory <- function(filename= ".Rhistory") {
 	if (!is.character(filename) || length(filename) != 1) {
 		stop("Illegal argument: filename");
 	}
 	.client.execCommand("console/saveHistory", list(
-					filename = filename ), TRUE);
+					filename= filename ), TRUE);
 	return (invisible());
 }
 .console.addtoHistory <- function(line) {
@@ -34,7 +34,7 @@
 		stop("Illegal argument: line");
 	}
 	.client.execCommand("console/addtoHistory", list(
-					line = line ), FALSE);
+					line= line ), FALSE);
 	return (invisible());
 }
 
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R
index 871f44b..222c363 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R
@@ -138,7 +138,7 @@
 }
 
 
-.getDataLevelValues <- function(x, max = 1000) {
+.getDataLevelValues <- function(x, max= 1000) {
 	if (is.factor(x)) {
 		values <- levels(x)
 		if (any(is.na(x))) {
@@ -159,7 +159,7 @@
 	return (values)
 }
 
-.searchDataTextValues <- function(x, type, pattern, max = 1000) {
+.searchDataTextValues <- function(x, type, pattern, max= 1000) {
 	if (type == 0L) { # Eclipse
 		values <- grep(pattern, x, ignore.case= TRUE, value= TRUE)
 	}
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ext_commands.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ext_commands.R
index 3f5072c..0f16c99 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ext_commands.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ext_commands.R
@@ -23,7 +23,7 @@
 #' @param wait if R must wait until the command is executed
 #'     (necessary if you need a return value)
 #' @returnType char
-.client.execCommand <- function(commandId, args = list(), wait = TRUE) {
+.client.execCommand <- function(commandId, args= list(), wait= TRUE) {
 	if (missing(commandId)) {
 		stop("Missing param: commandId");
 	}
@@ -41,7 +41,7 @@
 	if (wait) {
 		options <- options + 1L;
 	}
-	.Call("Re_ExecJCommand", paste("ext", commandId, sep=":"), args, options,
+	.Call("Re_ExecJCommand", paste("ext", commandId, sep= ":"), args, options,
 						PACKAGE= "(embedding)" );
 }
 
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide.R
index 4b19b4c..93307aa 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide.R
@@ -77,7 +77,7 @@
 #' 
 #' @param new if the choosen file can be new (does not yet exits)
 #' @export
-statet.chooseFile <- function(new = FALSE) {
+statet.chooseFile <- function(new= FALSE) {
 	if (!is.logical(new) || length(new) != 1) {
 		stop("Illegal argument: new")
 	}
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide_internal.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide_internal.R
index 620d92e..3d251cf 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide_internal.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/ide_internal.R
@@ -24,8 +24,8 @@
 #' @returnType integer
 #' @return a value for max.level
 #' @export
-estimateStrDepth <- function(x, max.elements = 2000L, max.levels = 10L) {
-	deeplength <- function(x, level = 0L) {
+estimateStrDepth <- function(x, max.elements= 2000L, max.levels= 10L) {
+	deeplength <- function(x, level= 0L) {
 		if (isS4(x)) {
 			xslots <- slotNames(class(x))
 			xlen <- length(xslots)
@@ -35,7 +35,7 @@
 			else {
 				s <- 0L
 				for (xslot in xslots) {
-					s <- s + deeplength(slot(x, xslot), level = level-1L)
+					s <- s + deeplength(slot(x, xslot), level= level-1L)
 				}
 				return (s)
 			}
@@ -46,7 +46,7 @@
 				return (xlen)
 			}
 			else {
-				return (sum(sapply(x, deeplength, level = level-1L, USE.NAMES=FALSE)))
+				return (sum(sapply(x, deeplength, level= level-1L, USE.NAMES= FALSE)))
 			}
 		}
 		return (0L)
@@ -73,15 +73,15 @@
 #' @returnType character
 #' @return output of \code{str}
 #' @export
-.statet.captureStr <- function(x, limit = 2000L) {
-	savedOptions <- options(width = 10000L)
+.statet.captureStr <- function(x, limit= 2000L) {
+	savedOptions <- options(width= 10000L)
 	on.exit(options(savedOptions))
-	levels <- estimateStrDepth(x, max.elements = limit)
+	levels <- estimateStrDepth(x, max.elements= limit)
 	if (!is.na(levels) && levels <= 1L && getRversion() >= "2.11.0") {
-		output <- capture.output(str(x, max.level = 1L, list.len = limit - 1L))
+		output <- capture.output(str(x, max.level= 1L, list.len= limit - 1L))
 	}
 	else {
-		output <- capture.output(str(x, max.level = levels))
+		output <- capture.output(str(x, max.level= levels))
 	}
 	return (output)
 }
@@ -129,13 +129,13 @@
 		if (!is.na(names[i])) {
 			path <- elementIds[[i]]
 			tryCatch(attr(expr[[path]], "statet.ElementId") <- names[i],
-					error = .rj.errorHandler )
+					error= .rj.errorHandler )
 		}
 	}
 	return (expr)
 }
 
-.statet.prepareCommand <- function(lines, filename = "<text>",
+.statet.prepareCommand <- function(lines, filename= "<text>",
 		srcfileAttributes, elementIds) {
 	# create srcfile object
 	srcfile <- srcfilecopy(filename, lines)
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/rgd.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/rgd.R
new file mode 100644
index 0000000..ff18044
--- /dev/null
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/rgd.R
@@ -0,0 +1,25 @@
+ #=============================================================================#
+ # Copyright (c) 2018 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================#
+
+
+#' Copies an R graphic from specified device to a new device.
+gr.copyGraphic <- function(devNr= dev.cur(), device= pdf, ...) {
+	prevDevNr <- dev.cur();
+	on.exit(dev.set(prevDevNr));
+	dev.set(devNr);
+	din <- par("din");
+	dev.copy(device, width= din[1], height= din[2], ...);
+	dev.off();
+	invisible(devNr)
+}
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R
index 08c7f70..5d94848 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R
@@ -89,7 +89,7 @@
 	return (invisible());
 }
 
-tmp.getFilteredCount <- function(index, filter, envir =.rj.tmp) {
+tmp.getFilteredCount <- function(index, filter, envir= .rj.tmp) {
 	filter <- get(filter, envir= envir, inherits= FALSE);
 	if (missing(index)) {
 		return (sum(filter));