Emacs Tutorial: XEmacs Minibuffer (13.02.2002)

Auf meiner alten Homepage hatte ich im Februar 2002 begonnen, ein Tutorial zum XEmacs zu schreiben. Ich nannte das Ding "XEmacs Minibuffer" und habe damals einiges an Zeit darin investiert. Irgendwie erinnert mich der Text an das Tutorial. Warum ich damals XEmacs genutzt hatte, weiß ich nicht mehr. Entweder war es einfacher an Builds für Windows zu kommen oder die ganze Integration in das Betriebssystem war besser. Oder ich fand ihn einfach cooler.

Irgendwann habe ich zuletzt die alten Sicherungen der Seite gefunden und etwas melancholisch auf das alles geschaut. Am Ende hatte ich die Seite tatsächlich wie eine Linux Shell gestyled, diese Version finde ich aber nur noch im Web-Archiv. Ich habe auch lange auf den XEmacs Text geschaut und mich gefragt, was ich damit machen soll.

Ich habe mich für ein Weiterleben des Textes hier im Blog entschieden. Und möchte mit einem umgewandelten lateinischen Zitat enden: Wem nützt "Cui bono"?


Continue reading

Emacs pretty print JSON (if you have Python)

This short lisp example shows how to define a function that pretty prints your JSON selection in Emacs, based on a standard Python tool. …

My first regards go to the Irreal Blog and the author of Beautifying JSON In Emacs.

My second regards go to Trey Jackson who provided the example for the usage of "shell-command-on-region" (see the Stackoverflow post).

The key element is the "shell-command-on-region" function which calls a Python tool named "json.tool". This small tool beautifies your JSON. The code around is for replacing the selection with the output from the shell command.

USAGE: Mark your JSON text and call M-x pretty-print-json. The selection should be replaced with the beautified JSON.

GET IT: Put the code below to your emacs.el and adjust the path to python.exe. Irreal says Python > 2.6 is required.

WHY? The command provided by Irreal "C-u M-|" is impossible to type on German keyboard layouts. C-u Esc-AltGr-| is too long. Also Python.exe is not in my PATH and I have to type it down by hand (I could have adjusted my path as well) and remember the Python tool name.

;; pretty prints the selection on a json document
;; uses python.
;; adjust the python path and executable.
;; see http://stackoverflow.com/questions/1548605/emacs-lisp-shell-command-on-region
(defun pretty-print-json(&optional b e)
  (interactive "r")
  (shell-command-on-region b e "c:/Python27/python -m json.tool" (current-buffer) t)
)

Esri JavaScript API: map dijit and DOJO AMD

An example how to use DOJO AMD and aspect after on the map dijit. …

HTML (on.html):

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>map dijit and dojo amd</title>
    <style type="text/css">
    @import "//serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css";
    @import "//serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css";
    </style>
    <script type="text/javascript">
    dojoConfig = {
        isDebug:true,
        async:true
    };
    </script>
    <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script>
    <script type="text/javascript" src="on.js"></script>
</head>

<body class="claro">
    <div id="mapDiv" style="width:900px; height: 600px; border:1px solid #000; padding:0;"></div>
</body>

</html>​

JavaScript (on.js)

var map;

// esri/dijit/attribution: Unable to show map attribution. Did you forget to require 'esri.dijit.Attribution'?

require(["esri/Map", "dojo/parser", "dojo/on", "dojo/aspect", "esri/dijit/Attribution", "dojo/domReady!"],
    function(Map, parser, on, aspect) {
        parser.parse();
        var initExtent = new esri.geometry.Extent({
            "xmin" : -122.46,
            "ymin" : 37.73,
            "xmax" : -122.36,
            "ymax" : 37.77,
            "spatialReference" : {
                "wkid" : 4326
            }
        });
        var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer");
        map = new esri.Map("mapDiv", {
            extent : esri.geometry.geographicToWebMercator(initExtent)
        });
        map.addLayer(basemap);

        aspect.after(map, 'onLoad', function() {
            alert("Loaded");
        });
});