help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: emacs-"distribution" for windows?


From: Robert Girault
Subject: Re: emacs-"distribution" for windows?
Date: Fri, 27 Jul 2018 14:14:16 -0300
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

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.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]