From bd9e6617827818fd043452c08c606f07b78014a0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdesdk@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- scripts/kde-emacs/kde-emacs-general.el | 179 +++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 scripts/kde-emacs/kde-emacs-general.el (limited to 'scripts/kde-emacs/kde-emacs-general.el') diff --git a/scripts/kde-emacs/kde-emacs-general.el b/scripts/kde-emacs/kde-emacs-general.el new file mode 100644 index 00000000..be34047c --- /dev/null +++ b/scripts/kde-emacs/kde-emacs-general.el @@ -0,0 +1,179 @@ +;; kde-emacs-general.el +;; +;; Copyright (C) 2002 KDE Development Team +;; +;; This library is free software; you can redistribute it and/or +;; modify it under the terms of the GNU Lesser General Public +;; License as published by the Free Software Foundation; either +;; version 2.1 of the License, or (at your option) any later version. +;; +;; This library is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; Lesser General Public License for more details. +;; +;; You should have received a copy of the GNU Lesser General Public +;; License along with this library; if not, write to the Free Software +;; Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA +;; 02110-1301 USA + +;;; Commentary: +;; + +;;; Code: + +(require 'kde-emacs-vars) + +;*---------------------------------------------------------------------*/ +;* Functions ... */ +;*---------------------------------------------------------------------*/ + +;; Helper for kde-file-get-cpp-h +(defun kde-find-file (filename basedir) + "Looks for \"filename\" under \"basedir\"" + (if basedir + (let ((path (concat basedir "/" filename))) + (if (file-readable-p path) + path)) + ) +) + +(defun kde-file-get-cpp-h () + "Function returns a corresponding source or header file. The returned +variable is a list of the form (FILENAME IS_READABLE) e.g. when being in +test.h file and having test.cpp file readable in the same directory it will +return (\"test.cpp\" t)." + (interactive) + (let* ((name (buffer-file-name)) + (nname (file-name-sans-extension name)) + (ext (file-name-extension name)) + (path nil) + (ret nil) + (listit nil)) + (cond + ((member ext kde-header-files) + (setq listit kde-source-files) + (while (and listit (not ret)) ; loop over the list but stop once ret is set + (setq path (concat nname "." (car listit))) + (if (file-readable-p path) + (setq ret (cons path t)) + ) + (if (not ret) + (if (string-match "_p$" nname) + (progn + (setq path (concat (substring nname 0 (string-match "_p$" nname)) "." (car listit))) + (if (file-readable-p path) + (setq ret (cons path t)) + ))) + ) + (if (not ret) + (progn ; look in kde-source-directory + (setq path (kde-find-file (file-name-nondirectory path) kde-source-directory)) + (if (and + path + (file-readable-p path)) + (setq ret (cons path t)) + )) + ) + (setq listit (cdr listit)) ; ++listit + ) + ; not found, will create one + (if (not ret) + (setq ret (cons (concat nname "." kde-prefered-source-extension) nil )) + )) + + ((member ext kde-source-files) + (setq listit kde-header-files) + (while (and listit (not ret)) ; loop over the list but stop once ret is set + (setq path (concat nname "." (car listit))) + ; look in current dir + (if (file-readable-p path) + (setq ret (cons path t))) + (if (not ret) ;check for header_p.h files + (progn (setq path (concat nname "_p." (car listit))) + (if (file-readable-p path) + (setq ret (cons path t))))) + (if (not (file-readable-p path)) + (progn ; look in kde-include-directory + (setq path (kde-find-file (file-name-nondirectory path) kde-include-directory)) + (if (and + path + (file-readable-p path)) + (setq ret (cons path t)) + )) + ) + (setq listit (cdr listit)) ; ++listit + ) + ; not found, will create one + (if (not ret) + (setq ret (cons (concat nname "." (car kde-header-files)) nil )) + )) + ) + ret + )) + +(defun kde-switch-cpp-h () + "Switches between the source and the header file +(both directions)." + (interactive) + (let ((file (kde-file-get-cpp-h))) + (if (car file) + (find-file (car file)) + (error "Corresponding source file doesn't exist.") + ) + )) + +(defun kde-delete-backward-ws () + "Function deletes all preceding whitespace characters." + (interactive) + (let ((start (point)) + end) + (save-excursion + (setq end (re-search-backward "[^ \t]" (point-at-bol) t)) + (if (not end) + (setq end (point-at-bol)) + (setq end (1+ end)))) + (delete-backward-char (- start end)))) + +(defun kde-skip-blank-lines () + "Skips backwards past blank lines, stopping +at a first non-blank line" + (let* ((start (point-at-bol)) + (end (point-at-eol)) + (mstring (buffer-substring start end)) + (ret 0)) + (while (or + (string-match "^[ \t\r\n]+$" mstring) + (and (string= mstring "") + (= ret 0))) + (setq ret (forward-line -1)) ; if ret != 0, we stop, since we're at the first line... + (setq start (point-at-bol) + end (point-at-eol)) + (setq mstring (buffer-substring start end)) + ) + )) + +(defun kde-comments-begin () + "Skip back from current point past any preceding C-based comments at the beginning of lines. +Presumes no \"/*\" strings are nested within multi-line comments." + (let ((opoint)) + (while (progn (setq opoint (point)) + ;; To previous line + (if (zerop (forward-line -1)) + (cond + ;; If begins with "//" or ends with "*/", then is a + ;; comment. + ((looking-at "[ \t]*\\(//\\|$\\)")) + ((looking-at ".*\\*/[ \t]*$") + (progn (end-of-line) + ;; Avoid //*** single line comments here. + (if (re-search-backward "\\(^\\|[^/]\\)/\\*" nil t) + (progn (beginning-of-line) + (looking-at "[ \t]*/\\*"))))) + (t nil))))) + (goto-char opoint) + ;; Skip past whitespace + (skip-chars-forward " \t\n\r\f") + (beginning-of-line))) + +(provide 'kde-emacs-general) -- cgit v1.2.1