Emacs + php-mode in windows

19 11 2009
My development machine is having Ubuntu and I love to use Emacs than any other editor. Recently I need to work on windows.  I wrote a blog post about how to make Linux like environment in windows. I wanted to use Emacs in windows. To install Emacs in windows I followed the instructions as it is from http://www.claremontmckenna.edu/math/alee/emacs/emacs.html

I want to work on PHP, so I need a php-mode for Emacs, otherwise it will be very difficult. I tried a lot to install php-mode in windows as specified at https://prajwalaa.wordpress.com/2009/03/19/using-emacs-to-edit-php-files/ but I was getting “error: `c-lang-defconst’ must be used in a file” error message. Finally after searching for long time I figured out how to enable php-mode.

I downloaded php-mode and extracted and placed in my C:\emacs directory. And added following lines in my C:\emacs\.emacs.d\init.el file

(add-to-list 'load-path "C:\emacs\php-mode")
;;(load 'php-mode)
(autoload 'php-mode "php-mode" "Major mode for editing php code." t)
(defun clean-php-mode ()
(setq c-basic-offset 2) ; 2 tabs indenting
(setq indent-tabs-mode nil)
(setq fill-column 78)
(c-set-offset 'case-label '+)
(c-set-offset 'arglist-close 'c-lineup-arglist-operators))
(c-set-offset 'arglist-intro '+) ; for FAPI arrays and DBTNG
(c-set-offset 'arglist-cont-nonempty 'c-lineup-math) ; for DBTNG fields and values
(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))
(add-to-list 'auto-mode-alist '("\\.inc$" . php-mode))

After adding above lines and save. I restarted emacs. Then Php-mode is working fine. Hope this will help others to install Emacs and enable php-mode.


Linux like development environment in Windows

6 11 2009

I am a fan of Linux based OS. I love Ubuntu a lot. In fact I started my programming in Redhat. So from the beginning I am comfortable using Linux than Windows. The only reason I use windows is to check IE browser compatability.

Recently I attended Drupal Sprint India 2009. I want to attend the sprint, so I need one Laptop to go there and work. My company provided me Laptop with Windows. So I need to work on drupal core issues in windows. Hmm it looks very hard for me to work in Windows. I want to have following things in my Windows machine.

  1. Cygwin to get the linux like terminal, so that I can see paths with forward slash.
  2. Xampp Lite to get Apache, Mysql, PHP.
  3. cvs, I am going to work on drupal core so I need it
  4. I should able to create patches, apply patches.
  5. I want to use Drupal Drush module, which provides some command line utilities
  6. Emacs. I am more comfortable with this editor. It is very hard to work with other editors once we are comfortable with Emacs

First I installed the things I know like Cygwin, Xampp Lite.

Installing Emacs

I Installed Emacs by following instructions at http://www.claremontmckenna.edu/math/ALee/emacs/emacs.html .

Installing UnxUtils

To be able create patches and apply patches I installed unxutils from http://sourceforge.net/projects/unxutils/ . With this unxutils I got most of the Linux commands. The commands like ls, mkdir, wget, diff, patch, tar, zip etc… are working. I am very happy after installing unixutils.
Installing UnxUtils is nothing but setting the path variable in Windows. I extracted the unixutils directory in C folder and Add C:\unixutils\usr\local\wbin path to the Path variable. In Windows XP we can set the Path variable by going to control panel > System > Advanced > Environment Variables. Select the Path and click Edit and add your path to the existing path.

Installing Drush

There is a documentation about installing Drush in Windows http://drupal.org/node/594744 . This document explain Drush installation by using GnuWin32. But I already installed UnxUtils so I don’t require GnuWin32. So first 3 steps in the http://drupal.org/node/594744 can be ignored. I extracted drush in C folder. As specified in the step 4 of http://drupal.org/node/594744 I edited drush.bat with the path of php.exe and path of drush.php. I added following statement in drush.bat file
@E:\xampplite\php\php.exe C:\drush\drush.php %1 %2 %3 %4 %5 %6 %7 %8 %9

Because I used xampplite to install php, php is there at path E:\xampplite\php\php.exe.Now I executed drush command from the windows terminal by specifying -r and -l attributes.
After that I got an idea why can’t I keep this php, drush paths also in path so that I can directly drush.bat file as it is. Yes I added php, drush, mysql paths in Windows Path variable. The everything works file.

Installing cvs

I downloaded TortoiseCVS from http://www.tortoisecvs.org/download.shtml. This is a exe file, I can simple double click and execute.

That’s it, Now I installed all the things necessary to work on drupal with a linux like environment. Now I am happy to work on windows.

Interesting css3 selectors nth-child, :target

5 11 2009

When I am reading the css documentation in W3c site. I met with some of the interesting selectors like nth-child and :target.

With the nth-child selector we can add different css for the even and odd elements. For example in a table we want to display different background color for the alternate rows. This we can do simply with the css. I used to write in the code to add odd class for the odd row, even class for even row using if conditions. This is really cool. We can see example at http://www.w3.org/Style/Examples/007/evenodd.

With the :target selector we can create a tabs view without using any javascript code. We can see an example at http://www.w3.org/Style/Examples/007/target

Unfortunately these selectors does not work with IE.  I was very happy by seeing these selectors but it IE disappointed me a lot.  Just because of IE  I need to write code to add different classes for the even and odd rows.  I tested with IE8 also but no luck, might need to wait till next release of IE. Just because of IE I can’t use these selectors.


Drupal Sprint India 2009

4 11 2009

I am a drupal developer, my drupal profile can be seen at http://drupal.org/user/43559. Drupal Sprint India 2009 event details can be found at location http://drupalindia2009.plug.org.in/namaste. From my organization 3 people attended this event. Asif (Project Manager), Chakrapani (Application Developer) and myself (Application Developer). I and Chakrapani attended this event to participate in the Sprint. Asif Participated in Talks and Workshops.

It is a nice experience to attend this event. Met cool people like Addison Berry, and had chance to share my views about drupal testing and documentation. Learned new things from her. It is really nice experience. With this event I started contributing to drupal core, which I love to do.

Through this sprint some of the drupal 6 modules are ported to drupal 7 and some new translations for the languages are added. Some of the patches are added.

Day 1

Took registration and attended the welcome session. After that went to participate in the sprint. This spirnt is headed by Addison Berry, Lead of drupal documentation project.

I wanted to work on drupal7 core issues, to work on core issues I read the documentation about how to set up the development environment, Review the patches etc.. before attending the sprint itself. I checked how people work on drupal7 core issues by joining the #drupal IRC channel.

For a practice I did some of the reviews for the drupal7 core issues, and added one patch for the admin_menu module which is committed to all versions of admin_menu module.

I tried to work on the drupal7 issues, but I noticed that some of the drush commands are not working well with drupal7 head. So decided to fix these issues of drush module and provide patch to drush module.

In the lunch time I introduced myself with Addison Berry and had good talk about the next plans of drupal documentation, drupal 7 release plan. Discussed about Drupal7 UI changes. Also Talked about plans about using bazaar for drupal and migration plans from cvs to bazaar. It is really a nice discussion. Addison Berry explained the complexities involved in implementing pathauto module for the documentation.

After lunch I talked with Addison berry about the samepage(http://samepage.in) product which I worked. Worked on drush module, Discussed with other guy about the best practices of themeing and drupal project development issues.


Morning I tried to finish my drush module task that I started yesterday, Finally it is a very small change added patch to the drush module.

After that had discussion with Addision Berry about how to properly maintain the our module code in cvs. Asked her about how multiple people work on same project when they are using cck, views. How to deploy code properly using update hooks. And also discussed about my views on drupal7 testing issues. She suggested me to contact other person who can give more input on testing. Took feedback from Addison Berry about my drupal module contributions, php contributions and jquery contributions.

After lunch I worked on porting my accordion_blocks module to drupal7, but noticied that there is a lot of change related to javascript api. Had talks with other guys who attended the sprint.

Finally came out from the event with good experiences and learnings.

Drupal:Displaying sub menus of primary link

23 10 2009

I want to display the sub menus of the currently accessing primary link as a block. Drupal provides Primary links, Secondary links blocks but does not display sub menus of currently accessing primary link.

When I search, I got following code snippet which lists the sub menus of currently accessing primary link. I directly created block using Add block by adding this php code snippet. It works a charm.

$tree = menu_tree_page_data('primary-links'); //substitute your menu name for primary-links
foreach($tree as $key => $mi) {
if ($mi['link']['in_active_trail'] && $tree[$key]['below']) {
$menu = menu_tree_output($tree[$key]['below']);
print $menu;

I hope this will help others to find easily.

Remove applied patch using patch command

23 10 2009

Today I am doing patch review of drupal7. I tested one patch, Now I want to remove this patch and go back to previous latest version of drupal. Unfortunately there is no cvs revert command which revert the files like in svn, bazaar, git etc..

I used same patch command to revert the applied patch.

I used following command to revert.

patch -p0 -R < patch_file_path.patch

In the above command -R option Assume patches were created with old and new files swapped. So it do the reverse operation of patch.

SVN: How to commit as a different user

23 09 2009

Today I spend some time to find out how to commit as a different user in SVN.

I did a checkout using svn+ssh by specifying username in the url for example svn+ssh://<username>@server/path/to/repos . The code was checkouted by user1, and this code can be accessed by user2. user2 edited some files and want to commit as user2. Every time when user2 is trying to commit, it is always asking the user1 password.

Actually if we use http or svn protocol, we can use –username attribute in the svn commit but this did not work for svn+ssh.

I tried by using –username, –no-auth-cache parameters in the svn commit but it does not work, always asking the user1 password.

After some time googleing, I went to svn IRC channel and asked there. Finally I am able to solve the problem by seeing the thread http://ubuntuforums.org/showthread.php?t=748131

1. We should change the svn root url to svn+ssh://server/path/to/repos. To change this I used svn switch command. I used following command.

svn --relocate switch svn+ssh://user1@server/path/to/repos svn+ssh://server/path/to/repo

2. Edit /home/user2/.subversion/config. Change the line that reads
#ssh = $SVN_SSH ssh to:

ssh = $SVN_SSH ssh -l <username>

<username> can be any user on the remote machine, but in my case it was user2.

That’s it from now on when I do commit it is asking user2 password.

The second step is not required if logged in username is same as svn+ssh username that you want to use. Suppose if you login to system as user2 and your svn server ssh username is also user2, then you can skip the 2nd step. It will ask user2 password when you try to commit.