Emacs.
In file ~/.emacs
I have:
(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. '(blink-cursor-mode nil) '(inhibit-startup-screen t) '(save-place t nil (saveplace)) '(show-paren-mode t) '(tooltip-mode nil)) (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. '(default ((t (:inherit nil :stipple nil :background "ivory" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 106 :width normal :foundry "unknown" :family "DejaVu Sans Mono"))))) ;; set window geometry = size and position ;; do here instead with --geometry option in Xwindow call ;; to avoid the irritating superfluous gtk error message in Ubuntu 14.04 (add-to-list 'initial-frame-alist '(height . 38)) (add-to-list 'initial-frame-alist '(width . 78)) (add-to-list 'initial-frame-alist '(top . 1)) (add-to-list 'initial-frame-alist '(left . 1000)) ;RR = flush right ;; color theme (require 'color-theme) (color-theme-initialize) (color-theme-feng-shui) ;; take all bars off (get menu instead by CNTRL + rightclick) (tool-bar-mode -1) (menu-bar-mode -1) (scroll-bar-mode -1) ;; general settings (global-unset-key "\M-t") (global-unset-key "\C-z") ;; take out minimize to hidden ;; general settings copied from Han Uitenbroek (setq meta-flag t) ;; enable the Meta key (setq default-major-mode 'text-mode) ;; make text the default mode (setq require-final-newline t) ;; terminate the file with a newline (setq next-line-add-newlines nil) ;; don't add new lines at end (global-unset-key "\C-h") ;; don't want help (global-set-key "\M-n" 'goto-line) ;; faster goto line: ALT N (global-set-key "\M-h" 'help-command) ;; use M-h for help (global-set-key "\b" 'backward-delete-char) ;; restore backspace (setq-default case-fold-search nil) ;; make searches case sensitive ;; text mode for my own extensions and for mutt (setq auto-mode-alist (cons '("\\.jot$" . text-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.pln$" . text-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.man$" . text-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.idl\\'" . idlwave-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("mutt\\$" . text-mode) auto-mode-alist)) ;; IDLWAVE preferences for IDL (setq idlwave-shell-automatic-start t) ;; t = yes, nil = no (setq idlwave-shell-use-dedicated-frame t) (setq idlwave-shell-save-command-history t) (setq idlwave-shell-automatic-electric-debug nil) (setq idlwave-main-block-indent 0) ;; indentation of a pro body (setq idlwave-block-indent 2) ;; indentation of a begin-end subblock (setq idlwave-end-offset -2) ;; align the end with the begin (setq idlwave-continuation-indent 2) ;; indent a line after $ continuation (setq idlwave-max-extra-continuation-indent 10) ;; no far-right alignment (setq idlwave-special-lib-alist '("/rutten/idl/rridl/" . "rridl")) (setq idlwave-shell-debug-modifiers ;; H-c = compile (in separate shell) ;; (H = hyper, for me the redefined Windows key) (setq idlwave-no-change-comment ";") ;; don't change my comment layout (setq idlwave-expand-generic-end t) ;; convert END to ENDIF etc (setq idlwave-shell-frame-parameters ;; wide low frame for shell window (quote ((top . 400) (left . 50) (height . 20) (width . 140) (unsplittable)))) (add-hook 'idlwave-mode-hook (lambda () (idlwave-auto-fill-mode 0) ;; no auto filling )) (add-hook 'idlwave-shell-mode-hook (lambda () ;; custom mouse examine commands (click twice) (idlwave-shell-define-key-both [H-mouse-1] ;; print value(s) (idlwave-shell-mouse-examine "print,___")) (idlwave-shell-define-key-both [H-mouse-2] ;; print dimensions (idlwave-shell-mouse-examine "print, size(___,/DIMENSIONS)")) (idlwave-shell-define-key-both [H-mouse-3] ;; generic print/plot/play (idlwave-shell-mouse-examine "sv,___")) ;; sv = my routine to show variable )) ; cutout the annoying yes/no caveat at C-x C-c closure that there are ; still active processes running (namely in the **IDL** frame from IDLWAVE) (add-hook 'comint-exec-hook (lambda () (process-kill-without-query (get-buffer-process (current-buffer))))) ; comment/uncomment (global-set-key "\M-c" 'comment-region) ;; comment region (global-set-key "\M-u" 'uncomment-region) ;; uncomment region ;; insert date, from Han Uitenbroek (defun insert-date() "*insert the current date in the text buffer" (interactive) (insert (let ((now (current-time-string))) (concat (substring now 4 8) (substring now 8 11) (substring now 20) '" ")))) (global-set-key "\C-xd" 'insert-date) ;; C-x d (instead of dired) (global-set-key "\C-x\C-d" 'insert-date) ;; C-x C-d too ;; bibtex mode (autoload 'reftex-mode "reftex" "RefTeX Minor Mode" t) (autoload 'turn-on-reftex "reftex" "RefTeX Minor Mode" nil) (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ;; fill out (defun my-fill-sentence () "Fill sentence separated by punctuation or blank lines." (interactive) (let (start end) (save-excursion (re-search-backward "\\(^\\s-*$\\|[.?!]\\)" nil t) (skip-syntax-forward "^w") (setq start (point-at-bol))) (save-excursion (re-search-forward "\\(^\\s-*$\\|[.?!]\\)" nil t) (setq end (point-at-eol))) (save-restriction (narrow-to-region start end) (fill-paragraph nil)))) (setq normal-auto-fill-function 'my-fill-sentence) ;; redefine ESC q in .tex files = new-sentence-on-new-line paragraph reform ;; Modified from http://pleasefindattached.blogspot.com/2011/12/emacsauctex-sentence-fill-greatly.html (defadvice LaTeX-fill-region-as-paragraph (around LaTeX-sentence-filling) "Start each sentence on a new line." (let ((from (ad-get-arg 0)) (to-marker (set-marker (make-marker) (ad-get-arg 1))) tmp-end) (while (< from (marker-position to-marker)) (forward-sentence) ;; might have gone beyond to-marker---use whichever is smaller: (ad-set-arg 1 (setq tmp-end (min (point) (marker-position to-marker)))) ad-do-it (ad-set-arg 0 (setq from (point))) (unless (or (looking-back "^\\s *") (looking-at "\\s *$")) (LaTeX-newline))) (set-marker to-marker nil))) (ad-activate 'LaTeX-fill-region-as-paragraph)I start emacs sessions with a
csh
alias em
:
alias em 'env XMODIFIERS="@im=none" emacs --title !^ !^ &'
alias emtodo 'emacs -Q -D --title TODO -bg LightPink
-fn "-*-dejavu sans mono-*-*-*-*-*-106-*-*-*-*"
-fg black -geometry 78x40+250+50 ~/todo &'
Remote machine use without password. Great for fast
and unattended use of ssh
, scp
, and rsync
. Go to
(or mkdir) ~/.ssh
, type ssh-keygen -t dsa
, press enter
until you get the prompt again, skipping the requested passphrase,
then append the content of your newly made local file
~/.ssh/id_dsa.pub
into the remote file
~/.ssh/authorized_keys2
.
Remote backup. I use scripts as
#!/bin/csh # script: syncwork2server xhost + setenv RSYNC_RSH ssh rsync --delete -bvauz --backup-dir=~/syncbck-work ~/work machine.dept.univ.nl:/diskname/groupname/myusername | tee ~/synclogs/sync-work.txtwhich makes directory
~/work
on a large server disk elsewhere
identical to the directory ~/work
in my laptop, with
the files that are deleted or changed in the remote machine back-upped
into a directory syncbck-work
there and with a log of
rsync
's latest doings written in file
synclogs/sync-work.txt
in my laptop. I run such scripts daily
from a startup "good-morning" script wherever I am, to ensure that I
have an up-to-date and always reachable backup in a safer place than
my laptop whereabouts.
Mutt. For my mailing I was advised many years ago to transit
from elm
to less-sucking mutt
(http://www.mutt.org) and
have been happy with it ever since. It gives great flexibility in
cleaning out html duplicates and attachments and it stores mails as
straight text files that can easily be searched and edited. I use
mutt with msmtp serving to Google's gmail as IMAP server.
[Install: mutt], [install: msmtp],
[install: mp], add a file ~/.mutt_alias
with your aliases in
the form
alias doe John Doe <johndoe
gmail.com>
and a file ~/.muttrc
specifying your preferences, see
the mutt manual.
Pertinent parts of my .muttrc
(modified to John Doe where
appropriate):
source ~/.mutt_alias set sendmail="/usr/bin/msmtp -a google" set sendmail_wait=1 set imap_user = 'JohnDoe@gmail.com' set imap_pass = 'JohnDoegmailpassword' set spoolfile = imaps://imap.gmail.com:993/INBOX set folder = imaps://imap.gmail.com:993 set smart_wrap # wrap long lines at word boundary set pager_stop # Don't jump to next message at end of message set weed # weed headers, when forwarding with forward_decode set reverse_alias # use my person names through reverse alias lookup set from="J.Doe@JohnDoe.com" # always same sender wherever it comes form set use_from=yes set envelope_from=yes set connect_timeout=-1 ignore * unignore from date subject to cc # copy minimal headers in forwards color header black default . # I don't like color crowding color body black default . color quoted black default color attachment black default color tree black default color indicator black default color status black default color tilde black default color normal black default color hdrdefault black default color quoted black default color signature black default color error black default color tree black default color tilde black default color message black default color markers black default color attachment black default color search black default color underline black default color body black default "(ftp|http|https)://[^ ]+" # point out URLs color body black default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses macro index \cb "|urlview\n" "open url with urlview" macro pager \cb "|urlview\n" "open url with urlview" set use_8bitmime set abort_nosubject=ask-yes set abort_unmodified=no set alias_file="~/.mutt_alias" set allow_8bit set arrow_cursor unset askcc set attach_sep="\n" set attribution="On %d, %n wrote:\n" unset autoedit set auto_tag set bounce_delivered unset beep_new unset confirmappend unset confirmcreate set copy=yes set date_format="!%a, %b %d, %Y" set delete=yes set editor="emacs -nw --color=no" unset fcc_attach # do not save my own sent attachments set forward_decode set forward_format="%s [fwd]" set include=ask-no set index_format="%4C %Z %{%b %d %Y} %-15.15L (%4c) %s" set ispell="/usr/lib/ispell" set mail_check=120 set mime_forward=ask-no unset mime_forward_decode set move=no set postpone=yes # keep mails that weren't sent set postponed="~/mail/postponed" # go there with R (recover) set print=yes # no question whether to print just do it set print_command="/usr/bin/mp -a4 -left 60 | lpr -Pprintername" unset prompt_after set realname="John Doe" set recall=no set record="~/mail/sent" set reply_to=yes unset save_empty unset save_name set sort=reverse-date-sent set status_format="Mutt: folder %f Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? " set status_on_top bind pager <Up> previous-line # up-down cursoring within mail bind pager <Down> next-line # left-right = previous and next mails unset suspend set timeout=60 bind pager <Up> previous-line # cursor & page up/down, wheel in messages bind pager <Down> next-line auto_view text/htmlPertinent parts of my
~/.msmtprc
file:
# defaults defaults tls on tls_starttls on tls_certcheck off logfile ~/.msmtp.log # gmail account google host smtp.gmail.com port 587 auth on user johndoe@gmail.com password johndoegmailpasswordPertinent parts of my
~/.mailcap
file:
text/html; elinks %s; nametemplate=%s.html text/html; elinks -dump %s; nametemplate=%s.html; copiousoutput application/pdf; mutt_bgrun acroread -tempFile -openInNewWindow %s; test=sh -c 'test $DISPLAY' macro attach E <save-entry><kill-line>/home/johndoe/attachmentsdir/<enter> image/*; xv %s > /dev/null
Photos. I unload the SD-card of my camera by sticking it into the card reader of my laptop and using a script as:
#!/bin/csh # script: unloadcamera, thanks to Cees Bassa cd /media/*/DCIM cp -uprv *PANA ~/photos/camera/origs foreach dir (*PANA) cd $dir chmodopen chfil JPG jpg jhead -n%y%m%d-%H%M%S-%f -autorot *.jpg cd ~/photos/camera/origs end setenv TODAY `date "+20%y-%m-%d"` mkdir -p $TODAY mv *_PANA/* $TODAY rmdir *_PANA rm -rf /media/*/DCIM/\*where [install: jhead] is used to redefine photo filenames starting with date-time. They go into an
camera/origs
subdirectory
with the present unload date as name. I run similar scripts for other
cameras so that merging their files puts all photographs in sequential
time order (if the camera clocks were synchronous; in group travel one
should ask everybody to reset their camera to local time, but if this
was not done one can readjust the exif time stamps afterwards with the
jhead -ta
and jhead -da
options). Script chmodopen
resets directory and file protections in the current directory and
underneath to read permission for others:
#!/bin/sh # script: chmodopen, from Wim Lavrijsen chmod 755 . find . -maxdepth 10 -type f -exec chmod 644 {} \; find . -maxdepth 10 -type d -exec chmod 755 {} \;of which the reverse
chmodclose
has
chmod
settings 600 and 700. Script chfil
modifies
filenames in the current directory by replacing filename parts:
#!/bin/csh # script: chfil, by Alfred de Wijn foreach file (*$1*) mv ${file} `echo ${file} | sed -e "s|$1|$2|g"` endand has a counterpart
chfildeep
to do so also
in underlying directories:
#!/bin/csh # script: chfildeep, by Alfred de Wijn find . -mxdepth 10 -type f -name "*$1*" | sed -e "s/\(.*\)$1\(.*\)/mv \1$1\2 \1$2\2/" | bashAfter manually weeding out bad photos in the
origs
dir with
qiv
, I use the following script to produce XVGA (1024x768)
versions for spreading and projection in another directory:
!/bin/csh # file: cameraconvertall # usage: cameraconvertall dir/filenamestart foreach file (*.jpg) setenv FILETAIL `echo $file | sed -e "s|.jpg||"` convert -linear-stretch 0.1%x0.1% -sharpen 2.0x2.0 -geometry x768 -quality 90 $file ${1}${FILETAIL}-NS.jpg endImageMagick used by
convert
has lots of worthwhile commands, e.g.,
convert -sigmoidal-contrast
which emulates the nonlinear
growth-curve response of photographic emulsions that made my
Kodachrome slides span large contrasts much better than digital
projection does. For example, convert -sigmoidal-contrast 3,0%
brightens too dark objects.
I then use [Install: album] from
http://marginalhacks.com/Hacks/album
to generate linked albums like
my travel albums
and
the DOT solar image album
and
the DOT photograph album
with:
album -clean -index album.html -no_image_pages -no_embed
-geometry 300x300 -no_crop -columns 3 .
generating captions with a file captions.txt
.
Movies.
I use [Install: mpv] as versatile successor to mplayer
.
I call movies in pdflatex with (for example):
\def\movie{/home/USER/PATH-TO-MOVIE} \def\figs{/home/USER/PATH-TO-FIGS} \href{run:\movie/movie.mov} {\epsfig{file=\figs/movie-snap.jpg,width=180mm}}}where I obtain the linker image
movie-snap.jpg
as a snap
from album
. I also use album
to add .avi and .mov
versions of solar .mpg movies made with IDL from DOT image sequences
to the DOT movie album
with:
#!/bin/csh # script: dotmovie2album = convert .mpg movie into .avi and .mov # params: $1 = desired fps (f.s) playing rate, $2 = filename.mpg ffmpeg -sameq -i $2 $2:gr.avi avifix -f $1,1 -i $2:gr.avi ffmpeg -sameq -i $2:gr.avi $2:gr.mov mv $2:gr.avi ../dot-albums/movies mv $2:gr.mov ../dot-albums/movies cd ../dot-albums/movies album -clean -index album.html -no_embed -geometry 400x400 -no_crop -columns 2 .needing [install: ffmpeg] and [install: transcode] which contains
avifix
. They may need non-free codecs from the medibuntu repository:
sudo echo "deb http://packages.medibuntu.org/ jaunty free non-free" >> /etc/apt/sources.list sudo apt-get update && sudo apt-get install medibuntu-keyring && sudo apt-get update sudo apt-get install non-free-codecsThe
.mov
versions play even in the simplest
QuickTime players.
Grep manual. I often use a special alias rr
meaning
"Rob-asks-Rob-a-question":
alias rr 'grep \!^ ~/manuals/rrmanual.txt'
which answers my questions "rr some-term"
such as
"rr chmod"
.
File rrmanual.txt
has many one-liner linux reminders to myself,
including:
colors Ubuntu em /usr/share/texmf-texlive/tex/latex/graphics/dvipsnam.def xfontsel & select a font xlsfonts > fonts.fil write all font names to file chmod 644 file -rw- r-- r-- others may read (umask 022 default)) chmod 600 file -rw- --- --- others may not read file chmod 755 dir drwx r-x r-x others may enter (umask 022 default) chmod 755 script drwx r-x r-x others may execute chmod 700 dir drwx --- --- others may not enter dir chmod 744 script drwx r-- r-- others may read; I may execute chmod 444 file -r-- r-- r-- even I may read only, protection chmod 711 dir drwx --x --x others may enter but not list dir chmod root.root file reset to owner/group both root cp -uprv dirname dir > cp dirnamedir.txt copy update all, with log file convert -density 300 -quality 80 -crop 0x0 -geometry x768 file.ps file.jpg convert 'vid:*.jpg' directory.miff make thumbnail index album display directory.miff & show thumbnail index album gqview image browser, slide show qiv -fim *jpg fast image viewer, d=delete to subdir qiv -fis -d 1.5 *jpg fullscreen slide show 1.5s cadence feh fast image viewer eog eye-of-gnome image viewer jpeg2ps -h fig.jpg > fig.eps good image converter ps2pdf -dPDFsettings=/prepress file.ps file.pdf like acrodist psnup -2 file.ps > file2.ps 2A4-on-one pdf talk printout ps 612 792 <-> 595 842 (pt) hack ps to convert USA B4 <-> A4 ps x | grep processname list all processes called processname ifconfig check ethernet iwconfig check wireless recode ibmpc:latin1 file decode windows file to unix xset s off screensaver off screen (in remote terminal) = start window for remote processing CNTRL-a screen commando CNTRL-a c screen new terminal CNTRL-a space screen cycle terminal CNTRL-a d screen detach terminal (then log out of remote) screen -r screen recover detached terminal (after remote login) renice +18 pid put pid job in batch, sort of (eg when using screen) tar cvf *17Jul96.??? tar with joker/wildcard: xx.100-999 tar hcvf dir.tar dir tar dir with all under, also linked files tar xvf files.tar extract files into directory structure tar tf files.tar list files only wget -r http://etc get everyting below and above this URL wget -r -l 1 -nd http://etc get everything in this URL dir only lftp ftp://... or lftp http://... better than wget lftp mget -d * get all subdirs and files lftp mirror -n . get update with newer files only mgdiff file1 file2 linux: differences between two files diff -y -W170 --suppress-common-lines file1 file2 differences files aspell -t --dont-tex-check-comments check file.tex latex spell checker env TZ=UTC date give current date and time in UT