Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
;; eev-on-windows.el - some support for M$ Windows. -*- lexical-binding: nil; -*- ;; Copyright (C) 2019,2021 Free Software Foundation, Inc. ;; ;; This file is part of GNU eev. ;; ;; GNU eev is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; GNU eev is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;; ;; Author: Eduardo Ochs <[email protected]> ;; Maintainer: Eduardo Ochs <[email protected]> ;; Version: 20220416 ;; Keywords: e-scripts ;; ;; Latest version: <http://angg.twu.net/eev-current/eev-on-windows.el> ;; htmlized: <http://angg.twu.net/eev-current/eev-on-windows.el.html> ;; See also: <http://angg.twu.net/eev-current/eev-beginner.el.html> ;; <http://angg.twu.net/eev-intros/find-eev-intro.html> ;; (find-eev-intro) ;; «.how-to-test-this» (to "how-to-test-this") ;; «.requires» (to "requires") ;; «.ee-download-with-eww» (to "ee-download-with-eww") ;; «.eshell» (to "eshell") ;; «.ee-use-eshell» (to "ee-use-eshell") ;; «.ee-use-shell» (to "ee-use-shell") ;; «.lua» (to "lua") ;; «.ee-use-lua» (to "ee-use-lua") ;; «.ee-use-lua-exe» (to "ee-use-lua-exe") ;; «.wget» (to "wget") ;; «.ee-use-wget-exe» (to "ee-use-wget-exe") ;; «.ee-use-wget» (to "ee-use-wget") ;; «.ee-use-firefox» (to "ee-use-firefox") ;; «.ee-use-googlechrome» (to "ee-use-googlechrome") ;; «.red-stars» (to "red-stars") ;; «.ee-use-bullets» (to "ee-use-bullets") ;; «.ee-use-red-stars» (to "ee-use-red-stars") ;; «.find-angg-es» (to "find-angg-es") ;; «.ee-use-find-angg-es-remote» (to "ee-use-find-angg-es-remote") ;; «.ee-use-find-angg-es-local» (to "ee-use-find-angg-es-local") ;; «.high-level» (to "high-level") ;; «.ee-use-windows» (to "ee-use-windows") ;; «.ee-use-gnu-linux» (to "ee-use-gnu-linux") ;; «.ee-use-gnu-linux-but-simulate» (to "ee-use-gnu-linux-but-simulate") ;; «.directories» (to "directories") ;; «.basic-tests» (to "basic-tests") ;;; Commentary: ;; ;; Long short short: this is obsolete, and has been superseded by: ;; ;; (find-eev "eev-wconfig.el") ;; http://angg.twu.net/eev-wconfig.html ;; ;; Long story medium-sized: In 2021 I found some Windows users who ;; were interested in learning Emacs and eev, and I wrote this to try ;; to make configuring eev on Windows easier. See: ;; ;; http://angg.twu.net/2021-2022-workshops.html ;; (find-windows-beginner-intro) ;; ;; In april/2022 I started to work on a different approach for ;; configuring eev on Windows, and I declared that this file had ;; become obsolete. The new approach is here: ;; ;; (find-eev "eev-wconfig.el") ;; http://angg.twu.net/eev-customize.html ;; ;; Long story long: read the rest of this file (warning: old stuff!). ;; I wrote this for some Experimental, undocumented, and messy. Every ;; time that I give a workshop to Windows users this file changes a ;; lot. Most of what was here in the last revision was rewritten in a ;; more human-readable form and placed in: ;; ;; (find-windows-beginner-intro) ;; «how-to-test-this» (to ".how-to-test-this") ;; ;; THIS BLOCK IS BEING REWRITTEN AND IS CURRENTLY A MESS. ;; Most of the docs and tests were moved to: ;; ;; (find-windows-beginner-intro) ;; ;; 0.1. How to test this ;; ===================== ;; ;; (require 'eev-on-windows) ;; (ee-use-windows) ;; (to "directories") ;; ;; The sexp `(to ...)' will take you to the two last sections of this ;; file, where there are instructions for configuring some directories ;; and s series of tests. ;; ;; ;; 0.2. Setting your ~/.emacs ;; ========================== ;; If you are helping me to test this AND you know how to edit your ;; ~/.emacs (hey Daniel Bastos! Daniel Tavares and Julha, please ;; ignore this!) then this is what you should put there: ;; ;; ;; See: (find-eevfile "eev-on-windows.el" ".emacs") ;; (require 'eev-beginner) ;; (require 'eev-on-windows) ;; (ee-use-windows) ;; (setenv "FIREFOXDIR" "c:/Program Files/Mozilla Firefox") ;; (setenv "GOOGLECHROMEDIR" "c:/Program Files/Google/Chrome/Application") ;; (setenv "MPVDIR" "c:/Users/danie/OneDrive/Documentos/mpv") ;; ;; Tests: (find-eev "eev-on-windows.el" "directories") ;; ;; Note that "(require 'eev-on-windows)" runs some setenvs. The ;; setenvs above, that will override the ones in eev-on-windows.el ;; with the paths that are correct in your machine, MUST come AFTER ;; the "(require 'eev-on-windows)". ;; «requires» (to ".requires") ;; (require 'eww) (require 'eshell) (require 'em-alias) ;;; ;;; _____ ____ __ ;;; / _ \ \ /\ / /\ \ /\ / / ;;; | __/\ V V / \ V V / ;;; \___| \_/\_/ \_/\_/ ;;; ;; «ee-download-with-eww» (to ".ee-download-with-eww") ;; See: (find-windows-beginner-intro "7. eev-on-windows.el") ;; (find-node "(eww)Top") ;; Test with: ;; (mkdir "~/bin/" t) ;; (delete-file "~/bin/wget.exe") ;; (ee-download-with-eww "http://angg.twu.net/2021-oficina/wget.exe" "~/bin/") ;; (defun ee-download-with-eww (url dir) (url-retrieve url #'eww-download-callback (list url dir))) ;;; _____ _ _ _ ;;; | ____|___| |__ ___| | | ;;; | _| / __| '_ \ / _ \ | | ;;; | |___\__ \ | | | __/ | | ;;; |_____|___/_| |_|\___|_|_| ;;; ;; «eshell» (to ".eshell") ;; «ee-use-eshell» (to ".ee-use-eshell") ;; Redefine `eepitch-shell' and `eepitch-shell2' to make them use ;; Eshell instead of the default shell. ;; See: (find-windows-beginner-intro "5.6. Eshell") ;; (find-windows-beginner-intro "7.1. `ee-use-windows'") ;; (defun ee-use-eshell () (interactive) (defun eepitch-shell () (interactive) (eepitch-eshell)) (defun eepitch-shell2 () (interactive) (eepitch-eshell2)) ) ;; «ee-use-shell» (to ".ee-use-shell") ;; Redefine `eepitch-shell' and `eepitch-shell2' with their default ;; definitions. Running this cancels the effect of `ee-use-eshell'. ;; See: (find-eev "eepitch.el" "eepitch-shell") ;; (defun ee-use-shell () (interactive) (defun eepitch-shell () (interactive) (eepitch '(shell))) (defun eepitch-shell2 () (interactive) (eepitch '(shell "*shell 2*"))) ) ;;; _ ;;; __ ____ _ ___| |_ ;;; \ \ /\ / / _` |/ _ \ __| ;;; \ V V / (_| | __/ |_ ;;; \_/\_/ \__, |\___|\__| ;;; |___/ ;; ;; «wget» (to ".wget") ;; These functions configure what wget to use: on GNU/Linux we use the ;; wget that is on the $PATH, and on M$ Windows we use ~/bin/wget.exe. ;; ;; *** BIG WARNING: *** ;; These functions DELETE your eshell-aliases-file and create a new ;; one with a single alias inside!!! See: ;; (find-node "(eshell)Aliases" "eshell-aliases-file") ;; «ee-use-wget-exe» (to ".ee-use-wget-exe") (defun ee-use-wget-exe () (interactive) (delete-file eshell-aliases-file) (eshell/alias "wget" "~/bin/wget.exe $*") (setq ee-wget-program "~/bin/wget.exe")) ;; «ee-use-wget» (to ".ee-use-wget") (defun ee-use-wget () (interactive) (delete-file eshell-aliases-file) (eshell/alias "wget" "wget $*") (setq ee-wget-program "wget")) ;;; _____ _ __ ;;; | ___(_)_ __ ___ / _| _____ __ ;;; | |_ | | '__/ _ \ |_ / _ \ \/ / ;;; | _| | | | | __/ _| (_) > < ;;; |_| |_|_| \___|_| \___/_/\_\ ;;; ;; «ee-use-firefox» (to ".ee-use-firefox") (defun ee-use-firefox () (interactive) (setq ee-find-youtube-video-program 'find-firefox) (defalias 'find-pdf-page 'find-firefox-page)) ;; «ee-use-googlechrome» (to ".ee-use-googlechrome") (defun ee-use-googlechrome () (interactive) (setq ee-find-youtube-video-program 'find-googlechrome) (defalias 'find-pdf-page 'find-googlechrome-page)) ;;; ____ _ _ ;;; | _ \ ___ __| | ___| |_ __ _ _ __ ___ ;;; | |_) / _ \/ _` | / __| __/ _` | '__/ __| ;;; | _ < __/ (_| | \__ \ || (_| | | \__ \ ;;; |_| \_\___|\__,_| |___/\__\__,_|_| |___/ ;;; ;; «red-stars» (to ".red-stars") ;; In workshops for beginners I prefer to make them use red bullets ;; instead of red stars because the red bullets don't get corrupted ;; when pasted to Telegram of Gmail. See: ;; (find-eev-quick-intro "6.4. Red stars") ;; (find-red-star-links) ;; «ee-use-bullets» (to ".ee-use-bullets") ;; From: (find-red-star-links 2 "red bullets by default") ;; (defun ee-use-bullets () (interactive) (eepitch-set-glyph0 ?• ?• 'eepitch-star-face) (defun ee-adjust-red-stars (str) (replace-regexp-in-string "*" "•" str))) ;; «ee-use-red-stars» (to ".ee-use-red-stars") (defun ee-use-red-stars () (interactive) (defun ee-adjust-red-stars (str) str)) ;;; __ _ _ __ ;;; / _(_)_ __ __| | __ _ _ __ __ _ __ _ / /__ ___ ;;; | |_| | '_ \ / _` |_____ / _` | '_ \ / _` |/ _` | / / _ \/ __| ;;; | _| | | | | (_| |_____| (_| | | | | (_| | (_| |/ / __/\__ \ ;;; |_| |_|_| |_|\__,_| \__,_|_| |_|\__, |\__, /_/ \___||___/ ;;; |___/ |___/ ;; ;; «find-angg-es» (to ".find-angg-es") ;; See: (find-angg-es-links) ;; «ee-use-find-angg-es-local» (to ".ee-use-find-angg-es-local") (defun ee-use-find-angg-es-local () (interactive) (code-c-d "angg" "~/" :anchor :grep) (code-c-d "es" "$ES/") (defun find-es (stem &rest rest) (apply 'find-anchor (ee-esfile (concat stem ".e")) rest)) ) ;; «ee-use-find-angg-es-remote» (to ".ee-use-find-angg-es-remote") (defun ee-use-find-angg-es-remote () (interactive) (defun find-angg (fname &rest rest) (apply 'find-wgeta (format "http://angg.twu.net/%s" fname) rest)) (defun find-es (fname &rest rest) (apply 'find-wgeta (format "http://angg.twu.net/e/%s.e" fname) rest)) ) ;;; _ ;;; | | _ _ __ _ ;;; | | | | | |/ _` | ;;; | |__| |_| | (_| | ;;; |_____\__,_|\__,_| ;;; ;; «lua» (to ".lua") ;; «ee-use-lua» (to ".ee-use-lua") (defun ee-use-lua () (interactive) (defun eepitch-lua51 () (interactive) (eepitch-comint "lua51" "lua5.1")) (defun eepitch-lua51 () (interactive) (eepitch-comint "lua52" "lua5.2")) ) ;; «ee-use-lua-exe» (to ".ee-use-lua-exe") (defun ee-use-lua-exe () (interactive) (defun eepitch-lua51 () (interactive) (eepitch-comint "lua52.exe" "~/bin/lua52.exe -i")) (defun eepitch-lua52 () (interactive) (eepitch-comint "lua52.exe" "~/bin/lua52.exe -i")) ) ;;; _ _ _ _ _ _ ;;; | | | (_) __ _| |__ | | _____ _____| | ;;; | |_| | |/ _` | '_ \ _____| |/ _ \ \ / / _ \ | ;;; | _ | | (_| | | | |_____| | __/\ V / __/ | ;;; |_| |_|_|\__, |_| |_| |_|\___| \_/ \___|_| ;;; |___/ ;; ;; «high-level» (to ".high-level") ;; High-level configuration functions that run many low-level configs. ;; See: (find-windows-beginner-intro "7.1. `ee-use-windows'") ;; ;; «ee-use-windows» (to ".ee-use-windows") ;; «ee-use-gnu-linux» (to ".ee-use-gnu-linux") ;; «ee-use-gnu-linux-but-simulate» (to ".ee-use-gnu-linux-but-simulate") ;; (defun ee-use-windows () (interactive) (ee-use-bullets) (ee-use-eshell) (ee-use-wget-exe) (ee-use-lua-exe) (setq ee-pdftotext-program "~/bin/pdftotext.exe") (setq ee-firefox-program "$FIREFOXDIR/firefox.exe") (setq ee-googlechrome-program "$GOOGLECHROMEDIR/chrome.exe") (setq ee-mpv-program "$MPVDIR/mpv.exe") (ee-use-find-angg-es-remote) (ee-use-googlechrome) (ee-use-youtube-videos) ) ;; This sort of reverts what `ee-use-windows' does. ;; (defun ee-use-gnu-linux () (interactive) (ee-use-red-stars) (ee-use-shell) (ee-use-wget) (ee-use-lua) (setq ee-pdftotext-program "pdftotext") (setq ee-firefox-program "firefox") (setq ee-googlechrome-program "google-chrome") (setq ee-mpv-program "mpv") (ee-use-find-angg-es-local) (ee-use-googlechrome) (defalias 'find-pdf-page 'find-xpdf-page) (ee-use-local-videos) ) ;; I use this to make the Emacs in my Debian box behave similarly to ;; an Emacs on M$ Windows after running `ee-use-windows'. "Similarly" ;; here means "similarly enough to let me test most of the settings ;; of `ee-use-windows' and record demos". ;; (defun ee-use-gnu-linux-but-simulate () (interactive) (ee-use-bullets) (ee-use-eshell) (ee-use-wget) (ee-use-lua) (setq ee-pdftotext-program "pdftotext") (setq ee-firefox-program "firefox") (setq ee-googlechrome-program "google-chrome") (setq ee-mpv-program "mpv") (ee-use-find-angg-es-remote) (ee-use-googlechrome) (ee-use-youtube-videos) ) ;; «directories» (to ".directories") ;; From the internets: ;; ;; "If you can start a Mozilla application by using a shortcut or ;; launcher icon, then you can usually see where its installation ;; directory is located by context-clicking (right-clicking) the ;; icon and looking at the properties." ;; ;; Apparently you'll have to do this by hand for Firefox, Chrome, and ;; Mpv - I couldn't find a way to automate this... =/ ;; ;; Most people will have to configure this. ;; ;; These directories are for Daniel Almeida's machine. (setenv "FIREFOXDIR" "c:/Program Files/Mozilla Firefox") (setenv "GOOGLECHROMEDIR" "c:/Program Files/Google/Chrome/Application") (setenv "MPVDIR" "c:/Users/danie/OneDrive/Documentos/mpv") ;; ;; Julha needs to run this: ;; (setenv "FIREFOXDIR" "c:/Program Files/Mozilla Firefox") ;; (setenv "MPVDIR" "c:/Users/User/Desktop") ;; (defalias 'find-pdf-page 'find-firefox-page) ;; «basic-tests» (to ".basic-tests") ;; 1. Basic tests ;; ============== ;; (find-fline "~/bin/" "wget.exe") ;; (find-fline "~/bin/" "pdftotext.exe") ;; (find-fline "$GOOGLECHROMEDIR/" "chrome.exe") ;; (find-fline "$FIREFOXDIR/" "firefox.exe") ;; (find-fline "$MPVDIR/" "mpv.exe") ;; (find-callprocess `("~/bin/wget.exe" "--help")) ;; (find-callprocess `("~/bin/pdftotext.exe" "--help")) ;; (find-callprocess `("$GOOGLECHROMEDIR/chrome.exe" "--help")) ;; (find-callprocess `("$FIREFOXDIR/firefox.exe" "--help")) ;; (find-callprocess `("$MPVDIR/mpv.exe" "--help")) ;; (find-callprocess `(,ee-wget-program "--help")) ;; (find-callprocess `(,ee-pdftotext-program "--help")) ;; (find-callprocess `(,ee-googlechrome-program "--help")) ;; (find-callprocess `(,ee-firefox-program "--help")) ;; (find-callprocess `(,ee-mpv-program "--help")) ;; (find-wget "http://angg.twu.net/eev-current/eev-on-windows.el") ;; (find-angg "eev-current/eev-on-windows.el") ;; (find-es "2021-oficina" "M-3-M-e") ;; ;; KNOWN BUG: the "--help" option doesn't work on chrome in Windows. ;; ;; 1.1. Test `M-x brff' and `M-x brg' ;; ---------------------------------- ;; Check if the tests in this section of the main tutorial work: ;; (find-eev-quick-intro "3.1. Non-elisp hyperlinks") ;; ;; ;; 2. Tests for using the browser as a PDF viewer ;; ============================================== ;; For the tests for using browsers as PDF viewers you will need to ;; understand these sections of the tutorials, and will need to run ;; some of the commands in them: ;; (find-psne-intro "1. Local copies of files from the internet") ;; (find-psne-intro "3. The new way: `M-x brep'") ;; (find-pdf-like-intro "2. Preparation") ;; (find-pdf-like-intro "2. Preparation" "Coetzee99") ;; ;; Then try: ;; (find-googlechrome-page "~/Coetzee99.pdf" 3) ;; (find-firefox-page "~/Coetzee99.pdf" 3) ;; (find-pdf-page "~/Coetzee99.pdf" 3) ;; ;; You can select the browser to use for PDFs with these sexps: ;; (defalias 'find-pdf-page 'find-googlechrome-page) ;; (defalias 'find-pdf-page 'find-firefox-page) ;; ;; ;; 2.1. Test the short links to PDFs ;; --------------------------------- ;; The short links to PDFs are explained here: ;; (find-pdf-like-intro "7. Shorter hyperlinks to PDF files") ;; Test: ;; (code-pdf-page "livesofanimals" "~/Coetzee99.pdf") ;; (find-livesofanimalspage (+ -110 127) "wrong thoughts") ;; ;; 3. Test the links to PDFs converted to text ;; =========================================== ;; The links to PDFs converted to text are explained here: ;; (find-pdf-like-intro "3. Hyperlinks to PDF files") ;; (find-pdf-like-intro "3. Hyperlinks to PDF files" "pdftotext") ;; Tests: ;; (find-pdf-text "~/Coetzee99.pdf" 3) ;; (code-pdf-text "livesofanimals" "~/Coetzee99.pdf") ;; (find-livesofanimalstext (+ -110 127) "wrong thoughts") ;; Try also this: ;; (find-extra-file-links "~/Coetzee99.pdf" "livesofanimals") ;; ;; 4. Test the links to videos ;; =========================== ;; The video links are explained here: ;; (find-videos-intro "2. Short links to eev video tutorials") ;; http://angg.twu.net/2021-video-links.html ;; ;; Basic tests for video links: ;; (delete-file (ee-expand "$S/http/angg.twu.net/eev-videos/2021-test-blocks.mp4")) ;; (brep "http://angg.twu.net/eev-videos/2021-test-blocks.mp4") ;; (delete-file (ee-expand "$S/http/angg.twu.net/eev-videos/2021-test-blocks.mp4")) ;; (find-video "$S/http/angg.twu.net/eev-videos/2021-test-blocks.mp4") ;; (find-video "$S/http/angg.twu.net/eev-videos/2021-test-blocks.mp4" "2:33") ;; ;; Test the way to download a video that beginners usually meet first: ;; (find-eevvideo-links "testbls" "2021-test-blocks" "fpsF_M55W4o") ;; ;; Test the short links to videos: ;; (code-video "testblsvideo" "$S/http/angg.twu.net/eev-videos/2021-test-blocks.mp4") ;; (find-testblsvideo) ;; (find-testblsvideo "2:33") ;; (find-angg ".emacs.videos" "testbls") (provide 'eev-on-windows) ;; Local Variables: ;; coding: utf-8-unix ;; no-byte-compile: t ;; End: