#!/bin/bash EMACSCLIENT_OPTIONS="-n " # -c --eval (toggle-frame-maximized)" if [ "$1" = "-t" ] then EMACSCLIENT_OPTIONS="-t" shift fi GDB_COMMAND=$(echo $1 | xargs which | sed -e 's|//|/|g') if [ "x${GDB_COMMAND}" == "x" ] then echo "Unknown program to debug" exit 1 fi BIN_NAME=$(basename ${GDB_COMMAND}) if [ ${BIN_NAME} == "clang" ] then CC_COMMAND=$($@ -### 2>&1 | grep '\-cc1') exec gud ${CC_COMMAND} fi BIN_DIR=$(dirname $GDB_COMMAND) shift for arg in "$@" do RAW_ARG=$(echo ${arg} | sed -e 's/"//g') GDB_COMMAND_ARGS="${GDB_COMMAND_ARGS} \\\"${RAW_ARG}\\\"" done GDB_OPTIONS="-i=mi -cd $PWD" if [ -e "$BIN_DIR/.gdbinit" ] then GDB_OPTIONS="${GDB_OPTIONS} -command $BIN_DIR/.gdbinit" fi exec emacsclient ${EMACSCLIENT_OPTIONS} --eval "(if (and (boundp 'gud-comint-buffer) gud-comint-buffer (buffer-name gud-comint-buffer) (get-buffer-process gud-comint-buffer)) (progn (gdb-restore-windows) (with-current-buffer gud-comint-buffer (goto-char (point-max)) (insert \"cd $PWD\") (comint-send-input) (insert \"set args ${GDB_COMMAND_ARGS}\") (comint-send-input))) (gdb \"gdb ${GDB_OPTIONS} --args ${GDB_COMMAND} ${GDB_COMMAND_ARGS} \"))" --eval '(select-frame-set-input-focus (selected-frame))'