poporg is a small Emacs Lisp project to help editing program strings and comments using Org mode (or any other major mode). This can be useful as it is often more convenient to edit large pieces of text, like Emacs Lisp or Python docstrings, in an org-mode buffer instead of in a comment or a string.
Emacs does not easily handle multiple major modes in a single buffer. So far many solutions have been implemented, with varying degrees of success, but none is perfect. The poporg approach avoids the problem by extracting the text from the comment or the string from a buffer using a major programming mode, into a separate buffer to be edited in a text mode, but containing only that comment or that string. Once the edit is completed, the modified comment or string gets re-integrated in the buffer containing the program, replacing the original contents.
The main utility of this package is its ability to handle prefixes
  automatically.  For comments, it finds all contiguous nonempty comments on their
  own line, and strips the common prefix before inserting into the editing buffer
  (see poporg-comment-skip-regexp).  For strings, it checks if there is consistent
  indentation for the whole string (the opening delimiter of the string can only
  have whitespace before it), and uses that as the common prefix.  For regions, it
  just uses a naive common prefix.  When placing the edited text back in context,
  it adds the common prefix again, potentially stripping any trailing whitespace
  (see poporg-delete-trailing-whitespace).  It can even adjust the fill column in
  the editing buffer to account for indentation (see poporg-adjust-fill-column).
To install poporg, move file poporg.el to a place where Emacs will find it.  You
  might byte-compile the file if you want.  There are also El-Get and MELPA
  recipes.
To use poporg, you need to pick some unused keybinding and add a few lines to
  your ~/.emacs file, such as:
(autoload 'poporg-dwim "poporg" nil t)
(global-set-key (kbd "C-c \"") 'poporg-dwim)It is important that this be a global keybinding, or at least that the command
  poporg-dwim be available from both the programming and the text editing buffers.
The command poporg-dwim searches for a nearby comment or string (see
  poporg-find-string-or-comment) and, upon finding one, it opens an empty buffer
  in a new window with its contents available for editing.  If the region is
  active then poporg-dwim inserts the region into the buffer instead.  The
  original text is grayed out and set read-only to prevent editing in two places
  at once.  After editing, running poporg-dwim again from the editing buffer kills
  the editing buffer and inserts the edited text back into its original context.
Hopefully poporg-dwim will do what you expect in most situations.  It uses the
  buffer’s syntax table for parsing, so it should adapt well to most modes
  (including sextuple-quoted strings in Python).  If you run poporg-dwim in the
  vicinity of a grayed-out region that you are editing in another buffer, it pops
  to that buffer.  It has the following limitations:
- It does not understand empty strings.
 - It cannot deal very well with comments with ending delimiters.
 
For example, in c-mode, comments start with /* and end with */.  This is a
  problem because poporg needs a common prefix for all lines.  In order to make
  poporg understand these comments, write them on separate lines like this:
/*
 * Comments go here.  Not on a line with the opening delimiter or the
 * closing delimiter.
 */In this situation poporg will ignore the first and last lines because they are
  empty except for comment delimiters, and detect the common prefix __ or __*_ for
  the middle lines, depending on whether the * character is matched by
  poporg-comment-skip-regexp.
You will probably want to customize poporg-edit-hook, since that is where the
  major mode of the edit buffer is set.  The minor mode poporg-mode is activated
  in the edit buffer.  It contains the following keybindings by default:
| Command | Keybinding | Description | 
|---|---|---|
| poporg-edit-exit | C-x C-s | Save edit and kill poporg buffer | 
| poporg-update | C-c C-c | Save edit and keep poporg buffer | 
| poporg-update-and-save | C-c C-s | Save edit and keep poporg buffer; then save the original buffer | 
You can add additional keybindings to poporg-mode-map.  To abort the edit simply
  kill the buffer.
poporg was originally written and maintained by François Pinard, who had incorporated ideas into it from previous Emacs projects of his. Joe Rabinoff refactored the package to use the buffer’s syntax table for parsing, and subsequently took over maintainership.
Major programming modes show comments and strings in full, and when these comments or strings are written using Org, with all parts of a link visible, it may be disruptive to those sensible to line width limits. The nice org-link-minor-mode tool takes good care of this, by hiding the usually invisible parts of an Org link in other modes.
Org comes with many tools for spreading Org over other major modes, including the following minor modes which may be added to other major modes:
| Command | 
|---|
| orgstruct-mode | 
| orgstruct++-mode | 
| orgtbl-mode | 
Org also has the following globally available commands:
| Command | Usual keybinding | 
|---|---|
| org-store-link | C-c l | 
| org-insert-link-global | C-c L | 
| org open-at-point-global | C-c O | 
The extradoc.py tool in this poporg project has the purpose of extracting and
  processing the Org contents of a set of Python sources.  I used the .py suffix
  just in case there could be other extradoc.LANG tools for similarly handling
  sources in other languages.  This extradoc.py tool presumes that all Org text is
  made up by concatenating the content of all sextuple-quoted strings (I mean
  triple double-quoted strings).  Moreover, prefixed strings are not recognized.