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.txt
which 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 <johndoegmail.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/html
Pertinent 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"`
end
and 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
end
ImageMagick
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