and the name of the file being opened. Then, upon success, the focus
is transferred to any open Emacs frame.
+ However, if Emacs is not running at the time the wrapper is opened,
+it starts Emacs and gives it the file to open as an argument. Note
+that if that Emacs in turn does not start the Emacs server, subsequent
+attempts to open the file with the wrapper will fail.
+
@cindex /content directory, android
Some files are given to Emacs as ``content identifiers'', which the
system provides access to outside the normal filesystem APIs. Emacs
DialogInterface.OnCancelListener
{
private static final String TAG = "EmacsOpenActivity";
+ public static String fileToOpen;
private class EmacsClientThread extends Thread
{
Process process;
EmacsClientThread thread;
File file;
+ Intent intent;
+
+ /* If the Emacs service is not running, then start Emacs and make
+ it open this file. */
+
+ if (EmacsService.SERVICE == null)
+ {
+ fileToOpen = fileName;
+ intent = new Intent (EmacsOpenActivity.this,
+ EmacsActivity.class);
+ finish ();
+ startActivity (intent);
+ return;
+ }
libDir = EmacsService.getLibraryDirectory (this);
builder = new ProcessBuilder (libDir + "/libemacsclient.so",
classPath = getApkFile ();
Log.d (TAG, "Initializing Emacs, where filesDir = " + filesDir
- + ", libDir = " + libDir + ", and classPath = " + classPath);
+ + ", libDir = " + libDir + ", and classPath = " + classPath
+ + "; fileToOpen = " + EmacsOpenActivity.fileToOpen);
/* Start the thread that runs Emacs. */
thread = new EmacsThread (this, new Runnable () {
(float) pixelDensityY,
classPath, EmacsService.this);
}
- }, needDashQ);
+ }, needDashQ,
+ /* If any file needs to be opened, open it now. */
+ EmacsOpenActivity.fileToOpen);
thread.start ();
}
catch (IOException exception)
package org.gnu.emacs;
import java.lang.Thread;
+import java.util.Arrays;
import android.os.Build;
+import android.util.Log;
public class EmacsThread extends Thread
{
+ private static final String TAG = "EmacsThread";
+
/* Whether or not Emacs should be started -Q. */
private boolean startDashQ;
/* Runnable run to initialize Emacs. */
private Runnable paramsClosure;
+ /* Whether or not to open a file after starting Emacs. */
+ private String fileToOpen;
+
public
EmacsThread (EmacsService service, Runnable paramsClosure,
- boolean startDashQ)
+ boolean startDashQ, String fileToOpen)
{
super ("Emacs main thread");
this.startDashQ = startDashQ;
this.paramsClosure = paramsClosure;
+ this.fileToOpen = fileToOpen;
}
@Override
{
String args[];
- if (!startDashQ)
- args = new String[] { "libandroid-emacs.so", };
+ if (fileToOpen == null)
+ {
+ if (!startDashQ)
+ args = new String[] { "libandroid-emacs.so", };
+ else
+ args = new String[] { "libandroid-emacs.so", "-Q", };
+ }
else
- args = new String[] { "libandroid-emacs.so", "-Q", };
+ {
+ if (!startDashQ)
+ args = new String[] { "libandroid-emacs.so",
+ fileToOpen, };
+ else
+ args = new String[] { "libandroid-emacs.so", "-Q",
+ fileToOpen, };
+ }
paramsClosure.run ();
/* Run the native code now. */
+ Log.d (TAG, "run: " + Arrays.toString (args));
EmacsNative.initEmacs (args, EmacsApplication.dumpFileName,
Build.VERSION.SDK_INT);
}
(cl-defmethod frame-creation-function (params &context (window-system android))
(x-create-frame-with-faces params))
-(cl-defmethod handle-args-function (_ignored &context (window-system android))
- ;; Nothing to do here: Android has no command line to provide
- ;; arguments on.
- (ignore))
+(cl-defmethod handle-args-function (args &context (window-system android))
+ ;; Android has no command line to provide arguments on.
+ ;; However, call x-handle-args to handle file name args.
+ (x-handle-args args))
\f
;;; Selection support.