Subject: #22873 (multiple fake cursors); and, #17684 (crosshairs / fill-column).

From: Keith David Bershatsky <[email-masked]>
Date: Tue, 20 Nov 2018 20:53:56 -0800

Version 016.000 [11/20/2018]

CHANGELOG:

-  The area of code that prevented crosshairs and other fake cursors from
   working on MacOS Mojave has been fixed.

-  New Feature:  This is the first implementation of a visible fill column
   using fake cursors, which has similar abilities to crosshairs; e.g.,
   draw forthwith whenever the real cursor gets drawn; draw on an idle
   timer; fill column indicator in inactive/active windows have different
   colors; suppress display of fill column indicator in inactive windows
   (if so desired); color of the fill column indicator in active/inactive
   windows is a different color when the cursor is lined up with the fill
   column and crosshairs is active.  Crosshairs incorporates the fill
   column indicator if the variable `+-fill-column' is non-nil; or, there
   is a separate minor-mode called `mc-fill-column-mode' (if so desired).

-  Floating horizontal ruler now increments by glyph->pixel_width instead
   of frame-char-width.  [This avoids visible gaps.]

-  Multiple fake cursors can now be placed at the end of a line when there
   is no `buffer-display-table' entry for a visible EOL glyph.

-  Crosshairs now use the line height instead of the glyph height.  [This
   avoids visible gaps in the vertical ruler of crosshairs.]

-  The border color for images with a fake cursor now match the fake
   cursor color.

-  With the gracious assistance of Eli Z., a test now exists for the situation
   when `draw_glyphs' redraws a tab stretch due to a subsequent character
   with a left overhang.  Additional work needs to be done ... [infra].

-  Only call `update_begin' / `update_end' when the frame was not already
   in the process of being updated.

-  Miscellaneous bug fixes.

SETUP:

Step 1:  git clone -b master git://git.sv.gnu.org/emacs.git

Step 2:  In the new emacs folder, go back to an Emacs version from 11/16/2018:

git reset --hard 644a308b4e1513e04be9360e1586e14b32ec0159

Step 3:  From within the new emacs folder created in Step 1, apply the patch:

git apply /path/to/the/11_20_2018__18_16_28_577.diff

[There should not be any error messages at this point; i.e, you should be returned to a new command prompt.]

Step 4:  ./autogen.sh

Step 5:  ./configure ... [your custom options]

Step 6:  make

Step 7:  make install

-  To try out built-in fake cursors with Magnar Sveen's library (multiple-cursors), install that package first.  [If the multiple-cursors package is installed, an eval-after-load "multiple-cursors-core" statement within crosshairs.el will redefine a couple of functions and set up a few keyboard shortcuts.]  If the multiple-cursors package by Magnar Sveen is not already installed, then there are two easy ways to install that package:

   Type:  M-x mc-install

   OR, evaluate the following snippet:

  (progn
    (require 'package)
    (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
    (package-initialize)
    (package-refresh-contents)
    (package-install 'multiple-cursors))

-  To try out crosshairs and the visible fill column, type:  M-x +-mode

-  To try out only the visible fill column, type:  M-x mc-fill-column-mode

-  To learn how to use the multiple fake cursors feature, examine the
   interactive function `mc-test'.

TODO:

-  Crosshairs in the inactive windows is causing cursors in the active
   windows to be erased (when the active window drew prior thereto).

-  Face of tab stretch gets extended to window edge on NS, but not on X11
   or NT platforms:
   https://lists.gnu.org/archive/html/emacs-devel/2018-11/msg00316.html

-  Continue working on the section of code within `draw_glyphs' that is
   responsible for redrawing a stretch tab (erasing a fake cursor) when the next
   character has a left overhang.  "	A".  A temporary fix has been instituted
   that simply bypasses the section of code at issue; however, the optimal
   solution will be to let `draw_glyphs' do its thing and then redraw the
   fake cursors along the stretch tab subsequent thereto.

-  Multiple Cursors:  If point is in the middle of a composite character, then
   select a fully composed character so that the fake cursor is visible.

-  Fake cursors are being redrawn too often when non-selected visible windows
   have an ongoing process that require frequent redisplay updates (e.g.,
   an eshell buffer.  @lawlist may have already corrected the frequent redisplay
   issue as to mouse-overs, but will need to check this once again to be sure.