Subject: 26.0.50; Using local emacs+tramp with remote emacsclient

From: [email-masked] (Peder O. Klingenberg)
Date: Fri, 21 Apr 2017 18:15:25 +0200

My workstation is running a bleeding edge emacs full-screen in a
dedicated display.  When working on a server, from time to time I use
programs that invoke the shell EDITOR.  I can set EDITOR to emacsclient,
but that will just open emacs on the remote machine, which is not what I
want.  I want whatever editing job needs doing to pop up in my local
fullscreen emacs.

I can ssh to the server, so obviously I can use my local emacs to edit
files there via Tramp.  And server.el already has functionality for
listening on a TCP port, which is easily forwarded over ssh (there are
various hacks out there for forwarding unix domain sockets as well,
which I haven't tried).

The missing piece is simply a way to let emacsclient instruct emacs that
the files it passes to emacs are remote.  Attached is a patch for your
consideration which accomplishes this.

Additionally, it would be handy to have some tooling for conveniently
forwarding the correct ports and setting up EDITOR with the correct -T
option on the remote machine, but that is outside the scope of emacs
code, I think.

>From 8a9b508809bf5bef2a797340614cbc4cb0c73a5a Mon Sep 17 00:00:00 2001
From: "Peder O. Klingenberg" <[email-masked]>
Date: Fri, 21 Apr 2017 17:16:08 +0200
Subject: [PATCH] New option -T / --tramp for remote editing with emacsclient

In combination with existing functionality for having server.el
listen on tcp ports, enables emacsclient on a remote machine to
instruct the local emacs to open remote files via Tramp.  Useful with
remote programs that invoke EDITOR.

* lib-src/emacsclient.c (main, decode_options)
(print_help_and_exit, longopts): New option --tramp / -T which
specifies how emacs should use tramp to find remote files.
* doc/emacs/misc.texi (emacsclient Options): Document new
--tramp / -T options.
---
 doc/emacs/misc.texi   | 30 ++++++++++++++++++++++++++++++
 etc/NEWS              |  6 ++++++
 lib-src/emacsclient.c | 20 ++++++++++++++++++--
 3 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index bcc20a6db1..34a9d885bf 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1872,6 +1872,36 @@ emacsclient Options
 server is using the graphical display, but if the Emacs server is
 running on a text terminal, it creates a new frame in the current text
 terminal.
+
+@item -T @var{tramp-prefix}
+@itemx --tramp-prefix=@var{tramp-prefix}
+@cindex @env{EMACSCLIENT_TRAMP} environment variable
+Prefix to add to filenames for emacs to locate files on remote
+machines through TRAMP.  This is mostly useful in combination with
+setting @code{server-use-tcp} to non-@code{nil}, ssh-forwarding the
+listening port, and making the @var{server-file} available to
+@command{emacsclient}.  This combination allows programs on a remote
+machine to use @command{emacsclient} as @env{EDITOR}, but instead of
+starting emacs on the remote machine, the files will be opened in the
+local emacs through TRAMP.
+
+Setting the environment variable @env{EMACSCLIENT_TRAMP} has the same
+effect as using this option.  If both are specified, the explicit
+option will take precedence.
+
+For example, assume two hosts, @samp{local} and @samp{remote}, with
+@samp{/home} on a shared file system, and that the local emacs listens
+on tcp port 12345:
+
+@example
+local$ ssh -R12345:localhost:12345 remote
+remote$ export EDITOR="emacsclient \
+        --server-file=server \
+        --tramp=/ssh:remote:'
+remote$ $EDITOR /tmp/foo.txt #Should open in local emacs.
+@end example
+
+@xref{Top, The Tramp Manual,,tramp, The Tramp Manual}
 @end table
 
   The new graphical or text terminal frames created by the @samp{-c}
diff --git a/etc/NEWS b/etc/NEWS
index 76c9dbc331..4599efd7da 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -340,6 +340,12 @@ want to reverse the direction of the scroll, customize
 ** Emacsclient has a new option -u/--suppress-output.  The option
 suppresses display of return values from the server process.
 
++++
+** Emacsclient has a new option -T/--tramp.  This helps with using a
+local emacs as the target for a remote emacsclient.  With appropriate
+setup, one can now set EDITOR on a remote machine to emacsclient, and
+use the local emacs to edit remote files via Tramp.
+
 
 * Editing Changes in Emacs 26.1
 
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 7b735dfb05..0661480f58 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -149,6 +149,9 @@ const char *socket_name = NULL;
 /* If non-NULL, the filename of the authentication file.  */
 const char *server_file = NULL;
 
+/* If non-NULL, the tramp prefix emacs must use to find the files.  */
+const char *tramp_prefix = NULL;
+
 /* PID of the Emacs server process.  */
 int emacs_pid = 0;
 
@@ -178,6 +181,7 @@ struct option longopts[] =
   { "server-file",	required_argument, NULL, 'f' },
   { "display",	required_argument, NULL, 'd' },
   { "parent-id", required_argument, NULL, 'p' },
+  { "tramp",	required_argument, NULL, 'T' },
   { 0, 0, 0, 0 }
 };
 
@@ -468,14 +472,15 @@ static void
 decode_options (int argc, char **argv)
 {
   alternate_editor = egetenv ("ALTERNATE_EDITOR");
+  tramp_prefix = egetenv ("EMACSCLIENT_TRAMP");
 
   while (1)
     {
       int opt = getopt_long_only (argc, argv,
 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
-			     "VHnequa:s:f:d:F:tc",
+			     "VHnequa:s:f:d:F:tcT:",
 #else
-			     "VHnequa:f:d:F:tc",
+			     "VHnequa:f:d:F:tcT:",
 #endif
 			     longopts, 0);
 
@@ -554,6 +559,10 @@ decode_options (int argc, char **argv)
           frame_parameters = optarg;
           break;
 
+        case 'T':
+          tramp_prefix = optarg;
+          break;
+
 	default:
 	  message (true, "Try '%s --help' for more information\n", progname);
 	  exit (EXIT_FAILURE);
@@ -654,6 +663,9 @@ The following OPTIONS are accepted:\n\
 			Editor to fallback to if the server is not running\n"
 "			If EDITOR is the empty string, start Emacs in daemon\n\
 			mode and try connecting again\n"
+"-T PREFIX, --tramp=PREFIX\n\
+                        PREFIX to filenames emacs needs to use to find files\n\
+                        local to emacsclient\n"
 "\n\
 Report bugs with M-x report-emacs-bug.\n");
   exit (EXIT_SUCCESS);
@@ -1687,6 +1699,8 @@ main (int argc, char **argv)
         }
     }
   send_to_emacs (emacs_socket, "-dir ");
+  if (tramp_prefix)
+    quote_argument (emacs_socket, tramp_prefix);
   quote_argument (emacs_socket, cwd);
   send_to_emacs (emacs_socket, "/");
   send_to_emacs (emacs_socket, " ");
@@ -1791,6 +1805,8 @@ main (int argc, char **argv)
 #endif
 
           send_to_emacs (emacs_socket, "-file ");
+	  if (tramp_prefix && file_name_absolute_p (argv[i]))
+	    quote_argument (emacs_socket, tramp_prefix);
           quote_argument (emacs_socket, argv[i]);
           send_to_emacs (emacs_socket, " ");
         }
-- 
2.11.0

In GNU Emacs 26.0.50 (build 1, x86_64-apple-darwin14.5.0, NS appkit-1348.17 Version 10.10.5 (Build 14F2315))
 of 2017-04-14 built on modesty.local
Repository revision: e6750596ef55352c260c200747bec3303e181fe8
Windowing system distributor 'Apple', version 10.3.1348
Recent messages:
Searching for ‘0000’....
Quit
<C-tab> is undefined
Undo in region!
Mark set
Redo in region!
Undo in region!
previous-line: Beginning of buffer [6 times]
Making completion list...
funcall-interactively: End of buffer

Configured features:
RSVG DBUS NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS

Important settings:
  value of $LANG: en_NO.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Diff

Minor modes in effect:
  TeX-PDF-mode: t
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  whitespace-mode: t
  diff-auto-refine-mode: t
  show-paren-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  shell-dirtrack-mode: t
  ido-everywhere: t
  cl-old-struct-compat-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/Users/pok/.emacs.d/elpa/org-20170210/ox hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox
/Users/pok/.emacs.d/elpa/org-20170210/ox-texinfo hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-texinfo
/Users/pok/.emacs.d/elpa/org-20170210/ox-publish hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-publish
/Users/pok/.emacs.d/elpa/org-20170210/ox-org hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-org
/Users/pok/.emacs.d/elpa/org-20170210/ox-odt hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-odt
/Users/pok/.emacs.d/elpa/org-20170210/ox-md hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-md
/Users/pok/.emacs.d/elpa/org-20170210/ox-man hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-man
/Users/pok/.emacs.d/elpa/org-20170210/ox-latex hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-latex
/Users/pok/.emacs.d/elpa/org-20170210/ox-icalendar hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-icalendar
/Users/pok/.emacs.d/elpa/org-20170210/ox-html hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-html
/Users/pok/.emacs.d/elpa/org-20170210/ox-beamer hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-beamer
/Users/pok/.emacs.d/elpa/org-20170210/ox-ascii hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ox-ascii
/Users/pok/.emacs.d/elpa/org-20170210/org hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org
/Users/pok/.emacs.d/elpa/org-20170210/org-w3m hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-w3m
/Users/pok/.emacs.d/elpa/org-20170210/org-version hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-version
/Users/pok/.emacs.d/elpa/org-20170210/org-timer hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-timer
/Users/pok/.emacs.d/elpa/org-20170210/org-table hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-table
/Users/pok/.emacs.d/elpa/org-20170210/org-src hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-src
/Users/pok/.emacs.d/elpa/org-20170210/org-rmail hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-rmail
/Users/pok/.emacs.d/elpa/org-20170210/org-protocol hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-protocol
/Users/pok/.emacs.d/elpa/org-20170210/org-plot hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-plot
/Users/pok/.emacs.d/elpa/org-20170210/org-pcomplete hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-pcomplete
/Users/pok/.emacs.d/elpa/org-20170210/org-mouse hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-mouse
/Users/pok/.emacs.d/elpa/org-20170210/org-mobile hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-mobile
/Users/pok/.emacs.d/elpa/org-20170210/org-mhe hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-mhe
/Users/pok/.emacs.d/elpa/org-20170210/org-macs hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-macs
/Users/pok/.emacs.d/elpa/org-20170210/org-macro hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-macro
/Users/pok/.emacs.d/elpa/org-20170210/org-loaddefs hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-loaddefs
/Users/pok/.emacs.d/elpa/org-20170210/org-list hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-list
/Users/pok/.emacs.d/elpa/org-20170210/org-irc hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-irc
/Users/pok/.emacs.d/elpa/org-20170210/org-install hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-install
/Users/pok/.emacs.d/elpa/org-20170210/org-inlinetask hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-inlinetask
/Users/pok/.emacs.d/elpa/org-20170210/org-info hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-info
/Users/pok/.emacs.d/elpa/org-20170210/org-indent hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-indent
/Users/pok/.emacs.d/elpa/org-20170210/org-id hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-id
/Users/pok/.emacs.d/elpa/org-20170210/org-habit hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-habit
/Users/pok/.emacs.d/elpa/org-20170210/org-gnus hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-gnus
/Users/pok/.emacs.d/elpa/org-20170210/org-footnote hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-footnote
/Users/pok/.emacs.d/elpa/org-20170210/org-feed hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-feed
/Users/pok/.emacs.d/elpa/org-20170210/org-faces hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-faces
/Users/pok/.emacs.d/elpa/org-20170210/org-eshell hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-eshell
/Users/pok/.emacs.d/elpa/org-20170210/org-entities hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-entities
/Users/pok/.emacs.d/elpa/org-20170210/org-element hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-element
/Users/pok/.emacs.d/elpa/org-20170210/org-docview hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-docview
/Users/pok/.emacs.d/elpa/org-20170210/org-datetree hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-datetree
/Users/pok/.emacs.d/elpa/org-20170210/org-ctags hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-ctags
/Users/pok/.emacs.d/elpa/org-20170210/org-crypt hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-crypt
/Users/pok/.emacs.d/elpa/org-20170210/org-compat hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-compat
/Users/pok/.emacs.d/elpa/org-20170210/org-colview hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-colview
/Users/pok/.emacs.d/elpa/org-20170210/org-clock hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-clock
/Users/pok/.emacs.d/elpa/org-20170210/org-capture hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-capture
/Users/pok/.emacs.d/elpa/org-20170210/org-bibtex hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-bibtex
/Users/pok/.emacs.d/elpa/org-20170210/org-bbdb hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-bbdb
/Users/pok/.emacs.d/elpa/org-20170210/org-attach hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-attach
/Users/pok/.emacs.d/elpa/org-20170210/org-archive hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-archive
/Users/pok/.emacs.d/elpa/org-20170210/org-agenda hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/org-agenda
/Users/pok/.emacs.d/elpa/org-20170210/ob hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob
/Users/pok/.emacs.d/elpa/org-20170210/ob-tangle hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-tangle
/Users/pok/.emacs.d/elpa/org-20170210/ob-table hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-table
/Users/pok/.emacs.d/elpa/org-20170210/ob-sqlite hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-sqlite
/Users/pok/.emacs.d/elpa/org-20170210/ob-sql hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-sql
/Users/pok/.emacs.d/elpa/org-20170210/ob-shen hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-shen
/Users/pok/.emacs.d/elpa/org-20170210/ob-screen hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-screen
/Users/pok/.emacs.d/elpa/org-20170210/ob-scheme hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-scheme
/Users/pok/.emacs.d/elpa/org-20170210/ob-scala hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-scala
/Users/pok/.emacs.d/elpa/org-20170210/ob-sass hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-sass
/Users/pok/.emacs.d/elpa/org-20170210/ob-ruby hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-ruby
/Users/pok/.emacs.d/elpa/org-20170210/ob-ref hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-ref
/Users/pok/.emacs.d/elpa/org-20170210/ob-R hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-R
/Users/pok/.emacs.d/elpa/org-20170210/ob-python hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-python
/Users/pok/.emacs.d/elpa/org-20170210/ob-plantuml hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-plantuml
/Users/pok/.emacs.d/elpa/org-20170210/ob-picolisp hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-picolisp
/Users/pok/.emacs.d/elpa/org-20170210/ob-perl hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-perl
/Users/pok/.emacs.d/elpa/org-20170210/ob-org hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-org
/Users/pok/.emacs.d/elpa/org-20170210/ob-octave hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-octave
/Users/pok/.emacs.d/elpa/org-20170210/ob-ocaml hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-ocaml
/Users/pok/.emacs.d/elpa/org-20170210/ob-mscgen hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-mscgen
/Users/pok/.emacs.d/elpa/org-20170210/ob-maxima hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-maxima
/Users/pok/.emacs.d/elpa/org-20170210/ob-matlab hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-matlab
/Users/pok/.emacs.d/elpa/org-20170210/ob-makefile hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-makefile
/Users/pok/.emacs.d/elpa/org-20170210/ob-lob hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-lob
/Users/pok/.emacs.d/elpa/org-20170210/ob-lisp hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-lisp
/Users/pok/.emacs.d/elpa/org-20170210/ob-lilypond hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-lilypond
/Users/pok/.emacs.d/elpa/org-20170210/ob-ledger hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-ledger
/Users/pok/.emacs.d/elpa/org-20170210/ob-latex hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-latex
/Users/pok/.emacs.d/elpa/org-20170210/ob-keys hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-keys
/Users/pok/.emacs.d/elpa/org-20170210/ob-js hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-js
/Users/pok/.emacs.d/elpa/org-20170210/ob-java hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-java
/Users/pok/.emacs.d/elpa/org-20170210/ob-io hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-io
/Users/pok/.emacs.d/elpa/org-20170210/ob-haskell hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-haskell
/Users/pok/.emacs.d/elpa/org-20170210/ob-gnuplot hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-gnuplot
/Users/pok/.emacs.d/elpa/org-20170210/ob-fortran hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-fortran
/Users/pok/.emacs.d/elpa/org-20170210/ob-exp hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-exp
/Users/pok/.emacs.d/elpa/org-20170210/ob-eval hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-eval
/Users/pok/.emacs.d/elpa/org-20170210/ob-emacs-lisp hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-emacs-lisp
/Users/pok/.emacs.d/elpa/org-20170210/ob-dot hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-dot
/Users/pok/.emacs.d/elpa/org-20170210/ob-ditaa hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-ditaa
/Users/pok/.emacs.d/elpa/org-20170210/ob-css hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-css
/Users/pok/.emacs.d/elpa/org-20170210/ob-core hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-core
/Users/pok/.emacs.d/elpa/org-20170210/ob-comint hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-comint
/Users/pok/.emacs.d/elpa/org-20170210/ob-clojure hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-clojure
/Users/pok/.emacs.d/elpa/org-20170210/ob-calc hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-calc
/Users/pok/.emacs.d/elpa/org-20170210/ob-C hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-C
/Users/pok/.emacs.d/elpa/org-20170210/ob-awk hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-awk
/Users/pok/.emacs.d/elpa/org-20170210/ob-asymptote hides /Users/pok/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/ob-asymptote

Features:
(shadow mail-extr emacsbug texmathp tex-info tex texinfo bug-reference
magit-obsolete magit-blame magit-stash magit-bisect magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-branch
magit-files magit-refs magit-status magit magit-repos magit-apply
magit-wip magit-log magit-diff smerge-mode magit-core magit-autorevert
autorevert filenotify magit-process magit-margin magit-mode magit-git
crm magit-section magit-popup git-commit magit-utils log-edit message
sendmail dired dired-loaddefs rfc822 mml mml-sec epa epg gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils
mailheader with-editor async-bytecomp async dash cus-edit cus-start
cus-load wid-edit cl-print files-x conf-mode sort bubbles gamegrid
whitespace tabify imenu man grep pulse jka-compr tramp-cmds tramp-cache
tramp-sh eieio-opt speedbar sb-image ezimage dframe network-stream puny
nsm starttls tls gnutls slime-indentation slime-cl-indent cl-indent
slime-fancy slime-trace-dialog slime-fontifying-fu slime-package-fu
slime-references slime-compiler-notes-tree slime-scratch
slime-presentations bridge slime-macrostep macrostep slime-mdot-fu
slime-enclosing-context slime-fuzzy slime-fancy-trace
slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc
slime-repl elp slime-parse slime derived gud apropos etags xref project
arc-mode archive-mode pp hyperspec thingatpt browse-url help-fns
radix-tree misearch multi-isearch add-log log-view pcvs-util vc
vc-dispatcher vc-git diff-mode map cc-mode cc-fonts cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs linum paren paredit
pok-init yasnippet org-element avl-tree org org-macro org-footnote
org-pcomplete org-list org-faces org-entities noutline outline
easy-mmode org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob
ob-table ob-keys ob-exp ob-comint tramp tramp-compat tramp-loaddefs
trampver shell pcomplete parse-time advice ob-core ob-eval org-compat
org-macs org-loaddefs format-spec find-func cal-menu calendar
cal-loaddefs gedcom slime-autoloads reftex reftex-loaddefs reftex-vars
edmacro kmacro ido server dmacro cl compile comint ansi-color ring
finder-inf tex-site info package epg-config url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache url-vars seq byte-opt subr-x gv bytecomp byte-compile
cl-extra help-mode easymenu cconv cl-loaddefs pcase cl-lib time-date
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode elisp-mode lisp-mode prog-mode register page
menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core term/tty-colors frame cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite charscript
case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote dbusbind kqueue cocoa
ns multi-tty make-network-process emacs)

Memory information:
((conses 16 735171 58999)
 (symbols 48 45467 2)
 (miscs 40 2510 1989)
 (strings 32 122722 22141)
 (string-bytes 1 3844625)
 (vectors 16 72407)
 (vector-slots 8 1935160 221273)
 (floats 8 199 921)
 (intervals 56 56856 204)
 (buffers 976 54))