Emacs: read-only copy of current buffer

Very often I split the emacs frame into two windows with the same buffer in both. For example on the left side I have a class definition and on the right side I implement it (so that part of the buffer is below the definition). While this works like a charm, sometimes I stumble upon an obstacle: if I want to change the class definition for testing, I cannot see the old definition for comparision. It has changed after all.

So I wrote this function which creates a copy of the current buffer, names it appropriately, makes it read-only, splits the current window and places the read-only copy on the right. Now I can see the old implementation while changing the current one, I can copy parts of the old stuff back into the current (because UNDO might remove some of the new things I want to keep) and so on. I bound this to C-c C-p, which you might want to change.

Here's the code. Put into .emacs to try it out:

;; ** Make a read-only copy of the current buffer
I just create a new read-only buffer and copy the contents of the
;; current one into it, which can be used as backup
(defvar copy-counter 0) (defun get-copy-buffer-name() "return unique copy buffer name" (let ( (name (concat "*COPY " (buffer-name (current-buffer)) " (RO)")) ) (if (not (get-buffer name)) (progn (setq copy-counter (1+ copy-counter)) (concat name "<" (number-to-string copy-counter) ">") ) (concat name) ))) (defun copy-buffer-read-only() "Create a read-only copy of the current buffer" (interactive) (let ( (old-buffer (current-buffer)) (new-buffer-name (get-copy-buffer-name)) ) (progn (delete-other-windows) (split-window-horizontally) (other-window 1) (if (not (eq (get-buffer new-buffer-name) nil)) (kill-buffer (get-buffer new-buffer-name)) ) (set-buffer (get-buffer-create new-buffer-name)) (insert-buffer-substring old-buffer) (read-only-mode) (switch-to-buffer new-buffer-name) (other-window 1) ))) (defalias 'cp 'copy-buffer-read-only) (global-set-key (kbd "C-c C-p") 'copy-buffer-read-only)

There's even a screenshot (the read-only copy can be seen on the right):

27.05.2016 16:32 CC0 emacs opensource Emacs Null Comment

Emacs: copy things at point without marking - Updated 12.02.2017 11:13

This emacs config snippet is the predecessor to viking-mode: it allows me to copy thing at point without marking it beforehand. I just press a prefix key followed by an abbreviation of the thing to copy:

  • C-c w   copy word
  • C-c l    copy line
  • C-c p   copy paragraph
  • C-c a   copy all (the whole buffer)

Like viking-mode the copied thing is being highlighted shortly for visual feedback.

Put this into your .emacs config to try it out:

;; ** Easily copy word, line, paragraph or buffer without marking
with ideas from:
;; http://emacs.stackexchange.com/questions/1051/copy-region-from-emacs-without-newlines
;; https://www.emacswiki.org/emacs/CopyWithoutSelection (defun my-blink(begin end) "blink a region. used for copy and delete" (interactive) (let* ((rh (make-overlay begin end))) (progn (overlay-put rh 'face '(:background "DodgerBlue" :foreground "White")) (sit-for 0.2 t) (delete-overlay rh) ))) (defun get-point (symbol &optional arg) "get the point" (funcall symbol arg) (point) ) (defun copy-thing (begin-of-thing end-of-thing &optional arg) "Copy thing between beg & end into kill ring. Remove leading and
trailing whitespace while we're at it. Also, remove whitespace before
column, if any. Also, font-lock will be removed, if any. Also, the
copied region will be highlighted shortly (it 'blinks')."
(save-excursion (let* ((beg (get-point begin-of-thing 1)) (end (get-point end-of-thing arg))) (progn (copy-region-as-kill beg end) (with-temp-buffer (yank) (goto-char 1) (while (looking-at "[ \t\n\r]") (delete-char 1)) (delete-trailing-whitespace) (delete-whitespace-rectangle (point-min) (point-max)) ;; del column \s, hehe
(font-lock-unfontify-buffer) ;; reset font lock
(kill-region (point-min) (point-max)) ) )))) (defun copy-word (&optional arg) "Copy word at point into kill-ring" (interactive "P") (my-blink (get-point 'backward-word 1) (get-point 'forward-word 1)) (copy-thing 'backward-word 'forward-word arg) (message "word at point copied")) (defun copy-line (&optional arg) "Copy line at point into kill-ring, truncated" (interactive "P") (my-blink (get-point 'beginning-of-line 1) (get-point 'end-of-line 1)) (copy-thing 'beginning-of-line 'end-of-line arg) (message "line at point copied")) (defun copy-paragraph (&optional arg) "Copy paragraph at point into kill-ring, truncated" (interactive "P") (my-blink (get-point 'backward-paragraph 1) (get-point 'forward-paragraph 1)) (copy-thing 'backward-paragraph 'forward-paragraph arg) (message "paragraph at point copied")) (defun copy-buffer(&optional arg) "Copy the whole buffer into kill-ring, as-is" (interactive "P") (progn (my-blink (point-min) (point-max)) (copy-region-as-kill (point-min) (point-max)) (message "buffer copied"))) ;; "speaking" bindings CTRL-[c]opy [w]ord, etc...
(global-set-key (kbd "C-c w") 'copy-word)
(global-set-key (kbd "C-c l") 'copy-line) (global-set-key (kbd "C-c p") 'copy-paragraph) (global-set-key (kbd "C-c a") 'copy-buffer)

Update 12.02.2017 11:13:

Sometimes during programming in emacs I need to copy a whole function. If a function contains empty lines, copy-paragraph is insuffcient. So, I added copy-defun, which copies the whole function (at point, that is, point must be inside the function). This works with almost all programming modes, as long as it implements beginning-of-defun and end-of-defun.

(defun copy-defun (&optional arg)
  "Copy function at point into kill-ring"
  (interactive "P")
  (my-blink (get-point 'beginning-of-defun) (get-point 'end-of-defun))
  (kill-ring-save (get-point 'beginning-of-defun) (get-point 'end-of-defun))
  (message "function at point copied"))

(global-set-key (kbd "C-c f")           'copy-defun)

27.05.2016 15:02 CC0 Emacs Null Comment

Emacs screen reader - novel mode

I'm using Xah's novel function for a couple of weeks and found myself enhancing it time and again. Today - yet another day on my way south using the train - I took the opportunity and made a separate mode of the stuff. The result is novel-mode and I'm quite satisfied with it so far.

Novel mode is a minor mode. It makes the current buffer quasi read-only, disabled all distractions (like widgets, mode-line etc), enlarges the font size, line spacing, adds a margin left and right and adds an one key key-map which makes it possible to make dynamic adjustments. There's a GIF demo on the github page. Here are some screenshots:

Bare bones emacs before novel mode is active:

Novel mode activated:

After pressing "h" or "?"

After pressing [right] a couple of times: margins increased

After pressing [+] a couple of times: font size increased

After pressing "i": video display inverted

While I wrote it mostly for myself, I published the mode on github anyway. So if you want to try it out: installation and configurations instructions can be found there.

24.05.2016 00:19 CC0 emacs opensource Emacs Null Comment

Emacs viking mode

While I'm a long term emacs user (since 2000), I did not write much emacs lisp over the years. In fact I kept my config unchanged for more than a decade. Happy and lazy, you see.

But lately I stumbled upon a lot of emacs enthusiasts like Sacha Chua. And so, a couple of weeks ago, I started to re-organize my .emacs config. I turned it into an outshine file for better overview, added a version, made it portable (now I use the very same config on Windows, Linux and FreeBSD with various emacs versions). Also I added LOTs of convenient stuff to my emacs. Some are external modules I discovered, some developed myself.

One of the things I added was expand-region, which I love! But I also wanted to be able to delete stuff the same way: just press a key and delete something, press it again and delete more, press it again and delete even much more until finally the whole buffer gets deleted. So I started to implement it on my own. And I learned a lot about lisp in the process. 

However, the code got bigger and bigger and I decided to put it into an extra file, but don't get me wrong: viking-mode is pretty small compared to other modes. While I was at it, I made a minor mode of it. This is not the first time, I created a mode, cisco-mode is my fabrication as well, but this time I tried to make it really good, conforming to all specs and guidelines. Finally my submission to melpa have been accepted and so here it is: my first minor mode on melpa: http://melpa.org/#/viking-mode.

The code itself is hosted on Github. And here is a small demo/screencast I made so you can see how it works:

A word about the name: I choosed this name because viking-mode just deletes things, you do not have to mark them, there's no "Are you sure?" annoyances. It is even possible to disable putting deleted stuff into the kill-ring (which would make it possible to yank it back somewhere). So - it just kills. Like a Viking, hence the name.

... denn Personal kostet Geld, wissen Sie - Updated 17.04.2016 23:43

Selten wird neoliberales Geschäftsebaren so offen sichtbar wie heute, als meine Pizzabestellung von "Joeys Pizza" geliefert wurde. Der Lieferbote unterbreitete mir das Angebot, dass ich bei der nächsten Bestellung irgendein Bonusessen kostenlos dazu bekommen würde. Wenn ich Online bestellen würde (ich hatte telefonisch bestellt). Er wiederholte das mehrmals und betonte, das bekäme man ausschliesslich bei Onlinebestellung, denn (Zitat):

Personal kostet Geld, wissen Sie.

Weiss ich. Und ich weiss auch, dass das der Sinn der Sache ist. Ich bezahle den Pizzaservice und der bezahlt davon die Menschen, die die Arbeit mit meiner Pizza hatten (die dafür sowieso viel zu wenig bekommen). Das schliesst den freundlichen Mensch am Telefon natürlich mit ein.

Und den will Joeys Pizza wohl einsparen. Hätte sich der Lieferant nicht verplappert, wäre mir das gar nicht aufgefallen. Womöglich, nein sogar recht sicher, hätte ich beim nächsten Mal tatsächlich online bestellt. Ist ja auch praktischer. Im Leben wäre mir nicht in den Sinn gekommen, dass ich damit meinen Beitrag zum Stellenabbau bei "Joeys Pizza" geleistet hätte.

Statt dessen werde ich dort weiterhin telefonisch bestellen.

Liebe Betreiber von "Joeys Pizza": wenn Ihr schon Leute auf die Strasse setzen wollt, dann habt gefälligst die Eier, denen die tatsächlichen Gründe ehrlich ins Gesicht zu sagen: Ihr wollt mehr Profit machen. Und nicht "Leider ruft kaum noch jemand an, sorry...".

Verdammts Gesocks. 

Update 17.04.2016 23:43:

Nachtrag zu "die Betreiber": ein US Konzern. Wer hätte das gedacht.

Was darf Satire?



Heute habe ich Emmerbrot gebacken, nach einem Rezept vom Brotdoc. Tatsächlich habe ich das neulich schonmal gemacht, dieses Mal ist es aber besser geworden. Mein erstes Brot! Schmeckt richtig lecker, unglaublich.

Das Rezept habe ich - Anfänger hin oder her, immerhin habe ich eine Kochausbildung! - trotzdem etwas abgeändert. Zum einen habe ich keinen Sauerteig mit Weizenanstellgut gemacht, sondern statt dessen mein Lievito Madre verwendet, das endlich mal verwendet werden wollte, und wesentlich weniger Hefe benutzt. Statt Weizenmehl beim Hauptteig habe ich Dinkelmehl genommen und ausserdem habe ich Sonnenblumenkerne, Hafer und Leinensamen reingemacht.

Sieht natürlich völlig anders aus, als beim Brotdoc, die Kruste ist etwas zu dunkel geworden, aber ich bin trotzdem stolz. Und das Brot geht weg wie warme Semmeln, sozusagen :) 

Bild: Emmerbrot
Emmerbrot (April 8, 2016, 8 p.m.)
[Tags: backen ] [Album: shots ]
Bild: Emmerbrot Aufgeschnitten
Emmerbrot Aufgeschnitten (April 8, 2016, 8 p.m.)
[Tags: backen ] [Album: shots ]

08.04.2016 19:51 CC0 backen Kochen Null Kommentar

Die Faschisten sind wieder da

Dass die AFD-Wähler deren Programm nicht gelesen haben liegt nicht etwa an mangelndem Interesse oder zu niedrigem IQ, sondern am Nichtvorhandensein eines solchen. Nun ist es geleakt und macht deutlich wes Geistes Kind diese Leute sind.

Mehr Überwachung und Repression, weniger EU, Abschaffung des Arbeitslosengeldes, Abschaffung der Erwerbs-, Grunderwerbs- und Gewerbesteuer, Familienpolitik im 30er Jahre Gustus, Verschärfung des Strafrechts, Herabsetzung des Alters für Strafmündigkeit auf 12 Jahre, Abschaffung des Asylrechts und Ignorieren der Genfer Konvention, Beendigung der Klimapolitik weil es den Klimawandel angeblich nicht gibt, Rückkehr zur Atomenergie, Waffenrecht nach US-Vorbild (aka: Bewaffnung der Bevölkerung), Abschaffung von "Multikulti", Abschaffung der Aufklärung in der Bildung (bzw Verschlimmerung der derzeit ohnehin schlimmen Bildungslage) und vieles mehr (mehr Details bei Rechtsanwalt Thomas Stadler). Und das sind nur die groben Stichpunkte.

Aber, könnte man fragen, hätte die AFD hätte die selben Ergebnisse erzielt, wenn diese Forderungen vorher bekannt gewesen wären? Allerdings waren sie das im Grunde bereits. Vielleicht nicht so schön zusammengeschrieben und zitierbar. Aber wenn man deren Reden verfolgt hat, wurde schon frühzeitig klar, dass es sich um erzreaktionäre Kräfte handelt. Insofern denke ich, hätte das am Wahlergebnis nichts geändert.

Die Frage ist, warum ich die AFD als "Faschisten" bezeichne. Nun - weil die AFD gut finanziert ist, eine Menge mächtiger und/oder reicher Leute machen da mit, manche offiziell, manche im Hintergrund. Eine "Bewegung von unten" wie uns die AFD gerne suggeriert, ist diese Organisation sicher nicht. Das erkennt man alleine daran, wie professionell die Partei aufgestellt und organisiert ist (zumindest im Gegensatz dazu wie das bei anderen jungen Parteien aussah, die "unten" entstanden sind, wie den Grünen oder den Piraten). Hier sind Politprofis am Werk. Die wissen präzise, welche Strippen sie ziehen müssen, um bei grossen Bevölkerungsteilen eine gewünschte Reaktion auszulösen.

Nazis sind "nur" fremdenfeindliche, gewaltbereite Arschlöcher. Davon gibt es in Deutschland hundertausende, in den 30ern waren es Millionen. Das sind die Leute, die den Vormarsch der Faschisten damals ermöglicht haben, das heisst, die jenigen die nachher von nichts gewusst haben wollen. Das exakt gleiche Prinzip kann man heute anhand der AFD erneut live beobachten. Diese Leute, die ich hier (absichtlich provozierend und vereinfachend, sicher) als Nazis bezeichne, führen ein Leben in Existenzangst, Zukunftsangst, Neid, zu grossen Teilen in Armut und sind zu einem sicher nicht unwesentlichen Teil nicht sonderlich gut gebildet. Deren reale Ängste kanalisieren sich in blinder Wut gegen diejenigen, die sich nicht wehren können - Flüchtlinge vor allem - ,  und nicht Zorn gegen die wahren Verursacher, das aktuelle Establishment - was sicher besser wäre - und an dieser Stelle greift die AFD zu und "holt die Leute ab".

Fatal ist das, weil die Leute so blind vor Wut sind, dass sie unzugänglich sind für Argumente, die von ausserhalb ihrer Kreise kommen. Ungemein nützlich für die AFD ist in dem Zusammenhang dann, dass deren Wähler herkömmliche Medien auch gar nicht mehr beachten - also genau die Richtung aus der Aufklärung kommen könnte. Confirmation Bias und kognitive Dissonanz bei der Arbeit.

Und so kann die AFD ihre Steigbügelhalter, mit deren Hilfe sie an die Macht zu kommen hofft, beliebig manipulieren und missbrauchen. Und es ist ein Missbrauch, so viel steht fest. Die allerwenigsten Punkte im Wahlprogram der AFD sind im Interesse ihrer Wähler.

Die Kombination von Geld, Macht und reaktionärer Politik auf Kosten Schwächerer ist die Definition von Faschismus. Im Moment sind die allermeisten Leute deswegen völlig entspannt, wenn man die Kommentare und Talkshows verfolgt. Es überwiegen Spott und Häme gegenüber der AFD. Ich finde es ist ein fataler Fehler, die AFD nicht als das ernst zu nehmen, was sie ist: ein Verein von Faschisten, die nichts weniger als Demokratie und Freiheit abschaffen wollen, um noch mehr Profit machen zu können. Rechte und Menschenleben sind diesen Leuten völlig gleichgültig.

Das ganze ist sehr beängstigend, auch aus anderen Gründen. Zum einen wäre da die von den bisherigen Regierungen kontinuierlich ausgebaute Totalüberwachung der Bevölkerung. Man kann sich gar nicht vorstellen, welchen Schaden eine AFD-Regierung mit diesen Daten anrichten könnte. Dass das ganze nicht aus der Luft gegriffen ist, zeigen Kommentare wie dieser, die Pegida-Anhnänger zu tausenden hinterlassen:

Deutsche, merkt euch die Namen derer die mit ihrem multikulti- und illegal einwandernden Fachkräfte-Bereicherungs-Wahn Deutschland in den Untergang treiben, Auch sie sollen demnächst die Zeche dafür zahlen.

Und man sollte auch einmal auf die Mimik der beteiligten Akteure achten, zum Beispiel dieses subtile, kaum vorhandene, hämische Grinsen einer Frauke Petry wenn sie mit kritischen Fragen konfrontiert wird, das man eigentlich nur als eines interpretieren kann: "Fragt Ihr nur. Ihr werdet schon sehen, was Ihr davon habt." Sie grinst wie jemand, der mehr weiss, als die Allgemeinheit, jemand "der den Plan kennt". Es ist dieses Grinsen, das den Faschisten in dieser Frau offenbart.

Ausserdem sei noch erwähnt, dass es auch bei uns nur eine Zweidrittelmehrheit in beiden Parlamenten braucht, um nach Belieben in der Verfassung herumschmieren zu können - Victor Orban hat es vorgemacht.

Die AFD muss bekämpft werden. Denn wenn wir heute nicht gegen den Vormarsch der AFD vorgehen, dann werden sehr dunkle Zeiten auf uns zukommen. Und ich meine UNS wörtlich, das wird nicht nur Flüchtlinge oder Fremde betreffen.

Aber es gibt Hoffnung, den vielen Menschen in Deutschland ist ziemlich klar, mit wem sie es zu tun haben:

Linux Paketmanager Horror

Haha, Fefe musste sich mit RPM beschäftigen und war not amused:

Oh und wer hat sich denn bitte das RPM-Dateiformat ausgedacht?! Was soll das werden? Soll das außerirdische Invasoren in den Wahnsinn treiben, damit sie nicht die Menschheit ausrotten können? Heilige Scheiße. Dagegen ist ja der Debian-Kram einleuchtend und selbsterklärend! Und selbstdokumentierend gar. Wie ein .deb funktioniert, kann man mit file und Hausmitteln rausfinden, man braucht nicht mal einen Hex-Editor.

LOL. Ich finde das Debianformat ja schon fürchterlich. Aber RPM schlägt dem Fass in der Tat den Boden aus.

Gott sei Dank muss ich mich mit solch einer Scheisse nicht beschäftigen, FreeBSD sei Dank! 

Bau der Fehmarnsundbrücke und Fährbahnhof Puttgarden von 1959 bis 1963

Eine faszinierende Dokumentation aus den frühen 60ern über den Bau der Fehmarnsundbrücke und den Fährhafen Puttgarden. Wirklich beeindruckend.

07.03.2016 21:19 CC0 fehmarn Gefunden 1 Kommentar