Wednesday, July 25, 2007

Predefined Macros in gcc

gcc (well cpp, the preprocessor) provides several predefined macros. Many of these are platform independent, for instance __FILE__ and __LINE__. Others are platform dependent (or "system-specific" as the gcc manual puts it). So how do you know what your particular platform defines? Try this:
cpp -dM /dev/null I stumbled across this trick the other day on Apple's mailing lists archives.

Linux Kernel Threads Can Have Priorities and Can Dereference current

My memory failed me on some points of kernel threads today so hopefully this post will solidify my knowledge.
  • Kernel threads can have a priority via the "nice" mechanism. It is set using set_user_nice(tsk, nice_level), just as for userspace processes/threads.
  • As a consequence of the above point, kernel threads have a task structure and it may be referred to by the current pointer, again, the same as is the case with userspace processes/threads.
set_user_nice() should be called from within the task callback function supplied to kthread_create().

Friday, July 20, 2007

"Real HTML" in blogger

Ok, first things first... If you're a control freak like I am and want to actually use "real" HTML (tables, div, etc.) in your posts to blogger, the first thing you should do is disable the automatic conversion of line breaks to the <br /> tag.

Of course, then you'll have to explicitly add <br /> tags to format your posts, but at least then you won't waste an hour trying to figure out why your tables look atrocious. (Not that I did that or anything ;)

To do this, log in, hit the "Settings" tab, then the "Formatting" tab, then set "Convert Line Breaks" to "No".

In other words "Settings"->"Formatting"->"Convert Line Breaks" = "No".

Thursday, July 19, 2007

Emacs Notes

This is my general emacs knowledge base. Some of these keys/features I use everyday others I always forget about, hence the existence of these notes.

//           When opening (visiting) a file (C-x C-f), disregards everything before //
M-\          Kills whitespace pointed to by point
M-^          Merge the current line with previous line (taking away whitespace)
C-x C-x      swap mark and point
C-space      set new mark
C-u C-space  goto next mark in ring
C-M-space    mark to end of paren
C-t          transpose two chars
M-t          transpose two words
C-M-t        transpose two balanced expressions
C-M-f        move forward one balanced expression
C-M-b        move backward one balanced expression
C-M-k        kill balanced expression forward
C-M-<del>    kill balanced expression backward
C-x C-t      transpose two lines
M-m          move to first non-whitespace on line
C-c C-e      in C-mode expands macros into new buffer
C-M-q        toggle-read-only
C-x w h      highlight a regexp
C-x w r      unhighlight a regexp
M-x find-file-at-point Opens file at point
M-x apropos  Find an emacs command based on regexp
M-x woman    Advanced manual page browser
C-x >        scroll right
C-x <        scroll left
C-x C-+      Increase font size
C-X C--      Decrease font size

C-x n d      Narrow to defun  (one C-function)
C-x n n      Narrow to region
C-x n w      widen

M-s          Search minibuffer history forward
M-r          Search minibuffer history backward

Kill Ring
C-h v kill-ring    View contents of kill ring
C-u C-y            Yank, but leave point at beginning of yanked text

TAGS (old tags)
M-. TAG            Find a TAG
C-u M-.            Find next TAG
C-M-. PATTERN      Find a TAG using regexp PATTERN
C-x 4 . TAG        Find a tag but put in another window
M-*                Pop back to where you invoked a TAG search
M-x tags-search    Search multiple files for regexp
M-,                Continue tags search
M-x list-tags FILE Lists all tags in a file
M-x tags-apropos   Lists all tags matching a regexp

M-. TAG                find TAG
M-? TAG                find all references to TAG
[f3] TAG               create TAG completion list "global -c TAG"
M-x gtags-symbol-find  find a symbol (similar to [f6])

M-x ps-spool-region-with-faces
M-x desktop-read
M-x desktop-save

M-a  backward statement
M-e  forward statement
C-M-u  up conditional (block)
C-M-d  down conditional (block)
C-M-n  next conditional (block)
C-M-p  prev conditional (block)
C-c C-a  Toggle Autonewline minor mode
C-c C-d  Toggle Hungry Delete minor mode
C-c C-t  Toggle both Autnewline and Hungry Delete minor modes
C-c C-\  Add \'s to a region for multi-lined macros
C-u C-c C-\  Remove \'s from multi-line macros
M-q  In a C comment, wrap text appropriately.
M-j  Add a line break in a comment.
C-x `  go to next compilation error

(to enter)
C-x d                Enter dired mode
C-x f [tab] [enter]  Enter dired mode while visiting file
(once in)
i                    Show contents of directory at point
g                    Update buffer (reread directory from disk)
d                    Mark file at point for deletion ('D' not '*')
u                    Ummark file at point
x                    Delete (expunge) files marked for deletion
% d <regexp>         Mark files for deletion matching regexp
% m <regexp>         Mark files matching regexp
% g <regexp>         Mark all files which contain regexp (like grep)
[del]                Unmark move point up one line
[enter]              Visit file at point
f                    Visit file at point (Same as [enter])
e                    Visit file at point (Same as [enter])
o                    Visit file at point in other window
C-o                  Visit file at point in other window, but stay in dired window
v                    View file at point (read only, q to quit)
^                    Move up to parent directory (..)
m                    Mark a file (with '*' not 'D')
* s                  Mark all files in current dired window
* t                  Toggle marked files (unmark all marked, mark all unmarked)
* %                  Same as  % m <regexp>  above
* !                  Unmark all marked
* /                  Mark all directories except . and ..
C <name>             Copy current file, see manual for multiple files (marked files)
R <name>             Rename current file, see manual for multiple files
M <mode>             Change mode of file(s) (uses chmod modes)
G <newgroup>         Like chgrp
O <newowner>         Like chown
S <name>             Make symbolic link
Z                    Compress marked files (or uncompress if compressed)
! <cmd>              Run shell command <cmd> on all marked files.  If <cmd> contains '*', '*' expands to all marked files
X <cmd>              Same as ! <cmd>
% R <from> <to>      Use regular expression to rename file ^.*$ to x-^.*$ adds "x-" to all marked files
% C <from> <to>      Use regular expression to copy file ^.*$ to x-^.*$ makes new files with "x-"
% S <from> <to>      Use regular expression to symlinks files ^.*$ to x-^.*$ adds "x-" to all symlinks
q                    Quit (kill dired buffer)
=                    diff files at point and mark (uses dired-diff as command)
M-=                  diff file at point with it latest backup (.*~)
C-x u                (undo, unmark all marked, restore names of renamed files)
M-x find-dired       Use the 'find' command to fill dired buffer
M-x find-name-dired  Use the 'find' command employing -name to fill dired buffer
M-x find-grep-dired  Use the 'find' command with grep to fill dired buffer
M-x locate           Similar to 'locate' command

VC (clearcase.el)
C-x C-q              Toggle read-only on non-version controlled element
                   Checkout or checkin (whatever makes sense) version controlled element
C-x v v              Checkout or checkin (whatever makes sense) version controlled element
C-x v ~ <version>    View a specific version of a file (dired mode kicks in on tab)
C-x v i              Runs mkelem on current buffer (NOT TESTED!)
C-x v l              Display history on current buffer
C-x v u              Revert element (uncheckout current buffer)
C-x v e              Edit config spec
C-c C-c              Finishes a comment session (on checkin or checkout)
v v                  (In dired mode) Checkout or checkin all marked files (whatever makes sense for each file)

Emacs server/client
(server-start)       Starts emacs server. Clients connect with emacsclient command.
C-x #                Unblock emacsclient and kill emacsclient buffer
EDITOR               (Environment variable, set this to emacsclient)
ALTERNATE_EDITOR     (Environment variable, set to a different editor if emacs server not running)

International input mode
C-\                  Enter\Get out of international input mode.
_a                   1ª (feminine ordinal)
_o                   1º (masculine oridinal)
~c                   ç (ce com cedilha)
~a                   ã,õ - nasals
^a                   â,ô,ê - circumflex (hat)
'a                   á,é,í,ó,ú, - accent (acento agudo)
`a                   à - grave accent (acento grave)

Environment Variables
M-x getenv
M-x setenv

GDB mode
C-x space            Set breakpoint at point
M-s                  step
M-n                  next
M-i                  stepi
M-c                  continue

M-x occur <RET> REGEXP <RET>        Lists in a buffer all lines matching REGEXP
M-x how-many <RET> REGEXP <RET>     Shows how many lines match REGEXP
M-x flush-lines <RET> REGEXP <RET>  Filter out lines matching REGEXP
M-x keep-line <RET> REGEXP <RET>    Filter out all lines not matching REGEXP 

C-x r k              Kill a rectangle
C-x r y              Yank a rectangle
C-x r d              Delete contents of a rectangle
C-x r o              "open" a rectangle, inserts spaces the same size as the rectangle
C-x r t string       Replace contents of a rectangle with string
C-x r c              Clears a rectangle (replaces with spaces)