Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

alternative to (require ...)

18 views
Skip to first unread message

Sam Halliday

unread,
Feb 24, 2004, 11:32:51 AM2/24/04
to
hi there,

most of the 3rd party packages i have for emacs (such as color-theme, php-mode,
htmlize) are loaded in my ~/.emacs file by statements such as

(require 'htmlize)

but if this package is not installed on the system, emacs bails on loading the
rest of my ~/.emacs file. this is quite annoying as i like to maintain a single
~/.emacs file and use it wherever i am using emacs.

is there an alternative command i can use, which doesn't result in emacs crying
if it can't find the package? or at least if there is an "if exists" check i
could do and incorporate into a wrapper function, say called (requests ...)

cheers,
Sam
--
Free High School Science Texts
http://savannah.nongnu.org/projects/fhsst
Sam's Homepages
http://fommil.homeunix.org/~samuel
http://www.ma.hw.ac.uk/~samuel

Kevin Rodgers

unread,
Feb 24, 2004, 12:21:48 PM2/24/04
to
Sam Halliday wrote:

> most of the 3rd party packages i have for emacs (such as color-theme, php-mode,
> htmlize) are loaded in my ~/.emacs file by statements such as
>
> (require 'htmlize)
>
> but if this package is not installed on the system, emacs bails on loading the
> rest of my ~/.emacs file. this is quite annoying as i like to maintain a single
> ~/.emacs file and use it wherever i am using emacs.
>
> is there an alternative command i can use, which doesn't result in emacs crying
> if it can't find the package? or at least if there is an "if exists" check i
> could do and incorporate into a wrapper function, say called (requests ...)

(condition-case nil
(require 'foo)
(error nil))


--
Kevin Rodgers

Eli Zaretskii

unread,
Feb 24, 2004, 12:19:15 PM2/24/04
to help-gn...@gnu.org
> From: Sam Halliday <dev...@example.com>
> Newsgroups: gnu.emacs.help
> Date: Tue, 24 Feb 2004 16:32:51 +0000

>
> (require 'htmlize)
>
> but if this package is not installed on the system, emacs bails on loading the
> rest of my ~/.emacs file. this is quite annoying as i like to maintain a single
> ~/.emacs file and use it wherever i am using emacs.
>
> is there an alternative command i can use, which doesn't result in emacs crying
> if it can't find the package? or at least if there is an "if exists" check i
> could do and incorporate into a wrapper function, say called (requests ...)

Use condition-case. Here's an example:

(condition-case err
(require 'saveplace)
(error
(message "Cannot save places %s" (cdr err))))

Reiner Steib

unread,
Feb 24, 2004, 12:36:26 PM2/24/04
to
On Tue, Feb 24 2004, Kevin Rodgers wrote:

> Sam Halliday wrote:
>
>> most of the 3rd party packages i have for emacs (such as
>> color-theme, php-mode, htmlize) are loaded in my ~/.emacs file by
>> statements such as (require 'htmlize)

Often you can `autoload' some functions instead of requiring the whole
package.

> (condition-case nil
> (require 'foo)
> (error nil))

What's wrong with (require 'foo nil t)?

,----[ C-h f require RET ]
| require is a built-in function.
| (require FEATURE &optional FILENAME NOERROR)
|
| [...]
| If the optional third argument NOERROR is non-nil,
| then return nil if the file is not found instead of signaling an error.
`----

Bye, Reiner.
--
,,,
(o o)
---ooO-(_)-Ooo--- PGP key available via WWW http://rsteib.home.pages.de/

David Kastrup

unread,
Feb 24, 2004, 12:40:46 PM2/24/04
to
Sam Halliday <dev...@example.com> writes:

> most of the 3rd party packages i have for emacs (such as
> color-theme, php-mode, htmlize) are loaded in my ~/.emacs file by
> statements such as
>
> (require 'htmlize)
>
> but if this package is not installed on the system, emacs bails on
> loading the rest of my ~/.emacs file. this is quite annoying as i
> like to maintain a single ~/.emacs file and use it wherever i am
> using emacs.
>
> is there an alternative command i can use, which doesn't result in
> emacs crying if it can't find the package? or at least if there is
> an "if exists" check i could do and incorporate into a wrapper
> function, say called (requests ...)

(condition-case nil
(require 'htmlize)
(error (message "Skipping load of htmlize")))

--
David Kastrup, Kriemhildstr. 15, 44793 Bochum

Ole Laursen

unread,
Feb 24, 2004, 1:47:58 PM2/24/04
to
Sam Halliday <dev...@example.com> writes:

[...]

> but if this package is not installed on the system, emacs bails on
> loading the rest of my ~/.emacs file. this is quite annoying as i
> like to maintain a single ~/.emacs file and use it wherever i am
> using emacs.

I do the following in my .emacs:

(if (file-readable-p "~/.local-emacs")
(load "~/.local-emacs"))

Then I put the stuff that is specific for a particular site into
.local-emacs so that I can keep the .emacs files synchronised.

--
Ole Laursen
http://www.cs.auc.dk/~olau/

jasonr

unread,
Feb 24, 2004, 4:12:58 PM2/24/04
to
Sam Halliday <dev...@example.com> writes:

> (require 'htmlize)


>
> is there an alternative command i can use, which doesn't result in
> emacs crying if it can't find the package?

I use:

(if (require 'htmlize nil t)
(progn
;; htmlize specific settings here
))


Or if there are no htmlize specific settings, just

(require 'htmlize nil t)

Sam Halliday

unread,
Feb 24, 2004, 5:41:36 PM2/24/04
to
Jason Rumney wrote:
> (if (require 'htmlize nil t)
> (progn
> ;; htmlize specific settings here
> ))

thanks to everyone who has responded to this thread, you have all been a
great help!

this answer seems to be the most practical; i am away to update my
~/.emacs and see if i can make an equivalent if statement for the
(autoload...) packages :-)

0 new messages