all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Robert Girault <robert@dev.null>
To: help-gnu-emacs@gnu.org
Subject: Re: emacs-"distribution" for windows?
Date: Fri, 27 Jul 2018 14:14:16 -0300	[thread overview]
Message-ID: <pjfjta$5ep$1@gioia.aioe.org> (raw)
In-Reply-To: mailman.4128.1532430814.1292.help-gnu-emacs@gnu.org

On 24/07/2018 08:13, emacs-list-18@pgxml.net wrote:
> Hi,
> 
>  i need a bit input from emacs users on the windows platform.
> 
>  What "distribution" do you use? Is the windows emacs from gnu suitable
>  for day to day work, or are there more windows-optimized emacs-dists
>  out there?
> 
>  Just tell me a bit about your setup, and what the main tasks you with
>  emacs are.

I have to tell you my story.  (Like the others, I also use no
distribution.  I haven't heard of one yet.  I would have loved to have
begun with a distribution, but I never knew of one.)

I was working on a really bad job and my girlfriend was working on her
dissertation.  She used a terrible editor called TeXworks and was
suffering dearly.  She works in a highly technical area, so I was sure
she would like the GNU EMACS.  So I put together the editor plus many
other software that she used.  I also wrote code to set it up in a more
personal way.  When it was ready, I thought the result was so good that
I began to use it myself every day and realized that Windows happens to
be more adequate than GNU systems for her type (and my type) of work.

I took the binary GNU EMACS from gnu.org.

It had to be portable.  She would put it on a USB drive and take it to
other systems and continue to work.  So when she'd run the GNU EMACS, it
should know how to find the start-up code without environment variables.
 I eventually convinced myself that

    site-lisp/site-start.el

is the solution.  I'm not a site of various users.  It's fine to
consider that my dot-emacs.

But EMACS does need the HOME variable sometimes.  So I wrote some code
to discover each time where is the EMACS binary running from.  I
eventually convinced myself the variable

  command-line-default-directory

is ideal for that.

(if (string= system-type "windows-nt")
    (progn
      (let ((my-path
             (split-string
              (expand-file-name command-line-default-directory) "/")))
        (setq *my-home-dir*
              (mapconcat 'identity
                         (subseq my-path 0 (- (length my-path) 2))
                         "/")))
      (setq command-line-default-directory *my-home-dir*)
      (setenv "HOME" *my-home-dir*)))

(cd *my-home-dir*)

(if (string= system-type "windows-nt")
    (setenv "TMPDIR" (concat (file-name-as-directory *my-home-dir*)
                             (file-name-as-directory "tmp"))))


Having installed MinGW inside the EMACS directory, I also stay away from
Windows command prompt as I think it's mostly useless.

(if (string= system-type "windows-nt")
    (setq shell-file-name "~/mingw/msys/1.0/bin/sh.exe"
	  explicit-shell-file-name "~/mingw/msys/1.0/bin/bash.exe"))

I add various of my programs to the PATH, so I can access them from the
EMACS shell --- ESHELL ---, which is my favorite.

(setq my-list-of-paths
      (mapcar (lambda (e)
		(concat (file-name-as-directory *my-home-dir*)
			(file-name-as-directory e)))
	      (if (string= system-type "windows-nt")
                  ;; Windows
		  '(
                    "miktex/texmfs/install/miktex/bin"
		    "git" "git/bin" "git/usr/bin"
		    "bin" ; the emacs bin directory
		    "ezwinports/bin"
		    "Racket"
		    "R/App/R-Portable/bin/i386"
		    "mingw/bin"
                    "lua/bin")
                ;; Other systems
		'())))

(if (string= system-type "windows-nt")
    (dolist (e my-list-of-paths)
      (setenv "PATH" (concat e ";" (getenv "PATH")))))

As it turns out, it's not just PATH that we need.  If we use
call-process, for example, we need exec-path too.

(setq exec-path
      (append (mapcar 'file-name-as-directory my-list-of-paths)
              exec-path))

On Windows, you're on your own, so you must bring your own team.

;; Use this GNU debugger
(when (string= system-type "windows-nt")
    (setq gdb-command-name "~/mingw/bin/gdb.exe"))

;; Use this spell checker
(when (string= system-type "windows-nt")
  (setq ispell-program-name "~/aspell/bin/aspell.exe"))

;; Use this locate program
(when (string= system-type "windows-nt")
  (setq locate-command "~/locate/locate.exe"))

;; Use this diff program
(when (string= system-type "windows-nt")
  (setq ediff-diff-program "~/git/usr/bin/diff.exe"))

;; Use this hexl program
(when (string= system-type "windows-nt")
  (setq hexl-program "~/bin/hexl.exe"))

;; Use this latex program
(when (string= system-type "windows-nt")
  (setq tex-command "~/miktex/miktex/bin/latex.exe"))

Obviously this isn't all the code I run on start up, but it's the one
that's Windows related, so I stop there.  I think most of the work is in
finding all the programs that you need.  I already mentioned MinGW, but
I also took many programs from ezwinports --- special thanks to Eli
Zaretskii --- and others from other places.


  parent reply	other threads:[~2018-07-27 17:14 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.4128.1532430814.1292.help-gnu-emacs@gnu.org>
2018-07-25  6:28 ` emacs-"distribution" for windows? Anssi Saari
2018-07-27 17:14 ` Robert Girault [this message]
2018-07-24 11:13 emacs-list-18
2018-07-24 11:46 ` Tim Visher
2018-07-25  0:43 ` Robert Thorpe
2018-07-25 14:37   ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='pjfjta$5ep$1@gioia.aioe.org' \
    --to=robert@dev.null \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.