~/.emacs
~/.emacs.desktopweb-mode
~/.emacsWe call ~/.emacs historically, but currently refers to one of the following files:
~/.emacs~/.emacs.el~/.emacs.d/init.elOriginally it was only the first one, but the .el was added because it needed a suffix and for offline search, and directory was dug for more storage space about Emacs.
One of them is valid in this order, not all of them. Now ~/.emacs.d/init.el is recommended.
~/.emacsIf you are using Emacs, the content may be added into ~/.emacs.d/init.el. For example:
(put 'narrow-to-region 'disabled nil) (put 'downcase-region 'disabled nil) (put 'upcase-region 'disabled nil) (put 'scroll-left 'disabled nil)
These are the lines added to the end of ~/.emacs because Emacs prompted us to turn on the feature when we was trying to execute a command that had the feature turned off for beginners.
~/.emacsIn addition, if you mess with variables as prompted by the Emacs customization feature, the following areas will be added to ~/.emacs.d/init.el.
(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(case-fold-search nil) '(js-indent-level 2) '(scroll-conservatively 1) ) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. )
It just says that if you manually edit here, you write it in such a simple format, and that more than ~/.emacs will not work even if there are the others.
~/.emacs.desktopI wrote “session save function” in the title, but it is a function called “emacs desktop save mode”, which allows you to resume from a previous session from ~/.emacs.d/.emacs.desktop for example, even if you quit Emacs and start it up again. This is very useful.
From the Emacs customizer, set Environment - Frames - Desktop - Desktop Save Mode to Enable, and a line '(desktop-save-mode t) will be added to the custom-set-variables.
You can then resume editing after logging back into the OS desktop by booting up and answering the prompts.
Useful key bindings for Emacs are summarized in detail (but not all) in the “Notes” section of the top navigation area. Here, I will describe the functions considering to describe there.
M-x toggle-case-fold-search … case-sensitive/not in searchM-x isearch-toggle-case-fold … case-sensitive/not in incremental searchM-x isearch-toggle-lax-whitespace … loose/strict whitespace in incremental searchM-x toggle-truncate-lines … truncate/not long linesM-x toggle-horizontal-scroll-bar … show/hide horizontal scroll barWe would like to keep the strict settings for 1 to 3 as default values, but it seems that only 1 is maintained by M-x menu-bar-options-save. 4 to 5 are workarounds when Emacs becomes heavy for editing a file that now has no possible line breaks, and you can also use the required horizontal scrolling. Then you may want ~/.emacs to have the following settings as well.
(global-set-key (kbd "<mouse-6>") 'scroll-right) (global-set-key (kbd "<mouse-7>") 'scroll-left) (global-set-key [wheel-left] 'scroll-right) (global-set-key [wheel-right] 'scroll-left)
In the old days, I also brushed ~/.emacs up and prepared shortcuts to make it easier to use. I think that beginners should devise such ideas for studying. However, when the environment is renewed or temporarily changed to another one, the stress of not being able to perform familiar operations is greater, so I will try to live in Emacs with the default values as much as possible. I did so.
The execution of the keyboard macro C-x e is two strokes, and the continuous execution C-x e e ... that was introduced later is often interrupted, so I assigned it to another key, but over time it violates the default value. I think it was necessary to have the courage to reset it once because it was assigned to F4 when I noticed it.
Therefore, in my Emacs environment, with such patience, only the setting that I say by all means survives. Here's an example of that:
web-modeLet us introduce web-mode into Emacs to make plain HTML editing comfortable. However, web-mode is not yet an Emacs standard and is not registered with the standard GNU ELPA package.
If you want to install elisp archived on a non-standard site like web-mode with a package manager, you need to add an archive site. Add the following to the beginning of ~/.emacs.d/init.el.
(when (require 'package nil t)
  (add-to-list 'package-archives '("melpa"		. "http://melpa.org/packages/") t)
  (add-to-list 'package-archives '("melpa-stable"	. "http://stable.melpa.org/packages/") t)
  (package-initialize)
)
I think it is better to put both melpa and melpa-stable, not just one. Because sometimes you can somehow infer the maturity of a package from both the repository tagging and the last update.
To use the Emacs package, mainly execute the following commands.
Even from the package management buffer or M-x package-install with web-mode, let us install the web-mode.el.
As for my situation, I am using both Emacs.app and Aquamacs.app, and I want to enable both of the installed elisp, so I will take the old-fashioned method without package management.
The personal location of elisp is defined as ~/.emacs.d/lisp here. Let Emacs know the directory. Write the following at the top of ~/.emacs.d/init.el.
(add-to-list 'load-path "~/.emacs.d/lisp")
Then let us place web-mode.el in ~/.emacs.d/lisp/ by terminal operations. It's a single file elisp, so it's easy.
% [ -d ~/.emacs.d/lisp ] || mkdir -p ~/.emacs.d/lisp % cd ~/.emacs.d/lisp/ && curl -ROL -C - https://raw.github.com/fxbois/web-mode/master/web-mode.el
web-modeHere are some shortcuts that I often use.
The great thing about web-mode is that it supports multiple languages. Unlike Emacs standard html-mode, web-mode allows you to press the enter key without hesitation even in style, script tags, Javascript, PHP, etc.
However, although it may not be the Emacs standard, I feel that the indentation style does not fit the current situation after HTML5 and Emacs conventions.
web-mode customizationTherefore, although it is my favorite setting, the indentation style should be set in consideration of the current situation after HTML5 and the practice of Emacs. If you follow HTML5 articles, sections, etc., it is not realistic to indent each tag, so leave it out and the other indents follow indentation level 2 in many other modes.
Add the following to ~/.emacs.d/init.el:
(defun local-web-mode-hook ()
  (setq web-mode-markup-indent-offset 0)
  (setq web-mode-css-indent-offset 2)
  (setq web-mode-code-indent-offset 2)
  (setq web-mode-part-padding 0)
  (setq web-mode-script-padding 0)
  (setq web-mode-style-padding 0)
  (setq web-mode-enable-auto-indentation nil)
  (setq web-mode-enable-block-face t)
  (setq web-mode-enable-element-content-fontification t)
  (setq web-mode-enable-element-tag-fontification t)
  (setq web-mode-enable-html-entities-fontification t)
  (setq web-mode-enable-part-face t)
  )
(when (require 'web-mode nil t)
  (add-hook 'web-mode-hook 'local-web-mode-hook)
  (add-to-list 'auto-mode-alist '("\\.\\(html?\\|css\\|js\\|php\\)\\'" . web-mode))
  )
*-face t and *-fontification t are about the appearance that there are many other, but were enabled to choose them that does not get in the way.
Even in an environment where web-mode is not installed, it will not stop due to an error.
The part where is written php is a “regular expression” for automatically setting the mode with the suffix of the file name, so add it as appropriate like PHP.
web-mode snippets extensionActually, I was worried that I could not do this. It did not work the setq in local-web-mode-hook above.
Well, it is the insertion of snippets by C-c C-s, although very useful, with respect to the HTML, there are only three, html5, table, ul. No, this alone is quite convenient, but let's push this convenience forward.
Define the following variables with ~/.emacs.d/init.el.
(setq web-mode-extra-snippets
      '((nil . (
		("html"		. "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<title></title>\n</head>\n<body>\n|\n</body>\n</html>")
		("html-lang"	. "<!doctype html>\n<html lang=\"|\">\n<head>\n<meta charset=\"utf-8\"/>\n<title></title>\n</head>\n<body>\n\n</body>\n</html>")
		("title"	. "<title>|</title>")
		("meta-charset"	. "<meta charset=\"|\"/>")
		("meta-viewport"	. "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>")
		("meta-IE=edge"	. "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"/>")
		("base-href"	. "<base href=\"|\"/>")
		("base-target"	. "<base target=\"_|\"/>")
		("template"	. "<template>|</template>")
		("slot"		. "<slot>|</slot>")
		("stylesheet"	. "<link rel=\"stylesheet\" href=\"|\"/>")
		("touch-icon"	. "<link rel=\"apple-touch-icon\" href=\"|\"/>")
		("touch-icon-precomposed"	. "<link rel=\"apple-touch-icon-precomposed\" href=\"|\"/>")
		("preload"	. "<link rel=\"preload\" href=\"|\" as=\"\" type=\"\" crossorigin=\"anonymous\"/>")
		("script-src"	. "<script src=\"|\"></script>")
		("style"	. "<style>\n|\n</style>")
		("script"	. "<script>\n|\n</script>")
		("noscript"	. "<noscript>\n|</noscript>")
		("header"	. "<header>\n|</header>")
		("footer"	. "<footer>\n|</footer>")
		("nav"		. "<nav>\n|</nav>")
		("aside"	. "<aside>\n|</aside>")
		("main"		. "<main>\n|</main>")
		("article"	. "<article>\n<section>|\n</section>\n<section>\n</section>\n</article>")
		("section"	. "<section>|\n</section>")
		("section-h2"	. "<section><h2>|</h2>\n<p></p>\n</section>")
		("section-h3"	. "<section><h3>|</h3>\n<p></p>\n</section>")
		("section-h4"	. "<section><h4>|</h4>\n<p></p>\n</section>")
		("h1"		. "<h1>|</h1>")
		("h2"		. "<h2>|</h2>")
		("h3"		. "<h3>|</h3>")
		("h4"		. "<h4>|</h4>")
		("h5"		. "<h5>|</h5>")
		("h6"		. "<h6>|</h6>")
		("h2-id"	. "<h2 id=\"|\"></h2>")
		("h3-id"	. "<h3 id=\"|\"></h3>")
		("h4-id"	. "<h4 id=\"|\"></h4>")
		("h5-id"	. "<h5 id=\"|\"></h5>")
		("h6-id"	. "<h6 id=\"|\"></h6>")
		("p"		. "<p>|</p>")
		("div"		. "<div>|</div>")
		("div-style"	. "<div style=\"|\"></div>")
		("div-align"	. "<div style=\"text-align: |;\"></div>")
		("div-align-left"	. "<div style=\"text-align: left;\">|</div>")
		("div-align-center"	. "<div style=\"text-align: center;\">|</div>")
		("div-align-right"	. "<div style=\"text-align: right;\">|</div>")
		("div-float"	. "<div style=\"float: |;\"></div>")
		("div-float-left"	. "<div style=\"float: left;\">|</div>")
		("div-float-right"	. "<div style=\"float: right;\">|</div>")
		("div-position"	. "<div style=\"position: |;\"></div>")
		("div-position-relative"	. "<div style=\"position: relative;\">|</div>")
		("div-position-absolute"	. "<div style=\"position: absolute;\">|</div>")
		("div-position-fixed"	. "<div style=\"position: fixed;\">|</div>")
		("div-position-sticky"	. "<div style=\"position: sticky;\">|</div>")
		("div-columns"	. "<div style=\"columns: 2;\">\n|</div>")
		("div-columns-p"	. "<div style=\"columns: 2;\">\n<p style=\"margin-top: 0;\">\n|</p>\n</div>")
		("hr"		. "<hr/>")
		("hr-clear-float"	. "<hr style=\"clear: both; border: 0; height: 0;\"/>")
		("details-summary"	. "<details>\n<summary>|</summary>\n</details>")
		("details-summary-right"	. "<details>\n<summary style=\"text-align: right;\">|</summary>\n</details>")
		("blockquote"	. "<blockquote>\n|</blockquote>")
		("pre"		. "<pre>\n|</pre>")
		("ol"		. "<ol>\n<li>|</li>\n<li></li>\n</ol>")
		("ul"		. "<ul>\n<li>|</li>\n<li></li>\n</ul>")
		("li"		. "<li>|</li>")
		("dl"		. "<dl>\n<dt>|</dt><dd\t></dd>\n<dt></dt><dd\t></dd>\n</dl>")
		("dt"		. "<dt>|</dt>")
		("dd"		. "<dd>|</dd>")
		("figure"	. "<figure>\n\n<figcaption>|</figcaption>\n</figure>")
		("figcaption"	. "<figcaption>|</figcaption>")
		("table"	. "<table>\n<caption>|</caption>\n</table>")
		("caption"	. "<caption>|</caption>")
		("thead"	. "<thead>\n<tr><th\t>|</th><th\t></th></tr>\n</thead>")
		("tbody"	. "<tbody>\n<tr><td\t>|</td><td\t></td></tr>\n</tbody>")
		("tfoot"	. "<tfoot>\n<tr><td\t>|</td><td\t></td></tr>\n</tfoot>")
		("colgroup/"	. "<colgroup |/>")
		("colgroup"	. "<colgroup>|</colgroup>")
		("col"		. "<col>|</col>")
		("tr"		. "<tr>|</tr>")
		("th"		. "<th>|</th>")
		("td"		. "<td>|</td>")
		("address"	. "<address>|</address>")
		("a"		. "<a>|</a>")
		("a-href"	. "<a href=\"|\"></a>")
		("a-href#"	. "<a href=\"#|\"></a>")
		("img"		. "<img src=\"|\"/>")
		("svg"		. "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"\" height=\"\" viewBox=\"\">\n|\n</svg>")
		("span"		. "<span>|</span>")
		("span-style"	. "<span style=\"|\"></span>")
		("code"		. "<code>|</code>")
		("u"		. "<span style=\"text-decoration: underline;\">|</span>")
		("strike"	. "<span style=\"text-decoration: line-through;\">|</span>")
		("s"		. "<s>|</s>")
		("ins"		. "<ins>|</ins>")
		("del"		. "<del>|</del>")
		("strong"	. "<strong>|</strong>")
		("tt"		. "<span style=\"font-family: monospace;\">|</span>")
		("b"		. "<span style=\"font-weight: bold;\">|</span>")
		("i"		. "<span style=\"font-style: italic;\">|</span>")
		("oblique"	. "<span style=\"font-style: oblique 20deg 45deg;\">|</span>")
		("big"		. "<span style=\"font-size: larger;\">|</span>")
		("small"	. "<small>|</small>")
		("font"		. "<span style=\"font-family: |;\"></span>")
		("left"		. "<div style=\"text-align: left;\">|</div>")
		("center"	. "<div style=\"text-align: center;\">|</div>")
		("right"	. "<div style=\"text-align: right;\">|</div>")
		("justify"	. "<div style=\"text-align: justify;\">|</div>")
		("em"		. "<em>|</em>")
		("site"		. "<site>|</site>")
		("q"		. "<q>|</q>")
		("dfn"		. "<dfn>|</dfn>")
		("dfn-title"	. "<dfn title=\"|\"></dfn>")
		("dfn-abbr"	. "<dfn><abbr>|</abbr></dfn>")
		("dfn-abbr-title"	. "<dfn><abbr title=\"|\"></abbr></dfn>")
		("abbr"		. "<abbr>|</abbr>")
		("abbr-title"	. "<abbr title=\"|\"></abbr>")
		("time"		. "<time>|</time>")
		("time-datetime"	. "<time datetime=\"|\"></time>")
		("var"		. "<var>|</var>")
		("samp"		. "<samp>|</samp>")
		("kbd"		. "<kbd>|</kbd>")
		("samp-kbd"	. "<samp><kbd>|</kbd></samp>")
		("kbd-samp"	. "<kbd><samp>|</samp></kbd>")
		("sub"		. "<sub>|</sub>")
		("sup"		. "<sup>|</sup>")
		("mark"		. "<mark>|</mark>")
		("bdo"		. "<bdo>|</bdo>")
		("bdo-dir"	. "<bdo dir=\"|\"></bdo>")
		("bdo-dir-rtl"	. "<bdo dir=\"rtl\">|</bdo>")
		("bdi"		. "<bdi>|</bdi>")
		("br"		. "<br/>")
		("wbr"		. "<wbr/>")
		("ruby"		. "<ruby>|</ruby>")
		("ruby-rt"	. "<ruby>|<rt></rt></ruby>")
		("ruby-rp"	. "<ruby>|<rp>(</rp><rt></rt><rp>)</rp></ruby>")
		("rt"		. "<rt>|</rt>")
		("rp"		. "<rp>(</rp><rt>|</rt><rp>)</rp>")
		("data"		. "<data>|</data>")
		("data-value"	. "<data value=\"|\"></data>")
		;(""	. "")
		("form-legend"	. "<form>\n<fieldset>\n<legend>|</legend>\n</fieldset>\n</form>")
		("fieldset-legend"	. "<fieldset>\n<legend>|</legend>\n</fieldset>")
		("form-fieldset"	. "<form>\n<fieldset>\n|</fieldset>\n</form>")
		("label"	. "<label>|</label>")
		("button"	. "<button\t>|</button>")
		("input-type"	. "<input type=\"|\"\t/>")
		("input-submit"	. "<input type=\"submit\"\t/>")
		("input-reset"	. "<input type=\"reset\"\t/>")
		("input-hidden"	. "<input type=\"hidden\"\t/>")
		("input-button"	. "<input type=\"button\"\t/>")
		("input-radio"	. "<input type=\"radio\"\t/>")
		("input-checkbox"	. "<input type=\"checkbox\"\t/>")
		("input-text"	. "<input type=\"text\"\t/>")
		("input-search"	. "<input type=\"search\"\t/>")
		("input-tel"	. "<input type=\"tel\"\t/>")
		("input-url"	. "<input type=\"url\"\t/>")
		("input-email"	. "<input type=\"email\"\t/>")
		("input-password"	. "<input type=\"password\"\t/>")
		("input-month"	. "<input type=\"month\"\t/>")
		("input-week"	. "<input type=\"week\"\t/>")
		("input-time"	. "<input type=\"time\"\t/>")
		("input-datetime-local"	. "<input type=\"datetime-local\"\t/>")
		("input-number"	. "<input type=\"number\"\t/>")
		("input-range"	. "<input type=\"range\"\t/>")
		("input-color"	. "<input type=\"color\"\t/>")
		("input-file"	. "<input type=\"file\"\t/>")
		("input-image"	. "<input type=\"image\"\t/>")
		("select"	. "<select>\n<option\t>|</option>\n<option\t></option>\n</select>")
		("select-group"	. "<select>\n<optgroup><option\t>|</option>\n<option\t></option>\n</optgroup></select>")
		("textarea"	. "<textarea>|</textarea>")
		("progress"	. "<progress>|</progress>")
		("meter"	. "<meter>|</meter>")
		("menu"		. "<menu>|</menu>")
		("output"	. "<output>|</output>")
		("dialog"	. "<dialog>|</dialog>")
		;("command"	. "<command>|</command>")
		;
		("iframe"	. "<iframe|></iframe>")
		("embed"	. "<embed|></embed>")
		("embed-src"	. "<embed|></embed>")
		("object"	. "<object|></object>")
		("param"	. "<param|/>")
		("canvas"	. "<canvas|></canvas>")
		("video"	. "<video|></video>")
		("video-src"	. "<video|></video>")
		("audio"	. "<audio|></audio>")
		("audio-src"	. "<audio|></audio>")
		("picture"	. "<picture>|</picture>")
		("source"	. "<source|/>")
		("track"	. "<track|/>")
		("map"		. "<map>|</map>")
		("area"		. "<area|></area>")
		;
		("@import-url"	. "@import url(\"|\");")
		("@media-screen"	. "@media screen {\n|\n}")
		("@media-print"	. "@media print {\n|\n}")
		("@media-speech"	. "@media speech {\n|\n}")
		; Javascript
		("js-addEvLoad"	. "window.addEventListener('DOMContentLoaded', function() {\n|});")
		)))
	)
Adding snippets is complemented by tab key, so it is efficient to select them even if you remember them. Above, I have prepared a group of snippets that consider HTML5, HTML Living standard and obsolete tags.
“ps-print.el” in Emacs/Mule 20.7 can handle BDF fonts and builtin PostScript fonts for multilingual printing. For CJK (Chinese, Japanese and Korean) users, I introduce an example of ~/.emacs to print multi-byte buffer with ps-print.el.
~/.emacs to print multi-byte buffer for ps-print.el - CJK outline and others BDF fonts“C-u M-x ps-print-buffer” generates a PostScript file of buffer.